jcs's openbsd hax
openbsd
at jcs 551 lines 15 kB view raw
1/*- 2 * Copyright (c) 2009-2012,2016 Microsoft Corp. 3 * Copyright (c) 2012 NetApp Inc. 4 * Copyright (c) 2012 Citrix Inc. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice unmodified, this list of conditions, and the following 12 * disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef _DEV_PV_HYPERVREG_H_ 30#define _DEV_PV_HYPERVREG_H_ 31 32struct hv_guid { 33 unsigned char data[16]; 34} __packed; 35 36#define VMBUS_CONNID_MESSAGE 1 37#define VMBUS_CONNID_EVENT 2 38#define VMBUS_SINT_MESSAGE 2 39 40#define VMBUS_GPADL_START 0xffff /* 0x10000 effectively */ 41 42/* 43 * $FreeBSD: head/sys/dev/hyperv/vmbus/hyperv_reg.h 303283 2016-07-25 03:12:40Z sephe $ 44 */ 45 46/* 47 * Hyper-V Synthetic MSRs 48 */ 49 50#define MSR_HV_GUEST_OS_ID 0x40000000 51#define MSR_HV_GUESTID_BUILD_MASK 0xffffULL 52#define MSR_HV_GUESTID_VERSION_MASK 0x0000ffffffff0000ULL 53#define MSR_HV_GUESTID_VERSION_SHIFT 16 54#define MSR_HV_GUESTID_OSID_MASK 0x00ff000000000000ULL 55#define MSR_HV_GUESTID_OSID_SHIFT 48 56#define MSR_HV_GUESTID_OSTYPE_MASK 0x7f00000000000000ULL 57#define MSR_HV_GUESTID_OSTYPE_SHIFT 56 58#define MSR_HV_GUESTID_OPENSRC 0x8000000000000000ULL 59#define MSR_HV_GUESTID_OSID_OPENBSD 0x0001000000000000ULL 60#define MSR_HV_GUESTID_OSTYPE_LINUX \ 61 ((0x01ULL << MSR_HV_GUESTID_OSTYPE_SHIFT) | MSR_HV_GUESTID_OPENSRC) 62#define MSR_HV_GUESTID_OSTYPE_FREEBSD \ 63 ((0x02ULL << MSR_HV_GUESTID_OSTYPE_SHIFT) | MSR_HV_GUESTID_OPENSRC) 64#define MSR_HV_GUESTID_OSTYPE_OPENBSD \ 65 ((0x02ULL << MSR_HV_GUESTID_OSTYPE_SHIFT) | MSR_HV_GUESTID_OPENSRC | \ 66 MSR_HV_GUESTID_OSID_OPENBSD) 67 68#define MSR_HV_HYPERCALL 0x40000001 69#define MSR_HV_HYPERCALL_ENABLE 0x0001ULL 70#define MSR_HV_HYPERCALL_RSVD_MASK 0x0ffeULL 71#define MSR_HV_HYPERCALL_PGSHIFT 12 72 73#define MSR_HV_VP_INDEX 0x40000002 74 75#define MSR_HV_TIME_REF_COUNT 0x40000020 76 77#define MSR_HV_SCONTROL 0x40000080 78#define MSR_HV_SCTRL_ENABLE 0x0001ULL 79#define MSR_HV_SCTRL_RSVD_MASK 0xfffffffffffffffeULL 80 81#define MSR_HV_SIEFP 0x40000082 82#define MSR_HV_SIEFP_ENABLE 0x0001ULL 83#define MSR_HV_SIEFP_RSVD_MASK 0x0ffeULL 84#define MSR_HV_SIEFP_PGSHIFT 12 85 86#define MSR_HV_SIMP 0x40000083 87#define MSR_HV_SIMP_ENABLE 0x0001ULL 88#define MSR_HV_SIMP_RSVD_MASK 0x0ffeULL 89#define MSR_HV_SIMP_PGSHIFT 12 90 91#define MSR_HV_EOM 0x40000084 92 93#define MSR_HV_SINT0 0x40000090 94#define MSR_HV_SINT_VECTOR_MASK 0x00ffULL 95#define MSR_HV_SINT_RSVD1_MASK 0xff00ULL 96#define MSR_HV_SINT_MASKED 0x00010000ULL 97#define MSR_HV_SINT_AUTOEOI 0x00020000ULL 98#define MSR_HV_SINT_RSVD2_MASK 0xfffffffffffc0000ULL 99#define MSR_HV_SINT_RSVD_MASK (MSR_HV_SINT_RSVD1_MASK | \ 100 MSR_HV_SINT_RSVD2_MASK) 101 102#define MSR_HV_STIMER0_CONFIG 0x400000b0 103#define MSR_HV_STIMER_CFG_ENABLE 0x0001ULL 104#define MSR_HV_STIMER_CFG_PERIODIC 0x0002ULL 105#define MSR_HV_STIMER_CFG_LAZY 0x0004ULL 106#define MSR_HV_STIMER_CFG_AUTOEN 0x0008ULL 107#define MSR_HV_STIMER_CFG_SINT_MASK 0x000f0000ULL 108#define MSR_HV_STIMER_CFG_SINT_SHIFT 16 109 110#define MSR_HV_STIMER0_COUNT 0x400000b1 111 112/* 113 * CPUID leaves 114 */ 115 116#define CPUID_LEAF_HV_MAXLEAF 0x40000000 117 118#define CPUID_LEAF_HV_INTERFACE 0x40000001 119#define CPUID_HV_IFACE_HYPERV 0x31237648 /* HV#1 */ 120 121#define CPUID_LEAF_HV_IDENTITY 0x40000002 122 123#define CPUID_LEAF_HV_FEATURES 0x40000003 124/* EAX: features */ 125#define CPUID_HV_MSR_TIME_REFCNT 0x0002 /* MSR_HV_TIME_REF_COUNT */ 126#define CPUID_HV_MSR_SYNIC 0x0004 /* MSRs for SynIC */ 127#define CPUID_HV_MSR_SYNTIMER 0x0008 /* MSRs for SynTimer */ 128#define CPUID_HV_MSR_APIC 0x0010 /* MSR_HV_{EOI,ICR,TPR} */ 129#define CPUID_HV_MSR_HYPERCALL 0x0020 /* MSR_HV_GUEST_OS_ID 130 * MSR_HV_HYPERCALL */ 131#define CPUID_HV_MSR_VP_INDEX 0x0040 /* MSR_HV_VP_INDEX */ 132#define CPUID_HV_MSR_GUEST_IDLE 0x0400 /* MSR_HV_GUEST_IDLE */ 133/* ECX: power management features */ 134#define CPUPM_HV_CSTATE_MASK 0x000f /* deepest C-state */ 135#define CPUPM_HV_C3_HPET 0x0010 /* C3 requires HPET */ 136#define CPUPM_HV_CSTATE(f) ((f) & CPUPM_HV_CSTATE_MASK) 137/* EDX: features3 */ 138#define CPUID3_HV_MWAIT 0x0001 /* MWAIT */ 139#define CPUID3_HV_XMM_HYPERCALL 0x0010 /* Hypercall input through 140 * XMM regs */ 141#define CPUID3_HV_GUEST_IDLE 0x0020 /* guest idle */ 142#define CPUID3_HV_NUMA 0x0080 /* NUMA distance query */ 143#define CPUID3_HV_TIME_FREQ 0x0100 /* timer frequency query 144 * (TSC, LAPIC) */ 145#define CPUID3_HV_MSR_CRASH 0x0400 /* MSRs for guest crash */ 146 147#define CPUID_LEAF_HV_RECOMMENDS 0x40000004 148#define CPUID_LEAF_HV_LIMITS 0x40000005 149#define CPUID_LEAF_HV_HWFEATURES 0x40000006 150 151/* 152 * Hyper-V Monitor Notification Facility 153 */ 154struct hv_mon_param { 155 uint32_t mp_connid; 156 uint16_t mp_evtflag_ofs; 157 uint16_t mp_rsvd; 158} __packed; 159 160/* 161 * Hyper-V message types 162 */ 163#define VMBUS_MSGTYPE_NONE 0 164#define VMBUS_MSGTYPE_CHANNEL 1 165#define VMBUS_MSGTYPE_TIMER_EXPIRED 0x80000010 166 167/* 168 * Hypercall status codes 169 */ 170#define HYPERCALL_STATUS_SUCCESS 0x0000 171 172/* 173 * Hypercall input values 174 */ 175#define HYPERCALL_POST_MESSAGE 0x005c 176#define HYPERCALL_SIGNAL_EVENT 0x005d 177 178/* 179 * Hypercall input parameters 180 */ 181#define HYPERCALL_PARAM_ALIGN 8 182#if 0 183/* 184 * XXX 185 * <<Hypervisor Top Level Functional Specification 4.0b>> requires 186 * input parameters size to be multiple of 8, however, many post 187 * message input parameters do _not_ meet this requirement. 188 */ 189#define HYPERCALL_PARAM_SIZE_ALIGN 8 190#endif 191 192/* 193 * HYPERCALL_POST_MESSAGE 194 */ 195#define HYPERCALL_POSTMSGIN_DSIZE_MAX 240 196#define HYPERCALL_POSTMSGIN_SIZE 256 197 198struct hypercall_postmsg_in { 199 uint32_t hc_connid; 200 uint32_t hc_rsvd; 201 uint32_t hc_msgtype; /* VMBUS_MSGTYPE_ */ 202 uint32_t hc_dsize; 203 uint8_t hc_data[HYPERCALL_POSTMSGIN_DSIZE_MAX]; 204} __packed; 205 206/* 207 * $FreeBSD: head/sys/dev/hyperv/include/vmbus.h 306389 2016-09-28 04:25:25Z sephe $ 208 */ 209 210/* 211 * VMBUS version is 32 bit, upper 16 bit for major_number and lower 212 * 16 bit for minor_number. 213 * 214 * 0.13 -- Windows Server 2008 215 * 1.1 -- Windows 7 216 * 2.4 -- Windows 8 217 * 3.0 -- Windows 8.1 218 * 4.0 -- Windows 10 219 */ 220#define VMBUS_VERSION_WS2008 ((0 << 16) | (13)) 221#define VMBUS_VERSION_WIN7 ((1 << 16) | (1)) 222#define VMBUS_VERSION_WIN8 ((2 << 16) | (4)) 223#define VMBUS_VERSION_WIN8_1 ((3 << 16) | (0)) 224#define VMBUS_VERSION_WIN10 ((4 << 16) | (0)) 225 226#define VMBUS_VERSION_MAJOR(ver) (((uint32_t)(ver)) >> 16) 227#define VMBUS_VERSION_MINOR(ver) (((uint32_t)(ver)) & 0xffff) 228 229/* 230 * GPA stuffs. 231 */ 232struct vmbus_gpa_range { 233 uint32_t gpa_len; 234 uint32_t gpa_ofs; 235 uint64_t gpa_page[0]; 236} __packed; 237 238/* This is actually vmbus_gpa_range.gpa_page[1] */ 239struct vmbus_gpa { 240 uint32_t gpa_len; 241 uint32_t gpa_ofs; 242 uint64_t gpa_page; 243} __packed; 244 245#define VMBUS_CHANPKT_SIZE_SHIFT 3 246 247#define VMBUS_CHANPKT_GETLEN(pktlen) \ 248 (((int)(pktlen)) << VMBUS_CHANPKT_SIZE_SHIFT) 249 250struct vmbus_chanpkt_hdr { 251 uint16_t cph_type; /* VMBUS_CHANPKT_TYPE_ */ 252 uint16_t cph_hlen; /* header len, in 8 bytes */ 253 uint16_t cph_tlen; /* total len, in 8 bytes */ 254 uint16_t cph_flags; /* VMBUS_CHANPKT_FLAG_ */ 255 uint64_t cph_tid; 256} __packed; 257 258#define VMBUS_CHANPKT_TYPE_INBAND 0x0006 259#define VMBUS_CHANPKT_TYPE_RXBUF 0x0007 260#define VMBUS_CHANPKT_TYPE_GPA 0x0009 261#define VMBUS_CHANPKT_TYPE_COMP 0x000b 262 263#define VMBUS_CHANPKT_FLAG_RC 0x0001 /* report completion */ 264 265#define VMBUS_CHANPKT_CONST_DATA(pkt) \ 266 ((const void *)((const uint8_t *)(pkt) + \ 267 VMBUS_CHANPKT_GETLEN((pkt)->cph_hlen))) 268 269/* 270 * $FreeBSD: head/sys/dev/hyperv/vmbus/vmbus_reg.h 305405 2016-09-05 03:21:31Z sephe $ 271 */ 272 273/* 274 * Hyper-V SynIC message format. 275 */ 276 277#define VMBUS_MSG_DSIZE_MAX 240 278#define VMBUS_MSG_SIZE 256 279 280struct vmbus_message { 281 uint32_t msg_type; /* VMBUS_MSGTYPE_ */ 282 uint8_t msg_dsize; /* data size */ 283 uint8_t msg_flags; /* VMBUS_MSGFLAG_ */ 284 uint16_t msg_rsvd; 285 uint64_t msg_id; 286 uint8_t msg_data[VMBUS_MSG_DSIZE_MAX]; 287} __packed; 288 289#define VMBUS_MSGFLAG_PENDING 0x01 290 291/* 292 * Hyper-V SynIC event flags 293 */ 294 295#define VMBUS_EVTFLAGS_SIZE 256 296#define VMBUS_EVTFLAGS_MAX ((VMBUS_EVTFLAGS_SIZE / LONG_BIT) * 8) 297#define VMBUS_EVTFLAG_LEN LONG_BIT 298#define VMBUS_EVTFLAG_MASK (LONG_BIT - 1) 299 300struct vmbus_evtflags { 301 ulong evt_flags[VMBUS_EVTFLAGS_MAX]; 302} __packed; 303 304/* 305 * Hyper-V Monitor Notification Facility 306 */ 307 308struct vmbus_mon_trig { 309 uint32_t mt_pending; 310 uint32_t mt_armed; 311} __packed; 312 313#define VMBUS_MONTRIGS_MAX 4 314#define VMBUS_MONTRIG_LEN 32 315 316struct vmbus_mnf { 317 uint32_t mnf_state; 318 uint32_t mnf_rsvd1; 319 320 struct vmbus_mon_trig 321 mnf_trigs[VMBUS_MONTRIGS_MAX]; 322 uint8_t mnf_rsvd2[536]; 323 324 uint16_t mnf_lat[VMBUS_MONTRIGS_MAX][VMBUS_MONTRIG_LEN]; 325 uint8_t mnf_rsvd3[256]; 326 327 struct hv_mon_param 328 mnf_param[VMBUS_MONTRIGS_MAX][VMBUS_MONTRIG_LEN]; 329 uint8_t mnf_rsvd4[1984]; 330} __packed; 331 332/* 333 * Buffer ring 334 */ 335struct vmbus_bufring { 336 /* 337 * If br_windex == br_rindex, this bufring is empty; this 338 * means we can _not_ write data to the bufring, if the 339 * write is going to make br_windex same as br_rindex. 340 */ 341 volatile uint32_t br_windex; 342 volatile uint32_t br_rindex; 343 344 /* 345 * Interrupt mask {0,1} 346 * 347 * For TX bufring, host set this to 1, when it is processing 348 * the TX bufring, so that we can safely skip the TX event 349 * notification to host. 350 * 351 * For RX bufring, once this is set to 1 by us, host will not 352 * further dispatch interrupts to us, even if there are data 353 * pending on the RX bufring. This effectively disables the 354 * interrupt of the channel to which this RX bufring is attached. 355 */ 356 volatile uint32_t br_imask; 357 358 uint8_t br_rsvd[4084]; 359 uint8_t br_data[0]; 360} __packed; 361 362/* 363 * Channel 364 */ 365 366#define VMBUS_CHAN_MAX_COMPAT 256 367#define VMBUS_CHAN_MAX (VMBUS_EVTFLAG_LEN * VMBUS_EVTFLAGS_MAX) 368 369/* 370 * Channel packets 371 */ 372 373#define VMBUS_CHANPKT_SIZE_ALIGN (1 << VMBUS_CHANPKT_SIZE_SHIFT) 374 375#define VMBUS_CHANPKT_SETLEN(pktlen, len) \ 376do { \ 377 (pktlen) = (len) >> VMBUS_CHANPKT_SIZE_SHIFT; \ 378} while (0) 379 380struct vmbus_chanpkt { 381 struct vmbus_chanpkt_hdr cp_hdr; 382} __packed; 383 384struct vmbus_chanpkt_sglist { 385 struct vmbus_chanpkt_hdr cp_hdr; 386 uint32_t cp_rsvd; 387 uint32_t cp_gpa_cnt; 388 struct vmbus_gpa cp_gpa[0]; 389} __packed; 390 391struct vmbus_chanpkt_prplist { 392 struct vmbus_chanpkt_hdr cp_hdr; 393 uint32_t cp_rsvd; 394 uint32_t cp_range_cnt; 395 struct vmbus_gpa_range cp_range[0]; 396} __packed; 397 398/* 399 * Channel messages 400 * - Embedded in vmbus_message.msg_data, e.g. response and notification. 401 * - Embedded in hypercall_postmsg_in.hc_data, e.g. request. 402 */ 403 404#define VMBUS_CHANMSG_CHOFFER 1 /* NOTE */ 405#define VMBUS_CHANMSG_CHRESCIND 2 /* NOTE */ 406#define VMBUS_CHANMSG_CHREQUEST 3 /* REQ */ 407#define VMBUS_CHANMSG_CHOFFER_DONE 4 /* NOTE */ 408#define VMBUS_CHANMSG_CHOPEN 5 /* REQ */ 409#define VMBUS_CHANMSG_CHOPEN_RESP 6 /* RESP */ 410#define VMBUS_CHANMSG_CHCLOSE 7 /* REQ */ 411#define VMBUS_CHANMSG_GPADL_CONN 8 /* REQ */ 412#define VMBUS_CHANMSG_GPADL_SUBCONN 9 /* REQ */ 413#define VMBUS_CHANMSG_GPADL_CONNRESP 10 /* RESP */ 414#define VMBUS_CHANMSG_GPADL_DISCONN 11 /* REQ */ 415#define VMBUS_CHANMSG_GPADL_DISCONNRESP 12 /* RESP */ 416#define VMBUS_CHANMSG_CHFREE 13 /* REQ */ 417#define VMBUS_CHANMSG_CONNECT 14 /* REQ */ 418#define VMBUS_CHANMSG_CONNECT_RESP 15 /* RESP */ 419#define VMBUS_CHANMSG_DISCONNECT 16 /* REQ */ 420#define VMBUS_CHANMSG_COUNT 17 421#define VMBUS_CHANMSG_MAX 22 422 423struct vmbus_chanmsg_hdr { 424 uint32_t chm_type; /* VMBUS_CHANMSG_* */ 425 uint32_t chm_rsvd; 426} __packed; 427 428/* VMBUS_CHANMSG_CONNECT */ 429struct vmbus_chanmsg_connect { 430 struct vmbus_chanmsg_hdr chm_hdr; 431 uint32_t chm_ver; 432 uint32_t chm_rsvd; 433 uint64_t chm_evtflags; 434 uint64_t chm_mnf1; 435 uint64_t chm_mnf2; 436} __packed; 437 438/* VMBUS_CHANMSG_CONNECT_RESP */ 439struct vmbus_chanmsg_connect_resp { 440 struct vmbus_chanmsg_hdr chm_hdr; 441 uint8_t chm_done; 442} __packed; 443 444/* VMBUS_CHANMSG_CHREQUEST */ 445struct vmbus_chanmsg_chrequest { 446 struct vmbus_chanmsg_hdr chm_hdr; 447} __packed; 448 449/* VMBUS_CHANMSG_DISCONNECT */ 450struct vmbus_chanmsg_disconnect { 451 struct vmbus_chanmsg_hdr chm_hdr; 452} __packed; 453 454/* VMBUS_CHANMSG_CHOPEN */ 455struct vmbus_chanmsg_chopen { 456 struct vmbus_chanmsg_hdr chm_hdr; 457 uint32_t chm_chanid; 458 uint32_t chm_openid; 459 uint32_t chm_gpadl; 460 uint32_t chm_vcpuid; 461 uint32_t chm_txbr_pgcnt; 462#define VMBUS_CHANMSG_CHOPEN_UDATA_SIZE 120 463 uint8_t chm_udata[VMBUS_CHANMSG_CHOPEN_UDATA_SIZE]; 464} __packed; 465 466/* VMBUS_CHANMSG_CHOPEN_RESP */ 467struct vmbus_chanmsg_chopen_resp { 468 struct vmbus_chanmsg_hdr chm_hdr; 469 uint32_t chm_chanid; 470 uint32_t chm_openid; 471 uint32_t chm_status; 472} __packed; 473 474/* VMBUS_CHANMSG_GPADL_CONN */ 475struct vmbus_chanmsg_gpadl_conn { 476 struct vmbus_chanmsg_hdr chm_hdr; 477 uint32_t chm_chanid; 478 uint32_t chm_gpadl; 479 uint16_t chm_range_len; 480 uint16_t chm_range_cnt; 481 struct vmbus_gpa_range chm_range; 482} __packed; 483 484#define VMBUS_CHANMSG_GPADL_CONN_PGMAX 26 485 486/* VMBUS_CHANMSG_GPADL_SUBCONN */ 487struct vmbus_chanmsg_gpadl_subconn { 488 struct vmbus_chanmsg_hdr chm_hdr; 489 uint32_t chm_msgno; 490 uint32_t chm_gpadl; 491 uint64_t chm_gpa_page[0]; 492} __packed; 493 494#define VMBUS_CHANMSG_GPADL_SUBCONN_PGMAX 28 495 496/* VMBUS_CHANMSG_GPADL_CONNRESP */ 497struct vmbus_chanmsg_gpadl_connresp { 498 struct vmbus_chanmsg_hdr chm_hdr; 499 uint32_t chm_chanid; 500 uint32_t chm_gpadl; 501 uint32_t chm_status; 502} __packed; 503 504/* VMBUS_CHANMSG_CHCLOSE */ 505struct vmbus_chanmsg_chclose { 506 struct vmbus_chanmsg_hdr chm_hdr; 507 uint32_t chm_chanid; 508} __packed; 509 510/* VMBUS_CHANMSG_GPADL_DISCONN */ 511struct vmbus_chanmsg_gpadl_disconn { 512 struct vmbus_chanmsg_hdr chm_hdr; 513 uint32_t chm_chanid; 514 uint32_t chm_gpadl; 515} __packed; 516 517/* VMBUS_CHANMSG_CHFREE */ 518struct vmbus_chanmsg_chfree { 519 struct vmbus_chanmsg_hdr chm_hdr; 520 uint32_t chm_chanid; 521} __packed; 522 523/* VMBUS_CHANMSG_CHRESCIND */ 524struct vmbus_chanmsg_chrescind { 525 struct vmbus_chanmsg_hdr chm_hdr; 526 uint32_t chm_chanid; 527} __packed; 528 529/* VMBUS_CHANMSG_CHOFFER */ 530struct vmbus_chanmsg_choffer { 531 struct vmbus_chanmsg_hdr chm_hdr; 532 struct hv_guid chm_chtype; 533 struct hv_guid chm_chinst; 534 uint64_t chm_chlat; /* unit: 100ns */ 535 uint32_t chm_chrev; 536 uint32_t chm_svrctx_sz; 537 uint16_t chm_chflags; 538 uint16_t chm_mmio_sz; /* unit: MB */ 539 uint8_t chm_udata[120]; 540 uint16_t chm_subidx; 541 uint16_t chm_rsvd; 542 uint32_t chm_chanid; 543 uint8_t chm_montrig; 544 uint8_t chm_flags1; /* VMBUS_CHOFFER_FLAG1_ */ 545 uint16_t chm_flags2; 546 uint32_t chm_connid; 547} __packed; 548 549#define VMBUS_CHOFFER_FLAG1_HASMNF 0x01 550 551#endif /* _DEV_PV_HYPERVREG_H_ */