1906943f9SDavid du Colombier typedef struct Usbfs Usbfs; 2906943f9SDavid du Colombier typedef struct Fid Fid; 3906943f9SDavid du Colombier 4906943f9SDavid du Colombier enum 5906943f9SDavid du Colombier { 6906943f9SDavid du Colombier Hdrsize = 128, /* plenty of room for headers */ 7*3a827ddcSDavid du Colombier Msgsize = 8216, /* our preferred iounit (also devmnt's) */ 8906943f9SDavid du Colombier Bufsize = Hdrsize + Msgsize, 9906943f9SDavid du Colombier Namesz = 40, 10906943f9SDavid du Colombier Errmax = 128, 11906943f9SDavid du Colombier ONONE = ~0, /* omode in Fid when not open */ 12906943f9SDavid du Colombier }; 13906943f9SDavid du Colombier 14906943f9SDavid du Colombier struct Fid 15906943f9SDavid du Colombier { 16906943f9SDavid du Colombier int fid; 17906943f9SDavid du Colombier Qid qid; 18906943f9SDavid du Colombier int omode; 19906943f9SDavid du Colombier Fid* next; 20906943f9SDavid du Colombier void* aux; 21906943f9SDavid du Colombier }; 22906943f9SDavid du Colombier 23906943f9SDavid du Colombier struct Usbfs 24906943f9SDavid du Colombier { 25906943f9SDavid du Colombier char name[Namesz]; 26906943f9SDavid du Colombier uvlong qid; 27906943f9SDavid du Colombier Dev* dev; 28906943f9SDavid du Colombier void* aux; 29906943f9SDavid du Colombier 30906943f9SDavid du Colombier int (*walk)(Usbfs *fs, Fid *f, char *name); 31906943f9SDavid du Colombier void (*clone)(Usbfs *fs, Fid *of, Fid *nf); 32906943f9SDavid du Colombier void (*clunk)(Usbfs *fs, Fid *f); 33906943f9SDavid du Colombier int (*open)(Usbfs *fs, Fid *f, int mode); 34906943f9SDavid du Colombier long (*read)(Usbfs *fs, Fid *f, void *data, long count, vlong offset); 35906943f9SDavid du Colombier long (*write)(Usbfs *fs, Fid*f, void *data, long count, vlong offset); 36906943f9SDavid du Colombier int (*stat)(Usbfs *fs, Qid q, Dir *d); 37906943f9SDavid du Colombier void (*end)(Usbfs *fs); 38906943f9SDavid du Colombier }; 39906943f9SDavid du Colombier 40906943f9SDavid du Colombier typedef int (*Dirgen)(Usbfs*, Qid, int, Dir*, void*); 41906943f9SDavid du Colombier 42906943f9SDavid du Colombier long usbreadbuf(void *data, long count, vlong offset, void *buf, long n); 43906943f9SDavid du Colombier void usbfsadd(Usbfs *dfs); 44906943f9SDavid du Colombier void usbfsdel(Usbfs *dfs); 45906943f9SDavid du Colombier int usbdirread(Usbfs*f, Qid q, char *data, long cnt, vlong off, Dirgen gen, void *arg); 46906943f9SDavid du Colombier void usbfsinit(char* srv, char *mnt, Usbfs *f, int flag); 47906943f9SDavid du Colombier 48906943f9SDavid du Colombier void usbfsdirdump(void); 49906943f9SDavid du Colombier 50906943f9SDavid du Colombier extern char Enotfound[]; 51906943f9SDavid du Colombier extern char Etoosmall[]; 52906943f9SDavid du Colombier extern char Eio[]; 53906943f9SDavid du Colombier extern char Eperm[]; 54906943f9SDavid du Colombier extern char Ebadcall[]; 55906943f9SDavid du Colombier extern char Ebadfid[]; 56906943f9SDavid du Colombier extern char Einuse[]; 57906943f9SDavid du Colombier extern char Eisopen[]; 58906943f9SDavid du Colombier extern char Ebadctl[]; 59906943f9SDavid du Colombier 60906943f9SDavid du Colombier extern Usbfs usbdirfs; 61906943f9SDavid du Colombier extern int usbfsdebug; 62