qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

vmbus-proto.h (6996B)


      1 /*
      2  * QEMU Hyper-V VMBus support
      3  *
      4  * Copyright (c) 2017-2018 Virtuozzo International GmbH.
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7  * See the COPYING file in the top-level directory.
      8  */
      9 
     10 #ifndef HW_HYPERV_VMBUS_PROTO_H
     11 #define HW_HYPERV_VMBUS_PROTO_H
     12 
     13 #define VMBUS_VERSION_WS2008                    ((0 << 16) | (13))
     14 #define VMBUS_VERSION_WIN7                      ((1 << 16) | (1))
     15 #define VMBUS_VERSION_WIN8                      ((2 << 16) | (4))
     16 #define VMBUS_VERSION_WIN8_1                    ((3 << 16) | (0))
     17 #define VMBUS_VERSION_WIN10                     ((4 << 16) | (0))
     18 #define VMBUS_VERSION_INVAL                     -1
     19 #define VMBUS_VERSION_CURRENT                   VMBUS_VERSION_WIN10
     20 
     21 #define VMBUS_MESSAGE_CONNECTION_ID             1
     22 #define VMBUS_EVENT_CONNECTION_ID               2
     23 #define VMBUS_MONITOR_CONNECTION_ID             3
     24 #define VMBUS_SINT                              2
     25 
     26 #define VMBUS_MSG_INVALID               0
     27 #define VMBUS_MSG_OFFERCHANNEL          1
     28 #define VMBUS_MSG_RESCIND_CHANNELOFFER  2
     29 #define VMBUS_MSG_REQUESTOFFERS         3
     30 #define VMBUS_MSG_ALLOFFERS_DELIVERED   4
     31 #define VMBUS_MSG_OPENCHANNEL           5
     32 #define VMBUS_MSG_OPENCHANNEL_RESULT    6
     33 #define VMBUS_MSG_CLOSECHANNEL          7
     34 #define VMBUS_MSG_GPADL_HEADER          8
     35 #define VMBUS_MSG_GPADL_BODY            9
     36 #define VMBUS_MSG_GPADL_CREATED         10
     37 #define VMBUS_MSG_GPADL_TEARDOWN        11
     38 #define VMBUS_MSG_GPADL_TORNDOWN        12
     39 #define VMBUS_MSG_RELID_RELEASED        13
     40 #define VMBUS_MSG_INITIATE_CONTACT      14
     41 #define VMBUS_MSG_VERSION_RESPONSE      15
     42 #define VMBUS_MSG_UNLOAD                16
     43 #define VMBUS_MSG_UNLOAD_RESPONSE       17
     44 #define VMBUS_MSG_COUNT                 18
     45 
     46 #define VMBUS_MESSAGE_SIZE_ALIGN        sizeof(uint64_t)
     47 
     48 #define VMBUS_PACKET_INVALID                    0x0
     49 #define VMBUS_PACKET_SYNCH                      0x1
     50 #define VMBUS_PACKET_ADD_XFER_PAGESET           0x2
     51 #define VMBUS_PACKET_RM_XFER_PAGESET            0x3
     52 #define VMBUS_PACKET_ESTABLISH_GPADL            0x4
     53 #define VMBUS_PACKET_TEARDOWN_GPADL             0x5
     54 #define VMBUS_PACKET_DATA_INBAND                0x6
     55 #define VMBUS_PACKET_DATA_USING_XFER_PAGES      0x7
     56 #define VMBUS_PACKET_DATA_USING_GPADL           0x8
     57 #define VMBUS_PACKET_DATA_USING_GPA_DIRECT      0x9
     58 #define VMBUS_PACKET_CANCEL_REQUEST             0xa
     59 #define VMBUS_PACKET_COMP                       0xb
     60 #define VMBUS_PACKET_DATA_USING_ADDITIONAL_PKT  0xc
     61 #define VMBUS_PACKET_ADDITIONAL_DATA            0xd
     62 
     63 #define VMBUS_CHANNEL_USER_DATA_SIZE            120
     64 
     65 #define VMBUS_OFFER_MONITOR_ALLOCATED           0x1
     66 #define VMBUS_OFFER_INTERRUPT_DEDICATED         0x1
     67 
     68 #define VMBUS_RING_BUFFER_FEAT_PENDING_SZ       (1ul << 0)
     69 
     70 #define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE      0x1
     71 #define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES  0x2
     72 #define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS          0x4
     73 #define VMBUS_CHANNEL_NAMED_PIPE_MODE                 0x10
     74 #define VMBUS_CHANNEL_LOOPBACK_OFFER                  0x100
     75 #define VMBUS_CHANNEL_PARENT_OFFER                    0x200
     76 #define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION  0x400
     77 #define VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER            0x2000
     78 
     79 #define VMBUS_PACKET_FLAG_REQUEST_COMPLETION    1
     80 
     81 typedef struct vmbus_message_header {
     82     uint32_t message_type;
     83     uint32_t _padding;
     84 } vmbus_message_header;
     85 
     86 typedef struct vmbus_message_initiate_contact {
     87     vmbus_message_header header;
     88     uint32_t version_requested;
     89     uint32_t target_vcpu;
     90     uint64_t interrupt_page;
     91     uint64_t monitor_page1;
     92     uint64_t monitor_page2;
     93 } vmbus_message_initiate_contact;
     94 
     95 typedef struct vmbus_message_version_response {
     96     vmbus_message_header header;
     97     uint8_t version_supported;
     98     uint8_t status;
     99 } vmbus_message_version_response;
    100 
    101 typedef struct vmbus_message_offer_channel {
    102     vmbus_message_header header;
    103     uint8_t  type_uuid[16];
    104     uint8_t  instance_uuid[16];
    105     uint64_t _reserved1;
    106     uint64_t _reserved2;
    107     uint16_t channel_flags;
    108     uint16_t mmio_size_mb;
    109     uint8_t  user_data[VMBUS_CHANNEL_USER_DATA_SIZE];
    110     uint16_t sub_channel_index;
    111     uint16_t _reserved3;
    112     uint32_t child_relid;
    113     uint8_t  monitor_id;
    114     uint8_t  monitor_flags;
    115     uint16_t interrupt_flags;
    116     uint32_t connection_id;
    117 } vmbus_message_offer_channel;
    118 
    119 typedef struct vmbus_message_rescind_channel_offer {
    120     vmbus_message_header header;
    121     uint32_t child_relid;
    122 } vmbus_message_rescind_channel_offer;
    123 
    124 typedef struct vmbus_gpa_range {
    125     uint32_t byte_count;
    126     uint32_t byte_offset;
    127     uint64_t pfn_array[];
    128 } vmbus_gpa_range;
    129 
    130 typedef struct vmbus_message_gpadl_header {
    131     vmbus_message_header header;
    132     uint32_t child_relid;
    133     uint32_t gpadl_id;
    134     uint16_t range_buflen;
    135     uint16_t rangecount;
    136     vmbus_gpa_range range[];
    137 } QEMU_PACKED vmbus_message_gpadl_header;
    138 
    139 typedef struct vmbus_message_gpadl_body {
    140     vmbus_message_header header;
    141     uint32_t message_number;
    142     uint32_t gpadl_id;
    143     uint64_t pfn_array[];
    144 } vmbus_message_gpadl_body;
    145 
    146 typedef struct vmbus_message_gpadl_created {
    147     vmbus_message_header header;
    148     uint32_t child_relid;
    149     uint32_t gpadl_id;
    150     uint32_t status;
    151 } vmbus_message_gpadl_created;
    152 
    153 typedef struct vmbus_message_gpadl_teardown {
    154     vmbus_message_header header;
    155     uint32_t child_relid;
    156     uint32_t gpadl_id;
    157 } vmbus_message_gpadl_teardown;
    158 
    159 typedef struct vmbus_message_gpadl_torndown {
    160     vmbus_message_header header;
    161     uint32_t gpadl_id;
    162 } vmbus_message_gpadl_torndown;
    163 
    164 typedef struct vmbus_message_open_channel {
    165     vmbus_message_header header;
    166     uint32_t child_relid;
    167     uint32_t open_id;
    168     uint32_t ring_buffer_gpadl_id;
    169     uint32_t target_vp;
    170     uint32_t ring_buffer_offset;
    171     uint8_t  user_data[VMBUS_CHANNEL_USER_DATA_SIZE];
    172 } vmbus_message_open_channel;
    173 
    174 typedef struct vmbus_message_open_result {
    175     vmbus_message_header header;
    176     uint32_t child_relid;
    177     uint32_t open_id;
    178     uint32_t status;
    179 } vmbus_message_open_result;
    180 
    181 typedef struct vmbus_message_close_channel {
    182     vmbus_message_header header;
    183     uint32_t child_relid;
    184 } vmbus_message_close_channel;
    185 
    186 typedef struct vmbus_ring_buffer {
    187     uint32_t write_index;
    188     uint32_t read_index;
    189     uint32_t interrupt_mask;
    190     uint32_t pending_send_sz;
    191     uint32_t _reserved1[12];
    192     uint32_t feature_bits;
    193 } vmbus_ring_buffer;
    194 
    195 typedef struct vmbus_packet_hdr {
    196     uint16_t type;
    197     uint16_t offset_qwords;
    198     uint16_t len_qwords;
    199     uint16_t flags;
    200     uint64_t transaction_id;
    201 } vmbus_packet_hdr;
    202 
    203 typedef struct vmbus_pkt_gpa_direct {
    204     uint32_t _reserved;
    205     uint32_t rangecount;
    206     vmbus_gpa_range range[];
    207 } vmbus_pkt_gpa_direct;
    208 
    209 typedef struct vmbus_xferpg_range {
    210     uint32_t byte_count;
    211     uint32_t byte_offset;
    212 } vmbus_xferpg_range;
    213 
    214 typedef struct vmbus_pkt_xferpg {
    215     uint16_t buffer_id;
    216     uint8_t sender_owns_set;
    217     uint8_t _reserved;
    218     uint32_t rangecount;
    219     vmbus_xferpg_range range[];
    220 } vmbus_pkt_xferpg;
    221 
    222 #endif