xref: /openbmc/qemu/hw/9pfs/9p-proxy.h (revision 2209bd05)
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  */
12494a8ebeSWei Liu #ifndef _QEMU_9P_PROXY_H
13494a8ebeSWei Liu #define _QEMU_9P_PROXY_H
14494a8ebeSWei Liu 
15494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024)
16494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX
17494a8ebeSWei Liu 
18494a8ebeSWei Liu /*
19494a8ebeSWei Liu  * proxy iovec only support one element and
20494a8ebeSWei Liu  * marsha/unmarshal doesn't do little endian conversion.
21494a8ebeSWei Liu  */
22494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \
23*2209bd05SWei Liu     v9fs_iov_unmarshal(in_sg, 1, offset, 0, fmt, ##args)
24494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \
25*2209bd05SWei Liu     v9fs_iov_marshal(out_sg, 1, offset, 0, fmt, ##args)
26494a8ebeSWei Liu 
27494a8ebeSWei Liu union MsgControl {
28494a8ebeSWei Liu     struct cmsghdr cmsg;
29494a8ebeSWei Liu     char control[CMSG_SPACE(sizeof(int))];
30494a8ebeSWei Liu };
31494a8ebeSWei Liu 
32494a8ebeSWei Liu typedef struct {
33494a8ebeSWei Liu     uint32_t type;
34494a8ebeSWei Liu     uint32_t size;
35494a8ebeSWei Liu } ProxyHeader;
36494a8ebeSWei Liu 
37494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader))
38494a8ebeSWei Liu 
39494a8ebeSWei Liu enum {
40494a8ebeSWei Liu     T_SUCCESS = 0,
41494a8ebeSWei Liu     T_ERROR,
42494a8ebeSWei Liu     T_OPEN,
43494a8ebeSWei Liu     T_CREATE,
44494a8ebeSWei Liu     T_MKNOD,
45494a8ebeSWei Liu     T_MKDIR,
46494a8ebeSWei Liu     T_SYMLINK,
47494a8ebeSWei Liu     T_LINK,
48494a8ebeSWei Liu     T_LSTAT,
49494a8ebeSWei Liu     T_READLINK,
50494a8ebeSWei Liu     T_STATFS,
51494a8ebeSWei Liu     T_CHMOD,
52494a8ebeSWei Liu     T_CHOWN,
53494a8ebeSWei Liu     T_TRUNCATE,
54494a8ebeSWei Liu     T_UTIME,
55494a8ebeSWei Liu     T_RENAME,
56494a8ebeSWei Liu     T_REMOVE,
57494a8ebeSWei Liu     T_LGETXATTR,
58494a8ebeSWei Liu     T_LLISTXATTR,
59494a8ebeSWei Liu     T_LSETXATTR,
60494a8ebeSWei Liu     T_LREMOVEXATTR,
61494a8ebeSWei Liu     T_GETVERSION,
62494a8ebeSWei Liu };
63494a8ebeSWei Liu 
64494a8ebeSWei Liu typedef struct {
65494a8ebeSWei Liu     uint64_t st_dev;
66494a8ebeSWei Liu     uint64_t st_ino;
67494a8ebeSWei Liu     uint64_t st_nlink;
68494a8ebeSWei Liu     uint32_t st_mode;
69494a8ebeSWei Liu     uint32_t st_uid;
70494a8ebeSWei Liu     uint32_t st_gid;
71494a8ebeSWei Liu     uint64_t st_rdev;
72494a8ebeSWei Liu     uint64_t st_size;
73494a8ebeSWei Liu     uint64_t st_blksize;
74494a8ebeSWei Liu     uint64_t st_blocks;
75494a8ebeSWei Liu     uint64_t st_atim_sec;
76494a8ebeSWei Liu     uint64_t st_atim_nsec;
77494a8ebeSWei Liu     uint64_t st_mtim_sec;
78494a8ebeSWei Liu     uint64_t st_mtim_nsec;
79494a8ebeSWei Liu     uint64_t st_ctim_sec;
80494a8ebeSWei Liu     uint64_t st_ctim_nsec;
81494a8ebeSWei Liu } ProxyStat;
82494a8ebeSWei Liu 
83494a8ebeSWei Liu typedef struct {
84494a8ebeSWei Liu     uint64_t f_type;
85494a8ebeSWei Liu     uint64_t f_bsize;
86494a8ebeSWei Liu     uint64_t f_blocks;
87494a8ebeSWei Liu     uint64_t f_bfree;
88494a8ebeSWei Liu     uint64_t f_bavail;
89494a8ebeSWei Liu     uint64_t f_files;
90494a8ebeSWei Liu     uint64_t f_ffree;
91494a8ebeSWei Liu     uint64_t f_fsid[2];
92494a8ebeSWei Liu     uint64_t f_namelen;
93494a8ebeSWei Liu     uint64_t f_frsize;
94494a8ebeSWei Liu } ProxyStatFS;
95494a8ebeSWei Liu #endif
96