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> 87a462745SAneesh Kumar K.V #include <sys/resource.h> 90d09e41aSPaolo Bonzini #include "hw/virtio/virtio.h" 10353ac78dSAneesh Kumar K.V #include "fsdev/file-op-9p.h" 1110925bf0SM. Mohan Kumar #include "fsdev/virtio-9p-marshal.h" 121de7afc9SPaolo Bonzini #include "qemu/thread.h" 13737e150eSPaolo Bonzini #include "block/coroutine.h" 149f107513SAnthony Liguori 1510925bf0SM. Mohan Kumar 169f107513SAnthony Liguori /* The feature bitmap for virtio 9P */ 179f107513SAnthony Liguori /* The mount point is specified in a config variable */ 189f107513SAnthony Liguori #define VIRTIO_9P_MOUNT_TAG 0 199f107513SAnthony Liguori 209f107513SAnthony Liguori enum { 218f4d1ca5SArun R Bharadwaj P9_TLERROR = 6, 228f4d1ca5SArun R Bharadwaj P9_RLERROR, 23be940c87SM. Mohan Kumar P9_TSTATFS = 8, 24be940c87SM. Mohan Kumar P9_RSTATFS, 25771e9d4cSM. Mohan Kumar P9_TLOPEN = 12, 26771e9d4cSM. Mohan Kumar P9_RLOPEN, 27c1568af5SVenkateswararao Jujjuri (JV) P9_TLCREATE = 14, 28c1568af5SVenkateswararao Jujjuri (JV) P9_RLCREATE, 2908c60fc9SVenkateswararao Jujjuri (JV) P9_TSYMLINK = 16, 3008c60fc9SVenkateswararao Jujjuri (JV) P9_RSYMLINK, 315268ceccSM. Mohan Kumar P9_TMKNOD = 18, 325268ceccSM. Mohan Kumar P9_RMKNOD, 33c7b4b0b3SM. Mohan Kumar P9_TRENAME = 20, 34c7b4b0b3SM. Mohan Kumar P9_RRENAME, 35df0973a4SM. Mohan Kumar P9_TREADLINK = 22, 36df0973a4SM. Mohan Kumar P9_RREADLINK, 3700ede4c2SSripathi Kodi P9_TGETATTR = 24, 3800ede4c2SSripathi Kodi P9_RGETATTR, 39c79ce737SSripathi Kodi P9_TSETATTR = 26, 40c79ce737SSripathi Kodi P9_RSETATTR, 41fa32ef88SAneesh Kumar K.V P9_TXATTRWALK = 30, 42fa32ef88SAneesh Kumar K.V P9_RXATTRWALK, 4310b468bdSAneesh Kumar K.V P9_TXATTRCREATE = 32, 4410b468bdSAneesh Kumar K.V P9_RXATTRCREATE, 45c18e2f94SSripathi Kodi P9_TREADDIR = 40, 46c18e2f94SSripathi Kodi P9_RREADDIR, 47b41e95d3SVenkateswararao Jujjuri (JV) P9_TFSYNC = 50, 48b41e95d3SVenkateswararao Jujjuri (JV) P9_RFSYNC, 4982cc3ee8SM. Mohan Kumar P9_TLOCK = 52, 5082cc3ee8SM. Mohan Kumar P9_RLOCK, 518f354003SM. Mohan Kumar P9_TGETLOCK = 54, 528f354003SM. Mohan Kumar P9_RGETLOCK, 53b2c224beSVenkateswararao Jujjuri (JV) P9_TLINK = 70, 54b2c224beSVenkateswararao Jujjuri (JV) P9_RLINK, 55b67592eaSM. Mohan Kumar P9_TMKDIR = 72, 56b67592eaSM. Mohan Kumar P9_RMKDIR, 5789bf6593SAneesh Kumar K.V P9_TRENAMEAT = 74, 5889bf6593SAneesh Kumar K.V P9_RRENAMEAT, 597834cf77SAneesh Kumar K.V P9_TUNLINKAT = 76, 607834cf77SAneesh Kumar K.V P9_RUNLINKAT, 619f107513SAnthony Liguori P9_TVERSION = 100, 629f107513SAnthony Liguori P9_RVERSION, 639f107513SAnthony Liguori P9_TAUTH = 102, 649f107513SAnthony Liguori P9_RAUTH, 659f107513SAnthony Liguori P9_TATTACH = 104, 669f107513SAnthony Liguori P9_RATTACH, 679f107513SAnthony Liguori P9_TERROR = 106, 689f107513SAnthony Liguori P9_RERROR, 699f107513SAnthony Liguori P9_TFLUSH = 108, 709f107513SAnthony Liguori P9_RFLUSH, 719f107513SAnthony Liguori P9_TWALK = 110, 729f107513SAnthony Liguori P9_RWALK, 739f107513SAnthony Liguori P9_TOPEN = 112, 749f107513SAnthony Liguori P9_ROPEN, 759f107513SAnthony Liguori P9_TCREATE = 114, 769f107513SAnthony Liguori P9_RCREATE, 779f107513SAnthony Liguori P9_TREAD = 116, 789f107513SAnthony Liguori P9_RREAD, 799f107513SAnthony Liguori P9_TWRITE = 118, 809f107513SAnthony Liguori P9_RWRITE, 819f107513SAnthony Liguori P9_TCLUNK = 120, 829f107513SAnthony Liguori P9_RCLUNK, 839f107513SAnthony Liguori P9_TREMOVE = 122, 849f107513SAnthony Liguori P9_RREMOVE, 859f107513SAnthony Liguori P9_TSTAT = 124, 869f107513SAnthony Liguori P9_RSTAT, 879f107513SAnthony Liguori P9_TWSTAT = 126, 889f107513SAnthony Liguori P9_RWSTAT, 899f107513SAnthony Liguori }; 909f107513SAnthony Liguori 919f107513SAnthony Liguori 929f107513SAnthony Liguori /* qid.types */ 939f107513SAnthony Liguori enum { 949f107513SAnthony Liguori P9_QTDIR = 0x80, 959f107513SAnthony Liguori P9_QTAPPEND = 0x40, 969f107513SAnthony Liguori P9_QTEXCL = 0x20, 979f107513SAnthony Liguori P9_QTMOUNT = 0x10, 989f107513SAnthony Liguori P9_QTAUTH = 0x08, 999f107513SAnthony Liguori P9_QTTMP = 0x04, 1009f107513SAnthony Liguori P9_QTSYMLINK = 0x02, 1019f107513SAnthony Liguori P9_QTLINK = 0x01, 1029f107513SAnthony Liguori P9_QTFILE = 0x00, 1039f107513SAnthony Liguori }; 1049f107513SAnthony Liguori 10584151514SM. Mohan Kumar enum p9_proto_version { 10684151514SM. Mohan Kumar V9FS_PROTO_2000U = 0x01, 10784151514SM. Mohan Kumar V9FS_PROTO_2000L = 0x02, 10884151514SM. Mohan Kumar }; 10984151514SM. Mohan Kumar 1109f107513SAnthony Liguori #define P9_NOTAG (u16)(~0) 1119f107513SAnthony Liguori #define P9_NOFID (u32)(~0) 1129f107513SAnthony Liguori #define P9_MAXWELEM 16 1137a462745SAneesh Kumar K.V 1147a462745SAneesh Kumar K.V #define FID_REFERENCED 0x1 1157a462745SAneesh Kumar K.V #define FID_NON_RECLAIMABLE 0x2 116faa44e3dSVenkateswararao Jujjuri (JV) static inline const char *rpath(FsContext *ctx, const char *path, char *buffer) 117faa44e3dSVenkateswararao Jujjuri (JV) { 118faa44e3dSVenkateswararao Jujjuri (JV) snprintf(buffer, PATH_MAX, "%s/%s", ctx->fs_root, path); 119faa44e3dSVenkateswararao Jujjuri (JV) return buffer; 120faa44e3dSVenkateswararao Jujjuri (JV) } 1219f107513SAnthony Liguori 1225e94c103SM. Mohan Kumar /* 1235e94c103SM. Mohan Kumar * ample room for Twrite/Rread header 1245e94c103SM. Mohan Kumar * size[4] Tread/Twrite tag[2] fid[4] offset[8] count[4] 1255e94c103SM. Mohan Kumar */ 1265e94c103SM. Mohan Kumar #define P9_IOHDRSZ 24 1275e94c103SM. Mohan Kumar 1289f107513SAnthony Liguori typedef struct V9fsPDU V9fsPDU; 129ff06030fSVenkateswararao Jujjuri (JV) struct V9fsState; 1309f107513SAnthony Liguori 1319f107513SAnthony Liguori struct V9fsPDU 1329f107513SAnthony Liguori { 1339f107513SAnthony Liguori uint32_t size; 1349f107513SAnthony Liguori uint16_t tag; 1359f107513SAnthony Liguori uint8_t id; 136bccacf6cSAneesh Kumar K.V uint8_t cancelled; 137bccacf6cSAneesh Kumar K.V CoQueue complete; 1389f107513SAnthony Liguori VirtQueueElement elem; 139ff06030fSVenkateswararao Jujjuri (JV) struct V9fsState *s; 1409f107513SAnthony Liguori QLIST_ENTRY(V9fsPDU) next; 1419f107513SAnthony Liguori }; 1429f107513SAnthony Liguori 1439f107513SAnthony Liguori 1449f107513SAnthony Liguori /* FIXME 1459f107513SAnthony Liguori * 1) change user needs to set groups and stuff 1469f107513SAnthony Liguori */ 1479f107513SAnthony Liguori 1489f107513SAnthony Liguori /* from Linux's linux/virtio_9p.h */ 1499f107513SAnthony Liguori 1509f107513SAnthony Liguori /* The ID for virtio console */ 1519f107513SAnthony Liguori #define VIRTIO_ID_9P 9 1529f107513SAnthony Liguori #define MAX_REQ 128 1539f107513SAnthony Liguori #define MAX_TAG_LEN 32 1549f107513SAnthony Liguori 1559f107513SAnthony Liguori #define BUG_ON(cond) assert(!(cond)) 1569f107513SAnthony Liguori 1579f107513SAnthony Liguori typedef struct V9fsFidState V9fsFidState; 1589f107513SAnthony Liguori 159d62dbb51SAneesh Kumar K.V enum { 160d62dbb51SAneesh Kumar K.V P9_FID_NONE = 0, 161d62dbb51SAneesh Kumar K.V P9_FID_FILE, 162d62dbb51SAneesh Kumar K.V P9_FID_DIR, 163d62dbb51SAneesh Kumar K.V P9_FID_XATTR, 164d62dbb51SAneesh Kumar K.V }; 165d62dbb51SAneesh Kumar K.V 166d62dbb51SAneesh Kumar K.V typedef struct V9fsXattr 167d62dbb51SAneesh Kumar K.V { 168d62dbb51SAneesh Kumar K.V int64_t copied_len; 169d62dbb51SAneesh Kumar K.V int64_t len; 170d62dbb51SAneesh Kumar K.V void *value; 171d62dbb51SAneesh Kumar K.V V9fsString name; 172d62dbb51SAneesh Kumar K.V int flags; 173d62dbb51SAneesh Kumar K.V } V9fsXattr; 174d62dbb51SAneesh Kumar K.V 175cc720ddbSAneesh Kumar K.V /* 176cc720ddbSAneesh Kumar K.V * Filled by fs driver on open and other 177cc720ddbSAneesh Kumar K.V * calls. 178cc720ddbSAneesh Kumar K.V */ 179cc720ddbSAneesh Kumar K.V union V9fsFidOpenState { 180cc720ddbSAneesh Kumar K.V int fd; 181cc720ddbSAneesh Kumar K.V DIR *dir; 182cc720ddbSAneesh Kumar K.V V9fsXattr xattr; 1839db221aeSAneesh Kumar K.V /* 1849db221aeSAneesh Kumar K.V * private pointer for fs drivers, that 1859db221aeSAneesh Kumar K.V * have its own internal representation of 1869db221aeSAneesh Kumar K.V * open files. 1879db221aeSAneesh Kumar K.V */ 1889db221aeSAneesh Kumar K.V void *private; 189cc720ddbSAneesh Kumar K.V }; 190cc720ddbSAneesh Kumar K.V 1919f107513SAnthony Liguori struct V9fsFidState 1929f107513SAnthony Liguori { 193d62dbb51SAneesh Kumar K.V int fid_type; 1949f107513SAnthony Liguori int32_t fid; 1952289be19SAneesh Kumar K.V V9fsPath path; 196cc720ddbSAneesh Kumar K.V V9fsFidOpenState fs; 197cc720ddbSAneesh Kumar K.V V9fsFidOpenState fs_reclaim; 1987a462745SAneesh Kumar K.V int flags; 1997a462745SAneesh Kumar K.V int open_flags; 2009f107513SAnthony Liguori uid_t uid; 20184dfb926SAneesh Kumar K.V int ref; 20284dfb926SAneesh Kumar K.V int clunked; 2039f107513SAnthony Liguori V9fsFidState *next; 2047a462745SAneesh Kumar K.V V9fsFidState *rclm_lst; 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; 213bccacf6cSAneesh Kumar K.V QLIST_HEAD(, V9fsPDU) active_list; 2149f107513SAnthony Liguori V9fsFidState *fid_list; 2159f107513SAnthony Liguori FileOperations *ops; 2169f107513SAnthony Liguori FsContext ctx; 217e9a0152bSAneesh Kumar K.V char *tag; 2189f107513SAnthony Liguori size_t config_size; 21984151514SM. Mohan Kumar enum p9_proto_version proto_version; 2205e94c103SM. Mohan Kumar int32_t msize; 22102cb7f3aSAneesh Kumar K.V /* 22202cb7f3aSAneesh Kumar K.V * lock ensuring atomic path update 22302cb7f3aSAneesh Kumar K.V * on rename. 22402cb7f3aSAneesh Kumar K.V */ 22502cb7f3aSAneesh Kumar K.V CoRwlock rename_lock; 226e9a0152bSAneesh Kumar K.V int32_t root_fid; 227e9a0152bSAneesh Kumar K.V Error *migration_blocker; 228*e7303c43SKONRAD Frederic V9fsConf fsconf; 2299f107513SAnthony Liguori } V9fsState; 2309f107513SAnthony Liguori 231fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsStatState { 232fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 233fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 234fac4f111SVenkateswararao Jujjuri (JV) V9fsStat v9stat; 235fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 236fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 237fac4f111SVenkateswararao Jujjuri (JV) } V9fsStatState; 238fac4f111SVenkateswararao Jujjuri (JV) 239fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsOpenState { 240fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 241fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 242771e9d4cSM. Mohan Kumar int32_t mode; 243fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 244fac4f111SVenkateswararao Jujjuri (JV) V9fsQID qid; 245fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 2465e94c103SM. Mohan Kumar int iounit; 247fac4f111SVenkateswararao Jujjuri (JV) } V9fsOpenState; 248fac4f111SVenkateswararao Jujjuri (JV) 249fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsReadState { 250fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 251fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 252fac4f111SVenkateswararao Jujjuri (JV) int32_t count; 253fac4f111SVenkateswararao Jujjuri (JV) int32_t total; 254fac4f111SVenkateswararao Jujjuri (JV) int64_t off; 255fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 256fac4f111SVenkateswararao Jujjuri (JV) struct iovec iov[128]; /* FIXME: bad, bad, bad */ 257fac4f111SVenkateswararao Jujjuri (JV) struct iovec *sg; 258fac4f111SVenkateswararao Jujjuri (JV) off_t dir_pos; 259fac4f111SVenkateswararao Jujjuri (JV) struct dirent *dent; 260fac4f111SVenkateswararao Jujjuri (JV) struct stat stbuf; 261fac4f111SVenkateswararao Jujjuri (JV) V9fsString name; 262fac4f111SVenkateswararao Jujjuri (JV) V9fsStat v9stat; 263fac4f111SVenkateswararao Jujjuri (JV) int32_t len; 264fac4f111SVenkateswararao Jujjuri (JV) int32_t cnt; 265fac4f111SVenkateswararao Jujjuri (JV) int32_t max_count; 266fac4f111SVenkateswararao Jujjuri (JV) } V9fsReadState; 267fac4f111SVenkateswararao Jujjuri (JV) 268fac4f111SVenkateswararao Jujjuri (JV) typedef struct V9fsWriteState { 269fac4f111SVenkateswararao Jujjuri (JV) V9fsPDU *pdu; 270fac4f111SVenkateswararao Jujjuri (JV) size_t offset; 271fac4f111SVenkateswararao Jujjuri (JV) int32_t len; 272fac4f111SVenkateswararao Jujjuri (JV) int32_t count; 273fac4f111SVenkateswararao Jujjuri (JV) int32_t total; 274fac4f111SVenkateswararao Jujjuri (JV) int64_t off; 275fac4f111SVenkateswararao Jujjuri (JV) V9fsFidState *fidp; 276fac4f111SVenkateswararao Jujjuri (JV) struct iovec iov[128]; /* FIXME: bad, bad, bad */ 277fac4f111SVenkateswararao Jujjuri (JV) struct iovec *sg; 278fac4f111SVenkateswararao Jujjuri (JV) int cnt; 279fac4f111SVenkateswararao Jujjuri (JV) } V9fsWriteState; 280fac4f111SVenkateswararao Jujjuri (JV) 2819f107513SAnthony Liguori struct virtio_9p_config 2829f107513SAnthony Liguori { 2839f107513SAnthony Liguori /* number of characters in tag */ 2849f107513SAnthony Liguori uint16_t tag_len; 2859f107513SAnthony Liguori /* Variable size tag name */ 2869f107513SAnthony Liguori uint8_t tag[0]; 287541dc0d4SStefan Weil } QEMU_PACKED; 2889f107513SAnthony Liguori 2895268ceccSM. Mohan Kumar typedef struct V9fsMkState { 2905268ceccSM. Mohan Kumar V9fsPDU *pdu; 2915268ceccSM. Mohan Kumar size_t offset; 2925268ceccSM. Mohan Kumar V9fsQID qid; 2935268ceccSM. Mohan Kumar struct stat stbuf; 2945268ceccSM. Mohan Kumar V9fsString name; 2955268ceccSM. Mohan Kumar V9fsString fullname; 2965268ceccSM. Mohan Kumar } V9fsMkState; 2975268ceccSM. Mohan Kumar 2989844081bSM. Mohan Kumar /* 9p2000.L open flags */ 2999844081bSM. Mohan Kumar #define P9_DOTL_RDONLY 00000000 3009844081bSM. Mohan Kumar #define P9_DOTL_WRONLY 00000001 3019844081bSM. Mohan Kumar #define P9_DOTL_RDWR 00000002 3029844081bSM. Mohan Kumar #define P9_DOTL_NOACCESS 00000003 3039844081bSM. Mohan Kumar #define P9_DOTL_CREATE 00000100 3049844081bSM. Mohan Kumar #define P9_DOTL_EXCL 00000200 3059844081bSM. Mohan Kumar #define P9_DOTL_NOCTTY 00000400 3069844081bSM. Mohan Kumar #define P9_DOTL_TRUNC 00001000 3079844081bSM. Mohan Kumar #define P9_DOTL_APPEND 00002000 3089844081bSM. Mohan Kumar #define P9_DOTL_NONBLOCK 00004000 3099844081bSM. Mohan Kumar #define P9_DOTL_DSYNC 00010000 3109844081bSM. Mohan Kumar #define P9_DOTL_FASYNC 00020000 3119844081bSM. Mohan Kumar #define P9_DOTL_DIRECT 00040000 3129844081bSM. Mohan Kumar #define P9_DOTL_LARGEFILE 00100000 3139844081bSM. Mohan Kumar #define P9_DOTL_DIRECTORY 00200000 3149844081bSM. Mohan Kumar #define P9_DOTL_NOFOLLOW 00400000 3159844081bSM. Mohan Kumar #define P9_DOTL_NOATIME 01000000 3169844081bSM. Mohan Kumar #define P9_DOTL_CLOEXEC 02000000 3179844081bSM. Mohan Kumar #define P9_DOTL_SYNC 04000000 3189844081bSM. Mohan Kumar 3199844081bSM. Mohan Kumar /* 9p2000.L at flags */ 3209844081bSM. Mohan Kumar #define P9_DOTL_AT_REMOVEDIR 0x200 3219844081bSM. Mohan Kumar 322ea60f315SM. Mohan Kumar /* 9P2000.L lock type */ 323ea60f315SM. Mohan Kumar #define P9_LOCK_TYPE_RDLCK 0 324ea60f315SM. Mohan Kumar #define P9_LOCK_TYPE_WRLCK 1 325ea60f315SM. Mohan Kumar #define P9_LOCK_TYPE_UNLCK 2 326ea60f315SM. Mohan Kumar 32782cc3ee8SM. Mohan Kumar #define P9_LOCK_SUCCESS 0 32882cc3ee8SM. Mohan Kumar #define P9_LOCK_BLOCKED 1 32982cc3ee8SM. Mohan Kumar #define P9_LOCK_ERROR 2 33082cc3ee8SM. Mohan Kumar #define P9_LOCK_GRACE 3 33182cc3ee8SM. Mohan Kumar 33282cc3ee8SM. Mohan Kumar #define P9_LOCK_FLAGS_BLOCK 1 33382cc3ee8SM. Mohan Kumar #define P9_LOCK_FLAGS_RECLAIM 2 33482cc3ee8SM. Mohan Kumar 33582cc3ee8SM. Mohan Kumar typedef struct V9fsFlock 33682cc3ee8SM. Mohan Kumar { 33782cc3ee8SM. Mohan Kumar uint8_t type; 33882cc3ee8SM. Mohan Kumar uint32_t flags; 33982cc3ee8SM. Mohan Kumar uint64_t start; /* absolute offset */ 34082cc3ee8SM. Mohan Kumar uint64_t length; 34182cc3ee8SM. Mohan Kumar uint32_t proc_id; 34282cc3ee8SM. Mohan Kumar V9fsString client_id; 34382cc3ee8SM. Mohan Kumar } V9fsFlock; 34482cc3ee8SM. Mohan Kumar 3458f354003SM. Mohan Kumar typedef struct V9fsGetlock 3468f354003SM. Mohan Kumar { 3478f354003SM. Mohan Kumar uint8_t type; 3488f354003SM. Mohan Kumar uint64_t start; /* absolute offset */ 3498f354003SM. Mohan Kumar uint64_t length; 3508f354003SM. Mohan Kumar uint32_t proc_id; 3518f354003SM. Mohan Kumar V9fsString client_id; 3528f354003SM. Mohan Kumar } V9fsGetlock; 3538f354003SM. Mohan Kumar 3547a462745SAneesh Kumar K.V extern int open_fd_hw; 3557a462745SAneesh Kumar K.V extern int total_open_fd; 3567a462745SAneesh Kumar K.V 35764b85a8fSBlue Swirl size_t pdu_packunpack(void *addr, struct iovec *sg, int sg_count, 3589f107513SAnthony Liguori size_t offset, size_t size, int pack); 3599f107513SAnthony Liguori 3609f107513SAnthony Liguori static inline size_t do_pdu_unpack(void *dst, struct iovec *sg, int sg_count, 3619f107513SAnthony Liguori size_t offset, size_t size) 3629f107513SAnthony Liguori { 3639f107513SAnthony Liguori return pdu_packunpack(dst, sg, sg_count, offset, size, 0); 3649f107513SAnthony Liguori } 3659f107513SAnthony Liguori 366532decb7SAneesh Kumar K.V static inline void v9fs_path_write_lock(V9fsState *s) 367532decb7SAneesh Kumar K.V { 368c98f1d4aSAneesh Kumar K.V if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) { 369532decb7SAneesh Kumar K.V qemu_co_rwlock_wrlock(&s->rename_lock); 370532decb7SAneesh Kumar K.V } 371532decb7SAneesh Kumar K.V } 372532decb7SAneesh Kumar K.V 373532decb7SAneesh Kumar K.V static inline void v9fs_path_read_lock(V9fsState *s) 374532decb7SAneesh Kumar K.V { 375c98f1d4aSAneesh Kumar K.V if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) { 376532decb7SAneesh Kumar K.V qemu_co_rwlock_rdlock(&s->rename_lock); 377532decb7SAneesh Kumar K.V } 378532decb7SAneesh Kumar K.V } 379532decb7SAneesh Kumar K.V 380532decb7SAneesh Kumar K.V static inline void v9fs_path_unlock(V9fsState *s) 381532decb7SAneesh Kumar K.V { 382c98f1d4aSAneesh Kumar K.V if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) { 383532decb7SAneesh Kumar K.V qemu_co_rwlock_unlock(&s->rename_lock); 384532decb7SAneesh Kumar K.V } 385532decb7SAneesh Kumar K.V } 386532decb7SAneesh Kumar K.V 387bccacf6cSAneesh Kumar K.V static inline uint8_t v9fs_request_cancelled(V9fsPDU *pdu) 388bccacf6cSAneesh Kumar K.V { 389bccacf6cSAneesh Kumar K.V return pdu->cancelled; 390bccacf6cSAneesh Kumar K.V } 391bccacf6cSAneesh Kumar K.V 392f4f61d27SAneesh Kumar K.V extern void handle_9p_output(VirtIODevice *vdev, VirtQueue *vq); 393bccacf6cSAneesh Kumar K.V extern void v9fs_reclaim_fd(V9fsPDU *pdu); 3942289be19SAneesh Kumar K.V extern void v9fs_path_init(V9fsPath *path); 3952289be19SAneesh Kumar K.V extern void v9fs_path_free(V9fsPath *path); 3962289be19SAneesh Kumar K.V extern void v9fs_path_copy(V9fsPath *lhs, V9fsPath *rhs); 3972289be19SAneesh Kumar K.V extern int v9fs_name_to_path(V9fsState *s, V9fsPath *dirpath, 3982289be19SAneesh Kumar K.V const char *name, V9fsPath *path); 39910925bf0SM. Mohan Kumar 40010925bf0SM. Mohan Kumar #define pdu_marshal(pdu, offset, fmt, args...) \ 40110925bf0SM. Mohan Kumar v9fs_marshal(pdu->elem.in_sg, pdu->elem.in_num, offset, 1, fmt, ##args) 40210925bf0SM. Mohan Kumar #define pdu_unmarshal(pdu, offset, fmt, args...) \ 40310925bf0SM. Mohan Kumar v9fs_unmarshal(pdu->elem.out_sg, pdu->elem.out_num, offset, 1, fmt, ##args) 40410925bf0SM. Mohan Kumar 405*e7303c43SKONRAD Frederic #define TYPE_VIRTIO_9P "virtio-9p-device" 406*e7303c43SKONRAD Frederic #define VIRTIO_9P(obj) \ 407*e7303c43SKONRAD Frederic OBJECT_CHECK(V9fsState, (obj), TYPE_VIRTIO_9P) 408*e7303c43SKONRAD Frederic 409*e7303c43SKONRAD Frederic #define DEFINE_VIRTIO_9P_PROPERTIES(_state, _field) \ 410*e7303c43SKONRAD Frederic DEFINE_PROP_STRING("mount_tag", _state, _field.tag), \ 411*e7303c43SKONRAD Frederic DEFINE_PROP_STRING("fsdev", _state, _field.fsdev_id) 412*e7303c43SKONRAD Frederic 4139f107513SAnthony Liguori #endif 414