Home | History | Annotate | Line # | Download | only in hyperv
      1  1.2  nonaka /*	$NetBSD: hypervreg.h,v 1.2 2022/05/20 13:55:17 nonaka Exp $	*/
      2  1.1  nonaka /*	$OpenBSD: hypervreg.h,v 1.10 2017/01/05 13:17:22 mikeb Exp $	*/
      3  1.1  nonaka 
      4  1.1  nonaka /*-
      5  1.1  nonaka  * Copyright (c) 2009-2012,2016 Microsoft Corp.
      6  1.1  nonaka  * Copyright (c) 2012 NetApp Inc.
      7  1.1  nonaka  * Copyright (c) 2012 Citrix Inc.
      8  1.1  nonaka  * All rights reserved.
      9  1.1  nonaka  *
     10  1.1  nonaka  * Redistribution and use in source and binary forms, with or without
     11  1.1  nonaka  * modification, are permitted provided that the following conditions
     12  1.1  nonaka  * are met:
     13  1.1  nonaka  * 1. Redistributions of source code must retain the above copyright
     14  1.1  nonaka  *    notice unmodified, this list of conditions, and the following
     15  1.1  nonaka  *    disclaimer.
     16  1.1  nonaka  * 2. Redistributions in binary form must reproduce the above copyright
     17  1.1  nonaka  *    notice, this list of conditions and the following disclaimer in the
     18  1.1  nonaka  *    documentation and/or other materials provided with the distribution.
     19  1.1  nonaka  *
     20  1.1  nonaka  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     21  1.1  nonaka  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     22  1.1  nonaka  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     23  1.1  nonaka  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     24  1.1  nonaka  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     25  1.1  nonaka  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26  1.1  nonaka  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27  1.1  nonaka  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28  1.1  nonaka  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     29  1.1  nonaka  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  1.1  nonaka  */
     31  1.1  nonaka 
     32  1.1  nonaka #ifndef _HYPERVREG_H_
     33  1.1  nonaka #define _HYPERVREG_H_
     34  1.1  nonaka 
     35  1.1  nonaka #if defined(_KERNEL)
     36  1.1  nonaka 
     37  1.1  nonaka #define VMBUS_CONNID_MESSAGE		1
     38  1.1  nonaka #define VMBUS_CONNID_EVENT		2
     39  1.1  nonaka #define VMBUS_SINT_MESSAGE		2
     40  1.1  nonaka #define VMBUS_SINT_TIMER		4
     41  1.1  nonaka 
     42  1.1  nonaka struct hyperv_guid {
     43  1.1  nonaka 	uint8_t		hv_guid[16];
     44  1.1  nonaka } __packed;
     45  1.1  nonaka 
     46  1.1  nonaka /*
     47  1.1  nonaka  * $FreeBSD: head/sys/dev/hyperv/vmbus/hyperv_reg.h 303283 2016-07-25 03:12:40Z sephe $
     48  1.1  nonaka  */
     49  1.1  nonaka 
     50  1.1  nonaka /*
     51  1.1  nonaka  * Hyper-V Monitor Notification Facility
     52  1.1  nonaka  */
     53  1.1  nonaka struct hyperv_mon_param {
     54  1.1  nonaka 	uint32_t	mp_connid;
     55  1.1  nonaka 	uint16_t	mp_evtflag_ofs;
     56  1.1  nonaka 	uint16_t	mp_rsvd;
     57  1.1  nonaka } __packed;
     58  1.1  nonaka 
     59  1.1  nonaka /*
     60  1.1  nonaka  * Hyper-V message types
     61  1.1  nonaka  */
     62  1.1  nonaka #define HYPERV_MSGTYPE_NONE		0
     63  1.1  nonaka #define HYPERV_MSGTYPE_CHANNEL		1
     64  1.1  nonaka #define HYPERV_MSGTYPE_TIMER_EXPIRED	0x80000010
     65  1.1  nonaka 
     66  1.1  nonaka /*
     67  1.1  nonaka  * Hypercall status codes
     68  1.1  nonaka  */
     69  1.1  nonaka #define HYPERCALL_STATUS_SUCCESS	0x0000
     70  1.1  nonaka 
     71  1.1  nonaka /*
     72  1.1  nonaka  * Hypercall input values
     73  1.1  nonaka  */
     74  1.1  nonaka #define HYPERCALL_POST_MESSAGE		0x005c
     75  1.1  nonaka #define HYPERCALL_SIGNAL_EVENT		0x005d
     76  1.1  nonaka 
     77  1.1  nonaka /*
     78  1.1  nonaka  * Hypercall input parameters
     79  1.1  nonaka  */
     80  1.1  nonaka #define HYPERCALL_PARAM_ALIGN		8
     81  1.1  nonaka #if 0
     82  1.1  nonaka /*
     83  1.1  nonaka  * XXX
     84  1.1  nonaka  * <<Hypervisor Top Level Functional Specification 4.0b>> requires
     85  1.1  nonaka  * input parameters size to be multiple of 8, however, many post
     86  1.1  nonaka  * message input parameters do _not_ meet this requirement.
     87  1.1  nonaka  */
     88  1.1  nonaka #define HYPERCALL_PARAM_SIZE_ALIGN	8
     89  1.1  nonaka #endif
     90  1.1  nonaka 
     91  1.1  nonaka /*
     92  1.1  nonaka  * HYPERCALL_POST_MESSAGE
     93  1.1  nonaka  */
     94  1.1  nonaka #define HYPERCALL_POSTMSGIN_DSIZE_MAX	240
     95  1.1  nonaka #define HYPERCALL_POSTMSGIN_SIZE	256
     96  1.1  nonaka 
     97  1.1  nonaka struct hyperv_hypercall_postmsg_in {
     98  1.1  nonaka 	uint32_t	hc_connid;
     99  1.1  nonaka 	uint32_t	hc_rsvd;
    100  1.1  nonaka 	uint32_t	hc_msgtype;	/* VMBUS_MSGTYPE_ */
    101  1.1  nonaka 	uint32_t	hc_dsize;
    102  1.1  nonaka 	uint8_t		hc_data[HYPERCALL_POSTMSGIN_DSIZE_MAX];
    103  1.1  nonaka } __packed;
    104  1.1  nonaka __CTASSERT(sizeof(struct hyperv_hypercall_postmsg_in) == HYPERCALL_POSTMSGIN_SIZE);
    105  1.1  nonaka 
    106  1.1  nonaka /*
    107  1.1  nonaka  * $FreeBSD: head/sys/dev/hyperv/include/vmbus.h 306389 2016-09-28 04:25:25Z sephe $
    108  1.1  nonaka  */
    109  1.1  nonaka 
    110  1.1  nonaka /*
    111  1.1  nonaka  * VMBUS version is 32 bit, upper 16 bit for major_number and lower
    112  1.1  nonaka  * 16 bit for minor_number.
    113  1.1  nonaka  *
    114  1.1  nonaka  * 0.13  --  Windows Server 2008
    115  1.1  nonaka  * 1.1   --  Windows 7
    116  1.1  nonaka  * 2.4   --  Windows 8
    117  1.1  nonaka  * 3.0   --  Windows 8.1
    118  1.1  nonaka  * 4.0   --  Windows 10
    119  1.1  nonaka  */
    120  1.1  nonaka #define VMBUS_VERSION_WS2008		((0 << 16) | (13))
    121  1.1  nonaka #define VMBUS_VERSION_WIN7		((1 << 16) | (1))
    122  1.1  nonaka #define VMBUS_VERSION_WIN8		((2 << 16) | (4))
    123  1.1  nonaka #define VMBUS_VERSION_WIN8_1		((3 << 16) | (0))
    124  1.1  nonaka #define VMBUS_VERSION_WIN10		((4 << 16) | (0))
    125  1.1  nonaka 
    126  1.1  nonaka #define VMBUS_VERSION_MAJOR(ver)	(((uint32_t)(ver)) >> 16)
    127  1.1  nonaka #define VMBUS_VERSION_MINOR(ver)	(((uint32_t)(ver)) & 0xffff)
    128  1.1  nonaka 
    129  1.1  nonaka /*
    130  1.1  nonaka  * GPA stuffs.
    131  1.1  nonaka  */
    132  1.1  nonaka struct vmbus_gpa_range {
    133  1.1  nonaka 	uint32_t	gpa_len;
    134  1.1  nonaka 	uint32_t	gpa_ofs;
    135  1.1  nonaka 	uint64_t	gpa_page[0];
    136  1.1  nonaka } __packed;
    137  1.1  nonaka 
    138  1.1  nonaka /* This is actually vmbus_gpa_range.gpa_page[1] */
    139  1.1  nonaka struct vmbus_gpa {
    140  1.1  nonaka 	uint32_t	gpa_len;
    141  1.1  nonaka 	uint32_t	gpa_ofs;
    142  1.1  nonaka 	uint64_t	gpa_page;
    143  1.1  nonaka } __packed;
    144  1.1  nonaka 
    145  1.1  nonaka #define VMBUS_CHANPKT_SIZE_SHIFT	3
    146  1.1  nonaka 
    147  1.1  nonaka #define VMBUS_CHANPKT_GETLEN(pktlen)	\
    148  1.1  nonaka 	(((int)(pktlen)) << VMBUS_CHANPKT_SIZE_SHIFT)
    149  1.1  nonaka 
    150  1.1  nonaka struct vmbus_chanpkt_hdr {
    151  1.1  nonaka 	uint16_t	cph_type;	/* VMBUS_CHANPKT_TYPE_ */
    152  1.1  nonaka 	uint16_t	cph_hlen;	/* header len, in 8 bytes */
    153  1.1  nonaka 	uint16_t	cph_tlen;	/* total len, in 8 bytes */
    154  1.1  nonaka 	uint16_t	cph_flags;	/* VMBUS_CHANPKT_FLAG_ */
    155  1.1  nonaka 	uint64_t	cph_tid;
    156  1.1  nonaka } __packed;
    157  1.1  nonaka 
    158  1.1  nonaka #define VMBUS_CHANPKT_TYPE_INBAND	0x0006
    159  1.1  nonaka #define VMBUS_CHANPKT_TYPE_RXBUF	0x0007
    160  1.1  nonaka #define VMBUS_CHANPKT_TYPE_GPA		0x0009
    161  1.1  nonaka #define VMBUS_CHANPKT_TYPE_COMP		0x000b
    162  1.1  nonaka 
    163  1.1  nonaka #define VMBUS_CHANPKT_FLAG_RC		0x0001	/* report completion */
    164  1.1  nonaka 
    165  1.1  nonaka #define VMBUS_CHANPKT_CONST_DATA(pkt)			\
    166  1.1  nonaka 	((const void *)((const uint8_t *)(pkt) +	\
    167  1.1  nonaka 	    VMBUS_CHANPKT_GETLEN((pkt)->cph_hlen)))
    168  1.1  nonaka 
    169  1.1  nonaka /*
    170  1.1  nonaka  * $FreeBSD: head/sys/dev/hyperv/vmbus/vmbus_reg.h 305405 2016-09-05 03:21:31Z sephe $
    171  1.1  nonaka  */
    172  1.1  nonaka 
    173  1.1  nonaka /*
    174  1.1  nonaka  * Hyper-V SynIC message format.
    175  1.1  nonaka  */
    176  1.1  nonaka 
    177  1.1  nonaka #define VMBUS_MSG_DSIZE_MAX		240
    178  1.1  nonaka #define VMBUS_MSG_SIZE			256
    179  1.1  nonaka 
    180  1.1  nonaka struct vmbus_message {
    181  1.1  nonaka 	uint32_t	msg_type;	/* VMBUS_MSGTYPE_ */
    182  1.1  nonaka 	uint8_t		msg_dsize;	/* data size */
    183  1.1  nonaka 	uint8_t		msg_flags;	/* VMBUS_MSGFLAG_ */
    184  1.1  nonaka 	uint16_t	msg_rsvd;
    185  1.1  nonaka 	uint64_t	msg_id;
    186  1.1  nonaka 	uint8_t		msg_data[VMBUS_MSG_DSIZE_MAX];
    187  1.1  nonaka } __packed;
    188  1.1  nonaka 
    189  1.1  nonaka #define VMBUS_MSGFLAG_PENDING		0x01
    190  1.1  nonaka 
    191  1.1  nonaka /*
    192  1.1  nonaka  * Hyper-V SynIC event flags
    193  1.1  nonaka  */
    194  1.1  nonaka 
    195  1.1  nonaka #define VMBUS_EVTFLAGS_SIZE	256
    196  1.1  nonaka #define VMBUS_EVTFLAGS_MAX	((VMBUS_EVTFLAGS_SIZE / LONG_BIT) * 8)
    197  1.1  nonaka #define VMBUS_EVTFLAG_LEN	LONG_BIT
    198  1.1  nonaka #define VMBUS_EVTFLAG_MASK	(LONG_BIT - 1)
    199  1.1  nonaka 
    200  1.1  nonaka struct vmbus_evtflags {
    201  1.1  nonaka 	ulong		evt_flags[VMBUS_EVTFLAGS_MAX];
    202  1.1  nonaka } __packed;
    203  1.1  nonaka 
    204  1.1  nonaka /*
    205  1.1  nonaka  * Hyper-V Monitor Notification Facility
    206  1.1  nonaka  */
    207  1.1  nonaka 
    208  1.1  nonaka struct vmbus_mon_trig {
    209  1.1  nonaka 	uint32_t	mt_pending;
    210  1.1  nonaka 	uint32_t	mt_armed;
    211  1.1  nonaka } __packed;
    212  1.1  nonaka 
    213  1.1  nonaka #define VMBUS_MONTRIGS_MAX	4
    214  1.1  nonaka #define VMBUS_MONTRIG_LEN	32
    215  1.1  nonaka 
    216  1.1  nonaka struct vmbus_mnf {
    217  1.1  nonaka 	uint32_t	mnf_state;
    218  1.1  nonaka 	uint32_t	mnf_rsvd1;
    219  1.1  nonaka 
    220  1.1  nonaka 	struct vmbus_mon_trig
    221  1.1  nonaka 			mnf_trigs[VMBUS_MONTRIGS_MAX];
    222  1.1  nonaka 	uint8_t		mnf_rsvd2[536];
    223  1.1  nonaka 
    224  1.1  nonaka 	uint16_t	mnf_lat[VMBUS_MONTRIGS_MAX][VMBUS_MONTRIG_LEN];
    225  1.1  nonaka 	uint8_t		mnf_rsvd3[256];
    226  1.1  nonaka 
    227  1.1  nonaka 	struct hyperv_mon_param
    228  1.1  nonaka 			mnf_param[VMBUS_MONTRIGS_MAX][VMBUS_MONTRIG_LEN];
    229  1.1  nonaka 	uint8_t		mnf_rsvd4[1984];
    230  1.1  nonaka } __packed;
    231  1.1  nonaka 
    232  1.1  nonaka /*
    233  1.1  nonaka  * Buffer ring
    234  1.1  nonaka  */
    235  1.1  nonaka struct vmbus_bufring {
    236  1.1  nonaka 	/*
    237  1.1  nonaka 	 * If br_windex == br_rindex, this bufring is empty; this
    238  1.1  nonaka 	 * means we can _not_ write data to the bufring, if the
    239  1.1  nonaka 	 * write is going to make br_windex same as br_rindex.
    240  1.1  nonaka 	 */
    241  1.1  nonaka 	volatile uint32_t	br_windex;
    242  1.1  nonaka 	volatile uint32_t	br_rindex;
    243  1.1  nonaka 
    244  1.1  nonaka 	/*
    245  1.1  nonaka 	 * Interrupt mask {0,1}
    246  1.1  nonaka 	 *
    247  1.1  nonaka 	 * For TX bufring, host set this to 1, when it is processing
    248  1.1  nonaka 	 * the TX bufring, so that we can safely skip the TX event
    249  1.1  nonaka 	 * notification to host.
    250  1.1  nonaka 	 *
    251  1.1  nonaka 	 * For RX bufring, once this is set to 1 by us, host will not
    252  1.1  nonaka 	 * further dispatch interrupts to us, even if there are data
    253  1.1  nonaka 	 * pending on the RX bufring.  This effectively disables the
    254  1.1  nonaka 	 * interrupt of the channel to which this RX bufring is attached.
    255  1.1  nonaka 	 */
    256  1.1  nonaka 	volatile uint32_t	br_imask;
    257  1.1  nonaka 
    258  1.1  nonaka 	uint8_t			br_rsvd[4084];
    259  1.1  nonaka 	uint8_t			br_data[0];
    260  1.1  nonaka } __packed;
    261  1.2  nonaka __CTASSERT(sizeof(struct vmbus_bufring) == PAGE_SIZE);
    262  1.1  nonaka 
    263  1.1  nonaka /*
    264  1.1  nonaka  * Channel
    265  1.1  nonaka  */
    266  1.1  nonaka 
    267  1.1  nonaka #define VMBUS_CHAN_MAX_COMPAT	256
    268  1.1  nonaka #define VMBUS_CHAN_MAX		(VMBUS_EVTFLAG_LEN * VMBUS_EVTFLAGS_MAX)
    269  1.1  nonaka 
    270  1.1  nonaka /*
    271  1.1  nonaka  * Channel packets
    272  1.1  nonaka  */
    273  1.1  nonaka 
    274  1.1  nonaka #define VMBUS_CHANPKT_SIZE_ALIGN	(1 << VMBUS_CHANPKT_SIZE_SHIFT)
    275  1.1  nonaka 
    276  1.1  nonaka #define VMBUS_CHANPKT_SETLEN(pktlen, len)		\
    277  1.1  nonaka do {							\
    278  1.1  nonaka 	(pktlen) = (len) >> VMBUS_CHANPKT_SIZE_SHIFT;	\
    279  1.1  nonaka } while (0)
    280  1.1  nonaka 
    281  1.1  nonaka struct vmbus_chanpkt {
    282  1.1  nonaka 	struct vmbus_chanpkt_hdr cp_hdr;
    283  1.1  nonaka } __packed;
    284  1.1  nonaka 
    285  1.1  nonaka struct vmbus_chanpkt_sglist {
    286  1.1  nonaka 	struct vmbus_chanpkt_hdr cp_hdr;
    287  1.1  nonaka 	uint32_t	cp_rsvd;
    288  1.1  nonaka 	uint32_t	cp_gpa_cnt;
    289  1.1  nonaka 	struct vmbus_gpa cp_gpa[0];
    290  1.1  nonaka } __packed;
    291  1.1  nonaka 
    292  1.1  nonaka struct vmbus_chanpkt_prplist {
    293  1.1  nonaka 	struct vmbus_chanpkt_hdr cp_hdr;
    294  1.1  nonaka 	uint32_t	cp_rsvd;
    295  1.1  nonaka 	uint32_t	cp_range_cnt;
    296  1.1  nonaka 	struct vmbus_gpa_range cp_range[0];
    297  1.1  nonaka } __packed;
    298  1.1  nonaka 
    299  1.1  nonaka /*
    300  1.1  nonaka  * Channel messages
    301  1.1  nonaka  * - Embedded in vmbus_message.msg_data, e.g. response and notification.
    302  1.1  nonaka  * - Embedded in hyperv_hypercall_postmsg_in.hc_data, e.g. request.
    303  1.1  nonaka  */
    304  1.1  nonaka 
    305  1.1  nonaka #define VMBUS_CHANMSG_CHOFFER			1	/* NOTE */
    306  1.1  nonaka #define VMBUS_CHANMSG_CHRESCIND			2	/* NOTE */
    307  1.1  nonaka #define VMBUS_CHANMSG_CHREQUEST			3	/* REQ */
    308  1.1  nonaka #define VMBUS_CHANMSG_CHOFFER_DONE		4	/* NOTE */
    309  1.1  nonaka #define VMBUS_CHANMSG_CHOPEN			5	/* REQ */
    310  1.1  nonaka #define VMBUS_CHANMSG_CHOPEN_RESP		6	/* RESP */
    311  1.1  nonaka #define VMBUS_CHANMSG_CHCLOSE			7	/* REQ */
    312  1.1  nonaka #define VMBUS_CHANMSG_GPADL_CONN		8	/* REQ */
    313  1.1  nonaka #define VMBUS_CHANMSG_GPADL_SUBCONN		9	/* REQ */
    314  1.1  nonaka #define VMBUS_CHANMSG_GPADL_CONNRESP		10	/* RESP */
    315  1.1  nonaka #define VMBUS_CHANMSG_GPADL_DISCONN		11	/* REQ */
    316  1.1  nonaka #define VMBUS_CHANMSG_GPADL_DISCONNRESP		12	/* RESP */
    317  1.1  nonaka #define VMBUS_CHANMSG_CHFREE			13	/* REQ */
    318  1.1  nonaka #define VMBUS_CHANMSG_CONNECT			14	/* REQ */
    319  1.1  nonaka #define VMBUS_CHANMSG_CONNECT_RESP		15	/* RESP */
    320  1.1  nonaka #define VMBUS_CHANMSG_DISCONNECT		16	/* REQ */
    321  1.1  nonaka #define VMBUS_CHANMSG_COUNT			17
    322  1.1  nonaka #define VMBUS_CHANMSG_MAX			22
    323  1.1  nonaka 
    324  1.1  nonaka struct vmbus_chanmsg_hdr {
    325  1.1  nonaka 	uint32_t	chm_type;	/* VMBUS_CHANMSG_* */
    326  1.1  nonaka 	uint32_t	chm_rsvd;
    327  1.1  nonaka } __packed;
    328  1.1  nonaka 
    329  1.1  nonaka /* VMBUS_CHANMSG_CONNECT */
    330  1.1  nonaka struct vmbus_chanmsg_connect {
    331  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    332  1.1  nonaka 	uint32_t	chm_ver;
    333  1.1  nonaka 	uint32_t	chm_rsvd;
    334  1.1  nonaka 	uint64_t	chm_evtflags;
    335  1.1  nonaka 	uint64_t	chm_mnf1;
    336  1.1  nonaka 	uint64_t	chm_mnf2;
    337  1.1  nonaka } __packed;
    338  1.1  nonaka 
    339  1.1  nonaka /* VMBUS_CHANMSG_CONNECT_RESP */
    340  1.1  nonaka struct vmbus_chanmsg_connect_resp {
    341  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    342  1.1  nonaka 	uint8_t		chm_done;
    343  1.1  nonaka } __packed;
    344  1.1  nonaka 
    345  1.1  nonaka /* VMBUS_CHANMSG_CHREQUEST */
    346  1.1  nonaka struct vmbus_chanmsg_chrequest {
    347  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    348  1.1  nonaka } __packed;
    349  1.1  nonaka 
    350  1.1  nonaka /* VMBUS_CHANMSG_DISCONNECT */
    351  1.1  nonaka struct vmbus_chanmsg_disconnect {
    352  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    353  1.1  nonaka } __packed;
    354  1.1  nonaka 
    355  1.1  nonaka /* VMBUS_CHANMSG_CHOPEN */
    356  1.1  nonaka struct vmbus_chanmsg_chopen {
    357  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    358  1.1  nonaka 	uint32_t	chm_chanid;
    359  1.1  nonaka 	uint32_t	chm_openid;
    360  1.1  nonaka 	uint32_t	chm_gpadl;
    361  1.1  nonaka 	uint32_t	chm_vcpuid;
    362  1.1  nonaka 	uint32_t	chm_txbr_pgcnt;
    363  1.1  nonaka #define VMBUS_CHANMSG_CHOPEN_UDATA_SIZE	120
    364  1.1  nonaka 	uint8_t		chm_udata[VMBUS_CHANMSG_CHOPEN_UDATA_SIZE];
    365  1.1  nonaka } __packed;
    366  1.1  nonaka 
    367  1.1  nonaka /* VMBUS_CHANMSG_CHOPEN_RESP */
    368  1.1  nonaka struct vmbus_chanmsg_chopen_resp {
    369  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    370  1.1  nonaka 	uint32_t	chm_chanid;
    371  1.1  nonaka 	uint32_t	chm_openid;
    372  1.1  nonaka 	uint32_t	chm_status;
    373  1.1  nonaka } __packed;
    374  1.1  nonaka 
    375  1.1  nonaka /* VMBUS_CHANMSG_GPADL_CONN */
    376  1.1  nonaka struct vmbus_chanmsg_gpadl_conn {
    377  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    378  1.1  nonaka 	uint32_t	chm_chanid;
    379  1.1  nonaka 	uint32_t	chm_gpadl;
    380  1.1  nonaka 	uint16_t	chm_range_len;
    381  1.1  nonaka 	uint16_t	chm_range_cnt;
    382  1.1  nonaka 	struct vmbus_gpa_range chm_range;
    383  1.1  nonaka } __packed;
    384  1.1  nonaka 
    385  1.1  nonaka #define VMBUS_CHANMSG_GPADL_CONN_PGMAX		26
    386  1.1  nonaka 
    387  1.1  nonaka /* VMBUS_CHANMSG_GPADL_SUBCONN */
    388  1.1  nonaka struct vmbus_chanmsg_gpadl_subconn {
    389  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    390  1.1  nonaka 	uint32_t	chm_msgno;
    391  1.1  nonaka 	uint32_t	chm_gpadl;
    392  1.1  nonaka 	uint64_t	chm_gpa_page[0];
    393  1.1  nonaka } __packed;
    394  1.1  nonaka 
    395  1.1  nonaka #define VMBUS_CHANMSG_GPADL_SUBCONN_PGMAX	28
    396  1.1  nonaka 
    397  1.1  nonaka /* VMBUS_CHANMSG_GPADL_CONNRESP */
    398  1.1  nonaka struct vmbus_chanmsg_gpadl_connresp {
    399  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    400  1.1  nonaka 	uint32_t	chm_chanid;
    401  1.1  nonaka 	uint32_t	chm_gpadl;
    402  1.1  nonaka 	uint32_t	chm_status;
    403  1.1  nonaka } __packed;
    404  1.1  nonaka 
    405  1.1  nonaka /* VMBUS_CHANMSG_CHCLOSE */
    406  1.1  nonaka struct vmbus_chanmsg_chclose {
    407  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    408  1.1  nonaka 	uint32_t	chm_chanid;
    409  1.1  nonaka } __packed;
    410  1.1  nonaka 
    411  1.1  nonaka /* VMBUS_CHANMSG_GPADL_DISCONN */
    412  1.1  nonaka struct vmbus_chanmsg_gpadl_disconn {
    413  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    414  1.1  nonaka 	uint32_t	chm_chanid;
    415  1.1  nonaka 	uint32_t	chm_gpadl;
    416  1.1  nonaka } __packed;
    417  1.1  nonaka 
    418  1.1  nonaka /* VMBUS_CHANMSG_CHFREE */
    419  1.1  nonaka struct vmbus_chanmsg_chfree {
    420  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    421  1.1  nonaka 	uint32_t	chm_chanid;
    422  1.1  nonaka } __packed;
    423  1.1  nonaka 
    424  1.1  nonaka /* VMBUS_CHANMSG_CHRESCIND */
    425  1.1  nonaka struct vmbus_chanmsg_chrescind {
    426  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    427  1.1  nonaka 	uint32_t	chm_chanid;
    428  1.1  nonaka } __packed;
    429  1.1  nonaka 
    430  1.1  nonaka /* VMBUS_CHANMSG_CHOFFER */
    431  1.1  nonaka struct vmbus_chanmsg_choffer {
    432  1.1  nonaka 	struct vmbus_chanmsg_hdr chm_hdr;
    433  1.1  nonaka 	struct hyperv_guid chm_chtype;
    434  1.1  nonaka 	struct hyperv_guid chm_chinst;
    435  1.1  nonaka 	uint64_t	chm_chlat;	/* unit: 100ns */
    436  1.1  nonaka 	uint32_t	chm_chrev;
    437  1.1  nonaka 	uint32_t	chm_svrctx_sz;
    438  1.1  nonaka 	uint16_t	chm_chflags;
    439  1.1  nonaka 	uint16_t	chm_mmio_sz;	/* unit: MB */
    440  1.1  nonaka 	uint8_t		chm_udata[120];
    441  1.1  nonaka 	uint16_t	chm_subidx;
    442  1.1  nonaka 	uint16_t	chm_rsvd;
    443  1.1  nonaka 	uint32_t	chm_chanid;
    444  1.1  nonaka 	uint8_t		chm_montrig;
    445  1.1  nonaka 	uint8_t		chm_flags1;	/* VMBUS_CHOFFER_FLAG1_ */
    446  1.1  nonaka 	uint16_t	chm_flags2;
    447  1.1  nonaka 	uint32_t	chm_connid;
    448  1.1  nonaka } __packed;
    449  1.1  nonaka 
    450  1.1  nonaka #define VMBUS_CHOFFER_FLAG1_HASMNF	0x01
    451  1.1  nonaka 
    452  1.1  nonaka #endif	/* _KERNEL */
    453  1.1  nonaka 
    454  1.1  nonaka #endif	/* _HYPERVREG_H_ */
    455