19f107513SAnthony Liguori #ifndef _QEMU_VIRTIO_9P_H 29f107513SAnthony Liguori #define _QEMU_VIRTIO_9P_H 39f107513SAnthony Liguori 49f107513SAnthony Liguori #include <sys/types.h> 59f107513SAnthony Liguori #include <dirent.h> 69f107513SAnthony Liguori #include <sys/time.h> 79f107513SAnthony Liguori #include <utime.h> 89f107513SAnthony Liguori 9353ac78dSAneesh Kumar K.V #include "fsdev/file-op-9p.h" 109f107513SAnthony Liguori 119f107513SAnthony Liguori /* The feature bitmap for virtio 9P */ 129f107513SAnthony Liguori /* The mount point is specified in a config variable */ 139f107513SAnthony Liguori #define VIRTIO_9P_MOUNT_TAG 0 149f107513SAnthony Liguori 159f107513SAnthony Liguori enum { 168f4d1ca5SArun R Bharadwaj P9_TLERROR = 6, 178f4d1ca5SArun R Bharadwaj P9_RLERROR, 18be940c87SM. Mohan Kumar P9_TSTATFS = 8, 19be940c87SM. Mohan Kumar P9_RSTATFS, 20771e9d4cSM. Mohan Kumar P9_TLOPEN = 12, 21771e9d4cSM. Mohan Kumar P9_RLOPEN, 22c1568af5SVenkateswararao Jujjuri (JV) P9_TLCREATE = 14, 23c1568af5SVenkateswararao Jujjuri (JV) P9_RLCREATE, 2408c60fc9SVenkateswararao Jujjuri (JV) P9_TSYMLINK = 16, 2508c60fc9SVenkateswararao Jujjuri (JV) P9_RSYMLINK, 265268ceccSM. Mohan Kumar P9_TMKNOD = 18, 275268ceccSM. Mohan Kumar P9_RMKNOD, 28c7b4b0b3SM. Mohan Kumar P9_TRENAME = 20, 29c7b4b0b3SM. Mohan Kumar P9_RRENAME, 30df0973a4SM. Mohan Kumar P9_TREADLINK = 22, 31df0973a4SM. Mohan Kumar P9_RREADLINK, 3200ede4c2SSripathi Kodi P9_TGETATTR = 24, 3300ede4c2SSripathi Kodi P9_RGETATTR, 34c79ce737SSripathi Kodi P9_TSETATTR = 26, 35c79ce737SSripathi Kodi P9_RSETATTR, 36fa32ef88SAneesh Kumar K.V P9_TXATTRWALK = 30, 37fa32ef88SAneesh Kumar K.V P9_RXATTRWALK, 3810b468bdSAneesh Kumar K.V P9_TXATTRCREATE = 32, 3910b468bdSAneesh Kumar K.V P9_RXATTRCREATE, 40c18e2f94SSripathi Kodi P9_TREADDIR = 40, 41c18e2f94SSripathi Kodi P9_RREADDIR, 42b41e95d3SVenkateswararao Jujjuri (JV) P9_TFSYNC = 50, 43b41e95d3SVenkateswararao Jujjuri (JV) P9_RFSYNC, 4482cc3ee8SM. Mohan Kumar P9_TLOCK = 52, 4582cc3ee8SM. Mohan Kumar P9_RLOCK, 468f354003SM. Mohan Kumar P9_TGETLOCK = 54, 478f354003SM. Mohan Kumar P9_RGETLOCK, 48b2c224beSVenkateswararao Jujjuri (JV) P9_TLINK = 70, 49b2c224beSVenkateswararao Jujjuri (JV) P9_RLINK, 50b67592eaSM. Mohan Kumar P9_TMKDIR = 72, 51b67592eaSM. Mohan Kumar P9_RMKDIR, 529f107513SAnthony Liguori P9_TVERSION = 100, 539f107513SAnthony Liguori P9_RVERSION, 549f107513SAnthony Liguori P9_TAUTH = 102, 559f107513SAnthony Liguori P9_RAUTH, 569f107513SAnthony Liguori P9_TATTACH = 104, 579f107513SAnthony Liguori P9_RATTACH, 589f107513SAnthony Liguori P9_TERROR = 106, 599f107513SAnthony Liguori P9_RERROR, 609f107513SAnthony Liguori P9_TFLUSH = 108, 619f107513SAnthony Liguori P9_RFLUSH, 629f107513SAnthony Liguori P9_TWALK = 110, 639f107513SAnthony Liguori P9_RWALK, 649f107513SAnthony Liguori P9_TOPEN = 112, 659f107513SAnthony Liguori P9_ROPEN, 669f107513SAnthony Liguori P9_TCREATE = 114, 679f107513SAnthony Liguori P9_RCREATE, 689f107513SAnthony Liguori P9_TREAD = 116, 699f107513SAnthony Liguori P9_RREAD, 709f107513SAnthony Liguori P9_TWRITE = 118, 719f107513SAnthony Liguori P9_RWRITE, 729f107513SAnthony Liguori P9_TCLUNK = 120, 739f107513SAnthony Liguori P9_RCLUNK, 749f107513SAnthony Liguori P9_TREMOVE = 122, 759f107513SAnthony Liguori P9_RREMOVE, 769f107513SAnthony Liguori P9_TSTAT = 124, 779f107513SAnthony Liguori P9_RSTAT, 789f107513SAnthony Liguori P9_TWSTAT = 126, 799f107513SAnthony Liguori P9_RWSTAT, 809f107513SAnthony Liguori }; 819f107513SAnthony Liguori 829f107513SAnthony Liguori 839f107513SAnthony Liguori /* qid.types */ 849f107513SAnthony Liguori enum { 859f107513SAnthony Liguori P9_QTDIR = 0x80, 869f107513SAnthony Liguori P9_QTAPPEND = 0x40, 879f107513SAnthony Liguori P9_QTEXCL = 0x20, 889f107513SAnthony Liguori P9_QTMOUNT = 0x10, 899f107513SAnthony Liguori P9_QTAUTH = 0x08, 909f107513SAnthony Liguori P9_QTTMP = 0x04, 919f107513SAnthony Liguori P9_QTSYMLINK = 0x02, 929f107513SAnthony Liguori P9_QTLINK = 0x01, 939f107513SAnthony Liguori P9_QTFILE = 0x00, 949f107513SAnthony Liguori }; 959f107513SAnthony Liguori 9684151514SM. Mohan Kumar enum p9_proto_version { 9784151514SM. Mohan Kumar V9FS_PROTO_2000U = 0x01, 9884151514SM. Mohan Kumar V9FS_PROTO_2000L = 0x02, 9984151514SM. Mohan Kumar }; 10084151514SM. Mohan Kumar 1019f107513SAnthony Liguori #define P9_NOTAG (u16)(~0) 1029f107513SAnthony Liguori #define P9_NOFID (u32)(~0) 1039f107513SAnthony Liguori #define P9_MAXWELEM 16 104*faa44e3dSVenkateswararao Jujjuri (JV) static inline const char *rpath(FsContext *ctx, const char *path, char *buffer) 105*faa44e3dSVenkateswararao Jujjuri (JV) { 106*faa44e3dSVenkateswararao Jujjuri (JV) snprintf(buffer, PATH_MAX, "%s/%s", ctx->fs_root, path); 107*faa44e3dSVenkateswararao Jujjuri (JV) return buffer; 108*faa44e3dSVenkateswararao Jujjuri (JV) } 1099f107513SAnthony Liguori 1105e94c103SM. Mohan Kumar /* 1115e94c103SM. Mohan Kumar * ample room for Twrite/Rread header 1125e94c103SM. Mohan Kumar * size[4] Tread/Twrite tag[2] fid[4] offset[8] count[4] 1135e94c103SM. Mohan Kumar */ 1145e94c103SM. Mohan Kumar #define P9_IOHDRSZ 24 1155e94c103SM. Mohan Kumar 1169f107513SAnthony Liguori typedef struct V9fsPDU V9fsPDU; 1179f107513SAnthony Liguori 1189f107513SAnthony Liguori struct V9fsPDU 1199f107513SAnthony Liguori { 1209f107513SAnthony Liguori uint32_t size; 1219f107513SAnthony Liguori uint16_t tag; 1229f107513SAnthony Liguori uint8_t id; 1239f107513SAnthony Liguori VirtQueueElement elem; 1249f107513SAnthony Liguori QLIST_ENTRY(V9fsPDU) next; 1259f107513SAnthony Liguori }; 1269f107513SAnthony Liguori 1279f107513SAnthony Liguori 1289f107513SAnthony Liguori /* FIXME 1299f107513SAnthony Liguori * 1) change user needs to set groups and stuff 1309f107513SAnthony Liguori */ 1319f107513SAnthony Liguori 1329f107513SAnthony Liguori /* from Linux's linux/virtio_9p.h */ 1339f107513SAnthony Liguori 1349f107513SAnthony Liguori /* The ID for virtio console */ 1359f107513SAnthony Liguori #define VIRTIO_ID_9P 9 1369f107513SAnthony Liguori #define MAX_REQ 128 1379f107513SAnthony Liguori #define MAX_TAG_LEN 32 1389f107513SAnthony Liguori 1399f107513SAnthony Liguori #define BUG_ON(cond) assert(!(cond)) 1409f107513SAnthony Liguori 1419f107513SAnthony Liguori typedef struct V9fsFidState V9fsFidState; 1429f107513SAnthony Liguori 1439f107513SAnthony Liguori typedef struct V9fsString 1449f107513SAnthony Liguori { 1459f107513SAnthony Liguori int16_t size; 1469f107513SAnthony Liguori char *data; 1479f107513SAnthony Liguori } V9fsString; 1489f107513SAnthony Liguori 1499f107513SAnthony Liguori typedef struct V9fsQID 1509f107513SAnthony Liguori { 1519f107513SAnthony Liguori int8_t type; 1529f107513SAnthony Liguori int32_t version; 1539f107513SAnthony Liguori int64_t path; 1549f107513SAnthony Liguori } V9fsQID; 1559f107513SAnthony Liguori 1569f107513SAnthony Liguori typedef struct V9fsStat 1579f107513SAnthony Liguori { 1589f107513SAnthony Liguori int16_t size; 1599f107513SAnthony Liguori int16_t type; 1609f107513SAnthony Liguori int32_t dev; 1619f107513SAnthony Liguori V9fsQID qid; 1629f107513SAnthony Liguori int32_t mode; 1639f107513SAnthony Liguori int32_t atime; 1649f107513SAnthony Liguori int32_t mtime; 1659f107513SAnthony Liguori int64_t length; 1669f107513SAnthony Liguori V9fsString name; 1679f107513SAnthony Liguori V9fsString uid; 1689f107513SAnthony Liguori V9fsString gid; 1699f107513SAnthony Liguori V9fsString muid; 1709f107513SAnthony Liguori /* 9p2000.u */ 1719f107513SAnthony Liguori V9fsString extension; 1729f107513SAnthony Liguori int32_t n_uid; 1739f107513SAnthony Liguori int32_t n_gid; 1749f107513SAnthony Liguori int32_t n_muid; 1759f107513SAnthony Liguori } V9fsStat; 1769f107513SAnthony Liguori 177d62dbb51SAneesh Kumar K.V enum { 178d62dbb51SAneesh Kumar K.V P9_FID_NONE = 0, 179d62dbb51SAneesh Kumar K.V P9_FID_FILE, 180d62dbb51SAneesh Kumar K.V P9_FID_DIR, 181d62dbb51SAneesh Kumar K.V P9_FID_XATTR, 182d62dbb51SAneesh Kumar K.V }; 183d62dbb51SAneesh Kumar K.V 184d62dbb51SAneesh Kumar K.V typedef struct V9fsXattr 185d62dbb51SAneesh Kumar K.V { 186d62dbb51SAneesh Kumar K.V int64_t copied_len; 187d62dbb51SAneesh Kumar K.V int64_t len; 188d62dbb51SAneesh Kumar K.V void *value; 189d62dbb51SAneesh Kumar K.V V9fsString name; 190d62dbb51SAneesh Kumar K.V int flags; 191d62dbb51SAneesh Kumar K.V } V9fsXattr; 192d62dbb51SAneesh Kumar K.V 1939f107513SAnthony Liguori struct V9fsFidState 1949f107513SAnthony Liguori { 195d62dbb51SAneesh Kumar K.V int fid_type; 1969f107513SAnthony Liguori int32_t fid; 1979f107513SAnthony Liguori V9fsString path; 198d62dbb51SAneesh Kumar K.V union { 1999f107513SAnthony Liguori int fd; 2009f107513SAnthony Liguori DIR *dir; 201d62dbb51SAneesh Kumar K.V V9fsXattr xattr; 202d62dbb51SAneesh Kumar K.V } fs; 2039f107513SAnthony Liguori uid_t uid; 2049f107513SAnthony Liguori V9fsFidState *next; 2059f107513SAnthony Liguori }; 2069f107513SAnthony Liguori 2079f107513SAnthony Liguori typedef struct V9fsState 2089f107513SAnthony Liguori { 2099f107513SAnthony Liguori VirtIODevice vdev; 2109f107513SAnthony Liguori VirtQueue *vq; 2119f107513SAnthony Liguori V9fsPDU pdus[MAX_REQ]; 2129f107513SAnthony Liguori QLIST_HEAD(, V9fsPDU) free_list; 2139f107513SAnthony Liguori V9fsFidState *fid_list; 2149f107513SAnthony Liguori FileOperations *ops; 2159f107513SAnthony Liguori FsContext ctx; 2169f107513SAnthony Liguori uint16_t tag_len; 2179f107513SAnthony Liguori uint8_t *tag; 2189f107513SAnthony Liguori size_t config_size; 21984151514SM. Mohan Kumar enum p9_proto_version proto_version; 2205e94c103SM. Mohan Kumar int32_t msize; 2219f107513SAnthony Liguori } V9fsState; 2229f107513SAnthony Liguori 223fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsCreateState { 224fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 225fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 226fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 227fac4f111SVenkateswararao Jujjuri (JV) V9fsQID qid; 228fac4f111SVenkateswararao Jujjuri (JV) int32_t perm; 229fac4f111SVenkateswararao Jujjuri (JV) int8_t mode; 230fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 231fac4f111SVenkateswararao Jujjuri (JV) V9fsString name; 232fac4f111SVenkateswararao Jujjuri (JV) V9fsString extension; 233fac4f111SVenkateswararao Jujjuri (JV) V9fsString fullname; 2345e94c103SM. Mohan Kumar int iounit; 235fac4f111SVenkateswararao Jujjuri (JV) } V9fsCreateState; 236fac4f111SVenkateswararao Jujjuri (JV) 237c1568af5SVenkateswararao Jujjuri (JV) typedef struct V9fsLcreateState { 238c1568af5SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 239c1568af5SVenkateswararao Jujjuri (JV) size_t offset; 240c1568af5SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 241c1568af5SVenkateswararao Jujjuri (JV) V9fsQID qid; 242c1568af5SVenkateswararao Jujjuri (JV) int32_t iounit; 243c1568af5SVenkateswararao Jujjuri (JV) struct stat stbuf; 244c1568af5SVenkateswararao Jujjuri (JV) V9fsString name; 245c1568af5SVenkateswararao Jujjuri (JV) V9fsString fullname; 246c1568af5SVenkateswararao Jujjuri (JV) } V9fsLcreateState; 247c1568af5SVenkateswararao Jujjuri (JV) 248fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsStatState { 249fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 250fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 251fac4f111SVenkateswararao Jujjuri (JV) V9fsStat v9stat; 252fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 253fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 254fac4f111SVenkateswararao Jujjuri (JV) } V9fsStatState; 255fac4f111SVenkateswararao Jujjuri (JV) 25600ede4c2SSripathi Kodi typedef struct V9fsStatDotl { 25700ede4c2SSripathi Kodi uint64_t st_result_mask; 25800ede4c2SSripathi Kodi V9fsQID qid; 25900ede4c2SSripathi Kodi uint32_t st_mode; 26000ede4c2SSripathi Kodi uint32_t st_uid; 26100ede4c2SSripathi Kodi uint32_t st_gid; 26200ede4c2SSripathi Kodi uint64_t st_nlink; 26300ede4c2SSripathi Kodi uint64_t st_rdev; 26400ede4c2SSripathi Kodi uint64_t st_size; 26500ede4c2SSripathi Kodi uint64_t st_blksize; 26600ede4c2SSripathi Kodi uint64_t st_blocks; 26700ede4c2SSripathi Kodi uint64_t st_atime_sec; 26800ede4c2SSripathi Kodi uint64_t st_atime_nsec; 26900ede4c2SSripathi Kodi uint64_t st_mtime_sec; 27000ede4c2SSripathi Kodi uint64_t st_mtime_nsec; 27100ede4c2SSripathi Kodi uint64_t st_ctime_sec; 27200ede4c2SSripathi Kodi uint64_t st_ctime_nsec; 27300ede4c2SSripathi Kodi uint64_t st_btime_sec; 27400ede4c2SSripathi Kodi uint64_t st_btime_nsec; 27500ede4c2SSripathi Kodi uint64_t st_gen; 27600ede4c2SSripathi Kodi uint64_t st_data_version; 27700ede4c2SSripathi Kodi } V9fsStatDotl; 27800ede4c2SSripathi Kodi 27900ede4c2SSripathi Kodi typedef struct V9fsStatStateDotl { 28000ede4c2SSripathi Kodi V9fsPDU *pdu; 28100ede4c2SSripathi Kodi size_t offset; 28200ede4c2SSripathi Kodi V9fsStatDotl v9stat_dotl; 28300ede4c2SSripathi Kodi struct stat stbuf; 28400ede4c2SSripathi Kodi } V9fsStatStateDotl; 28500ede4c2SSripathi Kodi 28600ede4c2SSripathi Kodi 287fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsWalkState { 288fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 289fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 2904f8dee2dSHarsh Prateek Bora uint16_t nwnames; 291fac4f111SVenkateswararao Jujjuri (JV) int name_idx; 292fac4f111SVenkateswararao Jujjuri (JV) V9fsQID *qids; 293fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 294fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *newfidp; 295fac4f111SVenkateswararao Jujjuri (JV) V9fsString path; 296fac4f111SVenkateswararao Jujjuri (JV) V9fsString *wnames; 297fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 298fac4f111SVenkateswararao Jujjuri (JV) } V9fsWalkState; 299fac4f111SVenkateswararao Jujjuri (JV) 300fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsOpenState { 301fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 302fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 303771e9d4cSM. Mohan Kumar int32_t mode; 304fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 305fac4f111SVenkateswararao Jujjuri (JV) V9fsQID qid; 306fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 3075e94c103SM. Mohan Kumar int iounit; 308fac4f111SVenkateswararao Jujjuri (JV) } V9fsOpenState; 309fac4f111SVenkateswararao Jujjuri (JV) 310fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsReadState { 311fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 312fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 313fac4f111SVenkateswararao Jujjuri (JV) int32_t count; 314fac4f111SVenkateswararao Jujjuri (JV) int32_t total; 315fac4f111SVenkateswararao Jujjuri (JV) int64_t off; 316fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 317fac4f111SVenkateswararao Jujjuri (JV) struct iovec iov[128]; /* FIXME: bad, bad, bad */ 318fac4f111SVenkateswararao Jujjuri (JV) struct iovec *sg; 319fac4f111SVenkateswararao Jujjuri (JV) off_t dir_pos; 320fac4f111SVenkateswararao Jujjuri (JV) struct dirent *dent; 321fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 322fac4f111SVenkateswararao Jujjuri (JV) V9fsString name; 323fac4f111SVenkateswararao Jujjuri (JV) V9fsStat v9stat; 324fac4f111SVenkateswararao Jujjuri (JV) int32_t len; 325fac4f111SVenkateswararao Jujjuri (JV) int32_t cnt; 326fac4f111SVenkateswararao Jujjuri (JV) int32_t max_count; 327fac4f111SVenkateswararao Jujjuri (JV) } V9fsReadState; 328fac4f111SVenkateswararao Jujjuri (JV) 329fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsWriteState { 330fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 331fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 332fac4f111SVenkateswararao Jujjuri (JV) int32_t len; 333fac4f111SVenkateswararao Jujjuri (JV) int32_t count; 334fac4f111SVenkateswararao Jujjuri (JV) int32_t total; 335fac4f111SVenkateswararao Jujjuri (JV) int64_t off; 336fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 337fac4f111SVenkateswararao Jujjuri (JV) struct iovec iov[128]; /* FIXME: bad, bad, bad */ 338fac4f111SVenkateswararao Jujjuri (JV) struct iovec *sg; 339fac4f111SVenkateswararao Jujjuri (JV) int cnt; 340fac4f111SVenkateswararao Jujjuri (JV) } V9fsWriteState; 341fac4f111SVenkateswararao Jujjuri (JV) 342fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsRemoveState { 343fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 344fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 345fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 346fac4f111SVenkateswararao Jujjuri (JV) } V9fsRemoveState; 347fac4f111SVenkateswararao Jujjuri (JV) 348fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsWstatState 349fac4f111SVenkateswararao Jujjuri (JV) { 350fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 351fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 352fac4f111SVenkateswararao Jujjuri (JV) int16_t unused; 353fac4f111SVenkateswararao Jujjuri (JV) V9fsStat v9stat; 354fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 355fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 356fac4f111SVenkateswararao Jujjuri (JV) } V9fsWstatState; 357fac4f111SVenkateswararao Jujjuri (JV) 35808c60fc9SVenkateswararao Jujjuri (JV) typedef struct V9fsSymlinkState 35908c60fc9SVenkateswararao Jujjuri (JV) { 36008c60fc9SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 36108c60fc9SVenkateswararao Jujjuri (JV) size_t offset; 36208c60fc9SVenkateswararao Jujjuri (JV) V9fsString name; 36308c60fc9SVenkateswararao Jujjuri (JV) V9fsString symname; 36408c60fc9SVenkateswararao Jujjuri (JV) V9fsString fullname; 36508c60fc9SVenkateswararao Jujjuri (JV) V9fsFidState *dfidp; 36608c60fc9SVenkateswararao Jujjuri (JV) V9fsQID qid; 36708c60fc9SVenkateswararao Jujjuri (JV) struct stat stbuf; 36808c60fc9SVenkateswararao Jujjuri (JV) } V9fsSymlinkState; 36908c60fc9SVenkateswararao Jujjuri (JV) 370c79ce737SSripathi Kodi typedef struct V9fsIattr 371c79ce737SSripathi Kodi { 372c79ce737SSripathi Kodi int32_t valid; 373c79ce737SSripathi Kodi int32_t mode; 374c79ce737SSripathi Kodi int32_t uid; 375c79ce737SSripathi Kodi int32_t gid; 376c79ce737SSripathi Kodi int64_t size; 377c79ce737SSripathi Kodi int64_t atime_sec; 378c79ce737SSripathi Kodi int64_t atime_nsec; 379c79ce737SSripathi Kodi int64_t mtime_sec; 380c79ce737SSripathi Kodi int64_t mtime_nsec; 381c79ce737SSripathi Kodi } V9fsIattr; 382c79ce737SSripathi Kodi 383c79ce737SSripathi Kodi typedef struct V9fsSetattrState 384c79ce737SSripathi Kodi { 385c79ce737SSripathi Kodi V9fsPDU *pdu; 386c79ce737SSripathi Kodi size_t offset; 387c79ce737SSripathi Kodi V9fsIattr v9iattr; 388c79ce737SSripathi Kodi V9fsFidState *fidp; 389c79ce737SSripathi Kodi } V9fsSetattrState; 390c79ce737SSripathi Kodi 3919f107513SAnthony Liguori struct virtio_9p_config 3929f107513SAnthony Liguori { 3939f107513SAnthony Liguori /* number of characters in tag */ 3949f107513SAnthony Liguori uint16_t tag_len; 3959f107513SAnthony Liguori /* Variable size tag name */ 3969f107513SAnthony Liguori uint8_t tag[0]; 3979f107513SAnthony Liguori } __attribute__((packed)); 3989f107513SAnthony Liguori 399be940c87SM. Mohan Kumar typedef struct V9fsStatfs 400be940c87SM. Mohan Kumar { 401be940c87SM. Mohan Kumar uint32_t f_type; 402be940c87SM. Mohan Kumar uint32_t f_bsize; 403be940c87SM. Mohan Kumar uint64_t f_blocks; 404be940c87SM. Mohan Kumar uint64_t f_bfree; 405be940c87SM. Mohan Kumar uint64_t f_bavail; 406be940c87SM. Mohan Kumar uint64_t f_files; 407be940c87SM. Mohan Kumar uint64_t f_ffree; 408be940c87SM. Mohan Kumar uint64_t fsid_val; 409be940c87SM. Mohan Kumar uint32_t f_namelen; 410be940c87SM. Mohan Kumar } V9fsStatfs; 411be940c87SM. Mohan Kumar 412be940c87SM. Mohan Kumar typedef struct V9fsStatfsState { 413be940c87SM. Mohan Kumar V9fsPDU *pdu; 414be940c87SM. Mohan Kumar size_t offset; 415be940c87SM. Mohan Kumar int32_t fid; 416be940c87SM. Mohan Kumar V9fsStatfs v9statfs; 417be940c87SM. Mohan Kumar V9fsFidState *fidp; 418be940c87SM. Mohan Kumar struct statfs stbuf; 419be940c87SM. Mohan Kumar } V9fsStatfsState; 420be940c87SM. Mohan Kumar 4215268ceccSM. Mohan Kumar typedef struct V9fsMkState { 4225268ceccSM. Mohan Kumar V9fsPDU *pdu; 4235268ceccSM. Mohan Kumar size_t offset; 4245268ceccSM. Mohan Kumar V9fsQID qid; 4255268ceccSM. Mohan Kumar struct stat stbuf; 4265268ceccSM. Mohan Kumar V9fsString name; 4275268ceccSM. Mohan Kumar V9fsString fullname; 4285268ceccSM. Mohan Kumar } V9fsMkState; 4295268ceccSM. Mohan Kumar 430c7b4b0b3SM. Mohan Kumar typedef struct V9fsRenameState { 431c7b4b0b3SM. Mohan Kumar V9fsPDU *pdu; 432c7b4b0b3SM. Mohan Kumar V9fsFidState *fidp; 433c7b4b0b3SM. Mohan Kumar size_t offset; 434c7b4b0b3SM. Mohan Kumar int32_t newdirfid; 435c7b4b0b3SM. Mohan Kumar V9fsString name; 436c7b4b0b3SM. Mohan Kumar } V9fsRenameState; 437c7b4b0b3SM. Mohan Kumar 438fa32ef88SAneesh Kumar K.V typedef struct V9fsXattrState 439fa32ef88SAneesh Kumar K.V { 440fa32ef88SAneesh Kumar K.V V9fsPDU *pdu; 441fa32ef88SAneesh Kumar K.V size_t offset; 442fa32ef88SAneesh Kumar K.V V9fsFidState *file_fidp; 443fa32ef88SAneesh Kumar K.V V9fsFidState *xattr_fidp; 444fa32ef88SAneesh Kumar K.V V9fsString name; 445fa32ef88SAneesh Kumar K.V int64_t size; 446fa32ef88SAneesh Kumar K.V int flags; 447fa32ef88SAneesh Kumar K.V void *value; 448fa32ef88SAneesh Kumar K.V } V9fsXattrState; 449fa32ef88SAneesh Kumar K.V 45082cc3ee8SM. Mohan Kumar #define P9_LOCK_SUCCESS 0 45182cc3ee8SM. Mohan Kumar #define P9_LOCK_BLOCKED 1 45282cc3ee8SM. Mohan Kumar #define P9_LOCK_ERROR 2 45382cc3ee8SM. Mohan Kumar #define P9_LOCK_GRACE 3 45482cc3ee8SM. Mohan Kumar 45582cc3ee8SM. Mohan Kumar #define P9_LOCK_FLAGS_BLOCK 1 45682cc3ee8SM. Mohan Kumar #define P9_LOCK_FLAGS_RECLAIM 2 45782cc3ee8SM. Mohan Kumar 45882cc3ee8SM. Mohan Kumar typedef struct V9fsFlock 45982cc3ee8SM. Mohan Kumar { 46082cc3ee8SM. Mohan Kumar uint8_t type; 46182cc3ee8SM. Mohan Kumar uint32_t flags; 46282cc3ee8SM. Mohan Kumar uint64_t start; /* absolute offset */ 46382cc3ee8SM. Mohan Kumar uint64_t length; 46482cc3ee8SM. Mohan Kumar uint32_t proc_id; 46582cc3ee8SM. Mohan Kumar V9fsString client_id; 46682cc3ee8SM. Mohan Kumar } V9fsFlock; 46782cc3ee8SM. Mohan Kumar 46882cc3ee8SM. Mohan Kumar typedef struct V9fsLockState 46982cc3ee8SM. Mohan Kumar { 47082cc3ee8SM. Mohan Kumar V9fsPDU *pdu; 47182cc3ee8SM. Mohan Kumar size_t offset; 47282cc3ee8SM. Mohan Kumar int8_t status; 47382cc3ee8SM. Mohan Kumar struct stat stbuf; 47482cc3ee8SM. Mohan Kumar V9fsFidState *fidp; 47582cc3ee8SM. Mohan Kumar V9fsFlock *flock; 47682cc3ee8SM. Mohan Kumar } V9fsLockState; 47782cc3ee8SM. Mohan Kumar 4788f354003SM. Mohan Kumar typedef struct V9fsGetlock 4798f354003SM. Mohan Kumar { 4808f354003SM. Mohan Kumar uint8_t type; 4818f354003SM. Mohan Kumar uint64_t start; /* absolute offset */ 4828f354003SM. Mohan Kumar uint64_t length; 4838f354003SM. Mohan Kumar uint32_t proc_id; 4848f354003SM. Mohan Kumar V9fsString client_id; 4858f354003SM. Mohan Kumar } V9fsGetlock; 4868f354003SM. Mohan Kumar 4878f354003SM. Mohan Kumar typedef struct V9fsGetlockState 4888f354003SM. Mohan Kumar { 4898f354003SM. Mohan Kumar V9fsPDU *pdu; 4908f354003SM. Mohan Kumar size_t offset; 4918f354003SM. Mohan Kumar struct stat stbuf; 4928f354003SM. Mohan Kumar V9fsFidState *fidp; 4938f354003SM. Mohan Kumar V9fsGetlock *glock; 4948f354003SM. Mohan Kumar } V9fsGetlockState; 4958f354003SM. Mohan Kumar 496df0973a4SM. Mohan Kumar typedef struct V9fsReadLinkState 497df0973a4SM. Mohan Kumar { 498df0973a4SM. Mohan Kumar V9fsPDU *pdu; 499df0973a4SM. Mohan Kumar size_t offset; 500df0973a4SM. Mohan Kumar V9fsString target; 501df0973a4SM. Mohan Kumar } V9fsReadLinkState; 5028f354003SM. Mohan Kumar 50364b85a8fSBlue Swirl size_t pdu_packunpack(void *addr, struct iovec *sg, int sg_count, 5049f107513SAnthony Liguori size_t offset, size_t size, int pack); 5059f107513SAnthony Liguori 5069f107513SAnthony Liguori static inline size_t do_pdu_unpack(void *dst, struct iovec *sg, int sg_count, 5079f107513SAnthony Liguori size_t offset, size_t size) 5089f107513SAnthony Liguori { 5099f107513SAnthony Liguori return pdu_packunpack(dst, sg, sg_count, offset, size, 0); 5109f107513SAnthony Liguori } 5119f107513SAnthony Liguori 512f4f61d27SAneesh Kumar K.V extern void handle_9p_output(VirtIODevice *vdev, VirtQueue *vq); 513f4f61d27SAneesh Kumar K.V 5149f107513SAnthony Liguori #endif 515