#ifndef KVM__VIRTIO_9P_H
#define KVM__VIRTIO_9P_H
#include "kvm/virtio.h"
#include "kvm/pci.h"
#include "kvm/threadpool.h"
#include "kvm/parse-options.h"

#include <dirent.h>
#include <linux/list.h>
#include <linux/rbtree.h>

#define NUM_VIRT_QUEUES		1
#define VIRTQUEUE_NUM		128
#define	VIRTIO_9P_DEFAULT_TAG	"kvm_9p"
#define VIRTIO_9P_HDR_LEN	(sizeof(u32)+sizeof(u8)+sizeof(u16))
#define VIRTIO_9P_VERSION_DOTL	"9P2000.L"
#define MAX_TAG_LEN		32

struct p9_msg {
	u32			size;
	u8			cmd;
	u16			tag;
	u8			msg[0];
} __attribute__((packed));

struct p9_fid {
	u32			fid;
	u32			uid;
	char			abs_path[PATH_MAX];
	char			*path;
	DIR			*dir;
	int			fd;
	struct rb_node		node;
};

struct p9_dev_job {
	struct virt_queue	*vq;
	struct p9_dev		*p9dev;
	struct thread_pool__job job_id;
};

struct p9_dev {
	struct list_head	list;
	struct virtio_device	vdev;
	struct rb_root		fids;

	size_t config_size;
	struct virtio_9p_config	*config;
	u16			tag_len;

	/* virtio queue */
	struct virt_queue	vqs[NUM_VIRT_QUEUES];
	struct p9_dev_job	jobs[NUM_VIRT_QUEUES];
	char			root_dir[PATH_MAX];
};

struct p9_pdu {
	u32			queue_head;
	size_t			read_offset;
	size_t			write_offset;
	u16			out_iov_cnt;
	u16			in_iov_cnt;
	struct iovec		in_iov[VIRTQUEUE_NUM];
	struct iovec		out_iov[VIRTQUEUE_NUM];
};

struct kvm;

int virtio_9p_rootdir_parser(const struct option *opt, const char *arg, int unset);
int virtio_9p_img_name_parser(const struct option *opt, const char *arg, int unset);
int virtio_9p__register(struct kvm *kvm, const char *root, const char *tag_name);
int virtio_9p__init(struct kvm *kvm);
int virtio_9p__exit(struct kvm *kvm);
int virtio_p9_pdu_readf(struct p9_pdu *pdu, const char *fmt, ...);
int virtio_p9_pdu_writef(struct p9_pdu *pdu, const char *fmt, ...);

#endif
