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