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