]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/Include/Register/ArchitecturalMsr.h
SignedCapsulePkg/SystemFirmwareUpdateDxe: Use progress API
[mirror_edk2.git] / UefiCpuPkg / Include / Register / ArchitecturalMsr.h
1 /** @file
2 Architectural MSR Definitions.
3
4 Provides defines for Machine Specific Registers(MSR) indexes. Data structures
5 are provided for MSRs that contain one or more bit fields. If the MSR value
6 returned is a single 32-bit or 64-bit value, then a data structure is not
7 provided for that MSR.
8
9 Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>
10 This program and the accompanying materials
11 are licensed and made available under the terms and conditions of the BSD License
12 which accompanies this distribution. The full text of the license may be found at
13 http://opensource.org/licenses/bsd-license.php
14
15 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
16 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17
18 @par Specification Reference:
19 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3,
20 September 2016, Chapter 35 Model-Specific-Registers (MSR), Section 35.1.
21
22 @par Specification Reference:
23 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3,
24 September 2016, Appendix A VMX Capability Reporting Facility, Section A.1.
25
26 @par Specification Reference:
27 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3,
28 September 2016, Appendix A VMX Capability Reporting Facility, Section A.6.
29
30 **/
31
32 #ifndef __ARCHITECTURAL_MSR_H__
33 #define __ARCHITECTURAL_MSR_H__
34
35 /**
36 See Section 35.22, "MSRs in Pentium Processors.". Pentium Processor (05_01H).
37
38 @param ECX MSR_IA32_P5_MC_ADDR (0x00000000)
39 @param EAX Lower 32-bits of MSR value.
40 @param EDX Upper 32-bits of MSR value.
41
42 <b>Example usage</b>
43 @code
44 UINT64 Msr;
45
46 Msr = AsmReadMsr64 (MSR_IA32_P5_MC_ADDR);
47 AsmWriteMsr64 (MSR_IA32_P5_MC_ADDR, Msr);
48 @endcode
49 @note MSR_IA32_P5_MC_ADDR is defined as IA32_P5_MC_ADDR in SDM.
50 **/
51 #define MSR_IA32_P5_MC_ADDR 0x00000000
52
53
54 /**
55 See Section 35.22, "MSRs in Pentium Processors.". DF_DM = 05_01H.
56
57 @param ECX MSR_IA32_P5_MC_TYPE (0x00000001)
58 @param EAX Lower 32-bits of MSR value.
59 @param EDX Upper 32-bits of MSR value.
60
61 <b>Example usage</b>
62 @code
63 UINT64 Msr;
64
65 Msr = AsmReadMsr64 (MSR_IA32_P5_MC_TYPE);
66 AsmWriteMsr64 (MSR_IA32_P5_MC_TYPE, Msr);
67 @endcode
68 @note MSR_IA32_P5_MC_TYPE is defined as IA32_P5_MC_TYPE in SDM.
69 **/
70 #define MSR_IA32_P5_MC_TYPE 0x00000001
71
72
73 /**
74 See Section 8.10.5, "Monitor/Mwait Address Range Determination.". Introduced
75 at Display Family / Display Model 0F_03H.
76
77 @param ECX MSR_IA32_MONITOR_FILTER_SIZE (0x00000006)
78 @param EAX Lower 32-bits of MSR value.
79 @param EDX Upper 32-bits of MSR value.
80
81 <b>Example usage</b>
82 @code
83 UINT64 Msr;
84
85 Msr = AsmReadMsr64 (MSR_IA32_MONITOR_FILTER_SIZE);
86 AsmWriteMsr64 (MSR_IA32_MONITOR_FILTER_SIZE, Msr);
87 @endcode
88 @note MSR_IA32_MONITOR_FILTER_SIZE is defined as IA32_MONITOR_FILTER_SIZE in SDM.
89 **/
90 #define MSR_IA32_MONITOR_FILTER_SIZE 0x00000006
91
92
93 /**
94 See Section 17.15, "Time-Stamp Counter.". Introduced at Display Family /
95 Display Model 05_01H.
96
97 @param ECX MSR_IA32_TIME_STAMP_COUNTER (0x00000010)
98 @param EAX Lower 32-bits of MSR value.
99 @param EDX Upper 32-bits of MSR value.
100
101 <b>Example usage</b>
102 @code
103 UINT64 Msr;
104
105 Msr = AsmReadMsr64 (MSR_IA32_TIME_STAMP_COUNTER);
106 AsmWriteMsr64 (MSR_IA32_TIME_STAMP_COUNTER, Msr);
107 @endcode
108 @note MSR_IA32_TIME_STAMP_COUNTER is defined as IA32_TIME_STAMP_COUNTER in SDM.
109 **/
110 #define MSR_IA32_TIME_STAMP_COUNTER 0x00000010
111
112
113 /**
114 Platform ID (RO) The operating system can use this MSR to determine "slot"
115 information for the processor and the proper microcode update to load.
116 Introduced at Display Family / Display Model 06_01H.
117
118 @param ECX MSR_IA32_PLATFORM_ID (0x00000017)
119 @param EAX Lower 32-bits of MSR value.
120 Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
121 @param EDX Upper 32-bits of MSR value.
122 Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
123
124 <b>Example usage</b>
125 @code
126 MSR_IA32_PLATFORM_ID_REGISTER Msr;
127
128 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PLATFORM_ID);
129 @endcode
130 @note MSR_IA32_PLATFORM_ID is defined as IA32_PLATFORM_ID in SDM.
131 **/
132 #define MSR_IA32_PLATFORM_ID 0x00000017
133
134 /**
135 MSR information returned for MSR index #MSR_IA32_PLATFORM_ID
136 **/
137 typedef union {
138 ///
139 /// Individual bit fields
140 ///
141 struct {
142 UINT32 Reserved1:32;
143 UINT32 Reserved2:18;
144 ///
145 /// [Bits 52:50] Platform Id (RO) Contains information concerning the
146 /// intended platform for the processor.
147 /// 52 51 50
148 /// -- -- --
149 /// 0 0 0 Processor Flag 0.
150 /// 0 0 1 Processor Flag 1
151 /// 0 1 0 Processor Flag 2
152 /// 0 1 1 Processor Flag 3
153 /// 1 0 0 Processor Flag 4
154 /// 1 0 1 Processor Flag 5
155 /// 1 1 0 Processor Flag 6
156 /// 1 1 1 Processor Flag 7
157 ///
158 UINT32 PlatformId:3;
159 UINT32 Reserved3:11;
160 } Bits;
161 ///
162 /// All bit fields as a 64-bit value
163 ///
164 UINT64 Uint64;
165 } MSR_IA32_PLATFORM_ID_REGISTER;
166
167
168 /**
169 06_01H.
170
171 @param ECX MSR_IA32_APIC_BASE (0x0000001B)
172 @param EAX Lower 32-bits of MSR value.
173 Described by the type MSR_IA32_APIC_BASE_REGISTER.
174 @param EDX Upper 32-bits of MSR value.
175 Described by the type MSR_IA32_APIC_BASE_REGISTER.
176
177 <b>Example usage</b>
178 @code
179 MSR_IA32_APIC_BASE_REGISTER Msr;
180
181 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE);
182 AsmWriteMsr64 (MSR_IA32_APIC_BASE, Msr.Uint64);
183 @endcode
184 @note MSR_IA32_APIC_BASE is defined as IA32_APIC_BASE in SDM.
185 **/
186 #define MSR_IA32_APIC_BASE 0x0000001B
187
188 /**
189 MSR information returned for MSR index #MSR_IA32_APIC_BASE
190 **/
191 typedef union {
192 ///
193 /// Individual bit fields
194 ///
195 struct {
196 UINT32 Reserved1:8;
197 ///
198 /// [Bit 8] BSP flag (R/W).
199 ///
200 UINT32 BSP:1;
201 UINT32 Reserved2:1;
202 ///
203 /// [Bit 10] Enable x2APIC mode. Introduced at Display Family / Display
204 /// Model 06_1AH.
205 ///
206 UINT32 EXTD:1;
207 ///
208 /// [Bit 11] APIC Global Enable (R/W).
209 ///
210 UINT32 EN:1;
211 ///
212 /// [Bits 31:12] APIC Base (R/W).
213 ///
214 UINT32 ApicBase:20;
215 ///
216 /// [Bits 63:32] APIC Base (R/W).
217 ///
218 UINT32 ApicBaseHi:32;
219 } Bits;
220 ///
221 /// All bit fields as a 64-bit value
222 ///
223 UINT64 Uint64;
224 } MSR_IA32_APIC_BASE_REGISTER;
225
226
227 /**
228 Control Features in Intel 64 Processor (R/W). If any one enumeration
229 condition for defined bit field holds.
230
231 @param ECX MSR_IA32_FEATURE_CONTROL (0x0000003A)
232 @param EAX Lower 32-bits of MSR value.
233 Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
234 @param EDX Upper 32-bits of MSR value.
235 Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
236
237 <b>Example usage</b>
238 @code
239 MSR_IA32_FEATURE_CONTROL_REGISTER Msr;
240
241 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
242 AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, Msr.Uint64);
243 @endcode
244 @note MSR_IA32_FEATURE_CONTROL is defined as IA32_FEATURE_CONTROL in SDM.
245 **/
246 #define MSR_IA32_FEATURE_CONTROL 0x0000003A
247
248 /**
249 MSR information returned for MSR index #MSR_IA32_FEATURE_CONTROL
250 **/
251 typedef union {
252 ///
253 /// Individual bit fields
254 ///
255 struct {
256 ///
257 /// [Bit 0] Lock bit (R/WO): (1 = locked). When set, locks this MSR from
258 /// being written, writes to this bit will result in GP(0). Note: Once the
259 /// Lock bit is set, the contents of this register cannot be modified.
260 /// Therefore the lock bit must be set after configuring support for Intel
261 /// Virtualization Technology and prior to transferring control to an
262 /// option ROM or the OS. Hence, once the Lock bit is set, the entire
263 /// IA32_FEATURE_CONTROL contents are preserved across RESET when PWRGOOD
264 /// is not deasserted. If any one enumeration condition for defined bit
265 /// field position greater than bit 0 holds.
266 ///
267 UINT32 Lock:1;
268 ///
269 /// [Bit 1] Enable VMX inside SMX operation (R/WL): This bit enables a
270 /// system executive to use VMX in conjunction with SMX to support
271 /// Intel(R) Trusted Execution Technology. BIOS must set this bit only
272 /// when the CPUID function 1 returns VMX feature flag and SMX feature
273 /// flag set (ECX bits 5 and 6 respectively). If CPUID.01H:ECX[5] = 1 &&
274 /// CPUID.01H:ECX[6] = 1.
275 ///
276 UINT32 EnableVmxInsideSmx:1;
277 ///
278 /// [Bit 2] Enable VMX outside SMX operation (R/WL): This bit enables VMX
279 /// for system executive that do not require SMX. BIOS must set this bit
280 /// only when the CPUID function 1 returns VMX feature flag set (ECX bit
281 /// 5). If CPUID.01H:ECX[5] = 1.
282 ///
283 UINT32 EnableVmxOutsideSmx:1;
284 UINT32 Reserved1:5;
285 ///
286 /// [Bits 14:8] SENTER Local Function Enables (R/WL): When set, each bit
287 /// in the field represents an enable control for a corresponding SENTER
288 /// function. This bit is supported only if CPUID.1:ECX.[bit 6] is set. If
289 /// CPUID.01H:ECX[6] = 1.
290 ///
291 UINT32 SenterLocalFunctionEnables:7;
292 ///
293 /// [Bit 15] SENTER Global Enable (R/WL): This bit must be set to enable
294 /// SENTER leaf functions. This bit is supported only if CPUID.1:ECX.[bit
295 /// 6] is set. If CPUID.01H:ECX[6] = 1.
296 ///
297 UINT32 SenterGlobalEnable:1;
298 UINT32 Reserved2:1;
299 ///
300 /// [Bit 17] SGX Launch Control Enable (R/WL): This bit must be set to
301 /// enable runtime reconfiguration of SGX Launch Control via
302 /// IA32_SGXLEPUBKEYHASHn MSR. If CPUID.(EAX=07H, ECX=0H): ECX[30] = 1.
303 ///
304 UINT32 SgxLaunchControlEnable:1;
305 ///
306 /// [Bit 18] SGX Global Enable (R/WL): This bit must be set to enable SGX
307 /// leaf functions. If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1.
308 ///
309 UINT32 SgxEnable:1;
310 UINT32 Reserved3:1;
311 ///
312 /// [Bit 20] LMCE On (R/WL): When set, system software can program the
313 /// MSRs associated with LMCE to configure delivery of some machine check
314 /// exceptions to a single logical processor. If IA32_MCG_CAP[27] = 1.
315 ///
316 UINT32 LmceOn:1;
317 UINT32 Reserved4:11;
318 UINT32 Reserved5:32;
319 } Bits;
320 ///
321 /// All bit fields as a 32-bit value
322 ///
323 UINT32 Uint32;
324 ///
325 /// All bit fields as a 64-bit value
326 ///
327 UINT64 Uint64;
328 } MSR_IA32_FEATURE_CONTROL_REGISTER;
329
330
331 /**
332 Per Logical Processor TSC Adjust (R/Write to clear). If CPUID.(EAX=07H,
333 ECX=0H): EBX[1] = 1. THREAD_ADJUST: Local offset value of the IA32_TSC for
334 a logical processor. Reset value is Zero. A write to IA32_TSC will modify
335 the local offset in IA32_TSC_ADJUST and the content of IA32_TSC, but does
336 not affect the internal invariant TSC hardware.
337
338 @param ECX MSR_IA32_TSC_ADJUST (0x0000003B)
339 @param EAX Lower 32-bits of MSR value.
340 @param EDX Upper 32-bits of MSR value.
341
342 <b>Example usage</b>
343 @code
344 UINT64 Msr;
345
346 Msr = AsmReadMsr64 (MSR_IA32_TSC_ADJUST);
347 AsmWriteMsr64 (MSR_IA32_TSC_ADJUST, Msr);
348 @endcode
349 @note MSR_IA32_TSC_ADJUST is defined as IA32_TSC_ADJUST in SDM.
350 **/
351 #define MSR_IA32_TSC_ADJUST 0x0000003B
352
353
354 /**
355 BIOS Update Trigger (W) Executing a WRMSR instruction to this MSR causes a
356 microcode update to be loaded into the processor. See Section 9.11.6,
357 "Microcode Update Loader." A processor may prevent writing to this MSR when
358 loading guest states on VM entries or saving guest states on VM exits.
359 Introduced at Display Family / Display Model 06_01H.
360
361 @param ECX MSR_IA32_BIOS_UPDT_TRIG (0x00000079)
362 @param EAX Lower 32-bits of MSR value.
363 @param EDX Upper 32-bits of MSR value.
364
365 <b>Example usage</b>
366 @code
367 UINT64 Msr;
368
369 Msr = 0;
370 AsmWriteMsr64 (MSR_IA32_BIOS_UPDT_TRIG, Msr);
371 @endcode
372 @note MSR_IA32_BIOS_UPDT_TRIG is defined as IA32_BIOS_UPDT_TRIG in SDM.
373 **/
374 #define MSR_IA32_BIOS_UPDT_TRIG 0x00000079
375
376
377 /**
378 BIOS Update Signature (RO) Returns the microcode update signature following
379 the execution of CPUID.01H. A processor may prevent writing to this MSR when
380 loading guest states on VM entries or saving guest states on VM exits.
381 Introduced at Display Family / Display Model 06_01H.
382
383 @param ECX MSR_IA32_BIOS_SIGN_ID (0x0000008B)
384 @param EAX Lower 32-bits of MSR value.
385 Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
386 @param EDX Upper 32-bits of MSR value.
387 Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
388
389 <b>Example usage</b>
390 @code
391 MSR_IA32_BIOS_SIGN_ID_REGISTER Msr;
392
393 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID);
394 @endcode
395 @note MSR_IA32_BIOS_SIGN_ID is defined as IA32_BIOS_SIGN_ID in SDM.
396 **/
397 #define MSR_IA32_BIOS_SIGN_ID 0x0000008B
398
399 /**
400 MSR information returned for MSR index #MSR_IA32_BIOS_SIGN_ID
401 **/
402 typedef union {
403 ///
404 /// Individual bit fields
405 ///
406 struct {
407 UINT32 Reserved:32;
408 ///
409 /// [Bits 63:32] Microcode update signature. This field contains the
410 /// signature of the currently loaded microcode update when read following
411 /// the execution of the CPUID instruction, function 1. It is required
412 /// that this register field be pre-loaded with zero prior to executing
413 /// the CPUID, function 1. If the field remains equal to zero, then there
414 /// is no microcode update loaded. Another nonzero value will be the
415 /// signature.
416 ///
417 UINT32 MicrocodeUpdateSignature:32;
418 } Bits;
419 ///
420 /// All bit fields as a 64-bit value
421 ///
422 UINT64 Uint64;
423 } MSR_IA32_BIOS_SIGN_ID_REGISTER;
424
425
426 /**
427 IA32_SGXLEPUBKEYHASH[(64*n+63):(64*n)] (R/W) Bits (64*n+63):(64*n) of the
428 SHA256 digest of the SIGSTRUCT.MODULUS for SGX Launch Enclave. On reset, the
429 default value is the digest of Intel's signing key. Read permitted If
430 CPUID.(EAX=12H,ECX=0H):EAX[0]=1, Write permitted if CPUID.(EAX=12H,ECX=0H):
431 EAX[0]=1 && IA32_FEATURE_CONTROL[17] = 1 && IA32_FEATURE_CONTROL[0] = 1.
432
433 @param ECX MSR_IA32_SGXLEPUBKEYHASHn
434 @param EAX Lower 32-bits of MSR value.
435 @param EDX Upper 32-bits of MSR value.
436
437 <b>Example usage</b>
438 @code
439 UINT64 Msr;
440
441 Msr = AsmReadMsr64 (MSR_IA32_SGXLEPUBKEYHASHn);
442 AsmWriteMsr64 (MSR_IA32_SGXLEPUBKEYHASHn, Msr);
443 @endcode
444 @note MSR_IA32_SGXLEPUBKEYHASH0 is defined as IA32_SGXLEPUBKEYHASH0 in SDM.
445 MSR_IA32_SGXLEPUBKEYHASH1 is defined as IA32_SGXLEPUBKEYHASH1 in SDM.
446 MSR_IA32_SGXLEPUBKEYHASH2 is defined as IA32_SGXLEPUBKEYHASH2 in SDM.
447 MSR_IA32_SGXLEPUBKEYHASH3 is defined as IA32_SGXLEPUBKEYHASH3 in SDM.
448 @{
449 **/
450 #define MSR_IA32_SGXLEPUBKEYHASH0 0x0000008C
451 #define MSR_IA32_SGXLEPUBKEYHASH1 0x0000008D
452 #define MSR_IA32_SGXLEPUBKEYHASH2 0x0000008E
453 #define MSR_IA32_SGXLEPUBKEYHASH3 0x0000008F
454 /// @}
455
456
457 /**
458 SMM Monitor Configuration (R/W). If CPUID.01H: ECX[5]=1 or CPUID.01H: ECX[6] =
459 1.
460
461 @param ECX MSR_IA32_SMM_MONITOR_CTL (0x0000009B)
462 @param EAX Lower 32-bits of MSR value.
463 Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
464 @param EDX Upper 32-bits of MSR value.
465 Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
466
467 <b>Example usage</b>
468 @code
469 MSR_IA32_SMM_MONITOR_CTL_REGISTER Msr;
470
471 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMM_MONITOR_CTL);
472 AsmWriteMsr64 (MSR_IA32_SMM_MONITOR_CTL, Msr.Uint64);
473 @endcode
474 @note MSR_IA32_SMM_MONITOR_CTL is defined as IA32_SMM_MONITOR_CTL in SDM.
475 **/
476 #define MSR_IA32_SMM_MONITOR_CTL 0x0000009B
477
478 /**
479 MSR information returned for MSR index #MSR_IA32_SMM_MONITOR_CTL
480 **/
481 typedef union {
482 ///
483 /// Individual bit fields
484 ///
485 struct {
486 ///
487 /// [Bit 0] Valid (R/W). The STM may be invoked using VMCALL only if this
488 /// bit is 1. Because VMCALL is used to activate the dual-monitor treatment
489 /// (see Section 34.15.6), the dual-monitor treatment cannot be activated
490 /// if the bit is 0. This bit is cleared when the logical processor is
491 /// reset.
492 ///
493 UINT32 Valid:1;
494 UINT32 Reserved1:1;
495 ///
496 /// [Bit 2] Determines whether executions of VMXOFF unblock SMIs under the
497 /// default treatment of SMIs and SMM. Executions of VMXOFF unblock SMIs
498 /// unless bit 2 is 1 (the value of bit 0 is irrelevant).
499 ///
500 UINT32 BlockSmi:1;
501 UINT32 Reserved2:9;
502 ///
503 /// [Bits 31:12] MSEG Base (R/W).
504 ///
505 UINT32 MsegBase:20;
506 UINT32 Reserved3:32;
507 } Bits;
508 ///
509 /// All bit fields as a 32-bit value
510 ///
511 UINT32 Uint32;
512 ///
513 /// All bit fields as a 64-bit value
514 ///
515 UINT64 Uint64;
516 } MSR_IA32_SMM_MONITOR_CTL_REGISTER;
517
518 /**
519 MSEG header that is located at the physical address specified by the MsegBase
520 field of #MSR_IA32_SMM_MONITOR_CTL_REGISTER.
521 **/
522 typedef struct {
523 ///
524 /// Different processors may use different MSEG revision identifiers. These
525 /// identifiers enable software to avoid using an MSEG header formatted for
526 /// one processor on a processor that uses a different format. Software can
527 /// discover the MSEG revision identifier that a processor uses by reading
528 /// the VMX capability MSR IA32_VMX_MISC.
529 //
530 UINT32 MsegHeaderRevision;
531 ///
532 /// Bits 31:1 of this field are reserved and must be zero. Bit 0 of the field
533 /// is the IA-32e mode SMM feature bit. It indicates whether the logical
534 /// processor will be in IA-32e mode after the STM is activated.
535 ///
536 UINT32 MonitorFeatures;
537 UINT32 GdtrLimit;
538 UINT32 GdtrBaseOffset;
539 UINT32 CsSelector;
540 UINT32 EipOffset;
541 UINT32 EspOffset;
542 UINT32 Cr3Offset;
543 ///
544 /// Pad header so total size is 2KB
545 ///
546 UINT8 Reserved[SIZE_2KB - 8 * sizeof (UINT32)];
547 } MSEG_HEADER;
548
549 ///
550 /// @{ Define values for the MonitorFeatures field of #MSEG_HEADER
551 ///
552 #define STM_FEATURES_IA32E 0x1
553 ///
554 /// @}
555 ///
556
557 /**
558 Base address of the logical processor's SMRAM image (RO, SMM only). If
559 IA32_VMX_MISC[15].
560
561 @param ECX MSR_IA32_SMBASE (0x0000009E)
562 @param EAX Lower 32-bits of MSR value.
563 @param EDX Upper 32-bits of MSR value.
564
565 <b>Example usage</b>
566 @code
567 UINT64 Msr;
568
569 Msr = AsmReadMsr64 (MSR_IA32_SMBASE);
570 @endcode
571 @note MSR_IA32_SMBASE is defined as IA32_SMBASE in SDM.
572 **/
573 #define MSR_IA32_SMBASE 0x0000009E
574
575
576 /**
577 General Performance Counters (R/W).
578 MSR_IA32_PMCn is supported if CPUID.0AH: EAX[15:8] > n.
579
580 @param ECX MSR_IA32_PMCn
581 @param EAX Lower 32-bits of MSR value.
582 @param EDX Upper 32-bits of MSR value.
583
584 <b>Example usage</b>
585 @code
586 UINT64 Msr;
587
588 Msr = AsmReadMsr64 (MSR_IA32_PMC0);
589 AsmWriteMsr64 (MSR_IA32_PMC0, Msr);
590 @endcode
591 @note MSR_IA32_PMC0 is defined as IA32_PMC0 in SDM.
592 MSR_IA32_PMC1 is defined as IA32_PMC1 in SDM.
593 MSR_IA32_PMC2 is defined as IA32_PMC2 in SDM.
594 MSR_IA32_PMC3 is defined as IA32_PMC3 in SDM.
595 MSR_IA32_PMC4 is defined as IA32_PMC4 in SDM.
596 MSR_IA32_PMC5 is defined as IA32_PMC5 in SDM.
597 MSR_IA32_PMC6 is defined as IA32_PMC6 in SDM.
598 MSR_IA32_PMC7 is defined as IA32_PMC7 in SDM.
599 @{
600 **/
601 #define MSR_IA32_PMC0 0x000000C1
602 #define MSR_IA32_PMC1 0x000000C2
603 #define MSR_IA32_PMC2 0x000000C3
604 #define MSR_IA32_PMC3 0x000000C4
605 #define MSR_IA32_PMC4 0x000000C5
606 #define MSR_IA32_PMC5 0x000000C6
607 #define MSR_IA32_PMC6 0x000000C7
608 #define MSR_IA32_PMC7 0x000000C8
609 /// @}
610
611
612 /**
613 TSC Frequency Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] = 1.
614 C0_MCNT: C0 TSC Frequency Clock Count Increments at fixed interval (relative
615 to TSC freq.) when the logical processor is in C0. Cleared upon overflow /
616 wrap-around of IA32_APERF.
617
618 @param ECX MSR_IA32_MPERF (0x000000E7)
619 @param EAX Lower 32-bits of MSR value.
620 @param EDX Upper 32-bits of MSR value.
621
622 <b>Example usage</b>
623 @code
624 UINT64 Msr;
625
626 Msr = AsmReadMsr64 (MSR_IA32_MPERF);
627 AsmWriteMsr64 (MSR_IA32_MPERF, Msr);
628 @endcode
629 @note MSR_IA32_MPERF is defined as IA32_MPERF in SDM.
630 **/
631 #define MSR_IA32_MPERF 0x000000E7
632
633
634 /**
635 Actual Performance Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] =
636 1. C0_ACNT: C0 Actual Frequency Clock Count Accumulates core clock counts at
637 the coordinated clock frequency, when the logical processor is in C0.
638 Cleared upon overflow / wrap-around of IA32_MPERF.
639
640 @param ECX MSR_IA32_APERF (0x000000E8)
641 @param EAX Lower 32-bits of MSR value.
642 @param EDX Upper 32-bits of MSR value.
643
644 <b>Example usage</b>
645 @code
646 UINT64 Msr;
647
648 Msr = AsmReadMsr64 (MSR_IA32_APERF);
649 AsmWriteMsr64 (MSR_IA32_APERF, Msr);
650 @endcode
651 @note MSR_IA32_APERF is defined as IA32_APERF in SDM.
652 **/
653 #define MSR_IA32_APERF 0x000000E8
654
655
656 /**
657 MTRR Capability (RO) Section 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR.".
658 Introduced at Display Family / Display Model 06_01H.
659
660 @param ECX MSR_IA32_MTRRCAP (0x000000FE)
661 @param EAX Lower 32-bits of MSR value.
662 Described by the type MSR_IA32_MTRRCAP_REGISTER.
663 @param EDX Upper 32-bits of MSR value.
664 Described by the type MSR_IA32_MTRRCAP_REGISTER.
665
666 <b>Example usage</b>
667 @code
668 MSR_IA32_MTRRCAP_REGISTER Msr;
669
670 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP);
671 @endcode
672 @note MSR_IA32_MTRRCAP is defined as IA32_MTRRCAP in SDM.
673 **/
674 #define MSR_IA32_MTRRCAP 0x000000FE
675
676 /**
677 MSR information returned for MSR index #MSR_IA32_MTRRCAP
678 **/
679 typedef union {
680 ///
681 /// Individual bit fields
682 ///
683 struct {
684 ///
685 /// [Bits 7:0] VCNT: The number of variable memory type ranges in the
686 /// processor.
687 ///
688 UINT32 VCNT:8;
689 ///
690 /// [Bit 8] Fixed range MTRRs are supported when set.
691 ///
692 UINT32 FIX:1;
693 UINT32 Reserved1:1;
694 ///
695 /// [Bit 10] WC Supported when set.
696 ///
697 UINT32 WC:1;
698 ///
699 /// [Bit 11] SMRR Supported when set.
700 ///
701 UINT32 SMRR:1;
702 UINT32 Reserved2:20;
703 UINT32 Reserved3:32;
704 } Bits;
705 ///
706 /// All bit fields as a 32-bit value
707 ///
708 UINT32 Uint32;
709 ///
710 /// All bit fields as a 64-bit value
711 ///
712 UINT64 Uint64;
713 } MSR_IA32_MTRRCAP_REGISTER;
714
715
716 /**
717 SYSENTER_CS_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
718
719 @param ECX MSR_IA32_SYSENTER_CS (0x00000174)
720 @param EAX Lower 32-bits of MSR value.
721 Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
722 @param EDX Upper 32-bits of MSR value.
723 Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
724
725 <b>Example usage</b>
726 @code
727 MSR_IA32_SYSENTER_CS_REGISTER Msr;
728
729 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SYSENTER_CS);
730 AsmWriteMsr64 (MSR_IA32_SYSENTER_CS, Msr.Uint64);
731 @endcode
732 @note MSR_IA32_SYSENTER_CS is defined as IA32_SYSENTER_CS in SDM.
733 **/
734 #define MSR_IA32_SYSENTER_CS 0x00000174
735
736 /**
737 MSR information returned for MSR index #MSR_IA32_SYSENTER_CS
738 **/
739 typedef union {
740 ///
741 /// Individual bit fields
742 ///
743 struct {
744 ///
745 /// [Bits 15:0] CS Selector.
746 ///
747 UINT32 CS:16;
748 UINT32 Reserved1:16;
749 UINT32 Reserved2:32;
750 } Bits;
751 ///
752 /// All bit fields as a 32-bit value
753 ///
754 UINT32 Uint32;
755 ///
756 /// All bit fields as a 64-bit value
757 ///
758 UINT64 Uint64;
759 } MSR_IA32_SYSENTER_CS_REGISTER;
760
761
762 /**
763 SYSENTER_ESP_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
764
765 @param ECX MSR_IA32_SYSENTER_ESP (0x00000175)
766 @param EAX Lower 32-bits of MSR value.
767 @param EDX Upper 32-bits of MSR value.
768
769 <b>Example usage</b>
770 @code
771 UINT64 Msr;
772
773 Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_ESP);
774 AsmWriteMsr64 (MSR_IA32_SYSENTER_ESP, Msr);
775 @endcode
776 @note MSR_IA32_SYSENTER_ESP is defined as IA32_SYSENTER_ESP in SDM.
777 **/
778 #define MSR_IA32_SYSENTER_ESP 0x00000175
779
780
781 /**
782 SYSENTER_EIP_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
783
784 @param ECX MSR_IA32_SYSENTER_EIP (0x00000176)
785 @param EAX Lower 32-bits of MSR value.
786 @param EDX Upper 32-bits of MSR value.
787
788 <b>Example usage</b>
789 @code
790 UINT64 Msr;
791
792 Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_EIP);
793 AsmWriteMsr64 (MSR_IA32_SYSENTER_EIP, Msr);
794 @endcode
795 @note MSR_IA32_SYSENTER_EIP is defined as IA32_SYSENTER_EIP in SDM.
796 **/
797 #define MSR_IA32_SYSENTER_EIP 0x00000176
798
799
800 /**
801 Global Machine Check Capability (RO). Introduced at Display Family / Display
802 Model 06_01H.
803
804 @param ECX MSR_IA32_MCG_CAP (0x00000179)
805 @param EAX Lower 32-bits of MSR value.
806 Described by the type MSR_IA32_MCG_CAP_REGISTER.
807 @param EDX Upper 32-bits of MSR value.
808 Described by the type MSR_IA32_MCG_CAP_REGISTER.
809
810 <b>Example usage</b>
811 @code
812 MSR_IA32_MCG_CAP_REGISTER Msr;
813
814 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
815 @endcode
816 @note MSR_IA32_MCG_CAP is defined as IA32_MCG_CAP in SDM.
817 **/
818 #define MSR_IA32_MCG_CAP 0x00000179
819
820 /**
821 MSR information returned for MSR index #MSR_IA32_MCG_CAP
822 **/
823 typedef union {
824 ///
825 /// Individual bit fields
826 ///
827 struct {
828 ///
829 /// [Bits 7:0] Count: Number of reporting banks.
830 ///
831 UINT32 Count:8;
832 ///
833 /// [Bit 8] MCG_CTL_P: IA32_MCG_CTL is present if this bit is set.
834 ///
835 UINT32 MCG_CTL_P:1;
836 ///
837 /// [Bit 9] MCG_EXT_P: Extended machine check state registers are present
838 /// if this bit is set.
839 ///
840 UINT32 MCG_EXT_P:1;
841 ///
842 /// [Bit 10] MCP_CMCI_P: Support for corrected MC error event is present.
843 /// Introduced at Display Family / Display Model 06_01H.
844 ///
845 UINT32 MCP_CMCI_P:1;
846 ///
847 /// [Bit 11] MCG_TES_P: Threshold-based error status register are present
848 /// if this bit is set.
849 ///
850 UINT32 MCG_TES_P:1;
851 UINT32 Reserved1:4;
852 ///
853 /// [Bits 23:16] MCG_EXT_CNT: Number of extended machine check state
854 /// registers present.
855 ///
856 UINT32 MCG_EXT_CNT:8;
857 ///
858 /// [Bit 24] MCG_SER_P: The processor supports software error recovery if
859 /// this bit is set.
860 ///
861 UINT32 MCG_SER_P:1;
862 UINT32 Reserved2:1;
863 ///
864 /// [Bit 26] MCG_ELOG_P: Indicates that the processor allows platform
865 /// firmware to be invoked when an error is detected so that it may
866 /// provide additional platform specific information in an ACPI format
867 /// "Generic Error Data Entry" that augments the data included in machine
868 /// check bank registers. Introduced at Display Family / Display Model
869 /// 06_3EH.
870 ///
871 UINT32 MCG_ELOG_P:1;
872 ///
873 /// [Bit 27] MCG_LMCE_P: Indicates that the processor support extended
874 /// state in IA32_MCG_STATUS and associated MSR necessary to configure
875 /// Local Machine Check Exception (LMCE). Introduced at Display Family /
876 /// Display Model 06_3EH.
877 ///
878 UINT32 MCG_LMCE_P:1;
879 UINT32 Reserved3:4;
880 UINT32 Reserved4:32;
881 } Bits;
882 ///
883 /// All bit fields as a 32-bit value
884 ///
885 UINT32 Uint32;
886 ///
887 /// All bit fields as a 64-bit value
888 ///
889 UINT64 Uint64;
890 } MSR_IA32_MCG_CAP_REGISTER;
891
892
893 /**
894 Global Machine Check Status (R/W0). Introduced at Display Family / Display
895 Model 06_01H.
896
897 @param ECX MSR_IA32_MCG_STATUS (0x0000017A)
898 @param EAX Lower 32-bits of MSR value.
899 Described by the type MSR_IA32_MCG_STATUS_REGISTER.
900 @param EDX Upper 32-bits of MSR value.
901 Described by the type MSR_IA32_MCG_STATUS_REGISTER.
902
903 <b>Example usage</b>
904 @code
905 MSR_IA32_MCG_STATUS_REGISTER Msr;
906
907 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_STATUS);
908 AsmWriteMsr64 (MSR_IA32_MCG_STATUS, Msr.Uint64);
909 @endcode
910 @note MSR_IA32_MCG_STATUS is defined as IA32_MCG_STATUS in SDM.
911 **/
912 #define MSR_IA32_MCG_STATUS 0x0000017A
913
914 /**
915 MSR information returned for MSR index #MSR_IA32_MCG_STATUS
916 **/
917 typedef union {
918 ///
919 /// Individual bit fields
920 ///
921 struct {
922 ///
923 /// [Bit 0] RIPV. Restart IP valid. Introduced at Display Family / Display
924 /// Model 06_01H.
925 ///
926 UINT32 RIPV:1;
927 ///
928 /// [Bit 1] EIPV. Error IP valid. Introduced at Display Family / Display
929 /// Model 06_01H.
930 ///
931 UINT32 EIPV:1;
932 ///
933 /// [Bit 2] MCIP. Machine check in progress. Introduced at Display Family
934 /// / Display Model 06_01H.
935 ///
936 UINT32 MCIP:1;
937 ///
938 /// [Bit 3] LMCE_S. If IA32_MCG_CAP.LMCE_P[2 7] =1.
939 ///
940 UINT32 LMCE_S:1;
941 UINT32 Reserved1:28;
942 UINT32 Reserved2:32;
943 } Bits;
944 ///
945 /// All bit fields as a 32-bit value
946 ///
947 UINT32 Uint32;
948 ///
949 /// All bit fields as a 64-bit value
950 ///
951 UINT64 Uint64;
952 } MSR_IA32_MCG_STATUS_REGISTER;
953
954
955 /**
956 Global Machine Check Control (R/W). If IA32_MCG_CAP.CTL_P[8] =1.
957
958 @param ECX MSR_IA32_MCG_CTL (0x0000017B)
959 @param EAX Lower 32-bits of MSR value.
960 @param EDX Upper 32-bits of MSR value.
961
962 <b>Example usage</b>
963 @code
964 UINT64 Msr;
965
966 Msr = AsmReadMsr64 (MSR_IA32_MCG_CTL);
967 AsmWriteMsr64 (MSR_IA32_MCG_CTL, Msr);
968 @endcode
969 @note MSR_IA32_MCG_CTL is defined as IA32_MCG_CTL in SDM.
970 **/
971 #define MSR_IA32_MCG_CTL 0x0000017B
972
973
974 /**
975 Performance Event Select Register n (R/W). If CPUID.0AH: EAX[15:8] > n.
976
977 @param ECX MSR_IA32_PERFEVTSELn
978 @param EAX Lower 32-bits of MSR value.
979 Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
980 @param EDX Upper 32-bits of MSR value.
981 Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
982
983 <b>Example usage</b>
984 @code
985 MSR_IA32_PERFEVTSEL_REGISTER Msr;
986
987 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERFEVTSEL0);
988 AsmWriteMsr64 (MSR_IA32_PERFEVTSEL0, Msr.Uint64);
989 @endcode
990 @note MSR_IA32_PERFEVTSEL0 is defined as IA32_PERFEVTSEL0 in SDM.
991 MSR_IA32_PERFEVTSEL1 is defined as IA32_PERFEVTSEL1 in SDM.
992 MSR_IA32_PERFEVTSEL2 is defined as IA32_PERFEVTSEL2 in SDM.
993 MSR_IA32_PERFEVTSEL3 is defined as IA32_PERFEVTSEL3 in SDM.
994 @{
995 **/
996 #define MSR_IA32_PERFEVTSEL0 0x00000186
997 #define MSR_IA32_PERFEVTSEL1 0x00000187
998 #define MSR_IA32_PERFEVTSEL2 0x00000188
999 #define MSR_IA32_PERFEVTSEL3 0x00000189
1000 /// @}
1001
1002 /**
1003 MSR information returned for MSR indexes #MSR_IA32_PERFEVTSEL0 to
1004 #MSR_IA32_PERFEVTSEL3
1005 **/
1006 typedef union {
1007 ///
1008 /// Individual bit fields
1009 ///
1010 struct {
1011 ///
1012 /// [Bits 7:0] Event Select: Selects a performance event logic unit.
1013 ///
1014 UINT32 EventSelect:8;
1015 ///
1016 /// [Bits 15:8] UMask: Qualifies the microarchitectural condition to
1017 /// detect on the selected event logic.
1018 ///
1019 UINT32 UMASK:8;
1020 ///
1021 /// [Bit 16] USR: Counts while in privilege level is not ring 0.
1022 ///
1023 UINT32 USR:1;
1024 ///
1025 /// [Bit 17] OS: Counts while in privilege level is ring 0.
1026 ///
1027 UINT32 OS:1;
1028 ///
1029 /// [Bit 18] Edge: Enables edge detection if set.
1030 ///
1031 UINT32 E:1;
1032 ///
1033 /// [Bit 19] PC: enables pin control.
1034 ///
1035 UINT32 PC:1;
1036 ///
1037 /// [Bit 20] INT: enables interrupt on counter overflow.
1038 ///
1039 UINT32 INT:1;
1040 ///
1041 /// [Bit 21] AnyThread: When set to 1, it enables counting the associated
1042 /// event conditions occurring across all logical processors sharing a
1043 /// processor core. When set to 0, the counter only increments the
1044 /// associated event conditions occurring in the logical processor which
1045 /// programmed the MSR.
1046 ///
1047 UINT32 ANY:1;
1048 ///
1049 /// [Bit 22] EN: enables the corresponding performance counter to commence
1050 /// counting when this bit is set.
1051 ///
1052 UINT32 EN:1;
1053 ///
1054 /// [Bit 23] INV: invert the CMASK.
1055 ///
1056 UINT32 INV:1;
1057 ///
1058 /// [Bits 31:24] CMASK: When CMASK is not zero, the corresponding
1059 /// performance counter increments each cycle if the event count is
1060 /// greater than or equal to the CMASK.
1061 ///
1062 UINT32 CMASK:8;
1063 UINT32 Reserved:32;
1064 } Bits;
1065 ///
1066 /// All bit fields as a 32-bit value
1067 ///
1068 UINT32 Uint32;
1069 ///
1070 /// All bit fields as a 64-bit value
1071 ///
1072 UINT64 Uint64;
1073 } MSR_IA32_PERFEVTSEL_REGISTER;
1074
1075
1076 /**
1077 Current performance state(P-State) operating point (RO). Introduced at
1078 Display Family / Display Model 0F_03H.
1079
1080 @param ECX MSR_IA32_PERF_STATUS (0x00000198)
1081 @param EAX Lower 32-bits of MSR value.
1082 Described by the type MSR_IA32_PERF_STATUS_REGISTER.
1083 @param EDX Upper 32-bits of MSR value.
1084 Described by the type MSR_IA32_PERF_STATUS_REGISTER.
1085
1086 <b>Example usage</b>
1087 @code
1088 MSR_IA32_PERF_STATUS_REGISTER Msr;
1089
1090 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_STATUS);
1091 @endcode
1092 @note MSR_IA32_PERF_STATUS is defined as IA32_PERF_STATUS in SDM.
1093 **/
1094 #define MSR_IA32_PERF_STATUS 0x00000198
1095
1096 /**
1097 MSR information returned for MSR index #MSR_IA32_PERF_STATUS
1098 **/
1099 typedef union {
1100 ///
1101 /// Individual bit fields
1102 ///
1103 struct {
1104 ///
1105 /// [Bits 15:0] Current performance State Value.
1106 ///
1107 UINT32 State:16;
1108 UINT32 Reserved1:16;
1109 UINT32 Reserved2:32;
1110 } Bits;
1111 ///
1112 /// All bit fields as a 32-bit value
1113 ///
1114 UINT32 Uint32;
1115 ///
1116 /// All bit fields as a 64-bit value
1117 ///
1118 UINT64 Uint64;
1119 } MSR_IA32_PERF_STATUS_REGISTER;
1120
1121
1122 /**
1123 (R/W). Introduced at Display Family / Display Model 0F_03H.
1124
1125 @param ECX MSR_IA32_PERF_CTL (0x00000199)
1126 @param EAX Lower 32-bits of MSR value.
1127 Described by the type MSR_IA32_PERF_CTL_REGISTER.
1128 @param EDX Upper 32-bits of MSR value.
1129 Described by the type MSR_IA32_PERF_CTL_REGISTER.
1130
1131 <b>Example usage</b>
1132 @code
1133 MSR_IA32_PERF_CTL_REGISTER Msr;
1134
1135 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CTL);
1136 AsmWriteMsr64 (MSR_IA32_PERF_CTL, Msr.Uint64);
1137 @endcode
1138 @note MSR_IA32_PERF_CTL is defined as IA32_PERF_CTL in SDM.
1139 **/
1140 #define MSR_IA32_PERF_CTL 0x00000199
1141
1142 /**
1143 MSR information returned for MSR index #MSR_IA32_PERF_CTL
1144 **/
1145 typedef union {
1146 ///
1147 /// Individual bit fields
1148 ///
1149 struct {
1150 ///
1151 /// [Bits 15:0] Target performance State Value.
1152 ///
1153 UINT32 TargetState:16;
1154 UINT32 Reserved1:16;
1155 ///
1156 /// [Bit 32] IDA Engage. (R/W) When set to 1: disengages IDA. 06_0FH
1157 /// (Mobile only).
1158 ///
1159 UINT32 IDA:1;
1160 UINT32 Reserved2:31;
1161 } Bits;
1162 ///
1163 /// All bit fields as a 64-bit value
1164 ///
1165 UINT64 Uint64;
1166 } MSR_IA32_PERF_CTL_REGISTER;
1167
1168
1169 /**
1170 Clock Modulation Control (R/W) See Section 14.7.3, "Software Controlled
1171 Clock Modulation.". If CPUID.01H:EDX[22] = 1.
1172
1173 @param ECX MSR_IA32_CLOCK_MODULATION (0x0000019A)
1174 @param EAX Lower 32-bits of MSR value.
1175 Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
1176 @param EDX Upper 32-bits of MSR value.
1177 Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
1178
1179 <b>Example usage</b>
1180 @code
1181 MSR_IA32_CLOCK_MODULATION_REGISTER Msr;
1182
1183 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_CLOCK_MODULATION);
1184 AsmWriteMsr64 (MSR_IA32_CLOCK_MODULATION, Msr.Uint64);
1185 @endcode
1186 @note MSR_IA32_CLOCK_MODULATION is defined as IA32_CLOCK_MODULATION in SDM.
1187 **/
1188 #define MSR_IA32_CLOCK_MODULATION 0x0000019A
1189
1190 /**
1191 MSR information returned for MSR index #MSR_IA32_CLOCK_MODULATION
1192 **/
1193 typedef union {
1194 ///
1195 /// Individual bit fields
1196 ///
1197 struct {
1198 ///
1199 /// [Bit 0] Extended On-Demand Clock Modulation Duty Cycle:. If
1200 /// CPUID.06H:EAX[5] = 1.
1201 ///
1202 UINT32 ExtendedOnDemandClockModulationDutyCycle:1;
1203 ///
1204 /// [Bits 3:1] On-Demand Clock Modulation Duty Cycle: Specific encoded
1205 /// values for target duty cycle modulation. If CPUID.01H:EDX[22] = 1.
1206 ///
1207 UINT32 OnDemandClockModulationDutyCycle:3;
1208 ///
1209 /// [Bit 4] On-Demand Clock Modulation Enable: Set 1 to enable modulation.
1210 /// If CPUID.01H:EDX[22] = 1.
1211 ///
1212 UINT32 OnDemandClockModulationEnable:1;
1213 UINT32 Reserved1:27;
1214 UINT32 Reserved2:32;
1215 } Bits;
1216 ///
1217 /// All bit fields as a 32-bit value
1218 ///
1219 UINT32 Uint32;
1220 ///
1221 /// All bit fields as a 64-bit value
1222 ///
1223 UINT64 Uint64;
1224 } MSR_IA32_CLOCK_MODULATION_REGISTER;
1225
1226
1227 /**
1228 Thermal Interrupt Control (R/W) Enables and disables the generation of an
1229 interrupt on temperature transitions detected with the processor's thermal
1230 sensors and thermal monitor. See Section 14.7.2, "Thermal Monitor.".
1231 If CPUID.01H:EDX[22] = 1
1232
1233 @param ECX MSR_IA32_THERM_INTERRUPT (0x0000019B)
1234 @param EAX Lower 32-bits of MSR value.
1235 Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
1236 @param EDX Upper 32-bits of MSR value.
1237 Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
1238
1239 <b>Example usage</b>
1240 @code
1241 MSR_IA32_THERM_INTERRUPT_REGISTER Msr;
1242
1243 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_INTERRUPT);
1244 AsmWriteMsr64 (MSR_IA32_THERM_INTERRUPT, Msr.Uint64);
1245 @endcode
1246 @note MSR_IA32_THERM_INTERRUPT is defined as IA32_THERM_INTERRUPT in SDM.
1247 **/
1248 #define MSR_IA32_THERM_INTERRUPT 0x0000019B
1249
1250 /**
1251 MSR information returned for MSR index #MSR_IA32_THERM_INTERRUPT
1252 **/
1253 typedef union {
1254 ///
1255 /// Individual bit fields
1256 ///
1257 struct {
1258 ///
1259 /// [Bit 0] High-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1260 ///
1261 UINT32 HighTempEnable:1;
1262 ///
1263 /// [Bit 1] Low-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1264 ///
1265 UINT32 LowTempEnable:1;
1266 ///
1267 /// [Bit 2] PROCHOT# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1268 ///
1269 UINT32 PROCHOT_Enable:1;
1270 ///
1271 /// [Bit 3] FORCEPR# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1272 ///
1273 UINT32 FORCEPR_Enable:1;
1274 ///
1275 /// [Bit 4] Critical Temperature Interrupt Enable.
1276 /// If CPUID.01H:EDX[22] = 1.
1277 ///
1278 UINT32 CriticalTempEnable:1;
1279 UINT32 Reserved1:3;
1280 ///
1281 /// [Bits 14:8] Threshold #1 Value. If CPUID.01H:EDX[22] = 1.
1282 ///
1283 UINT32 Threshold1:7;
1284 ///
1285 /// [Bit 15] Threshold #1 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1286 ///
1287 UINT32 Threshold1Enable:1;
1288 ///
1289 /// [Bits 22:16] Threshold #2 Value. If CPUID.01H:EDX[22] = 1.
1290 ///
1291 UINT32 Threshold2:7;
1292 ///
1293 /// [Bit 23] Threshold #2 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
1294 ///
1295 UINT32 Threshold2Enable:1;
1296 ///
1297 /// [Bit 24] Power Limit Notification Enable. If CPUID.06H:EAX[4] = 1.
1298 ///
1299 UINT32 PowerLimitNotificationEnable:1;
1300 UINT32 Reserved2:7;
1301 UINT32 Reserved3:32;
1302 } Bits;
1303 ///
1304 /// All bit fields as a 32-bit value
1305 ///
1306 UINT32 Uint32;
1307 ///
1308 /// All bit fields as a 64-bit value
1309 ///
1310 UINT64 Uint64;
1311 } MSR_IA32_THERM_INTERRUPT_REGISTER;
1312
1313
1314 /**
1315 Thermal Status Information (RO) Contains status information about the
1316 processor's thermal sensor and automatic thermal monitoring facilities. See
1317 Section 14.7.2, "Thermal Monitor". If CPUID.01H:EDX[22] = 1.
1318
1319 @param ECX MSR_IA32_THERM_STATUS (0x0000019C)
1320 @param EAX Lower 32-bits of MSR value.
1321 Described by the type MSR_IA32_THERM_STATUS_REGISTER.
1322 @param EDX Upper 32-bits of MSR value.
1323 Described by the type MSR_IA32_THERM_STATUS_REGISTER.
1324
1325 <b>Example usage</b>
1326 @code
1327 MSR_IA32_THERM_STATUS_REGISTER Msr;
1328
1329 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_STATUS);
1330 @endcode
1331 @note MSR_IA32_THERM_STATUS is defined as IA32_THERM_STATUS in SDM.
1332 **/
1333 #define MSR_IA32_THERM_STATUS 0x0000019C
1334
1335 /**
1336 MSR information returned for MSR index #MSR_IA32_THERM_STATUS
1337 **/
1338 typedef union {
1339 ///
1340 /// Individual bit fields
1341 ///
1342 struct {
1343 ///
1344 /// [Bit 0] Thermal Status (RO):. If CPUID.01H:EDX[22] = 1.
1345 ///
1346 UINT32 ThermalStatus:1;
1347 ///
1348 /// [Bit 1] Thermal Status Log (R/W):. If CPUID.01H:EDX[22] = 1.
1349 ///
1350 UINT32 ThermalStatusLog:1;
1351 ///
1352 /// [Bit 2] PROCHOT # or FORCEPR# event (RO). If CPUID.01H:EDX[22] = 1.
1353 ///
1354 UINT32 PROCHOT_FORCEPR_Event:1;
1355 ///
1356 /// [Bit 3] PROCHOT # or FORCEPR# log (R/WC0). If CPUID.01H:EDX[22] = 1.
1357 ///
1358 UINT32 PROCHOT_FORCEPR_Log:1;
1359 ///
1360 /// [Bit 4] Critical Temperature Status (RO). If CPUID.01H:EDX[22] = 1.
1361 ///
1362 UINT32 CriticalTempStatus:1;
1363 ///
1364 /// [Bit 5] Critical Temperature Status log (R/WC0).
1365 /// If CPUID.01H:EDX[22] = 1.
1366 ///
1367 UINT32 CriticalTempStatusLog:1;
1368 ///
1369 /// [Bit 6] Thermal Threshold #1 Status (RO). If CPUID.01H:ECX[8] = 1.
1370 ///
1371 UINT32 ThermalThreshold1Status:1;
1372 ///
1373 /// [Bit 7] Thermal Threshold #1 log (R/WC0). If CPUID.01H:ECX[8] = 1.
1374 ///
1375 UINT32 ThermalThreshold1Log:1;
1376 ///
1377 /// [Bit 8] Thermal Threshold #2 Status (RO). If CPUID.01H:ECX[8] = 1.
1378 ///
1379 UINT32 ThermalThreshold2Status:1;
1380 ///
1381 /// [Bit 9] Thermal Threshold #2 log (R/WC0). If CPUID.01H:ECX[8] = 1.
1382 ///
1383 UINT32 ThermalThreshold2Log:1;
1384 ///
1385 /// [Bit 10] Power Limitation Status (RO). If CPUID.06H:EAX[4] = 1.
1386 ///
1387 UINT32 PowerLimitStatus:1;
1388 ///
1389 /// [Bit 11] Power Limitation log (R/WC0). If CPUID.06H:EAX[4] = 1.
1390 ///
1391 UINT32 PowerLimitLog:1;
1392 ///
1393 /// [Bit 12] Current Limit Status (RO). If CPUID.06H:EAX[7] = 1.
1394 ///
1395 UINT32 CurrentLimitStatus:1;
1396 ///
1397 /// [Bit 13] Current Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
1398 ///
1399 UINT32 CurrentLimitLog:1;
1400 ///
1401 /// [Bit 14] Cross Domain Limit Status (RO). If CPUID.06H:EAX[7] = 1.
1402 ///
1403 UINT32 CrossDomainLimitStatus:1;
1404 ///
1405 /// [Bit 15] Cross Domain Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
1406 ///
1407 UINT32 CrossDomainLimitLog:1;
1408 ///
1409 /// [Bits 22:16] Digital Readout (RO). If CPUID.06H:EAX[0] = 1.
1410 ///
1411 UINT32 DigitalReadout:7;
1412 UINT32 Reserved1:4;
1413 ///
1414 /// [Bits 30:27] Resolution in Degrees Celsius (RO). If CPUID.06H:EAX[0] =
1415 /// 1.
1416 ///
1417 UINT32 ResolutionInDegreesCelsius:4;
1418 ///
1419 /// [Bit 31] Reading Valid (RO). If CPUID.06H:EAX[0] = 1.
1420 ///
1421 UINT32 ReadingValid:1;
1422 UINT32 Reserved2:32;
1423 } Bits;
1424 ///
1425 /// All bit fields as a 32-bit value
1426 ///
1427 UINT32 Uint32;
1428 ///
1429 /// All bit fields as a 64-bit value
1430 ///
1431 UINT64 Uint64;
1432 } MSR_IA32_THERM_STATUS_REGISTER;
1433
1434
1435 /**
1436 Enable Misc. Processor Features (R/W) Allows a variety of processor
1437 functions to be enabled and disabled.
1438
1439 @param ECX MSR_IA32_MISC_ENABLE (0x000001A0)
1440 @param EAX Lower 32-bits of MSR value.
1441 Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
1442 @param EDX Upper 32-bits of MSR value.
1443 Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
1444
1445 <b>Example usage</b>
1446 @code
1447 MSR_IA32_MISC_ENABLE_REGISTER Msr;
1448
1449 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MISC_ENABLE);
1450 AsmWriteMsr64 (MSR_IA32_MISC_ENABLE, Msr.Uint64);
1451 @endcode
1452 @note MSR_IA32_MISC_ENABLE is defined as IA32_MISC_ENABLE in SDM.
1453 **/
1454 #define MSR_IA32_MISC_ENABLE 0x000001A0
1455
1456 /**
1457 MSR information returned for MSR index #MSR_IA32_MISC_ENABLE
1458 **/
1459 typedef union {
1460 ///
1461 /// Individual bit fields
1462 ///
1463 struct {
1464 ///
1465 /// [Bit 0] Fast-Strings Enable When set, the fast-strings feature (for
1466 /// REP MOVS and REP STORS) is enabled (default); when clear, fast-strings
1467 /// are disabled. Introduced at Display Family / Display Model 0F_0H.
1468 ///
1469 UINT32 FastStrings:1;
1470 UINT32 Reserved1:2;
1471 ///
1472 /// [Bit 3] Automatic Thermal Control Circuit Enable (R/W) 1 = Setting
1473 /// this bit enables the thermal control circuit (TCC) portion of the
1474 /// Intel Thermal Monitor feature. This allows the processor to
1475 /// automatically reduce power consumption in response to TCC activation.
1476 /// 0 = Disabled. Note: In some products clearing this bit might be
1477 /// ignored in critical thermal conditions, and TM1, TM2 and adaptive
1478 /// thermal throttling will still be activated. The default value of this
1479 /// field varies with product. See respective tables where default value is
1480 /// listed. Introduced at Display Family / Display Model 0F_0H.
1481 ///
1482 UINT32 AutomaticThermalControlCircuit:1;
1483 UINT32 Reserved2:3;
1484 ///
1485 /// [Bit 7] Performance Monitoring Available (R) 1 = Performance
1486 /// monitoring enabled 0 = Performance monitoring disabled. Introduced at
1487 /// Display Family / Display Model 0F_0H.
1488 ///
1489 UINT32 PerformanceMonitoring:1;
1490 UINT32 Reserved3:3;
1491 ///
1492 /// [Bit 11] Branch Trace Storage Unavailable (RO) 1 = Processor doesn't
1493 /// support branch trace storage (BTS) 0 = BTS is supported. Introduced at
1494 /// Display Family / Display Model 0F_0H.
1495 ///
1496 UINT32 BTS:1;
1497 ///
1498 /// [Bit 12] Processor Event Based Sampling (PEBS) Unavailable (RO) 1 =
1499 /// PEBS is not supported; 0 = PEBS is supported. Introduced at Display
1500 /// Family / Display Model 06_0FH.
1501 ///
1502 UINT32 PEBS:1;
1503 UINT32 Reserved4:3;
1504 ///
1505 /// [Bit 16] Enhanced Intel SpeedStep Technology Enable (R/W) 0= Enhanced
1506 /// Intel SpeedStep Technology disabled 1 = Enhanced Intel SpeedStep
1507 /// Technology enabled. If CPUID.01H: ECX[7] =1.
1508 ///
1509 UINT32 EIST:1;
1510 UINT32 Reserved5:1;
1511 ///
1512 /// [Bit 18] ENABLE MONITOR FSM (R/W) When this bit is set to 0, the
1513 /// MONITOR feature flag is not set (CPUID.01H:ECX[bit 3] = 0). This
1514 /// indicates that MONITOR/MWAIT are not supported. Software attempts to
1515 /// execute MONITOR/MWAIT will cause #UD when this bit is 0. When this bit
1516 /// is set to 1 (default), MONITOR/MWAIT are supported (CPUID.01H:ECX[bit
1517 /// 3] = 1). If the SSE3 feature flag ECX[0] is not set (CPUID.01H:ECX[bit
1518 /// 0] = 0), the OS must not attempt to alter this bit. BIOS must leave it
1519 /// in the default state. Writing this bit when the SSE3 feature flag is
1520 /// set to 0 may generate a #GP exception. Introduced at Display Family /
1521 /// Display Model 0F_03H.
1522 ///
1523 UINT32 MONITOR:1;
1524 UINT32 Reserved6:3;
1525 ///
1526 /// [Bit 22] Limit CPUID Maxval (R/W) When this bit is set to 1, CPUID.00H
1527 /// returns a maximum value in EAX[7:0] of 2. BIOS should contain a setup
1528 /// question that allows users to specify when the installed OS does not
1529 /// support CPUID functions greater than 2. Before setting this bit, BIOS
1530 /// must execute the CPUID.0H and examine the maximum value returned in
1531 /// EAX[7:0]. If the maximum value is greater than 2, this bit is
1532 /// supported. Otherwise, this bit is not supported. Setting this bit when
1533 /// the maximum value is not greater than 2 may generate a #GP exception.
1534 /// Setting this bit may cause unexpected behavior in software that
1535 /// depends on the availability of CPUID leaves greater than 2. Introduced
1536 /// at Display Family / Display Model 0F_03H.
1537 ///
1538 UINT32 LimitCpuidMaxval:1;
1539 ///
1540 /// [Bit 23] xTPR Message Disable (R/W) When set to 1, xTPR messages are
1541 /// disabled. xTPR messages are optional messages that allow the processor
1542 /// to inform the chipset of its priority. if CPUID.01H:ECX[14] = 1.
1543 ///
1544 UINT32 xTPR_Message_Disable:1;
1545 UINT32 Reserved7:8;
1546 UINT32 Reserved8:2;
1547 ///
1548 /// [Bit 34] XD Bit Disable (R/W) When set to 1, the Execute Disable Bit
1549 /// feature (XD Bit) is disabled and the XD Bit extended feature flag will
1550 /// be clear (CPUID.80000001H: EDX[20]=0). When set to a 0 (default), the
1551 /// Execute Disable Bit feature (if available) allows the OS to enable PAE
1552 /// paging and take advantage of data only pages. BIOS must not alter the
1553 /// contents of this bit location, if XD bit is not supported. Writing
1554 /// this bit to 1 when the XD Bit extended feature flag is set to 0 may
1555 /// generate a #GP exception. if CPUID.80000001H:EDX[2 0] = 1.
1556 ///
1557 UINT32 XD:1;
1558 UINT32 Reserved9:29;
1559 } Bits;
1560 ///
1561 /// All bit fields as a 64-bit value
1562 ///
1563 UINT64 Uint64;
1564 } MSR_IA32_MISC_ENABLE_REGISTER;
1565
1566
1567 /**
1568 Performance Energy Bias Hint (R/W). if CPUID.6H:ECX[3] = 1.
1569
1570 @param ECX MSR_IA32_ENERGY_PERF_BIAS (0x000001B0)
1571 @param EAX Lower 32-bits of MSR value.
1572 Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
1573 @param EDX Upper 32-bits of MSR value.
1574 Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
1575
1576 <b>Example usage</b>
1577 @code
1578 MSR_IA32_ENERGY_PERF_BIAS_REGISTER Msr;
1579
1580 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_ENERGY_PERF_BIAS);
1581 AsmWriteMsr64 (MSR_IA32_ENERGY_PERF_BIAS, Msr.Uint64);
1582 @endcode
1583 @note MSR_IA32_ENERGY_PERF_BIAS is defined as IA32_ENERGY_PERF_BIAS in SDM.
1584 **/
1585 #define MSR_IA32_ENERGY_PERF_BIAS 0x000001B0
1586
1587 /**
1588 MSR information returned for MSR index #MSR_IA32_ENERGY_PERF_BIAS
1589 **/
1590 typedef union {
1591 ///
1592 /// Individual bit fields
1593 ///
1594 struct {
1595 ///
1596 /// [Bits 3:0] Power Policy Preference: 0 indicates preference to highest
1597 /// performance. 15 indicates preference to maximize energy saving.
1598 ///
1599 UINT32 PowerPolicyPreference:4;
1600 UINT32 Reserved1:28;
1601 UINT32 Reserved2:32;
1602 } Bits;
1603 ///
1604 /// All bit fields as a 32-bit value
1605 ///
1606 UINT32 Uint32;
1607 ///
1608 /// All bit fields as a 64-bit value
1609 ///
1610 UINT64 Uint64;
1611 } MSR_IA32_ENERGY_PERF_BIAS_REGISTER;
1612
1613
1614 /**
1615 Package Thermal Status Information (RO) Contains status information about
1616 the package's thermal sensor. See Section 14.8, "Package Level Thermal
1617 Management.". If CPUID.06H: EAX[6] = 1.
1618
1619 @param ECX MSR_IA32_PACKAGE_THERM_STATUS (0x000001B1)
1620 @param EAX Lower 32-bits of MSR value.
1621 Described by the type MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
1622 @param EDX Upper 32-bits of MSR value.
1623 Described by the type MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
1624
1625 <b>Example usage</b>
1626 @code
1627 MSR_IA32_PACKAGE_THERM_STATUS_REGISTER Msr;
1628
1629 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_STATUS);
1630 @endcode
1631 @note MSR_IA32_PACKAGE_THERM_STATUS is defined as IA32_PACKAGE_THERM_STATUS in SDM.
1632 **/
1633 #define MSR_IA32_PACKAGE_THERM_STATUS 0x000001B1
1634
1635 /**
1636 MSR information returned for MSR index #MSR_IA32_PACKAGE_THERM_STATUS
1637 **/
1638 typedef union {
1639 ///
1640 /// Individual bit fields
1641 ///
1642 struct {
1643 ///
1644 /// [Bit 0] Pkg Thermal Status (RO):.
1645 ///
1646 UINT32 ThermalStatus:1;
1647 ///
1648 /// [Bit 1] Pkg Thermal Status Log (R/W):.
1649 ///
1650 UINT32 ThermalStatusLog:1;
1651 ///
1652 /// [Bit 2] Pkg PROCHOT # event (RO).
1653 ///
1654 UINT32 PROCHOT_Event:1;
1655 ///
1656 /// [Bit 3] Pkg PROCHOT # log (R/WC0).
1657 ///
1658 UINT32 PROCHOT_Log:1;
1659 ///
1660 /// [Bit 4] Pkg Critical Temperature Status (RO).
1661 ///
1662 UINT32 CriticalTempStatus:1;
1663 ///
1664 /// [Bit 5] Pkg Critical Temperature Status log (R/WC0).
1665 ///
1666 UINT32 CriticalTempStatusLog:1;
1667 ///
1668 /// [Bit 6] Pkg Thermal Threshold #1 Status (RO).
1669 ///
1670 UINT32 ThermalThreshold1Status:1;
1671 ///
1672 /// [Bit 7] Pkg Thermal Threshold #1 log (R/WC0).
1673 ///
1674 UINT32 ThermalThreshold1Log:1;
1675 ///
1676 /// [Bit 8] Pkg Thermal Threshold #2 Status (RO).
1677 ///
1678 UINT32 ThermalThreshold2Status:1;
1679 ///
1680 /// [Bit 9] Pkg Thermal Threshold #1 log (R/WC0).
1681 ///
1682 UINT32 ThermalThreshold2Log:1;
1683 ///
1684 /// [Bit 10] Pkg Power Limitation Status (RO).
1685 ///
1686 UINT32 PowerLimitStatus:1;
1687 ///
1688 /// [Bit 11] Pkg Power Limitation log (R/WC0).
1689 ///
1690 UINT32 PowerLimitLog:1;
1691 UINT32 Reserved1:4;
1692 ///
1693 /// [Bits 22:16] Pkg Digital Readout (RO).
1694 ///
1695 UINT32 DigitalReadout:7;
1696 UINT32 Reserved2:9;
1697 UINT32 Reserved3:32;
1698 } Bits;
1699 ///
1700 /// All bit fields as a 32-bit value
1701 ///
1702 UINT32 Uint32;
1703 ///
1704 /// All bit fields as a 64-bit value
1705 ///
1706 UINT64 Uint64;
1707 } MSR_IA32_PACKAGE_THERM_STATUS_REGISTER;
1708
1709
1710 /**
1711 Pkg Thermal Interrupt Control (R/W) Enables and disables the generation of
1712 an interrupt on temperature transitions detected with the package's thermal
1713 sensor. See Section 14.8, "Package Level Thermal Management.". If CPUID.06H:
1714 EAX[6] = 1.
1715
1716 @param ECX MSR_IA32_PACKAGE_THERM_INTERRUPT (0x000001B2)
1717 @param EAX Lower 32-bits of MSR value.
1718 Described by the type MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
1719 @param EDX Upper 32-bits of MSR value.
1720 Described by the type MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
1721
1722 <b>Example usage</b>
1723 @code
1724 MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER Msr;
1725
1726 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT);
1727 AsmWriteMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT, Msr.Uint64);
1728 @endcode
1729 @note MSR_IA32_PACKAGE_THERM_INTERRUPT is defined as IA32_PACKAGE_THERM_INTERRUPT in SDM.
1730 **/
1731 #define MSR_IA32_PACKAGE_THERM_INTERRUPT 0x000001B2
1732
1733 /**
1734 MSR information returned for MSR index #MSR_IA32_PACKAGE_THERM_INTERRUPT
1735 **/
1736 typedef union {
1737 ///
1738 /// Individual bit fields
1739 ///
1740 struct {
1741 ///
1742 /// [Bit 0] Pkg High-Temperature Interrupt Enable.
1743 ///
1744 UINT32 HighTempEnable:1;
1745 ///
1746 /// [Bit 1] Pkg Low-Temperature Interrupt Enable.
1747 ///
1748 UINT32 LowTempEnable:1;
1749 ///
1750 /// [Bit 2] Pkg PROCHOT# Interrupt Enable.
1751 ///
1752 UINT32 PROCHOT_Enable:1;
1753 UINT32 Reserved1:1;
1754 ///
1755 /// [Bit 4] Pkg Overheat Interrupt Enable.
1756 ///
1757 UINT32 OverheatEnable:1;
1758 UINT32 Reserved2:3;
1759 ///
1760 /// [Bits 14:8] Pkg Threshold #1 Value.
1761 ///
1762 UINT32 Threshold1:7;
1763 ///
1764 /// [Bit 15] Pkg Threshold #1 Interrupt Enable.
1765 ///
1766 UINT32 Threshold1Enable:1;
1767 ///
1768 /// [Bits 22:16] Pkg Threshold #2 Value.
1769 ///
1770 UINT32 Threshold2:7;
1771 ///
1772 /// [Bit 23] Pkg Threshold #2 Interrupt Enable.
1773 ///
1774 UINT32 Threshold2Enable:1;
1775 ///
1776 /// [Bit 24] Pkg Power Limit Notification Enable.
1777 ///
1778 UINT32 PowerLimitNotificationEnable:1;
1779 UINT32 Reserved3:7;
1780 UINT32 Reserved4:32;
1781 } Bits;
1782 ///
1783 /// All bit fields as a 32-bit value
1784 ///
1785 UINT32 Uint32;
1786 ///
1787 /// All bit fields as a 64-bit value
1788 ///
1789 UINT64 Uint64;
1790 } MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER;
1791
1792
1793 /**
1794 Trace/Profile Resource Control (R/W). Introduced at Display Family / Display
1795 Model 06_0EH.
1796
1797 @param ECX MSR_IA32_DEBUGCTL (0x000001D9)
1798 @param EAX Lower 32-bits of MSR value.
1799 Described by the type MSR_IA32_DEBUGCTL_REGISTER.
1800 @param EDX Upper 32-bits of MSR value.
1801 Described by the type MSR_IA32_DEBUGCTL_REGISTER.
1802
1803 <b>Example usage</b>
1804 @code
1805 MSR_IA32_DEBUGCTL_REGISTER Msr;
1806
1807 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL);
1808 AsmWriteMsr64 (MSR_IA32_DEBUGCTL, Msr.Uint64);
1809 @endcode
1810 @note MSR_IA32_DEBUGCTL is defined as IA32_DEBUGCTL in SDM.
1811 **/
1812 #define MSR_IA32_DEBUGCTL 0x000001D9
1813
1814 /**
1815 MSR information returned for MSR index #MSR_IA32_DEBUGCTL
1816 **/
1817 typedef union {
1818 ///
1819 /// Individual bit fields
1820 ///
1821 struct {
1822 ///
1823 /// [Bit 0] LBR: Setting this bit to 1 enables the processor to record a
1824 /// running trace of the most recent branches taken by the processor in
1825 /// the LBR stack. Introduced at Display Family / Display Model 06_01H.
1826 ///
1827 UINT32 LBR:1;
1828 ///
1829 /// [Bit 1] BTF: Setting this bit to 1 enables the processor to treat
1830 /// EFLAGS.TF as single-step on branches instead of single-step on
1831 /// instructions. Introduced at Display Family / Display Model 06_01H.
1832 ///
1833 UINT32 BTF:1;
1834 UINT32 Reserved1:4;
1835 ///
1836 /// [Bit 6] TR: Setting this bit to 1 enables branch trace messages to be
1837 /// sent. Introduced at Display Family / Display Model 06_0EH.
1838 ///
1839 UINT32 TR:1;
1840 ///
1841 /// [Bit 7] BTS: Setting this bit enables branch trace messages (BTMs) to
1842 /// be logged in a BTS buffer. Introduced at Display Family / Display
1843 /// Model 06_0EH.
1844 ///
1845 UINT32 BTS:1;
1846 ///
1847 /// [Bit 8] BTINT: When clear, BTMs are logged in a BTS buffer in circular
1848 /// fashion. When this bit is set, an interrupt is generated by the BTS
1849 /// facility when the BTS buffer is full. Introduced at Display Family /
1850 /// Display Model 06_0EH.
1851 ///
1852 UINT32 BTINT:1;
1853 ///
1854 /// [Bit 9] BTS_OFF_OS: When set, BTS or BTM is skipped if CPL = 0.
1855 /// Introduced at Display Family / Display Model 06_0FH.
1856 ///
1857 UINT32 BTS_OFF_OS:1;
1858 ///
1859 /// [Bit 10] BTS_OFF_USR: When set, BTS or BTM is skipped if CPL > 0.
1860 /// Introduced at Display Family / Display Model 06_0FH.
1861 ///
1862 UINT32 BTS_OFF_USR:1;
1863 ///
1864 /// [Bit 11] FREEZE_LBRS_ON_PMI: When set, the LBR stack is frozen on a
1865 /// PMI request. If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
1866 ///
1867 UINT32 FREEZE_LBRS_ON_PMI:1;
1868 ///
1869 /// [Bit 12] FREEZE_PERFMON_ON_PMI: When set, each ENABLE bit of the
1870 /// global counter control MSR are frozen (address 38FH) on a PMI request.
1871 /// If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
1872 ///
1873 UINT32 FREEZE_PERFMON_ON_PMI:1;
1874 ///
1875 /// [Bit 13] ENABLE_UNCORE_PMI: When set, enables the logical processor to
1876 /// receive and generate PMI on behalf of the uncore. Introduced at
1877 /// Display Family / Display Model 06_1AH.
1878 ///
1879 UINT32 ENABLE_UNCORE_PMI:1;
1880 ///
1881 /// [Bit 14] FREEZE_WHILE_SMM: When set, freezes perfmon and trace
1882 /// messages while in SMM. If IA32_PERF_CAPABILITIES[ 12] = 1.
1883 ///
1884 UINT32 FREEZE_WHILE_SMM:1;
1885 ///
1886 /// [Bit 15] RTM_DEBUG: When set, enables DR7 debug bit on XBEGIN. If
1887 /// (CPUID.(EAX=07H, ECX=0):EBX[11] = 1).
1888 ///
1889 UINT32 RTM_DEBUG:1;
1890 UINT32 Reserved2:16;
1891 UINT32 Reserved3:32;
1892 } Bits;
1893 ///
1894 /// All bit fields as a 32-bit value
1895 ///
1896 UINT32 Uint32;
1897 ///
1898 /// All bit fields as a 64-bit value
1899 ///
1900 UINT64 Uint64;
1901 } MSR_IA32_DEBUGCTL_REGISTER;
1902
1903
1904 /**
1905 SMRR Base Address (Writeable only in SMM) Base address of SMM memory range.
1906 If IA32_MTRRCAP.SMRR[11] = 1.
1907
1908 @param ECX MSR_IA32_SMRR_PHYSBASE (0x000001F2)
1909 @param EAX Lower 32-bits of MSR value.
1910 Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
1911 @param EDX Upper 32-bits of MSR value.
1912 Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
1913
1914 <b>Example usage</b>
1915 @code
1916 MSR_IA32_SMRR_PHYSBASE_REGISTER Msr;
1917
1918 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSBASE);
1919 AsmWriteMsr64 (MSR_IA32_SMRR_PHYSBASE, Msr.Uint64);
1920 @endcode
1921 @note MSR_IA32_SMRR_PHYSBASE is defined as IA32_SMRR_PHYSBASE in SDM.
1922 **/
1923 #define MSR_IA32_SMRR_PHYSBASE 0x000001F2
1924
1925 /**
1926 MSR information returned for MSR index #MSR_IA32_SMRR_PHYSBASE
1927 **/
1928 typedef union {
1929 ///
1930 /// Individual bit fields
1931 ///
1932 struct {
1933 ///
1934 /// [Bits 7:0] Type. Specifies memory type of the range.
1935 ///
1936 UINT32 Type:8;
1937 UINT32 Reserved1:4;
1938 ///
1939 /// [Bits 31:12] PhysBase. SMRR physical Base Address.
1940 ///
1941 UINT32 PhysBase:20;
1942 UINT32 Reserved2:32;
1943 } Bits;
1944 ///
1945 /// All bit fields as a 32-bit value
1946 ///
1947 UINT32 Uint32;
1948 ///
1949 /// All bit fields as a 64-bit value
1950 ///
1951 UINT64 Uint64;
1952 } MSR_IA32_SMRR_PHYSBASE_REGISTER;
1953
1954
1955 /**
1956 SMRR Range Mask. (Writeable only in SMM) Range Mask of SMM memory range. If
1957 IA32_MTRRCAP[SMRR] = 1.
1958
1959 @param ECX MSR_IA32_SMRR_PHYSMASK (0x000001F3)
1960 @param EAX Lower 32-bits of MSR value.
1961 Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
1962 @param EDX Upper 32-bits of MSR value.
1963 Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
1964
1965 <b>Example usage</b>
1966 @code
1967 MSR_IA32_SMRR_PHYSMASK_REGISTER Msr;
1968
1969 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSMASK);
1970 AsmWriteMsr64 (MSR_IA32_SMRR_PHYSMASK, Msr.Uint64);
1971 @endcode
1972 @note MSR_IA32_SMRR_PHYSMASK is defined as IA32_SMRR_PHYSMASK in SDM.
1973 **/
1974 #define MSR_IA32_SMRR_PHYSMASK 0x000001F3
1975
1976 /**
1977 MSR information returned for MSR index #MSR_IA32_SMRR_PHYSMASK
1978 **/
1979 typedef union {
1980 ///
1981 /// Individual bit fields
1982 ///
1983 struct {
1984 UINT32 Reserved1:11;
1985 ///
1986 /// [Bit 11] Valid Enable range mask.
1987 ///
1988 UINT32 Valid:1;
1989 ///
1990 /// [Bits 31:12] PhysMask SMRR address range mask.
1991 ///
1992 UINT32 PhysMask:20;
1993 UINT32 Reserved2:32;
1994 } Bits;
1995 ///
1996 /// All bit fields as a 32-bit value
1997 ///
1998 UINT32 Uint32;
1999 ///
2000 /// All bit fields as a 64-bit value
2001 ///
2002 UINT64 Uint64;
2003 } MSR_IA32_SMRR_PHYSMASK_REGISTER;
2004
2005
2006 /**
2007 DCA Capability (R). If CPUID.01H: ECX[18] = 1.
2008
2009 @param ECX MSR_IA32_PLATFORM_DCA_CAP (0x000001F8)
2010 @param EAX Lower 32-bits of MSR value.
2011 @param EDX Upper 32-bits of MSR value.
2012
2013 <b>Example usage</b>
2014 @code
2015 UINT64 Msr;
2016
2017 Msr = AsmReadMsr64 (MSR_IA32_PLATFORM_DCA_CAP);
2018 @endcode
2019 @note MSR_IA32_PLATFORM_DCA_CAP is defined as IA32_PLATFORM_DCA_CAP in SDM.
2020 **/
2021 #define MSR_IA32_PLATFORM_DCA_CAP 0x000001F8
2022
2023
2024 /**
2025 If set, CPU supports Prefetch-Hint type. If CPUID.01H: ECX[18] = 1.
2026
2027 @param ECX MSR_IA32_CPU_DCA_CAP (0x000001F9)
2028 @param EAX Lower 32-bits of MSR value.
2029 @param EDX Upper 32-bits of MSR value.
2030
2031 <b>Example usage</b>
2032 @code
2033 UINT64 Msr;
2034
2035 Msr = AsmReadMsr64 (MSR_IA32_CPU_DCA_CAP);
2036 AsmWriteMsr64 (MSR_IA32_CPU_DCA_CAP, Msr);
2037 @endcode
2038 @note MSR_IA32_CPU_DCA_CAP is defined as IA32_CPU_DCA_CAP in SDM.
2039 **/
2040 #define MSR_IA32_CPU_DCA_CAP 0x000001F9
2041
2042
2043 /**
2044 DCA type 0 Status and Control register. If CPUID.01H: ECX[18] = 1.
2045
2046 @param ECX MSR_IA32_DCA_0_CAP (0x000001FA)
2047 @param EAX Lower 32-bits of MSR value.
2048 Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
2049 @param EDX Upper 32-bits of MSR value.
2050 Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
2051
2052 <b>Example usage</b>
2053 @code
2054 MSR_IA32_DCA_0_CAP_REGISTER Msr;
2055
2056 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DCA_0_CAP);
2057 AsmWriteMsr64 (MSR_IA32_DCA_0_CAP, Msr.Uint64);
2058 @endcode
2059 @note MSR_IA32_DCA_0_CAP is defined as IA32_DCA_0_CAP in SDM.
2060 **/
2061 #define MSR_IA32_DCA_0_CAP 0x000001FA
2062
2063 /**
2064 MSR information returned for MSR index #MSR_IA32_DCA_0_CAP
2065 **/
2066 typedef union {
2067 ///
2068 /// Individual bit fields
2069 ///
2070 struct {
2071 ///
2072 /// [Bit 0] DCA_ACTIVE: Set by HW when DCA is fuseenabled and no
2073 /// defeatures are set.
2074 ///
2075 UINT32 DCA_ACTIVE:1;
2076 ///
2077 /// [Bits 2:1] TRANSACTION.
2078 ///
2079 UINT32 TRANSACTION:2;
2080 ///
2081 /// [Bits 6:3] DCA_TYPE.
2082 ///
2083 UINT32 DCA_TYPE:4;
2084 ///
2085 /// [Bits 10:7] DCA_QUEUE_SIZE.
2086 ///
2087 UINT32 DCA_QUEUE_SIZE:4;
2088 UINT32 Reserved1:2;
2089 ///
2090 /// [Bits 16:13] DCA_DELAY: Writes will update the register but have no HW
2091 /// side-effect.
2092 ///
2093 UINT32 DCA_DELAY:4;
2094 UINT32 Reserved2:7;
2095 ///
2096 /// [Bit 24] SW_BLOCK: SW can request DCA block by setting this bit.
2097 ///
2098 UINT32 SW_BLOCK:1;
2099 UINT32 Reserved3:1;
2100 ///
2101 /// [Bit 26] HW_BLOCK: Set when DCA is blocked by HW (e.g. CR0.CD = 1).
2102 ///
2103 UINT32 HW_BLOCK:1;
2104 UINT32 Reserved4:5;
2105 UINT32 Reserved5:32;
2106 } Bits;
2107 ///
2108 /// All bit fields as a 32-bit value
2109 ///
2110 UINT32 Uint32;
2111 ///
2112 /// All bit fields as a 64-bit value
2113 ///
2114 UINT64 Uint64;
2115 } MSR_IA32_DCA_0_CAP_REGISTER;
2116
2117
2118 /**
2119 MTRRphysBasen. See Section 11.11.2.3, "Variable Range MTRRs".
2120 If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
2121
2122 @param ECX MSR_IA32_MTRR_PHYSBASEn
2123 @param EAX Lower 32-bits of MSR value.
2124 Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
2125 @param EDX Upper 32-bits of MSR value.
2126 Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
2127
2128 <b>Example usage</b>
2129 @code
2130 MSR_IA32_MTRR_PHYSBASE_REGISTER Msr;
2131
2132 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0);
2133 AsmWriteMsr64 (MSR_IA32_MTRR_PHYSBASE0, Msr.Uint64);
2134 @endcode
2135 @note MSR_IA32_MTRR_PHYSBASE0 is defined as IA32_MTRR_PHYSBASE0 in SDM.
2136 MSR_IA32_MTRR_PHYSBASE1 is defined as IA32_MTRR_PHYSBASE1 in SDM.
2137 MSR_IA32_MTRR_PHYSBASE2 is defined as IA32_MTRR_PHYSBASE2 in SDM.
2138 MSR_IA32_MTRR_PHYSBASE3 is defined as IA32_MTRR_PHYSBASE3 in SDM.
2139 MSR_IA32_MTRR_PHYSBASE4 is defined as IA32_MTRR_PHYSBASE4 in SDM.
2140 MSR_IA32_MTRR_PHYSBASE5 is defined as IA32_MTRR_PHYSBASE5 in SDM.
2141 MSR_IA32_MTRR_PHYSBASE6 is defined as IA32_MTRR_PHYSBASE6 in SDM.
2142 MSR_IA32_MTRR_PHYSBASE7 is defined as IA32_MTRR_PHYSBASE7 in SDM.
2143 MSR_IA32_MTRR_PHYSBASE8 is defined as IA32_MTRR_PHYSBASE8 in SDM.
2144 MSR_IA32_MTRR_PHYSBASE9 is defined as IA32_MTRR_PHYSBASE9 in SDM.
2145 @{
2146 **/
2147 #define MSR_IA32_MTRR_PHYSBASE0 0x00000200
2148 #define MSR_IA32_MTRR_PHYSBASE1 0x00000202
2149 #define MSR_IA32_MTRR_PHYSBASE2 0x00000204
2150 #define MSR_IA32_MTRR_PHYSBASE3 0x00000206
2151 #define MSR_IA32_MTRR_PHYSBASE4 0x00000208
2152 #define MSR_IA32_MTRR_PHYSBASE5 0x0000020A
2153 #define MSR_IA32_MTRR_PHYSBASE6 0x0000020C
2154 #define MSR_IA32_MTRR_PHYSBASE7 0x0000020E
2155 #define MSR_IA32_MTRR_PHYSBASE8 0x00000210
2156 #define MSR_IA32_MTRR_PHYSBASE9 0x00000212
2157 /// @}
2158
2159 /**
2160 MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
2161 #MSR_IA32_MTRR_PHYSBASE9
2162 **/
2163 typedef union {
2164 ///
2165 /// Individual bit fields
2166 ///
2167 struct {
2168 ///
2169 /// [Bits 7:0] Type. Specifies memory type of the range.
2170 ///
2171 UINT32 Type:8;
2172 UINT32 Reserved1:4;
2173 ///
2174 /// [Bits 31:12] PhysBase. MTRR physical Base Address.
2175 ///
2176 UINT32 PhysBase:20;
2177 ///
2178 /// [Bits MAXPHYSADDR:32] PhysBase. Upper bits of MTRR physical Base Address.
2179 /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on the
2180 /// maximum physical address range supported by the processor. It is
2181 /// reported by CPUID leaf function 80000008H. If CPUID does not support
2182 /// leaf 80000008H, the processor supports 36-bit physical address size,
2183 /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
2184 ///
2185 UINT32 PhysBaseHi:32;
2186 } Bits;
2187 ///
2188 /// All bit fields as a 64-bit value
2189 ///
2190 UINT64 Uint64;
2191 } MSR_IA32_MTRR_PHYSBASE_REGISTER;
2192
2193
2194 /**
2195 MTRRphysMaskn. See Section 11.11.2.3, "Variable Range MTRRs".
2196 If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
2197
2198 @param ECX MSR_IA32_MTRR_PHYSMASKn
2199 @param EAX Lower 32-bits of MSR value.
2200 Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
2201 @param EDX Upper 32-bits of MSR value.
2202 Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
2203
2204 <b>Example usage</b>
2205 @code
2206 MSR_IA32_MTRR_PHYSMASK_REGISTER Msr;
2207
2208 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0);
2209 AsmWriteMsr64 (MSR_IA32_MTRR_PHYSMASK0, Msr.Uint64);
2210 @endcode
2211 @note MSR_IA32_MTRR_PHYSMASK0 is defined as IA32_MTRR_PHYSMASK0 in SDM.
2212 MSR_IA32_MTRR_PHYSMASK1 is defined as IA32_MTRR_PHYSMASK1 in SDM.
2213 MSR_IA32_MTRR_PHYSMASK2 is defined as IA32_MTRR_PHYSMASK2 in SDM.
2214 MSR_IA32_MTRR_PHYSMASK3 is defined as IA32_MTRR_PHYSMASK3 in SDM.
2215 MSR_IA32_MTRR_PHYSMASK4 is defined as IA32_MTRR_PHYSMASK4 in SDM.
2216 MSR_IA32_MTRR_PHYSMASK5 is defined as IA32_MTRR_PHYSMASK5 in SDM.
2217 MSR_IA32_MTRR_PHYSMASK6 is defined as IA32_MTRR_PHYSMASK6 in SDM.
2218 MSR_IA32_MTRR_PHYSMASK7 is defined as IA32_MTRR_PHYSMASK7 in SDM.
2219 MSR_IA32_MTRR_PHYSMASK8 is defined as IA32_MTRR_PHYSMASK8 in SDM.
2220 MSR_IA32_MTRR_PHYSMASK9 is defined as IA32_MTRR_PHYSMASK9 in SDM.
2221 @{
2222 **/
2223 #define MSR_IA32_MTRR_PHYSMASK0 0x00000201
2224 #define MSR_IA32_MTRR_PHYSMASK1 0x00000203
2225 #define MSR_IA32_MTRR_PHYSMASK2 0x00000205
2226 #define MSR_IA32_MTRR_PHYSMASK3 0x00000207
2227 #define MSR_IA32_MTRR_PHYSMASK4 0x00000209
2228 #define MSR_IA32_MTRR_PHYSMASK5 0x0000020B
2229 #define MSR_IA32_MTRR_PHYSMASK6 0x0000020D
2230 #define MSR_IA32_MTRR_PHYSMASK7 0x0000020F
2231 #define MSR_IA32_MTRR_PHYSMASK8 0x00000211
2232 #define MSR_IA32_MTRR_PHYSMASK9 0x00000213
2233 /// @}
2234
2235 /**
2236 MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSMASK0 to
2237 #MSR_IA32_MTRR_PHYSMASK9
2238 **/
2239 typedef union {
2240 ///
2241 /// Individual bit fields
2242 ///
2243 struct {
2244 UINT32 Reserved1:11;
2245 ///
2246 /// [Bit 11] Valid Enable range mask.
2247 ///
2248 UINT32 V:1;
2249 ///
2250 /// [Bits 31:12] PhysMask. MTRR address range mask.
2251 ///
2252 UINT32 PhysMask:20;
2253 ///
2254 /// [Bits MAXPHYSADDR:32] PhysMask. Upper bits of MTRR address range mask.
2255 /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on the
2256 /// maximum physical address range supported by the processor. It is
2257 /// reported by CPUID leaf function 80000008H. If CPUID does not support
2258 /// leaf 80000008H, the processor supports 36-bit physical address size,
2259 /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
2260 ///
2261 UINT32 PhysMaskHi:32;
2262 } Bits;
2263 ///
2264 /// All bit fields as a 64-bit value
2265 ///
2266 UINT64 Uint64;
2267 } MSR_IA32_MTRR_PHYSMASK_REGISTER;
2268
2269
2270 /**
2271 MTRRfix64K_00000. If CPUID.01H: EDX.MTRR[12] =1.
2272
2273 @param ECX MSR_IA32_MTRR_FIX64K_00000 (0x00000250)
2274 @param EAX Lower 32-bits of MSR value.
2275 @param EDX Upper 32-bits of MSR value.
2276
2277 <b>Example usage</b>
2278 @code
2279 UINT64 Msr;
2280
2281 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX64K_00000);
2282 AsmWriteMsr64 (MSR_IA32_MTRR_FIX64K_00000, Msr);
2283 @endcode
2284 @note MSR_IA32_MTRR_FIX64K_00000 is defined as IA32_MTRR_FIX64K_00000 in SDM.
2285 **/
2286 #define MSR_IA32_MTRR_FIX64K_00000 0x00000250
2287
2288
2289 /**
2290 MTRRfix16K_80000. If CPUID.01H: EDX.MTRR[12] =1.
2291
2292 @param ECX MSR_IA32_MTRR_FIX16K_80000 (0x00000258)
2293 @param EAX Lower 32-bits of MSR value.
2294 @param EDX Upper 32-bits of MSR value.
2295
2296 <b>Example usage</b>
2297 @code
2298 UINT64 Msr;
2299
2300 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_80000);
2301 AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_80000, Msr);
2302 @endcode
2303 @note MSR_IA32_MTRR_FIX16K_80000 is defined as IA32_MTRR_FIX16K_80000 in SDM.
2304 **/
2305 #define MSR_IA32_MTRR_FIX16K_80000 0x00000258
2306
2307
2308 /**
2309 MTRRfix16K_A0000. If CPUID.01H: EDX.MTRR[12] =1.
2310
2311 @param ECX MSR_IA32_MTRR_FIX16K_A0000 (0x00000259)
2312 @param EAX Lower 32-bits of MSR value.
2313 @param EDX Upper 32-bits of MSR value.
2314
2315 <b>Example usage</b>
2316 @code
2317 UINT64 Msr;
2318
2319 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_A0000);
2320 AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_A0000, Msr);
2321 @endcode
2322 @note MSR_IA32_MTRR_FIX16K_A0000 is defined as IA32_MTRR_FIX16K_A0000 in SDM.
2323 **/
2324 #define MSR_IA32_MTRR_FIX16K_A0000 0x00000259
2325
2326
2327 /**
2328 See Section 11.11.2.2, "Fixed Range MTRRs.". If CPUID.01H: EDX.MTRR[12] =1.
2329
2330 @param ECX MSR_IA32_MTRR_FIX4K_C0000 (0x00000268)
2331 @param EAX Lower 32-bits of MSR value.
2332 @param EDX Upper 32-bits of MSR value.
2333
2334 <b>Example usage</b>
2335 @code
2336 UINT64 Msr;
2337
2338 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C0000);
2339 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C0000, Msr);
2340 @endcode
2341 @note MSR_IA32_MTRR_FIX4K_C0000 is defined as IA32_MTRR_FIX4K_C0000 in SDM.
2342 **/
2343 #define MSR_IA32_MTRR_FIX4K_C0000 0x00000268
2344
2345
2346 /**
2347 MTRRfix4K_C8000. If CPUID.01H: EDX.MTRR[12] =1.
2348
2349 @param ECX MSR_IA32_MTRR_FIX4K_C8000 (0x00000269)
2350 @param EAX Lower 32-bits of MSR value.
2351 @param EDX Upper 32-bits of MSR value.
2352
2353 <b>Example usage</b>
2354 @code
2355 UINT64 Msr;
2356
2357 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C8000);
2358 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C8000, Msr);
2359 @endcode
2360 @note MSR_IA32_MTRR_FIX4K_C8000 is defined as IA32_MTRR_FIX4K_C8000 in SDM.
2361 **/
2362 #define MSR_IA32_MTRR_FIX4K_C8000 0x00000269
2363
2364
2365 /**
2366 MTRRfix4K_D0000. If CPUID.01H: EDX.MTRR[12] =1.
2367
2368 @param ECX MSR_IA32_MTRR_FIX4K_D0000 (0x0000026A)
2369 @param EAX Lower 32-bits of MSR value.
2370 @param EDX Upper 32-bits of MSR value.
2371
2372 <b>Example usage</b>
2373 @code
2374 UINT64 Msr;
2375
2376 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D0000);
2377 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D0000, Msr);
2378 @endcode
2379 @note MSR_IA32_MTRR_FIX4K_D0000 is defined as IA32_MTRR_FIX4K_D0000 in SDM.
2380 **/
2381 #define MSR_IA32_MTRR_FIX4K_D0000 0x0000026A
2382
2383
2384 /**
2385 MTRRfix4K_D8000. If CPUID.01H: EDX.MTRR[12] =1.
2386
2387 @param ECX MSR_IA32_MTRR_FIX4K_D8000 (0x0000026B)
2388 @param EAX Lower 32-bits of MSR value.
2389 @param EDX Upper 32-bits of MSR value.
2390
2391 <b>Example usage</b>
2392 @code
2393 UINT64 Msr;
2394
2395 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D8000);
2396 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D8000, Msr);
2397 @endcode
2398 @note MSR_IA32_MTRR_FIX4K_D8000 is defined as IA32_MTRR_FIX4K_D8000 in SDM.
2399 **/
2400 #define MSR_IA32_MTRR_FIX4K_D8000 0x0000026B
2401
2402
2403 /**
2404 MTRRfix4K_E0000. If CPUID.01H: EDX.MTRR[12] =1.
2405
2406 @param ECX MSR_IA32_MTRR_FIX4K_E0000 (0x0000026C)
2407 @param EAX Lower 32-bits of MSR value.
2408 @param EDX Upper 32-bits of MSR value.
2409
2410 <b>Example usage</b>
2411 @code
2412 UINT64 Msr;
2413
2414 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E0000);
2415 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E0000, Msr);
2416 @endcode
2417 @note MSR_IA32_MTRR_FIX4K_E0000 is defined as IA32_MTRR_FIX4K_E0000 in SDM.
2418 **/
2419 #define MSR_IA32_MTRR_FIX4K_E0000 0x0000026C
2420
2421
2422 /**
2423 MTRRfix4K_E8000. If CPUID.01H: EDX.MTRR[12] =1.
2424
2425 @param ECX MSR_IA32_MTRR_FIX4K_E8000 (0x0000026D)
2426 @param EAX Lower 32-bits of MSR value.
2427 @param EDX Upper 32-bits of MSR value.
2428
2429 <b>Example usage</b>
2430 @code
2431 UINT64 Msr;
2432
2433 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E8000);
2434 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E8000, Msr);
2435 @endcode
2436 @note MSR_IA32_MTRR_FIX4K_E8000 is defined as IA32_MTRR_FIX4K_E8000 in SDM.
2437 **/
2438 #define MSR_IA32_MTRR_FIX4K_E8000 0x0000026D
2439
2440
2441 /**
2442 MTRRfix4K_F0000. If CPUID.01H: EDX.MTRR[12] =1.
2443
2444 @param ECX MSR_IA32_MTRR_FIX4K_F0000 (0x0000026E)
2445 @param EAX Lower 32-bits of MSR value.
2446 @param EDX Upper 32-bits of MSR value.
2447
2448 <b>Example usage</b>
2449 @code
2450 UINT64 Msr;
2451
2452 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F0000);
2453 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F0000, Msr);
2454 @endcode
2455 @note MSR_IA32_MTRR_FIX4K_F0000 is defined as IA32_MTRR_FIX4K_F0000 in SDM.
2456 **/
2457 #define MSR_IA32_MTRR_FIX4K_F0000 0x0000026E
2458
2459
2460 /**
2461 MTRRfix4K_F8000. If CPUID.01H: EDX.MTRR[12] =1.
2462
2463 @param ECX MSR_IA32_MTRR_FIX4K_F8000 (0x0000026F)
2464 @param EAX Lower 32-bits of MSR value.
2465 @param EDX Upper 32-bits of MSR value.
2466
2467 <b>Example usage</b>
2468 @code
2469 UINT64 Msr;
2470
2471 Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F8000);
2472 AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F8000, Msr);
2473 @endcode
2474 @note MSR_IA32_MTRR_FIX4K_F8000 is defined as IA32_MTRR_FIX4K_F8000 in SDM.
2475 **/
2476 #define MSR_IA32_MTRR_FIX4K_F8000 0x0000026F
2477
2478
2479 /**
2480 IA32_PAT (R/W). If CPUID.01H: EDX.MTRR[16] =1.
2481
2482 @param ECX MSR_IA32_PAT (0x00000277)
2483 @param EAX Lower 32-bits of MSR value.
2484 Described by the type MSR_IA32_PAT_REGISTER.
2485 @param EDX Upper 32-bits of MSR value.
2486 Described by the type MSR_IA32_PAT_REGISTER.
2487
2488 <b>Example usage</b>
2489 @code
2490 MSR_IA32_PAT_REGISTER Msr;
2491
2492 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PAT);
2493 AsmWriteMsr64 (MSR_IA32_PAT, Msr.Uint64);
2494 @endcode
2495 @note MSR_IA32_PAT is defined as IA32_PAT in SDM.
2496 **/
2497 #define MSR_IA32_PAT 0x00000277
2498
2499 /**
2500 MSR information returned for MSR index #MSR_IA32_PAT
2501 **/
2502 typedef union {
2503 ///
2504 /// Individual bit fields
2505 ///
2506 struct {
2507 ///
2508 /// [Bits 2:0] PA0.
2509 ///
2510 UINT32 PA0:3;
2511 UINT32 Reserved1:5;
2512 ///
2513 /// [Bits 10:8] PA1.
2514 ///
2515 UINT32 PA1:3;
2516 UINT32 Reserved2:5;
2517 ///
2518 /// [Bits 18:16] PA2.
2519 ///
2520 UINT32 PA2:3;
2521 UINT32 Reserved3:5;
2522 ///
2523 /// [Bits 26:24] PA3.
2524 ///
2525 UINT32 PA3:3;
2526 UINT32 Reserved4:5;
2527 ///
2528 /// [Bits 34:32] PA4.
2529 ///
2530 UINT32 PA4:3;
2531 UINT32 Reserved5:5;
2532 ///
2533 /// [Bits 42:40] PA5.
2534 ///
2535 UINT32 PA5:3;
2536 UINT32 Reserved6:5;
2537 ///
2538 /// [Bits 50:48] PA6.
2539 ///
2540 UINT32 PA6:3;
2541 UINT32 Reserved7:5;
2542 ///
2543 /// [Bits 58:56] PA7.
2544 ///
2545 UINT32 PA7:3;
2546 UINT32 Reserved8:5;
2547 } Bits;
2548 ///
2549 /// All bit fields as a 64-bit value
2550 ///
2551 UINT64 Uint64;
2552 } MSR_IA32_PAT_REGISTER;
2553
2554
2555 /**
2556 Provides the programming interface to use corrected MC error signaling
2557 capability (R/W). If IA32_MCG_CAP[10] = 1 && IA32_MCG_CAP[7:0] > n.
2558
2559 @param ECX MSR_IA32_MCn_CTL2
2560 @param EAX Lower 32-bits of MSR value.
2561 Described by the type MSR_IA32_MC_CTL2_REGISTER.
2562 @param EDX Upper 32-bits of MSR value.
2563 Described by the type MSR_IA32_MC_CTL2_REGISTER.
2564
2565 <b>Example usage</b>
2566 @code
2567 MSR_IA32_MC_CTL2_REGISTER Msr;
2568
2569 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MC0_CTL2);
2570 AsmWriteMsr64 (MSR_IA32_MC0_CTL2, Msr.Uint64);
2571 @endcode
2572 @note MSR_IA32_MC0_CTL2 is defined as IA32_MC0_CTL2 in SDM.
2573 MSR_IA32_MC1_CTL2 is defined as IA32_MC1_CTL2 in SDM.
2574 MSR_IA32_MC2_CTL2 is defined as IA32_MC2_CTL2 in SDM.
2575 MSR_IA32_MC3_CTL2 is defined as IA32_MC3_CTL2 in SDM.
2576 MSR_IA32_MC4_CTL2 is defined as IA32_MC4_CTL2 in SDM.
2577 MSR_IA32_MC5_CTL2 is defined as IA32_MC5_CTL2 in SDM.
2578 MSR_IA32_MC6_CTL2 is defined as IA32_MC6_CTL2 in SDM.
2579 MSR_IA32_MC7_CTL2 is defined as IA32_MC7_CTL2 in SDM.
2580 MSR_IA32_MC8_CTL2 is defined as IA32_MC8_CTL2 in SDM.
2581 MSR_IA32_MC9_CTL2 is defined as IA32_MC9_CTL2 in SDM.
2582 MSR_IA32_MC10_CTL2 is defined as IA32_MC10_CTL2 in SDM.
2583 MSR_IA32_MC11_CTL2 is defined as IA32_MC11_CTL2 in SDM.
2584 MSR_IA32_MC12_CTL2 is defined as IA32_MC12_CTL2 in SDM.
2585 MSR_IA32_MC13_CTL2 is defined as IA32_MC13_CTL2 in SDM.
2586 MSR_IA32_MC14_CTL2 is defined as IA32_MC14_CTL2 in SDM.
2587 MSR_IA32_MC15_CTL2 is defined as IA32_MC15_CTL2 in SDM.
2588 MSR_IA32_MC16_CTL2 is defined as IA32_MC16_CTL2 in SDM.
2589 MSR_IA32_MC17_CTL2 is defined as IA32_MC17_CTL2 in SDM.
2590 MSR_IA32_MC18_CTL2 is defined as IA32_MC18_CTL2 in SDM.
2591 MSR_IA32_MC19_CTL2 is defined as IA32_MC19_CTL2 in SDM.
2592 MSR_IA32_MC20_CTL2 is defined as IA32_MC20_CTL2 in SDM.
2593 MSR_IA32_MC21_CTL2 is defined as IA32_MC21_CTL2 in SDM.
2594 MSR_IA32_MC22_CTL2 is defined as IA32_MC22_CTL2 in SDM.
2595 MSR_IA32_MC23_CTL2 is defined as IA32_MC23_CTL2 in SDM.
2596 MSR_IA32_MC24_CTL2 is defined as IA32_MC24_CTL2 in SDM.
2597 MSR_IA32_MC25_CTL2 is defined as IA32_MC25_CTL2 in SDM.
2598 MSR_IA32_MC26_CTL2 is defined as IA32_MC26_CTL2 in SDM.
2599 MSR_IA32_MC27_CTL2 is defined as IA32_MC27_CTL2 in SDM.
2600 MSR_IA32_MC28_CTL2 is defined as IA32_MC28_CTL2 in SDM.
2601 MSR_IA32_MC29_CTL2 is defined as IA32_MC29_CTL2 in SDM.
2602 MSR_IA32_MC30_CTL2 is defined as IA32_MC30_CTL2 in SDM.
2603 MSR_IA32_MC31_CTL2 is defined as IA32_MC31_CTL2 in SDM.
2604 @{
2605 **/
2606 #define MSR_IA32_MC0_CTL2 0x00000280
2607 #define MSR_IA32_MC1_CTL2 0x00000281
2608 #define MSR_IA32_MC2_CTL2 0x00000282
2609 #define MSR_IA32_MC3_CTL2 0x00000283
2610 #define MSR_IA32_MC4_CTL2 0x00000284
2611 #define MSR_IA32_MC5_CTL2 0x00000285
2612 #define MSR_IA32_MC6_CTL2 0x00000286
2613 #define MSR_IA32_MC7_CTL2 0x00000287
2614 #define MSR_IA32_MC8_CTL2 0x00000288
2615 #define MSR_IA32_MC9_CTL2 0x00000289
2616 #define MSR_IA32_MC10_CTL2 0x0000028A
2617 #define MSR_IA32_MC11_CTL2 0x0000028B
2618 #define MSR_IA32_MC12_CTL2 0x0000028C
2619 #define MSR_IA32_MC13_CTL2 0x0000028D
2620 #define MSR_IA32_MC14_CTL2 0x0000028E
2621 #define MSR_IA32_MC15_CTL2 0x0000028F
2622 #define MSR_IA32_MC16_CTL2 0x00000290
2623 #define MSR_IA32_MC17_CTL2 0x00000291
2624 #define MSR_IA32_MC18_CTL2 0x00000292
2625 #define MSR_IA32_MC19_CTL2 0x00000293
2626 #define MSR_IA32_MC20_CTL2 0x00000294
2627 #define MSR_IA32_MC21_CTL2 0x00000295
2628 #define MSR_IA32_MC22_CTL2 0x00000296
2629 #define MSR_IA32_MC23_CTL2 0x00000297
2630 #define MSR_IA32_MC24_CTL2 0x00000298
2631 #define MSR_IA32_MC25_CTL2 0x00000299
2632 #define MSR_IA32_MC26_CTL2 0x0000029A
2633 #define MSR_IA32_MC27_CTL2 0x0000029B
2634 #define MSR_IA32_MC28_CTL2 0x0000029C
2635 #define MSR_IA32_MC29_CTL2 0x0000029D
2636 #define MSR_IA32_MC30_CTL2 0x0000029E
2637 #define MSR_IA32_MC31_CTL2 0x0000029F
2638 /// @}
2639
2640 /**
2641 MSR information returned for MSR indexes #MSR_IA32_MC0_CTL2
2642 to #MSR_IA32_MC31_CTL2
2643 **/
2644 typedef union {
2645 ///
2646 /// Individual bit fields
2647 ///
2648 struct {
2649 ///
2650 /// [Bits 14:0] Corrected error count threshold.
2651 ///
2652 UINT32 CorrectedErrorCountThreshold:15;
2653 UINT32 Reserved1:15;
2654 ///
2655 /// [Bit 30] CMCI_EN.
2656 ///
2657 UINT32 CMCI_EN:1;
2658 UINT32 Reserved2:1;
2659 UINT32 Reserved3:32;
2660 } Bits;
2661 ///
2662 /// All bit fields as a 32-bit value
2663 ///
2664 UINT32 Uint32;
2665 ///
2666 /// All bit fields as a 64-bit value
2667 ///
2668 UINT64 Uint64;
2669 } MSR_IA32_MC_CTL2_REGISTER;
2670
2671
2672 /**
2673 MTRRdefType (R/W). If CPUID.01H: EDX.MTRR[12] =1.
2674
2675 @param ECX MSR_IA32_MTRR_DEF_TYPE (0x000002FF)
2676 @param EAX Lower 32-bits of MSR value.
2677 Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
2678 @param EDX Upper 32-bits of MSR value.
2679 Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
2680
2681 <b>Example usage</b>
2682 @code
2683 MSR_IA32_MTRR_DEF_TYPE_REGISTER Msr;
2684
2685 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
2686 AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, Msr.Uint64);
2687 @endcode
2688 @note MSR_IA32_MTRR_DEF_TYPE is defined as IA32_MTRR_DEF_TYPE in SDM.
2689 **/
2690 #define MSR_IA32_MTRR_DEF_TYPE 0x000002FF
2691
2692 /**
2693 MSR information returned for MSR index #MSR_IA32_MTRR_DEF_TYPE
2694 **/
2695 typedef union {
2696 ///
2697 /// Individual bit fields
2698 ///
2699 struct {
2700 ///
2701 /// [Bits 2:0] Default Memory Type.
2702 ///
2703 UINT32 Type:3;
2704 UINT32 Reserved1:7;
2705 ///
2706 /// [Bit 10] Fixed Range MTRR Enable.
2707 ///
2708 UINT32 FE:1;
2709 ///
2710 /// [Bit 11] MTRR Enable.
2711 ///
2712 UINT32 E:1;
2713 UINT32 Reserved2:20;
2714 UINT32 Reserved3:32;
2715 } Bits;
2716 ///
2717 /// All bit fields as a 32-bit value
2718 ///
2719 UINT32 Uint32;
2720 ///
2721 /// All bit fields as a 64-bit value
2722 ///
2723 UINT64 Uint64;
2724 } MSR_IA32_MTRR_DEF_TYPE_REGISTER;
2725
2726
2727 /**
2728 Fixed-Function Performance Counter 0 (R/W): Counts Instr_Retired.Any. If
2729 CPUID.0AH: EDX[4:0] > 0.
2730
2731 @param ECX MSR_IA32_FIXED_CTR0 (0x00000309)
2732 @param EAX Lower 32-bits of MSR value.
2733 @param EDX Upper 32-bits of MSR value.
2734
2735 <b>Example usage</b>
2736 @code
2737 UINT64 Msr;
2738
2739 Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR0);
2740 AsmWriteMsr64 (MSR_IA32_FIXED_CTR0, Msr);
2741 @endcode
2742 @note MSR_IA32_FIXED_CTR0 is defined as IA32_FIXED_CTR0 in SDM.
2743 **/
2744 #define MSR_IA32_FIXED_CTR0 0x00000309
2745
2746
2747 /**
2748 Fixed-Function Performance Counter 1 (R/W): Counts CPU_CLK_Unhalted.Core. If
2749 CPUID.0AH: EDX[4:0] > 1.
2750
2751 @param ECX MSR_IA32_FIXED_CTR1 (0x0000030A)
2752 @param EAX Lower 32-bits of MSR value.
2753 @param EDX Upper 32-bits of MSR value.
2754
2755 <b>Example usage</b>
2756 @code
2757 UINT64 Msr;
2758
2759 Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR1);
2760 AsmWriteMsr64 (MSR_IA32_FIXED_CTR1, Msr);
2761 @endcode
2762 @note MSR_IA32_FIXED_CTR1 is defined as IA32_FIXED_CTR1 in SDM.
2763 **/
2764 #define MSR_IA32_FIXED_CTR1 0x0000030A
2765
2766
2767 /**
2768 Fixed-Function Performance Counter 2 (R/W): Counts CPU_CLK_Unhalted.Ref. If
2769 CPUID.0AH: EDX[4:0] > 2.
2770
2771 @param ECX MSR_IA32_FIXED_CTR2 (0x0000030B)
2772 @param EAX Lower 32-bits of MSR value.
2773 @param EDX Upper 32-bits of MSR value.
2774
2775 <b>Example usage</b>
2776 @code
2777 UINT64 Msr;
2778
2779 Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR2);
2780 AsmWriteMsr64 (MSR_IA32_FIXED_CTR2, Msr);
2781 @endcode
2782 @note MSR_IA32_FIXED_CTR2 is defined as IA32_FIXED_CTR2 in SDM.
2783 **/
2784 #define MSR_IA32_FIXED_CTR2 0x0000030B
2785
2786
2787 /**
2788 RO. If CPUID.01H: ECX[15] = 1.
2789
2790 @param ECX MSR_IA32_PERF_CAPABILITIES (0x00000345)
2791 @param EAX Lower 32-bits of MSR value.
2792 Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
2793 @param EDX Upper 32-bits of MSR value.
2794 Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
2795
2796 <b>Example usage</b>
2797 @code
2798 MSR_IA32_PERF_CAPABILITIES_REGISTER Msr;
2799
2800 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CAPABILITIES);
2801 AsmWriteMsr64 (MSR_IA32_PERF_CAPABILITIES, Msr.Uint64);
2802 @endcode
2803 @note MSR_IA32_PERF_CAPABILITIES is defined as IA32_PERF_CAPABILITIES in SDM.
2804 **/
2805 #define MSR_IA32_PERF_CAPABILITIES 0x00000345
2806
2807 /**
2808 MSR information returned for MSR index #MSR_IA32_PERF_CAPABILITIES
2809 **/
2810 typedef union {
2811 ///
2812 /// Individual bit fields
2813 ///
2814 struct {
2815 ///
2816 /// [Bits 5:0] LBR format.
2817 ///
2818 UINT32 LBR_FMT:6;
2819 ///
2820 /// [Bit 6] PEBS Trap.
2821 ///
2822 UINT32 PEBS_TRAP:1;
2823 ///
2824 /// [Bit 7] PEBSSaveArchRegs.
2825 ///
2826 UINT32 PEBS_ARCH_REG:1;
2827 ///
2828 /// [Bits 11:8] PEBS Record Format.
2829 ///
2830 UINT32 PEBS_REC_FMT:4;
2831 ///
2832 /// [Bit 12] 1: Freeze while SMM is supported.
2833 ///
2834 UINT32 SMM_FREEZE:1;
2835 ///
2836 /// [Bit 13] 1: Full width of counter writable via IA32_A_PMCx.
2837 ///
2838 UINT32 FW_WRITE:1;
2839 UINT32 Reserved1:18;
2840 UINT32 Reserved2:32;
2841 } Bits;
2842 ///
2843 /// All bit fields as a 32-bit value
2844 ///
2845 UINT32 Uint32;
2846 ///
2847 /// All bit fields as a 64-bit value
2848 ///
2849 UINT64 Uint64;
2850 } MSR_IA32_PERF_CAPABILITIES_REGISTER;
2851
2852
2853 /**
2854 Fixed-Function Performance Counter Control (R/W) Counter increments while
2855 the results of ANDing respective enable bit in IA32_PERF_GLOBAL_CTRL with
2856 the corresponding OS or USR bits in this MSR is true. If CPUID.0AH: EAX[7:0]
2857 > 1.
2858
2859 @param ECX MSR_IA32_FIXED_CTR_CTRL (0x0000038D)
2860 @param EAX Lower 32-bits of MSR value.
2861 Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
2862 @param EDX Upper 32-bits of MSR value.
2863 Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
2864
2865 <b>Example usage</b>
2866 @code
2867 MSR_IA32_FIXED_CTR_CTRL_REGISTER Msr;
2868
2869 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FIXED_CTR_CTRL);
2870 AsmWriteMsr64 (MSR_IA32_FIXED_CTR_CTRL, Msr.Uint64);
2871 @endcode
2872 @note MSR_IA32_FIXED_CTR_CTRL is defined as IA32_FIXED_CTR_CTRL in SDM.
2873 **/
2874 #define MSR_IA32_FIXED_CTR_CTRL 0x0000038D
2875
2876 /**
2877 MSR information returned for MSR index #MSR_IA32_FIXED_CTR_CTRL
2878 **/
2879 typedef union {
2880 ///
2881 /// Individual bit fields
2882 ///
2883 struct {
2884 ///
2885 /// [Bit 0] EN0_OS: Enable Fixed Counter 0 to count while CPL = 0.
2886 ///
2887 UINT32 EN0_OS:1;
2888 ///
2889 /// [Bit 1] EN0_Usr: Enable Fixed Counter 0 to count while CPL > 0.
2890 ///
2891 UINT32 EN0_Usr:1;
2892 ///
2893 /// [Bit 2] AnyThread: When set to 1, it enables counting the associated
2894 /// event conditions occurring across all logical processors sharing a
2895 /// processor core. When set to 0, the counter only increments the
2896 /// associated event conditions occurring in the logical processor which
2897 /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
2898 ///
2899 UINT32 AnyThread0:1;
2900 ///
2901 /// [Bit 3] EN0_PMI: Enable PMI when fixed counter 0 overflows.
2902 ///
2903 UINT32 EN0_PMI:1;
2904 ///
2905 /// [Bit 4] EN1_OS: Enable Fixed Counter 1 to count while CPL = 0.
2906 ///
2907 UINT32 EN1_OS:1;
2908 ///
2909 /// [Bit 5] EN1_Usr: Enable Fixed Counter 1 to count while CPL > 0.
2910 ///
2911 UINT32 EN1_Usr:1;
2912 ///
2913 /// [Bit 6] AnyThread: When set to 1, it enables counting the associated
2914 /// event conditions occurring across all logical processors sharing a
2915 /// processor core. When set to 0, the counter only increments the
2916 /// associated event conditions occurring in the logical processor which
2917 /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
2918 ///
2919 UINT32 AnyThread1:1;
2920 ///
2921 /// [Bit 7] EN1_PMI: Enable PMI when fixed counter 1 overflows.
2922 ///
2923 UINT32 EN1_PMI:1;
2924 ///
2925 /// [Bit 8] EN2_OS: Enable Fixed Counter 2 to count while CPL = 0.
2926 ///
2927 UINT32 EN2_OS:1;
2928 ///
2929 /// [Bit 9] EN2_Usr: Enable Fixed Counter 2 to count while CPL > 0.
2930 ///
2931 UINT32 EN2_Usr:1;
2932 ///
2933 /// [Bit 10] AnyThread: When set to 1, it enables counting the associated
2934 /// event conditions occurring across all logical processors sharing a
2935 /// processor core. When set to 0, the counter only increments the
2936 /// associated event conditions occurring in the logical processor which
2937 /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
2938 ///
2939 UINT32 AnyThread2:1;
2940 ///
2941 /// [Bit 11] EN2_PMI: Enable PMI when fixed counter 2 overflows.
2942 ///
2943 UINT32 EN2_PMI:1;
2944 UINT32 Reserved1:20;
2945 UINT32 Reserved2:32;
2946 } Bits;
2947 ///
2948 /// All bit fields as a 32-bit value
2949 ///
2950 UINT32 Uint32;
2951 ///
2952 /// All bit fields as a 64-bit value
2953 ///
2954 UINT64 Uint64;
2955 } MSR_IA32_FIXED_CTR_CTRL_REGISTER;
2956
2957
2958 /**
2959 Global Performance Counter Status (RO). If CPUID.0AH: EAX[7:0] > 0.
2960
2961 @param ECX MSR_IA32_PERF_GLOBAL_STATUS (0x0000038E)
2962 @param EAX Lower 32-bits of MSR value.
2963 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
2964 @param EDX Upper 32-bits of MSR value.
2965 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
2966
2967 <b>Example usage</b>
2968 @code
2969 MSR_IA32_PERF_GLOBAL_STATUS_REGISTER Msr;
2970
2971 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS);
2972 @endcode
2973 @note MSR_IA32_PERF_GLOBAL_STATUS is defined as IA32_PERF_GLOBAL_STATUS in SDM.
2974 **/
2975 #define MSR_IA32_PERF_GLOBAL_STATUS 0x0000038E
2976
2977 /**
2978 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS
2979 **/
2980 typedef union {
2981 ///
2982 /// Individual bit fields
2983 ///
2984 struct {
2985 ///
2986 /// [Bit 0] Ovf_PMC0: Overflow status of IA32_PMC0. If CPUID.0AH:
2987 /// EAX[15:8] > 0.
2988 ///
2989 UINT32 Ovf_PMC0:1;
2990 ///
2991 /// [Bit 1] Ovf_PMC1: Overflow status of IA32_PMC1. If CPUID.0AH:
2992 /// EAX[15:8] > 1.
2993 ///
2994 UINT32 Ovf_PMC1:1;
2995 ///
2996 /// [Bit 2] Ovf_PMC2: Overflow status of IA32_PMC2. If CPUID.0AH:
2997 /// EAX[15:8] > 2.
2998 ///
2999 UINT32 Ovf_PMC2:1;
3000 ///
3001 /// [Bit 3] Ovf_PMC3: Overflow status of IA32_PMC3. If CPUID.0AH:
3002 /// EAX[15:8] > 3.
3003 ///
3004 UINT32 Ovf_PMC3:1;
3005 UINT32 Reserved1:28;
3006 ///
3007 /// [Bit 32] Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0. If
3008 /// CPUID.0AH: EAX[7:0] > 1.
3009 ///
3010 UINT32 Ovf_FixedCtr0:1;
3011 ///
3012 /// [Bit 33] Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1. If
3013 /// CPUID.0AH: EAX[7:0] > 1.
3014 ///
3015 UINT32 Ovf_FixedCtr1:1;
3016 ///
3017 /// [Bit 34] Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2. If
3018 /// CPUID.0AH: EAX[7:0] > 1.
3019 ///
3020 UINT32 Ovf_FixedCtr2:1;
3021 UINT32 Reserved2:20;
3022 ///
3023 /// [Bit 55] Trace_ToPA_PMI: A PMI occurred due to a ToPA entry memory
3024 /// buffer was completely filled. If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
3025 /// && IA32_RTIT_CTL.ToPA = 1.
3026 ///
3027 UINT32 Trace_ToPA_PMI:1;
3028 UINT32 Reserved3:2;
3029 ///
3030 /// [Bit 58] LBR_Frz: LBRs are frozen due to -
3031 /// IA32_DEBUGCTL.FREEZE_LBR_ON_PMI=1, - The LBR stack overflowed. If
3032 /// CPUID.0AH: EAX[7:0] > 3.
3033 ///
3034 UINT32 LBR_Frz:1;
3035 ///
3036 /// [Bit 59] CTR_Frz: Performance counters in the core PMU are frozen due
3037 /// to - IA32_DEBUGCTL.FREEZE_PERFMON_ON_ PMI=1, - one or more core PMU
3038 /// counters overflowed. If CPUID.0AH: EAX[7:0] > 3.
3039 ///
3040 UINT32 CTR_Frz:1;
3041 ///
3042 /// [Bit 60] ASCI: Data in the performance counters in the core PMU may
3043 /// include contributions from the direct or indirect operation intel SGX
3044 /// to protect an enclave. If CPUID.(EAX=07H, ECX=0):EBX[2] = 1.
3045 ///
3046 UINT32 ASCI:1;
3047 ///
3048 /// [Bit 61] Ovf_Uncore: Uncore counter overflow status. If CPUID.0AH:
3049 /// EAX[7:0] > 2.
3050 ///
3051 UINT32 Ovf_Uncore:1;
3052 ///
3053 /// [Bit 62] OvfBuf: DS SAVE area Buffer overflow status. If CPUID.0AH:
3054 /// EAX[7:0] > 0.
3055 ///
3056 UINT32 OvfBuf:1;
3057 ///
3058 /// [Bit 63] CondChgd: status bits of this register has changed. If
3059 /// CPUID.0AH: EAX[7:0] > 0.
3060 ///
3061 UINT32 CondChgd:1;
3062 } Bits;
3063 ///
3064 /// All bit fields as a 64-bit value
3065 ///
3066 UINT64 Uint64;
3067 } MSR_IA32_PERF_GLOBAL_STATUS_REGISTER;
3068
3069
3070 /**
3071 Global Performance Counter Control (R/W) Counter increments while the result
3072 of ANDing respective enable bit in this MSR with the corresponding OS or USR
3073 bits in the general-purpose or fixed counter control MSR is true. If
3074 CPUID.0AH: EAX[7:0] > 0.
3075
3076 @param ECX MSR_IA32_PERF_GLOBAL_CTRL (0x0000038F)
3077 @param EAX Lower 32-bits of MSR value.
3078 Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
3079 @param EDX Upper 32-bits of MSR value.
3080 Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
3081
3082 <b>Example usage</b>
3083 @code
3084 MSR_IA32_PERF_GLOBAL_CTRL_REGISTER Msr;
3085
3086 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_CTRL);
3087 AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_CTRL, Msr.Uint64);
3088 @endcode
3089 @note MSR_IA32_PERF_GLOBAL_CTRL is defined as IA32_PERF_GLOBAL_CTRL in SDM.
3090 **/
3091 #define MSR_IA32_PERF_GLOBAL_CTRL 0x0000038F
3092
3093 /**
3094 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_CTRL
3095 **/
3096 typedef union {
3097 ///
3098 /// Individual bit fields
3099 ///
3100 struct {
3101 ///
3102 /// [Bits 31:0] EN_PMCn. If CPUID.0AH: EAX[15:8] > n.
3103 /// Enable bitmask. Only the first n-1 bits are valid.
3104 /// Bits n..31 are reserved.
3105 ///
3106 UINT32 EN_PMCn:32;
3107 ///
3108 /// [Bits 63:32] EN_FIXED_CTRn. If CPUID.0AH: EDX[4:0] > n.
3109 /// Enable bitmask. Only the first n-1 bits are valid.
3110 /// Bits 31:n are reserved.
3111 ///
3112 UINT32 EN_FIXED_CTRn:32;
3113 } Bits;
3114 ///
3115 /// All bit fields as a 64-bit value
3116 ///
3117 UINT64 Uint64;
3118 } MSR_IA32_PERF_GLOBAL_CTRL_REGISTER;
3119
3120
3121 /**
3122 Global Performance Counter Overflow Control (R/W). If CPUID.0AH: EAX[7:0] >
3123 0 && CPUID.0AH: EAX[7:0] <= 3.
3124
3125 @param ECX MSR_IA32_PERF_GLOBAL_OVF_CTRL (0x00000390)
3126 @param EAX Lower 32-bits of MSR value.
3127 Described by the type MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
3128 @param EDX Upper 32-bits of MSR value.
3129 Described by the type MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
3130
3131 <b>Example usage</b>
3132 @code
3133 MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER Msr;
3134
3135 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL);
3136 AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL, Msr.Uint64);
3137 @endcode
3138 @note MSR_IA32_PERF_GLOBAL_OVF_CTRL is defined as IA32_PERF_GLOBAL_OVF_CTRL in SDM.
3139 **/
3140 #define MSR_IA32_PERF_GLOBAL_OVF_CTRL 0x00000390
3141
3142 /**
3143 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_OVF_CTRL
3144 **/
3145 typedef union {
3146 ///
3147 /// Individual bit fields
3148 ///
3149 struct {
3150 ///
3151 /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
3152 /// Clear bitmask. Only the first n-1 bits are valid.
3153 /// Bits 31:n are reserved.
3154 ///
3155 UINT32 Ovf_PMCn:32;
3156 ///
3157 /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
3158 /// If CPUID.0AH: EDX[4:0] > n.
3159 /// Clear bitmask. Only the first n-1 bits are valid.
3160 /// Bits 22:n are reserved.
3161 ///
3162 UINT32 Ovf_FIXED_CTRn:23;
3163 ///
3164 /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
3165 /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1.
3166 ///
3167 UINT32 Trace_ToPA_PMI:1;
3168 UINT32 Reserved2:5;
3169 ///
3170 /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
3171 /// Display Model 06_2EH.
3172 ///
3173 UINT32 Ovf_Uncore:1;
3174 ///
3175 /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
3176 ///
3177 UINT32 OvfBuf:1;
3178 ///
3179 /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
3180 ///
3181 UINT32 CondChgd:1;
3182 } Bits;
3183 ///
3184 /// All bit fields as a 64-bit value
3185 ///
3186 UINT64 Uint64;
3187 } MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER;
3188
3189
3190 /**
3191 Global Performance Counter Overflow Reset Control (R/W). If CPUID.0AH:
3192 EAX[7:0] > 3.
3193
3194 @param ECX MSR_IA32_PERF_GLOBAL_STATUS_RESET (0x00000390)
3195 @param EAX Lower 32-bits of MSR value.
3196 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
3197 @param EDX Upper 32-bits of MSR value.
3198 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
3199
3200 <b>Example usage</b>
3201 @code
3202 MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER Msr;
3203
3204 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET);
3205 AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET, Msr.Uint64);
3206 @endcode
3207 @note MSR_IA32_PERF_GLOBAL_STATUS_RESET is defined as IA32_PERF_GLOBAL_STATUS_RESET in SDM.
3208 **/
3209 #define MSR_IA32_PERF_GLOBAL_STATUS_RESET 0x00000390
3210
3211 /**
3212 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS_RESET
3213 **/
3214 typedef union {
3215 ///
3216 /// Individual bit fields
3217 ///
3218 struct {
3219 ///
3220 /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
3221 /// Clear bitmask. Only the first n-1 bits are valid.
3222 /// Bits 31:n are reserved.
3223 ///
3224 UINT32 Ovf_PMCn:32;
3225 ///
3226 /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
3227 /// If CPUID.0AH: EDX[4:0] > n.
3228 /// Clear bitmask. Only the first n-1 bits are valid.
3229 /// Bits 22:n are reserved.
3230 ///
3231 UINT32 Ovf_FIXED_CTRn:23;
3232 ///
3233 /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
3234 /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA[8] = 1.
3235 ///
3236 UINT32 Trace_ToPA_PMI:1;
3237 UINT32 Reserved2:2;
3238 ///
3239 /// [Bit 58] Set 1 to Clear LBR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
3240 ///
3241 UINT32 LBR_Frz:1;
3242 ///
3243 /// [Bit 59] Set 1 to Clear CTR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
3244 ///
3245 UINT32 CTR_Frz:1;
3246 ///
3247 /// [Bit 60] Set 1 to Clear ASCI bit. If CPUID.0AH: EAX[7:0] > 3.
3248 ///
3249 UINT32 ASCI:1;
3250 ///
3251 /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
3252 /// Display Model 06_2EH.
3253 ///
3254 UINT32 Ovf_Uncore:1;
3255 ///
3256 /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
3257 ///
3258 UINT32 OvfBuf:1;
3259 ///
3260 /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
3261 ///
3262 UINT32 CondChgd:1;
3263 } Bits;
3264 ///
3265 /// All bit fields as a 64-bit value
3266 ///
3267 UINT64 Uint64;
3268 } MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER;
3269
3270
3271 /**
3272 Global Performance Counter Overflow Set Control (R/W). If CPUID.0AH:
3273 EAX[7:0] > 3.
3274
3275 @param ECX MSR_IA32_PERF_GLOBAL_STATUS_SET (0x00000391)
3276 @param EAX Lower 32-bits of MSR value.
3277 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
3278 @param EDX Upper 32-bits of MSR value.
3279 Described by the type MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
3280
3281 <b>Example usage</b>
3282 @code
3283 MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER Msr;
3284
3285 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET);
3286 AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET, Msr.Uint64);
3287 @endcode
3288 @note MSR_IA32_PERF_GLOBAL_STATUS_SET is defined as IA32_PERF_GLOBAL_STATUS_SET in SDM.
3289 **/
3290 #define MSR_IA32_PERF_GLOBAL_STATUS_SET 0x00000391
3291
3292 /**
3293 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS_SET
3294 **/
3295 typedef union {
3296 ///
3297 /// Individual bit fields
3298 ///
3299 struct {
3300 ///
3301 /// [Bits 31:0] Set 1 to cause Ovf_PMCn = 1. If CPUID.0AH: EAX[7:0] > n.
3302 /// Set bitmask. Only the first n-1 bits are valid.
3303 /// Bits 31:n are reserved.
3304 ///
3305 UINT32 Ovf_PMCn:32;
3306 ///
3307 /// [Bits 54:32] Set 1 to cause Ovf_FIXED_CTRn = 1.
3308 /// If CPUID.0AH: EAX[7:0] > n.
3309 /// Set bitmask. Only the first n-1 bits are valid.
3310 /// Bits 22:n are reserved.
3311 ///
3312 UINT32 Ovf_FIXED_CTRn:23;
3313 ///
3314 /// [Bit 55] Set 1 to cause Trace_ToPA_PMI = 1. If CPUID.0AH: EAX[7:0] > 3.
3315 ///
3316 UINT32 Trace_ToPA_PMI:1;
3317 UINT32 Reserved2:2;
3318 ///
3319 /// [Bit 58] Set 1 to cause LBR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
3320 ///
3321 UINT32 LBR_Frz:1;
3322 ///
3323 /// [Bit 59] Set 1 to cause CTR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
3324 ///
3325 UINT32 CTR_Frz:1;
3326 ///
3327 /// [Bit 60] Set 1 to cause ASCI = 1. If CPUID.0AH: EAX[7:0] > 3.
3328 ///
3329 UINT32 ASCI:1;
3330 ///
3331 /// [Bit 61] Set 1 to cause Ovf_Uncore = 1. If CPUID.0AH: EAX[7:0] > 3.
3332 ///
3333 UINT32 Ovf_Uncore:1;
3334 ///
3335 /// [Bit 62] Set 1 to cause OvfBuf = 1. If CPUID.0AH: EAX[7:0] > 3.
3336 ///
3337 UINT32 OvfBuf:1;
3338 UINT32 Reserved3:1;
3339 } Bits;
3340 ///
3341 /// All bit fields as a 64-bit value
3342 ///
3343 UINT64 Uint64;
3344 } MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER;
3345
3346
3347 /**
3348 Indicator of core perfmon interface is in use (RO). If CPUID.0AH: EAX[7:0] >
3349 3.
3350
3351 @param ECX MSR_IA32_PERF_GLOBAL_INUSE (0x00000392)
3352 @param EAX Lower 32-bits of MSR value.
3353 Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
3354 @param EDX Upper 32-bits of MSR value.
3355 Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
3356
3357 <b>Example usage</b>
3358 @code
3359 MSR_IA32_PERF_GLOBAL_INUSE_REGISTER Msr;
3360
3361 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_INUSE);
3362 @endcode
3363 @note MSR_IA32_PERF_GLOBAL_INUSE is defined as IA32_PERF_GLOBAL_INUSE in SDM.
3364 **/
3365 #define MSR_IA32_PERF_GLOBAL_INUSE 0x00000392
3366
3367 /**
3368 MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_INUSE
3369 **/
3370 typedef union {
3371 ///
3372 /// Individual bit fields
3373 ///
3374 struct {
3375 ///
3376 /// [Bits 31:0] IA32_PERFEVTSELn in use. If CPUID.0AH: EAX[7:0] > n.
3377 /// Status bitmask. Only the first n-1 bits are valid.
3378 /// Bits 31:n are reserved.
3379 ///
3380 UINT32 IA32_PERFEVTSELn:32;
3381 ///
3382 /// [Bits 62:32] IA32_FIXED_CTRn in use.
3383 /// If CPUID.0AH: EAX[7:0] > n.
3384 /// Status bitmask. Only the first n-1 bits are valid.
3385 /// Bits 30:n are reserved.
3386 ///
3387 UINT32 IA32_FIXED_CTRn:31;
3388 ///
3389 /// [Bit 63] PMI in use.
3390 ///
3391 UINT32 PMI:1;
3392 } Bits;
3393 ///
3394 /// All bit fields as a 64-bit value
3395 ///
3396 UINT64 Uint64;
3397 } MSR_IA32_PERF_GLOBAL_INUSE_REGISTER;
3398
3399
3400 /**
3401 PEBS Control (R/W).
3402
3403 @param ECX MSR_IA32_PEBS_ENABLE (0x000003F1)
3404 @param EAX Lower 32-bits of MSR value.
3405 Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
3406 @param EDX Upper 32-bits of MSR value.
3407 Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
3408
3409 <b>Example usage</b>
3410 @code
3411 MSR_IA32_PEBS_ENABLE_REGISTER Msr;
3412
3413 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PEBS_ENABLE);
3414 AsmWriteMsr64 (MSR_IA32_PEBS_ENABLE, Msr.Uint64);
3415 @endcode
3416 @note MSR_IA32_PEBS_ENABLE is defined as IA32_PEBS_ENABLE in SDM.
3417 **/
3418 #define MSR_IA32_PEBS_ENABLE 0x000003F1
3419
3420 /**
3421 MSR information returned for MSR index #MSR_IA32_PEBS_ENABLE
3422 **/
3423 typedef union {
3424 ///
3425 /// Individual bit fields
3426 ///
3427 struct {
3428 ///
3429 /// [Bit 0] Enable PEBS on IA32_PMC0. Introduced at Display Family /
3430 /// Display Model 06_0FH.
3431 ///
3432 UINT32 Enable:1;
3433 ///
3434 /// [Bits 3:1] Reserved or Model specific.
3435 ///
3436 UINT32 Reserved1:3;
3437 UINT32 Reserved2:28;
3438 ///
3439 /// [Bits 35:32] Reserved or Model specific.
3440 ///
3441 UINT32 Reserved3:4;
3442 UINT32 Reserved4:28;
3443 } Bits;
3444 ///
3445 /// All bit fields as a 64-bit value
3446 ///
3447 UINT64 Uint64;
3448 } MSR_IA32_PEBS_ENABLE_REGISTER;
3449
3450
3451 /**
3452 MCn_CTL. If IA32_MCG_CAP.CNT > n.
3453
3454 @param ECX MSR_IA32_MCn_CTL
3455 @param EAX Lower 32-bits of MSR value.
3456 @param EDX Upper 32-bits of MSR value.
3457
3458 <b>Example usage</b>
3459 @code
3460 UINT64 Msr;
3461
3462 Msr = AsmReadMsr64 (MSR_IA32_MC0_CTL);
3463 AsmWriteMsr64 (MSR_IA32_MC0_CTL, Msr);
3464 @endcode
3465 @note MSR_IA32_MC0_CTL is defined as IA32_MC0_CTL in SDM.
3466 MSR_IA32_MC1_CTL is defined as IA32_MC1_CTL in SDM.
3467 MSR_IA32_MC2_CTL is defined as IA32_MC2_CTL in SDM.
3468 MSR_IA32_MC3_CTL is defined as IA32_MC3_CTL in SDM.
3469 MSR_IA32_MC4_CTL is defined as IA32_MC4_CTL in SDM.
3470 MSR_IA32_MC5_CTL is defined as IA32_MC5_CTL in SDM.
3471 MSR_IA32_MC6_CTL is defined as IA32_MC6_CTL in SDM.
3472 MSR_IA32_MC7_CTL is defined as IA32_MC7_CTL in SDM.
3473 MSR_IA32_MC8_CTL is defined as IA32_MC8_CTL in SDM.
3474 MSR_IA32_MC9_CTL is defined as IA32_MC9_CTL in SDM.
3475 MSR_IA32_MC10_CTL is defined as IA32_MC10_CTL in SDM.
3476 MSR_IA32_MC11_CTL is defined as IA32_MC11_CTL in SDM.
3477 MSR_IA32_MC12_CTL is defined as IA32_MC12_CTL in SDM.
3478 MSR_IA32_MC13_CTL is defined as IA32_MC13_CTL in SDM.
3479 MSR_IA32_MC14_CTL is defined as IA32_MC14_CTL in SDM.
3480 MSR_IA32_MC15_CTL is defined as IA32_MC15_CTL in SDM.
3481 MSR_IA32_MC16_CTL is defined as IA32_MC16_CTL in SDM.
3482 MSR_IA32_MC17_CTL is defined as IA32_MC17_CTL in SDM.
3483 MSR_IA32_MC18_CTL is defined as IA32_MC18_CTL in SDM.
3484 MSR_IA32_MC19_CTL is defined as IA32_MC19_CTL in SDM.
3485 MSR_IA32_MC20_CTL is defined as IA32_MC20_CTL in SDM.
3486 MSR_IA32_MC21_CTL is defined as IA32_MC21_CTL in SDM.
3487 MSR_IA32_MC22_CTL is defined as IA32_MC22_CTL in SDM.
3488 MSR_IA32_MC23_CTL is defined as IA32_MC23_CTL in SDM.
3489 MSR_IA32_MC24_CTL is defined as IA32_MC24_CTL in SDM.
3490 MSR_IA32_MC25_CTL is defined as IA32_MC25_CTL in SDM.
3491 MSR_IA32_MC26_CTL is defined as IA32_MC26_CTL in SDM.
3492 MSR_IA32_MC27_CTL is defined as IA32_MC27_CTL in SDM.
3493 MSR_IA32_MC28_CTL is defined as IA32_MC28_CTL in SDM.
3494 @{
3495 **/
3496 #define MSR_IA32_MC0_CTL 0x00000400
3497 #define MSR_IA32_MC1_CTL 0x00000404
3498 #define MSR_IA32_MC2_CTL 0x00000408
3499 #define MSR_IA32_MC3_CTL 0x0000040C
3500 #define MSR_IA32_MC4_CTL 0x00000410
3501 #define MSR_IA32_MC5_CTL 0x00000414
3502 #define MSR_IA32_MC6_CTL 0x00000418
3503 #define MSR_IA32_MC7_CTL 0x0000041C
3504 #define MSR_IA32_MC8_CTL 0x00000420
3505 #define MSR_IA32_MC9_CTL 0x00000424
3506 #define MSR_IA32_MC10_CTL 0x00000428
3507 #define MSR_IA32_MC11_CTL 0x0000042C
3508 #define MSR_IA32_MC12_CTL 0x00000430
3509 #define MSR_IA32_MC13_CTL 0x00000434
3510 #define MSR_IA32_MC14_CTL 0x00000438
3511 #define MSR_IA32_MC15_CTL 0x0000043C
3512 #define MSR_IA32_MC16_CTL 0x00000440
3513 #define MSR_IA32_MC17_CTL 0x00000444
3514 #define MSR_IA32_MC18_CTL 0x00000448
3515 #define MSR_IA32_MC19_CTL 0x0000044C
3516 #define MSR_IA32_MC20_CTL 0x00000450
3517 #define MSR_IA32_MC21_CTL 0x00000454
3518 #define MSR_IA32_MC22_CTL 0x00000458
3519 #define MSR_IA32_MC23_CTL 0x0000045C
3520 #define MSR_IA32_MC24_CTL 0x00000460
3521 #define MSR_IA32_MC25_CTL 0x00000464
3522 #define MSR_IA32_MC26_CTL 0x00000468
3523 #define MSR_IA32_MC27_CTL 0x0000046C
3524 #define MSR_IA32_MC28_CTL 0x00000470
3525 /// @}
3526
3527
3528 /**
3529 MCn_STATUS. If IA32_MCG_CAP.CNT > n.
3530
3531 @param ECX MSR_IA32_MCn_STATUS
3532 @param EAX Lower 32-bits of MSR value.
3533 @param EDX Upper 32-bits of MSR value.
3534
3535 <b>Example usage</b>
3536 @code
3537 UINT64 Msr;
3538
3539 Msr = AsmReadMsr64 (MSR_IA32_MC0_STATUS);
3540 AsmWriteMsr64 (MSR_IA32_MC0_STATUS, Msr);
3541 @endcode
3542 @note MSR_IA32_MC0_STATUS is defined as IA32_MC0_STATUS in SDM.
3543 MSR_IA32_MC1_STATUS is defined as IA32_MC1_STATUS in SDM.
3544 MSR_IA32_MC2_STATUS is defined as IA32_MC2_STATUS in SDM.
3545 MSR_IA32_MC3_STATUS is defined as IA32_MC3_STATUS in SDM.
3546 MSR_IA32_MC4_STATUS is defined as IA32_MC4_STATUS in SDM.
3547 MSR_IA32_MC5_STATUS is defined as IA32_MC5_STATUS in SDM.
3548 MSR_IA32_MC6_STATUS is defined as IA32_MC6_STATUS in SDM.
3549 MSR_IA32_MC7_STATUS is defined as IA32_MC7_STATUS in SDM.
3550 MSR_IA32_MC8_STATUS is defined as IA32_MC8_STATUS in SDM.
3551 MSR_IA32_MC9_STATUS is defined as IA32_MC9_STATUS in SDM.
3552 MSR_IA32_MC10_STATUS is defined as IA32_MC10_STATUS in SDM.
3553 MSR_IA32_MC11_STATUS is defined as IA32_MC11_STATUS in SDM.
3554 MSR_IA32_MC12_STATUS is defined as IA32_MC12_STATUS in SDM.
3555 MSR_IA32_MC13_STATUS is defined as IA32_MC13_STATUS in SDM.
3556 MSR_IA32_MC14_STATUS is defined as IA32_MC14_STATUS in SDM.
3557 MSR_IA32_MC15_STATUS is defined as IA32_MC15_STATUS in SDM.
3558 MSR_IA32_MC16_STATUS is defined as IA32_MC16_STATUS in SDM.
3559 MSR_IA32_MC17_STATUS is defined as IA32_MC17_STATUS in SDM.
3560 MSR_IA32_MC18_STATUS is defined as IA32_MC18_STATUS in SDM.
3561 MSR_IA32_MC19_STATUS is defined as IA32_MC19_STATUS in SDM.
3562 MSR_IA32_MC20_STATUS is defined as IA32_MC20_STATUS in SDM.
3563 MSR_IA32_MC21_STATUS is defined as IA32_MC21_STATUS in SDM.
3564 MSR_IA32_MC22_STATUS is defined as IA32_MC22_STATUS in SDM.
3565 MSR_IA32_MC23_STATUS is defined as IA32_MC23_STATUS in SDM.
3566 MSR_IA32_MC24_STATUS is defined as IA32_MC24_STATUS in SDM.
3567 MSR_IA32_MC25_STATUS is defined as IA32_MC25_STATUS in SDM.
3568 MSR_IA32_MC26_STATUS is defined as IA32_MC26_STATUS in SDM.
3569 MSR_IA32_MC27_STATUS is defined as IA32_MC27_STATUS in SDM.
3570 MSR_IA32_MC28_STATUS is defined as IA32_MC28_STATUS in SDM.
3571 @{
3572 **/
3573 #define MSR_IA32_MC0_STATUS 0x00000401
3574 #define MSR_IA32_MC1_STATUS 0x00000405
3575 #define MSR_IA32_MC2_STATUS 0x00000409
3576 #define MSR_IA32_MC3_STATUS 0x0000040D
3577 #define MSR_IA32_MC4_STATUS 0x00000411
3578 #define MSR_IA32_MC5_STATUS 0x00000415
3579 #define MSR_IA32_MC6_STATUS 0x00000419
3580 #define MSR_IA32_MC7_STATUS 0x0000041D
3581 #define MSR_IA32_MC8_STATUS 0x00000421
3582 #define MSR_IA32_MC9_STATUS 0x00000425
3583 #define MSR_IA32_MC10_STATUS 0x00000429
3584 #define MSR_IA32_MC11_STATUS 0x0000042D
3585 #define MSR_IA32_MC12_STATUS 0x00000431
3586 #define MSR_IA32_MC13_STATUS 0x00000435
3587 #define MSR_IA32_MC14_STATUS 0x00000439
3588 #define MSR_IA32_MC15_STATUS 0x0000043D
3589 #define MSR_IA32_MC16_STATUS 0x00000441
3590 #define MSR_IA32_MC17_STATUS 0x00000445
3591 #define MSR_IA32_MC18_STATUS 0x00000449
3592 #define MSR_IA32_MC19_STATUS 0x0000044D
3593 #define MSR_IA32_MC20_STATUS 0x00000451
3594 #define MSR_IA32_MC21_STATUS 0x00000455
3595 #define MSR_IA32_MC22_STATUS 0x00000459
3596 #define MSR_IA32_MC23_STATUS 0x0000045D
3597 #define MSR_IA32_MC24_STATUS 0x00000461
3598 #define MSR_IA32_MC25_STATUS 0x00000465
3599 #define MSR_IA32_MC26_STATUS 0x00000469
3600 #define MSR_IA32_MC27_STATUS 0x0000046D
3601 #define MSR_IA32_MC28_STATUS 0x00000471
3602 /// @}
3603
3604
3605 /**
3606 MCn_ADDR. If IA32_MCG_CAP.CNT > n.
3607
3608 @param ECX MSR_IA32_MCn_ADDR
3609 @param EAX Lower 32-bits of MSR value.
3610 @param EDX Upper 32-bits of MSR value.
3611
3612 <b>Example usage</b>
3613 @code
3614 UINT64 Msr;
3615
3616 Msr = AsmReadMsr64 (MSR_IA32_MC0_ADDR);
3617 AsmWriteMsr64 (MSR_IA32_MC0_ADDR, Msr);
3618 @endcode
3619 @note MSR_IA32_MC0_ADDR is defined as IA32_MC0_ADDR in SDM.
3620 MSR_IA32_MC1_ADDR is defined as IA32_MC1_ADDR in SDM.
3621 MSR_IA32_MC2_ADDR is defined as IA32_MC2_ADDR in SDM.
3622 MSR_IA32_MC3_ADDR is defined as IA32_MC3_ADDR in SDM.
3623 MSR_IA32_MC4_ADDR is defined as IA32_MC4_ADDR in SDM.
3624 MSR_IA32_MC5_ADDR is defined as IA32_MC5_ADDR in SDM.
3625 MSR_IA32_MC6_ADDR is defined as IA32_MC6_ADDR in SDM.
3626 MSR_IA32_MC7_ADDR is defined as IA32_MC7_ADDR in SDM.
3627 MSR_IA32_MC8_ADDR is defined as IA32_MC8_ADDR in SDM.
3628 MSR_IA32_MC9_ADDR is defined as IA32_MC9_ADDR in SDM.
3629 MSR_IA32_MC10_ADDR is defined as IA32_MC10_ADDR in SDM.
3630 MSR_IA32_MC11_ADDR is defined as IA32_MC11_ADDR in SDM.
3631 MSR_IA32_MC12_ADDR is defined as IA32_MC12_ADDR in SDM.
3632 MSR_IA32_MC13_ADDR is defined as IA32_MC13_ADDR in SDM.
3633 MSR_IA32_MC14_ADDR is defined as IA32_MC14_ADDR in SDM.
3634 MSR_IA32_MC15_ADDR is defined as IA32_MC15_ADDR in SDM.
3635 MSR_IA32_MC16_ADDR is defined as IA32_MC16_ADDR in SDM.
3636 MSR_IA32_MC17_ADDR is defined as IA32_MC17_ADDR in SDM.
3637 MSR_IA32_MC18_ADDR is defined as IA32_MC18_ADDR in SDM.
3638 MSR_IA32_MC19_ADDR is defined as IA32_MC19_ADDR in SDM.
3639 MSR_IA32_MC20_ADDR is defined as IA32_MC20_ADDR in SDM.
3640 MSR_IA32_MC21_ADDR is defined as IA32_MC21_ADDR in SDM.
3641 MSR_IA32_MC22_ADDR is defined as IA32_MC22_ADDR in SDM.
3642 MSR_IA32_MC23_ADDR is defined as IA32_MC23_ADDR in SDM.
3643 MSR_IA32_MC24_ADDR is defined as IA32_MC24_ADDR in SDM.
3644 MSR_IA32_MC25_ADDR is defined as IA32_MC25_ADDR in SDM.
3645 MSR_IA32_MC26_ADDR is defined as IA32_MC26_ADDR in SDM.
3646 MSR_IA32_MC27_ADDR is defined as IA32_MC27_ADDR in SDM.
3647 MSR_IA32_MC28_ADDR is defined as IA32_MC28_ADDR in SDM.
3648 @{
3649 **/
3650 #define MSR_IA32_MC0_ADDR 0x00000402
3651 #define MSR_IA32_MC1_ADDR 0x00000406
3652 #define MSR_IA32_MC2_ADDR 0x0000040A
3653 #define MSR_IA32_MC3_ADDR 0x0000040E
3654 #define MSR_IA32_MC4_ADDR 0x00000412
3655 #define MSR_IA32_MC5_ADDR 0x00000416
3656 #define MSR_IA32_MC6_ADDR 0x0000041A
3657 #define MSR_IA32_MC7_ADDR 0x0000041E
3658 #define MSR_IA32_MC8_ADDR 0x00000422
3659 #define MSR_IA32_MC9_ADDR 0x00000426
3660 #define MSR_IA32_MC10_ADDR 0x0000042A
3661 #define MSR_IA32_MC11_ADDR 0x0000042E
3662 #define MSR_IA32_MC12_ADDR 0x00000432
3663 #define MSR_IA32_MC13_ADDR 0x00000436
3664 #define MSR_IA32_MC14_ADDR 0x0000043A
3665 #define MSR_IA32_MC15_ADDR 0x0000043E
3666 #define MSR_IA32_MC16_ADDR 0x00000442
3667 #define MSR_IA32_MC17_ADDR 0x00000446
3668 #define MSR_IA32_MC18_ADDR 0x0000044A
3669 #define MSR_IA32_MC19_ADDR 0x0000044E
3670 #define MSR_IA32_MC20_ADDR 0x00000452
3671 #define MSR_IA32_MC21_ADDR 0x00000456
3672 #define MSR_IA32_MC22_ADDR 0x0000045A
3673 #define MSR_IA32_MC23_ADDR 0x0000045E
3674 #define MSR_IA32_MC24_ADDR 0x00000462
3675 #define MSR_IA32_MC25_ADDR 0x00000466
3676 #define MSR_IA32_MC26_ADDR 0x0000046A
3677 #define MSR_IA32_MC27_ADDR 0x0000046E
3678 #define MSR_IA32_MC28_ADDR 0x00000472
3679 /// @}
3680
3681
3682 /**
3683 MCn_MISC. If IA32_MCG_CAP.CNT > n.
3684
3685 @param ECX MSR_IA32_MCn_MISC
3686 @param EAX Lower 32-bits of MSR value.
3687 @param EDX Upper 32-bits of MSR value.
3688
3689 <b>Example usage</b>
3690 @code
3691 UINT64 Msr;
3692
3693 Msr = AsmReadMsr64 (MSR_IA32_MC0_MISC);
3694 AsmWriteMsr64 (MSR_IA32_MC0_MISC, Msr);
3695 @endcode
3696 @note MSR_IA32_MC0_MISC is defined as IA32_MC0_MISC in SDM.
3697 MSR_IA32_MC1_MISC is defined as IA32_MC1_MISC in SDM.
3698 MSR_IA32_MC2_MISC is defined as IA32_MC2_MISC in SDM.
3699 MSR_IA32_MC3_MISC is defined as IA32_MC3_MISC in SDM.
3700 MSR_IA32_MC4_MISC is defined as IA32_MC4_MISC in SDM.
3701 MSR_IA32_MC5_MISC is defined as IA32_MC5_MISC in SDM.
3702 MSR_IA32_MC6_MISC is defined as IA32_MC6_MISC in SDM.
3703 MSR_IA32_MC7_MISC is defined as IA32_MC7_MISC in SDM.
3704 MSR_IA32_MC8_MISC is defined as IA32_MC8_MISC in SDM.
3705 MSR_IA32_MC9_MISC is defined as IA32_MC9_MISC in SDM.
3706 MSR_IA32_MC10_MISC is defined as IA32_MC10_MISC in SDM.
3707 MSR_IA32_MC11_MISC is defined as IA32_MC11_MISC in SDM.
3708 MSR_IA32_MC12_MISC is defined as IA32_MC12_MISC in SDM.
3709 MSR_IA32_MC13_MISC is defined as IA32_MC13_MISC in SDM.
3710 MSR_IA32_MC14_MISC is defined as IA32_MC14_MISC in SDM.
3711 MSR_IA32_MC15_MISC is defined as IA32_MC15_MISC in SDM.
3712 MSR_IA32_MC16_MISC is defined as IA32_MC16_MISC in SDM.
3713 MSR_IA32_MC17_MISC is defined as IA32_MC17_MISC in SDM.
3714 MSR_IA32_MC18_MISC is defined as IA32_MC18_MISC in SDM.
3715 MSR_IA32_MC19_MISC is defined as IA32_MC19_MISC in SDM.
3716 MSR_IA32_MC20_MISC is defined as IA32_MC20_MISC in SDM.
3717 MSR_IA32_MC21_MISC is defined as IA32_MC21_MISC in SDM.
3718 MSR_IA32_MC22_MISC is defined as IA32_MC22_MISC in SDM.
3719 MSR_IA32_MC23_MISC is defined as IA32_MC23_MISC in SDM.
3720 MSR_IA32_MC24_MISC is defined as IA32_MC24_MISC in SDM.
3721 MSR_IA32_MC25_MISC is defined as IA32_MC25_MISC in SDM.
3722 MSR_IA32_MC26_MISC is defined as IA32_MC26_MISC in SDM.
3723 MSR_IA32_MC27_MISC is defined as IA32_MC27_MISC in SDM.
3724 MSR_IA32_MC28_MISC is defined as IA32_MC28_MISC in SDM.
3725 @{
3726 **/
3727 #define MSR_IA32_MC0_MISC 0x00000403
3728 #define MSR_IA32_MC1_MISC 0x00000407
3729 #define MSR_IA32_MC2_MISC 0x0000040B
3730 #define MSR_IA32_MC3_MISC 0x0000040F
3731 #define MSR_IA32_MC4_MISC 0x00000413
3732 #define MSR_IA32_MC5_MISC 0x00000417
3733 #define MSR_IA32_MC6_MISC 0x0000041B
3734 #define MSR_IA32_MC7_MISC 0x0000041F
3735 #define MSR_IA32_MC8_MISC 0x00000423
3736 #define MSR_IA32_MC9_MISC 0x00000427
3737 #define MSR_IA32_MC10_MISC 0x0000042B
3738 #define MSR_IA32_MC11_MISC 0x0000042F
3739 #define MSR_IA32_MC12_MISC 0x00000433
3740 #define MSR_IA32_MC13_MISC 0x00000437
3741 #define MSR_IA32_MC14_MISC 0x0000043B
3742 #define MSR_IA32_MC15_MISC 0x0000043F
3743 #define MSR_IA32_MC16_MISC 0x00000443
3744 #define MSR_IA32_MC17_MISC 0x00000447
3745 #define MSR_IA32_MC18_MISC 0x0000044B
3746 #define MSR_IA32_MC19_MISC 0x0000044F
3747 #define MSR_IA32_MC20_MISC 0x00000453
3748 #define MSR_IA32_MC21_MISC 0x00000457
3749 #define MSR_IA32_MC22_MISC 0x0000045B
3750 #define MSR_IA32_MC23_MISC 0x0000045F
3751 #define MSR_IA32_MC24_MISC 0x00000463
3752 #define MSR_IA32_MC25_MISC 0x00000467
3753 #define MSR_IA32_MC26_MISC 0x0000046B
3754 #define MSR_IA32_MC27_MISC 0x0000046F
3755 #define MSR_IA32_MC28_MISC 0x00000473
3756 /// @}
3757
3758
3759 /**
3760 Reporting Register of Basic VMX Capabilities (R/O) See Appendix A.1, "Basic
3761 VMX Information.". If CPUID.01H:ECX.[5] = 1.
3762
3763 @param ECX MSR_IA32_VMX_BASIC (0x00000480)
3764 @param EAX Lower 32-bits of MSR value.
3765 @param EDX Upper 32-bits of MSR value.
3766
3767 <b>Example usage</b>
3768 @code
3769 MSR_IA32_VMX_BASIC_REGISTER Msr;
3770
3771 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_BASIC);
3772 @endcode
3773 @note MSR_IA32_VMX_BASIC is defined as IA32_VMX_BASIC in SDM.
3774 **/
3775 #define MSR_IA32_VMX_BASIC 0x00000480
3776
3777 /**
3778 MSR information returned for MSR index #MSR_IA32_VMX_BASIC
3779 **/
3780 typedef union {
3781 ///
3782 /// Individual bit fields
3783 ///
3784 struct {
3785 ///
3786 /// [Bits 30:0] VMCS revision identifier used by the processor. Processors
3787 /// that use the same VMCS revision identifier use the same size for VMCS
3788 /// regions (see subsequent item on bits 44:32).
3789 ///
3790 /// @note Earlier versions of this manual specified that the VMCS revision
3791 /// identifier was a 32-bit field in bits 31:0 of this MSR. For all
3792 /// processors produced prior to this change, bit 31 of this MSR was read
3793 /// as 0.
3794 ///
3795 UINT32 VmcsRevisonId:31;
3796 UINT32 MustBeZero:1;
3797 ///
3798 /// [Bit 44:32] Reports the number of bytes that software should allocate
3799 /// for the VMXON region and any VMCS region. It is a value greater than
3800 /// 0 and at most 4096(bit 44 is set if and only if bits 43:32 are clear).
3801 ///
3802 UINT32 VmcsSize:13;
3803 UINT32 Reserved1:3;
3804 ///
3805 /// [Bit 48] Indicates the width of the physical addresses that may be used
3806 /// for the VMXON region, each VMCS, and data structures referenced by
3807 /// pointers in a VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX
3808 /// transitions). If the bit is 0, these addresses are limited to the
3809 /// processor's physical-address width. If the bit is 1, these addresses
3810 /// are limited to 32 bits. This bit is always 0 for processors that
3811 /// support Intel 64 architecture.
3812 ///
3813 /// @note On processors that support Intel 64 architecture, the pointer
3814 /// must not set bits beyond the processor's physical address width.
3815 ///
3816 UINT32 VmcsAddressWidth:1;
3817 ///
3818 /// [Bit 49] If bit 49 is read as 1, the logical processor supports the
3819 /// dual-monitor treatment of system-management interrupts and
3820 /// system-management mode. See Section 34.15 for details of this treatment.
3821 ///
3822 UINT32 DualMonitor:1;
3823 ///
3824 /// [Bit 53:50] report the memory type that should be used for the VMCS,
3825 /// for data structures referenced by pointers in the VMCS (I/O bitmaps,
3826 /// virtual-APIC page, MSR areas for VMX transitions), and for the MSEG
3827 /// header. If software needs to access these data structures (e.g., to
3828 /// modify the contents of the MSR bitmaps), it can configure the paging
3829 /// structures to map them into the linear-address space. If it does so,
3830 /// it should establish mappings that use the memory type reported bits
3831 /// 53:50 in this MSR.
3832 ///
3833 /// As of this writing, all processors that support VMX operation indicate
3834 /// the write-back type.
3835 ///
3836 /// If software needs to access these data structures (e.g., to modify
3837 /// the contents of the MSR bitmaps), it can configure the paging
3838 /// structures to map them into the linear-address space. If it does so,
3839 /// it should establish mappings that use the memory type reported in this
3840 /// MSR.
3841 ///
3842 /// @note Alternatively, software may map any of these regions or
3843 /// structures with the UC memory type. (This may be necessary for the MSEG
3844 /// header.) Doing so is discouraged unless necessary as it will cause the
3845 /// performance of software accesses to those structures to suffer.
3846 ///
3847 ///
3848 UINT32 MemoryType:4;
3849 ///
3850 /// [Bit 54] If bit 54 is read as 1, the processor reports information in
3851 /// the VM-exit instruction-information field on VM exitsdue to execution
3852 /// of the INS and OUTS instructions (see Section 27.2.4). This reporting
3853 /// is done only if this bit is read as 1.
3854 ///
3855 UINT32 InsOutsReporting:1;
3856 ///
3857 /// [Bit 55] Bit 55 is read as 1 if any VMX controls that default to 1 may
3858 /// be cleared to 0. See Appendix A.2 for details. It also reports support
3859 /// for the VMX capability MSRs IA32_VMX_TRUE_PINBASED_CTLS,
3860 /// IA32_VMX_TRUE_PROCBASED_CTLS, IA32_VMX_TRUE_EXIT_CTLS, and
3861 /// IA32_VMX_TRUE_ENTRY_CTLS. See Appendix A.3.1, Appendix A.3.2,
3862 /// Appendix A.4, and Appendix A.5 for details.
3863 ///
3864 UINT32 VmxControls:1;
3865 UINT32 Reserved2:8;
3866 } Bits;
3867 ///
3868 /// All bit fields as a 64-bit value
3869 ///
3870 UINT64 Uint64;
3871 } MSR_IA32_VMX_BASIC_REGISTER;
3872
3873 ///
3874 /// @{ Define value for bit field MSR_IA32_VMX_BASIC_REGISTER.MemoryType
3875 ///
3876 #define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_UNCACHEABLE 0x00
3877 #define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_WRITE_BACK 0x06
3878 ///
3879 /// @}
3880 ///
3881
3882
3883 /**
3884 Capability Reporting Register of Pinbased VM-execution Controls (R/O) See
3885 Appendix A.3.1, "Pin-Based VMExecution Controls.". If CPUID.01H:ECX.[5] = 1.
3886
3887 @param ECX MSR_IA32_VMX_PINBASED_CTLS (0x00000481)
3888 @param EAX Lower 32-bits of MSR value.
3889 @param EDX Upper 32-bits of MSR value.
3890
3891 <b>Example usage</b>
3892 @code
3893 UINT64 Msr;
3894
3895 Msr = AsmReadMsr64 (MSR_IA32_VMX_PINBASED_CTLS);
3896 @endcode
3897 @note MSR_IA32_VMX_PINBASED_CTLS is defined as IA32_VMX_PINBASED_CTLS in SDM.
3898 **/
3899 #define MSR_IA32_VMX_PINBASED_CTLS 0x00000481
3900
3901
3902 /**
3903 Capability Reporting Register of Primary Processor-based VM-execution
3904 Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-Execution
3905 Controls.". If CPUID.01H:ECX.[5] = 1.
3906
3907 @param ECX MSR_IA32_VMX_PROCBASED_CTLS (0x00000482)
3908 @param EAX Lower 32-bits of MSR value.
3909 @param EDX Upper 32-bits of MSR value.
3910
3911 <b>Example usage</b>
3912 @code
3913 UINT64 Msr;
3914
3915 Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS);
3916 @endcode
3917 @note MSR_IA32_VMX_PROCBASED_CTLS is defined as IA32_VMX_PROCBASED_CTLS in SDM.
3918 **/
3919 #define MSR_IA32_VMX_PROCBASED_CTLS 0x00000482
3920
3921
3922 /**
3923 Capability Reporting Register of VM-exit Controls (R/O) See Appendix A.4,
3924 "VM-Exit Controls.". If CPUID.01H:ECX.[5] = 1.
3925
3926 @param ECX MSR_IA32_VMX_EXIT_CTLS (0x00000483)
3927 @param EAX Lower 32-bits of MSR value.
3928 @param EDX Upper 32-bits of MSR value.
3929
3930 <b>Example usage</b>
3931 @code
3932 UINT64 Msr;
3933
3934 Msr = AsmReadMsr64 (MSR_IA32_VMX_EXIT_CTLS);
3935 @endcode
3936 @note MSR_IA32_VMX_EXIT_CTLS is defined as IA32_VMX_EXIT_CTLS in SDM.
3937 **/
3938 #define MSR_IA32_VMX_EXIT_CTLS 0x00000483
3939
3940
3941 /**
3942 Capability Reporting Register of VMentry Controls (R/O) See Appendix A.5,
3943 "VM-Entry Controls.". If CPUID.01H:ECX.[5] = 1.
3944
3945 @param ECX MSR_IA32_VMX_ENTRY_CTLS (0x00000484)
3946 @param EAX Lower 32-bits of MSR value.
3947 @param EDX Upper 32-bits of MSR value.
3948
3949 <b>Example usage</b>
3950 @code
3951 UINT64 Msr;
3952
3953 Msr = AsmReadMsr64 (MSR_IA32_VMX_ENTRY_CTLS);
3954 @endcode
3955 @note MSR_IA32_VMX_ENTRY_CTLS is defined as IA32_VMX_ENTRY_CTLS in SDM.
3956 **/
3957 #define MSR_IA32_VMX_ENTRY_CTLS 0x00000484
3958
3959
3960 /**
3961 Reporting Register of Miscellaneous VMX Capabilities (R/O) See Appendix A.6,
3962 "Miscellaneous Data.". If CPUID.01H:ECX.[5] = 1.
3963
3964 @param ECX MSR_IA32_VMX_MISC (0x00000485)
3965 @param EAX Lower 32-bits of MSR value.
3966 @param EDX Upper 32-bits of MSR value.
3967
3968 <b>Example usage</b>
3969 @code
3970 IA32_VMX_MISC_REGISTER Msr;
3971
3972 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_MISC);
3973 @endcode
3974 @note MSR_IA32_VMX_MISC is defined as IA32_VMX_MISC in SDM.
3975 **/
3976 #define MSR_IA32_VMX_MISC 0x00000485
3977
3978 /**
3979 MSR information returned for MSR index #IA32_VMX_MISC
3980 **/
3981 typedef union {
3982 ///
3983 /// Individual bit fields
3984 ///
3985 struct {
3986 ///
3987 /// [Bits 4:0] Reports a value X that specifies the relationship between the
3988 /// rate of the VMX-preemption timer and that of the timestamp counter (TSC).
3989 /// Specifically, the VMX-preemption timer (if it is active) counts down by
3990 /// 1 every time bit X in the TSC changes due to a TSC increment.
3991 ///
3992 UINT32 VmxTimerRatio:5;
3993 ///
3994 /// [Bit 5] If bit 5 is read as 1, VM exits store the value of IA32_EFER.LMA
3995 /// into the "IA-32e mode guest" VM-entry control;see Section 27.2 for more
3996 /// details. This bit is read as 1 on any logical processor that supports
3997 /// the 1-setting of the "unrestricted guest" VM-execution control.
3998 ///
3999 UINT32 VmExitEferLma:1;
4000 ///
4001 /// [Bit 6] reports (if set) the support for activity state 1 (HLT).
4002 ///
4003 UINT32 HltActivityStateSupported:1;
4004 ///
4005 /// [Bit 7] reports (if set) the support for activity state 2 (shutdown).
4006 ///
4007 UINT32 ShutdownActivityStateSupported:1;
4008 ///
4009 /// [Bit 8] reports (if set) the support for activity state 3 (wait-for-SIPI).
4010 ///
4011 UINT32 WaitForSipiActivityStateSupported:1;
4012 UINT32 Reserved1:5;
4013 ///
4014 /// [Bit 14] If read as 1, Intel(R) Processor Trace (Intel PT) can be used
4015 /// in VMX operation. If the processor supports Intel PT but does not allow
4016 /// it to be used in VMX operation, execution of VMXON clears
4017 /// IA32_RTIT_CTL.TraceEn (see "VMXON-Enter VMX Operation" in Chapter 30);
4018 /// any attempt to set that bit while in VMX operation (including VMX root
4019 /// operation) using the WRMSR instruction causes a general-protection
4020 /// exception.
4021 ///
4022 UINT32 ProcessorTraceSupported:1;
4023 ///
4024 /// [Bit 15] If read as 1, the RDMSR instruction can be used in system-
4025 /// management mode (SMM) to read the IA32_SMBASE MSR (MSR address 9EH).
4026 /// See Section 34.15.6.3.
4027 ///
4028 UINT32 SmBaseMsrSupported:1;
4029 ///
4030 /// [Bits 24:16] Indicate the number of CR3-target values supported by the
4031 /// processor. This number is a value between 0 and 256, inclusive (bit 24
4032 /// is set if and only if bits 23:16 are clear).
4033 ///
4034 UINT32 NumberOfCr3TargetValues:9;
4035 ///
4036 /// [Bit 27:25] Bits 27:25 is used to compute the recommended maximum
4037 /// number of MSRs that should appear in the VM-exit MSR-store list, the
4038 /// VM-exit MSR-load list, or the VM-entry MSR-load list. Specifically, if
4039 /// the value bits 27:25 of IA32_VMX_MISC is N, then 512 * (N + 1) is the
4040 /// recommended maximum number of MSRs to be included in each list. If the
4041 /// limit is exceeded, undefined processor behavior may result (including a
4042 /// machine check during the VMX transition).
4043 ///
4044 UINT32 MsrStoreListMaximum:3;
4045 ///
4046 /// [Bit 28] If read as 1, bit 2 of the IA32_SMM_MONITOR_CTL can be set
4047 /// to 1. VMXOFF unblocks SMIs unless IA32_SMM_MONITOR_CTL[bit 2] is 1
4048 /// (see Section 34.14.4).
4049 ///
4050 UINT32 BlockSmiSupported:1;
4051 ///
4052 /// [Bit 29] read as 1, software can use VMWRITE to write to any supported
4053 /// field in the VMCS; otherwise, VMWRITE cannot be used to modify VM-exit
4054 /// information fields.
4055 ///
4056 UINT32 VmWriteSupported:1;
4057 ///
4058 /// [Bit 30] If read as 1, VM entry allows injection of a software
4059 /// interrupt, software exception, or privileged software exception with an
4060 /// instruction length of 0.
4061 ///
4062 UINT32 VmInjectSupported:1;
4063 UINT32 Reserved2:1;
4064 ///
4065 /// [Bits 63:32] Reports the 32-bit MSEG revision identifier used by the
4066 /// processor.
4067 ///
4068 UINT32 MsegRevisionIdentifier:32;
4069 } Bits;
4070 ///
4071 /// All bit fields as a 64-bit value
4072 ///
4073 UINT64 Uint64;
4074 } IA32_VMX_MISC_REGISTER;
4075
4076
4077 /**
4078 Capability Reporting Register of CR0 Bits Fixed to 0 (R/O) See Appendix A.7,
4079 "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
4080
4081 @param ECX MSR_IA32_VMX_CR0_FIXED0 (0x00000486)
4082 @param EAX Lower 32-bits of MSR value.
4083 @param EDX Upper 32-bits of MSR value.
4084
4085 <b>Example usage</b>
4086 @code
4087 UINT64 Msr;
4088
4089 Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED0);
4090 @endcode
4091 @note MSR_IA32_VMX_CR0_FIXED0 is defined as IA32_VMX_CR0_FIXED0 in SDM.
4092 **/
4093 #define MSR_IA32_VMX_CR0_FIXED0 0x00000486
4094
4095
4096 /**
4097 Capability Reporting Register of CR0 Bits Fixed to 1 (R/O) See Appendix A.7,
4098 "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
4099
4100 @param ECX MSR_IA32_VMX_CR0_FIXED1 (0x00000487)
4101 @param EAX Lower 32-bits of MSR value.
4102 @param EDX Upper 32-bits of MSR value.
4103
4104 <b>Example usage</b>
4105 @code
4106 UINT64 Msr;
4107
4108 Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED1);
4109 @endcode
4110 @note MSR_IA32_VMX_CR0_FIXED1 is defined as IA32_VMX_CR0_FIXED1 in SDM.
4111 **/
4112 #define MSR_IA32_VMX_CR0_FIXED1 0x00000487
4113
4114
4115 /**
4116 Capability Reporting Register of CR4 Bits Fixed to 0 (R/O) See Appendix A.8,
4117 "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
4118
4119 @param ECX MSR_IA32_VMX_CR4_FIXED0 (0x00000488)
4120 @param EAX Lower 32-bits of MSR value.
4121 @param EDX Upper 32-bits of MSR value.
4122
4123 <b>Example usage</b>
4124 @code
4125 UINT64 Msr;
4126
4127 Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED0);
4128 @endcode
4129 @note MSR_IA32_VMX_CR4_FIXED0 is defined as IA32_VMX_CR4_FIXED0 in SDM.
4130 **/
4131 #define MSR_IA32_VMX_CR4_FIXED0 0x00000488
4132
4133
4134 /**
4135 Capability Reporting Register of CR4 Bits Fixed to 1 (R/O) See Appendix A.8,
4136 "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
4137
4138 @param ECX MSR_IA32_VMX_CR4_FIXED1 (0x00000489)
4139 @param EAX Lower 32-bits of MSR value.
4140 @param EDX Upper 32-bits of MSR value.
4141
4142 <b>Example usage</b>
4143 @code
4144 UINT64 Msr;
4145
4146 Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED1);
4147 @endcode
4148 @note MSR_IA32_VMX_CR4_FIXED1 is defined as IA32_VMX_CR4_FIXED1 in SDM.
4149 **/
4150 #define MSR_IA32_VMX_CR4_FIXED1 0x00000489
4151
4152
4153 /**
4154 Capability Reporting Register of VMCS Field Enumeration (R/O) See Appendix
4155 A.9, "VMCS Enumeration.". If CPUID.01H:ECX.[5] = 1.
4156
4157 @param ECX MSR_IA32_VMX_VMCS_ENUM (0x0000048A)
4158 @param EAX Lower 32-bits of MSR value.
4159 @param EDX Upper 32-bits of MSR value.
4160
4161 <b>Example usage</b>
4162 @code
4163 UINT64 Msr;
4164
4165 Msr = AsmReadMsr64 (MSR_IA32_VMX_VMCS_ENUM);
4166 @endcode
4167 @note MSR_IA32_VMX_VMCS_ENUM is defined as IA32_VMX_VMCS_ENUM in SDM.
4168 **/
4169 #define MSR_IA32_VMX_VMCS_ENUM 0x0000048A
4170
4171
4172 /**
4173 Capability Reporting Register of Secondary Processor-based VM-execution
4174 Controls (R/O) See Appendix A.3.3, "Secondary Processor- Based VM-Execution
4175 Controls.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C TLS[63]).
4176
4177 @param ECX MSR_IA32_VMX_PROCBASED_CTLS2 (0x0000048B)
4178 @param EAX Lower 32-bits of MSR value.
4179 @param EDX Upper 32-bits of MSR value.
4180
4181 <b>Example usage</b>
4182 @code
4183 UINT64 Msr;
4184
4185 Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS2);
4186 @endcode
4187 @note MSR_IA32_VMX_PROCBASED_CTLS2 is defined as IA32_VMX_PROCBASED_CTLS2 in SDM.
4188 **/
4189 #define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048B
4190
4191
4192 /**
4193 Capability Reporting Register of EPT and VPID (R/O) See Appendix A.10,
4194 "VPID and EPT Capabilities.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C
4195 TLS[63] && ( IA32_VMX_PROCBASED_C TLS2[33] IA32_VMX_PROCBASED_C TLS2[37]) ).
4196
4197 @param ECX MSR_IA32_VMX_EPT_VPID_CAP (0x0000048C)
4198 @param EAX Lower 32-bits of MSR value.
4199 @param EDX Upper 32-bits of MSR value.
4200
4201 <b>Example usage</b>
4202 @code
4203 UINT64 Msr;
4204
4205 Msr = AsmReadMsr64 (MSR_IA32_VMX_EPT_VPID_CAP);
4206 @endcode
4207 @note MSR_IA32_VMX_EPT_VPID_CAP is defined as IA32_VMX_EPT_VPID_CAP in SDM.
4208 **/
4209 #define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048C
4210
4211
4212 /**
4213 Capability Reporting Register of Pinbased VM-execution Flex Controls (R/O)
4214 See Appendix A.3.1, "Pin-Based VMExecution Controls.". If (
4215 CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
4216
4217 @param ECX MSR_IA32_VMX_TRUE_PINBASED_CTLS (0x0000048D)
4218 @param EAX Lower 32-bits of MSR value.
4219 @param EDX Upper 32-bits of MSR value.
4220
4221 <b>Example usage</b>
4222 @code
4223 UINT64 Msr;
4224
4225 Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PINBASED_CTLS);
4226 @endcode
4227 @note MSR_IA32_VMX_TRUE_PINBASED_CTLS is defined as IA32_VMX_TRUE_PINBASED_CTLS in SDM.
4228 **/
4229 #define MSR_IA32_VMX_TRUE_PINBASED_CTLS 0x0000048D
4230
4231
4232 /**
4233 Capability Reporting Register of Primary Processor-based VM-execution Flex
4234 Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-Execution
4235 Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
4236
4237 @param ECX MSR_IA32_VMX_TRUE_PROCBASED_CTLS (0x0000048E)
4238 @param EAX Lower 32-bits of MSR value.
4239 @param EDX Upper 32-bits of MSR value.
4240
4241 <b>Example usage</b>
4242 @code
4243 UINT64 Msr;
4244
4245 Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PROCBASED_CTLS);
4246 @endcode
4247 @note MSR_IA32_VMX_TRUE_PROCBASED_CTLS is defined as IA32_VMX_TRUE_PROCBASED_CTLS in SDM.
4248 **/
4249 #define MSR_IA32_VMX_TRUE_PROCBASED_CTLS 0x0000048E
4250
4251
4252 /**
4253 Capability Reporting Register of VM-exit Flex Controls (R/O) See Appendix
4254 A.4, "VM-Exit Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
4255
4256 @param ECX MSR_IA32_VMX_TRUE_EXIT_CTLS (0x0000048F)
4257 @param EAX Lower 32-bits of MSR value.
4258 @param EDX Upper 32-bits of MSR value.
4259
4260 <b>Example usage</b>
4261 @code
4262 UINT64 Msr;
4263
4264 Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_EXIT_CTLS);
4265 @endcode
4266 @note MSR_IA32_VMX_TRUE_EXIT_CTLS is defined as IA32_VMX_TRUE_EXIT_CTLS in SDM.
4267 **/
4268 #define MSR_IA32_VMX_TRUE_EXIT_CTLS 0x0000048F
4269
4270
4271 /**
4272 Capability Reporting Register of VMentry Flex Controls (R/O) See Appendix
4273 A.5, "VM-Entry Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
4274
4275 @param ECX MSR_IA32_VMX_TRUE_ENTRY_CTLS (0x00000490)
4276 @param EAX Lower 32-bits of MSR value.
4277 @param EDX Upper 32-bits of MSR value.
4278
4279 <b>Example usage</b>
4280 @code
4281 UINT64 Msr;
4282
4283 Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_ENTRY_CTLS);
4284 @endcode
4285 @note MSR_IA32_VMX_TRUE_ENTRY_CTLS is defined as IA32_VMX_TRUE_ENTRY_CTLS in SDM.
4286 **/
4287 #define MSR_IA32_VMX_TRUE_ENTRY_CTLS 0x00000490
4288
4289
4290 /**
4291 Capability Reporting Register of VMfunction Controls (R/O). If(
4292 CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
4293
4294 @param ECX MSR_IA32_VMX_VMFUNC (0x00000491)
4295 @param EAX Lower 32-bits of MSR value.
4296 @param EDX Upper 32-bits of MSR value.
4297
4298 <b>Example usage</b>
4299 @code
4300 UINT64 Msr;
4301
4302 Msr = AsmReadMsr64 (MSR_IA32_VMX_VMFUNC);
4303 @endcode
4304 @note MSR_IA32_VMX_VMFUNC is defined as IA32_VMX_VMFUNC in SDM.
4305 **/
4306 #define MSR_IA32_VMX_VMFUNC 0x00000491
4307
4308
4309 /**
4310 Full Width Writable IA32_PMCn Alias (R/W). (If CPUID.0AH: EAX[15:8] > n) &&
4311 IA32_PERF_CAPABILITIES[ 13] = 1.
4312
4313 @param ECX MSR_IA32_A_PMCn
4314 @param EAX Lower 32-bits of MSR value.
4315 @param EDX Upper 32-bits of MSR value.
4316
4317 <b>Example usage</b>
4318 @code
4319 UINT64 Msr;
4320
4321 Msr = AsmReadMsr64 (MSR_IA32_A_PMC0);
4322 AsmWriteMsr64 (MSR_IA32_A_PMC0, Msr);
4323 @endcode
4324 @note MSR_IA32_A_PMC0 is defined as IA32_A_PMC0 in SDM.
4325 MSR_IA32_A_PMC1 is defined as IA32_A_PMC1 in SDM.
4326 MSR_IA32_A_PMC2 is defined as IA32_A_PMC2 in SDM.
4327 MSR_IA32_A_PMC3 is defined as IA32_A_PMC3 in SDM.
4328 MSR_IA32_A_PMC4 is defined as IA32_A_PMC4 in SDM.
4329 MSR_IA32_A_PMC5 is defined as IA32_A_PMC5 in SDM.
4330 MSR_IA32_A_PMC6 is defined as IA32_A_PMC6 in SDM.
4331 MSR_IA32_A_PMC7 is defined as IA32_A_PMC7 in SDM.
4332 @{
4333 **/
4334 #define MSR_IA32_A_PMC0 0x000004C1
4335 #define MSR_IA32_A_PMC1 0x000004C2
4336 #define MSR_IA32_A_PMC2 0x000004C3
4337 #define MSR_IA32_A_PMC3 0x000004C4
4338 #define MSR_IA32_A_PMC4 0x000004C5
4339 #define MSR_IA32_A_PMC5 0x000004C6
4340 #define MSR_IA32_A_PMC6 0x000004C7
4341 #define MSR_IA32_A_PMC7 0x000004C8
4342 /// @}
4343
4344
4345 /**
4346 (R/W). If IA32_MCG_CAP.LMCE_P =1.
4347
4348 @param ECX MSR_IA32_MCG_EXT_CTL (0x000004D0)
4349 @param EAX Lower 32-bits of MSR value.
4350 Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
4351 @param EDX Upper 32-bits of MSR value.
4352 Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
4353
4354 <b>Example usage</b>
4355 @code
4356 MSR_IA32_MCG_EXT_CTL_REGISTER Msr;
4357
4358 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_EXT_CTL);
4359 AsmWriteMsr64 (MSR_IA32_MCG_EXT_CTL, Msr.Uint64);
4360 @endcode
4361 @note MSR_IA32_MCG_EXT_CTL is defined as IA32_MCG_EXT_CTL in SDM.
4362 **/
4363 #define MSR_IA32_MCG_EXT_CTL 0x000004D0
4364
4365 /**
4366 MSR information returned for MSR index #MSR_IA32_MCG_EXT_CTL
4367 **/
4368 typedef union {
4369 ///
4370 /// Individual bit fields
4371 ///
4372 struct {
4373 ///
4374 /// [Bit 0] LMCE_EN.
4375 ///
4376 UINT32 LMCE_EN:1;
4377 UINT32 Reserved1:31;
4378 UINT32 Reserved2:32;
4379 } Bits;
4380 ///
4381 /// All bit fields as a 32-bit value
4382 ///
4383 UINT32 Uint32;
4384 ///
4385 /// All bit fields as a 64-bit value
4386 ///
4387 UINT64 Uint64;
4388 } MSR_IA32_MCG_EXT_CTL_REGISTER;
4389
4390
4391 /**
4392 Status and SVN Threshold of SGX Support for ACM (RO). If CPUID.(EAX=07H,
4393 ECX=0H): EBX[2] = 1.
4394
4395 @param ECX MSR_IA32_SGX_SVN_STATUS (0x00000500)
4396 @param EAX Lower 32-bits of MSR value.
4397 Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
4398 @param EDX Upper 32-bits of MSR value.
4399 Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
4400
4401 <b>Example usage</b>
4402 @code
4403 MSR_IA32_SGX_SVN_STATUS_REGISTER Msr;
4404
4405 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SGX_SVN_STATUS);
4406 @endcode
4407 @note MSR_IA32_SGX_SVN_STATUS is defined as IA32_SGX_SVN_STATUS in SDM.
4408 **/
4409 #define MSR_IA32_SGX_SVN_STATUS 0x00000500
4410
4411 /**
4412 MSR information returned for MSR index #MSR_IA32_SGX_SVN_STATUS
4413 **/
4414 typedef union {
4415 ///
4416 /// Individual bit fields
4417 ///
4418 struct {
4419 ///
4420 /// [Bit 0] Lock. See Section 42.11.3, "Interactions with Authenticated
4421 /// Code Modules (ACMs)".
4422 ///
4423 UINT32 Lock:1;
4424 UINT32 Reserved1:15;
4425 ///
4426 /// [Bits 23:16] SGX_SVN_SINIT. See Section 42.11.3, "Interactions with
4427 /// Authenticated Code Modules (ACMs)".
4428 ///
4429 UINT32 SGX_SVN_SINIT:8;
4430 UINT32 Reserved2:8;
4431 UINT32 Reserved3:32;
4432 } Bits;
4433 ///
4434 /// All bit fields as a 32-bit value
4435 ///
4436 UINT32 Uint32;
4437 ///
4438 /// All bit fields as a 64-bit value
4439 ///
4440 UINT64 Uint64;
4441 } MSR_IA32_SGX_SVN_STATUS_REGISTER;
4442
4443
4444 /**
4445 Trace Output Base Register (R/W). If ((CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
4446 && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1) (CPUID.(EAX=14H,ECX=0): ECX[2] = 1)
4447 ) ).
4448
4449 @param ECX MSR_IA32_RTIT_OUTPUT_BASE (0x00000560)
4450 @param EAX Lower 32-bits of MSR value.
4451 Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
4452 @param EDX Upper 32-bits of MSR value.
4453 Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
4454
4455 <b>Example usage</b>
4456 @code
4457 MSR_IA32_RTIT_OUTPUT_BASE_REGISTER Msr;
4458
4459 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_BASE);
4460 AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_BASE, Msr.Uint64);
4461 @endcode
4462 @note MSR_IA32_RTIT_OUTPUT_BASE is defined as IA32_RTIT_OUTPUT_BASE in SDM.
4463 **/
4464 #define MSR_IA32_RTIT_OUTPUT_BASE 0x00000560
4465
4466 /**
4467 MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_BASE
4468 **/
4469 typedef union {
4470 ///
4471 /// Individual bit fields
4472 ///
4473 struct {
4474 UINT32 Reserved:7;
4475 ///
4476 /// [Bits 31:7] Base physical address.
4477 ///
4478 UINT32 Base:25;
4479 ///
4480 /// [Bits 63:32] Base physical address.
4481 ///
4482 UINT32 BaseHi:32;
4483 } Bits;
4484 ///
4485 /// All bit fields as a 64-bit value
4486 ///
4487 UINT64 Uint64;
4488 } MSR_IA32_RTIT_OUTPUT_BASE_REGISTER;
4489
4490
4491 /**
4492 Trace Output Mask Pointers Register (R/W). If ((CPUID.(EAX=07H,
4493 ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1)
4494 (CPUID.(EAX=14H,ECX=0): ECX[2] = 1) ) ).
4495
4496 @param ECX MSR_IA32_RTIT_OUTPUT_MASK_PTRS (0x00000561)
4497 @param EAX Lower 32-bits of MSR value.
4498 Described by the type MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
4499 @param EDX Upper 32-bits of MSR value.
4500 Described by the type MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
4501
4502 <b>Example usage</b>
4503 @code
4504 MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER Msr;
4505
4506 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS);
4507 AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS, Msr.Uint64);
4508 @endcode
4509 @note MSR_IA32_RTIT_OUTPUT_MASK_PTRS is defined as IA32_RTIT_OUTPUT_MASK_PTRS in SDM.
4510 **/
4511 #define MSR_IA32_RTIT_OUTPUT_MASK_PTRS 0x00000561
4512
4513 /**
4514 MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_MASK_PTRS
4515 **/
4516 typedef union {
4517 ///
4518 /// Individual bit fields
4519 ///
4520 struct {
4521 UINT32 Reserved:7;
4522 ///
4523 /// [Bits 31:7] MaskOrTableOffset.
4524 ///
4525 UINT32 MaskOrTableOffset:25;
4526 ///
4527 /// [Bits 63:32] Output Offset.
4528 ///
4529 UINT32 OutputOffset:32;
4530 } Bits;
4531 ///
4532 /// All bit fields as a 64-bit value
4533 ///
4534 UINT64 Uint64;
4535 } MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER;
4536
4537 /**
4538 Format of ToPA table entries.
4539 **/
4540 typedef union {
4541 ///
4542 /// Individual bit fields
4543 ///
4544 struct {
4545 ///
4546 /// [Bit 0] END. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
4547 ///
4548 UINT32 END:1;
4549 UINT32 Reserved1:1;
4550 ///
4551 /// [Bit 2] INT. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
4552 ///
4553 UINT32 INT:1;
4554 UINT32 Reserved2:1;
4555 ///
4556 /// [Bit 4] STOP. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
4557 ///
4558 UINT32 STOP:1;
4559 UINT32 Reserved3:1;
4560 ///
4561 /// [Bit 6:9] Indicates the size of the associated output region. See Section
4562 /// 35.2.6.2, "Table of Physical Addresses (ToPA)".
4563 ///
4564 UINT32 Size:4;
4565 UINT32 Reserved4:2;
4566 ///
4567 /// [Bit 12:31] Output Region Base Physical Address low part.
4568 /// [Bit 12:31] Output Region Base Physical Address [12:63] value to match.
4569 /// ATTENTION: The size of the address field is determined by the processor's
4570 /// physical-address width (MAXPHYADDR) in bits, as reported in
4571 /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
4572 /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is reserved part.
4573 /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
4574 ///
4575 UINT32 Base:20;
4576 ///
4577 /// [Bit 32:63] Output Region Base Physical Address high part.
4578 /// [Bit 32:63] Output Region Base Physical Address [12:63] value to match.
4579 /// ATTENTION: The size of the address field is determined by the processor's
4580 /// physical-address width (MAXPHYADDR) in bits, as reported in
4581 /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
4582 /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is reserved part.
4583 /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
4584 ///
4585 UINT32 BaseHi:32;
4586 } Bits;
4587 ///
4588 /// All bit fields as a 64-bit value
4589 ///
4590 UINT64 Uint64;
4591 } RTIT_TOPA_TABLE_ENTRY;
4592
4593 ///
4594 /// The size of the associated output region usd by Topa.
4595 ///
4596 typedef enum {
4597 RtitTopaMemorySize4K = 0,
4598 RtitTopaMemorySize8K,
4599 RtitTopaMemorySize16K,
4600 RtitTopaMemorySize32K,
4601 RtitTopaMemorySize64K,
4602 RtitTopaMemorySize128K,
4603 RtitTopaMemorySize256K,
4604 RtitTopaMemorySize512K,
4605 RtitTopaMemorySize1M,
4606 RtitTopaMemorySize2M,
4607 RtitTopaMemorySize4M,
4608 RtitTopaMemorySize8M,
4609 RtitTopaMemorySize16M,
4610 RtitTopaMemorySize32M,
4611 RtitTopaMemorySize64M,
4612 RtitTopaMemorySize128M
4613 } RTIT_TOPA_MEMORY_SIZE;
4614
4615 /**
4616 Trace Control Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
4617
4618 @param ECX MSR_IA32_RTIT_CTL (0x00000570)
4619 @param EAX Lower 32-bits of MSR value.
4620 Described by the type MSR_IA32_RTIT_CTL_REGISTER.
4621 @param EDX Upper 32-bits of MSR value.
4622 Described by the type MSR_IA32_RTIT_CTL_REGISTER.
4623
4624 <b>Example usage</b>
4625 @code
4626 MSR_IA32_RTIT_CTL_REGISTER Msr;
4627
4628 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CTL);
4629 AsmWriteMsr64 (MSR_IA32_RTIT_CTL, Msr.Uint64);
4630 @endcode
4631 @note MSR_IA32_RTIT_CTL is defined as IA32_RTIT_CTL in SDM.
4632 **/
4633 #define MSR_IA32_RTIT_CTL 0x00000570
4634
4635 /**
4636 MSR information returned for MSR index #MSR_IA32_RTIT_CTL
4637 **/
4638 typedef union {
4639 ///
4640 /// Individual bit fields
4641 ///
4642 struct {
4643 ///
4644 /// [Bit 0] TraceEn.
4645 ///
4646 UINT32 TraceEn:1;
4647 ///
4648 /// [Bit 1] CYCEn. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
4649 ///
4650 UINT32 CYCEn:1;
4651 ///
4652 /// [Bit 2] OS.
4653 ///
4654 UINT32 OS:1;
4655 ///
4656 /// [Bit 3] User.
4657 ///
4658 UINT32 User:1;
4659 UINT32 Reserved1:2;
4660 ///
4661 /// [Bit 6] FabricEn. If (CPUID.(EAX=07H, ECX=0):ECX[3] = 1).
4662 ///
4663 UINT32 FabricEn:1;
4664 ///
4665 /// [Bit 7] CR3 filter.
4666 ///
4667 UINT32 CR3:1;
4668 ///
4669 /// [Bit 8] ToPA.
4670 ///
4671 UINT32 ToPA:1;
4672 ///
4673 /// [Bit 9] MTCEn. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
4674 ///
4675 UINT32 MTCEn:1;
4676 ///
4677 /// [Bit 10] TSCEn.
4678 ///
4679 UINT32 TSCEn:1;
4680 ///
4681 /// [Bit 11] DisRETC.
4682 ///
4683 UINT32 DisRETC:1;
4684 UINT32 Reserved2:1;
4685 ///
4686 /// [Bit 13] BranchEn.
4687 ///
4688 UINT32 BranchEn:1;
4689 ///
4690 /// [Bits 17:14] MTCFreq. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
4691 ///
4692 UINT32 MTCFreq:4;
4693 UINT32 Reserved3:1;
4694 ///
4695 /// [Bits 22:19] CYCThresh. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
4696 ///
4697 UINT32 CYCThresh:4;
4698 UINT32 Reserved4:1;
4699 ///
4700 /// [Bits 27:24] PSBFreq. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
4701 ///
4702 UINT32 PSBFreq:4;
4703 UINT32 Reserved5:4;
4704 ///
4705 /// [Bits 35:32] ADDR0_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 0).
4706 ///
4707 UINT32 ADDR0_CFG:4;
4708 ///
4709 /// [Bits 39:36] ADDR1_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 1).
4710 ///
4711 UINT32 ADDR1_CFG:4;
4712 ///
4713 /// [Bits 43:40] ADDR2_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 2).
4714 ///
4715 UINT32 ADDR2_CFG:4;
4716 ///
4717 /// [Bits 47:44] ADDR3_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 3).
4718 ///
4719 UINT32 ADDR3_CFG:4;
4720 UINT32 Reserved6:16;
4721 } Bits;
4722 ///
4723 /// All bit fields as a 64-bit value
4724 ///
4725 UINT64 Uint64;
4726 } MSR_IA32_RTIT_CTL_REGISTER;
4727
4728
4729 /**
4730 Tracing Status Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
4731
4732 @param ECX MSR_IA32_RTIT_STATUS (0x00000571)
4733 @param EAX Lower 32-bits of MSR value.
4734 Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
4735 @param EDX Upper 32-bits of MSR value.
4736 Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
4737
4738 <b>Example usage</b>
4739 @code
4740 MSR_IA32_RTIT_STATUS_REGISTER Msr;
4741
4742 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_STATUS);
4743 AsmWriteMsr64 (MSR_IA32_RTIT_STATUS, Msr.Uint64);
4744 @endcode
4745 @note MSR_IA32_RTIT_STATUS is defined as IA32_RTIT_STATUS in SDM.
4746 **/
4747 #define MSR_IA32_RTIT_STATUS 0x00000571
4748
4749 /**
4750 MSR information returned for MSR index #MSR_IA32_RTIT_STATUS
4751 **/
4752 typedef union {
4753 ///
4754 /// Individual bit fields
4755 ///
4756 struct {
4757 ///
4758 /// [Bit 0] FilterEn, (writes ignored).
4759 /// If (CPUID.(EAX=07H, ECX=0):EBX[2] = 1).
4760 ///
4761 UINT32 FilterEn:1;
4762 ///
4763 /// [Bit 1] ContexEn, (writes ignored).
4764 ///
4765 UINT32 ContexEn:1;
4766 ///
4767 /// [Bit 2] TriggerEn, (writes ignored).
4768 ///
4769 UINT32 TriggerEn:1;
4770 UINT32 Reserved1:1;
4771 ///
4772 /// [Bit 4] Error.
4773 ///
4774 UINT32 Error:1;
4775 ///
4776 /// [Bit 5] Stopped.
4777 ///
4778 UINT32 Stopped:1;
4779 UINT32 Reserved2:26;
4780 ///
4781 /// [Bits 48:32] PacketByteCnt. If (CPUID.(EAX=07H, ECX=0):EBX[1] > 3).
4782 ///
4783 UINT32 PacketByteCnt:17;
4784 UINT32 Reserved3:15;
4785 } Bits;
4786 ///
4787 /// All bit fields as a 64-bit value
4788 ///
4789 UINT64 Uint64;
4790 } MSR_IA32_RTIT_STATUS_REGISTER;
4791
4792
4793 /**
4794 Trace Filter CR3 Match Register (R/W).
4795 If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
4796
4797 @param ECX MSR_IA32_RTIT_CR3_MATCH (0x00000572)
4798 @param EAX Lower 32-bits of MSR value.
4799 Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
4800 @param EDX Upper 32-bits of MSR value.
4801 Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
4802
4803 <b>Example usage</b>
4804 @code
4805 MSR_IA32_RTIT_CR3_MATCH_REGISTER Msr;
4806
4807 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CR3_MATCH);
4808 AsmWriteMsr64 (MSR_IA32_RTIT_CR3_MATCH, Msr.Uint64);
4809 @endcode
4810 @note MSR_IA32_RTIT_CR3_MATCH is defined as IA32_RTIT_CR3_MATCH in SDM.
4811 **/
4812 #define MSR_IA32_RTIT_CR3_MATCH 0x00000572
4813
4814 /**
4815 MSR information returned for MSR index #MSR_IA32_RTIT_CR3_MATCH
4816 **/
4817 typedef union {
4818 ///
4819 /// Individual bit fields
4820 ///
4821 struct {
4822 UINT32 Reserved:5;
4823 ///
4824 /// [Bits 31:5] CR3[63:5] value to match.
4825 ///
4826 UINT32 Cr3:27;
4827 ///
4828 /// [Bits 63:32] CR3[63:5] value to match.
4829 ///
4830 UINT32 Cr3Hi:32;
4831 } Bits;
4832 ///
4833 /// All bit fields as a 64-bit value
4834 ///
4835 UINT64 Uint64;
4836 } MSR_IA32_RTIT_CR3_MATCH_REGISTER;
4837
4838
4839 /**
4840 Region n Start Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
4841
4842 @param ECX MSR_IA32_RTIT_ADDRn_A
4843 @param EAX Lower 32-bits of MSR value.
4844 Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
4845 @param EDX Upper 32-bits of MSR value.
4846 Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
4847
4848 <b>Example usage</b>
4849 @code
4850 MSR_IA32_RTIT_ADDR_REGISTER Msr;
4851
4852 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_A);
4853 AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_A, Msr.Uint64);
4854 @endcode
4855 @note MSR_IA32_RTIT_ADDR0_A is defined as IA32_RTIT_ADDR0_A in SDM.
4856 MSR_IA32_RTIT_ADDR1_A is defined as IA32_RTIT_ADDR1_A in SDM.
4857 MSR_IA32_RTIT_ADDR2_A is defined as IA32_RTIT_ADDR2_A in SDM.
4858 MSR_IA32_RTIT_ADDR3_A is defined as IA32_RTIT_ADDR3_A in SDM.
4859 @{
4860 **/
4861 #define MSR_IA32_RTIT_ADDR0_A 0x00000580
4862 #define MSR_IA32_RTIT_ADDR1_A 0x00000582
4863 #define MSR_IA32_RTIT_ADDR2_A 0x00000584
4864 #define MSR_IA32_RTIT_ADDR3_A 0x00000586
4865 /// @}
4866
4867
4868 /**
4869 Region n End Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
4870
4871 @param ECX MSR_IA32_RTIT_ADDRn_B
4872 @param EAX Lower 32-bits of MSR value.
4873 Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
4874 @param EDX Upper 32-bits of MSR value.
4875 Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
4876
4877 <b>Example usage</b>
4878 @code
4879 MSR_IA32_RTIT_ADDR_REGISTER Msr;
4880
4881 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_B);
4882 AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_B, Msr.Uint64);
4883 @endcode
4884 @note MSR_IA32_RTIT_ADDR0_B is defined as IA32_RTIT_ADDR0_B in SDM.
4885 MSR_IA32_RTIT_ADDR1_B is defined as IA32_RTIT_ADDR1_B in SDM.
4886 MSR_IA32_RTIT_ADDR2_B is defined as IA32_RTIT_ADDR2_B in SDM.
4887 MSR_IA32_RTIT_ADDR3_B is defined as IA32_RTIT_ADDR3_B in SDM.
4888 @{
4889 **/
4890 #define MSR_IA32_RTIT_ADDR0_B 0x00000581
4891 #define MSR_IA32_RTIT_ADDR1_B 0x00000583
4892 #define MSR_IA32_RTIT_ADDR2_B 0x00000585
4893 #define MSR_IA32_RTIT_ADDR3_B 0x00000587
4894 /// @}
4895
4896
4897 /**
4898 MSR information returned for MSR indexes
4899 #MSR_IA32_RTIT_ADDR0_A to #MSR_IA32_RTIT_ADDR3_A and
4900 #MSR_IA32_RTIT_ADDR0_B to #MSR_IA32_RTIT_ADDR3_B
4901 **/
4902 typedef union {
4903 ///
4904 /// Individual bit fields
4905 ///
4906 struct {
4907 ///
4908 /// [Bits 31:0] Virtual Address.
4909 ///
4910 UINT32 VirtualAddress:32;
4911 ///
4912 /// [Bits 47:32] Virtual Address.
4913 ///
4914 UINT32 VirtualAddressHi:16;
4915 ///
4916 /// [Bits 63:48] SignExt_VA.
4917 ///
4918 UINT32 SignExt_VA:16;
4919 } Bits;
4920 ///
4921 /// All bit fields as a 64-bit value
4922 ///
4923 UINT64 Uint64;
4924 } MSR_IA32_RTIT_ADDR_REGISTER;
4925
4926
4927 /**
4928 DS Save Area (R/W) Points to the linear address of the first byte of the DS
4929 buffer management area, which is used to manage the BTS and PEBS buffers.
4930 See Section 18.15.4, "Debug Store (DS) Mechanism.". If( CPUID.01H:EDX.DS[21]
4931 = 1.
4932
4933 [Bits 31..0] The linear address of the first byte of the DS buffer
4934 management area, if not in IA-32e mode.
4935
4936 [Bits 63..0] The linear address of the first byte of the DS buffer
4937 management area, if IA-32e mode is active.
4938
4939 @param ECX MSR_IA32_DS_AREA (0x00000600)
4940 @param EAX Lower 32-bits of MSR value.
4941 Described by the type MSR_IA32_DS_AREA_REGISTER.
4942 @param EDX Upper 32-bits of MSR value.
4943 Described by the type MSR_IA32_DS_AREA_REGISTER.
4944
4945 <b>Example usage</b>
4946 @code
4947 UINT64 Msr;
4948
4949 Msr = AsmReadMsr64 (MSR_IA32_DS_AREA);
4950 AsmWriteMsr64 (MSR_IA32_DS_AREA, Msr);
4951 @endcode
4952 @note MSR_IA32_DS_AREA is defined as IA32_DS_AREA in SDM.
4953 **/
4954 #define MSR_IA32_DS_AREA 0x00000600
4955
4956
4957 /**
4958 TSC Target of Local APIC's TSC Deadline Mode (R/W). If CPUID.01H:ECX.[24] =
4959 1.
4960
4961 @param ECX MSR_IA32_TSC_DEADLINE (0x000006E0)
4962 @param EAX Lower 32-bits of MSR value.
4963 @param EDX Upper 32-bits of MSR value.
4964
4965 <b>Example usage</b>
4966 @code
4967 UINT64 Msr;
4968
4969 Msr = AsmReadMsr64 (MSR_IA32_TSC_DEADLINE);
4970 AsmWriteMsr64 (MSR_IA32_TSC_DEADLINE, Msr);
4971 @endcode
4972 @note MSR_IA32_TSC_DEADLINE is defined as IA32_TSC_DEADLINE in SDM.
4973 **/
4974 #define MSR_IA32_TSC_DEADLINE 0x000006E0
4975
4976
4977 /**
4978 Enable/disable HWP (R/W). If CPUID.06H:EAX.[7] = 1.
4979
4980 @param ECX MSR_IA32_PM_ENABLE (0x00000770)
4981 @param EAX Lower 32-bits of MSR value.
4982 Described by the type MSR_IA32_PM_ENABLE_REGISTER.
4983 @param EDX Upper 32-bits of MSR value.
4984 Described by the type MSR_IA32_PM_ENABLE_REGISTER.
4985
4986 <b>Example usage</b>
4987 @code
4988 MSR_IA32_PM_ENABLE_REGISTER Msr;
4989
4990 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_ENABLE);
4991 AsmWriteMsr64 (MSR_IA32_PM_ENABLE, Msr.Uint64);
4992 @endcode
4993 @note MSR_IA32_PM_ENABLE is defined as IA32_PM_ENABLE in SDM.
4994 **/
4995 #define MSR_IA32_PM_ENABLE 0x00000770
4996
4997 /**
4998 MSR information returned for MSR index #MSR_IA32_PM_ENABLE
4999 **/
5000 typedef union {
5001 ///
5002 /// Individual bit fields
5003 ///
5004 struct {
5005 ///
5006 /// [Bit 0] HWP_ENABLE (R/W1-Once). See Section 14.4.2, "Enabling HWP". If
5007 /// CPUID.06H:EAX.[7] = 1.
5008 ///
5009 UINT32 HWP_ENABLE:1;
5010 UINT32 Reserved1:31;
5011 UINT32 Reserved2:32;
5012 } Bits;
5013 ///
5014 /// All bit fields as a 32-bit value
5015 ///
5016 UINT32 Uint32;
5017 ///
5018 /// All bit fields as a 64-bit value
5019 ///
5020 UINT64 Uint64;
5021 } MSR_IA32_PM_ENABLE_REGISTER;
5022
5023
5024 /**
5025 HWP Performance Range Enumeration (RO). If CPUID.06H:EAX.[7] = 1.
5026
5027 @param ECX MSR_IA32_HWP_CAPABILITIES (0x00000771)
5028 @param EAX Lower 32-bits of MSR value.
5029 Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
5030 @param EDX Upper 32-bits of MSR value.
5031 Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
5032
5033 <b>Example usage</b>
5034 @code
5035 MSR_IA32_HWP_CAPABILITIES_REGISTER Msr;
5036
5037 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_CAPABILITIES);
5038 @endcode
5039 @note MSR_IA32_HWP_CAPABILITIES is defined as IA32_HWP_CAPABILITIES in SDM.
5040 **/
5041 #define MSR_IA32_HWP_CAPABILITIES 0x00000771
5042
5043 /**
5044 MSR information returned for MSR index #MSR_IA32_HWP_CAPABILITIES
5045 **/
5046 typedef union {
5047 ///
5048 /// Individual bit fields
5049 ///
5050 struct {
5051 ///
5052 /// [Bits 7:0] Highest_Performance See Section 14.4.3, "HWP Performance
5053 /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
5054 ///
5055 UINT32 Highest_Performance:8;
5056 ///
5057 /// [Bits 15:8] Guaranteed_Performance See Section 14.4.3, "HWP
5058 /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
5059 ///
5060 UINT32 Guaranteed_Performance:8;
5061 ///
5062 /// [Bits 23:16] Most_Efficient_Performance See Section 14.4.3, "HWP
5063 /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
5064 ///
5065 UINT32 Most_Efficient_Performance:8;
5066 ///
5067 /// [Bits 31:24] Lowest_Performance See Section 14.4.3, "HWP Performance
5068 /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
5069 ///
5070 UINT32 Lowest_Performance:8;
5071 UINT32 Reserved:32;
5072 } Bits;
5073 ///
5074 /// All bit fields as a 32-bit value
5075 ///
5076 UINT32 Uint32;
5077 ///
5078 /// All bit fields as a 64-bit value
5079 ///
5080 UINT64 Uint64;
5081 } MSR_IA32_HWP_CAPABILITIES_REGISTER;
5082
5083
5084 /**
5085 Power Management Control Hints for All Logical Processors in a Package
5086 (R/W). If CPUID.06H:EAX.[11] = 1.
5087
5088 @param ECX MSR_IA32_HWP_REQUEST_PKG (0x00000772)
5089 @param EAX Lower 32-bits of MSR value.
5090 Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
5091 @param EDX Upper 32-bits of MSR value.
5092 Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
5093
5094 <b>Example usage</b>
5095 @code
5096 MSR_IA32_HWP_REQUEST_PKG_REGISTER Msr;
5097
5098 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST_PKG);
5099 AsmWriteMsr64 (MSR_IA32_HWP_REQUEST_PKG, Msr.Uint64);
5100 @endcode
5101 @note MSR_IA32_HWP_REQUEST_PKG is defined as IA32_HWP_REQUEST_PKG in SDM.
5102 **/
5103 #define MSR_IA32_HWP_REQUEST_PKG 0x00000772
5104
5105 /**
5106 MSR information returned for MSR index #MSR_IA32_HWP_REQUEST_PKG
5107 **/
5108 typedef union {
5109 ///
5110 /// Individual bit fields
5111 ///
5112 struct {
5113 ///
5114 /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP". If
5115 /// CPUID.06H:EAX.[11] = 1.
5116 ///
5117 UINT32 Minimum_Performance:8;
5118 ///
5119 /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP". If
5120 /// CPUID.06H:EAX.[11] = 1.
5121 ///
5122 UINT32 Maximum_Performance:8;
5123 ///
5124 /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
5125 /// If CPUID.06H:EAX.[11] = 1.
5126 ///
5127 UINT32 Desired_Performance:8;
5128 ///
5129 /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
5130 /// "Managing HWP". If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[10] = 1.
5131 ///
5132 UINT32 Energy_Performance_Preference:8;
5133 ///
5134 /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
5135 /// CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[9] = 1.
5136 ///
5137 UINT32 Activity_Window:10;
5138 UINT32 Reserved:22;
5139 } Bits;
5140 ///
5141 /// All bit fields as a 64-bit value
5142 ///
5143 UINT64 Uint64;
5144 } MSR_IA32_HWP_REQUEST_PKG_REGISTER;
5145
5146
5147 /**
5148 Control HWP Native Interrupts (R/W). If CPUID.06H:EAX.[8] = 1.
5149
5150 @param ECX MSR_IA32_HWP_INTERRUPT (0x00000773)
5151 @param EAX Lower 32-bits of MSR value.
5152 Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
5153 @param EDX Upper 32-bits of MSR value.
5154 Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
5155
5156 <b>Example usage</b>
5157 @code
5158 MSR_IA32_HWP_INTERRUPT_REGISTER Msr;
5159
5160 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_INTERRUPT);
5161 AsmWriteMsr64 (MSR_IA32_HWP_INTERRUPT, Msr.Uint64);
5162 @endcode
5163 @note MSR_IA32_HWP_INTERRUPT is defined as IA32_HWP_INTERRUPT in SDM.
5164 **/
5165 #define MSR_IA32_HWP_INTERRUPT 0x00000773
5166
5167 /**
5168 MSR information returned for MSR index #MSR_IA32_HWP_INTERRUPT
5169 **/
5170 typedef union {
5171 ///
5172 /// Individual bit fields
5173 ///
5174 struct {
5175 ///
5176 /// [Bit 0] EN_Guaranteed_Performance_Change. See Section 14.4.6, "HWP
5177 /// Notifications". If CPUID.06H:EAX.[8] = 1.
5178 ///
5179 UINT32 EN_Guaranteed_Performance_Change:1;
5180 ///
5181 /// [Bit 1] EN_Excursion_Minimum. See Section 14.4.6, "HWP Notifications".
5182 /// If CPUID.06H:EAX.[8] = 1.
5183 ///
5184 UINT32 EN_Excursion_Minimum:1;
5185 UINT32 Reserved1:30;
5186 UINT32 Reserved2:32;
5187 } Bits;
5188 ///
5189 /// All bit fields as a 32-bit value
5190 ///
5191 UINT32 Uint32;
5192 ///
5193 /// All bit fields as a 64-bit value
5194 ///
5195 UINT64 Uint64;
5196 } MSR_IA32_HWP_INTERRUPT_REGISTER;
5197
5198
5199 /**
5200 Power Management Control Hints to a Logical Processor (R/W). If
5201 CPUID.06H:EAX.[7] = 1.
5202
5203 @param ECX MSR_IA32_HWP_REQUEST (0x00000774)
5204 @param EAX Lower 32-bits of MSR value.
5205 Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
5206 @param EDX Upper 32-bits of MSR value.
5207 Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
5208
5209 <b>Example usage</b>
5210 @code
5211 MSR_IA32_HWP_REQUEST_REGISTER Msr;
5212
5213 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST);
5214 AsmWriteMsr64 (MSR_IA32_HWP_REQUEST, Msr.Uint64);
5215 @endcode
5216 @note MSR_IA32_HWP_REQUEST is defined as IA32_HWP_REQUEST in SDM.
5217 **/
5218 #define MSR_IA32_HWP_REQUEST 0x00000774
5219
5220 /**
5221 MSR information returned for MSR index #MSR_IA32_HWP_REQUEST
5222 **/
5223 typedef union {
5224 ///
5225 /// Individual bit fields
5226 ///
5227 struct {
5228 ///
5229 /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP". If
5230 /// CPUID.06H:EAX.[7] = 1.
5231 ///
5232 UINT32 Minimum_Performance:8;
5233 ///
5234 /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP". If
5235 /// CPUID.06H:EAX.[7] = 1.
5236 ///
5237 UINT32 Maximum_Performance:8;
5238 ///
5239 /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
5240 /// If CPUID.06H:EAX.[7] = 1.
5241 ///
5242 UINT32 Desired_Performance:8;
5243 ///
5244 /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
5245 /// "Managing HWP". If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[10] = 1.
5246 ///
5247 UINT32 Energy_Performance_Preference:8;
5248 ///
5249 /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
5250 /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[9] = 1.
5251 ///
5252 UINT32 Activity_Window:10;
5253 ///
5254 /// [Bit 42] Package_Control See Section 14.4.4, "Managing HWP". If
5255 /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[11] = 1.
5256 ///
5257 UINT32 Package_Control:1;
5258 UINT32 Reserved:21;
5259 } Bits;
5260 ///
5261 /// All bit fields as a 64-bit value
5262 ///
5263 UINT64 Uint64;
5264 } MSR_IA32_HWP_REQUEST_REGISTER;
5265
5266
5267 /**
5268 Log bits indicating changes to Guaranteed & excursions to Minimum (R/W). If
5269 CPUID.06H:EAX.[7] = 1.
5270
5271 @param ECX MSR_IA32_HWP_STATUS (0x00000777)
5272 @param EAX Lower 32-bits of MSR value.
5273 Described by the type MSR_IA32_HWP_STATUS_REGISTER.
5274 @param EDX Upper 32-bits of MSR value.
5275 Described by the type MSR_IA32_HWP_STATUS_REGISTER.
5276
5277 <b>Example usage</b>
5278 @code
5279 MSR_IA32_HWP_STATUS_REGISTER Msr;
5280
5281 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_STATUS);
5282 AsmWriteMsr64 (MSR_IA32_HWP_STATUS, Msr.Uint64);
5283 @endcode
5284 @note MSR_IA32_HWP_STATUS is defined as IA32_HWP_STATUS in SDM.
5285 **/
5286 #define MSR_IA32_HWP_STATUS 0x00000777
5287
5288 /**
5289 MSR information returned for MSR index #MSR_IA32_HWP_STATUS
5290 **/
5291 typedef union {
5292 ///
5293 /// Individual bit fields
5294 ///
5295 struct {
5296 ///
5297 /// [Bit 0] Guaranteed_Performance_Change (R/WC0). See Section 14.4.5,
5298 /// "HWP Feedback". If CPUID.06H:EAX.[7] = 1.
5299 ///
5300 UINT32 Guaranteed_Performance_Change:1;
5301 UINT32 Reserved1:1;
5302 ///
5303 /// [Bit 2] Excursion_To_Minimum (R/WC0). See Section 14.4.5, "HWP
5304 /// Feedback". If CPUID.06H:EAX.[7] = 1.
5305 ///
5306 UINT32 Excursion_To_Minimum:1;
5307 UINT32 Reserved2:29;
5308 UINT32 Reserved3:32;
5309 } Bits;
5310 ///
5311 /// All bit fields as a 32-bit value
5312 ///
5313 UINT32 Uint32;
5314 ///
5315 /// All bit fields as a 64-bit value
5316 ///
5317 UINT64 Uint64;
5318 } MSR_IA32_HWP_STATUS_REGISTER;
5319
5320
5321 /**
5322 x2APIC ID Register (R/O) See x2APIC Specification. If CPUID.01H:ECX[21] = 1
5323 && IA32_APIC_BASE.[10] = 1.
5324
5325 @param ECX MSR_IA32_X2APIC_APICID (0x00000802)
5326 @param EAX Lower 32-bits of MSR value.
5327 @param EDX Upper 32-bits of MSR value.
5328
5329 <b>Example usage</b>
5330 @code
5331 UINT64 Msr;
5332
5333 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_APICID);
5334 @endcode
5335 @note MSR_IA32_X2APIC_APICID is defined as IA32_X2APIC_APICID in SDM.
5336 **/
5337 #define MSR_IA32_X2APIC_APICID 0x00000802
5338
5339
5340 /**
5341 x2APIC Version Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
5342 IA32_APIC_BASE.[10] = 1.
5343
5344 @param ECX MSR_IA32_X2APIC_VERSION (0x00000803)
5345 @param EAX Lower 32-bits of MSR value.
5346 @param EDX Upper 32-bits of MSR value.
5347
5348 <b>Example usage</b>
5349 @code
5350 UINT64 Msr;
5351
5352 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_VERSION);
5353 @endcode
5354 @note MSR_IA32_X2APIC_VERSION is defined as IA32_X2APIC_VERSION in SDM.
5355 **/
5356 #define MSR_IA32_X2APIC_VERSION 0x00000803
5357
5358
5359 /**
5360 x2APIC Task Priority Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5361 IA32_APIC_BASE.[10] = 1.
5362
5363 @param ECX MSR_IA32_X2APIC_TPR (0x00000808)
5364 @param EAX Lower 32-bits of MSR value.
5365 @param EDX Upper 32-bits of MSR value.
5366
5367 <b>Example usage</b>
5368 @code
5369 UINT64 Msr;
5370
5371 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TPR);
5372 AsmWriteMsr64 (MSR_IA32_X2APIC_TPR, Msr);
5373 @endcode
5374 @note MSR_IA32_X2APIC_TPR is defined as IA32_X2APIC_TPR in SDM.
5375 **/
5376 #define MSR_IA32_X2APIC_TPR 0x00000808
5377
5378
5379 /**
5380 x2APIC Processor Priority Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
5381 IA32_APIC_BASE.[10] = 1.
5382
5383 @param ECX MSR_IA32_X2APIC_PPR (0x0000080A)
5384 @param EAX Lower 32-bits of MSR value.
5385 @param EDX Upper 32-bits of MSR value.
5386
5387 <b>Example usage</b>
5388 @code
5389 UINT64 Msr;
5390
5391 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_PPR);
5392 @endcode
5393 @note MSR_IA32_X2APIC_PPR is defined as IA32_X2APIC_PPR in SDM.
5394 **/
5395 #define MSR_IA32_X2APIC_PPR 0x0000080A
5396
5397
5398 /**
5399 x2APIC EOI Register (W/O). If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10]
5400 = 1.
5401
5402 @param ECX MSR_IA32_X2APIC_EOI (0x0000080B)
5403 @param EAX Lower 32-bits of MSR value.
5404 @param EDX Upper 32-bits of MSR value.
5405
5406 <b>Example usage</b>
5407 @code
5408 UINT64 Msr;
5409
5410 Msr = 0;
5411 AsmWriteMsr64 (MSR_IA32_X2APIC_EOI, Msr);
5412 @endcode
5413 @note MSR_IA32_X2APIC_EOI is defined as IA32_X2APIC_EOI in SDM.
5414 **/
5415 #define MSR_IA32_X2APIC_EOI 0x0000080B
5416
5417
5418 /**
5419 x2APIC Logical Destination Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
5420 IA32_APIC_BASE.[10] = 1.
5421
5422 @param ECX MSR_IA32_X2APIC_LDR (0x0000080D)
5423 @param EAX Lower 32-bits of MSR value.
5424 @param EDX Upper 32-bits of MSR value.
5425
5426 <b>Example usage</b>
5427 @code
5428 UINT64 Msr;
5429
5430 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LDR);
5431 @endcode
5432 @note MSR_IA32_X2APIC_LDR is defined as IA32_X2APIC_LDR in SDM.
5433 **/
5434 #define MSR_IA32_X2APIC_LDR 0x0000080D
5435
5436
5437 /**
5438 x2APIC Spurious Interrupt Vector Register (R/W). If CPUID.01H:ECX.[21] = 1
5439 && IA32_APIC_BASE.[10] = 1.
5440
5441 @param ECX MSR_IA32_X2APIC_SIVR (0x0000080F)
5442 @param EAX Lower 32-bits of MSR value.
5443 @param EDX Upper 32-bits of MSR value.
5444
5445 <b>Example usage</b>
5446 @code
5447 UINT64 Msr;
5448
5449 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_SIVR);
5450 AsmWriteMsr64 (MSR_IA32_X2APIC_SIVR, Msr);
5451 @endcode
5452 @note MSR_IA32_X2APIC_SIVR is defined as IA32_X2APIC_SIVR in SDM.
5453 **/
5454 #define MSR_IA32_X2APIC_SIVR 0x0000080F
5455
5456
5457 /**
5458 x2APIC In-Service Register Bits (n * 32 + 31):(n * 32) (R/O).
5459 If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
5460
5461 @param ECX MSR_IA32_X2APIC_ISRn
5462 @param EAX Lower 32-bits of MSR value.
5463 @param EDX Upper 32-bits of MSR value.
5464
5465 <b>Example usage</b>
5466 @code
5467 UINT64 Msr;
5468
5469 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ISR0);
5470 @endcode
5471 @note MSR_IA32_X2APIC_ISR0 is defined as IA32_X2APIC_ISR0 in SDM.
5472 MSR_IA32_X2APIC_ISR1 is defined as IA32_X2APIC_ISR1 in SDM.
5473 MSR_IA32_X2APIC_ISR2 is defined as IA32_X2APIC_ISR2 in SDM.
5474 MSR_IA32_X2APIC_ISR3 is defined as IA32_X2APIC_ISR3 in SDM.
5475 MSR_IA32_X2APIC_ISR4 is defined as IA32_X2APIC_ISR4 in SDM.
5476 MSR_IA32_X2APIC_ISR5 is defined as IA32_X2APIC_ISR5 in SDM.
5477 MSR_IA32_X2APIC_ISR6 is defined as IA32_X2APIC_ISR6 in SDM.
5478 MSR_IA32_X2APIC_ISR7 is defined as IA32_X2APIC_ISR7 in SDM.
5479 @{
5480 **/
5481 #define MSR_IA32_X2APIC_ISR0 0x00000810
5482 #define MSR_IA32_X2APIC_ISR1 0x00000811
5483 #define MSR_IA32_X2APIC_ISR2 0x00000812
5484 #define MSR_IA32_X2APIC_ISR3 0x00000813
5485 #define MSR_IA32_X2APIC_ISR4 0x00000814
5486 #define MSR_IA32_X2APIC_ISR5 0x00000815
5487 #define MSR_IA32_X2APIC_ISR6 0x00000816
5488 #define MSR_IA32_X2APIC_ISR7 0x00000817
5489 /// @}
5490
5491
5492 /**
5493 x2APIC Trigger Mode Register Bits (n * 32 + ):(n * 32) (R/O).
5494 If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
5495
5496 @param ECX MSR_IA32_X2APIC_TMRn
5497 @param EAX Lower 32-bits of MSR value.
5498 @param EDX Upper 32-bits of MSR value.
5499
5500 <b>Example usage</b>
5501 @code
5502 UINT64 Msr;
5503
5504 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TMR0);
5505 @endcode
5506 @note MSR_IA32_X2APIC_TMR0 is defined as IA32_X2APIC_TMR0 in SDM.
5507 MSR_IA32_X2APIC_TMR1 is defined as IA32_X2APIC_TMR1 in SDM.
5508 MSR_IA32_X2APIC_TMR2 is defined as IA32_X2APIC_TMR2 in SDM.
5509 MSR_IA32_X2APIC_TMR3 is defined as IA32_X2APIC_TMR3 in SDM.
5510 MSR_IA32_X2APIC_TMR4 is defined as IA32_X2APIC_TMR4 in SDM.
5511 MSR_IA32_X2APIC_TMR5 is defined as IA32_X2APIC_TMR5 in SDM.
5512 MSR_IA32_X2APIC_TMR6 is defined as IA32_X2APIC_TMR6 in SDM.
5513 MSR_IA32_X2APIC_TMR7 is defined as IA32_X2APIC_TMR7 in SDM.
5514 @{
5515 **/
5516 #define MSR_IA32_X2APIC_TMR0 0x00000818
5517 #define MSR_IA32_X2APIC_TMR1 0x00000819
5518 #define MSR_IA32_X2APIC_TMR2 0x0000081A
5519 #define MSR_IA32_X2APIC_TMR3 0x0000081B
5520 #define MSR_IA32_X2APIC_TMR4 0x0000081C
5521 #define MSR_IA32_X2APIC_TMR5 0x0000081D
5522 #define MSR_IA32_X2APIC_TMR6 0x0000081E
5523 #define MSR_IA32_X2APIC_TMR7 0x0000081F
5524 /// @}
5525
5526
5527 /**
5528 x2APIC Interrupt Request Register Bits (n* 32 + 31):(n * 32) (R/O).
5529 If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
5530
5531 @param ECX MSR_IA32_X2APIC_IRRn
5532 @param EAX Lower 32-bits of MSR value.
5533 @param EDX Upper 32-bits of MSR value.
5534
5535 <b>Example usage</b>
5536 @code
5537 UINT64 Msr;
5538
5539 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_IRR0);
5540 @endcode
5541 @note MSR_IA32_X2APIC_IRR0 is defined as IA32_X2APIC_IRR0 in SDM.
5542 MSR_IA32_X2APIC_IRR1 is defined as IA32_X2APIC_IRR1 in SDM.
5543 MSR_IA32_X2APIC_IRR2 is defined as IA32_X2APIC_IRR2 in SDM.
5544 MSR_IA32_X2APIC_IRR3 is defined as IA32_X2APIC_IRR3 in SDM.
5545 MSR_IA32_X2APIC_IRR4 is defined as IA32_X2APIC_IRR4 in SDM.
5546 MSR_IA32_X2APIC_IRR5 is defined as IA32_X2APIC_IRR5 in SDM.
5547 MSR_IA32_X2APIC_IRR6 is defined as IA32_X2APIC_IRR6 in SDM.
5548 MSR_IA32_X2APIC_IRR7 is defined as IA32_X2APIC_IRR7 in SDM.
5549 @{
5550 **/
5551 #define MSR_IA32_X2APIC_IRR0 0x00000820
5552 #define MSR_IA32_X2APIC_IRR1 0x00000821
5553 #define MSR_IA32_X2APIC_IRR2 0x00000822
5554 #define MSR_IA32_X2APIC_IRR3 0x00000823
5555 #define MSR_IA32_X2APIC_IRR4 0x00000824
5556 #define MSR_IA32_X2APIC_IRR5 0x00000825
5557 #define MSR_IA32_X2APIC_IRR6 0x00000826
5558 #define MSR_IA32_X2APIC_IRR7 0x00000827
5559 /// @}
5560
5561
5562 /**
5563 x2APIC Error Status Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5564 IA32_APIC_BASE.[10] = 1.
5565
5566 @param ECX MSR_IA32_X2APIC_ESR (0x00000828)
5567 @param EAX Lower 32-bits of MSR value.
5568 @param EDX Upper 32-bits of MSR value.
5569
5570 <b>Example usage</b>
5571 @code
5572 UINT64 Msr;
5573
5574 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ESR);
5575 AsmWriteMsr64 (MSR_IA32_X2APIC_ESR, Msr);
5576 @endcode
5577 @note MSR_IA32_X2APIC_ESR is defined as IA32_X2APIC_ESR in SDM.
5578 **/
5579 #define MSR_IA32_X2APIC_ESR 0x00000828
5580
5581
5582 /**
5583 x2APIC LVT Corrected Machine Check Interrupt Register (R/W). If
5584 CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
5585
5586 @param ECX MSR_IA32_X2APIC_LVT_CMCI (0x0000082F)
5587 @param EAX Lower 32-bits of MSR value.
5588 @param EDX Upper 32-bits of MSR value.
5589
5590 <b>Example usage</b>
5591 @code
5592 UINT64 Msr;
5593
5594 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_CMCI);
5595 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_CMCI, Msr);
5596 @endcode
5597 @note MSR_IA32_X2APIC_LVT_CMCI is defined as IA32_X2APIC_LVT_CMCI in SDM.
5598 **/
5599 #define MSR_IA32_X2APIC_LVT_CMCI 0x0000082F
5600
5601
5602 /**
5603 x2APIC Interrupt Command Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5604 IA32_APIC_BASE.[10] = 1.
5605
5606 @param ECX MSR_IA32_X2APIC_ICR (0x00000830)
5607 @param EAX Lower 32-bits of MSR value.
5608 @param EDX Upper 32-bits of MSR value.
5609
5610 <b>Example usage</b>
5611 @code
5612 UINT64 Msr;
5613
5614 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ICR);
5615 AsmWriteMsr64 (MSR_IA32_X2APIC_ICR, Msr);
5616 @endcode
5617 @note MSR_IA32_X2APIC_ICR is defined as IA32_X2APIC_ICR in SDM.
5618 **/
5619 #define MSR_IA32_X2APIC_ICR 0x00000830
5620
5621
5622 /**
5623 x2APIC LVT Timer Interrupt Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5624 IA32_APIC_BASE.[10] = 1.
5625
5626 @param ECX MSR_IA32_X2APIC_LVT_TIMER (0x00000832)
5627 @param EAX Lower 32-bits of MSR value.
5628 @param EDX Upper 32-bits of MSR value.
5629
5630 <b>Example usage</b>
5631 @code
5632 UINT64 Msr;
5633
5634 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_TIMER);
5635 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_TIMER, Msr);
5636 @endcode
5637 @note MSR_IA32_X2APIC_LVT_TIMER is defined as IA32_X2APIC_LVT_TIMER in SDM.
5638 **/
5639 #define MSR_IA32_X2APIC_LVT_TIMER 0x00000832
5640
5641
5642 /**
5643 x2APIC LVT Thermal Sensor Interrupt Register (R/W). If CPUID.01H:ECX.[21] =
5644 1 && IA32_APIC_BASE.[10] = 1.
5645
5646 @param ECX MSR_IA32_X2APIC_LVT_THERMAL (0x00000833)
5647 @param EAX Lower 32-bits of MSR value.
5648 @param EDX Upper 32-bits of MSR value.
5649
5650 <b>Example usage</b>
5651 @code
5652 UINT64 Msr;
5653
5654 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_THERMAL);
5655 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_THERMAL, Msr);
5656 @endcode
5657 @note MSR_IA32_X2APIC_LVT_THERMAL is defined as IA32_X2APIC_LVT_THERMAL in SDM.
5658 **/
5659 #define MSR_IA32_X2APIC_LVT_THERMAL 0x00000833
5660
5661
5662 /**
5663 x2APIC LVT Performance Monitor Interrupt Register (R/W). If
5664 CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
5665
5666 @param ECX MSR_IA32_X2APIC_LVT_PMI (0x00000834)
5667 @param EAX Lower 32-bits of MSR value.
5668 @param EDX Upper 32-bits of MSR value.
5669
5670 <b>Example usage</b>
5671 @code
5672 UINT64 Msr;
5673
5674 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_PMI);
5675 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_PMI, Msr);
5676 @endcode
5677 @note MSR_IA32_X2APIC_LVT_PMI is defined as IA32_X2APIC_LVT_PMI in SDM.
5678 **/
5679 #define MSR_IA32_X2APIC_LVT_PMI 0x00000834
5680
5681
5682 /**
5683 x2APIC LVT LINT0 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5684 IA32_APIC_BASE.[10] = 1.
5685
5686 @param ECX MSR_IA32_X2APIC_LVT_LINT0 (0x00000835)
5687 @param EAX Lower 32-bits of MSR value.
5688 @param EDX Upper 32-bits of MSR value.
5689
5690 <b>Example usage</b>
5691 @code
5692 UINT64 Msr;
5693
5694 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT0);
5695 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT0, Msr);
5696 @endcode
5697 @note MSR_IA32_X2APIC_LVT_LINT0 is defined as IA32_X2APIC_LVT_LINT0 in SDM.
5698 **/
5699 #define MSR_IA32_X2APIC_LVT_LINT0 0x00000835
5700
5701
5702 /**
5703 x2APIC LVT LINT1 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5704 IA32_APIC_BASE.[10] = 1.
5705
5706 @param ECX MSR_IA32_X2APIC_LVT_LINT1 (0x00000836)
5707 @param EAX Lower 32-bits of MSR value.
5708 @param EDX Upper 32-bits of MSR value.
5709
5710 <b>Example usage</b>
5711 @code
5712 UINT64 Msr;
5713
5714 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT1);
5715 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT1, Msr);
5716 @endcode
5717 @note MSR_IA32_X2APIC_LVT_LINT1 is defined as IA32_X2APIC_LVT_LINT1 in SDM.
5718 **/
5719 #define MSR_IA32_X2APIC_LVT_LINT1 0x00000836
5720
5721
5722 /**
5723 x2APIC LVT Error Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5724 IA32_APIC_BASE.[10] = 1.
5725
5726 @param ECX MSR_IA32_X2APIC_LVT_ERROR (0x00000837)
5727 @param EAX Lower 32-bits of MSR value.
5728 @param EDX Upper 32-bits of MSR value.
5729
5730 <b>Example usage</b>
5731 @code
5732 UINT64 Msr;
5733
5734 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_ERROR);
5735 AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_ERROR, Msr);
5736 @endcode
5737 @note MSR_IA32_X2APIC_LVT_ERROR is defined as IA32_X2APIC_LVT_ERROR in SDM.
5738 **/
5739 #define MSR_IA32_X2APIC_LVT_ERROR 0x00000837
5740
5741
5742 /**
5743 x2APIC Initial Count Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5744 IA32_APIC_BASE.[10] = 1.
5745
5746 @param ECX MSR_IA32_X2APIC_INIT_COUNT (0x00000838)
5747 @param EAX Lower 32-bits of MSR value.
5748 @param EDX Upper 32-bits of MSR value.
5749
5750 <b>Example usage</b>
5751 @code
5752 UINT64 Msr;
5753
5754 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_INIT_COUNT);
5755 AsmWriteMsr64 (MSR_IA32_X2APIC_INIT_COUNT, Msr);
5756 @endcode
5757 @note MSR_IA32_X2APIC_INIT_COUNT is defined as IA32_X2APIC_INIT_COUNT in SDM.
5758 **/
5759 #define MSR_IA32_X2APIC_INIT_COUNT 0x00000838
5760
5761
5762 /**
5763 x2APIC Current Count Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
5764 IA32_APIC_BASE.[10] = 1.
5765
5766 @param ECX MSR_IA32_X2APIC_CUR_COUNT (0x00000839)
5767 @param EAX Lower 32-bits of MSR value.
5768 @param EDX Upper 32-bits of MSR value.
5769
5770 <b>Example usage</b>
5771 @code
5772 UINT64 Msr;
5773
5774 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_CUR_COUNT);
5775 @endcode
5776 @note MSR_IA32_X2APIC_CUR_COUNT is defined as IA32_X2APIC_CUR_COUNT in SDM.
5777 **/
5778 #define MSR_IA32_X2APIC_CUR_COUNT 0x00000839
5779
5780
5781 /**
5782 x2APIC Divide Configuration Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
5783 IA32_APIC_BASE.[10] = 1.
5784
5785 @param ECX MSR_IA32_X2APIC_DIV_CONF (0x0000083E)
5786 @param EAX Lower 32-bits of MSR value.
5787 @param EDX Upper 32-bits of MSR value.
5788
5789 <b>Example usage</b>
5790 @code
5791 UINT64 Msr;
5792
5793 Msr = AsmReadMsr64 (MSR_IA32_X2APIC_DIV_CONF);
5794 AsmWriteMsr64 (MSR_IA32_X2APIC_DIV_CONF, Msr);
5795 @endcode
5796 @note MSR_IA32_X2APIC_DIV_CONF is defined as IA32_X2APIC_DIV_CONF in SDM.
5797 **/
5798 #define MSR_IA32_X2APIC_DIV_CONF 0x0000083E
5799
5800
5801 /**
5802 x2APIC Self IPI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
5803 IA32_APIC_BASE.[10] = 1.
5804
5805 @param ECX MSR_IA32_X2APIC_SELF_IPI (0x0000083F)
5806 @param EAX Lower 32-bits of MSR value.
5807 @param EDX Upper 32-bits of MSR value.
5808
5809 <b>Example usage</b>
5810 @code
5811 UINT64 Msr;
5812
5813 Msr = 0;
5814 AsmWriteMsr64 (MSR_IA32_X2APIC_SELF_IPI, Msr);
5815 @endcode
5816 @note MSR_IA32_X2APIC_SELF_IPI is defined as IA32_X2APIC_SELF_IPI in SDM.
5817 **/
5818 #define MSR_IA32_X2APIC_SELF_IPI 0x0000083F
5819
5820
5821 /**
5822 Silicon Debug Feature Control (R/W). If CPUID.01H:ECX.[11] = 1.
5823
5824 @param ECX MSR_IA32_DEBUG_INTERFACE (0x00000C80)
5825 @param EAX Lower 32-bits of MSR value.
5826 Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
5827 @param EDX Upper 32-bits of MSR value.
5828 Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
5829
5830 <b>Example usage</b>
5831 @code
5832 MSR_IA32_DEBUG_INTERFACE_REGISTER Msr;
5833
5834 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUG_INTERFACE);
5835 AsmWriteMsr64 (MSR_IA32_DEBUG_INTERFACE, Msr.Uint64);
5836 @endcode
5837 @note MSR_IA32_DEBUG_INTERFACE is defined as IA32_DEBUG_INTERFACE in SDM.
5838 **/
5839 #define MSR_IA32_DEBUG_INTERFACE 0x00000C80
5840
5841 /**
5842 MSR information returned for MSR index #MSR_IA32_DEBUG_INTERFACE
5843 **/
5844 typedef union {
5845 ///
5846 /// Individual bit fields
5847 ///
5848 struct {
5849 ///
5850 /// [Bit 0] Enable (R/W) BIOS set 1 to enable Silicon debug features.
5851 /// Default is 0. If CPUID.01H:ECX.[11] = 1.
5852 ///
5853 UINT32 Enable:1;
5854 UINT32 Reserved1:29;
5855 ///
5856 /// [Bit 30] Lock (R/W): If 1, locks any further change to the MSR. The
5857 /// lock bit is set automatically on the first SMI assertion even if not
5858 /// explicitly set by BIOS. Default is 0. If CPUID.01H:ECX.[11] = 1.
5859 ///
5860 UINT32 Lock:1;
5861 ///
5862 /// [Bit 31] Debug Occurred (R/O): This "sticky bit" is set by hardware to
5863 /// indicate the status of bit 0. Default is 0. If CPUID.01H:ECX.[11] = 1.
5864 ///
5865 UINT32 DebugOccurred:1;
5866 UINT32 Reserved2:32;
5867 } Bits;
5868 ///
5869 /// All bit fields as a 32-bit value
5870 ///
5871 UINT32 Uint32;
5872 ///
5873 /// All bit fields as a 64-bit value
5874 ///
5875 UINT64 Uint64;
5876 } MSR_IA32_DEBUG_INTERFACE_REGISTER;
5877
5878
5879 /**
5880 L3 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=1):ECX.[2] = 1 ).
5881
5882 @param ECX MSR_IA32_L3_QOS_CFG (0x00000C81)
5883 @param EAX Lower 32-bits of MSR value.
5884 Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
5885 @param EDX Upper 32-bits of MSR value.
5886 Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
5887
5888 <b>Example usage</b>
5889 @code
5890 MSR_IA32_L3_QOS_CFG_REGISTER Msr;
5891
5892 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L3_QOS_CFG);
5893 AsmWriteMsr64 (MSR_IA32_L3_QOS_CFG, Msr.Uint64);
5894 @endcode
5895 @note MSR_IA32_L3_QOS_CFG is defined as IA32_L3_QOS_CFG in SDM.
5896 **/
5897 #define MSR_IA32_L3_QOS_CFG 0x00000C81
5898
5899 /**
5900 MSR information returned for MSR index #MSR_IA32_L3_QOS_CFG
5901 **/
5902 typedef union {
5903 ///
5904 /// Individual bit fields
5905 ///
5906 struct {
5907 ///
5908 /// [Bit 0] Enable (R/W) Set 1 to enable L3 CAT masks and COS to operate
5909 /// in Code and Data Prioritization (CDP) mode.
5910 ///
5911 UINT32 Enable:1;
5912 UINT32 Reserved1:31;
5913 UINT32 Reserved2:32;
5914 } Bits;
5915 ///
5916 /// All bit fields as a 32-bit value
5917 ///
5918 UINT32 Uint32;
5919 ///
5920 /// All bit fields as a 64-bit value
5921 ///
5922 UINT64 Uint64;
5923 } MSR_IA32_L3_QOS_CFG_REGISTER;
5924
5925
5926 /**
5927 Monitoring Event Select Register (R/W). If ( CPUID.(EAX=07H, ECX=0):EBX.[12]
5928 = 1 ).
5929
5930 @param ECX MSR_IA32_QM_EVTSEL (0x00000C8D)
5931 @param EAX Lower 32-bits of MSR value.
5932 Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
5933 @param EDX Upper 32-bits of MSR value.
5934 Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
5935
5936 <b>Example usage</b>
5937 @code
5938 MSR_IA32_QM_EVTSEL_REGISTER Msr;
5939
5940 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_EVTSEL);
5941 AsmWriteMsr64 (MSR_IA32_QM_EVTSEL, Msr.Uint64);
5942 @endcode
5943 @note MSR_IA32_QM_EVTSEL is defined as IA32_QM_EVTSEL in SDM.
5944 **/
5945 #define MSR_IA32_QM_EVTSEL 0x00000C8D
5946
5947 /**
5948 MSR information returned for MSR index #MSR_IA32_QM_EVTSEL
5949 **/
5950 typedef union {
5951 ///
5952 /// Individual bit fields
5953 ///
5954 struct {
5955 ///
5956 /// [Bits 7:0] Event ID: ID of a supported monitoring event to report via
5957 /// IA32_QM_CTR.
5958 ///
5959 UINT32 EventID:8;
5960 UINT32 Reserved:24;
5961 ///
5962 /// [Bits 63:32] Resource Monitoring ID: ID for monitoring hardware to
5963 /// report monitored data via IA32_QM_CTR. N = Ceil (Log:sub:`2` (
5964 /// CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
5965 ///
5966 UINT32 ResourceMonitoringID:32;
5967 } Bits;
5968 ///
5969 /// All bit fields as a 64-bit value
5970 ///
5971 UINT64 Uint64;
5972 } MSR_IA32_QM_EVTSEL_REGISTER;
5973
5974
5975 /**
5976 Monitoring Counter Register (R/O). If ( CPUID.(EAX=07H, ECX=0):EBX.[12] = 1
5977 ).
5978
5979 @param ECX MSR_IA32_QM_CTR (0x00000C8E)
5980 @param EAX Lower 32-bits of MSR value.
5981 Described by the type MSR_IA32_QM_CTR_REGISTER.
5982 @param EDX Upper 32-bits of MSR value.
5983 Described by the type MSR_IA32_QM_CTR_REGISTER.
5984
5985 <b>Example usage</b>
5986 @code
5987 MSR_IA32_QM_CTR_REGISTER Msr;
5988
5989 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_CTR);
5990 @endcode
5991 @note MSR_IA32_QM_CTR is defined as IA32_QM_CTR in SDM.
5992 **/
5993 #define MSR_IA32_QM_CTR 0x00000C8E
5994
5995 /**
5996 MSR information returned for MSR index #MSR_IA32_QM_CTR
5997 **/
5998 typedef union {
5999 ///
6000 /// Individual bit fields
6001 ///
6002 struct {
6003 ///
6004 /// [Bits 31:0] Resource Monitored Data.
6005 ///
6006 UINT32 ResourceMonitoredData:32;
6007 ///
6008 /// [Bits 61:32] Resource Monitored Data.
6009 ///
6010 UINT32 ResourceMonitoredDataHi:30;
6011 ///
6012 /// [Bit 62] Unavailable: If 1, indicates data for this RMID is not
6013 /// available or not monitored for this resource or RMID.
6014 ///
6015 UINT32 Unavailable:1;
6016 ///
6017 /// [Bit 63] Error: If 1, indicates and unsupported RMID or event type was
6018 /// written to IA32_PQR_QM_EVTSEL.
6019 ///
6020 UINT32 Error:1;
6021 } Bits;
6022 ///
6023 /// All bit fields as a 64-bit value
6024 ///
6025 UINT64 Uint64;
6026 } MSR_IA32_QM_CTR_REGISTER;
6027
6028
6029 /**
6030 Resource Association Register (R/W). If ( (CPUID.(EAX=07H, ECX=0):EBX[12]
6031 =1) or (CPUID.(EAX=07H, ECX=0):EBX[15] =1 ) ).
6032
6033 @param ECX MSR_IA32_PQR_ASSOC (0x00000C8F)
6034 @param EAX Lower 32-bits of MSR value.
6035 Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
6036 @param EDX Upper 32-bits of MSR value.
6037 Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
6038
6039 <b>Example usage</b>
6040 @code
6041 MSR_IA32_PQR_ASSOC_REGISTER Msr;
6042
6043 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PQR_ASSOC);
6044 AsmWriteMsr64 (MSR_IA32_PQR_ASSOC, Msr.Uint64);
6045 @endcode
6046 @note MSR_IA32_PQR_ASSOC is defined as IA32_PQR_ASSOC in SDM.
6047 **/
6048 #define MSR_IA32_PQR_ASSOC 0x00000C8F
6049
6050 /**
6051 MSR information returned for MSR index #MSR_IA32_PQR_ASSOC
6052 **/
6053 typedef union {
6054 ///
6055 /// Individual bit fields
6056 ///
6057 struct {
6058 ///
6059 /// [Bits 31:0] Resource Monitoring ID (R/W): ID for monitoring hardware
6060 /// to track internal operation, e.g. memory access. N = Ceil (Log:sub:`2`
6061 /// ( CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
6062 ///
6063 UINT32 ResourceMonitoringID:32;
6064 ///
6065 /// [Bits 63:32] COS (R/W). The class of service (COS) to enforce (on
6066 /// writes); returns the current COS when read. If ( CPUID.(EAX=07H,
6067 /// ECX=0):EBX.[15] = 1 ).
6068 ///
6069 UINT32 COS:32;
6070 } Bits;
6071 ///
6072 /// All bit fields as a 64-bit value
6073 ///
6074 UINT64 Uint64;
6075 } MSR_IA32_PQR_ASSOC_REGISTER;
6076
6077
6078 /**
6079 Supervisor State of MPX Configuration. (R/W). If (CPUID.(EAX=07H,
6080 ECX=0H):EBX[14] = 1).
6081
6082 @param ECX MSR_IA32_BNDCFGS (0x00000D90)
6083 @param EAX Lower 32-bits of MSR value.
6084 Described by the type MSR_IA32_BNDCFGS_REGISTER.
6085 @param EDX Upper 32-bits of MSR value.
6086 Described by the type MSR_IA32_BNDCFGS_REGISTER.
6087
6088 <b>Example usage</b>
6089 @code
6090 MSR_IA32_BNDCFGS_REGISTER Msr;
6091
6092 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BNDCFGS);
6093 AsmWriteMsr64 (MSR_IA32_BNDCFGS, Msr.Uint64);
6094 @endcode
6095 @note MSR_IA32_BNDCFGS is defined as IA32_BNDCFGS in SDM.
6096 **/
6097 #define MSR_IA32_BNDCFGS 0x00000D90
6098
6099 /**
6100 MSR information returned for MSR index #MSR_IA32_BNDCFGS
6101 **/
6102 typedef union {
6103 ///
6104 /// Individual bit fields
6105 ///
6106 struct {
6107 ///
6108 /// [Bit 0] EN: Enable Intel MPX in supervisor mode.
6109 ///
6110 UINT32 EN:1;
6111 ///
6112 /// [Bit 1] BNDPRESERVE: Preserve the bounds registers for near branch
6113 /// instructions in the absence of the BND prefix.
6114 ///
6115 UINT32 BNDPRESERVE:1;
6116 UINT32 Reserved:10;
6117 ///
6118 /// [Bits 31:12] Base Address of Bound Directory.
6119 ///
6120 UINT32 Base:20;
6121 ///
6122 /// [Bits 63:32] Base Address of Bound Directory.
6123 ///
6124 UINT32 BaseHi:32;
6125 } Bits;
6126 ///
6127 /// All bit fields as a 64-bit value
6128 ///
6129 UINT64 Uint64;
6130 } MSR_IA32_BNDCFGS_REGISTER;
6131
6132
6133 /**
6134 Extended Supervisor State Mask (R/W). If( CPUID.(0DH, 1):EAX.[3] = 1.
6135
6136 @param ECX MSR_IA32_XSS (0x00000DA0)
6137 @param EAX Lower 32-bits of MSR value.
6138 Described by the type MSR_IA32_XSS_REGISTER.
6139 @param EDX Upper 32-bits of MSR value.
6140 Described by the type MSR_IA32_XSS_REGISTER.
6141
6142 <b>Example usage</b>
6143 @code
6144 MSR_IA32_XSS_REGISTER Msr;
6145
6146 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_XSS);
6147 AsmWriteMsr64 (MSR_IA32_XSS, Msr.Uint64);
6148 @endcode
6149 @note MSR_IA32_XSS is defined as IA32_XSS in SDM.
6150 **/
6151 #define MSR_IA32_XSS 0x00000DA0
6152
6153 /**
6154 MSR information returned for MSR index #MSR_IA32_XSS
6155 **/
6156 typedef union {
6157 ///
6158 /// Individual bit fields
6159 ///
6160 struct {
6161 UINT32 Reserved1:8;
6162 ///
6163 /// [Bit 8] Trace Packet Configuration State (R/W).
6164 ///
6165 UINT32 TracePacketConfigurationState:1;
6166 UINT32 Reserved2:23;
6167 UINT32 Reserved3:32;
6168 } Bits;
6169 ///
6170 /// All bit fields as a 32-bit value
6171 ///
6172 UINT32 Uint32;
6173 ///
6174 /// All bit fields as a 64-bit value
6175 ///
6176 UINT64 Uint64;
6177 } MSR_IA32_XSS_REGISTER;
6178
6179
6180 /**
6181 Package Level Enable/disable HDC (R/W). If CPUID.06H:EAX.[13] = 1.
6182
6183 @param ECX MSR_IA32_PKG_HDC_CTL (0x00000DB0)
6184 @param EAX Lower 32-bits of MSR value.
6185 Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
6186 @param EDX Upper 32-bits of MSR value.
6187 Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
6188
6189 <b>Example usage</b>
6190 @code
6191 MSR_IA32_PKG_HDC_CTL_REGISTER Msr;
6192
6193 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PKG_HDC_CTL);
6194 AsmWriteMsr64 (MSR_IA32_PKG_HDC_CTL, Msr.Uint64);
6195 @endcode
6196 @note MSR_IA32_PKG_HDC_CTL is defined as IA32_PKG_HDC_CTL in SDM.
6197 **/
6198 #define MSR_IA32_PKG_HDC_CTL 0x00000DB0
6199
6200 /**
6201 MSR information returned for MSR index #MSR_IA32_PKG_HDC_CTL
6202 **/
6203 typedef union {
6204 ///
6205 /// Individual bit fields
6206 ///
6207 struct {
6208 ///
6209 /// [Bit 0] HDC_Pkg_Enable (R/W) Force HDC idling or wake up HDC-idled
6210 /// logical processors in the package. See Section 14.5.2, "Package level
6211 /// Enabling HDC". If CPUID.06H:EAX.[13] = 1.
6212 ///
6213 UINT32 HDC_Pkg_Enable:1;
6214 UINT32 Reserved1:31;
6215 UINT32 Reserved2:32;
6216 } Bits;
6217 ///
6218 /// All bit fields as a 32-bit value
6219 ///
6220 UINT32 Uint32;
6221 ///
6222 /// All bit fields as a 64-bit value
6223 ///
6224 UINT64 Uint64;
6225 } MSR_IA32_PKG_HDC_CTL_REGISTER;
6226
6227
6228 /**
6229 Enable/disable HWP (R/W). If CPUID.06H:EAX.[13] = 1.
6230
6231 @param ECX MSR_IA32_PM_CTL1 (0x00000DB1)
6232 @param EAX Lower 32-bits of MSR value.
6233 Described by the type MSR_IA32_PM_CTL1_REGISTER.
6234 @param EDX Upper 32-bits of MSR value.
6235 Described by the type MSR_IA32_PM_CTL1_REGISTER.
6236
6237 <b>Example usage</b>
6238 @code
6239 MSR_IA32_PM_CTL1_REGISTER Msr;
6240
6241 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_CTL1);
6242 AsmWriteMsr64 (MSR_IA32_PM_CTL1, Msr.Uint64);
6243 @endcode
6244 @note MSR_IA32_PM_CTL1 is defined as IA32_PM_CTL1 in SDM.
6245 **/
6246 #define MSR_IA32_PM_CTL1 0x00000DB1
6247
6248 /**
6249 MSR information returned for MSR index #MSR_IA32_PM_CTL1
6250 **/
6251 typedef union {
6252 ///
6253 /// Individual bit fields
6254 ///
6255 struct {
6256 ///
6257 /// [Bit 0] HDC_Allow_Block (R/W) Allow/Block this logical processor for
6258 /// package level HDC control. See Section 14.5.3.
6259 /// If CPUID.06H:EAX.[13] = 1.
6260 ///
6261 UINT32 HDC_Allow_Block:1;
6262 UINT32 Reserved1:31;
6263 UINT32 Reserved2:32;
6264 } Bits;
6265 ///
6266 /// All bit fields as a 32-bit value
6267 ///
6268 UINT32 Uint32;
6269 ///
6270 /// All bit fields as a 64-bit value
6271 ///
6272 UINT64 Uint64;
6273 } MSR_IA32_PM_CTL1_REGISTER;
6274
6275
6276 /**
6277 Per-Logical_Processor HDC Idle Residency (R/0). If CPUID.06H:EAX.[13] = 1.
6278 Stall_Cycle_Cnt (R/W) Stalled cycles due to HDC forced idle on this logical
6279 processor. See Section 14.5.4.1. If CPUID.06H:EAX.[13] = 1.
6280
6281 @param ECX MSR_IA32_THREAD_STALL (0x00000DB2)
6282 @param EAX Lower 32-bits of MSR value.
6283 @param EDX Upper 32-bits of MSR value.
6284
6285 <b>Example usage</b>
6286 @code
6287 UINT64 Msr;
6288
6289 Msr = AsmReadMsr64 (MSR_IA32_THREAD_STALL);
6290 @endcode
6291 @note MSR_IA32_THREAD_STALL is defined as IA32_THREAD_STALL in SDM.
6292 **/
6293 #define MSR_IA32_THREAD_STALL 0x00000DB2
6294
6295
6296 /**
6297 Extended Feature Enables. If ( CPUID.80000001H:EDX.[2 0]
6298 CPUID.80000001H:EDX.[2 9]).
6299
6300 @param ECX MSR_IA32_EFER (0xC0000080)
6301 @param EAX Lower 32-bits of MSR value.
6302 Described by the type MSR_IA32_EFER_REGISTER.
6303 @param EDX Upper 32-bits of MSR value.
6304 Described by the type MSR_IA32_EFER_REGISTER.
6305
6306 <b>Example usage</b>
6307 @code
6308 MSR_IA32_EFER_REGISTER Msr;
6309
6310 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_EFER);
6311 AsmWriteMsr64 (MSR_IA32_EFER, Msr.Uint64);
6312 @endcode
6313 @note MSR_IA32_EFER is defined as IA32_EFER in SDM.
6314 **/
6315 #define MSR_IA32_EFER 0xC0000080
6316
6317 /**
6318 MSR information returned for MSR index #MSR_IA32_EFER
6319 **/
6320 typedef union {
6321 ///
6322 /// Individual bit fields
6323 ///
6324 struct {
6325 ///
6326 /// [Bit 0] SYSCALL Enable: IA32_EFER.SCE (R/W) Enables SYSCALL/SYSRET
6327 /// instructions in 64-bit mode.
6328 ///
6329 UINT32 SCE:1;
6330 UINT32 Reserved1:7;
6331 ///
6332 /// [Bit 8] IA-32e Mode Enable: IA32_EFER.LME (R/W) Enables IA-32e mode
6333 /// operation.
6334 ///
6335 UINT32 LME:1;
6336 UINT32 Reserved2:1;
6337 ///
6338 /// [Bit 10] IA-32e Mode Active: IA32_EFER.LMA (R) Indicates IA-32e mode
6339 /// is active when set.
6340 ///
6341 UINT32 LMA:1;
6342 ///
6343 /// [Bit 11] Execute Disable Bit Enable: IA32_EFER.NXE (R/W).
6344 ///
6345 UINT32 NXE:1;
6346 UINT32 Reserved3:20;
6347 UINT32 Reserved4:32;
6348 } Bits;
6349 ///
6350 /// All bit fields as a 32-bit value
6351 ///
6352 UINT32 Uint32;
6353 ///
6354 /// All bit fields as a 64-bit value
6355 ///
6356 UINT64 Uint64;
6357 } MSR_IA32_EFER_REGISTER;
6358
6359
6360 /**
6361 System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
6362
6363 @param ECX MSR_IA32_STAR (0xC0000081)
6364 @param EAX Lower 32-bits of MSR value.
6365 @param EDX Upper 32-bits of MSR value.
6366
6367 <b>Example usage</b>
6368 @code
6369 UINT64 Msr;
6370
6371 Msr = AsmReadMsr64 (MSR_IA32_STAR);
6372 AsmWriteMsr64 (MSR_IA32_STAR, Msr);
6373 @endcode
6374 @note MSR_IA32_STAR is defined as IA32_STAR in SDM.
6375 **/
6376 #define MSR_IA32_STAR 0xC0000081
6377
6378
6379 /**
6380 IA-32e Mode System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
6381
6382 @param ECX MSR_IA32_LSTAR (0xC0000082)
6383 @param EAX Lower 32-bits of MSR value.
6384 @param EDX Upper 32-bits of MSR value.
6385
6386 <b>Example usage</b>
6387 @code
6388 UINT64 Msr;
6389
6390 Msr = AsmReadMsr64 (MSR_IA32_LSTAR);
6391 AsmWriteMsr64 (MSR_IA32_LSTAR, Msr);
6392 @endcode
6393 @note MSR_IA32_LSTAR is defined as IA32_LSTAR in SDM.
6394 **/
6395 #define MSR_IA32_LSTAR 0xC0000082
6396
6397
6398 /**
6399 System Call Flag Mask (R/W). If CPUID.80000001:EDX.[29] = 1.
6400
6401 @param ECX MSR_IA32_FMASK (0xC0000084)
6402 @param EAX Lower 32-bits of MSR value.
6403 @param EDX Upper 32-bits of MSR value.
6404
6405 <b>Example usage</b>
6406 @code
6407 UINT64 Msr;
6408
6409 Msr = AsmReadMsr64 (MSR_IA32_FMASK);
6410 AsmWriteMsr64 (MSR_IA32_FMASK, Msr);
6411 @endcode
6412 @note MSR_IA32_FMASK is defined as IA32_FMASK in SDM.
6413 **/
6414 #define MSR_IA32_FMASK 0xC0000084
6415
6416
6417 /**
6418 Map of BASE Address of FS (R/W). If CPUID.80000001:EDX.[29] = 1.
6419
6420 @param ECX MSR_IA32_FS_BASE (0xC0000100)
6421 @param EAX Lower 32-bits of MSR value.
6422 @param EDX Upper 32-bits of MSR value.
6423
6424 <b>Example usage</b>
6425 @code
6426 UINT64 Msr;
6427
6428 Msr = AsmReadMsr64 (MSR_IA32_FS_BASE);
6429 AsmWriteMsr64 (MSR_IA32_FS_BASE, Msr);
6430 @endcode
6431 @note MSR_IA32_FS_BASE is defined as IA32_FS_BASE in SDM.
6432 **/
6433 #define MSR_IA32_FS_BASE 0xC0000100
6434
6435
6436 /**
6437 Map of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
6438
6439 @param ECX MSR_IA32_GS_BASE (0xC0000101)
6440 @param EAX Lower 32-bits of MSR value.
6441 @param EDX Upper 32-bits of MSR value.
6442
6443 <b>Example usage</b>
6444 @code
6445 UINT64 Msr;
6446
6447 Msr = AsmReadMsr64 (MSR_IA32_GS_BASE);
6448 AsmWriteMsr64 (MSR_IA32_GS_BASE, Msr);
6449 @endcode
6450 @note MSR_IA32_GS_BASE is defined as IA32_GS_BASE in SDM.
6451 **/
6452 #define MSR_IA32_GS_BASE 0xC0000101
6453
6454
6455 /**
6456 Swap Target of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
6457
6458 @param ECX MSR_IA32_KERNEL_GS_BASE (0xC0000102)
6459 @param EAX Lower 32-bits of MSR value.
6460 @param EDX Upper 32-bits of MSR value.
6461
6462 <b>Example usage</b>
6463 @code
6464 UINT64 Msr;
6465
6466 Msr = AsmReadMsr64 (MSR_IA32_KERNEL_GS_BASE);
6467 AsmWriteMsr64 (MSR_IA32_KERNEL_GS_BASE, Msr);
6468 @endcode
6469 @note MSR_IA32_KERNEL_GS_BASE is defined as IA32_KERNEL_GS_BASE in SDM.
6470 **/
6471 #define MSR_IA32_KERNEL_GS_BASE 0xC0000102
6472
6473
6474 /**
6475 Auxiliary TSC (RW). If CPUID.80000001H: EDX[27] = 1.
6476
6477 @param ECX MSR_IA32_TSC_AUX (0xC0000103)
6478 @param EAX Lower 32-bits of MSR value.
6479 Described by the type MSR_IA32_TSC_AUX_REGISTER.
6480 @param EDX Upper 32-bits of MSR value.
6481 Described by the type MSR_IA32_TSC_AUX_REGISTER.
6482
6483 <b>Example usage</b>
6484 @code
6485 MSR_IA32_TSC_AUX_REGISTER Msr;
6486
6487 Msr.Uint64 = AsmReadMsr64 (MSR_IA32_TSC_AUX);
6488 AsmWriteMsr64 (MSR_IA32_TSC_AUX, Msr.Uint64);
6489 @endcode
6490 @note MSR_IA32_TSC_AUX is defined as IA32_TSC_AUX in SDM.
6491 **/
6492 #define MSR_IA32_TSC_AUX 0xC0000103
6493
6494 /**
6495 MSR information returned for MSR index #MSR_IA32_TSC_AUX
6496 **/
6497 typedef union {
6498 ///
6499 /// Individual bit fields
6500 ///
6501 struct {
6502 ///
6503 /// [Bits 31:0] AUX: Auxiliary signature of TSC.
6504 ///
6505 UINT32 AUX:32;
6506 UINT32 Reserved:32;
6507 } Bits;
6508 ///
6509 /// All bit fields as a 32-bit value
6510 ///
6511 UINT32 Uint32;
6512 ///
6513 /// All bit fields as a 64-bit value
6514 ///
6515 UINT64 Uint64;
6516 } MSR_IA32_TSC_AUX_REGISTER;
6517
6518 #endif