blob: 17e2187d5c07bf2473f0979d046de5863e727725 [file] [log] [blame]
Hank Janssen565e7dc2009-07-13 15:15:47 -07001/*
2 *
3 * Copyright (c) 2009, Microsoft Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16 * Place - Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * Authors:
19 * Haiyang Zhang <haiyangz@microsoft.com>
20 * Hank Janssen <hjanssen@microsoft.com>
21 *
22 */
23
24#pragma once
25
Bill Pemberton454f18a2009-07-27 16:47:24 -040026
27/* Define the virtual APIC registers */
28
Hank Janssen565e7dc2009-07-13 15:15:47 -070029#define HV_X64_MSR_EOI (0x40000070)
30#define HV_X64_MSR_ICR (0x40000071)
31#define HV_X64_MSR_TPR (0x40000072)
32#define HV_X64_MSR_APIC_ASSIST_PAGE (0x40000073)
33
Bill Pemberton454f18a2009-07-27 16:47:24 -040034
35/* Define version of the synthetic interrupt controller. */
36
Hank Janssen565e7dc2009-07-13 15:15:47 -070037
38#define HV_SYNIC_VERSION (1)
39
40
Bill Pemberton454f18a2009-07-27 16:47:24 -040041
42/* Define synthetic interrupt controller model specific registers. */
43
Hank Janssen565e7dc2009-07-13 15:15:47 -070044
45#define HV_X64_MSR_SCONTROL (0x40000080)
46#define HV_X64_MSR_SVERSION (0x40000081)
47#define HV_X64_MSR_SIEFP (0x40000082)
48#define HV_X64_MSR_SIMP (0x40000083)
49#define HV_X64_MSR_EOM (0x40000084)
50#define HV_X64_MSR_SINT0 (0x40000090)
51#define HV_X64_MSR_SINT1 (0x40000091)
52#define HV_X64_MSR_SINT2 (0x40000092)
53#define HV_X64_MSR_SINT3 (0x40000093)
54#define HV_X64_MSR_SINT4 (0x40000094)
55#define HV_X64_MSR_SINT5 (0x40000095)
56#define HV_X64_MSR_SINT6 (0x40000096)
57#define HV_X64_MSR_SINT7 (0x40000097)
58#define HV_X64_MSR_SINT8 (0x40000098)
59#define HV_X64_MSR_SINT9 (0x40000099)
60#define HV_X64_MSR_SINT10 (0x4000009A)
61#define HV_X64_MSR_SINT11 (0x4000009B)
62#define HV_X64_MSR_SINT12 (0x4000009C)
63#define HV_X64_MSR_SINT13 (0x4000009D)
64#define HV_X64_MSR_SINT14 (0x4000009E)
65#define HV_X64_MSR_SINT15 (0x4000009F)
66
Bill Pemberton454f18a2009-07-27 16:47:24 -040067
68/* Define the expected SynIC version. */
69
Hank Janssen565e7dc2009-07-13 15:15:47 -070070#define HV_SYNIC_VERSION_1 (0x1)
71
Bill Pemberton454f18a2009-07-27 16:47:24 -040072
73/* Define synthetic interrupt controller message constants. */
74
Hank Janssen565e7dc2009-07-13 15:15:47 -070075
76#define HV_MESSAGE_SIZE (256)
77#define HV_MESSAGE_PAYLOAD_BYTE_COUNT (240)
78#define HV_MESSAGE_PAYLOAD_QWORD_COUNT (30)
79#define HV_ANY_VP (0xFFFFFFFF)
80
Bill Pemberton454f18a2009-07-27 16:47:24 -040081
82/* Define synthetic interrupt controller flag constants. */
83
Hank Janssen565e7dc2009-07-13 15:15:47 -070084
85#define HV_EVENT_FLAGS_COUNT (256 * 8)
86#define HV_EVENT_FLAGS_BYTE_COUNT (256)
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -070087#define HV_EVENT_FLAGS_DWORD_COUNT (256 / sizeof(u32))
Hank Janssen565e7dc2009-07-13 15:15:47 -070088
Bill Pemberton454f18a2009-07-27 16:47:24 -040089
90/* Define hypervisor message types. */
91
Hank Janssen565e7dc2009-07-13 15:15:47 -070092typedef enum _HV_MESSAGE_TYPE
93{
94 HvMessageTypeNone = 0x00000000,
95
Bill Pemberton454f18a2009-07-27 16:47:24 -040096
97 /* Memory access messages. */
98
Hank Janssen565e7dc2009-07-13 15:15:47 -070099 HvMessageTypeUnmappedGpa = 0x80000000,
100 HvMessageTypeGpaIntercept = 0x80000001,
101
Bill Pemberton454f18a2009-07-27 16:47:24 -0400102
103 /* Timer notification messages. */
104
Hank Janssen565e7dc2009-07-13 15:15:47 -0700105 HvMessageTimerExpired = 0x80000010,
106
Bill Pemberton454f18a2009-07-27 16:47:24 -0400107
108 /* Error messages. */
109
Hank Janssen565e7dc2009-07-13 15:15:47 -0700110 HvMessageTypeInvalidVpRegisterValue = 0x80000020,
111 HvMessageTypeUnrecoverableException = 0x80000021,
112 HvMessageTypeUnsupportedFeature = 0x80000022,
113
Bill Pemberton454f18a2009-07-27 16:47:24 -0400114
115 /* Trace buffer complete messages. */
116
Hank Janssen565e7dc2009-07-13 15:15:47 -0700117 HvMessageTypeEventLogBufferComplete = 0x80000040,
118
Bill Pemberton454f18a2009-07-27 16:47:24 -0400119
120 /* Platform-specific processor intercept messages. */
121
Hank Janssen565e7dc2009-07-13 15:15:47 -0700122 HvMessageTypeX64IoPortIntercept = 0x80010000,
123 HvMessageTypeX64MsrIntercept = 0x80010001,
124 HvMessageTypeX64CpuidIntercept = 0x80010002,
125 HvMessageTypeX64ExceptionIntercept = 0x80010003,
126 HvMessageTypeX64ApicEoi = 0x80010004,
127 HvMessageTypeX64LegacyFpError = 0x80010005
128
129} HV_MESSAGE_TYPE, *PHV_MESSAGE_TYPE;
130
Bill Pemberton454f18a2009-07-27 16:47:24 -0400131
132/* Define the number of synthetic interrupt sources. */
133
Hank Janssen565e7dc2009-07-13 15:15:47 -0700134
135#define HV_SYNIC_SINT_COUNT (16)
136#define HV_SYNIC_STIMER_COUNT (4)
137
Bill Pemberton454f18a2009-07-27 16:47:24 -0400138
139/* Define the synthetic interrupt source index type. */
140
Hank Janssen565e7dc2009-07-13 15:15:47 -0700141
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700142typedef u32 HV_SYNIC_SINT_INDEX, *PHV_SYNIC_SINT_INDEX;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700143
Bill Pemberton454f18a2009-07-27 16:47:24 -0400144
145/* Define partition identifier type. */
146
Hank Janssen565e7dc2009-07-13 15:15:47 -0700147
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700148typedef u64 HV_PARTITION_ID, *PHV_PARTITION_ID;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700149
Bill Pemberton454f18a2009-07-27 16:47:24 -0400150
151/* Define invalid partition identifier. */
152
Hank Janssen565e7dc2009-07-13 15:15:47 -0700153#define HV_PARTITION_ID_INVALID ((HV_PARTITION_ID) 0x0)
154
Bill Pemberton454f18a2009-07-27 16:47:24 -0400155
156/* Define connection identifier type. */
157
Hank Janssen565e7dc2009-07-13 15:15:47 -0700158
159typedef union _HV_CONNECTION_ID
160{
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700161 u32 Asu32;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700162
163 struct
164 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400165 u32 Id:24;
166 u32 Reserved:8;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700167 } u;
168
169} HV_CONNECTION_ID, *PHV_CONNECTION_ID;
170
Bill Pemberton454f18a2009-07-27 16:47:24 -0400171
172/* Define port identifier type. */
173
Hank Janssen565e7dc2009-07-13 15:15:47 -0700174
175typedef union _HV_PORT_ID
176{
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700177 u32 Asu32;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700178
179 struct
180 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400181 u32 Id:24;
182 u32 Reserved:8;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700183 } u ;
184
185} HV_PORT_ID, *PHV_PORT_ID;
186
Bill Pemberton454f18a2009-07-27 16:47:24 -0400187
188/* Define port type. */
189
Hank Janssen565e7dc2009-07-13 15:15:47 -0700190
191typedef enum _HV_PORT_TYPE
192{
193 HvPortTypeMessage = 1,
194 HvPortTypeEvent = 2,
195 HvPortTypeMonitor = 3
196} HV_PORT_TYPE, *PHV_PORT_TYPE;
197
Bill Pemberton454f18a2009-07-27 16:47:24 -0400198
199/* Define port information structure. */
200
Hank Janssen565e7dc2009-07-13 15:15:47 -0700201
202typedef struct _HV_PORT_INFO
203{
204 HV_PORT_TYPE PortType;
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700205 u32 Padding;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700206
207 union
208 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400209 struct
210 {
211 HV_SYNIC_SINT_INDEX TargetSint;
212 HV_VP_INDEX TargetVp;
213 u64 RsvdZ;
214 } MessagePortInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700215
Bill Pemberton454f18a2009-07-27 16:47:24 -0400216 struct
217 {
218 HV_SYNIC_SINT_INDEX TargetSint;
219 HV_VP_INDEX TargetVp;
220 u16 BaseFlagNumber;
221 u16 FlagCount;
222 u32 RsvdZ;
223 } EventPortInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700224
Bill Pemberton454f18a2009-07-27 16:47:24 -0400225 struct
226 {
227 HV_GPA MonitorAddress;
228 u64 RsvdZ;
229 } MonitorPortInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700230 };
231} HV_PORT_INFO, *PHV_PORT_INFO;
232
233typedef const HV_PORT_INFO *PCHV_PORT_INFO;
234
235typedef struct _HV_CONNECTION_INFO
236{
237 HV_PORT_TYPE PortType;
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700238 u32 Padding;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700239
240 union
241 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400242 struct
243 {
244 u64 RsvdZ;
245 } MessageConnectionInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700246
Bill Pemberton454f18a2009-07-27 16:47:24 -0400247 struct
248 {
249 u64 RsvdZ;
250 } EventConnectionInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700251
Bill Pemberton454f18a2009-07-27 16:47:24 -0400252 struct
253 {
254 HV_GPA MonitorAddress;
255 } MonitorConnectionInfo;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700256 };
257} HV_CONNECTION_INFO, *PHV_CONNECTION_INFO;
258
259typedef const HV_CONNECTION_INFO *PCHV_CONNECTION_INFO;
260
Bill Pemberton454f18a2009-07-27 16:47:24 -0400261
262/* Define synthetic interrupt controller message flags. */
263
Hank Janssen565e7dc2009-07-13 15:15:47 -0700264
265typedef union _HV_MESSAGE_FLAGS
266{
Greg Kroah-Hartman5654e932009-07-14 15:08:20 -0700267 u8 Asu8;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700268 struct
269 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400270 u8 MessagePending:1;
271 u8 Reserved:7;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700272 };
273} HV_MESSAGE_FLAGS, *PHV_MESSAGE_FLAGS;
274
275
Bill Pemberton454f18a2009-07-27 16:47:24 -0400276
277/* Define synthetic interrupt controller message header. */
278
Hank Janssen565e7dc2009-07-13 15:15:47 -0700279
280typedef struct _HV_MESSAGE_HEADER
281{
282 HV_MESSAGE_TYPE MessageType;
Greg Kroah-Hartman5654e932009-07-14 15:08:20 -0700283 u8 PayloadSize;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700284 HV_MESSAGE_FLAGS MessageFlags;
Greg Kroah-Hartman5654e932009-07-14 15:08:20 -0700285 u8 Reserved[2];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700286 union
287 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400288 HV_PARTITION_ID Sender;
289 HV_PORT_ID Port;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700290 };
291
292} HV_MESSAGE_HEADER, *PHV_MESSAGE_HEADER;
293
Bill Pemberton454f18a2009-07-27 16:47:24 -0400294
295/* Define timer message payload structure. */
296
Hank Janssen565e7dc2009-07-13 15:15:47 -0700297typedef struct _HV_TIMER_MESSAGE_PAYLOAD
298{
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700299 u32 TimerIndex;
300 u32 Reserved;
Bill Pemberton454f18a2009-07-27 16:47:24 -0400301 HV_NANO100_TIME ExpirationTime; /* When the timer expired */
302 HV_NANO100_TIME DeliveryTime; /* When the message was delivered */
Hank Janssen565e7dc2009-07-13 15:15:47 -0700303} HV_TIMER_MESSAGE_PAYLOAD, *PHV_TIMER_MESSAGE_PAYLOAD;
304
Bill Pemberton454f18a2009-07-27 16:47:24 -0400305
306/* Define synthetic interrupt controller message format. */
307
Hank Janssen565e7dc2009-07-13 15:15:47 -0700308
309typedef struct _HV_MESSAGE
310{
311 HV_MESSAGE_HEADER Header;
312 union
313 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400314 u64 Payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700315 } u ;
316} HV_MESSAGE, *PHV_MESSAGE;
317
Bill Pemberton454f18a2009-07-27 16:47:24 -0400318
319/* Define the number of message buffers associated with each port. */
320
Hank Janssen565e7dc2009-07-13 15:15:47 -0700321
322#define HV_PORT_MESSAGE_BUFFER_COUNT (16)
323
Bill Pemberton454f18a2009-07-27 16:47:24 -0400324
325/* Define the synthetic interrupt message page layout. */
326
Hank Janssen565e7dc2009-07-13 15:15:47 -0700327
328typedef struct _HV_MESSAGE_PAGE
329{
330 volatile HV_MESSAGE SintMessage[HV_SYNIC_SINT_COUNT];
331} HV_MESSAGE_PAGE, *PHV_MESSAGE_PAGE;
332
333
Bill Pemberton454f18a2009-07-27 16:47:24 -0400334
335/* Define the synthetic interrupt controller event flags format. */
336
Hank Janssen565e7dc2009-07-13 15:15:47 -0700337
338typedef union _HV_SYNIC_EVENT_FLAGS
339{
Greg Kroah-Hartman5654e932009-07-14 15:08:20 -0700340 u8 Flags8[HV_EVENT_FLAGS_BYTE_COUNT];
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700341 u32 Flags32[HV_EVENT_FLAGS_DWORD_COUNT];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700342} HV_SYNIC_EVENT_FLAGS, *PHV_SYNIC_EVENT_FLAGS;
343
344
Bill Pemberton454f18a2009-07-27 16:47:24 -0400345
346/* Define the synthetic interrupt flags page layout. */
347
Hank Janssen565e7dc2009-07-13 15:15:47 -0700348
349typedef struct _HV_SYNIC_EVENT_FLAGS_PAGE
350{
351 volatile HV_SYNIC_EVENT_FLAGS SintEventFlags[HV_SYNIC_SINT_COUNT];
352} HV_SYNIC_EVENT_FLAGS_PAGE, *PHV_SYNIC_EVENT_FLAGS_PAGE;
353
354
Bill Pemberton454f18a2009-07-27 16:47:24 -0400355
356/* Define SynIC control register. */
357
Hank Janssen565e7dc2009-07-13 15:15:47 -0700358typedef union _HV_SYNIC_SCONTROL
359{
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700360 u64 AsUINT64;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700361 struct
362 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400363 u64 Enable:1;
364 u64 Reserved:63;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700365 };
366} HV_SYNIC_SCONTROL, *PHV_SYNIC_SCONTROL;
367
Bill Pemberton454f18a2009-07-27 16:47:24 -0400368
369/* Define synthetic interrupt source. */
370
Hank Janssen565e7dc2009-07-13 15:15:47 -0700371
372typedef union _HV_SYNIC_SINT
373{
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700374 u64 AsUINT64;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700375 struct
376 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400377 u64 Vector :8;
378 u64 Reserved1 :8;
379 u64 Masked :1;
380 u64 AutoEoi :1;
381 u64 Reserved2 :46;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700382 };
383} HV_SYNIC_SINT, *PHV_SYNIC_SINT;
384
Bill Pemberton454f18a2009-07-27 16:47:24 -0400385
386/* Define the format of the SIMP register */
387
Hank Janssen565e7dc2009-07-13 15:15:47 -0700388
389typedef union _HV_SYNIC_SIMP
390{
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700391 u64 AsUINT64;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700392 struct
393 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400394 u64 SimpEnabled : 1;
395 u64 Preserved : 11;
396 u64 BaseSimpGpa : 52;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700397 };
398} HV_SYNIC_SIMP, *PHV_SYNIC_SIMP;
399
Bill Pemberton454f18a2009-07-27 16:47:24 -0400400
401/* Define the format of the SIEFP register */
402
Hank Janssen565e7dc2009-07-13 15:15:47 -0700403
404typedef union _HV_SYNIC_SIEFP
405{
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700406 u64 AsUINT64;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700407 struct
408 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400409 u64 SiefpEnabled : 1;
410 u64 Preserved : 11;
411 u64 BaseSiefpGpa : 52;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700412 };
413} HV_SYNIC_SIEFP, *PHV_SYNIC_SIEFP;
414
Bill Pemberton454f18a2009-07-27 16:47:24 -0400415
416/* Definitions for the monitored notification facility */
417
Hank Janssen565e7dc2009-07-13 15:15:47 -0700418
419typedef union _HV_MONITOR_TRIGGER_GROUP
420{
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700421 u64 AsUINT64;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700422
423 struct
424 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400425 u32 Pending;
426 u32 Armed;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700427 };
428
429} HV_MONITOR_TRIGGER_GROUP, *PHV_MONITOR_TRIGGER_GROUP;
430
431typedef struct _HV_MONITOR_PARAMETER
432{
433 HV_CONNECTION_ID ConnectionId;
Greg Kroah-Hartman5cd508b2009-07-14 15:09:10 -0700434 u16 FlagNumber;
435 u16 RsvdZ;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700436} HV_MONITOR_PARAMETER, *PHV_MONITOR_PARAMETER;
437
438typedef union _HV_MONITOR_TRIGGER_STATE
439{
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700440 u32 Asu32;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700441
442 struct
443 {
Bill Pemberton454f18a2009-07-27 16:47:24 -0400444 u32 GroupEnable : 4;
445 u32 RsvdZ : 28;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700446 };
447
448} HV_MONITOR_TRIGGER_STATE, *PHV_MONITOR_TRIGGER_STATE;
449
Bill Pemberton454f18a2009-07-27 16:47:24 -0400450
451/* HV_MONITOR_PAGE Layout */
452/* ------------------------------------------------------ */
453/* | 0 | TriggerState (4 bytes) | Rsvd1 (4 bytes) | */
454/* | 8 | TriggerGroup[0] | */
455/* | 10 | TriggerGroup[1] | */
456/* | 18 | TriggerGroup[2] | */
457/* | 20 | TriggerGroup[3] | */
458/* | 28 | Rsvd2[0] | */
459/* | 30 | Rsvd2[1] | */
460/* | 38 | Rsvd2[2] | */
461/* | 40 | NextCheckTime[0][0] | NextCheckTime[0][1] | */
462/* | ... | */
463/* | 240 | Latency[0][0..3] | */
464/* | 340 | Rsvz3[0] | */
465/* | 440 | Parameter[0][0] | */
466/* | 448 | Parameter[0][1] | */
467/* | ... | */
468/* | 840 | Rsvd4[0] | */
469/* ------------------------------------------------------ */
Hank Janssen565e7dc2009-07-13 15:15:47 -0700470
471typedef struct _HV_MONITOR_PAGE
472{
473 HV_MONITOR_TRIGGER_STATE TriggerState;
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700474 u32 RsvdZ1;
Hank Janssen565e7dc2009-07-13 15:15:47 -0700475
476 HV_MONITOR_TRIGGER_GROUP TriggerGroup[4];
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700477 u64 RsvdZ2[3];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700478
Greg Kroah-Hartman4d643112009-07-14 15:09:36 -0700479 s32 NextCheckTime[4][32];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700480
Greg Kroah-Hartman5cd508b2009-07-14 15:09:10 -0700481 u16 Latency[4][32];
Greg Kroah-Hartman59471432009-07-14 15:10:26 -0700482 u64 RsvdZ3[32];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700483
484 HV_MONITOR_PARAMETER Parameter[4][32];
485
Greg Kroah-Hartman5654e932009-07-14 15:08:20 -0700486 u8 RsvdZ4[1984];
Hank Janssen565e7dc2009-07-13 15:15:47 -0700487
488} HV_MONITOR_PAGE, *PHV_MONITOR_PAGE;
489
490typedef volatile HV_MONITOR_PAGE* PVHV_MONITOR_PAGE;