1*906943f9SDavid du Colombier typedef struct Usbfs Usbfs; 2*906943f9SDavid du Colombier typedef struct Fid Fid; 3*906943f9SDavid du Colombier 4*906943f9SDavid du Colombier enum 5*906943f9SDavid du Colombier { 6*906943f9SDavid du Colombier Hdrsize = 128, /* plenty of room for headers */ 7*906943f9SDavid du Colombier Msgsize = 8 * 1024, 8*906943f9SDavid du Colombier Bufsize = Hdrsize + Msgsize, 9*906943f9SDavid du Colombier Namesz = 40, 10*906943f9SDavid du Colombier Errmax = 128, 11*906943f9SDavid du Colombier ONONE = ~0, /* omode in Fid when not open */ 12*906943f9SDavid du Colombier }; 13*906943f9SDavid du Colombier 14*906943f9SDavid du Colombier struct Fid 15*906943f9SDavid du Colombier { 16*906943f9SDavid du Colombier int fid; 17*906943f9SDavid du Colombier Qid qid; 18*906943f9SDavid du Colombier int omode; 19*906943f9SDavid du Colombier Fid* next; 20*906943f9SDavid du Colombier void* aux; 21*906943f9SDavid du Colombier }; 22*906943f9SDavid du Colombier 23*906943f9SDavid du Colombier struct Usbfs 24*906943f9SDavid du Colombier { 25*906943f9SDavid du Colombier char name[Namesz]; 26*906943f9SDavid du Colombier uvlong qid; 27*906943f9SDavid du Colombier Dev* dev; 28*906943f9SDavid du Colombier void* aux; 29*906943f9SDavid du Colombier 30*906943f9SDavid du Colombier int (*walk)(Usbfs *fs, Fid *f, char *name); 31*906943f9SDavid du Colombier void (*clone)(Usbfs *fs, Fid *of, Fid *nf); 32*906943f9SDavid du Colombier void (*clunk)(Usbfs *fs, Fid *f); 33*906943f9SDavid du Colombier int (*open)(Usbfs *fs, Fid *f, int mode); 34*906943f9SDavid du Colombier long (*read)(Usbfs *fs, Fid *f, void *data, long count, vlong offset); 35*906943f9SDavid du Colombier long (*write)(Usbfs *fs, Fid*f, void *data, long count, vlong offset); 36*906943f9SDavid du Colombier int (*stat)(Usbfs *fs, Qid q, Dir *d); 37*906943f9SDavid du Colombier void (*end)(Usbfs *fs); 38*906943f9SDavid du Colombier }; 39*906943f9SDavid du Colombier 40*906943f9SDavid du Colombier typedef int (*Dirgen)(Usbfs*, Qid, int, Dir*, void*); 41*906943f9SDavid du Colombier 42*906943f9SDavid du Colombier long usbreadbuf(void *data, long count, vlong offset, void *buf, long n); 43*906943f9SDavid du Colombier void usbfsadd(Usbfs *dfs); 44*906943f9SDavid du Colombier void usbfsdel(Usbfs *dfs); 45*906943f9SDavid du Colombier int usbdirread(Usbfs*f, Qid q, char *data, long cnt, vlong off, Dirgen gen, void *arg); 46*906943f9SDavid du Colombier void usbfsinit(char* srv, char *mnt, Usbfs *f, int flag); 47*906943f9SDavid du Colombier 48*906943f9SDavid du Colombier void usbfsdirdump(void); 49*906943f9SDavid du Colombier 50*906943f9SDavid du Colombier extern char Enotfound[]; 51*906943f9SDavid du Colombier extern char Etoosmall[]; 52*906943f9SDavid du Colombier extern char Eio[]; 53*906943f9SDavid du Colombier extern char Eperm[]; 54*906943f9SDavid du Colombier extern char Ebadcall[]; 55*906943f9SDavid du Colombier extern char Ebadfid[]; 56*906943f9SDavid du Colombier extern char Einuse[]; 57*906943f9SDavid du Colombier extern char Eisopen[]; 58*906943f9SDavid du Colombier extern char Ebadctl[]; 59*906943f9SDavid du Colombier 60*906943f9SDavid du Colombier extern Usbfs usbdirfs; 61*906943f9SDavid du Colombier extern int usbfsdebug; 62