Linux Audio

Check our new training course

Loading...
v6.2
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/* Vhost-user protocol */
  3
  4#ifndef __VHOST_USER_H__
  5#define __VHOST_USER_H__
  6
  7/* Message flags */
  8#define VHOST_USER_FLAG_REPLY		BIT(2)
  9#define VHOST_USER_FLAG_NEED_REPLY	BIT(3)
 10/* Feature bits */
 11#define VHOST_USER_F_PROTOCOL_FEATURES	30
 12/* Protocol feature bits */
 
 13#define VHOST_USER_PROTOCOL_F_REPLY_ACK			3
 14#define VHOST_USER_PROTOCOL_F_SLAVE_REQ			5
 15#define VHOST_USER_PROTOCOL_F_CONFIG			9
 16#define VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS	14
 17/* Vring state index masks */
 18#define VHOST_USER_VRING_INDEX_MASK	0xff
 19#define VHOST_USER_VRING_POLL_MASK	BIT(8)
 20
 21/* Supported version */
 22#define VHOST_USER_VERSION		1
 23/* Supported transport features */
 24#define VHOST_USER_SUPPORTED_F		BIT_ULL(VHOST_USER_F_PROTOCOL_FEATURES)
 25/* Supported protocol features */
 26#define VHOST_USER_SUPPORTED_PROTOCOL_F	(BIT_ULL(VHOST_USER_PROTOCOL_F_REPLY_ACK) | \
 
 27					 BIT_ULL(VHOST_USER_PROTOCOL_F_SLAVE_REQ) | \
 28					 BIT_ULL(VHOST_USER_PROTOCOL_F_CONFIG) | \
 29					 BIT_ULL(VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS))
 30
 31enum vhost_user_request {
 32	VHOST_USER_GET_FEATURES = 1,
 33	VHOST_USER_SET_FEATURES = 2,
 34	VHOST_USER_SET_OWNER = 3,
 35	VHOST_USER_RESET_OWNER = 4,
 36	VHOST_USER_SET_MEM_TABLE = 5,
 37	VHOST_USER_SET_LOG_BASE = 6,
 38	VHOST_USER_SET_LOG_FD = 7,
 39	VHOST_USER_SET_VRING_NUM = 8,
 40	VHOST_USER_SET_VRING_ADDR = 9,
 41	VHOST_USER_SET_VRING_BASE = 10,
 42	VHOST_USER_GET_VRING_BASE = 11,
 43	VHOST_USER_SET_VRING_KICK = 12,
 44	VHOST_USER_SET_VRING_CALL = 13,
 45	VHOST_USER_SET_VRING_ERR = 14,
 46	VHOST_USER_GET_PROTOCOL_FEATURES = 15,
 47	VHOST_USER_SET_PROTOCOL_FEATURES = 16,
 48	VHOST_USER_GET_QUEUE_NUM = 17,
 49	VHOST_USER_SET_VRING_ENABLE = 18,
 50	VHOST_USER_SEND_RARP = 19,
 51	VHOST_USER_NET_SEND_MTU = 20,
 52	VHOST_USER_SET_SLAVE_REQ_FD = 21,
 53	VHOST_USER_IOTLB_MSG = 22,
 54	VHOST_USER_SET_VRING_ENDIAN = 23,
 55	VHOST_USER_GET_CONFIG = 24,
 56	VHOST_USER_SET_CONFIG = 25,
 57	VHOST_USER_VRING_KICK = 35,
 58};
 59
 60enum vhost_user_slave_request {
 61	VHOST_USER_SLAVE_IOTLB_MSG = 1,
 62	VHOST_USER_SLAVE_CONFIG_CHANGE_MSG = 2,
 63	VHOST_USER_SLAVE_VRING_HOST_NOTIFIER_MSG = 3,
 64	VHOST_USER_SLAVE_VRING_CALL = 4,
 65};
 66
 67struct vhost_user_header {
 68	/*
 69	 * Use enum vhost_user_request for outgoing messages,
 70	 * uses enum vhost_user_slave_request for incoming ones.
 71	 */
 72	u32 request;
 73	u32 flags;
 74	u32 size;
 75} __packed;
 76
 77struct vhost_user_config {
 78	u32 offset;
 79	u32 size;
 80	u32 flags;
 81	u8 payload[]; /* Variable length */
 82} __packed;
 83
 84struct vhost_user_vring_state {
 85	u32 index;
 86	u32 num;
 87} __packed;
 88
 89struct vhost_user_vring_addr {
 90	u32 index;
 91	u32 flags;
 92	u64 desc, used, avail, log;
 93} __packed;
 94
 95struct vhost_user_mem_region {
 96	u64 guest_addr;
 97	u64 size;
 98	u64 user_addr;
 99	u64 mmap_offset;
100} __packed;
101
102struct vhost_user_mem_regions {
103	u32 num;
104	u32 padding;
105	struct vhost_user_mem_region regions[2]; /* Currently supporting 2 */
106} __packed;
107
108union vhost_user_payload {
109	u64 integer;
110	struct vhost_user_config config;
111	struct vhost_user_vring_state vring_state;
112	struct vhost_user_vring_addr vring_addr;
113	struct vhost_user_mem_regions mem_regions;
114};
115
116struct vhost_user_msg {
117	struct vhost_user_header header;
118	union vhost_user_payload payload;
119} __packed;
120
121#endif
v6.13.7
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/* Vhost-user protocol */
  3
  4#ifndef __VHOST_USER_H__
  5#define __VHOST_USER_H__
  6
  7/* Message flags */
  8#define VHOST_USER_FLAG_REPLY		BIT(2)
  9#define VHOST_USER_FLAG_NEED_REPLY	BIT(3)
 10/* Feature bits */
 11#define VHOST_USER_F_PROTOCOL_FEATURES	30
 12/* Protocol feature bits */
 13#define VHOST_USER_PROTOCOL_F_MQ			0
 14#define VHOST_USER_PROTOCOL_F_REPLY_ACK			3
 15#define VHOST_USER_PROTOCOL_F_SLAVE_REQ			5
 16#define VHOST_USER_PROTOCOL_F_CONFIG			9
 17#define VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS	14
 18/* Vring state index masks */
 19#define VHOST_USER_VRING_INDEX_MASK	0xff
 20#define VHOST_USER_VRING_POLL_MASK	BIT(8)
 21
 22/* Supported version */
 23#define VHOST_USER_VERSION		1
 24/* Supported transport features */
 25#define VHOST_USER_SUPPORTED_F		BIT_ULL(VHOST_USER_F_PROTOCOL_FEATURES)
 26/* Supported protocol features */
 27#define VHOST_USER_SUPPORTED_PROTOCOL_F	(BIT_ULL(VHOST_USER_PROTOCOL_F_MQ) | \
 28					 BIT_ULL(VHOST_USER_PROTOCOL_F_REPLY_ACK) | \
 29					 BIT_ULL(VHOST_USER_PROTOCOL_F_SLAVE_REQ) | \
 30					 BIT_ULL(VHOST_USER_PROTOCOL_F_CONFIG) | \
 31					 BIT_ULL(VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS))
 32
 33enum vhost_user_request {
 34	VHOST_USER_GET_FEATURES = 1,
 35	VHOST_USER_SET_FEATURES = 2,
 36	VHOST_USER_SET_OWNER = 3,
 37	VHOST_USER_RESET_OWNER = 4,
 38	VHOST_USER_SET_MEM_TABLE = 5,
 39	VHOST_USER_SET_LOG_BASE = 6,
 40	VHOST_USER_SET_LOG_FD = 7,
 41	VHOST_USER_SET_VRING_NUM = 8,
 42	VHOST_USER_SET_VRING_ADDR = 9,
 43	VHOST_USER_SET_VRING_BASE = 10,
 44	VHOST_USER_GET_VRING_BASE = 11,
 45	VHOST_USER_SET_VRING_KICK = 12,
 46	VHOST_USER_SET_VRING_CALL = 13,
 47	VHOST_USER_SET_VRING_ERR = 14,
 48	VHOST_USER_GET_PROTOCOL_FEATURES = 15,
 49	VHOST_USER_SET_PROTOCOL_FEATURES = 16,
 50	VHOST_USER_GET_QUEUE_NUM = 17,
 51	VHOST_USER_SET_VRING_ENABLE = 18,
 52	VHOST_USER_SEND_RARP = 19,
 53	VHOST_USER_NET_SEND_MTU = 20,
 54	VHOST_USER_SET_SLAVE_REQ_FD = 21,
 55	VHOST_USER_IOTLB_MSG = 22,
 56	VHOST_USER_SET_VRING_ENDIAN = 23,
 57	VHOST_USER_GET_CONFIG = 24,
 58	VHOST_USER_SET_CONFIG = 25,
 59	VHOST_USER_VRING_KICK = 35,
 60};
 61
 62enum vhost_user_slave_request {
 63	VHOST_USER_SLAVE_IOTLB_MSG = 1,
 64	VHOST_USER_SLAVE_CONFIG_CHANGE_MSG = 2,
 65	VHOST_USER_SLAVE_VRING_HOST_NOTIFIER_MSG = 3,
 66	VHOST_USER_SLAVE_VRING_CALL = 4,
 67};
 68
 69struct vhost_user_header {
 70	/*
 71	 * Use enum vhost_user_request for outgoing messages,
 72	 * uses enum vhost_user_slave_request for incoming ones.
 73	 */
 74	u32 request;
 75	u32 flags;
 76	u32 size;
 77} __packed;
 78
 79struct vhost_user_config {
 80	u32 offset;
 81	u32 size;
 82	u32 flags;
 83	u8 payload[]; /* Variable length */
 84} __packed;
 85
 86struct vhost_user_vring_state {
 87	u32 index;
 88	u32 num;
 89} __packed;
 90
 91struct vhost_user_vring_addr {
 92	u32 index;
 93	u32 flags;
 94	u64 desc, used, avail, log;
 95} __packed;
 96
 97struct vhost_user_mem_region {
 98	u64 guest_addr;
 99	u64 size;
100	u64 user_addr;
101	u64 mmap_offset;
102} __packed;
103
104struct vhost_user_mem_regions {
105	u32 num;
106	u32 padding;
107	struct vhost_user_mem_region regions[2]; /* Currently supporting 2 */
108} __packed;
109
110union vhost_user_payload {
111	u64 integer;
112	struct vhost_user_config config;
113	struct vhost_user_vring_state vring_state;
114	struct vhost_user_vring_addr vring_addr;
115	struct vhost_user_mem_regions mem_regions;
116};
117
118struct vhost_user_msg {
119	struct vhost_user_header header;
120	union vhost_user_payload payload;
121} __packed;
122
123#endif