xref: /openbmc/qemu/hw/9pfs/9p-proxy.h (revision 494a8ebe)
1*494a8ebeSWei Liu /*
2*494a8ebeSWei Liu  * 9p Proxy callback
3*494a8ebeSWei Liu  *
4*494a8ebeSWei Liu  * Copyright IBM, Corp. 2011
5*494a8ebeSWei Liu  *
6*494a8ebeSWei Liu  * Authors:
7*494a8ebeSWei Liu  * M. Mohan Kumar <mohan@in.ibm.com>
8*494a8ebeSWei Liu  *
9*494a8ebeSWei Liu  * This work is licensed under the terms of the GNU GPL, version 2.  See
10*494a8ebeSWei Liu  * the COPYING file in the top-level directory.
11*494a8ebeSWei Liu  */
12*494a8ebeSWei Liu #ifndef _QEMU_9P_PROXY_H
13*494a8ebeSWei Liu #define _QEMU_9P_PROXY_H
14*494a8ebeSWei Liu 
15*494a8ebeSWei Liu #define PROXY_MAX_IO_SZ (64 * 1024)
16*494a8ebeSWei Liu #define V9FS_FD_VALID INT_MAX
17*494a8ebeSWei Liu 
18*494a8ebeSWei Liu /*
19*494a8ebeSWei Liu  * proxy iovec only support one element and
20*494a8ebeSWei Liu  * marsha/unmarshal doesn't do little endian conversion.
21*494a8ebeSWei Liu  */
22*494a8ebeSWei Liu #define proxy_unmarshal(in_sg, offset, fmt, args...) \
23*494a8ebeSWei Liu     v9fs_unmarshal(in_sg, 1, offset, 0, fmt, ##args)
24*494a8ebeSWei Liu #define proxy_marshal(out_sg, offset, fmt, args...) \
25*494a8ebeSWei Liu     v9fs_marshal(out_sg, 1, offset, 0, fmt, ##args)
26*494a8ebeSWei Liu 
27*494a8ebeSWei Liu union MsgControl {
28*494a8ebeSWei Liu     struct cmsghdr cmsg;
29*494a8ebeSWei Liu     char control[CMSG_SPACE(sizeof(int))];
30*494a8ebeSWei Liu };
31*494a8ebeSWei Liu 
32*494a8ebeSWei Liu typedef struct {
33*494a8ebeSWei Liu     uint32_t type;
34*494a8ebeSWei Liu     uint32_t size;
35*494a8ebeSWei Liu } ProxyHeader;
36*494a8ebeSWei Liu 
37*494a8ebeSWei Liu #define PROXY_HDR_SZ (sizeof(ProxyHeader))
38*494a8ebeSWei Liu 
39*494a8ebeSWei Liu enum {
40*494a8ebeSWei Liu     T_SUCCESS = 0,
41*494a8ebeSWei Liu     T_ERROR,
42*494a8ebeSWei Liu     T_OPEN,
43*494a8ebeSWei Liu     T_CREATE,
44*494a8ebeSWei Liu     T_MKNOD,
45*494a8ebeSWei Liu     T_MKDIR,
46*494a8ebeSWei Liu     T_SYMLINK,
47*494a8ebeSWei Liu     T_LINK,
48*494a8ebeSWei Liu     T_LSTAT,
49*494a8ebeSWei Liu     T_READLINK,
50*494a8ebeSWei Liu     T_STATFS,
51*494a8ebeSWei Liu     T_CHMOD,
52*494a8ebeSWei Liu     T_CHOWN,
53*494a8ebeSWei Liu     T_TRUNCATE,
54*494a8ebeSWei Liu     T_UTIME,
55*494a8ebeSWei Liu     T_RENAME,
56*494a8ebeSWei Liu     T_REMOVE,
57*494a8ebeSWei Liu     T_LGETXATTR,
58*494a8ebeSWei Liu     T_LLISTXATTR,
59*494a8ebeSWei Liu     T_LSETXATTR,
60*494a8ebeSWei Liu     T_LREMOVEXATTR,
61*494a8ebeSWei Liu     T_GETVERSION,
62*494a8ebeSWei Liu };
63*494a8ebeSWei Liu 
64*494a8ebeSWei Liu typedef struct {
65*494a8ebeSWei Liu     uint64_t st_dev;
66*494a8ebeSWei Liu     uint64_t st_ino;
67*494a8ebeSWei Liu     uint64_t st_nlink;
68*494a8ebeSWei Liu     uint32_t st_mode;
69*494a8ebeSWei Liu     uint32_t st_uid;
70*494a8ebeSWei Liu     uint32_t st_gid;
71*494a8ebeSWei Liu     uint64_t st_rdev;
72*494a8ebeSWei Liu     uint64_t st_size;
73*494a8ebeSWei Liu     uint64_t st_blksize;
74*494a8ebeSWei Liu     uint64_t st_blocks;
75*494a8ebeSWei Liu     uint64_t st_atim_sec;
76*494a8ebeSWei Liu     uint64_t st_atim_nsec;
77*494a8ebeSWei Liu     uint64_t st_mtim_sec;
78*494a8ebeSWei Liu     uint64_t st_mtim_nsec;
79*494a8ebeSWei Liu     uint64_t st_ctim_sec;
80*494a8ebeSWei Liu     uint64_t st_ctim_nsec;
81*494a8ebeSWei Liu } ProxyStat;
82*494a8ebeSWei Liu 
83*494a8ebeSWei Liu typedef struct {
84*494a8ebeSWei Liu     uint64_t f_type;
85*494a8ebeSWei Liu     uint64_t f_bsize;
86*494a8ebeSWei Liu     uint64_t f_blocks;
87*494a8ebeSWei Liu     uint64_t f_bfree;
88*494a8ebeSWei Liu     uint64_t f_bavail;
89*494a8ebeSWei Liu     uint64_t f_files;
90*494a8ebeSWei Liu     uint64_t f_ffree;
91*494a8ebeSWei Liu     uint64_t f_fsid[2];
92*494a8ebeSWei Liu     uint64_t f_namelen;
93*494a8ebeSWei Liu     uint64_t f_frsize;
94*494a8ebeSWei Liu } ProxyStatFS;
95*494a8ebeSWei Liu #endif
96