cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hyperv.h (49575B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 *
      4 * Copyright (c) 2011, Microsoft Corporation.
      5 *
      6 * Authors:
      7 *   Haiyang Zhang <haiyangz@microsoft.com>
      8 *   Hank Janssen  <hjanssen@microsoft.com>
      9 *   K. Y. Srinivasan <kys@microsoft.com>
     10 */
     11
     12#ifndef _HYPERV_H
     13#define _HYPERV_H
     14
     15#include <uapi/linux/hyperv.h>
     16
     17#include <linux/mm.h>
     18#include <linux/types.h>
     19#include <linux/scatterlist.h>
     20#include <linux/list.h>
     21#include <linux/timer.h>
     22#include <linux/completion.h>
     23#include <linux/device.h>
     24#include <linux/mod_devicetable.h>
     25#include <linux/interrupt.h>
     26#include <linux/reciprocal_div.h>
     27#include <asm/hyperv-tlfs.h>
     28
     29#define MAX_PAGE_BUFFER_COUNT				32
     30#define MAX_MULTIPAGE_BUFFER_COUNT			32 /* 128K */
     31
     32#pragma pack(push, 1)
     33
     34/*
     35 * Types for GPADL, decides is how GPADL header is created.
     36 *
     37 * It doesn't make much difference between BUFFER and RING if PAGE_SIZE is the
     38 * same as HV_HYP_PAGE_SIZE.
     39 *
     40 * If PAGE_SIZE is bigger than HV_HYP_PAGE_SIZE, the headers of ring buffers
     41 * will be of PAGE_SIZE, however, only the first HV_HYP_PAGE will be put
     42 * into gpadl, therefore the number for HV_HYP_PAGE and the indexes of each
     43 * HV_HYP_PAGE will be different between different types of GPADL, for example
     44 * if PAGE_SIZE is 64K:
     45 *
     46 * BUFFER:
     47 *
     48 * gva:    |--       64k      --|--       64k      --| ... |
     49 * gpa:    | 4k | 4k | ... | 4k | 4k | 4k | ... | 4k |
     50 * index:  0    1    2     15   16   17   18 .. 31   32 ...
     51 *         |    |    ...   |    |    |   ...    |   ...
     52 *         v    V          V    V    V          V
     53 * gpadl:  | 4k | 4k | ... | 4k | 4k | 4k | ... | 4k | ... |
     54 * index:  0    1    2 ... 15   16   17   18 .. 31   32 ...
     55 *
     56 * RING:
     57 *
     58 *         | header  |           data           | header  |     data      |
     59 * gva:    |-- 64k --|--       64k      --| ... |-- 64k --|-- 64k --| ... |
     60 * gpa:    | 4k | .. | 4k | 4k | ... | 4k | ... | 4k | .. | 4k | .. | ... |
     61 * index:  0    1    16   17   18    31   ...   n   n+1  n+16 ...         2n
     62 *         |         /    /          /          |         /               /
     63 *         |        /    /          /           |        /               /
     64 *         |       /    /   ...    /    ...     |       /      ...      /
     65 *         |      /    /          /             |      /               /
     66 *         |     /    /          /              |     /               /
     67 *         V    V    V          V               V    V               v
     68 * gpadl:  | 4k | 4k |   ...    |    ...        | 4k | 4k |  ...     |
     69 * index:  0    1    2   ...    16   ...       n-15 n-14 n-13  ...  2n-30
     70 */
     71enum hv_gpadl_type {
     72	HV_GPADL_BUFFER,
     73	HV_GPADL_RING
     74};
     75
     76/* Single-page buffer */
     77struct hv_page_buffer {
     78	u32 len;
     79	u32 offset;
     80	u64 pfn;
     81};
     82
     83/* Multiple-page buffer */
     84struct hv_multipage_buffer {
     85	/* Length and Offset determines the # of pfns in the array */
     86	u32 len;
     87	u32 offset;
     88	u64 pfn_array[MAX_MULTIPAGE_BUFFER_COUNT];
     89};
     90
     91/*
     92 * Multiple-page buffer array; the pfn array is variable size:
     93 * The number of entries in the PFN array is determined by
     94 * "len" and "offset".
     95 */
     96struct hv_mpb_array {
     97	/* Length and Offset determines the # of pfns in the array */
     98	u32 len;
     99	u32 offset;
    100	u64 pfn_array[];
    101};
    102
    103/* 0x18 includes the proprietary packet header */
    104#define MAX_PAGE_BUFFER_PACKET		(0x18 +			\
    105					(sizeof(struct hv_page_buffer) * \
    106					 MAX_PAGE_BUFFER_COUNT))
    107#define MAX_MULTIPAGE_BUFFER_PACKET	(0x18 +			\
    108					 sizeof(struct hv_multipage_buffer))
    109
    110
    111#pragma pack(pop)
    112
    113struct hv_ring_buffer {
    114	/* Offset in bytes from the start of ring data below */
    115	u32 write_index;
    116
    117	/* Offset in bytes from the start of ring data below */
    118	u32 read_index;
    119
    120	u32 interrupt_mask;
    121
    122	/*
    123	 * WS2012/Win8 and later versions of Hyper-V implement interrupt
    124	 * driven flow management. The feature bit feat_pending_send_sz
    125	 * is set by the host on the host->guest ring buffer, and by the
    126	 * guest on the guest->host ring buffer.
    127	 *
    128	 * The meaning of the feature bit is a bit complex in that it has
    129	 * semantics that apply to both ring buffers.  If the guest sets
    130	 * the feature bit in the guest->host ring buffer, the guest is
    131	 * telling the host that:
    132	 * 1) It will set the pending_send_sz field in the guest->host ring
    133	 *    buffer when it is waiting for space to become available, and
    134	 * 2) It will read the pending_send_sz field in the host->guest
    135	 *    ring buffer and interrupt the host when it frees enough space
    136	 *
    137	 * Similarly, if the host sets the feature bit in the host->guest
    138	 * ring buffer, the host is telling the guest that:
    139	 * 1) It will set the pending_send_sz field in the host->guest ring
    140	 *    buffer when it is waiting for space to become available, and
    141	 * 2) It will read the pending_send_sz field in the guest->host
    142	 *    ring buffer and interrupt the guest when it frees enough space
    143	 *
    144	 * If either the guest or host does not set the feature bit that it
    145	 * owns, that guest or host must do polling if it encounters a full
    146	 * ring buffer, and not signal the other end with an interrupt.
    147	 */
    148	u32 pending_send_sz;
    149	u32 reserved1[12];
    150	union {
    151		struct {
    152			u32 feat_pending_send_sz:1;
    153		};
    154		u32 value;
    155	} feature_bits;
    156
    157	/* Pad it to PAGE_SIZE so that data starts on page boundary */
    158	u8	reserved2[PAGE_SIZE - 68];
    159
    160	/*
    161	 * Ring data starts here + RingDataStartOffset
    162	 * !!! DO NOT place any fields below this !!!
    163	 */
    164	u8 buffer[];
    165} __packed;
    166
    167/* Calculate the proper size of a ringbuffer, it must be page-aligned */
    168#define VMBUS_RING_SIZE(payload_sz) PAGE_ALIGN(sizeof(struct hv_ring_buffer) + \
    169					       (payload_sz))
    170
    171struct hv_ring_buffer_info {
    172	struct hv_ring_buffer *ring_buffer;
    173	u32 ring_size;			/* Include the shared header */
    174	struct reciprocal_value ring_size_div10_reciprocal;
    175	spinlock_t ring_lock;
    176
    177	u32 ring_datasize;		/* < ring_size */
    178	u32 priv_read_index;
    179	/*
    180	 * The ring buffer mutex lock. This lock prevents the ring buffer from
    181	 * being freed while the ring buffer is being accessed.
    182	 */
    183	struct mutex ring_buffer_mutex;
    184
    185	/* Buffer that holds a copy of an incoming host packet */
    186	void *pkt_buffer;
    187	u32 pkt_buffer_size;
    188};
    189
    190
    191static inline u32 hv_get_bytes_to_read(const struct hv_ring_buffer_info *rbi)
    192{
    193	u32 read_loc, write_loc, dsize, read;
    194
    195	dsize = rbi->ring_datasize;
    196	read_loc = rbi->ring_buffer->read_index;
    197	write_loc = READ_ONCE(rbi->ring_buffer->write_index);
    198
    199	read = write_loc >= read_loc ? (write_loc - read_loc) :
    200		(dsize - read_loc) + write_loc;
    201
    202	return read;
    203}
    204
    205static inline u32 hv_get_bytes_to_write(const struct hv_ring_buffer_info *rbi)
    206{
    207	u32 read_loc, write_loc, dsize, write;
    208
    209	dsize = rbi->ring_datasize;
    210	read_loc = READ_ONCE(rbi->ring_buffer->read_index);
    211	write_loc = rbi->ring_buffer->write_index;
    212
    213	write = write_loc >= read_loc ? dsize - (write_loc - read_loc) :
    214		read_loc - write_loc;
    215	return write;
    216}
    217
    218static inline u32 hv_get_avail_to_write_percent(
    219		const struct hv_ring_buffer_info *rbi)
    220{
    221	u32 avail_write = hv_get_bytes_to_write(rbi);
    222
    223	return reciprocal_divide(
    224			(avail_write  << 3) + (avail_write << 1),
    225			rbi->ring_size_div10_reciprocal);
    226}
    227
    228/*
    229 * VMBUS version is 32 bit entity broken up into
    230 * two 16 bit quantities: major_number. minor_number.
    231 *
    232 * 0 . 13 (Windows Server 2008)
    233 * 1 . 1  (Windows 7, WS2008 R2)
    234 * 2 . 4  (Windows 8, WS2012)
    235 * 3 . 0  (Windows 8.1, WS2012 R2)
    236 * 4 . 0  (Windows 10)
    237 * 4 . 1  (Windows 10 RS3)
    238 * 5 . 0  (Newer Windows 10)
    239 * 5 . 1  (Windows 10 RS4)
    240 * 5 . 2  (Windows Server 2019, RS5)
    241 * 5 . 3  (Windows Server 2022)
    242 *
    243 * The WS2008 and WIN7 versions are listed here for
    244 * completeness but are no longer supported in the
    245 * Linux kernel.
    246 */
    247
    248#define VERSION_WS2008  ((0 << 16) | (13))
    249#define VERSION_WIN7    ((1 << 16) | (1))
    250#define VERSION_WIN8    ((2 << 16) | (4))
    251#define VERSION_WIN8_1    ((3 << 16) | (0))
    252#define VERSION_WIN10 ((4 << 16) | (0))
    253#define VERSION_WIN10_V4_1 ((4 << 16) | (1))
    254#define VERSION_WIN10_V5 ((5 << 16) | (0))
    255#define VERSION_WIN10_V5_1 ((5 << 16) | (1))
    256#define VERSION_WIN10_V5_2 ((5 << 16) | (2))
    257#define VERSION_WIN10_V5_3 ((5 << 16) | (3))
    258
    259/* Make maximum size of pipe payload of 16K */
    260#define MAX_PIPE_DATA_PAYLOAD		(sizeof(u8) * 16384)
    261
    262/* Define PipeMode values. */
    263#define VMBUS_PIPE_TYPE_BYTE		0x00000000
    264#define VMBUS_PIPE_TYPE_MESSAGE		0x00000004
    265
    266/* The size of the user defined data buffer for non-pipe offers. */
    267#define MAX_USER_DEFINED_BYTES		120
    268
    269/* The size of the user defined data buffer for pipe offers. */
    270#define MAX_PIPE_USER_DEFINED_BYTES	116
    271
    272/*
    273 * At the center of the Channel Management library is the Channel Offer. This
    274 * struct contains the fundamental information about an offer.
    275 */
    276struct vmbus_channel_offer {
    277	guid_t if_type;
    278	guid_t if_instance;
    279
    280	/*
    281	 * These two fields are not currently used.
    282	 */
    283	u64 reserved1;
    284	u64 reserved2;
    285
    286	u16 chn_flags;
    287	u16 mmio_megabytes;		/* in bytes * 1024 * 1024 */
    288
    289	union {
    290		/* Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes. */
    291		struct {
    292			unsigned char user_def[MAX_USER_DEFINED_BYTES];
    293		} std;
    294
    295		/*
    296		 * Pipes:
    297		 * The following structure is an integrated pipe protocol, which
    298		 * is implemented on top of standard user-defined data. Pipe
    299		 * clients have MAX_PIPE_USER_DEFINED_BYTES left for their own
    300		 * use.
    301		 */
    302		struct {
    303			u32  pipe_mode;
    304			unsigned char user_def[MAX_PIPE_USER_DEFINED_BYTES];
    305		} pipe;
    306	} u;
    307	/*
    308	 * The sub_channel_index is defined in Win8: a value of zero means a
    309	 * primary channel and a value of non-zero means a sub-channel.
    310	 *
    311	 * Before Win8, the field is reserved, meaning it's always zero.
    312	 */
    313	u16 sub_channel_index;
    314	u16 reserved3;
    315} __packed;
    316
    317/* Server Flags */
    318#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE	1
    319#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES	2
    320#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS		4
    321#define VMBUS_CHANNEL_NAMED_PIPE_MODE			0x10
    322#define VMBUS_CHANNEL_LOOPBACK_OFFER			0x100
    323#define VMBUS_CHANNEL_PARENT_OFFER			0x200
    324#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION	0x400
    325#define VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER		0x2000
    326
    327struct vmpacket_descriptor {
    328	u16 type;
    329	u16 offset8;
    330	u16 len8;
    331	u16 flags;
    332	u64 trans_id;
    333} __packed;
    334
    335struct vmpacket_header {
    336	u32 prev_pkt_start_offset;
    337	struct vmpacket_descriptor descriptor;
    338} __packed;
    339
    340struct vmtransfer_page_range {
    341	u32 byte_count;
    342	u32 byte_offset;
    343} __packed;
    344
    345struct vmtransfer_page_packet_header {
    346	struct vmpacket_descriptor d;
    347	u16 xfer_pageset_id;
    348	u8  sender_owns_set;
    349	u8 reserved;
    350	u32 range_cnt;
    351	struct vmtransfer_page_range ranges[1];
    352} __packed;
    353
    354struct vmgpadl_packet_header {
    355	struct vmpacket_descriptor d;
    356	u32 gpadl;
    357	u32 reserved;
    358} __packed;
    359
    360struct vmadd_remove_transfer_page_set {
    361	struct vmpacket_descriptor d;
    362	u32 gpadl;
    363	u16 xfer_pageset_id;
    364	u16 reserved;
    365} __packed;
    366
    367/*
    368 * This structure defines a range in guest physical space that can be made to
    369 * look virtually contiguous.
    370 */
    371struct gpa_range {
    372	u32 byte_count;
    373	u32 byte_offset;
    374	u64 pfn_array[];
    375};
    376
    377/*
    378 * This is the format for an Establish Gpadl packet, which contains a handle by
    379 * which this GPADL will be known and a set of GPA ranges associated with it.
    380 * This can be converted to a MDL by the guest OS.  If there are multiple GPA
    381 * ranges, then the resulting MDL will be "chained," representing multiple VA
    382 * ranges.
    383 */
    384struct vmestablish_gpadl {
    385	struct vmpacket_descriptor d;
    386	u32 gpadl;
    387	u32 range_cnt;
    388	struct gpa_range range[1];
    389} __packed;
    390
    391/*
    392 * This is the format for a Teardown Gpadl packet, which indicates that the
    393 * GPADL handle in the Establish Gpadl packet will never be referenced again.
    394 */
    395struct vmteardown_gpadl {
    396	struct vmpacket_descriptor d;
    397	u32 gpadl;
    398	u32 reserved;	/* for alignment to a 8-byte boundary */
    399} __packed;
    400
    401/*
    402 * This is the format for a GPA-Direct packet, which contains a set of GPA
    403 * ranges, in addition to commands and/or data.
    404 */
    405struct vmdata_gpa_direct {
    406	struct vmpacket_descriptor d;
    407	u32 reserved;
    408	u32 range_cnt;
    409	struct gpa_range range[1];
    410} __packed;
    411
    412/* This is the format for a Additional Data Packet. */
    413struct vmadditional_data {
    414	struct vmpacket_descriptor d;
    415	u64 total_bytes;
    416	u32 offset;
    417	u32 byte_cnt;
    418	unsigned char data[1];
    419} __packed;
    420
    421union vmpacket_largest_possible_header {
    422	struct vmpacket_descriptor simple_hdr;
    423	struct vmtransfer_page_packet_header xfer_page_hdr;
    424	struct vmgpadl_packet_header gpadl_hdr;
    425	struct vmadd_remove_transfer_page_set add_rm_xfer_page_hdr;
    426	struct vmestablish_gpadl establish_gpadl_hdr;
    427	struct vmteardown_gpadl teardown_gpadl_hdr;
    428	struct vmdata_gpa_direct data_gpa_direct_hdr;
    429};
    430
    431#define VMPACKET_DATA_START_ADDRESS(__packet)	\
    432	(void *)(((unsigned char *)__packet) +	\
    433	 ((struct vmpacket_descriptor)__packet)->offset8 * 8)
    434
    435#define VMPACKET_DATA_LENGTH(__packet)		\
    436	((((struct vmpacket_descriptor)__packet)->len8 -	\
    437	  ((struct vmpacket_descriptor)__packet)->offset8) * 8)
    438
    439#define VMPACKET_TRANSFER_MODE(__packet)	\
    440	(((struct IMPACT)__packet)->type)
    441
    442enum vmbus_packet_type {
    443	VM_PKT_INVALID				= 0x0,
    444	VM_PKT_SYNCH				= 0x1,
    445	VM_PKT_ADD_XFER_PAGESET			= 0x2,
    446	VM_PKT_RM_XFER_PAGESET			= 0x3,
    447	VM_PKT_ESTABLISH_GPADL			= 0x4,
    448	VM_PKT_TEARDOWN_GPADL			= 0x5,
    449	VM_PKT_DATA_INBAND			= 0x6,
    450	VM_PKT_DATA_USING_XFER_PAGES		= 0x7,
    451	VM_PKT_DATA_USING_GPADL			= 0x8,
    452	VM_PKT_DATA_USING_GPA_DIRECT		= 0x9,
    453	VM_PKT_CANCEL_REQUEST			= 0xa,
    454	VM_PKT_COMP				= 0xb,
    455	VM_PKT_DATA_USING_ADDITIONAL_PKT	= 0xc,
    456	VM_PKT_ADDITIONAL_DATA			= 0xd
    457};
    458
    459#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED	1
    460
    461
    462/* Version 1 messages */
    463enum vmbus_channel_message_type {
    464	CHANNELMSG_INVALID			=  0,
    465	CHANNELMSG_OFFERCHANNEL		=  1,
    466	CHANNELMSG_RESCIND_CHANNELOFFER	=  2,
    467	CHANNELMSG_REQUESTOFFERS		=  3,
    468	CHANNELMSG_ALLOFFERS_DELIVERED	=  4,
    469	CHANNELMSG_OPENCHANNEL		=  5,
    470	CHANNELMSG_OPENCHANNEL_RESULT		=  6,
    471	CHANNELMSG_CLOSECHANNEL		=  7,
    472	CHANNELMSG_GPADL_HEADER		=  8,
    473	CHANNELMSG_GPADL_BODY			=  9,
    474	CHANNELMSG_GPADL_CREATED		= 10,
    475	CHANNELMSG_GPADL_TEARDOWN		= 11,
    476	CHANNELMSG_GPADL_TORNDOWN		= 12,
    477	CHANNELMSG_RELID_RELEASED		= 13,
    478	CHANNELMSG_INITIATE_CONTACT		= 14,
    479	CHANNELMSG_VERSION_RESPONSE		= 15,
    480	CHANNELMSG_UNLOAD			= 16,
    481	CHANNELMSG_UNLOAD_RESPONSE		= 17,
    482	CHANNELMSG_18				= 18,
    483	CHANNELMSG_19				= 19,
    484	CHANNELMSG_20				= 20,
    485	CHANNELMSG_TL_CONNECT_REQUEST		= 21,
    486	CHANNELMSG_MODIFYCHANNEL		= 22,
    487	CHANNELMSG_TL_CONNECT_RESULT		= 23,
    488	CHANNELMSG_MODIFYCHANNEL_RESPONSE	= 24,
    489	CHANNELMSG_COUNT
    490};
    491
    492/* Hyper-V supports about 2048 channels, and the RELIDs start with 1. */
    493#define INVALID_RELID	U32_MAX
    494
    495struct vmbus_channel_message_header {
    496	enum vmbus_channel_message_type msgtype;
    497	u32 padding;
    498} __packed;
    499
    500/* Query VMBus Version parameters */
    501struct vmbus_channel_query_vmbus_version {
    502	struct vmbus_channel_message_header header;
    503	u32 version;
    504} __packed;
    505
    506/* VMBus Version Supported parameters */
    507struct vmbus_channel_version_supported {
    508	struct vmbus_channel_message_header header;
    509	u8 version_supported;
    510} __packed;
    511
    512/* Offer Channel parameters */
    513struct vmbus_channel_offer_channel {
    514	struct vmbus_channel_message_header header;
    515	struct vmbus_channel_offer offer;
    516	u32 child_relid;
    517	u8 monitorid;
    518	/*
    519	 * win7 and beyond splits this field into a bit field.
    520	 */
    521	u8 monitor_allocated:1;
    522	u8 reserved:7;
    523	/*
    524	 * These are new fields added in win7 and later.
    525	 * Do not access these fields without checking the
    526	 * negotiated protocol.
    527	 *
    528	 * If "is_dedicated_interrupt" is set, we must not set the
    529	 * associated bit in the channel bitmap while sending the
    530	 * interrupt to the host.
    531	 *
    532	 * connection_id is to be used in signaling the host.
    533	 */
    534	u16 is_dedicated_interrupt:1;
    535	u16 reserved1:15;
    536	u32 connection_id;
    537} __packed;
    538
    539/* Rescind Offer parameters */
    540struct vmbus_channel_rescind_offer {
    541	struct vmbus_channel_message_header header;
    542	u32 child_relid;
    543} __packed;
    544
    545/*
    546 * Request Offer -- no parameters, SynIC message contains the partition ID
    547 * Set Snoop -- no parameters, SynIC message contains the partition ID
    548 * Clear Snoop -- no parameters, SynIC message contains the partition ID
    549 * All Offers Delivered -- no parameters, SynIC message contains the partition
    550 *		           ID
    551 * Flush Client -- no parameters, SynIC message contains the partition ID
    552 */
    553
    554/* Open Channel parameters */
    555struct vmbus_channel_open_channel {
    556	struct vmbus_channel_message_header header;
    557
    558	/* Identifies the specific VMBus channel that is being opened. */
    559	u32 child_relid;
    560
    561	/* ID making a particular open request at a channel offer unique. */
    562	u32 openid;
    563
    564	/* GPADL for the channel's ring buffer. */
    565	u32 ringbuffer_gpadlhandle;
    566
    567	/*
    568	 * Starting with win8, this field will be used to specify
    569	 * the target virtual processor on which to deliver the interrupt for
    570	 * the host to guest communication.
    571	 * Prior to win8, incoming channel interrupts would only
    572	 * be delivered on cpu 0. Setting this value to 0 would
    573	 * preserve the earlier behavior.
    574	 */
    575	u32 target_vp;
    576
    577	/*
    578	 * The upstream ring buffer begins at offset zero in the memory
    579	 * described by RingBufferGpadlHandle. The downstream ring buffer
    580	 * follows it at this offset (in pages).
    581	 */
    582	u32 downstream_ringbuffer_pageoffset;
    583
    584	/* User-specific data to be passed along to the server endpoint. */
    585	unsigned char userdata[MAX_USER_DEFINED_BYTES];
    586} __packed;
    587
    588/* Open Channel Result parameters */
    589struct vmbus_channel_open_result {
    590	struct vmbus_channel_message_header header;
    591	u32 child_relid;
    592	u32 openid;
    593	u32 status;
    594} __packed;
    595
    596/* Modify Channel Result parameters */
    597struct vmbus_channel_modifychannel_response {
    598	struct vmbus_channel_message_header header;
    599	u32 child_relid;
    600	u32 status;
    601} __packed;
    602
    603/* Close channel parameters; */
    604struct vmbus_channel_close_channel {
    605	struct vmbus_channel_message_header header;
    606	u32 child_relid;
    607} __packed;
    608
    609/* Channel Message GPADL */
    610#define GPADL_TYPE_RING_BUFFER		1
    611#define GPADL_TYPE_SERVER_SAVE_AREA	2
    612#define GPADL_TYPE_TRANSACTION		8
    613
    614/*
    615 * The number of PFNs in a GPADL message is defined by the number of
    616 * pages that would be spanned by ByteCount and ByteOffset.  If the
    617 * implied number of PFNs won't fit in this packet, there will be a
    618 * follow-up packet that contains more.
    619 */
    620struct vmbus_channel_gpadl_header {
    621	struct vmbus_channel_message_header header;
    622	u32 child_relid;
    623	u32 gpadl;
    624	u16 range_buflen;
    625	u16 rangecount;
    626	struct gpa_range range[];
    627} __packed;
    628
    629/* This is the followup packet that contains more PFNs. */
    630struct vmbus_channel_gpadl_body {
    631	struct vmbus_channel_message_header header;
    632	u32 msgnumber;
    633	u32 gpadl;
    634	u64 pfn[];
    635} __packed;
    636
    637struct vmbus_channel_gpadl_created {
    638	struct vmbus_channel_message_header header;
    639	u32 child_relid;
    640	u32 gpadl;
    641	u32 creation_status;
    642} __packed;
    643
    644struct vmbus_channel_gpadl_teardown {
    645	struct vmbus_channel_message_header header;
    646	u32 child_relid;
    647	u32 gpadl;
    648} __packed;
    649
    650struct vmbus_channel_gpadl_torndown {
    651	struct vmbus_channel_message_header header;
    652	u32 gpadl;
    653} __packed;
    654
    655struct vmbus_channel_relid_released {
    656	struct vmbus_channel_message_header header;
    657	u32 child_relid;
    658} __packed;
    659
    660struct vmbus_channel_initiate_contact {
    661	struct vmbus_channel_message_header header;
    662	u32 vmbus_version_requested;
    663	u32 target_vcpu; /* The VCPU the host should respond to */
    664	union {
    665		u64 interrupt_page;
    666		struct {
    667			u8	msg_sint;
    668			u8	padding1[3];
    669			u32	padding2;
    670		};
    671	};
    672	u64 monitor_page1;
    673	u64 monitor_page2;
    674} __packed;
    675
    676/* Hyper-V socket: guest's connect()-ing to host */
    677struct vmbus_channel_tl_connect_request {
    678	struct vmbus_channel_message_header header;
    679	guid_t guest_endpoint_id;
    680	guid_t host_service_id;
    681} __packed;
    682
    683/* Modify Channel parameters, cf. vmbus_send_modifychannel() */
    684struct vmbus_channel_modifychannel {
    685	struct vmbus_channel_message_header header;
    686	u32 child_relid;
    687	u32 target_vp;
    688} __packed;
    689
    690struct vmbus_channel_version_response {
    691	struct vmbus_channel_message_header header;
    692	u8 version_supported;
    693
    694	u8 connection_state;
    695	u16 padding;
    696
    697	/*
    698	 * On new hosts that support VMBus protocol 5.0, we must use
    699	 * VMBUS_MESSAGE_CONNECTION_ID_4 for the Initiate Contact Message,
    700	 * and for subsequent messages, we must use the Message Connection ID
    701	 * field in the host-returned Version Response Message.
    702	 *
    703	 * On old hosts, we should always use VMBUS_MESSAGE_CONNECTION_ID (1).
    704	 */
    705	u32 msg_conn_id;
    706} __packed;
    707
    708enum vmbus_channel_state {
    709	CHANNEL_OFFER_STATE,
    710	CHANNEL_OPENING_STATE,
    711	CHANNEL_OPEN_STATE,
    712	CHANNEL_OPENED_STATE,
    713};
    714
    715/*
    716 * Represents each channel msg on the vmbus connection This is a
    717 * variable-size data structure depending on the msg type itself
    718 */
    719struct vmbus_channel_msginfo {
    720	/* Bookkeeping stuff */
    721	struct list_head msglistentry;
    722
    723	/* So far, this is only used to handle gpadl body message */
    724	struct list_head submsglist;
    725
    726	/* Synchronize the request/response if needed */
    727	struct completion  waitevent;
    728	struct vmbus_channel *waiting_channel;
    729	union {
    730		struct vmbus_channel_version_supported version_supported;
    731		struct vmbus_channel_open_result open_result;
    732		struct vmbus_channel_gpadl_torndown gpadl_torndown;
    733		struct vmbus_channel_gpadl_created gpadl_created;
    734		struct vmbus_channel_version_response version_response;
    735		struct vmbus_channel_modifychannel_response modify_response;
    736	} response;
    737
    738	u32 msgsize;
    739	/*
    740	 * The channel message that goes out on the "wire".
    741	 * It will contain at minimum the VMBUS_CHANNEL_MESSAGE_HEADER header
    742	 */
    743	unsigned char msg[];
    744};
    745
    746struct vmbus_close_msg {
    747	struct vmbus_channel_msginfo info;
    748	struct vmbus_channel_close_channel msg;
    749};
    750
    751/* Define connection identifier type. */
    752union hv_connection_id {
    753	u32 asu32;
    754	struct {
    755		u32 id:24;
    756		u32 reserved:8;
    757	} u;
    758};
    759
    760enum vmbus_device_type {
    761	HV_IDE = 0,
    762	HV_SCSI,
    763	HV_FC,
    764	HV_NIC,
    765	HV_ND,
    766	HV_PCIE,
    767	HV_FB,
    768	HV_KBD,
    769	HV_MOUSE,
    770	HV_KVP,
    771	HV_TS,
    772	HV_HB,
    773	HV_SHUTDOWN,
    774	HV_FCOPY,
    775	HV_BACKUP,
    776	HV_DM,
    777	HV_UNKNOWN,
    778};
    779
    780/*
    781 * Provides request ids for VMBus. Encapsulates guest memory
    782 * addresses and stores the next available slot in req_arr
    783 * to generate new ids in constant time.
    784 */
    785struct vmbus_requestor {
    786	u64 *req_arr;
    787	unsigned long *req_bitmap; /* is a given slot available? */
    788	u32 size;
    789	u64 next_request_id;
    790	spinlock_t req_lock; /* provides atomicity */
    791};
    792
    793#define VMBUS_NO_RQSTOR U64_MAX
    794#define VMBUS_RQST_ERROR (U64_MAX - 1)
    795#define VMBUS_RQST_ADDR_ANY U64_MAX
    796/* NetVSC-specific */
    797#define VMBUS_RQST_ID_NO_RESPONSE (U64_MAX - 2)
    798/* StorVSC-specific */
    799#define VMBUS_RQST_INIT (U64_MAX - 2)
    800#define VMBUS_RQST_RESET (U64_MAX - 3)
    801
    802struct vmbus_device {
    803	u16  dev_type;
    804	guid_t guid;
    805	bool perf_device;
    806	bool allowed_in_isolated;
    807};
    808
    809#define VMBUS_DEFAULT_MAX_PKT_SIZE 4096
    810
    811struct vmbus_gpadl {
    812	u32 gpadl_handle;
    813	u32 size;
    814	void *buffer;
    815};
    816
    817struct vmbus_channel {
    818	struct list_head listentry;
    819
    820	struct hv_device *device_obj;
    821
    822	enum vmbus_channel_state state;
    823
    824	struct vmbus_channel_offer_channel offermsg;
    825	/*
    826	 * These are based on the OfferMsg.MonitorId.
    827	 * Save it here for easy access.
    828	 */
    829	u8 monitor_grp;
    830	u8 monitor_bit;
    831
    832	bool rescind; /* got rescind msg */
    833	bool rescind_ref; /* got rescind msg, got channel reference */
    834	struct completion rescind_event;
    835
    836	struct vmbus_gpadl ringbuffer_gpadlhandle;
    837
    838	/* Allocated memory for ring buffer */
    839	struct page *ringbuffer_page;
    840	u32 ringbuffer_pagecount;
    841	u32 ringbuffer_send_offset;
    842	struct hv_ring_buffer_info outbound;	/* send to parent */
    843	struct hv_ring_buffer_info inbound;	/* receive from parent */
    844
    845	struct vmbus_close_msg close_msg;
    846
    847	/* Statistics */
    848	u64	interrupts;	/* Host to Guest interrupts */
    849	u64	sig_events;	/* Guest to Host events */
    850
    851	/*
    852	 * Guest to host interrupts caused by the outbound ring buffer changing
    853	 * from empty to not empty.
    854	 */
    855	u64 intr_out_empty;
    856
    857	/*
    858	 * Indicates that a full outbound ring buffer was encountered. The flag
    859	 * is set to true when a full outbound ring buffer is encountered and
    860	 * set to false when a write to the outbound ring buffer is completed.
    861	 */
    862	bool out_full_flag;
    863
    864	/* Channel callback's invoked in softirq context */
    865	struct tasklet_struct callback_event;
    866	void (*onchannel_callback)(void *context);
    867	void *channel_callback_context;
    868
    869	void (*change_target_cpu_callback)(struct vmbus_channel *channel,
    870			u32 old, u32 new);
    871
    872	/*
    873	 * Synchronize channel scheduling and channel removal; see the inline
    874	 * comments in vmbus_chan_sched() and vmbus_reset_channel_cb().
    875	 */
    876	spinlock_t sched_lock;
    877
    878	/*
    879	 * A channel can be marked for one of three modes of reading:
    880	 *   BATCHED - callback called from taslket and should read
    881	 *            channel until empty. Interrupts from the host
    882	 *            are masked while read is in process (default).
    883	 *   DIRECT - callback called from tasklet (softirq).
    884	 *   ISR - callback called in interrupt context and must
    885	 *         invoke its own deferred processing.
    886	 *         Host interrupts are disabled and must be re-enabled
    887	 *         when ring is empty.
    888	 */
    889	enum hv_callback_mode {
    890		HV_CALL_BATCHED,
    891		HV_CALL_DIRECT,
    892		HV_CALL_ISR
    893	} callback_mode;
    894
    895	bool is_dedicated_interrupt;
    896	u64 sig_event;
    897
    898	/*
    899	 * Starting with win8, this field will be used to specify the
    900	 * target CPU on which to deliver the interrupt for the host
    901	 * to guest communication.
    902	 *
    903	 * Prior to win8, incoming channel interrupts would only be
    904	 * delivered on CPU 0. Setting this value to 0 would preserve
    905	 * the earlier behavior.
    906	 */
    907	u32 target_cpu;
    908	/*
    909	 * Support for sub-channels. For high performance devices,
    910	 * it will be useful to have multiple sub-channels to support
    911	 * a scalable communication infrastructure with the host.
    912	 * The support for sub-channels is implemented as an extension
    913	 * to the current infrastructure.
    914	 * The initial offer is considered the primary channel and this
    915	 * offer message will indicate if the host supports sub-channels.
    916	 * The guest is free to ask for sub-channels to be offered and can
    917	 * open these sub-channels as a normal "primary" channel. However,
    918	 * all sub-channels will have the same type and instance guids as the
    919	 * primary channel. Requests sent on a given channel will result in a
    920	 * response on the same channel.
    921	 */
    922
    923	/*
    924	 * Sub-channel creation callback. This callback will be called in
    925	 * process context when a sub-channel offer is received from the host.
    926	 * The guest can open the sub-channel in the context of this callback.
    927	 */
    928	void (*sc_creation_callback)(struct vmbus_channel *new_sc);
    929
    930	/*
    931	 * Channel rescind callback. Some channels (the hvsock ones), need to
    932	 * register a callback which is invoked in vmbus_onoffer_rescind().
    933	 */
    934	void (*chn_rescind_callback)(struct vmbus_channel *channel);
    935
    936	/*
    937	 * All Sub-channels of a primary channel are linked here.
    938	 */
    939	struct list_head sc_list;
    940	/*
    941	 * The primary channel this sub-channel belongs to.
    942	 * This will be NULL for the primary channel.
    943	 */
    944	struct vmbus_channel *primary_channel;
    945	/*
    946	 * Support per-channel state for use by vmbus drivers.
    947	 */
    948	void *per_channel_state;
    949
    950	/*
    951	 * Defer freeing channel until after all cpu's have
    952	 * gone through grace period.
    953	 */
    954	struct rcu_head rcu;
    955
    956	/*
    957	 * For sysfs per-channel properties.
    958	 */
    959	struct kobject			kobj;
    960
    961	/*
    962	 * For performance critical channels (storage, networking
    963	 * etc,), Hyper-V has a mechanism to enhance the throughput
    964	 * at the expense of latency:
    965	 * When the host is to be signaled, we just set a bit in a shared page
    966	 * and this bit will be inspected by the hypervisor within a certain
    967	 * window and if the bit is set, the host will be signaled. The window
    968	 * of time is the monitor latency - currently around 100 usecs. This
    969	 * mechanism improves throughput by:
    970	 *
    971	 * A) Making the host more efficient - each time it wakes up,
    972	 *    potentially it will process morev number of packets. The
    973	 *    monitor latency allows a batch to build up.
    974	 * B) By deferring the hypercall to signal, we will also minimize
    975	 *    the interrupts.
    976	 *
    977	 * Clearly, these optimizations improve throughput at the expense of
    978	 * latency. Furthermore, since the channel is shared for both
    979	 * control and data messages, control messages currently suffer
    980	 * unnecessary latency adversely impacting performance and boot
    981	 * time. To fix this issue, permit tagging the channel as being
    982	 * in "low latency" mode. In this mode, we will bypass the monitor
    983	 * mechanism.
    984	 */
    985	bool low_latency;
    986
    987	bool probe_done;
    988
    989	/*
    990	 * Cache the device ID here for easy access; this is useful, in
    991	 * particular, in situations where the channel's device_obj has
    992	 * not been allocated/initialized yet.
    993	 */
    994	u16 device_id;
    995
    996	/*
    997	 * We must offload the handling of the primary/sub channels
    998	 * from the single-threaded vmbus_connection.work_queue to
    999	 * two different workqueue, otherwise we can block
   1000	 * vmbus_connection.work_queue and hang: see vmbus_process_offer().
   1001	 */
   1002	struct work_struct add_channel_work;
   1003
   1004	/*
   1005	 * Guest to host interrupts caused by the inbound ring buffer changing
   1006	 * from full to not full while a packet is waiting.
   1007	 */
   1008	u64 intr_in_full;
   1009
   1010	/*
   1011	 * The total number of write operations that encountered a full
   1012	 * outbound ring buffer.
   1013	 */
   1014	u64 out_full_total;
   1015
   1016	/*
   1017	 * The number of write operations that were the first to encounter a
   1018	 * full outbound ring buffer.
   1019	 */
   1020	u64 out_full_first;
   1021
   1022	/* enabling/disabling fuzz testing on the channel (default is false)*/
   1023	bool fuzz_testing_state;
   1024
   1025	/*
   1026	 * Interrupt delay will delay the guest from emptying the ring buffer
   1027	 * for a specific amount of time. The delay is in microseconds and will
   1028	 * be between 1 to a maximum of 1000, its default is 0 (no delay).
   1029	 * The  Message delay will delay guest reading on a per message basis
   1030	 * in microseconds between 1 to 1000 with the default being 0
   1031	 * (no delay).
   1032	 */
   1033	u32 fuzz_testing_interrupt_delay;
   1034	u32 fuzz_testing_message_delay;
   1035
   1036	/* callback to generate a request ID from a request address */
   1037	u64 (*next_request_id_callback)(struct vmbus_channel *channel, u64 rqst_addr);
   1038	/* callback to retrieve a request address from a request ID */
   1039	u64 (*request_addr_callback)(struct vmbus_channel *channel, u64 rqst_id);
   1040
   1041	/* request/transaction ids for VMBus */
   1042	struct vmbus_requestor requestor;
   1043	u32 rqstor_size;
   1044
   1045	/* The max size of a packet on this channel */
   1046	u32 max_pkt_size;
   1047};
   1048
   1049#define lock_requestor(channel, flags)					\
   1050do {									\
   1051	struct vmbus_requestor *rqstor = &(channel)->requestor;		\
   1052									\
   1053	spin_lock_irqsave(&rqstor->req_lock, flags);			\
   1054} while (0)
   1055
   1056static __always_inline void unlock_requestor(struct vmbus_channel *channel,
   1057					     unsigned long flags)
   1058{
   1059	struct vmbus_requestor *rqstor = &channel->requestor;
   1060
   1061	spin_unlock_irqrestore(&rqstor->req_lock, flags);
   1062}
   1063
   1064u64 vmbus_next_request_id(struct vmbus_channel *channel, u64 rqst_addr);
   1065u64 __vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
   1066			       u64 rqst_addr);
   1067u64 vmbus_request_addr_match(struct vmbus_channel *channel, u64 trans_id,
   1068			     u64 rqst_addr);
   1069u64 vmbus_request_addr(struct vmbus_channel *channel, u64 trans_id);
   1070
   1071static inline bool is_hvsock_offer(const struct vmbus_channel_offer_channel *o)
   1072{
   1073	return !!(o->offer.chn_flags & VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER);
   1074}
   1075
   1076static inline bool is_hvsock_channel(const struct vmbus_channel *c)
   1077{
   1078	return is_hvsock_offer(&c->offermsg);
   1079}
   1080
   1081static inline bool is_sub_channel(const struct vmbus_channel *c)
   1082{
   1083	return c->offermsg.offer.sub_channel_index != 0;
   1084}
   1085
   1086static inline void set_channel_read_mode(struct vmbus_channel *c,
   1087					enum hv_callback_mode mode)
   1088{
   1089	c->callback_mode = mode;
   1090}
   1091
   1092static inline void set_per_channel_state(struct vmbus_channel *c, void *s)
   1093{
   1094	c->per_channel_state = s;
   1095}
   1096
   1097static inline void *get_per_channel_state(struct vmbus_channel *c)
   1098{
   1099	return c->per_channel_state;
   1100}
   1101
   1102static inline void set_channel_pending_send_size(struct vmbus_channel *c,
   1103						 u32 size)
   1104{
   1105	unsigned long flags;
   1106
   1107	if (size) {
   1108		spin_lock_irqsave(&c->outbound.ring_lock, flags);
   1109		++c->out_full_total;
   1110
   1111		if (!c->out_full_flag) {
   1112			++c->out_full_first;
   1113			c->out_full_flag = true;
   1114		}
   1115		spin_unlock_irqrestore(&c->outbound.ring_lock, flags);
   1116	} else {
   1117		c->out_full_flag = false;
   1118	}
   1119
   1120	c->outbound.ring_buffer->pending_send_sz = size;
   1121}
   1122
   1123void vmbus_onmessage(struct vmbus_channel_message_header *hdr);
   1124
   1125int vmbus_request_offers(void);
   1126
   1127/*
   1128 * APIs for managing sub-channels.
   1129 */
   1130
   1131void vmbus_set_sc_create_callback(struct vmbus_channel *primary_channel,
   1132			void (*sc_cr_cb)(struct vmbus_channel *new_sc));
   1133
   1134void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel,
   1135		void (*chn_rescind_cb)(struct vmbus_channel *));
   1136
   1137/* The format must be the same as struct vmdata_gpa_direct */
   1138struct vmbus_channel_packet_page_buffer {
   1139	u16 type;
   1140	u16 dataoffset8;
   1141	u16 length8;
   1142	u16 flags;
   1143	u64 transactionid;
   1144	u32 reserved;
   1145	u32 rangecount;
   1146	struct hv_page_buffer range[MAX_PAGE_BUFFER_COUNT];
   1147} __packed;
   1148
   1149/* The format must be the same as struct vmdata_gpa_direct */
   1150struct vmbus_channel_packet_multipage_buffer {
   1151	u16 type;
   1152	u16 dataoffset8;
   1153	u16 length8;
   1154	u16 flags;
   1155	u64 transactionid;
   1156	u32 reserved;
   1157	u32 rangecount;		/* Always 1 in this case */
   1158	struct hv_multipage_buffer range;
   1159} __packed;
   1160
   1161/* The format must be the same as struct vmdata_gpa_direct */
   1162struct vmbus_packet_mpb_array {
   1163	u16 type;
   1164	u16 dataoffset8;
   1165	u16 length8;
   1166	u16 flags;
   1167	u64 transactionid;
   1168	u32 reserved;
   1169	u32 rangecount;         /* Always 1 in this case */
   1170	struct hv_mpb_array range;
   1171} __packed;
   1172
   1173int vmbus_alloc_ring(struct vmbus_channel *channel,
   1174		     u32 send_size, u32 recv_size);
   1175void vmbus_free_ring(struct vmbus_channel *channel);
   1176
   1177int vmbus_connect_ring(struct vmbus_channel *channel,
   1178		       void (*onchannel_callback)(void *context),
   1179		       void *context);
   1180int vmbus_disconnect_ring(struct vmbus_channel *channel);
   1181
   1182extern int vmbus_open(struct vmbus_channel *channel,
   1183			    u32 send_ringbuffersize,
   1184			    u32 recv_ringbuffersize,
   1185			    void *userdata,
   1186			    u32 userdatalen,
   1187			    void (*onchannel_callback)(void *context),
   1188			    void *context);
   1189
   1190extern void vmbus_close(struct vmbus_channel *channel);
   1191
   1192extern int vmbus_sendpacket_getid(struct vmbus_channel *channel,
   1193				  void *buffer,
   1194				  u32 bufferLen,
   1195				  u64 requestid,
   1196				  u64 *trans_id,
   1197				  enum vmbus_packet_type type,
   1198				  u32 flags);
   1199extern int vmbus_sendpacket(struct vmbus_channel *channel,
   1200				  void *buffer,
   1201				  u32 bufferLen,
   1202				  u64 requestid,
   1203				  enum vmbus_packet_type type,
   1204				  u32 flags);
   1205
   1206extern int vmbus_sendpacket_pagebuffer(struct vmbus_channel *channel,
   1207					    struct hv_page_buffer pagebuffers[],
   1208					    u32 pagecount,
   1209					    void *buffer,
   1210					    u32 bufferlen,
   1211					    u64 requestid);
   1212
   1213extern int vmbus_sendpacket_mpb_desc(struct vmbus_channel *channel,
   1214				     struct vmbus_packet_mpb_array *mpb,
   1215				     u32 desc_size,
   1216				     void *buffer,
   1217				     u32 bufferlen,
   1218				     u64 requestid);
   1219
   1220extern int vmbus_establish_gpadl(struct vmbus_channel *channel,
   1221				      void *kbuffer,
   1222				      u32 size,
   1223				      struct vmbus_gpadl *gpadl);
   1224
   1225extern int vmbus_teardown_gpadl(struct vmbus_channel *channel,
   1226				     struct vmbus_gpadl *gpadl);
   1227
   1228void vmbus_reset_channel_cb(struct vmbus_channel *channel);
   1229
   1230extern int vmbus_recvpacket(struct vmbus_channel *channel,
   1231				  void *buffer,
   1232				  u32 bufferlen,
   1233				  u32 *buffer_actual_len,
   1234				  u64 *requestid);
   1235
   1236extern int vmbus_recvpacket_raw(struct vmbus_channel *channel,
   1237				     void *buffer,
   1238				     u32 bufferlen,
   1239				     u32 *buffer_actual_len,
   1240				     u64 *requestid);
   1241
   1242
   1243extern void vmbus_ontimer(unsigned long data);
   1244
   1245/* Base driver object */
   1246struct hv_driver {
   1247	const char *name;
   1248
   1249	/*
   1250	 * A hvsock offer, which has a VMBUS_CHANNEL_TLNPI_PROVIDER_OFFER
   1251	 * channel flag, actually doesn't mean a synthetic device because the
   1252	 * offer's if_type/if_instance can change for every new hvsock
   1253	 * connection.
   1254	 *
   1255	 * However, to facilitate the notification of new-offer/rescind-offer
   1256	 * from vmbus driver to hvsock driver, we can handle hvsock offer as
   1257	 * a special vmbus device, and hence we need the below flag to
   1258	 * indicate if the driver is the hvsock driver or not: we need to
   1259	 * specially treat the hvosck offer & driver in vmbus_match().
   1260	 */
   1261	bool hvsock;
   1262
   1263	/* the device type supported by this driver */
   1264	guid_t dev_type;
   1265	const struct hv_vmbus_device_id *id_table;
   1266
   1267	struct device_driver driver;
   1268
   1269	/* dynamic device GUID's */
   1270	struct  {
   1271		spinlock_t lock;
   1272		struct list_head list;
   1273	} dynids;
   1274
   1275	int (*probe)(struct hv_device *, const struct hv_vmbus_device_id *);
   1276	int (*remove)(struct hv_device *);
   1277	void (*shutdown)(struct hv_device *);
   1278
   1279	int (*suspend)(struct hv_device *);
   1280	int (*resume)(struct hv_device *);
   1281
   1282};
   1283
   1284/* Base device object */
   1285struct hv_device {
   1286	/* the device type id of this device */
   1287	guid_t dev_type;
   1288
   1289	/* the device instance id of this device */
   1290	guid_t dev_instance;
   1291	u16 vendor_id;
   1292	u16 device_id;
   1293
   1294	struct device device;
   1295	/*
   1296	 * Driver name to force a match.  Do not set directly, because core
   1297	 * frees it.  Use driver_set_override() to set or clear it.
   1298	 */
   1299	const char *driver_override;
   1300
   1301	struct vmbus_channel *channel;
   1302	struct kset	     *channels_kset;
   1303	struct device_dma_parameters dma_parms;
   1304	u64 dma_mask;
   1305
   1306	/* place holder to keep track of the dir for hv device in debugfs */
   1307	struct dentry *debug_dir;
   1308
   1309};
   1310
   1311
   1312static inline struct hv_device *device_to_hv_device(struct device *d)
   1313{
   1314	return container_of(d, struct hv_device, device);
   1315}
   1316
   1317static inline struct hv_driver *drv_to_hv_drv(struct device_driver *d)
   1318{
   1319	return container_of(d, struct hv_driver, driver);
   1320}
   1321
   1322static inline void hv_set_drvdata(struct hv_device *dev, void *data)
   1323{
   1324	dev_set_drvdata(&dev->device, data);
   1325}
   1326
   1327static inline void *hv_get_drvdata(struct hv_device *dev)
   1328{
   1329	return dev_get_drvdata(&dev->device);
   1330}
   1331
   1332struct hv_ring_buffer_debug_info {
   1333	u32 current_interrupt_mask;
   1334	u32 current_read_index;
   1335	u32 current_write_index;
   1336	u32 bytes_avail_toread;
   1337	u32 bytes_avail_towrite;
   1338};
   1339
   1340
   1341int hv_ringbuffer_get_debuginfo(struct hv_ring_buffer_info *ring_info,
   1342				struct hv_ring_buffer_debug_info *debug_info);
   1343
   1344/* Vmbus interface */
   1345#define vmbus_driver_register(driver)	\
   1346	__vmbus_driver_register(driver, THIS_MODULE, KBUILD_MODNAME)
   1347int __must_check __vmbus_driver_register(struct hv_driver *hv_driver,
   1348					 struct module *owner,
   1349					 const char *mod_name);
   1350void vmbus_driver_unregister(struct hv_driver *hv_driver);
   1351
   1352void vmbus_hvsock_device_unregister(struct vmbus_channel *channel);
   1353
   1354int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
   1355			resource_size_t min, resource_size_t max,
   1356			resource_size_t size, resource_size_t align,
   1357			bool fb_overlap_ok);
   1358void vmbus_free_mmio(resource_size_t start, resource_size_t size);
   1359
   1360/*
   1361 * GUID definitions of various offer types - services offered to the guest.
   1362 */
   1363
   1364/*
   1365 * Network GUID
   1366 * {f8615163-df3e-46c5-913f-f2d2f965ed0e}
   1367 */
   1368#define HV_NIC_GUID \
   1369	.guid = GUID_INIT(0xf8615163, 0xdf3e, 0x46c5, 0x91, 0x3f, \
   1370			  0xf2, 0xd2, 0xf9, 0x65, 0xed, 0x0e)
   1371
   1372/*
   1373 * IDE GUID
   1374 * {32412632-86cb-44a2-9b5c-50d1417354f5}
   1375 */
   1376#define HV_IDE_GUID \
   1377	.guid = GUID_INIT(0x32412632, 0x86cb, 0x44a2, 0x9b, 0x5c, \
   1378			  0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5)
   1379
   1380/*
   1381 * SCSI GUID
   1382 * {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}
   1383 */
   1384#define HV_SCSI_GUID \
   1385	.guid = GUID_INIT(0xba6163d9, 0x04a1, 0x4d29, 0xb6, 0x05, \
   1386			  0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f)
   1387
   1388/*
   1389 * Shutdown GUID
   1390 * {0e0b6031-5213-4934-818b-38d90ced39db}
   1391 */
   1392#define HV_SHUTDOWN_GUID \
   1393	.guid = GUID_INIT(0x0e0b6031, 0x5213, 0x4934, 0x81, 0x8b, \
   1394			  0x38, 0xd9, 0x0c, 0xed, 0x39, 0xdb)
   1395
   1396/*
   1397 * Time Synch GUID
   1398 * {9527E630-D0AE-497b-ADCE-E80AB0175CAF}
   1399 */
   1400#define HV_TS_GUID \
   1401	.guid = GUID_INIT(0x9527e630, 0xd0ae, 0x497b, 0xad, 0xce, \
   1402			  0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf)
   1403
   1404/*
   1405 * Heartbeat GUID
   1406 * {57164f39-9115-4e78-ab55-382f3bd5422d}
   1407 */
   1408#define HV_HEART_BEAT_GUID \
   1409	.guid = GUID_INIT(0x57164f39, 0x9115, 0x4e78, 0xab, 0x55, \
   1410			  0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d)
   1411
   1412/*
   1413 * KVP GUID
   1414 * {a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}
   1415 */
   1416#define HV_KVP_GUID \
   1417	.guid = GUID_INIT(0xa9a0f4e7, 0x5a45, 0x4d96, 0xb8, 0x27, \
   1418			  0x8a, 0x84, 0x1e, 0x8c, 0x03, 0xe6)
   1419
   1420/*
   1421 * Dynamic memory GUID
   1422 * {525074dc-8985-46e2-8057-a307dc18a502}
   1423 */
   1424#define HV_DM_GUID \
   1425	.guid = GUID_INIT(0x525074dc, 0x8985, 0x46e2, 0x80, 0x57, \
   1426			  0xa3, 0x07, 0xdc, 0x18, 0xa5, 0x02)
   1427
   1428/*
   1429 * Mouse GUID
   1430 * {cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}
   1431 */
   1432#define HV_MOUSE_GUID \
   1433	.guid = GUID_INIT(0xcfa8b69e, 0x5b4a, 0x4cc0, 0xb9, 0x8b, \
   1434			  0x8b, 0xa1, 0xa1, 0xf3, 0xf9, 0x5a)
   1435
   1436/*
   1437 * Keyboard GUID
   1438 * {f912ad6d-2b17-48ea-bd65-f927a61c7684}
   1439 */
   1440#define HV_KBD_GUID \
   1441	.guid = GUID_INIT(0xf912ad6d, 0x2b17, 0x48ea, 0xbd, 0x65, \
   1442			  0xf9, 0x27, 0xa6, 0x1c, 0x76, 0x84)
   1443
   1444/*
   1445 * VSS (Backup/Restore) GUID
   1446 */
   1447#define HV_VSS_GUID \
   1448	.guid = GUID_INIT(0x35fa2e29, 0xea23, 0x4236, 0x96, 0xae, \
   1449			  0x3a, 0x6e, 0xba, 0xcb, 0xa4, 0x40)
   1450/*
   1451 * Synthetic Video GUID
   1452 * {DA0A7802-E377-4aac-8E77-0558EB1073F8}
   1453 */
   1454#define HV_SYNTHVID_GUID \
   1455	.guid = GUID_INIT(0xda0a7802, 0xe377, 0x4aac, 0x8e, 0x77, \
   1456			  0x05, 0x58, 0xeb, 0x10, 0x73, 0xf8)
   1457
   1458/*
   1459 * Synthetic FC GUID
   1460 * {2f9bcc4a-0069-4af3-b76b-6fd0be528cda}
   1461 */
   1462#define HV_SYNTHFC_GUID \
   1463	.guid = GUID_INIT(0x2f9bcc4a, 0x0069, 0x4af3, 0xb7, 0x6b, \
   1464			  0x6f, 0xd0, 0xbe, 0x52, 0x8c, 0xda)
   1465
   1466/*
   1467 * Guest File Copy Service
   1468 * {34D14BE3-DEE4-41c8-9AE7-6B174977C192}
   1469 */
   1470
   1471#define HV_FCOPY_GUID \
   1472	.guid = GUID_INIT(0x34d14be3, 0xdee4, 0x41c8, 0x9a, 0xe7, \
   1473			  0x6b, 0x17, 0x49, 0x77, 0xc1, 0x92)
   1474
   1475/*
   1476 * NetworkDirect. This is the guest RDMA service.
   1477 * {8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}
   1478 */
   1479#define HV_ND_GUID \
   1480	.guid = GUID_INIT(0x8c2eaf3d, 0x32a7, 0x4b09, 0xab, 0x99, \
   1481			  0xbd, 0x1f, 0x1c, 0x86, 0xb5, 0x01)
   1482
   1483/*
   1484 * PCI Express Pass Through
   1485 * {44C4F61D-4444-4400-9D52-802E27EDE19F}
   1486 */
   1487
   1488#define HV_PCIE_GUID \
   1489	.guid = GUID_INIT(0x44c4f61d, 0x4444, 0x4400, 0x9d, 0x52, \
   1490			  0x80, 0x2e, 0x27, 0xed, 0xe1, 0x9f)
   1491
   1492/*
   1493 * Linux doesn't support these 4 devices: the first two are for
   1494 * Automatic Virtual Machine Activation, the third is for
   1495 * Remote Desktop Virtualization, and the fourth is Initial
   1496 * Machine Configuration (IMC) used only by Windows guests.
   1497 * {f8e65716-3cb3-4a06-9a60-1889c5cccab5}
   1498 * {3375baf4-9e15-4b30-b765-67acb10d607b}
   1499 * {276aacf4-ac15-426c-98dd-7521ad3f01fe}
   1500 * {c376c1c3-d276-48d2-90a9-c04748072c60}
   1501 */
   1502
   1503#define HV_AVMA1_GUID \
   1504	.guid = GUID_INIT(0xf8e65716, 0x3cb3, 0x4a06, 0x9a, 0x60, \
   1505			  0x18, 0x89, 0xc5, 0xcc, 0xca, 0xb5)
   1506
   1507#define HV_AVMA2_GUID \
   1508	.guid = GUID_INIT(0x3375baf4, 0x9e15, 0x4b30, 0xb7, 0x65, \
   1509			  0x67, 0xac, 0xb1, 0x0d, 0x60, 0x7b)
   1510
   1511#define HV_RDV_GUID \
   1512	.guid = GUID_INIT(0x276aacf4, 0xac15, 0x426c, 0x98, 0xdd, \
   1513			  0x75, 0x21, 0xad, 0x3f, 0x01, 0xfe)
   1514
   1515#define HV_IMC_GUID \
   1516	.guid = GUID_INIT(0xc376c1c3, 0xd276, 0x48d2, 0x90, 0xa9, \
   1517			  0xc0, 0x47, 0x48, 0x07, 0x2c, 0x60)
   1518
   1519/*
   1520 * Common header for Hyper-V ICs
   1521 */
   1522
   1523#define ICMSGTYPE_NEGOTIATE		0
   1524#define ICMSGTYPE_HEARTBEAT		1
   1525#define ICMSGTYPE_KVPEXCHANGE		2
   1526#define ICMSGTYPE_SHUTDOWN		3
   1527#define ICMSGTYPE_TIMESYNC		4
   1528#define ICMSGTYPE_VSS			5
   1529#define ICMSGTYPE_FCOPY			7
   1530
   1531#define ICMSGHDRFLAG_TRANSACTION	1
   1532#define ICMSGHDRFLAG_REQUEST		2
   1533#define ICMSGHDRFLAG_RESPONSE		4
   1534
   1535
   1536/*
   1537 * While we want to handle util services as regular devices,
   1538 * there is only one instance of each of these services; so
   1539 * we statically allocate the service specific state.
   1540 */
   1541
   1542struct hv_util_service {
   1543	u8 *recv_buffer;
   1544	void *channel;
   1545	void (*util_cb)(void *);
   1546	int (*util_init)(struct hv_util_service *);
   1547	void (*util_deinit)(void);
   1548	int (*util_pre_suspend)(void);
   1549	int (*util_pre_resume)(void);
   1550};
   1551
   1552struct vmbuspipe_hdr {
   1553	u32 flags;
   1554	u32 msgsize;
   1555} __packed;
   1556
   1557struct ic_version {
   1558	u16 major;
   1559	u16 minor;
   1560} __packed;
   1561
   1562struct icmsg_hdr {
   1563	struct ic_version icverframe;
   1564	u16 icmsgtype;
   1565	struct ic_version icvermsg;
   1566	u16 icmsgsize;
   1567	u32 status;
   1568	u8 ictransaction_id;
   1569	u8 icflags;
   1570	u8 reserved[2];
   1571} __packed;
   1572
   1573#define IC_VERSION_NEGOTIATION_MAX_VER_COUNT 100
   1574#define ICMSG_HDR (sizeof(struct vmbuspipe_hdr) + sizeof(struct icmsg_hdr))
   1575#define ICMSG_NEGOTIATE_PKT_SIZE(icframe_vercnt, icmsg_vercnt) \
   1576	(ICMSG_HDR + sizeof(struct icmsg_negotiate) + \
   1577	 (((icframe_vercnt) + (icmsg_vercnt)) * sizeof(struct ic_version)))
   1578
   1579struct icmsg_negotiate {
   1580	u16 icframe_vercnt;
   1581	u16 icmsg_vercnt;
   1582	u32 reserved;
   1583	struct ic_version icversion_data[]; /* any size array */
   1584} __packed;
   1585
   1586struct shutdown_msg_data {
   1587	u32 reason_code;
   1588	u32 timeout_seconds;
   1589	u32 flags;
   1590	u8  display_message[2048];
   1591} __packed;
   1592
   1593struct heartbeat_msg_data {
   1594	u64 seq_num;
   1595	u32 reserved[8];
   1596} __packed;
   1597
   1598/* Time Sync IC defs */
   1599#define ICTIMESYNCFLAG_PROBE	0
   1600#define ICTIMESYNCFLAG_SYNC	1
   1601#define ICTIMESYNCFLAG_SAMPLE	2
   1602
   1603#ifdef __x86_64__
   1604#define WLTIMEDELTA	116444736000000000L	/* in 100ns unit */
   1605#else
   1606#define WLTIMEDELTA	116444736000000000LL
   1607#endif
   1608
   1609struct ictimesync_data {
   1610	u64 parenttime;
   1611	u64 childtime;
   1612	u64 roundtriptime;
   1613	u8 flags;
   1614} __packed;
   1615
   1616struct ictimesync_ref_data {
   1617	u64 parenttime;
   1618	u64 vmreferencetime;
   1619	u8 flags;
   1620	char leapflags;
   1621	char stratum;
   1622	u8 reserved[3];
   1623} __packed;
   1624
   1625struct hyperv_service_callback {
   1626	u8 msg_type;
   1627	char *log_msg;
   1628	guid_t data;
   1629	struct vmbus_channel *channel;
   1630	void (*callback)(void *context);
   1631};
   1632
   1633struct hv_dma_range {
   1634	dma_addr_t dma;
   1635	u32 mapping_size;
   1636};
   1637
   1638#define MAX_SRV_VER	0x7ffffff
   1639extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, u8 *buf, u32 buflen,
   1640				const int *fw_version, int fw_vercnt,
   1641				const int *srv_version, int srv_vercnt,
   1642				int *nego_fw_version, int *nego_srv_version);
   1643
   1644void hv_process_channel_removal(struct vmbus_channel *channel);
   1645
   1646void vmbus_setevent(struct vmbus_channel *channel);
   1647/*
   1648 * Negotiated version with the Host.
   1649 */
   1650
   1651extern __u32 vmbus_proto_version;
   1652
   1653int vmbus_send_tl_connect_request(const guid_t *shv_guest_servie_id,
   1654				  const guid_t *shv_host_servie_id);
   1655int vmbus_send_modifychannel(struct vmbus_channel *channel, u32 target_vp);
   1656void vmbus_set_event(struct vmbus_channel *channel);
   1657
   1658/* Get the start of the ring buffer. */
   1659static inline void *
   1660hv_get_ring_buffer(const struct hv_ring_buffer_info *ring_info)
   1661{
   1662	return ring_info->ring_buffer->buffer;
   1663}
   1664
   1665/*
   1666 * Mask off host interrupt callback notifications
   1667 */
   1668static inline void hv_begin_read(struct hv_ring_buffer_info *rbi)
   1669{
   1670	rbi->ring_buffer->interrupt_mask = 1;
   1671
   1672	/* make sure mask update is not reordered */
   1673	virt_mb();
   1674}
   1675
   1676/*
   1677 * Re-enable host callback and return number of outstanding bytes
   1678 */
   1679static inline u32 hv_end_read(struct hv_ring_buffer_info *rbi)
   1680{
   1681
   1682	rbi->ring_buffer->interrupt_mask = 0;
   1683
   1684	/* make sure mask update is not reordered */
   1685	virt_mb();
   1686
   1687	/*
   1688	 * Now check to see if the ring buffer is still empty.
   1689	 * If it is not, we raced and we need to process new
   1690	 * incoming messages.
   1691	 */
   1692	return hv_get_bytes_to_read(rbi);
   1693}
   1694
   1695/*
   1696 * An API to support in-place processing of incoming VMBUS packets.
   1697 */
   1698
   1699/* Get data payload associated with descriptor */
   1700static inline void *hv_pkt_data(const struct vmpacket_descriptor *desc)
   1701{
   1702	return (void *)((unsigned long)desc + (desc->offset8 << 3));
   1703}
   1704
   1705/* Get data size associated with descriptor */
   1706static inline u32 hv_pkt_datalen(const struct vmpacket_descriptor *desc)
   1707{
   1708	return (desc->len8 << 3) - (desc->offset8 << 3);
   1709}
   1710
   1711/* Get packet length associated with descriptor */
   1712static inline u32 hv_pkt_len(const struct vmpacket_descriptor *desc)
   1713{
   1714	return desc->len8 << 3;
   1715}
   1716
   1717struct vmpacket_descriptor *
   1718hv_pkt_iter_first(struct vmbus_channel *channel);
   1719
   1720struct vmpacket_descriptor *
   1721__hv_pkt_iter_next(struct vmbus_channel *channel,
   1722		   const struct vmpacket_descriptor *pkt);
   1723
   1724void hv_pkt_iter_close(struct vmbus_channel *channel);
   1725
   1726static inline struct vmpacket_descriptor *
   1727hv_pkt_iter_next(struct vmbus_channel *channel,
   1728		 const struct vmpacket_descriptor *pkt)
   1729{
   1730	struct vmpacket_descriptor *nxt;
   1731
   1732	nxt = __hv_pkt_iter_next(channel, pkt);
   1733	if (!nxt)
   1734		hv_pkt_iter_close(channel);
   1735
   1736	return nxt;
   1737}
   1738
   1739#define foreach_vmbus_pkt(pkt, channel) \
   1740	for (pkt = hv_pkt_iter_first(channel); pkt; \
   1741	    pkt = hv_pkt_iter_next(channel, pkt))
   1742
   1743/*
   1744 * Interface for passing data between SR-IOV PF and VF drivers. The VF driver
   1745 * sends requests to read and write blocks. Each block must be 128 bytes or
   1746 * smaller. Optionally, the VF driver can register a callback function which
   1747 * will be invoked when the host says that one or more of the first 64 block
   1748 * IDs is "invalid" which means that the VF driver should reread them.
   1749 */
   1750#define HV_CONFIG_BLOCK_SIZE_MAX 128
   1751
   1752int hyperv_read_cfg_blk(struct pci_dev *dev, void *buf, unsigned int buf_len,
   1753			unsigned int block_id, unsigned int *bytes_returned);
   1754int hyperv_write_cfg_blk(struct pci_dev *dev, void *buf, unsigned int len,
   1755			 unsigned int block_id);
   1756int hyperv_reg_block_invalidate(struct pci_dev *dev, void *context,
   1757				void (*block_invalidate)(void *context,
   1758							 u64 block_mask));
   1759
   1760struct hyperv_pci_block_ops {
   1761	int (*read_block)(struct pci_dev *dev, void *buf, unsigned int buf_len,
   1762			  unsigned int block_id, unsigned int *bytes_returned);
   1763	int (*write_block)(struct pci_dev *dev, void *buf, unsigned int len,
   1764			   unsigned int block_id);
   1765	int (*reg_blk_invalidate)(struct pci_dev *dev, void *context,
   1766				  void (*block_invalidate)(void *context,
   1767							   u64 block_mask));
   1768};
   1769
   1770extern struct hyperv_pci_block_ops hvpci_block_ops;
   1771
   1772static inline unsigned long virt_to_hvpfn(void *addr)
   1773{
   1774	phys_addr_t paddr;
   1775
   1776	if (is_vmalloc_addr(addr))
   1777		paddr = page_to_phys(vmalloc_to_page(addr)) +
   1778				     offset_in_page(addr);
   1779	else
   1780		paddr = __pa(addr);
   1781
   1782	return  paddr >> HV_HYP_PAGE_SHIFT;
   1783}
   1784
   1785#define NR_HV_HYP_PAGES_IN_PAGE	(PAGE_SIZE / HV_HYP_PAGE_SIZE)
   1786#define offset_in_hvpage(ptr)	((unsigned long)(ptr) & ~HV_HYP_PAGE_MASK)
   1787#define HVPFN_UP(x)	(((x) + HV_HYP_PAGE_SIZE-1) >> HV_HYP_PAGE_SHIFT)
   1788#define HVPFN_DOWN(x)	((x) >> HV_HYP_PAGE_SHIFT)
   1789#define page_to_hvpfn(page)	(page_to_pfn(page) * NR_HV_HYP_PAGES_IN_PAGE)
   1790
   1791#endif /* _HYPERV_H */