Statistics
| Branch: | Revision:

root / hw / virtio-9p.h @ b41e95d3

History | View | Annotate | Download (9.2 kB)

1 9f107513 Anthony Liguori
#ifndef _QEMU_VIRTIO_9P_H
2 9f107513 Anthony Liguori
#define _QEMU_VIRTIO_9P_H
3 9f107513 Anthony Liguori
4 9f107513 Anthony Liguori
#include <sys/types.h>
5 9f107513 Anthony Liguori
#include <dirent.h>
6 9f107513 Anthony Liguori
#include <sys/time.h>
7 9f107513 Anthony Liguori
#include <utime.h>
8 9f107513 Anthony Liguori
9 9f107513 Anthony Liguori
#include "file-op-9p.h"
10 9f107513 Anthony Liguori
11 9f107513 Anthony Liguori
/* The feature bitmap for virtio 9P */
12 9f107513 Anthony Liguori
/* The mount point is specified in a config variable */
13 9f107513 Anthony Liguori
#define VIRTIO_9P_MOUNT_TAG 0
14 9f107513 Anthony Liguori
15 9f107513 Anthony Liguori
enum {
16 8f4d1ca5 Arun R Bharadwaj
    P9_TLERROR = 6,
17 8f4d1ca5 Arun R Bharadwaj
    P9_RLERROR,
18 be940c87 M. Mohan Kumar
    P9_TSTATFS = 8,
19 be940c87 M. Mohan Kumar
    P9_RSTATFS,
20 771e9d4c M. Mohan Kumar
    P9_TLOPEN = 12,
21 771e9d4c M. Mohan Kumar
    P9_RLOPEN,
22 c1568af5 Venkateswararao Jujjuri (JV)
    P9_TLCREATE = 14,
23 c1568af5 Venkateswararao Jujjuri (JV)
    P9_RLCREATE,
24 08c60fc9 Venkateswararao Jujjuri (JV)
    P9_TSYMLINK = 16,
25 08c60fc9 Venkateswararao Jujjuri (JV)
    P9_RSYMLINK,
26 5268cecc M. Mohan Kumar
    P9_TMKNOD = 18,
27 5268cecc M. Mohan Kumar
    P9_RMKNOD,
28 c7b4b0b3 M. Mohan Kumar
    P9_TRENAME = 20,
29 c7b4b0b3 M. Mohan Kumar
    P9_RRENAME,
30 00ede4c2 Sripathi Kodi
    P9_TGETATTR = 24,
31 00ede4c2 Sripathi Kodi
    P9_RGETATTR,
32 c79ce737 Sripathi Kodi
    P9_TSETATTR = 26,
33 c79ce737 Sripathi Kodi
    P9_RSETATTR,
34 fa32ef88 Aneesh Kumar K.V
    P9_TXATTRWALK = 30,
35 fa32ef88 Aneesh Kumar K.V
    P9_RXATTRWALK,
36 10b468bd Aneesh Kumar K.V
    P9_TXATTRCREATE = 32,
37 10b468bd Aneesh Kumar K.V
    P9_RXATTRCREATE,
38 c18e2f94 Sripathi Kodi
    P9_TREADDIR = 40,
39 c18e2f94 Sripathi Kodi
    P9_RREADDIR,
40 b41e95d3 Venkateswararao Jujjuri (JV)
    P9_TFSYNC = 50,
41 b41e95d3 Venkateswararao Jujjuri (JV)
    P9_RFSYNC,
42 82cc3ee8 M. Mohan Kumar
    P9_TLOCK = 52,
43 82cc3ee8 M. Mohan Kumar
    P9_RLOCK,
44 8f354003 M. Mohan Kumar
    P9_TGETLOCK = 54,
45 8f354003 M. Mohan Kumar
    P9_RGETLOCK,
46 b2c224be Venkateswararao Jujjuri (JV)
    P9_TLINK = 70,
47 b2c224be Venkateswararao Jujjuri (JV)
    P9_RLINK,
48 b67592ea M. Mohan Kumar
    P9_TMKDIR = 72,
49 b67592ea M. Mohan Kumar
    P9_RMKDIR,
50 9f107513 Anthony Liguori
    P9_TVERSION = 100,
51 9f107513 Anthony Liguori
    P9_RVERSION,
52 9f107513 Anthony Liguori
    P9_TAUTH = 102,
53 9f107513 Anthony Liguori
    P9_RAUTH,
54 9f107513 Anthony Liguori
    P9_TATTACH = 104,
55 9f107513 Anthony Liguori
    P9_RATTACH,
56 9f107513 Anthony Liguori
    P9_TERROR = 106,
57 9f107513 Anthony Liguori
    P9_RERROR,
58 9f107513 Anthony Liguori
    P9_TFLUSH = 108,
59 9f107513 Anthony Liguori
    P9_RFLUSH,
60 9f107513 Anthony Liguori
    P9_TWALK = 110,
61 9f107513 Anthony Liguori
    P9_RWALK,
62 9f107513 Anthony Liguori
    P9_TOPEN = 112,
63 9f107513 Anthony Liguori
    P9_ROPEN,
64 9f107513 Anthony Liguori
    P9_TCREATE = 114,
65 9f107513 Anthony Liguori
    P9_RCREATE,
66 9f107513 Anthony Liguori
    P9_TREAD = 116,
67 9f107513 Anthony Liguori
    P9_RREAD,
68 9f107513 Anthony Liguori
    P9_TWRITE = 118,
69 9f107513 Anthony Liguori
    P9_RWRITE,
70 9f107513 Anthony Liguori
    P9_TCLUNK = 120,
71 9f107513 Anthony Liguori
    P9_RCLUNK,
72 9f107513 Anthony Liguori
    P9_TREMOVE = 122,
73 9f107513 Anthony Liguori
    P9_RREMOVE,
74 9f107513 Anthony Liguori
    P9_TSTAT = 124,
75 9f107513 Anthony Liguori
    P9_RSTAT,
76 9f107513 Anthony Liguori
    P9_TWSTAT = 126,
77 9f107513 Anthony Liguori
    P9_RWSTAT,
78 9f107513 Anthony Liguori
};
79 9f107513 Anthony Liguori
80 9f107513 Anthony Liguori
81 9f107513 Anthony Liguori
/* qid.types */
82 9f107513 Anthony Liguori
enum {
83 9f107513 Anthony Liguori
    P9_QTDIR = 0x80,
84 9f107513 Anthony Liguori
    P9_QTAPPEND = 0x40,
85 9f107513 Anthony Liguori
    P9_QTEXCL = 0x20,
86 9f107513 Anthony Liguori
    P9_QTMOUNT = 0x10,
87 9f107513 Anthony Liguori
    P9_QTAUTH = 0x08,
88 9f107513 Anthony Liguori
    P9_QTTMP = 0x04,
89 9f107513 Anthony Liguori
    P9_QTSYMLINK = 0x02,
90 9f107513 Anthony Liguori
    P9_QTLINK = 0x01,
91 9f107513 Anthony Liguori
    P9_QTFILE = 0x00,
92 9f107513 Anthony Liguori
};
93 9f107513 Anthony Liguori
94 84151514 M. Mohan Kumar
enum p9_proto_version {
95 84151514 M. Mohan Kumar
    V9FS_PROTO_2000U = 0x01,
96 84151514 M. Mohan Kumar
    V9FS_PROTO_2000L = 0x02,
97 84151514 M. Mohan Kumar
};
98 84151514 M. Mohan Kumar
99 9f107513 Anthony Liguori
#define P9_NOTAG    (u16)(~0)
100 9f107513 Anthony Liguori
#define P9_NOFID    (u32)(~0)
101 9f107513 Anthony Liguori
#define P9_MAXWELEM 16
102 9f107513 Anthony Liguori
103 5e94c103 M. Mohan Kumar
/*
104 5e94c103 M. Mohan Kumar
 * ample room for Twrite/Rread header
105 5e94c103 M. Mohan Kumar
 * size[4] Tread/Twrite tag[2] fid[4] offset[8] count[4]
106 5e94c103 M. Mohan Kumar
 */
