xref: /openbmc/qemu/hw/9pfs/9p-proxy.h (revision 2a6a4076)
1494a8ebeSWei Liu /*
2494a8ebeSWei Liu  * 9p Proxy callback
3494a8ebeSWei Liu  *
4494a8ebeSWei Liu  * Copyright IBM, Corp. 2011
5494a8ebeSWei Liu  *
6494a8ebeSWei Liu  * Authors:
7494a8ebeSWei Liu  * M. Mohan Kumar <mohan@in.ibm.com>
8494a8ebeSWei Liu  *
9494a8ebeSWei Liu  * This work is licensed under the terms of the GNU GPL, version 2.  See
10494a8ebeSWei Liu  * the COPYING file in the top-level directory.
11494a8ebeSWei Liu  */
12*2a6a4076SMarkus Armbruster 
13*2a6a4076SMarkus Armbruster #ifndef QEMU_9P_PROXY_H
14*2a6a4076SMarkus Armbruster #define QEMU_9P_PROXY_H
15494a8ebeSWei Liu 
16494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024)
17494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX
18494a8ebeSWei Liu 
19494a8ebeSWei Liu /*
20494a8ebeSWei Liu  * proxy iovec only support one element and
21494a8ebeSWei Liu  * marsha/unmarshal doesn't do little endian conversion.
22494a8ebeSWei Liu  */
23494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \
242209bd05SWei Liu     v9fs_iov_unmarshal(in_sg, 1, offset, 0, fmt, ##args)
25494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \
262209bd05SWei Liu     v9fs_iov_marshal(out_sg, 1, offset, 0, fmt, ##args)
27494a8ebeSWei Liu 
28494a8ebeSWei Liu union MsgControl {
29494a8ebeSWei Liu     struct cmsghdr cmsg;
30494a8ebeSWei Liu     char control[CMSG_SPACE(sizeof(int))];
31494a8ebeSWei Liu };
32494a8ebeSWei Liu 
33494a8ebeSWei Liu typedef struct {
34494a8ebeSWei Liu     uint32_t type;
35494a8ebeSWei Liu     uint32_t size;
36494a8ebeSWei Liu } ProxyHeader;
37494a8ebeSWei Liu 
38494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader))
39494a8ebeSWei Liu 
40494a8ebeSWei Liu enum {
41494a8ebeSWei Liu     T_SUCCESS = 0,
42494a8ebeSWei Liu     T_ERROR,
43494a8ebeSWei Liu     T_OPEN,
44494a8ebeSWei Liu     T_CREATE,
45494a8ebeSWei Liu     T_MKNOD,
46494a8ebeSWei Liu     T_MKDIR,
47494a8ebeSWei Liu     T_SYMLINK,
48494a8ebeSWei Liu     T_LINK,
49494a8ebeSWei Liu     T_LSTAT,
50494a8ebeSWei Liu     T_READLINK,
51494a8ebeSWei Liu     T_STATFS,
52494a8ebeSWei Liu     T_CHMOD,
53494a8ebeSWei Liu     T_CHOWN,
54494a8ebeSWei Liu     T_TRUNCATE,
55494a8ebeSWei Liu     T_UTIME,
56494a8ebeSWei Liu     T_RENAME,
57494a8ebeSWei Liu     T_REMOVE,
58494a8ebeSWei Liu     T_LGETXATTR,
59494a8ebeSWei Liu     T_LLISTXATTR,
60494a8ebeSWei Liu     T_LSETXATTR,
61494a8ebeSWei Liu     T_LREMOVEXATTR,
62494a8ebeSWei Liu     T_GETVERSION,
63494a8ebeSWei Liu };
64494a8ebeSWei Liu 
65494a8ebeSWei Liu typedef struct {
66494a8ebeSWei Liu     uint64_t st_dev;
67494a8ebeSWei Liu     uint64_t st_ino;
68494a8ebeSWei Liu     uint64_t st_nlink;
69494a8ebeSWei Liu     uint32_t st_mode;
70494a8ebeSWei Liu     uint32_t st_uid;
71494a8ebeSWei Liu     uint32_t st_gid;
72494a8ebeSWei Liu     uint64_t st_rdev;
73494a8ebeSWei Liu     uint64_t st_size;
74494a8ebeSWei Liu     uint64_t st_blksize;
75494a8ebeSWei Liu     uint64_t st_blocks;
76494a8ebeSWei Liu     uint64_t st_atim_sec;
77494a8ebeSWei Liu     uint64_t st_atim_nsec;
78494a8ebeSWei Liu     uint64_t st_mtim_sec;
79494a8ebeSWei Liu     uint64_t st_mtim_nsec;
80494a8ebeSWei Liu     uint64_t st_ctim_sec;
81494a8ebeSWei Liu     uint64_t st_ctim_nsec;
82494a8ebeSWei Liu } ProxyStat;
83494a8ebeSWei Liu 
84494a8ebeSWei Liu typedef struct {
85494a8ebeSWei Liu     uint64_t f_type;
86494a8ebeSWei Liu     uint64_t f_bsize;
87494a8ebeSWei Liu     uint64_t f_blocks;
88494a8ebeSWei Liu     uint64_t f_bfree;
89494a8ebeSWei Liu     uint64_t f_bavail;
90494a8ebeSWei Liu     uint64_t f_files;
91494a8ebeSWei Liu     uint64_t f_ffree;
92494a8ebeSWei Liu     uint64_t f_fsid[2];
93494a8ebeSWei Liu     uint64_t f_namelen;
94494a8ebeSWei Liu     uint64_t f_frsize;
95494a8ebeSWei Liu } ProxyStatFS;
96494a8ebeSWei Liu #endif
97