cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     81typedef struct vmbus_message_header {
     82    uint32_t message_type;
     83    uint32_t _padding;
     84} vmbus_message_header;
     85
     86typedef 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
     95typedef 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
    101typedef 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
    119typedef struct vmbus_message_rescind_channel_offer {
    120    vmbus_message_header header;
    121    uint32_t child_relid;
    122} vmbus_message_rescind_channel_offer;
    123
    124typedef struct vmbus_gpa_range {
    125    uint32_t byte_count;
    126    uint32_t byte_offset;
    127    uint64_t pfn_array[];
    128} vmbus_gpa_range;
    129
    130typedef 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
    139typedef 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
    146typedef 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
    153typedef 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
    159typedef struct vmbus_message_gpadl_torndown {
    160    vmbus_message_header header;
    161    uint32_t gpadl_id;
    162} vmbus_message_gpadl_torndown;
    163
    164typedef 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
    174typedef 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
    181typedef struct vmbus_message_close_channel {
    182    vmbus_message_header header;
    183    uint32_t child_relid;
    184} vmbus_message_close_channel;
    185
    186typedef 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
    195typedef 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
    203typedef struct vmbus_pkt_gpa_direct {
    204    uint32_t _reserved;
    205    uint32_t rangecount;
    206    vmbus_gpa_range range[];
    207} vmbus_pkt_gpa_direct;
    208
    209typedef struct vmbus_xferpg_range {
    210    uint32_t byte_count;
    211    uint32_t byte_offset;
    212} vmbus_xferpg_range;
    213
    214typedef 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