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