linux/arch/um/drivers/vhost_user.h
<<
>>
Prefs
   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
 122