// SPDX-License-Identifier: GPL-2.0-or-later
/* Vhost-user protocol */

#ifndef __VHOST_USER_H__
#define __VHOST_USER_H__

/* Message flags */
#define VHOST_USER_FLAG_REPLY		BIT(2)
#define VHOST_USER_FLAG_NEED_REPLY	BIT(3)
/* Feature bits */
#define VHOST_USER_F_PROTOCOL_FEATURES	30
/* Protocol feature bits */
#define VHOST_USER_PROTOCOL_F_REPLY_ACK		3
#define VHOST_USER_PROTOCOL_F_SLAVE_REQ		5
#define VHOST_USER_PROTOCOL_F_CONFIG		9
/* Vring state index masks */
#define VHOST_USER_VRING_INDEX_MASK	0xff
#define VHOST_USER_VRING_POLL_MASK	BIT(8)

/* Supported version */
#define VHOST_USER_VERSION		1
/* Supported transport features */
#define VHOST_USER_SUPPORTED_F		BIT_ULL(VHOST_USER_F_PROTOCOL_FEATURES)
/* Supported protocol features */
#define VHOST_USER_SUPPORTED_PROTOCOL_F	(BIT_ULL(VHOST_USER_PROTOCOL_F_REPLY_ACK) | \
					 BIT_ULL(VHOST_USER_PROTOCOL_F_SLAVE_REQ) | \
					 BIT_ULL(VHOST_USER_PROTOCOL_F_CONFIG))

enum vhost_user_request {
	VHOST_USER_GET_FEATURES = 1,
	VHOST_USER_SET_FEATURES = 2,
	VHOST_USER_SET_OWNER = 3,
	VHOST_USER_RESET_OWNER = 4,
	VHOST_USER_SET_MEM_TABLE = 5,
	VHOST_USER_SET_LOG_BASE = 6,
	VHOST_USER_SET_LOG_FD = 7,
	VHOST_USER_SET_VRING_NUM = 8,
	VHOST_USER_SET_VRING_ADDR = 9,
	VHOST_USER_SET_VRING_BASE = 10,
	VHOST_USER_GET_VRING_BASE = 11,
	VHOST_USER_SET_VRING_KICK = 12,
	VHOST_USER_SET_VRING_CALL = 13,
	VHOST_USER_SET_VRING_ERR = 14,
	VHOST_USER_GET_PROTOCOL_FEATURES = 15,
	VHOST_USER_SET_PROTOCOL_FEATURES = 16,
	VHOST_USER_GET_QUEUE_NUM = 17,
	VHOST_USER_SET_VRING_ENABLE = 18,
	VHOST_USER_SEND_RARP = 19,
	VHOST_USER_NET_SEND_MTU = 20,
	VHOST_USER_SET_SLAVE_REQ_FD = 21,
	VHOST_USER_IOTLB_MSG = 22,
	VHOST_USER_SET_VRING_ENDIAN = 23,
	VHOST_USER_GET_CONFIG = 24,
	VHOST_USER_SET_CONFIG = 25,
};

enum vhost_user_slave_request {
	VHOST_USER_SLAVE_IOTLB_MSG = 1,
	VHOST_USER_SLAVE_CONFIG_CHANGE_MSG = 2,
	VHOST_USER_SLAVE_VRING_HOST_NOTIFIER_MSG = 3,
};

struct vhost_user_header {
	/*
	 * Use enum vhost_user_request for outgoing messages,
	 * uses enum vhost_user_slave_request for incoming ones.
	 */
	u32 request;
	u32 flags;
	u32 size;
} __packed;

struct vhost_user_config {
	u32 offset;
	u32 size;
	u32 flags;
	u8 payload[0]; /* Variable length */
} __packed;

struct vhost_user_vring_state {
	u32 index;
	u32 num;
} __packed;

struct vhost_user_vring_addr {
	u32 index;
	u32 flags;
	u64 desc, used, avail, log;
} __packed;

struct vhost_user_mem_region {
	u64 guest_addr;
	u64 size;
	u64 user_addr;
	u64 mmap_offset;
} __packed;

struct vhost_user_mem_regions {
	u32 num;
	u32 padding;
	struct vhost_user_mem_region regions[2]; /* Currently supporting 2 */
} __packed;

union vhost_user_payload {
	u64 integer;
	struct vhost_user_config config;
	struct vhost_user_vring_state vring_state;
	struct vhost_user_vring_addr vring_addr;
	struct vhost_user_mem_regions mem_regions;
};

struct vhost_user_msg {
	struct vhost_user_header header;
	union vhost_user_payload payload;
} __packed;

#endif