107 5e94c103 M. Mohan Kumar
#define P9_IOHDRSZ 24
108 5e94c103 M. Mohan Kumar
109 9f107513 Anthony Liguori
typedef struct V9fsPDU V9fsPDU;
110 9f107513 Anthony Liguori
111 9f107513 Anthony Liguori
struct V9fsPDU
112 9f107513 Anthony Liguori
{
113 9f107513 Anthony Liguori
    uint32_t size;
114 9f107513 Anthony Liguori
    uint16_t tag;
115 9f107513 Anthony Liguori
    uint8_t id;
116 9f107513 Anthony Liguori
    VirtQueueElement elem;
117 9f107513 Anthony Liguori
    QLIST_ENTRY(V9fsPDU) next;
118 9f107513 Anthony Liguori
};
119 9f107513 Anthony Liguori
120 9f107513 Anthony Liguori
121 9f107513 Anthony Liguori
/* FIXME
122 9f107513 Anthony Liguori
 * 1) change user needs to set groups and stuff
123 9f107513 Anthony Liguori
 */
124 9f107513 Anthony Liguori
125 9f107513 Anthony Liguori
/* from Linux's linux/virtio_9p.h */
126 9f107513 Anthony Liguori
127 9f107513 Anthony Liguori
/* The ID for virtio console */
128 9f107513 Anthony Liguori
#define VIRTIO_ID_9P    9
129 9f107513 Anthony Liguori
#define MAX_REQ         128
130 9f107513 Anthony Liguori
#define MAX_TAG_LEN     32
131 9f107513 Anthony Liguori
132 9f107513 Anthony Liguori
#define BUG_ON(cond) assert(!(cond))
133 9f107513 Anthony Liguori
134 9f107513 Anthony Liguori
typedef struct V9fsFidState V9fsFidState;
135 9f107513 Anthony Liguori
136 9f107513 Anthony Liguori
typedef struct V9fsString
137 9f107513 Anthony Liguori
{
138 9f107513 Anthony Liguori
    int16_t size;
139 9f107513 Anthony Liguori
    char *data;
140 9f107513 Anthony Liguori
} V9fsString;
141 9f107513 Anthony Liguori
142 9f107513 Anthony Liguori
typedef struct V9fsQID
143 9f107513 Anthony Liguori
{
144 9f107513 Anthony Liguori
    int8_t type;
145 9f107513 Anthony Liguori
    int32_t version;
146 9f107513 Anthony Liguori
    int64_t path;
147 9f107513 Anthony Liguori
} V9fsQID;
148 9f107513 Anthony Liguori
149 9f107513 Anthony Liguori
typedef struct V9fsStat
150 9f107513 Anthony Liguori
{
151 9f107513 Anthony Liguori
    int16_t size;
152 9f107513 Anthony Liguori
    int16_t type;
153 9f107513 Anthony Liguori
    int32_t dev;
154 9f107513 Anthony Liguori
    V9fsQID qid;
155 9f107513 Anthony Liguori
    int32_t mode;
156 9f107513 Anthony Liguori
    int32_t atime;
157 9f107513 Anthony Liguori
    int32_t mtime;
158 9f107513 Anthony Liguori
    int64_t length;
159 9f107513 Anthony Liguori
    V9fsString name;
160 9f107513 Anthony Liguori
    V9fsString uid;
161 9f107513 Anthony Liguori
    V9fsString gid;
162 9f107513 Anthony Liguori
    V9fsString muid;
163 9f107513 Anthony Liguori
    /* 9p2000.u */
164 9f107513 Anthony Liguori
    V9fsString extension;
165 9f107513 Anthony Liguori
   int32_t n_uid;
166 9f107513 Anthony Liguori
    int32_t n_gid;
167 9f107513 Anthony Liguori
    int32_t n_muid;
168 9f107513 Anthony Liguori
} V9fsStat;
169 9f107513 Anthony Liguori
170 d62dbb51 Aneesh Kumar K.V
enum {
171 d62dbb51 Aneesh Kumar K.V
    P9_FID_NONE = 0,
172 d62dbb51 Aneesh Kumar K.V
    P9_FID_FILE,
173 d62dbb51 Aneesh Kumar K.V
    P9_FID_DIR,
174 d62dbb51 Aneesh Kumar K.V
    P9_FID_XATTR,
175 d62dbb51 Aneesh Kumar K.V
};
176 d62dbb51 Aneesh Kumar K.V
177 d62dbb51 Aneesh Kumar K.V
typedef struct V9fsXattr
178 d62dbb51 Aneesh Kumar K.V
{
179 d62dbb51 Aneesh Kumar K.V
    int64_t copied_len;
180 d62dbb51 Aneesh Kumar K.V
    int64_t len;
181 d62dbb51 Aneesh Kumar K.V
    void *value;
182 d62dbb51 Aneesh Kumar K.V
    V9fsString name;
183 d62dbb51 Aneesh Kumar K.V
    int flags;
184 d62dbb51 Aneesh Kumar K.V
} V9fsXattr;
185 d62dbb51 Aneesh Kumar K.V
186 9f107513 Anthony Liguori
struct V9fsFidState
187 9f107513 Anthony Liguori
{
188 d62dbb51 Aneesh Kumar K.V
    int fid_type;
189 9f107513 Anthony Liguori
    int32_t fid;
190 9f107513 Anthony Liguori
    V9fsString path;
191 d62dbb51 Aneesh Kumar K.V
    union {
192 d62dbb51 Aneesh Kumar K.V
        int fd;
193 d62dbb51 Aneesh Kumar K.V
        DIR *dir;
194 d62dbb51 Aneesh Kumar K.V
        V9fsXattr xattr;
195 d62dbb51 Aneesh Kumar K.V
    } fs;
196 9f107513 Anthony Liguori
    uid_t uid;
197 9f107513 Anthony Liguori
    V9fsFidState *next;
198 9f107513 Anthony Liguori
};
199 9f107513 Anthony Liguori
200 9f107513 Anthony Liguori
typedef struct V9fsState
201 9f107513 Anthony Liguori
{
202 9f107513 Anthony Liguori
    VirtIODevice vdev;
203 9f107513 Anthony Liguori
    VirtQueue *vq;
204 9f107513 Anthony Liguori
    V9fsPDU pdus[MAX_REQ];
205 9f107513 Anthony Liguori
    QLIST_HEAD(, V9fsPDU) free_list;
206 9f107513 Anthony Liguori
    V9fsFidState *fid_list;
207 9f107513 Anthony Liguori
    FileOperations *ops;
208 9f107513 Anthony Liguori
    FsContext ctx;
209 9f107513 Anthony Liguori
    uint16_t tag_len;
210 9f107513 Anthony Liguori
    uint8_t *tag;
211 9f107513 Anthony Liguori
    size_t config_size;
212 84151514 M. Mohan Kumar
    enum p9_proto_version proto_version;
213 5e94c103 M. Mohan Kumar
    int32_t msize;
214 9f107513 Anthony Liguori
} V9fsState;
215 9f107513 Anthony Liguori
216 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsCreateState {
217 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
218 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
219 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
220 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsQID qid;
221 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t perm;
222 fac4f111 Venkateswararao Jujjuri (JV)
    int8_t mode;
223 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
224 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString name;
225 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString extension;
226 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString fullname;
227 5e94c103 M. Mohan Kumar
    int iounit;
228 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsCreateState;
229 fac4f111 Venkateswararao Jujjuri (JV)
230 c1568af5 Venkateswararao Jujjuri (JV)
typedef struct V9fsLcreateState {
231 c1568af5 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
232 c1568af5 Venkateswararao Jujjuri (JV)
    size_t offset;
233 c1568af5 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
234 c1568af5 Venkateswararao Jujjuri (JV)
    V9fsQID qid;
235 c1568af5 Venkateswararao Jujjuri (JV)
    int32_t iounit;
236 c1568af5 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
237 c1568af5 Venkateswararao Jujjuri (JV)
    V9fsString name;
238 c1568af5 Venkateswararao Jujjuri (JV)
    V9fsString fullname;
239 c1568af5 Venkateswararao Jujjuri (JV)
} V9fsLcreateState;
240 c1568af5 Venkateswararao Jujjuri (JV)
241 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsStatState {
242 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
243 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
244 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsStat v9stat;
245 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
246 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
247 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsStatState;
248 fac4f111 Venkateswararao Jujjuri (JV)
249 00ede4c2 Sripathi Kodi
typedef struct V9fsStatDotl {
250 00ede4c2 Sripathi Kodi
    uint64_t st_result_mask;
251 00ede4c2 Sripathi Kodi
    V9fsQID qid;
252 00ede4c2 Sripathi Kodi
    uint32_t st_mode;
253 00ede4c2 Sripathi Kodi
    uint32_t st_uid;
254 00ede4c2 Sripathi Kodi
    uint32_t st_gid;
255 00ede4c2 Sripathi Kodi
    uint64_t st_nlink;
256 00ede4c2 Sripathi Kodi
    uint64_t st_rdev;
257 00ede4c2 Sripathi Kodi
    uint64_t st_size;
258 00ede4c2 Sripathi Kodi
    uint64_t st_blksize;
259 00ede4c2 Sripathi Kodi
    uint64_t st_blocks;
260 00ede4c2 Sripathi Kodi
    uint64_t st_atime_sec;
261 00ede4c2 Sripathi Kodi
    uint64_t st_atime_nsec;
262 00ede4c2 Sripathi Kodi
    uint64_t st_mtime_sec;
263 00ede4c2 Sripathi Kodi
    uint64_t st_mtime_nsec;
264 00ede4c2 Sripathi Kodi
    uint64_t st_ctime_sec;
265 00ede4c2 Sripathi Kodi
    uint64_t st_ctime_nsec;
266 00ede4c2 Sripathi Kodi
    uint64_t st_btime_sec;
267 00ede4c2 Sripathi Kodi
    uint64_t st_btime_nsec;
268 00ede4c2 Sripathi Kodi
    uint64_t st_gen;
269 00ede4c2 Sripathi Kodi
    uint64_t st_data_version;
270 00ede4c2 Sripathi Kodi
} V9fsStatDotl;
271 00ede4c2 Sripathi Kodi
272 00ede4c2 Sripathi Kodi
typedef struct V9fsStatStateDotl {
273 00ede4c2 Sripathi Kodi
    V9fsPDU *pdu;
274 00ede4c2 Sripathi Kodi
    size_t offset;
275 00ede4c2 Sripathi Kodi
    V9fsStatDotl v9stat_dotl;
276 00ede4c2 Sripathi Kodi
    struct stat stbuf;
277 00ede4c2 Sripathi Kodi
} V9fsStatStateDotl;
278 00ede4c2 Sripathi Kodi
279 00ede4c2 Sripathi Kodi
280 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsWalkState {
281 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
282 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
283 fac4f111 Venkateswararao Jujjuri (JV)
    int16_t nwnames;
284 fac4f111 Venkateswararao Jujjuri (JV)
    int name_idx;
285 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsQID *qids;
286 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
287 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *newfidp;
288 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString path;
289 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString *wnames;
290 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
291 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsWalkState;
292 fac4f111 Venkateswararao Jujjuri (JV)
293 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsOpenState {
294 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
295 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
296 771e9d4c M. Mohan Kumar
    int32_t mode;
297 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
298 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsQID qid;
299 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
300 5e94c103 M. Mohan Kumar
    int iounit;
301 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsOpenState;
302 fac4f111 Venkateswararao Jujjuri (JV)
303 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsReadState {
304 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
305 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
306 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t count;
307 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t total;
308 fac4f111 Venkateswararao Jujjuri (JV)
    int64_t off;
309 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
310 fac4f111 Venkateswararao Jujjuri (JV)
    struct iovec iov[128]; /* FIXME: bad, bad, bad */
311 fac4f111 Venkateswararao Jujjuri (JV)
    struct iovec *sg;
312 fac4f111 Venkateswararao Jujjuri (JV)
    off_t dir_pos;
313 fac4f111 Venkateswararao Jujjuri (JV)
    struct dirent *dent;
314 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
315 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsString name;
316 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsStat v9stat;
317 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t len;
318 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t cnt;
319 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t max_count;
320 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsReadState;
321 fac4f111 Venkateswararao Jujjuri (JV)
322 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsWriteState {
323 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
324 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
325 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t len;
326 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t count;
327 fac4f111 Venkateswararao Jujjuri (JV)
    int32_t total;
328 fac4f111 Venkateswararao Jujjuri (JV)
    int64_t off;
329 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
330 fac4f111 Venkateswararao Jujjuri (JV)
    struct iovec iov[128]; /* FIXME: bad, bad, bad */
331 fac4f111 Venkateswararao Jujjuri (JV)
    struct iovec *sg;
332 fac4f111 Venkateswararao Jujjuri (JV)
    int cnt;
333 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsWriteState;
334 fac4f111 Venkateswararao Jujjuri (JV)
335 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsRemoveState {
336 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
337 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
338 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
339 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsRemoveState;
340 fac4f111 Venkateswararao Jujjuri (JV)
341 fac4f111 Venkateswararao Jujjuri (JV)
typedef struct V9fsWstatState
342 fac4f111 Venkateswararao Jujjuri (JV)
{
343 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
344 fac4f111 Venkateswararao Jujjuri (JV)
    size_t offset;
345 fac4f111 Venkateswararao Jujjuri (JV)
    int16_t unused;
346 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsStat v9stat;
347 fac4f111 Venkateswararao Jujjuri (JV)
    V9fsFidState *fidp;
348 fac4f111 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
349 fac4f111 Venkateswararao Jujjuri (JV)
} V9fsWstatState;
350 fac4f111 Venkateswararao Jujjuri (JV)
351 08c60fc9 Venkateswararao Jujjuri (JV)
typedef struct V9fsSymlinkState
352 08c60fc9 Venkateswararao Jujjuri (JV)
{
353 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsPDU *pdu;
354 08c60fc9 Venkateswararao Jujjuri (JV)
    size_t offset;
355 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsString name;
356 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsString symname;
357 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsString fullname;
358 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsFidState *dfidp;
359 08c60fc9 Venkateswararao Jujjuri (JV)
    V9fsQID qid;
360 08c60fc9 Venkateswararao Jujjuri (JV)
    struct stat stbuf;
361 08c60fc9 Venkateswararao Jujjuri (JV)
} V9fsSymlinkState;
362 08c60fc9 Venkateswararao Jujjuri (JV)
363 c79ce737 Sripathi Kodi
typedef struct V9fsIattr
364 c79ce737 Sripathi Kodi
{
365 c79ce737 Sripathi Kodi
    int32_t valid;
366 c79ce737 Sripathi Kodi
    int32_t mode;
367 c79ce737 Sripathi Kodi
    int32_t uid;
368 c79ce737 Sripathi Kodi
    int32_t gid;
369 c79ce737 Sripathi Kodi
    int64_t size;
370 c79ce737 Sripathi Kodi
    int64_t atime_sec;
371 c79ce737 Sripathi Kodi
    int64_t atime_nsec;
372 c79ce737 Sripathi Kodi
    int64_t mtime_sec;
373 c79ce737 Sripathi Kodi
    int64_t mtime_nsec;
374 c79ce737 Sripathi Kodi
} V9fsIattr;
375 c79ce737 Sripathi Kodi
376 c79ce737 Sripathi Kodi
typedef struct V9fsSetattrState
377 c79ce737 Sripathi Kodi
{
378 c79ce737 Sripathi Kodi
    V9fsPDU *pdu;
379 c79ce737 Sripathi Kodi
    size_t offset;
380 c79ce737 Sripathi Kodi
    V9fsIattr v9iattr;
381 c79ce737 Sripathi Kodi
    V9fsFidState *fidp;
382 c79ce737 Sripathi Kodi
} V9fsSetattrState;
383 c79ce737 Sripathi Kodi
384 9f107513 Anthony Liguori
struct virtio_9p_config
385 9f107513 Anthony Liguori
{
386 9f107513 Anthony Liguori
    /* number of characters in tag */
387 9f107513 Anthony Liguori
    uint16_t tag_len;
388 9f107513 Anthony Liguori
    /* Variable size tag name */
389 9f107513 Anthony Liguori
    uint8_t tag[0];
390 9f107513 Anthony Liguori
} __attribute__((packed));
391 9f107513 Anthony Liguori
392 be940c87 M. Mohan Kumar
typedef struct V9fsStatfs
393 be940c87 M. Mohan Kumar
{
394 be940c87 M. Mohan Kumar
    uint32_t f_type;
395 be940c87 M. Mohan Kumar
    uint32_t f_bsize;
396 be940c87 M. Mohan Kumar
    uint64_t f_blocks;
397 be940c87 M. Mohan Kumar
    uint64_t f_bfree;
398 be940c87 M. Mohan Kumar
    uint64_t f_bavail;
399 be940c87 M. Mohan Kumar
    uint64_t f_files;
400 be940c87 M. Mohan Kumar
    uint64_t f_ffree;
401 be940c87 M. Mohan Kumar
    uint64_t fsid_val;
402 be940c87 M. Mohan Kumar
    uint32_t f_namelen;
403 be940c87 M. Mohan Kumar
} V9fsStatfs;
404 be940c87 M. Mohan Kumar
405 be940c87 M. Mohan Kumar
typedef struct V9fsStatfsState {
406 be940c87 M. Mohan Kumar
    V9fsPDU *pdu;
407 be940c87 M. Mohan Kumar
    size_t offset;
408 be940c87 M. Mohan Kumar
    int32_t fid;
409 be940c87 M. Mohan Kumar
    V9fsStatfs v9statfs;
410 be940c87 M. Mohan Kumar
    V9fsFidState *fidp;
411 be940c87 M. Mohan Kumar
    struct statfs stbuf;
412 be940c87 M. Mohan Kumar
} V9fsStatfsState;
413 be940c87 M. Mohan Kumar
414 5268cecc M. Mohan Kumar
typedef struct V9fsMkState {
415 5268cecc M. Mohan Kumar
    V9fsPDU *pdu;
416 5268cecc M. Mohan Kumar
    size_t offset;
417 5268cecc M. Mohan Kumar
    V9fsQID qid;
418 5268cecc M. Mohan Kumar
    struct stat stbuf;
419 5268cecc M. Mohan Kumar
    V9fsString name;
420 5268cecc M. Mohan Kumar
    V9fsString fullname;
421 5268cecc M. Mohan Kumar
} V9fsMkState;
422 5268cecc M. Mohan Kumar
423 c7b4b0b3 M. Mohan Kumar
typedef struct V9fsRenameState {
424 c7b4b0b3 M. Mohan Kumar
    V9fsPDU *pdu;
425 c7b4b0b3 M. Mohan Kumar
    V9fsFidState *fidp;
426 c7b4b0b3 M. Mohan Kumar
    size_t offset;
427 c7b4b0b3 M. Mohan Kumar
    int32_t newdirfid;
428 c7b4b0b3 M. Mohan Kumar
    V9fsString name;
429 c7b4b0b3 M. Mohan Kumar
} V9fsRenameState;
430 c7b4b0b3 M. Mohan Kumar
431 fa32ef88 Aneesh Kumar K.V
typedef struct V9fsXattrState
432 fa32ef88 Aneesh Kumar K.V
{
433 fa32ef88 Aneesh Kumar K.V
    V9fsPDU *pdu;
434 fa32ef88 Aneesh Kumar K.V
    size_t offset;
435 fa32ef88 Aneesh Kumar K.V
    V9fsFidState *file_fidp;
436 fa32ef88 Aneesh Kumar K.V
    V9fsFidState *xattr_fidp;
437 fa32ef88 Aneesh Kumar K.V
    V9fsString name;
438 fa32ef88 Aneesh Kumar K.V
    int64_t size;
439 fa32ef88 Aneesh Kumar K.V
    int flags;
440 fa32ef88 Aneesh Kumar K.V
    void *value;
441 fa32ef88 Aneesh Kumar K.V
} V9fsXattrState;
442 fa32ef88 Aneesh Kumar K.V
443 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_SUCCESS 0
444 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_BLOCKED 1
445 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_ERROR 2
446 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_GRACE 3
447 82cc3ee8 M. Mohan Kumar
448 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_FLAGS_BLOCK 1
449 82cc3ee8 M. Mohan Kumar
#define P9_LOCK_FLAGS_RECLAIM 2
450 82cc3ee8 M. Mohan Kumar
451 82cc3ee8 M. Mohan Kumar
typedef struct V9fsFlock
452 82cc3ee8 M. Mohan Kumar
{
453 82cc3ee8 M. Mohan Kumar
    uint8_t type;
454 82cc3ee8 M. Mohan Kumar
    uint32_t flags;
455 82cc3ee8 M. Mohan Kumar
    uint64_t start; /* absolute offset */
456 82cc3ee8 M. Mohan Kumar
    uint64_t length;
457 82cc3ee8 M. Mohan Kumar
    uint32_t proc_id;
458 82cc3ee8 M. Mohan Kumar
    V9fsString client_id;
459 82cc3ee8 M. Mohan Kumar
} V9fsFlock;
460 82cc3ee8 M. Mohan Kumar
461 82cc3ee8 M. Mohan Kumar
typedef struct V9fsLockState
462 82cc3ee8 M. Mohan Kumar
{
463 82cc3ee8 M. Mohan Kumar
    V9fsPDU *pdu;
464 82cc3ee8 M. Mohan Kumar
    size_t offset;
465 82cc3ee8 M. Mohan Kumar
    int8_t status;
466 82cc3ee8 M. Mohan Kumar
    struct stat stbuf;
467 82cc3ee8 M. Mohan Kumar
    V9fsFidState *fidp;
468 82cc3ee8 M. Mohan Kumar
    V9fsFlock *flock;
469 82cc3ee8 M. Mohan Kumar
} V9fsLockState;
470 82cc3ee8 M. Mohan Kumar
471 8f354003 M. Mohan Kumar
typedef struct V9fsGetlock
472 8f354003 M. Mohan Kumar
{
473 8f354003 M. Mohan Kumar
    uint8_t type;
474 8f354003 M. Mohan Kumar
    uint64_t start; /* absolute offset */
475 8f354003 M. Mohan Kumar
    uint64_t length;
476 8f354003 M. Mohan Kumar
    uint32_t proc_id;
477 8f354003 M. Mohan Kumar
    V9fsString client_id;
478 8f354003 M. Mohan Kumar
} V9fsGetlock;
479 8f354003 M. Mohan Kumar
480 8f354003 M. Mohan Kumar
typedef struct V9fsGetlockState
481 8f354003 M. Mohan Kumar
{
482 8f354003 M. Mohan Kumar
    V9fsPDU *pdu;
483 8f354003 M. Mohan Kumar
    size_t offset;
484 8f354003 M. Mohan Kumar
    struct stat stbuf;
485 8f354003 M. Mohan Kumar
    V9fsFidState *fidp;
486 8f354003 M. Mohan Kumar
    V9fsGetlock *glock;
487 8f354003 M. Mohan Kumar
} V9fsGetlockState;
488 8f354003 M. Mohan Kumar
489 8f354003 M. Mohan Kumar
490 9f107513 Anthony Liguori
extern size_t pdu_packunpack(void *addr, struct iovec *sg, int sg_count,
491 9f107513 Anthony Liguori
                            size_t offset, size_t size, int pack);
492 9f107513 Anthony Liguori
493 9f107513 Anthony Liguori
static inline size_t do_pdu_unpack(void *dst, struct iovec *sg, int sg_count,
494 9f107513 Anthony Liguori
                        size_t offset, size_t size)
495 9f107513 Anthony Liguori
{
496 9f107513 Anthony Liguori
    return pdu_packunpack(dst, sg, sg_count, offset, size, 0);
497 9f107513 Anthony Liguori
}
498 9f107513 Anthony Liguori
499 9f107513 Anthony Liguori
#endif