xref: /dpdk/examples/vhost_blk/blk_spec.h (revision 7f2a987ca852a45bdb4520edc7ad7e02c4efd269)
1c19beb3fSJin Yu /* SPDX-License-Identifier: BSD-3-Clause
2c19beb3fSJin Yu  * Copyright(c) 2019 Intel Corporation
3c19beb3fSJin Yu  */
4c19beb3fSJin Yu 
5c19beb3fSJin Yu #ifndef _BLK_SPEC_H
6c19beb3fSJin Yu #define _BLK_SPEC_H
7c19beb3fSJin Yu 
8c19beb3fSJin Yu #include <stdint.h>
9c19beb3fSJin Yu 
10c19beb3fSJin Yu #ifndef VHOST_USER_MEMORY_MAX_NREGIONS
11c19beb3fSJin Yu #define VHOST_USER_MEMORY_MAX_NREGIONS		8
12c19beb3fSJin Yu #endif
13c19beb3fSJin Yu 
14c19beb3fSJin Yu #ifndef VHOST_USER_MAX_CONFIG_SIZE
15c19beb3fSJin Yu #define VHOST_USER_MAX_CONFIG_SIZE		256
16c19beb3fSJin Yu #endif
17c19beb3fSJin Yu 
18c19beb3fSJin Yu #ifndef VHOST_USER_PROTOCOL_F_CONFIG
19c19beb3fSJin Yu #define VHOST_USER_PROTOCOL_F_CONFIG		9
20c19beb3fSJin Yu #endif
21c19beb3fSJin Yu 
22c19beb3fSJin Yu #ifndef VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD
23c19beb3fSJin Yu #define VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD	12
24c19beb3fSJin Yu #endif
25c19beb3fSJin Yu 
26c19beb3fSJin Yu #define VIRTIO_BLK_ID_BYTES	20	/* ID string length */
27c19beb3fSJin Yu 
28c19beb3fSJin Yu #define VIRTIO_BLK_T_IN			0
29c19beb3fSJin Yu #define VIRTIO_BLK_T_OUT		1
30c19beb3fSJin Yu #define VIRTIO_BLK_T_FLUSH		4
31c19beb3fSJin Yu #define VIRTIO_BLK_T_GET_ID		8
32c19beb3fSJin Yu #define VIRTIO_BLK_T_DISCARD		11
33c19beb3fSJin Yu #define VIRTIO_BLK_T_WRITE_ZEROES	13
34c19beb3fSJin Yu 
35c19beb3fSJin Yu #define VIRTIO_BLK_S_OK			0
36c19beb3fSJin Yu #define VIRTIO_BLK_S_IOERR		1
37c19beb3fSJin Yu #define VIRTIO_BLK_S_UNSUPP		2
38c19beb3fSJin Yu 
39c19beb3fSJin Yu enum vhost_user_request {
40c19beb3fSJin Yu 	VHOST_USER_NONE = 0,
41c19beb3fSJin Yu 	VHOST_USER_GET_FEATURES = 1,
42c19beb3fSJin Yu 	VHOST_USER_SET_FEATURES = 2,
43c19beb3fSJin Yu 	VHOST_USER_SET_OWNER = 3,
44c19beb3fSJin Yu 	VHOST_USER_RESET_OWNER = 4,
45c19beb3fSJin Yu 	VHOST_USER_SET_MEM_TABLE = 5,
46c19beb3fSJin Yu 	VHOST_USER_SET_LOG_BASE = 6,
47c19beb3fSJin Yu 	VHOST_USER_SET_LOG_FD = 7,
48c19beb3fSJin Yu 	VHOST_USER_SET_VRING_NUM = 8,
49c19beb3fSJin Yu 	VHOST_USER_SET_VRING_ADDR = 9,
50c19beb3fSJin Yu 	VHOST_USER_SET_VRING_BASE = 10,
51c19beb3fSJin Yu 	VHOST_USER_GET_VRING_BASE = 11,
52c19beb3fSJin Yu 	VHOST_USER_SET_VRING_KICK = 12,
53c19beb3fSJin Yu 	VHOST_USER_SET_VRING_CALL = 13,
54c19beb3fSJin Yu 	VHOST_USER_SET_VRING_ERR = 14,
55c19beb3fSJin Yu 	VHOST_USER_GET_PROTOCOL_FEATURES = 15,
56c19beb3fSJin Yu 	VHOST_USER_SET_PROTOCOL_FEATURES = 16,
57c19beb3fSJin Yu 	VHOST_USER_GET_QUEUE_NUM = 17,
58c19beb3fSJin Yu 	VHOST_USER_SET_VRING_ENABLE = 18,
59c19beb3fSJin Yu };
60c19beb3fSJin Yu 
61c19beb3fSJin Yu /** Get/set config msg payload */
62c19beb3fSJin Yu struct vhost_user_config {
63c19beb3fSJin Yu 	uint32_t offset;
64c19beb3fSJin Yu 	uint32_t size;
65c19beb3fSJin Yu 	uint32_t flags;
66c19beb3fSJin Yu 	uint8_t region[VHOST_USER_MAX_CONFIG_SIZE];
67c19beb3fSJin Yu };
68c19beb3fSJin Yu 
69c19beb3fSJin Yu /** Fixed-size vhost_memory struct */
70c19beb3fSJin Yu struct vhost_memory_padded {
71c19beb3fSJin Yu 	uint32_t nregions;
72c19beb3fSJin Yu 	uint32_t padding;
73c19beb3fSJin Yu 	struct vhost_memory_region regions[VHOST_USER_MEMORY_MAX_NREGIONS];
74c19beb3fSJin Yu };
75c19beb3fSJin Yu 
76*7f2a987cSAndre Muezerie struct __rte_packed_begin vhost_user_msg {
77c19beb3fSJin Yu 	enum vhost_user_request request;
78c19beb3fSJin Yu 
79c19beb3fSJin Yu #define VHOST_USER_VERSION_MASK     0x3
80c19beb3fSJin Yu #define VHOST_USER_REPLY_MASK       (0x1 << 2)
81c19beb3fSJin Yu 	uint32_t flags;
82c19beb3fSJin Yu 	uint32_t size; /**< the following payload size */
83c19beb3fSJin Yu 	union {
84c19beb3fSJin Yu #define VHOST_USER_VRING_IDX_MASK   0xff
85c19beb3fSJin Yu #define VHOST_USER_VRING_NOFD_MASK  (0x1 << 8)
86c19beb3fSJin Yu 		uint64_t u64;
87c19beb3fSJin Yu 		struct vhost_vring_state state;
88c19beb3fSJin Yu 		struct vhost_vring_addr addr;
89c19beb3fSJin Yu 		struct vhost_memory_padded memory;
90c19beb3fSJin Yu 		struct vhost_user_config cfg;
91c19beb3fSJin Yu 	} payload;
92*7f2a987cSAndre Muezerie } __rte_packed_end;
93c19beb3fSJin Yu 
94c19beb3fSJin Yu #endif
95