whp\abi/
x64.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4#![cfg(target_arch = "x86_64")]
5
6use super::WHV_CPUID_OUTPUT;
7use super::WHV_MEMORY_ACCESS_TYPE;
8use super::WHV_PROCESSOR_FEATURES;
9use super::WHV_PROCESSOR_FEATURES1;
10use super::WHV_REGISTER_NAME;
11use super::WHV_RUN_VP_EXIT_REASON;
12use super::WHV_UINT128;
13use super::bitops;
14use super::bitops_base;
15
16pub const WHvX64RegisterRax: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000000);
17pub const WHvX64RegisterRcx: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000001);
18pub const WHvX64RegisterRdx: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000002);
19pub const WHvX64RegisterRbx: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000003);
20pub const WHvX64RegisterRsp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000004);
21pub const WHvX64RegisterRbp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000005);
22pub const WHvX64RegisterRsi: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000006);
23pub const WHvX64RegisterRdi: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000007);
24pub const WHvX64RegisterR8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000008);
25pub const WHvX64RegisterR9: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000009);
26pub const WHvX64RegisterR10: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000A);
27pub const WHvX64RegisterR11: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000B);
28pub const WHvX64RegisterR12: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000C);
29pub const WHvX64RegisterR13: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000D);
30pub const WHvX64RegisterR14: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000E);
31pub const WHvX64RegisterR15: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000000F);
32pub const WHvX64RegisterRip: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000010);
33pub const WHvX64RegisterRflags: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000011);
34pub const WHvX64RegisterEs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000012);
35pub const WHvX64RegisterCs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000013);
36pub const WHvX64RegisterSs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000014);
37pub const WHvX64RegisterDs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000015);
38pub const WHvX64RegisterFs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000016);
39pub const WHvX64RegisterGs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000017);
40pub const WHvX64RegisterLdtr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000018);
41pub const WHvX64RegisterTr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000019);
42pub const WHvX64RegisterIdtr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001A);
43pub const WHvX64RegisterGdtr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001B);
44pub const WHvX64RegisterCr0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001C);
45pub const WHvX64RegisterCr2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001D);
46pub const WHvX64RegisterCr3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001E);
47pub const WHvX64RegisterCr4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000001F);
48pub const WHvX64RegisterCr8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000020);
49pub const WHvX64RegisterDr0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000021);
50pub const WHvX64RegisterDr1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000022);
51pub const WHvX64RegisterDr2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000023);
52pub const WHvX64RegisterDr3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000024);
53pub const WHvX64RegisterDr6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000025);
54pub const WHvX64RegisterDr7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000026);
55pub const WHvX64RegisterXCr0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000027);
56pub const WHvX64RegisterVirtualCr0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000028);
57pub const WHvX64RegisterVirtualCr3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00000029);
58pub const WHvX64RegisterVirtualCr4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000002A);
59pub const WHvX64RegisterVirtualCr8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000002B);
60pub const WHvX64RegisterXmm0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001000);
61pub const WHvX64RegisterXmm1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001001);
62pub const WHvX64RegisterXmm2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001002);
63pub const WHvX64RegisterXmm3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001003);
64pub const WHvX64RegisterXmm4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001004);
65pub const WHvX64RegisterXmm5: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001005);
66pub const WHvX64RegisterXmm6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001006);
67pub const WHvX64RegisterXmm7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001007);
68pub const WHvX64RegisterXmm8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001008);
69pub const WHvX64RegisterXmm9: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001009);
70pub const WHvX64RegisterXmm10: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100A);
71pub const WHvX64RegisterXmm11: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100B);
72pub const WHvX64RegisterXmm12: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100C);
73pub const WHvX64RegisterXmm13: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100D);
74pub const WHvX64RegisterXmm14: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100E);
75pub const WHvX64RegisterXmm15: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000100F);
76pub const WHvX64RegisterFpMmx0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001010);
77pub const WHvX64RegisterFpMmx1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001011);
78pub const WHvX64RegisterFpMmx2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001012);
79pub const WHvX64RegisterFpMmx3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001013);
80pub const WHvX64RegisterFpMmx4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001014);
81pub const WHvX64RegisterFpMmx5: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001015);
82pub const WHvX64RegisterFpMmx6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001016);
83pub const WHvX64RegisterFpMmx7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001017);
84pub const WHvX64RegisterFpControlStatus: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001018);
85pub const WHvX64RegisterXmmControlStatus: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00001019);
86pub const WHvX64RegisterTsc: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002000);
87pub const WHvX64RegisterEfer: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002001);
88pub const WHvX64RegisterKernelGsBase: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002002);
89pub const WHvX64RegisterApicBase: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002003);
90pub const WHvX64RegisterPat: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002004);
91pub const WHvX64RegisterSysenterCs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002005);
92pub const WHvX64RegisterSysenterEip: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002006);
93pub const WHvX64RegisterSysenterEsp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002007);
94pub const WHvX64RegisterStar: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002008);
95pub const WHvX64RegisterLstar: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002009);
96pub const WHvX64RegisterCstar: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000200A);
97pub const WHvX64RegisterSfmask: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000200B);
98pub const WHvX64RegisterInitialApicId: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000200C);
99pub const WHvX64RegisterMsrMtrrCap: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000200D);
100pub const WHvX64RegisterMsrMtrrDefType: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000200E);
101pub const WHvX64RegisterMsrMtrrPhysBase0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002010);
102pub const WHvX64RegisterMsrMtrrPhysBase1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002011);
103pub const WHvX64RegisterMsrMtrrPhysBase2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002012);
104pub const WHvX64RegisterMsrMtrrPhysBase3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002013);
105pub const WHvX64RegisterMsrMtrrPhysBase4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002014);
106pub const WHvX64RegisterMsrMtrrPhysBase5: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002015);
107pub const WHvX64RegisterMsrMtrrPhysBase6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002016);
108pub const WHvX64RegisterMsrMtrrPhysBase7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002017);
109pub const WHvX64RegisterMsrMtrrPhysBase8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002018);
110pub const WHvX64RegisterMsrMtrrPhysBase9: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002019);
111pub const WHvX64RegisterMsrMtrrPhysBaseA: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201A);
112pub const WHvX64RegisterMsrMtrrPhysBaseB: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201B);
113pub const WHvX64RegisterMsrMtrrPhysBaseC: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201C);
114pub const WHvX64RegisterMsrMtrrPhysBaseD: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201D);
115pub const WHvX64RegisterMsrMtrrPhysBaseE: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201E);
116pub const WHvX64RegisterMsrMtrrPhysBaseF: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000201F);
117
118pub const WHvX64RegisterMsrMtrrPhysMask0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002040);
119pub const WHvX64RegisterMsrMtrrPhysMask1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002041);
120pub const WHvX64RegisterMsrMtrrPhysMask2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002042);
121pub const WHvX64RegisterMsrMtrrPhysMask3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002043);
122pub const WHvX64RegisterMsrMtrrPhysMask4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002044);
123pub const WHvX64RegisterMsrMtrrPhysMask5: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002045);
124pub const WHvX64RegisterMsrMtrrPhysMask6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002046);
125pub const WHvX64RegisterMsrMtrrPhysMask7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002047);
126pub const WHvX64RegisterMsrMtrrPhysMask8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002048);
127pub const WHvX64RegisterMsrMtrrPhysMask9: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002049);
128pub const WHvX64RegisterMsrMtrrPhysMaskA: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204A);
129pub const WHvX64RegisterMsrMtrrPhysMaskB: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204B);
130pub const WHvX64RegisterMsrMtrrPhysMaskC: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204C);
131pub const WHvX64RegisterMsrMtrrPhysMaskD: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204D);
132pub const WHvX64RegisterMsrMtrrPhysMaskE: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204E);
133pub const WHvX64RegisterMsrMtrrPhysMaskF: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000204F);
134
135pub const WHvX64RegisterMsrMtrrFix64k00000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002070);
136pub const WHvX64RegisterMsrMtrrFix16k80000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002071);
137pub const WHvX64RegisterMsrMtrrFix16kA0000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002072);
138pub const WHvX64RegisterMsrMtrrFix4kC0000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002073);
139pub const WHvX64RegisterMsrMtrrFix4kC8000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002074);
140pub const WHvX64RegisterMsrMtrrFix4kD0000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002075);
141pub const WHvX64RegisterMsrMtrrFix4kD8000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002076);
142pub const WHvX64RegisterMsrMtrrFix4kE0000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002077);
143pub const WHvX64RegisterMsrMtrrFix4kE8000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002078);
144pub const WHvX64RegisterMsrMtrrFix4kF0000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002079);
145pub const WHvX64RegisterMsrMtrrFix4kF8000: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000207A);
146
147pub const WHvX64RegisterTscAux: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000207B);
148pub const WHvX64RegisterBndcfgs: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000207C);
149pub const WHvX64RegisterMCount: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000207E);
150pub const WHvX64RegisterACount: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000207F);
151pub const WHvX64RegisterSpecCtrl: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002084);
152pub const WHvX64RegisterPredCmd: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002085);
153pub const WHvX64RegisterTscVirtualOffset: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002087);
154pub const WHvX64RegisterTsxCtrl: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002088);
155pub const WHvX64RegisterXss: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000208B);
156pub const WHvX64RegisterUCet: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000208C);
157pub const WHvX64RegisterSCet: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000208D);
158pub const WHvX64RegisterSsp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000208E);
159pub const WHvX64RegisterPl0Ssp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000208F);
160pub const WHvX64RegisterPl1Ssp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002090);
161pub const WHvX64RegisterPl2Ssp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002091);
162pub const WHvX64RegisterPl3Ssp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002092);
163pub const WHvX64RegisterInterruptSspTableAddr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002093);
164
165pub const WHvX64RegisterTscDeadline: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002095);
166pub const WHvX64RegisterTscAdjust: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002096);
167pub const WHvX64RegisterUnwaitControl: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002098);
168pub const WHvX64RegisterXfd: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00002099);
169pub const WHvX64RegisterXfdErr: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000209A);
170pub const WHvX64RegisterApicId: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00003002);
171pub const WHvX64RegisterApicVersion: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00003003);
172
173pub const WHvX64RegisterHypercall: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00005001);
174pub const WHvRegisterPendingInterruption: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000000);
175pub const WHvRegisterInterruptState: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000001);
176pub const WHvX64RegisterPendingDebugException: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000006);
177
178pub const WHvRegisterSint0: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004000);
179pub const WHvRegisterSint1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004001);
180pub const WHvRegisterSint2: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004002);
181pub const WHvRegisterSint3: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004003);
182pub const WHvRegisterSint4: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004004);
183pub const WHvRegisterSint5: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004005);
184pub const WHvRegisterSint6: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004006);
185pub const WHvRegisterSint7: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004007);
186pub const WHvRegisterSint8: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004008);
187pub const WHvRegisterSint9: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004009);
188pub const WHvRegisterSint10: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400A);
189pub const WHvRegisterSint11: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400B);
190pub const WHvRegisterSint12: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400C);
191pub const WHvRegisterSint13: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400D);
192pub const WHvRegisterSint14: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400E);
193pub const WHvRegisterSint15: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x0000400F);
194pub const WHvRegisterScontrol: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004010);
195pub const WHvRegisterSversion: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004011);
196pub const WHvRegisterSiefp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004012);
197pub const WHvRegisterSimp: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004013);
198pub const WHvRegisterEom: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00004014);
199pub const WHvRegisterVpRuntime: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00005000);
200pub const WHvRegisterGuestOsId: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00005002);
201pub const WHvRegisterVpAssistPage: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00005013);
202pub const WHvRegisterReferenceTsc: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x00005017);
203pub const WHvRegisterPendingEvent: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000002);
204pub const WHvRegisterPendingEvent1: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000003);
205pub const WHvRegisterDeliverabilityNotifications: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000004);
206pub const WHvRegisterInternalActivityState: WHV_REGISTER_NAME = WHV_REGISTER_NAME(0x80000005);
207
208pub const WHvRunVpExitReasonNone: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0);
209pub const WHvRunVpExitReasonMemoryAccess: WHV_RUN_VP_EXIT_REASON =
210    WHV_RUN_VP_EXIT_REASON(0x00000001);
211pub const WHvRunVpExitReasonX64IoPortAccess: WHV_RUN_VP_EXIT_REASON =
212    WHV_RUN_VP_EXIT_REASON(0x00000002);
213pub const WHvRunVpExitReasonUnrecoverableException: WHV_RUN_VP_EXIT_REASON =
214    WHV_RUN_VP_EXIT_REASON(0x00000004);
215pub const WHvRunVpExitReasonInvalidVpRegisterValue: WHV_RUN_VP_EXIT_REASON =
216    WHV_RUN_VP_EXIT_REASON(0x00000005);
217pub const WHvRunVpExitReasonUnsupportedFeature: WHV_RUN_VP_EXIT_REASON =
218    WHV_RUN_VP_EXIT_REASON(0x00000006);
219pub const WHvRunVpExitReasonX64InterruptWindow: WHV_RUN_VP_EXIT_REASON =
220    WHV_RUN_VP_EXIT_REASON(0x00000007);
221pub const WHvRunVpExitReasonX64Halt: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00000008);
222pub const WHvRunVpExitReasonX64ApicEoi: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00000009);
223pub const WHvRunVpExitReasonSynicSintDeliverable: WHV_RUN_VP_EXIT_REASON =
224    WHV_RUN_VP_EXIT_REASON(0x0000000A);
225pub const WHvRunVpExitReasonX64MsrAccess: WHV_RUN_VP_EXIT_REASON =
226    WHV_RUN_VP_EXIT_REASON(0x00001000);
227pub const WHvRunVpExitReasonX64Cpuid: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00001001);
228pub const WHvRunVpExitReasonException: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00001002);
229pub const WHvRunVpExitReasonX64Rdtsc: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00001003);
230pub const WHvRunVpExitReasonX64ApicSmiTrap: WHV_RUN_VP_EXIT_REASON =
231    WHV_RUN_VP_EXIT_REASON(0x00001004);
232pub const WHvRunVpExitReasonHypercall: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00001005);
233pub const WHvRunVpExitReasonX64ApicInitSipiTrap: WHV_RUN_VP_EXIT_REASON =
234    WHV_RUN_VP_EXIT_REASON(0x00001006);
235pub const WHvRunVpExitReasonX64ApicWriteTrap: WHV_RUN_VP_EXIT_REASON =
236    WHV_RUN_VP_EXIT_REASON(0x00001007);
237pub const WHvRunVpExitReasonCanceled: WHV_RUN_VP_EXIT_REASON = WHV_RUN_VP_EXIT_REASON(0x00002001);
238
239#[repr(C)]
240#[derive(Copy, Clone)]
241pub union WHV_RUN_VP_EXIT_CONTEXT_u {
242    pub MemoryAccess: WHV_MEMORY_ACCESS_CONTEXT,
243    pub CancelReason: WHV_RUN_VP_CANCELED_CONTEXT,
244    pub Hypercall: WHV_HYPERCALL_CONTEXT,
245    pub SynicSintDeliverable: WHV_SYNIC_SINT_DELIVERABLE_CONTEXT,
246    pub IoPortAccess: WHV_X64_IO_PORT_ACCESS_CONTEXT,
247    pub MsrAccess: WHV_X64_MSR_ACCESS_CONTEXT,
248    pub CpuidAccess: WHV_X64_CPUID_ACCESS_CONTEXT,
249    pub VpException: WHV_VP_EXCEPTION_CONTEXT,
250    pub InterruptWindow: WHV_X64_INTERRUPTION_DELIVERABLE_CONTEXT,
251    pub UnsupportedFeature: WHV_X64_UNSUPPORTED_FEATURE_CONTEXT,
252    pub ApicEoi: WHV_X64_APIC_EOI_CONTEXT,
253    pub ReadTsc: WHV_X64_RDTSC_CONTEXT,
254    pub ApicSmi: WHV_X64_APIC_SMI_CONTEXT,
255    pub ApicInitSipi: WHV_X64_APIC_INIT_SIPI_CONTEXT,
256    pub ApicWrite: WHV_X64_APIC_WRITE_CONTEXT,
257}
258
259#[repr(C)]
260#[derive(Debug, Copy, Clone)]
261pub struct WHV_RUN_VP_CANCELED_CONTEXT {
262    pub CancelReason: u32,
263}
264
265#[derive(Debug, Copy, Clone, Default)]
266pub struct WHV_X64_MSR_EXIT_BITMAP(pub u64);
267bitops!(WHV_X64_MSR_EXIT_BITMAP);
268
269impl WHV_X64_MSR_EXIT_BITMAP {
270    pub const UnhandledMsrs: Self = Self(1 << 0);
271    pub const TscMsrWrite: Self = Self(1 << 1);
272    pub const TscMsrRead: Self = Self(1 << 2);
273    pub const ApicBaseMsrWrite: Self = Self(1 << 3);
274    pub const MiscEnableMsrRead: Self = Self(1 << 4);
275    pub const McUpdatePatchLevelMsrRead: Self = Self(1 << 5);
276}
277
278impl WHV_PROCESSOR_FEATURES {
279    pub const Sse3Support: Self = Self(1 << 0);
280    pub const LahfSahfSupport: Self = Self(1 << 1);
281    pub const Ssse3Support: Self = Self(1 << 2);
282    pub const Sse4_1Support: Self = Self(1 << 3);
283    pub const Sse4_2Support: Self = Self(1 << 4);
284    pub const Sse4ASupport: Self = Self(1 << 5);
285    pub const XopSupport: Self = Self(1 << 6);
286    pub const PopCntSupport: Self = Self(1 << 7);
287    pub const Cmpxchg16BSupport: Self = Self(1 << 8);
288    pub const Altmovcr8Support: Self = Self(1 << 9);
289    pub const LzcntSupport: Self = Self(1 << 10);
290    pub const MisAlignSseSupport: Self = Self(1 << 11);
291    pub const MmxExtSupport: Self = Self(1 << 12);
292    pub const Amd3DNowSupport: Self = Self(1 << 13);
293    pub const ExtendedAmd3DNowSupport: Self = Self(1 << 14);
294    pub const Page1GbSupport: Self = Self(1 << 15);
295    pub const AesSupport: Self = Self(1 << 16);
296    pub const PclmulqdqSupport: Self = Self(1 << 17);
297    pub const PcidSupport: Self = Self(1 << 18);
298    pub const Fma4Support: Self = Self(1 << 19);
299    pub const F16CSupport: Self = Self(1 << 20);
300    pub const RdRandSupport: Self = Self(1 << 21);
301    pub const RdWrFsGsSupport: Self = Self(1 << 22);
302    pub const SmepSupport: Self = Self(1 << 23);
303    pub const EnhancedFastStringSupport: Self = Self(1 << 24);
304    pub const Bmi1Support: Self = Self(1 << 25);
305    pub const Bmi2Support: Self = Self(1 << 26);
306
307    pub const MovbeSupport: Self = Self(1 << 29);
308    pub const Npiep1Support: Self = Self(1 << 30);
309    pub const DepX87FpuSaveSupport: Self = Self(1 << 31);
310    pub const RdSeedSupport: Self = Self(1 << 32);
311    pub const AdxSupport: Self = Self(1 << 33);
312    pub const IntelPrefetchSupport: Self = Self(1 << 34);
313    pub const SmapSupport: Self = Self(1 << 35);
314    pub const HleSupport: Self = Self(1 << 36);
315    pub const RtmSupport: Self = Self(1 << 37);
316    pub const RdtscpSupport: Self = Self(1 << 38);
317    pub const ClflushoptSupport: Self = Self(1 << 39);
318    pub const ClwbSupport: Self = Self(1 << 40);
319    pub const ShaSupport: Self = Self(1 << 41);
320    pub const X87PointersSavedSupport: Self = Self(1 << 42);
321    pub const InvpcidSupport: Self = Self(1 << 43);
322    pub const IbrsSupport: Self = Self(1 << 44);
323    pub const StibpSupport: Self = Self(1 << 45);
324    pub const IbpbSupport: Self = Self(1 << 46);
325    pub const Reserved2: Self = Self(1 << 47);
326    pub const SsbdSupport: Self = Self(1 << 48);
327    pub const FastShortRepMovSupport: Self = Self(1 << 49);
328    pub const Reserved3: Self = Self(1 << 50);
329    pub const RdclNo: Self = Self(1 << 51);
330    pub const IbrsAllSupport: Self = Self(1 << 52);
331    pub const Reserved4: Self = Self(1 << 53);
332    pub const SsbNo: Self = Self(1 << 54);
333    pub const RsbANo: Self = Self(1 << 55);
334    pub const Reserved5: Self = Self(1 << 56);
335    pub const RdPidSupport: Self = Self(1 << 57);
336    pub const UmipSupport: Self = Self(1 << 58);
337    pub const MdsNoSupport: Self = Self(1 << 59);
338    pub const MdClearSupport: Self = Self(1 << 60);
339    pub const TaaNoSupport: Self = Self(1 << 61);
340    pub const TsxCtrlSupport: Self = Self(1 << 62);
341}
342
343impl WHV_PROCESSOR_FEATURES1 {
344    pub const ACountMCountSupport: Self = Self(1 << 0);
345    pub const Reserved1: Self = Self(1 << 1);
346    pub const ClZeroSupport: Self = Self(1 << 2);
347    pub const RdpruSupport: Self = Self(1 << 3);
348
349    pub const NestedVirtSupport: Self = Self(1 << 6);
350    pub const PsfdSupport: Self = Self(1 << 7);
351    pub const CetSsSupport: Self = Self(1 << 8);
352    pub const CetIbtSupport: Self = Self(1 << 9);
353    pub const VmxExceptionInjectSupport: Self = Self(1 << 10);
354
355    pub const UmwaitTpauseSupport: Self = Self(1 << 12);
356    pub const MovdiriSupport: Self = Self(1 << 13);
357    pub const Movdir64bSupport: Self = Self(1 << 14);
358    pub const CldemoteSupport: Self = Self(1 << 15);
359    pub const SerializeSupport: Self = Self(1 << 16);
360    pub const TscDeadlineTmrSupport: Self = Self(1 << 17);
361    pub const TscAdjustSupport: Self = Self(1 << 18);
362    pub const FzlRepMovsb: Self = Self(1 << 19);
363    pub const FsRepStosb: Self = Self(1 << 20);
364    pub const FsRepCmpsb: Self = Self(1 << 21);
365}
366
367#[repr(C)]
368#[derive(Debug, Copy, Clone)]
369pub struct WHV_PROCESSOR_PERFMON_FEATURES(pub u64);
370bitops!(WHV_PROCESSOR_PERFMON_FEATURES);
371
372impl WHV_PROCESSOR_PERFMON_FEATURES {
373    pub const PmuSupport: Self = Self(1 << 0);
374    pub const LbrSupport: Self = Self(1 << 1);
375}
376
377#[repr(C)]
378#[derive(Clone, Copy, Debug)]
379pub struct WHV_VP_EXIT_CONTEXT {
380    pub ExecutionState: WHV_X64_VP_EXECUTION_STATE,
381    pub InstructionLengthAndCr8: u8,
382    pub Reserved: u8,
383    pub Reserved2: u32,
384    pub Cs: WHV_X64_SEGMENT_REGISTER,
385    pub Rip: u64,
386    pub Rflags: u64,
387}
388
389impl WHV_VP_EXIT_CONTEXT {
390    pub fn InstructionLength(&self) -> u8 {
391        self.InstructionLengthAndCr8 & 0xf
392    }
393    pub fn Cr8(&self) -> u8 {
394        self.InstructionLengthAndCr8 >> 4
395    }
396}
397
398#[repr(C)]
399#[derive(Clone, Copy, Debug)]
400pub struct WHV_X64_VP_EXECUTION_STATE(pub u16);
401
402impl WHV_X64_VP_EXECUTION_STATE {
403    pub fn Cpl(self) -> u8 {
404        (self.0 & 0x3) as u8
405    }
406    pub fn Cr0Pe(self) -> bool {
407        (self.0 & 0x4) != 0
408    }
409    pub fn Cr0Am(self) -> bool {
410        (self.0 & 0x8) != 0
411    }
412    pub fn EferLma(self) -> bool {
413        (self.0 & 0x10) != 0
414    }
415    pub fn DebugActive(self) -> bool {
416        (self.0 & 0x20) != 0
417    }
418    pub fn InterruptionPending(self) -> bool {
419        (self.0 & 0x40) != 0
420    }
421    pub fn InterruptShadow(self) -> bool {
422        (self.0 & 0x1000) != 0
423    }
424}
425
426#[repr(C)]
427#[derive(Debug, Copy, Clone)]
428pub struct WHV_MEMORY_ACCESS_CONTEXT {
429    // Context of the virtual processor
430    pub InstructionByteCount: u8,
431    pub Reserved: [u8; 3],
432    pub InstructionBytes: [u8; 16],
433
434    // Memory access info
435    pub AccessInfo: WHV_MEMORY_ACCESS_INFO,
436    pub Gpa: u64,
437    pub Gva: u64,
438    #[cfg(target_arch = "aarch64")]
439    pub Syndrome: u64,
440}
441
442#[repr(C)]
443#[derive(Debug, Copy, Clone)]
444pub struct WHV_MEMORY_ACCESS_INFO(pub u32);
445
446impl WHV_MEMORY_ACCESS_INFO {
447    pub fn AccessType(self) -> WHV_MEMORY_ACCESS_TYPE {
448        WHV_MEMORY_ACCESS_TYPE(self.0 & 3)
449    }
450
451    pub fn GpaUnmapped(self) -> bool {
452        (self.0 & 4) != 0
453    }
454
455    pub fn GvaValid(self) -> bool {
456        (self.0 & 8) != 0
457    }
458}
459
460#[repr(C, align(8))]
461#[derive(Debug, Copy, Clone)]
462pub struct WHV_INTERRUPT_CONTROL {
463    pub Type: u8, // WHV_INTERRUPT_TYPE
464    pub Modes: WHV_INTERRUPT_CONTROL_MODES,
465    pub Reserved: [u8; 6],
466    pub Destination: u32,
467    pub Vector: u32,
468}
469
470#[repr(C)]
471#[derive(Debug, Copy, Clone)]
472pub struct WHV_INTERRUPT_TYPE(pub u32);
473
474pub const WHvX64InterruptTypeFixed: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(0);
475pub const WHvX64InterruptTypeLowestPriority: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(1);
476pub const WHvX64InterruptTypeNmi: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(4);
477pub const WHvX64InterruptTypeInit: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(5);
478pub const WHvX64InterruptTypeSipi: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(6);
479pub const WHvX64InterruptTypeLocalInt1: WHV_INTERRUPT_TYPE = WHV_INTERRUPT_TYPE(9);
480
481#[repr(C)]
482#[derive(Debug, Copy, Clone)]
483pub struct WHV_INTERRUPT_DESTINATION_MODE(pub u8);
484
485pub const WHvX64InterruptDestinationModePhysical: WHV_INTERRUPT_DESTINATION_MODE =
486    WHV_INTERRUPT_DESTINATION_MODE(0);
487pub const WHvX64InterruptDestinationModeLogical: WHV_INTERRUPT_DESTINATION_MODE =
488    WHV_INTERRUPT_DESTINATION_MODE(1);
489
490#[repr(C)]
491#[derive(Debug, Copy, Clone)]
492pub struct WHV_INTERRUPT_TRIGGER_MODE(pub u8);
493
494pub const WHvX64InterruptTriggerModeEdge: WHV_INTERRUPT_TRIGGER_MODE =
495    WHV_INTERRUPT_TRIGGER_MODE(0);
496pub const WHvX64InterruptTriggerModeLevel: WHV_INTERRUPT_TRIGGER_MODE =
497    WHV_INTERRUPT_TRIGGER_MODE(1);
498
499#[repr(C)]
500#[derive(Debug, Copy, Clone)]
501pub struct WHV_INTERRUPT_CONTROL_MODES(pub u8);
502
503impl WHV_INTERRUPT_CONTROL_MODES {
504    pub fn new(dest: WHV_INTERRUPT_DESTINATION_MODE, trigger: WHV_INTERRUPT_TRIGGER_MODE) -> Self {
505        Self(dest.0 | trigger.0 << 4)
506    }
507}
508
509#[repr(C)]
510#[derive(Debug, Copy, Clone)]
511pub struct WHV_X64_IO_PORT_ACCESS_INFO(pub u32);
512
513impl WHV_X64_IO_PORT_ACCESS_INFO {
514    pub fn IsWrite(self) -> bool {
515        (self.0 & 1) != 0
516    }
517    pub fn AccessSize(self) -> u8 {
518        ((self.0 >> 1) & 0x7) as u8
519    }
520    pub fn StringOp(self) -> bool {
521        (self.0 & 0x10) != 0
522    }
523    pub fn RepPrefix(self) -> bool {
524        (self.0 & 0x20) != 0
525    }
526}
527
528#[repr(C)]
529#[derive(Debug, Copy, Clone)]
530pub struct WHV_X64_IO_PORT_ACCESS_CONTEXT {
531    // Context of the virtual processor
532    pub InstructionByteCount: u8,
533    pub Reserved: [u8; 3],
534    pub InstructionBytes: [u8; 16],
535
536    pub AccessInfo: WHV_X64_IO_PORT_ACCESS_INFO,
537    pub PortNumber: u16,
538    pub Reserved2: [u16; 3],
539    pub Rax: u64,
540    pub Rcx: u64,
541    pub Rsi: u64,
542    pub Rdi: u64,
543    pub Ds: WHV_X64_SEGMENT_REGISTER,
544    pub Es: WHV_X64_SEGMENT_REGISTER,
545}
546
547#[repr(C)]
548#[derive(Debug, Copy, Clone)]
549pub struct WHV_X64_MSR_ACCESS_INFO(pub u32);
550
551impl WHV_X64_MSR_ACCESS_INFO {
552    pub fn IsWrite(self) -> bool {
553        (self.0 & 1) != 0
554    }
555}
556
557#[repr(C)]
558#[derive(Debug, Copy, Clone)]
559pub struct WHV_X64_MSR_ACCESS_CONTEXT {
560    pub AccessInfo: WHV_X64_MSR_ACCESS_INFO,
561    pub MsrNumber: u32,
562    pub Rax: u64,
563    pub Rdx: u64,
564}
565
566#[repr(C)]
567#[derive(Debug, Copy, Clone)]
568pub struct WHV_X64_CPUID_ACCESS_CONTEXT {
569    pub Rax: u64,
570    pub Rcx: u64,
571    pub Rdx: u64,
572    pub Rbx: u64,
573    pub DefaultResultRax: u64,
574    pub DefaultResultRcx: u64,
575    pub DefaultResultRdx: u64,
576    pub DefaultResultRbx: u64,
577}
578
579#[repr(C)]
580#[derive(Debug, Copy, Clone)]
581pub struct WHV_VP_EXCEPTION_INFO(pub u32);
582
583impl WHV_VP_EXCEPTION_INFO {
584    pub fn ErrorCodeValid(self) -> bool {
585        (self.0 & 1) != 0
586    }
587    pub fn SoftwareException(self) -> bool {
588        (self.0 & 2) != 0
589    }
590}
591
592#[repr(C)]
593#[derive(Debug, Copy, Clone, PartialEq, Eq)]
594pub struct WHV_EXCEPTION_TYPE(pub u8);
595
596pub const WHvX64ExceptionTypeDivideErrorFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x0);
597pub const WHvX64ExceptionTypeDebugTrapOrFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x1);
598pub const WHvX64ExceptionTypeBreakpointTrap: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x3);
599pub const WHvX64ExceptionTypeOverflowTrap: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x4);
600pub const WHvX64ExceptionTypeBoundRangeFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x5);
601pub const WHvX64ExceptionTypeInvalidOpcodeFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x6);
602pub const WHvX64ExceptionTypeDeviceNotAvailableFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x7);
603pub const WHvX64ExceptionTypeDoubleFaultAbort: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x8);
604pub const WHvX64ExceptionTypeInvalidTaskStateSegmentFault: WHV_EXCEPTION_TYPE =
605    WHV_EXCEPTION_TYPE(0x0A);
606pub const WHvX64ExceptionTypeSegmentNotPresentFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x0B);
607pub const WHvX64ExceptionTypeStackFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x0C);
608pub const WHvX64ExceptionTypeGeneralProtectionFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x0D);
609pub const WHvX64ExceptionTypePageFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x0E);
610pub const WHvX64ExceptionTypeFloatingPointErrorFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x10);
611pub const WHvX64ExceptionTypeAlignmentCheckFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x11);
612pub const WHvX64ExceptionTypeMachineCheckAbort: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x12);
613pub const WHvX64ExceptionTypeSimdFloatingPointFault: WHV_EXCEPTION_TYPE = WHV_EXCEPTION_TYPE(0x13);
614
615#[repr(C)]
616#[derive(Debug, Copy, Clone)]
617pub struct WHV_VP_EXCEPTION_CONTEXT {
618    pub InstructionByteCount: u8,
619    pub Reserved: [u8; 3],
620    pub InstructionBytes: [u8; 16],
621
622    // Exception info
623    pub ExceptionInfo: WHV_VP_EXCEPTION_INFO,
624    pub ExceptionType: WHV_EXCEPTION_TYPE,
625    pub Reserved2: [u8; 3],
626    pub ErrorCode: u32,
627    pub ExceptionParameter: u64,
628}
629
630#[repr(C)]
631#[derive(Copy, Clone, Debug, PartialEq, Eq)]
632pub struct WHV_X64_UNSUPPORTED_FEATURE_CODE(pub u32);
633
634pub const WHvUnsupportedFeatureIntercept: WHV_X64_UNSUPPORTED_FEATURE_CODE =
635    WHV_X64_UNSUPPORTED_FEATURE_CODE(1);
636pub const WHvUnsupportedFeatureTaskSwitchTss: WHV_X64_UNSUPPORTED_FEATURE_CODE =
637    WHV_X64_UNSUPPORTED_FEATURE_CODE(2);
638
639#[repr(C)]
640#[derive(Debug, Copy, Clone)]
641pub struct WHV_X64_UNSUPPORTED_FEATURE_CONTEXT {
642    pub FeatureCode: WHV_X64_UNSUPPORTED_FEATURE_CODE,
643    pub Reserved: u32,
644    pub FeatureParameter: u64,
645}
646
647#[repr(C)]
648#[derive(Copy, Clone, Debug, PartialEq, Eq)]
649pub struct WHV_X64_PENDING_INTERRUPTION_TYPE(pub u32);
650
651pub const WHvX64PendingInterrupt: WHV_X64_PENDING_INTERRUPTION_TYPE =
652    WHV_X64_PENDING_INTERRUPTION_TYPE(0);
653pub const WHvX64PendingNmi: WHV_X64_PENDING_INTERRUPTION_TYPE =
654    WHV_X64_PENDING_INTERRUPTION_TYPE(2);
655pub const WHvX64PendingException: WHV_X64_PENDING_INTERRUPTION_TYPE =
656    WHV_X64_PENDING_INTERRUPTION_TYPE(3);
657
658#[repr(C)]
659#[derive(Debug, Copy, Clone)]
660pub struct WHV_X64_INTERRUPTION_DELIVERABLE_CONTEXT {
661    pub DeliverableType: WHV_X64_PENDING_INTERRUPTION_TYPE,
662}
663
664#[repr(C)]
665#[derive(Debug, Copy, Clone)]
666pub struct WHV_X64_APIC_EOI_CONTEXT {
667    pub InterruptVector: u32,
668}
669
670#[repr(C)]
671#[derive(Debug, Copy, Clone)]
672pub struct WHV_X64_RDTSC_CONTEXT {
673    pub TscAux: u64,
674    pub VirtualOffset: u64,
675    pub Tsc: u64,
676    pub ReferenceTime: u64,
677    pub RdtscInfo: u64,
678}
679
680#[repr(C)]
681#[derive(Debug, Copy, Clone)]
682pub struct WHV_X64_APIC_SMI_CONTEXT {
683    pub ApicIcr: u64,
684}
685
686#[repr(C)]
687#[derive(Debug, Copy, Clone)]
688pub struct WHV_X64_APIC_INIT_SIPI_CONTEXT {
689    pub ApicIcr: u64,
690}
691
692#[repr(C)]
693#[derive(Debug, Copy, Clone)]
694pub struct WHV_X64_APIC_WRITE_CONTEXT {
695    pub Type: u32,
696    pub Reserved: u32,
697    pub WriteValue: u64,
698}
699
700#[repr(C)]
701#[derive(Debug, Copy, Clone, Default)]
702pub struct WHV_HYPERCALL_CONTEXT {
703    pub Rax: u64,
704    pub Rbx: u64,
705    pub Rcx: u64,
706    pub Rdx: u64,
707    pub R8: u64,
708    pub Rsi: u64,
709    pub Rdi: u64,
710    pub Reserved0: u64,
711    pub XmmRegisters: [WHV_UINT128; 6],
712    pub Reserved1: [u64; 2],
713}
714
715#[repr(C)]
716#[derive(Debug, Copy, Clone)]
717pub struct WHV_X64_CPUID_RESULT {
718    pub Function: u32,
719    pub Reserved: [u32; 3],
720    pub Eax: u32,
721    pub Ebx: u32,
722    pub Ecx: u32,
723    pub Edx: u32,
724}
725
726#[repr(C)]
727#[derive(Debug, Copy, Clone, PartialEq, Eq)]
728pub struct WHV_X64_LOCAL_APIC_EMULATION_MODE(pub u32);
729
730pub const WHvX64LocalApicEmulationModeNone: WHV_X64_LOCAL_APIC_EMULATION_MODE =
731    WHV_X64_LOCAL_APIC_EMULATION_MODE(0);
732pub const WHvX64LocalApicEmulationModeXApic: WHV_X64_LOCAL_APIC_EMULATION_MODE =
733    WHV_X64_LOCAL_APIC_EMULATION_MODE(1);
734pub const WHvX64LocalApicEmulationModeX2Apic: WHV_X64_LOCAL_APIC_EMULATION_MODE =
735    WHV_X64_LOCAL_APIC_EMULATION_MODE(2);
736
737#[repr(C)]
738#[derive(Debug, Copy, Clone)]
739pub struct WHV_X64_CPUID_RESULT2_FLAGS(pub u32);
740bitops!(WHV_X64_CPUID_RESULT2_FLAGS);
741
742pub const WHvX64CpuidResult2FlagSubleafSpecific: WHV_X64_CPUID_RESULT2_FLAGS =
743    WHV_X64_CPUID_RESULT2_FLAGS(0x00000001);
744pub const WHvX64CpuidResult2FlagVpSpecific: WHV_X64_CPUID_RESULT2_FLAGS =
745    WHV_X64_CPUID_RESULT2_FLAGS(0x00000002);
746
747#[repr(C)]
748#[derive(Debug, Copy, Clone)]
749pub struct WHV_X64_CPUID_RESULT2 {
750    Function: u32,
751    Index: u32,
752    VpIndex: u32,
753    Flags: WHV_X64_CPUID_RESULT2_FLAGS,
754    Output: WHV_CPUID_OUTPUT,
755    Mask: WHV_CPUID_OUTPUT,
756}
757
758#[repr(C)]
759#[derive(Debug, Copy, Clone)]
760pub struct WHV_X64_SEGMENT_REGISTER {
761    pub Base: u64,
762    pub Limit: u32,
763    pub Selector: u16,
764    pub Attributes: u16,
765}
766
767#[repr(C)]
768#[derive(Copy, Clone, Debug, Default)]
769pub struct WHV_X64_TABLE_REGISTER {
770    pub Pad: [u16; 3],
771    pub Limit: u16,
772    pub Base: u64,
773}
774
775#[repr(C)]
776#[derive(Debug, Copy, Clone)]
777pub struct WHV_SYNIC_SINT_DELIVERABLE_CONTEXT {
778    pub DeliverableSints: u16,
779    pub Reserved1: u16,
780    pub Reserved2: u32,
781}