fcall.h (3517B)
1 #ifndef _FCALL_H_ 2 #define _FCALL_H_ 1 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 /* 7 #pragma src "/sys/src/libc/9sys" 8 #pragma lib "libc.a" 9 */ 10 11 #define VERSION9P "9P2000" 12 #define MAXWELEM 16 13 14 typedef 15 struct Fcall 16 { 17 uchar type; 18 u32int fid; 19 ushort tag; 20 u32int msize; /* Tversion, Rversion */ 21 char *version; /* Tversion, Rversion */ 22 ushort oldtag; /* Tflush */ 23 char *ename; /* Rerror */ 24 Qid qid; /* Rattach, Ropen, Rcreate */ 25 u32int iounit; /* Ropen, Rcreate */ 26 Qid aqid; /* Rauth */ 27 u32int afid; /* Tauth, Tattach */ 28 char *uname; /* Tauth, Tattach */ 29 char *aname; /* Tauth, Tattach */ 30 u32int perm; /* Tcreate */ 31 char *name; /* Tcreate */ 32 uchar mode; /* Tcreate, Topen */ 33 u32int newfid; /* Twalk */ 34 ushort nwname; /* Twalk */ 35 char *wname[MAXWELEM]; /* Twalk */ 36 ushort nwqid; /* Rwalk */ 37 Qid wqid[MAXWELEM]; /* Rwalk */ 38 vlong offset; /* Tread, Twrite */ 39 u32int count; /* Tread, Twrite, Rread */ 40 char *data; /* Twrite, Rread */ 41 ushort nstat; /* Twstat, Rstat */ 42 uchar *stat; /* Twstat, Rstat */ 43 int unixfd; /* Ropenfd */ 44 45 /* 9P2000.u extensions */ 46 int errornum; /* Rerror */ 47 int uidnum; /* Tattach, Tauth */ 48 char *extension; /* Tcreate */ 49 } Fcall; 50 51 52 #define GBIT8(p) ((p)[0]) 53 #define GBIT16(p) ((p)[0]|((p)[1]<<8)) 54 #define GBIT32(p) ((u32int)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))) 55 #define GBIT64(p) ((u32int)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\ 56 ((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32)) 57 58 #define PBIT8(p,v) (p)[0]=(v) 59 #define PBIT16(p,v) (p)[0]=(v);(p)[1]=(v)>>8 60 #define PBIT32(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24 61 #define PBIT64(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\ 62 (p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56 63 64 #define BIT8SZ 1 65 #define BIT16SZ 2 66 #define BIT32SZ 4 67 #define BIT64SZ 8 68 #define QIDSZ (BIT8SZ+BIT32SZ+BIT64SZ) 69 70 /* STATFIXLEN includes leading 16-bit count */ 71 /* The count, however, excludes itself; total size is BIT16SZ+count */ 72 #define STATFIXLEN (BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ) /* amount of fixed length data in a stat buffer */ 73 #define STATFIXLENU (STATFIXLEN+BIT16SZ+3*BIT32SZ) /* for 9P2000.u */ 74 75 #define NOTAG (ushort)~0U /* Dummy tag */ 76 #define NOFID (u32int)~0U /* Dummy fid */ 77 #define NOUID (-1) /* Dummy uid */ 78 #define IOHDRSZ 24 /* ample room for Twrite/Rread header (iounit) */ 79 80 enum 81 { 82 Tversion = 100, 83 Rversion, 84 Tauth = 102, 85 Rauth, 86 Tattach = 104, 87 Rattach, 88 Terror = 106, /* illegal */ 89 Rerror, 90 Tflush = 108, 91 Rflush, 92 Twalk = 110, 93 Rwalk, 94 Topen = 112, 95 Ropen, 96 Tcreate = 114, 97 Rcreate, 98 Tread = 116, 99 Rread, 100 Twrite = 118, 101 Rwrite, 102 Tclunk = 120, 103 Rclunk, 104 Tremove = 122, 105 Rremove, 106 Tstat = 124, 107 Rstat, 108 Twstat = 126, 109 Rwstat, 110 Tmax, 111 112 Topenfd = 98, 113 Ropenfd 114 }; 115 116 uint convM2S(uchar*, uint, Fcall*); 117 uint convS2M(Fcall*, uchar*, uint); 118 uint sizeS2M(Fcall*); 119 120 int statcheck(uchar *abuf, uint nbuf); 121 uint convM2D(uchar*, uint, Dir*, char*); 122 uint convD2M(Dir*, uchar*, uint); 123 uint sizeD2M(Dir*); 124 125 uint convM2Su(uchar*, uint, Fcall*, int); 126 uint convS2Mu(Fcall*, uchar*, uint, int); 127 uint sizeS2Mu(Fcall*, int); 128 129 int statchecku(uchar *abuf, uint nbuf, int); 130 uint convM2Du(uchar*, uint, Dir*, char*, int); 131 uint convD2Mu(Dir*, uchar*, uint, int); 132 uint sizeD2Mu(Dir*, int); 133 134 int fcallfmt(Fmt*); 135 int dirfmt(Fmt*); 136 int dirmodefmt(Fmt*); 137 138 int read9pmsg(int, void*, uint); 139 140 /* 141 #pragma varargck type "F" Fcall* 142 #pragma varargck type "M" ulong 143 #pragma varargck type "D" Dir* 144 */ 145 146 #ifdef __cplusplus 147 } 148 #endif 149 #endif