• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 - 2020 Intel Corporation
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 #ifndef _USFSTL_VHOST_PROTO_H_
7 #define _USFSTL_VHOST_PROTO_H_
8 
9 #define MAX_REGIONS 8
10 
11 /* these are from the vhost-user spec */
12 
13 struct vhost_user_msg_hdr {
14 	uint32_t request;
15 
16 #define VHOST_USER_MSG_FLAGS_VERSION	0x3
17 #define VHOST_USER_VERSION		  1
18 #define VHOST_USER_MSG_FLAGS_REPLY	0x4
19 #define VHOST_USER_MSG_FLAGS_NEED_REPLY	0x8
20 	uint32_t flags;
21 
22 	uint32_t size;
23 };
24 
25 struct vhost_user_region {
26 	uint64_t guest_phys_addr;
27 	uint64_t size;
28 	uint64_t user_addr;
29 	uint64_t mmap_offset;
30 };
31 
32 struct vhost_user_msg {
33 	struct vhost_user_msg_hdr hdr;
34 	union {
35 #define VHOST_USER_U64_VRING_IDX_MSK	0x7f
36 #define VHOST_USER_U64_NO_FD		0x80
37 		uint64_t u64;
38 		struct {
39 			uint32_t idx, num;
40 		} vring_state;
41 		struct {
42 			uint32_t idx, flags;
43 			uint64_t descriptor;
44 			uint64_t used;
45 			uint64_t avail;
46 			uint64_t log;
47 		} vring_addr;
48 		struct {
49 			uint32_t n_regions;
50 			uint32_t reserved;
51 			struct vhost_user_region regions[MAX_REGIONS];
52 		} mem_regions;
53 		struct {
54 			uint32_t offset;
55 			uint32_t size;
56 #define VHOST_USER_CFG_SPACE_WRITABLE	0x1
57 #define VHOST_USER_CFG_SPACE_MIGRATION	0x2
58 			uint32_t flags;
59 			uint8_t payload[0];
60 		} cfg_space;
61 		struct {
62 			uint64_t idx_flags;
63 			uint64_t size;
64 			uint64_t offset;
65 		} vring_area;
66 	} __attribute__((packed)) payload;
67 };
68 
69 #define VHOST_USER_GET_FEATURES			 1
70 #define VHOST_USER_SET_FEATURES			 2
71 #define VHOST_USER_SET_OWNER			 3
72 #define VHOST_USER_SET_MEM_TABLE		 5
73 #define VHOST_USER_SET_VRING_NUM		 8
74 #define VHOST_USER_SET_VRING_ADDR		 9
75 #define VHOST_USER_SET_VRING_BASE		10
76 #define VHOST_USER_SET_VRING_KICK		12
77 #define VHOST_USER_SET_VRING_CALL		13
78 #define VHOST_USER_GET_PROTOCOL_FEATURES	15
79 #define VHOST_USER_SET_VRING_ENABLE		18
80 #define VHOST_USER_SET_PROTOCOL_FEATURES	16
81 #define VHOST_USER_SET_SLAVE_REQ_FD		21
82 #define VHOST_USER_GET_CONFIG			24
83 #define VHOST_USER_VRING_KICK			35
84 #define VHOST_USER_GET_SHARED_MEMORY_REGIONS	41
85 
86 #define VHOST_USER_SLAVE_CONFIG_CHANGE_MSG	 2
87 #define VHOST_USER_SLAVE_VRING_CALL		 4
88 
89 #define VHOST_USER_F_PROTOCOL_FEATURES 30
90 
91 #define VHOST_USER_PROTOCOL_F_MQ                    0
92 #define VHOST_USER_PROTOCOL_F_LOG_SHMFD             1
93 #define VHOST_USER_PROTOCOL_F_RARP                  2
94 #define VHOST_USER_PROTOCOL_F_REPLY_ACK             3
95 #define VHOST_USER_PROTOCOL_F_MTU                   4
96 #define VHOST_USER_PROTOCOL_F_SLAVE_REQ             5
97 #define VHOST_USER_PROTOCOL_F_CROSS_ENDIAN          6
98 #define VHOST_USER_PROTOCOL_F_CRYPTO_SESSION        7
99 #define VHOST_USER_PROTOCOL_F_PAGEFAULT             8
100 #define VHOST_USER_PROTOCOL_F_CONFIG                9
101 #define VHOST_USER_PROTOCOL_F_SLAVE_SEND_FD        10
102 #define VHOST_USER_PROTOCOL_F_H_OST_NOTIFIER        11
103 #define VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD       12
104 #define VHOST_USER_PROTOCOL_F_RESET_DEVICE         13
105 #define VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS 14
106 
107 #endif // _USFSTL_VHOST_PROTO_H_
108