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