1#![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 pub InstructionByteCount: u8,
431 pub Reserved: [u8; 3],
432 pub InstructionBytes: [u8; 16],
433
434 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, 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 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 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}