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