2 MSR Definitions for P6 Family Processors.
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
9 Copyright (c) 2016, 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
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.
18 @par Specification Reference:
19 Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3,
20 December 2015, Chapter 35 Model-Specific-Registers (MSR), Section 35-19.
27 #include <Register/ArchitecturalMsr.h>
30 See Section 35.20, "MSRs in Pentium Processors.".
32 @param ECX MSR_P6_P5_MC_ADDR (0x00000000)
33 @param EAX Lower 32-bits of MSR value.
34 @param EDX Upper 32-bits of MSR value.
40 Msr = AsmReadMsr64 (MSR_P6_P5_MC_ADDR);
41 AsmWriteMsr64 (MSR_P6_P5_MC_ADDR, Msr);
44 #define MSR_P6_P5_MC_ADDR 0x00000000
48 See Section 35.20, "MSRs in Pentium Processors.".
50 @param ECX MSR_P6_P5_MC_TYPE (0x00000001)
51 @param EAX Lower 32-bits of MSR value.
52 @param EDX Upper 32-bits of MSR value.
58 Msr = AsmReadMsr64 (MSR_P6_P5_MC_TYPE);
59 AsmWriteMsr64 (MSR_P6_P5_MC_TYPE, Msr);
62 #define MSR_P6_P5_MC_TYPE 0x00000001
66 See Section 17.14, "Time-Stamp Counter.".
68 @param ECX MSR_P6_TSC (0x00000010)
69 @param EAX Lower 32-bits of MSR value.
70 @param EDX Upper 32-bits of MSR value.
76 Msr = AsmReadMsr64 (MSR_P6_TSC);
77 AsmWriteMsr64 (MSR_P6_TSC, Msr);
80 #define MSR_P6_TSC 0x00000010
84 Platform ID (R) The operating system can use this MSR to determine "slot"
85 information for the processor and the proper microcode update to load.
87 @param ECX MSR_P6_IA32_PLATFORM_ID (0x00000017)
88 @param EAX Lower 32-bits of MSR value.
89 Described by the type MSR_P6_IA32_PLATFORM_ID_REGISTER.
90 @param EDX Upper 32-bits of MSR value.
91 Described by the type MSR_P6_IA32_PLATFORM_ID_REGISTER.
95 MSR_P6_IA32_PLATFORM_ID_REGISTER Msr;
97 Msr.Uint64 = AsmReadMsr64 (MSR_P6_IA32_PLATFORM_ID);
100 #define MSR_P6_IA32_PLATFORM_ID 0x00000017
103 MSR information returned for MSR index #MSR_P6_IA32_PLATFORM_ID
107 /// Individual bit fields
113 /// [Bits 52:50] Platform Id (R) Contains information concerning the
114 /// intended platform for the processor.
117 /// 0 0 0 Processor Flag 0.
118 /// 0 0 1 Processor Flag 1
119 /// 0 1 0 Processor Flag 2
120 /// 0 1 1 Processor Flag 3
121 /// 1 0 0 Processor Flag 4
122 /// 1 0 1 Processor Flag 5
123 /// 1 1 0 Processor Flag 6
124 /// 1 1 1 Processor Flag 7
128 /// [Bits 56:53] L2 Cache Latency Read.
130 UINT32 L2CacheLatencyRead
:4;
133 /// [Bit 60] Clock Frequency Ratio Read.
135 UINT32 ClockFrequencyRatioRead
:1;
139 /// All bit fields as a 64-bit value
142 } MSR_P6_IA32_PLATFORM_ID_REGISTER
;
146 Section 10.4.4, "Local APIC Status and Location.".
148 @param ECX MSR_P6_APIC_BASE (0x0000001B)
149 @param EAX Lower 32-bits of MSR value.
150 Described by the type MSR_P6_APIC_BASE_REGISTER.
151 @param EDX Upper 32-bits of MSR value.
152 Described by the type MSR_P6_APIC_BASE_REGISTER.
156 MSR_P6_APIC_BASE_REGISTER Msr;
158 Msr.Uint64 = AsmReadMsr64 (MSR_P6_APIC_BASE);
159 AsmWriteMsr64 (MSR_P6_APIC_BASE, Msr.Uint64);
162 #define MSR_P6_APIC_BASE 0x0000001B
165 MSR information returned for MSR index #MSR_P6_APIC_BASE
169 /// Individual bit fields
174 /// [Bit 8] Boot Strap Processor indicator Bit 1 = BSP.
179 /// [Bit 11] APIC Global Enable Bit - Permanent till reset 1 = Enabled 0 =
184 /// [Bits 31:12] APIC Base Address.
190 /// All bit fields as a 32-bit value
194 /// All bit fields as a 64-bit value
197 } MSR_P6_APIC_BASE_REGISTER
;
201 Processor Hard Power-On Configuration (R/W) Enables and disables processor
202 features; (R) indicates current processor configuration.
204 @param ECX MSR_P6_EBL_CR_POWERON (0x0000002A)
205 @param EAX Lower 32-bits of MSR value.
206 Described by the type MSR_P6_EBL_CR_POWERON_REGISTER.
207 @param EDX Upper 32-bits of MSR value.
208 Described by the type MSR_P6_EBL_CR_POWERON_REGISTER.
212 MSR_P6_EBL_CR_POWERON_REGISTER Msr;
214 Msr.Uint64 = AsmReadMsr64 (MSR_P6_EBL_CR_POWERON);
215 AsmWriteMsr64 (MSR_P6_EBL_CR_POWERON, Msr.Uint64);
218 #define MSR_P6_EBL_CR_POWERON 0x0000002A
221 MSR information returned for MSR index #MSR_P6_EBL_CR_POWERON
225 /// Individual bit fields
230 /// [Bit 1] Data Error Checking Enable (R/W) 1 = Enabled 0 = Disabled.
232 UINT32 DataErrorCheckingEnable
:1;
234 /// [Bit 2] Response Error Checking Enable FRCERR Observation Enable (R/W)
235 /// 1 = Enabled 0 = Disabled.
237 UINT32 ResponseErrorCheckingEnable
:1;
239 /// [Bit 3] AERR# Drive Enable (R/W) 1 = Enabled 0 = Disabled.
241 UINT32 AERR_DriveEnable
:1;
243 /// [Bit 4] BERR# Enable for Initiator Bus Requests (R/W) 1 = Enabled 0 =
246 UINT32 BERR_Enable
:1;
249 /// [Bit 6] BERR# Driver Enable for Initiator Internal Errors (R/W) 1 =
250 /// Enabled 0 = Disabled.
252 UINT32 BERR_DriverEnable
:1;
254 /// [Bit 7] BINIT# Driver Enable (R/W) 1 = Enabled 0 = Disabled.
256 UINT32 BINIT_DriverEnable
:1;
258 /// [Bit 8] Output Tri-state Enabled (R) 1 = Enabled 0 = Disabled.
260 UINT32 OutputTriStateEnable
:1;
262 /// [Bit 9] Execute BIST (R) 1 = Enabled 0 = Disabled.
264 UINT32 ExecuteBIST
:1;
266 /// [Bit 10] AERR# Observation Enabled (R) 1 = Enabled 0 = Disabled.
268 UINT32 AERR_ObservationEnabled
:1;
271 /// [Bit 12] BINIT# Observation Enabled (R) 1 = Enabled 0 = Disabled.
273 UINT32 BINIT_ObservationEnabled
:1;
275 /// [Bit 13] In Order Queue Depth (R) 1 = 1 0 = 8.
277 UINT32 InOrderQueueDepth
:1;
279 /// [Bit 14] 1-MByte Power on Reset Vector (R) 1 = 1MByte 0 = 4GBytes.
281 UINT32 ResetVector
:1;
283 /// [Bit 15] FRC Mode Enable (R) 1 = Enabled 0 = Disabled.
285 UINT32 FRCModeEnable
:1;
287 /// [Bits 17:16] APIC Cluster ID (R).
289 UINT32 APICClusterID
:2;
291 /// [Bits 19:18] System Bus Frequency (R) 00 = 66MHz 10 = 100Mhz 01 =
292 /// 133MHz 11 = Reserved.
294 UINT32 SystemBusFrequency
:2;
296 /// [Bits 21:20] Symmetric Arbitration ID (R).
298 UINT32 SymmetricArbitrationID
:2;
300 /// [Bits 25:22] Clock Frequency Ratio (R).
302 UINT32 ClockFrequencyRatio
:4;
304 /// [Bit 26] Low Power Mode Enable (R/W).
306 UINT32 LowPowerModeEnable
:1;
308 /// [Bit 27] Clock Frequency Ratio.
310 UINT32 ClockFrequencyRatio1
:1;
315 /// All bit fields as a 32-bit value
319 /// All bit fields as a 64-bit value
322 } MSR_P6_EBL_CR_POWERON_REGISTER
;
326 Test Control Register.
328 @param ECX MSR_P6_TEST_CTL (0x00000033)
329 @param EAX Lower 32-bits of MSR value.
330 Described by the type MSR_P6_TEST_CTL_REGISTER.
331 @param EDX Upper 32-bits of MSR value.
332 Described by the type MSR_P6_TEST_CTL_REGISTER.
336 MSR_P6_TEST_CTL_REGISTER Msr;
338 Msr.Uint64 = AsmReadMsr64 (MSR_P6_TEST_CTL);
339 AsmWriteMsr64 (MSR_P6_TEST_CTL, Msr.Uint64);
342 #define MSR_P6_TEST_CTL 0x00000033
345 MSR information returned for MSR index #MSR_P6_TEST_CTL
349 /// Individual bit fields
354 /// [Bit 30] Streaming Buffer Disable.
356 UINT32 StreamingBufferDisable
:1;
358 /// [Bit 31] Disable LOCK# Assertion for split locked access.
360 UINT32 Disable_LOCK
:1;
364 /// All bit fields as a 32-bit value
368 /// All bit fields as a 64-bit value
371 } MSR_P6_TEST_CTL_REGISTER
;
375 BIOS Update Trigger Register.
377 @param ECX MSR_P6_BIOS_UPDT_TRIG (0x00000079)
378 @param EAX Lower 32-bits of MSR value.
379 @param EDX Upper 32-bits of MSR value.
385 Msr = AsmReadMsr64 (MSR_P6_BIOS_UPDT_TRIG);
386 AsmWriteMsr64 (MSR_P6_BIOS_UPDT_TRIG, Msr);
389 #define MSR_P6_BIOS_UPDT_TRIG 0x00000079
393 Chunk n data register D[63:0]: used to write to and read from the L2.
395 @param ECX MSR_P6_BBL_CR_Dn
396 @param EAX Lower 32-bits of MSR value.
397 @param EDX Upper 32-bits of MSR value.
403 Msr = AsmReadMsr64 (MSR_P6_BBL_CR_D0);
404 AsmWriteMsr64 (MSR_P6_BBL_CR_D0, Msr);
408 #define MSR_P6_BBL_CR_D0 0x00000088
409 #define MSR_P6_BBL_CR_D1 0x00000089
410 #define MSR_P6_BBL_CR_D2 0x0000008A
415 BIOS Update Signature Register or Chunk 3 data register D[63:0] Used to
416 write to and read from the L2 depending on the usage model.
418 @param ECX MSR_P6_BIOS_SIGN (0x0000008B)
419 @param EAX Lower 32-bits of MSR value.
420 @param EDX Upper 32-bits of MSR value.
426 Msr = AsmReadMsr64 (MSR_P6_BIOS_SIGN);
427 AsmWriteMsr64 (MSR_P6_BIOS_SIGN, Msr);
430 #define MSR_P6_BIOS_SIGN 0x0000008B
436 @param ECX MSR_P6_PERFCTR0 (0x000000C1)
437 @param EAX Lower 32-bits of MSR value.
438 @param EDX Upper 32-bits of MSR value.
444 Msr = AsmReadMsr64 (MSR_P6_PERFCTR0);
445 AsmWriteMsr64 (MSR_P6_PERFCTR0, Msr);
449 #define MSR_P6_PERFCTR0 0x000000C1
450 #define MSR_P6_PERFCTR1 0x000000C2
457 @param ECX MSR_P6_MTRRCAP (0x000000FE)
458 @param EAX Lower 32-bits of MSR value.
459 @param EDX Upper 32-bits of MSR value.
465 Msr = AsmReadMsr64 (MSR_P6_MTRRCAP);
466 AsmWriteMsr64 (MSR_P6_MTRRCAP, Msr);
469 #define MSR_P6_MTRRCAP 0x000000FE
473 Address register: used to send specified address (A31-A3) to L2 during cache
474 initialization accesses.
476 @param ECX MSR_P6_BBL_CR_ADDR (0x00000116)
477 @param EAX Lower 32-bits of MSR value.
478 Described by the type MSR_P6_BBL_CR_ADDR_REGISTER.
479 @param EDX Upper 32-bits of MSR value.
480 Described by the type MSR_P6_BBL_CR_ADDR_REGISTER.
484 MSR_P6_BBL_CR_ADDR_REGISTER Msr;
486 Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_ADDR);
487 AsmWriteMsr64 (MSR_P6_BBL_CR_ADDR, Msr.Uint64);
490 #define MSR_P6_BBL_CR_ADDR 0x00000116
493 MSR information returned for MSR index #MSR_P6_BBL_CR_ADDR
497 /// Individual bit fields
502 /// [Bits 31:3] Address bits
508 /// All bit fields as a 32-bit value
512 /// All bit fields as a 64-bit value
515 } MSR_P6_BBL_CR_ADDR_REGISTER
;
519 Data ECC register D[7:0]: used to write ECC and read ECC to/from L2.
521 @param ECX MSR_P6_BBL_CR_DECC (0x00000118)
522 @param EAX Lower 32-bits of MSR value.
523 @param EDX Upper 32-bits of MSR value.
529 Msr = AsmReadMsr64 (MSR_P6_BBL_CR_DECC);
530 AsmWriteMsr64 (MSR_P6_BBL_CR_DECC, Msr);
533 #define MSR_P6_BBL_CR_DECC 0x00000118
537 Control register: used to program L2 commands to be issued via cache
538 configuration accesses mechanism. Also receives L2 lookup response.
540 @param ECX MSR_P6_BBL_CR_CTL (0x00000119)
541 @param EAX Lower 32-bits of MSR value.
542 Described by the type MSR_P6_BBL_CR_CTL_REGISTER.
543 @param EDX Upper 32-bits of MSR value.
544 Described by the type MSR_P6_BBL_CR_CTL_REGISTER.
548 MSR_P6_BBL_CR_CTL_REGISTER Msr;
550 Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_CTL);
551 AsmWriteMsr64 (MSR_P6_BBL_CR_CTL, Msr.Uint64);
554 #define MSR_P6_BBL_CR_CTL 0x00000119
557 MSR information returned for MSR index #MSR_P6_BBL_CR_CTL
561 /// Individual bit fields
565 /// [Bits 4:0] L2 Command
566 /// Data Read w/ LRU update (RLU)
567 /// Tag Read w/ Data Read (TRR)
569 /// L2 Control Register Read (CR)
570 /// L2 Control Register Write (CW)
571 /// Tag Write w/ Data Read (TWR)
572 /// Tag Write w/ Data Write (TWW)
577 /// [Bits 6:5] State to L2
582 /// [Bits 9:8] Way to L2.
586 /// [Bits 11:10] Way 0 - 00, Way 1 - 01, Way 2 - 10, Way 3 - 11.
590 /// [Bits 13:12] Modified - 11,Exclusive - 10, Shared - 01, Invalid - 00.
594 /// [Bits 15:14] State from L2.
596 UINT32 StateFromL2
:2;
604 /// [Bits 20:19] User supplied ECC.
608 /// [Bit 21] Processor number Disable = 1 Enable = 0 Reserved.
610 UINT32 ProcessorNumber
:1;
615 /// All bit fields as a 32-bit value
619 /// All bit fields as a 64-bit value
622 } MSR_P6_BBL_CR_CTL_REGISTER
;
626 Trigger register: used to initiate a cache configuration accesses access,
627 Write only with Data = 0.
629 @param ECX MSR_P6_BBL_CR_TRIG (0x0000011A)
630 @param EAX Lower 32-bits of MSR value.
631 @param EDX Upper 32-bits of MSR value.
637 Msr = AsmReadMsr64 (MSR_P6_BBL_CR_TRIG);
638 AsmWriteMsr64 (MSR_P6_BBL_CR_TRIG, Msr);
641 #define MSR_P6_BBL_CR_TRIG 0x0000011A
645 Busy register: indicates when a cache configuration accesses L2 command is
646 in progress. D[0] = 1 = BUSY.
648 @param ECX MSR_P6_BBL_CR_BUSY (0x0000011B)
649 @param EAX Lower 32-bits of MSR value.
650 @param EDX Upper 32-bits of MSR value.
656 Msr = AsmReadMsr64 (MSR_P6_BBL_CR_BUSY);
657 AsmWriteMsr64 (MSR_P6_BBL_CR_BUSY, Msr);
660 #define MSR_P6_BBL_CR_BUSY 0x0000011B
664 Control register 3: used to configure the L2 Cache.
666 @param ECX MSR_P6_BBL_CR_CTL3 (0x0000011E)
667 @param EAX Lower 32-bits of MSR value.
668 Described by the type MSR_P6_BBL_CR_CTL3_REGISTER.
669 @param EDX Upper 32-bits of MSR value.
670 Described by the type MSR_P6_BBL_CR_CTL3_REGISTER.
674 MSR_P6_BBL_CR_CTL3_REGISTER Msr;
676 Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_CTL3);
677 AsmWriteMsr64 (MSR_P6_BBL_CR_CTL3, Msr.Uint64);
680 #define MSR_P6_BBL_CR_CTL3 0x0000011E
683 MSR information returned for MSR index #MSR_P6_BBL_CR_CTL3
687 /// Individual bit fields
691 /// [Bit 0] L2 Configured (read/write ).
693 UINT32 L2Configured
:1;
695 /// [Bits 4:1] L2 Cache Latency (read/write).
697 UINT32 L2CacheLatency
:4;
699 /// [Bit 5] ECC Check Enable (read/write).
701 UINT32 ECCCheckEnable
:1;
703 /// [Bit 6] Address Parity Check Enable (read/write).
705 UINT32 AddressParityCheckEnable
:1;
707 /// [Bit 7] CRTN Parity Check Enable (read/write).
709 UINT32 CRTNParityCheckEnable
:1;
711 /// [Bit 8] L2 Enabled (read/write).
715 /// [Bits 10:9] L2 Associativity (read only) Direct Mapped 2 Way 4 Way
718 UINT32 L2Associativity
:2;
720 /// [Bits 12:11] Number of L2 banks (read only).
724 /// [Bits 17:13] Cache size per bank (read/write) 256KBytes 512KBytes
725 /// 1MByte 2MByte 4MBytes.
727 UINT32 CacheSizePerBank
:5;
729 /// [Bit 18] Cache State error checking enable (read/write).
731 UINT32 CacheStateErrorEnable
:1;
734 /// [Bits 22:20] L2 Physical Address Range support 64GBytes 32GBytes
735 /// 16GBytes 8GBytes 4GBytes 2GBytes 1GBytes 512MBytes.
737 UINT32 L2AddressRange
:3;
739 /// [Bit 23] L2 Hardware Disable (read only).
741 UINT32 L2HardwareDisable
:1;
744 /// [Bit 25] Cache bus fraction (read only).
746 UINT32 CacheBusFraction
:1;
751 /// All bit fields as a 32-bit value
755 /// All bit fields as a 64-bit value
758 } MSR_P6_BBL_CR_CTL3_REGISTER
;
762 CS register target for CPL 0 code.
764 @param ECX MSR_P6_SYSENTER_CS_MSR (0x00000174)
765 @param EAX Lower 32-bits of MSR value.
766 @param EDX Upper 32-bits of MSR value.
772 Msr = AsmReadMsr64 (MSR_P6_SYSENTER_CS_MSR);
773 AsmWriteMsr64 (MSR_P6_SYSENTER_CS_MSR, Msr);
776 #define MSR_P6_SYSENTER_CS_MSR 0x00000174
780 Stack pointer for CPL 0 stack.
782 @param ECX MSR_P6_SYSENTER_ESP_MSR (0x00000175)
783 @param EAX Lower 32-bits of MSR value.
784 @param EDX Upper 32-bits of MSR value.
790 Msr = AsmReadMsr64 (MSR_P6_SYSENTER_ESP_MSR);
791 AsmWriteMsr64 (MSR_P6_SYSENTER_ESP_MSR, Msr);
794 #define MSR_P6_SYSENTER_ESP_MSR 0x00000175
798 CPL 0 code entry point.
800 @param ECX MSR_P6_SYSENTER_EIP_MSR (0x00000176)
801 @param EAX Lower 32-bits of MSR value.
802 @param EDX Upper 32-bits of MSR value.
808 Msr = AsmReadMsr64 (MSR_P6_SYSENTER_EIP_MSR);
809 AsmWriteMsr64 (MSR_P6_SYSENTER_EIP_MSR, Msr);
812 #define MSR_P6_SYSENTER_EIP_MSR 0x00000176
818 @param ECX MSR_P6_MCG_CAP (0x00000179)
819 @param EAX Lower 32-bits of MSR value.
820 @param EDX Upper 32-bits of MSR value.
826 Msr = AsmReadMsr64 (MSR_P6_MCG_CAP);
827 AsmWriteMsr64 (MSR_P6_MCG_CAP, Msr);
830 #define MSR_P6_MCG_CAP 0x00000179
836 @param ECX MSR_P6_MCG_STATUS (0x0000017A)
837 @param EAX Lower 32-bits of MSR value.
838 @param EDX Upper 32-bits of MSR value.
844 Msr = AsmReadMsr64 (MSR_P6_MCG_STATUS);
845 AsmWriteMsr64 (MSR_P6_MCG_STATUS, Msr);
848 #define MSR_P6_MCG_STATUS 0x0000017A
854 @param ECX MSR_P6_MCG_CTL (0x0000017B)
855 @param EAX Lower 32-bits of MSR value.
856 @param EDX Upper 32-bits of MSR value.
862 Msr = AsmReadMsr64 (MSR_P6_MCG_CTL);
863 AsmWriteMsr64 (MSR_P6_MCG_CTL, Msr);
866 #define MSR_P6_MCG_CTL 0x0000017B
872 @param ECX MSR_P6_PERFEVTSELn
873 @param EAX Lower 32-bits of MSR value.
874 Described by the type MSR_P6_PERFEVTSEL_REGISTER.
875 @param EDX Upper 32-bits of MSR value.
876 Described by the type MSR_P6_PERFEVTSEL_REGISTER.
880 MSR_P6_PERFEVTSEL_REGISTER Msr;
882 Msr.Uint64 = AsmReadMsr64 (MSR_P6_PERFEVTSEL0);
883 AsmWriteMsr64 (MSR_P6_PERFEVTSEL0, Msr.Uint64);
887 #define MSR_P6_PERFEVTSEL0 0x00000186
888 #define MSR_P6_PERFEVTSEL1 0x00000187
892 MSR information returned for MSR indexes #MSR_P6_PERFEVTSEL0 and
897 /// Individual bit fields
901 /// [Bits 7:0] Event Select Refer to Performance Counter section for a
902 /// list of event encodings.
904 UINT32 EventSelect
:8;
906 /// [Bits 15:8] UMASK (Unit Mask) Unit mask register set to 0 to enable
907 /// all count options.
911 /// [Bit 16] USER Controls the counting of events at Privilege levels of
916 /// [Bit 17] OS Controls the counting of events at Privilege level of 0.
920 /// [Bit 18] E Occurrence/Duration Mode Select 1 = Occurrence 0 = Duration.
924 /// [Bit 19] PC Enabled the signaling of performance counter overflow via
929 /// [Bit 20] INT Enables the signaling of counter overflow via input to
930 /// APIC 1 = Enable 0 = Disable.
935 /// [Bit 22] ENABLE Enables the counting of performance events in both
936 /// counters 1 = Enable 0 = Disable.
940 /// [Bit 23] INV Inverts the result of the CMASK condition 1 = Inverted 0
945 /// [Bits 31:24] CMASK (Counter Mask).
951 /// All bit fields as a 32-bit value
955 /// All bit fields as a 64-bit value
958 } MSR_P6_PERFEVTSEL_REGISTER
;
964 @param ECX MSR_P6_DEBUGCTLMSR (0x000001D9)
965 @param EAX Lower 32-bits of MSR value.
966 Described by the type MSR_P6_DEBUGCTLMSR_REGISTER.
967 @param EDX Upper 32-bits of MSR value.
968 Described by the type MSR_P6_DEBUGCTLMSR_REGISTER.
972 MSR_P6_DEBUGCTLMSR_REGISTER Msr;
974 Msr.Uint64 = AsmReadMsr64 (MSR_P6_DEBUGCTLMSR);
975 AsmWriteMsr64 (MSR_P6_DEBUGCTLMSR, Msr.Uint64);
978 #define MSR_P6_DEBUGCTLMSR 0x000001D9
981 MSR information returned for MSR index #MSR_P6_DEBUGCTLMSR
985 /// Individual bit fields
989 /// [Bit 0] Enable/Disable Last Branch Records.
993 /// [Bit 1] Branch Trap Flag.
997 /// [Bit 2] Performance Monitoring/Break Point Pins.
1001 /// [Bit 3] Performance Monitoring/Break Point Pins.
1005 /// [Bit 4] Performance Monitoring/Break Point Pins.
1009 /// [Bit 5] Performance Monitoring/Break Point Pins.
1013 /// [Bit 6] Enable/Disable Execution Trace Messages.
1016 UINT32 Reserved1
:25;
1017 UINT32 Reserved2
:32;
1020 /// All bit fields as a 32-bit value
1024 /// All bit fields as a 64-bit value
1027 } MSR_P6_DEBUGCTLMSR_REGISTER
;
1033 @param ECX MSR_P6_LASTBRANCHFROMIP (0x000001DB)
1034 @param EAX Lower 32-bits of MSR value.
1035 @param EDX Upper 32-bits of MSR value.
1037 <b>Example usage</b>
1041 Msr = AsmReadMsr64 (MSR_P6_LASTBRANCHFROMIP);
1042 AsmWriteMsr64 (MSR_P6_LASTBRANCHFROMIP, Msr);
1045 #define MSR_P6_LASTBRANCHFROMIP 0x000001DB
1051 @param ECX MSR_P6_LASTBRANCHTOIP (0x000001DC)
1052 @param EAX Lower 32-bits of MSR value.
1053 @param EDX Upper 32-bits of MSR value.
1055 <b>Example usage</b>
1059 Msr = AsmReadMsr64 (MSR_P6_LASTBRANCHTOIP);
1060 AsmWriteMsr64 (MSR_P6_LASTBRANCHTOIP, Msr);
1063 #define MSR_P6_LASTBRANCHTOIP 0x000001DC
1069 @param ECX MSR_P6_LASTINTFROMIP (0x000001DD)
1070 @param EAX Lower 32-bits of MSR value.
1071 @param EDX Upper 32-bits of MSR value.
1073 <b>Example usage</b>
1077 Msr = AsmReadMsr64 (MSR_P6_LASTINTFROMIP);
1078 AsmWriteMsr64 (MSR_P6_LASTINTFROMIP, Msr);
1081 #define MSR_P6_LASTINTFROMIP 0x000001DD
1087 @param ECX MSR_P6_LASTINTTOIP (0x000001DE)
1088 @param EAX Lower 32-bits of MSR value.
1089 @param EDX Upper 32-bits of MSR value.
1091 <b>Example usage</b>
1095 Msr = AsmReadMsr64 (MSR_P6_LASTINTTOIP);
1096 AsmWriteMsr64 (MSR_P6_LASTINTTOIP, Msr);
1099 #define MSR_P6_LASTINTTOIP 0x000001DE
1105 @param ECX MSR_P6_ROB_CR_BKUPTMPDR6 (0x000001E0)
1106 @param EAX Lower 32-bits of MSR value.
1107 Described by the type MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER.
1108 @param EDX Upper 32-bits of MSR value.
1109 Described by the type MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER.
1111 <b>Example usage</b>
1113 MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER Msr;
1115 Msr.Uint64 = AsmReadMsr64 (MSR_P6_ROB_CR_BKUPTMPDR6);
1116 AsmWriteMsr64 (MSR_P6_ROB_CR_BKUPTMPDR6, Msr.Uint64);
1119 #define MSR_P6_ROB_CR_BKUPTMPDR6 0x000001E0
1122 MSR information returned for MSR index #MSR_P6_ROB_CR_BKUPTMPDR6
1126 /// Individual bit fields
1131 /// [Bit 2] Fast Strings Enable bit. Default is enabled.
1133 UINT32 FastStrings
:1;
1134 UINT32 Reserved2
:29;
1135 UINT32 Reserved3
:32;
1138 /// All bit fields as a 32-bit value
1142 /// All bit fields as a 64-bit value
1145 } MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER
;
1151 @param ECX MSR_P6_MTRRPHYSBASEn
1152 @param EAX Lower 32-bits of MSR value.
1153 @param EDX Upper 32-bits of MSR value.
1155 <b>Example usage</b>
1159 Msr = AsmReadMsr64 (MSR_P6_MTRRPHYSBASE0);
1160 AsmWriteMsr64 (MSR_P6_MTRRPHYSBASE0, Msr);
1164 #define MSR_P6_MTRRPHYSBASE0 0x00000200
1165 #define MSR_P6_MTRRPHYSBASE1 0x00000202
1166 #define MSR_P6_MTRRPHYSBASE2 0x00000204
1167 #define MSR_P6_MTRRPHYSBASE3 0x00000206
1168 #define MSR_P6_MTRRPHYSBASE4 0x00000208
1169 #define MSR_P6_MTRRPHYSBASE5 0x0000020A
1170 #define MSR_P6_MTRRPHYSBASE6 0x0000020C
1171 #define MSR_P6_MTRRPHYSBASE7 0x0000020E
1178 @param ECX MSR_P6_MTRRPHYSMASKn
1179 @param EAX Lower 32-bits of MSR value.
1180 @param EDX Upper 32-bits of MSR value.
1182 <b>Example usage</b>
1186 Msr = AsmReadMsr64 (MSR_P6_MTRRPHYSMASK0);
1187 AsmWriteMsr64 (MSR_P6_MTRRPHYSMASK0, Msr);
1191 #define MSR_P6_MTRRPHYSMASK0 0x00000201
1192 #define MSR_P6_MTRRPHYSMASK1 0x00000203
1193 #define MSR_P6_MTRRPHYSMASK2 0x00000205
1194 #define MSR_P6_MTRRPHYSMASK3 0x00000207
1195 #define MSR_P6_MTRRPHYSMASK4 0x00000209
1196 #define MSR_P6_MTRRPHYSMASK5 0x0000020B
1197 #define MSR_P6_MTRRPHYSMASK6 0x0000020D
1198 #define MSR_P6_MTRRPHYSMASK7 0x0000020F
1205 @param ECX MSR_P6_MTRRFIX64K_00000 (0x00000250)
1206 @param EAX Lower 32-bits of MSR value.
1207 @param EDX Upper 32-bits of MSR value.
1209 <b>Example usage</b>
1213 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX64K_00000);
1214 AsmWriteMsr64 (MSR_P6_MTRRFIX64K_00000, Msr);
1217 #define MSR_P6_MTRRFIX64K_00000 0x00000250
1223 @param ECX MSR_P6_MTRRFIX16K_80000 (0x00000258)
1224 @param EAX Lower 32-bits of MSR value.
1225 @param EDX Upper 32-bits of MSR value.
1227 <b>Example usage</b>
1231 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX16K_80000);
1232 AsmWriteMsr64 (MSR_P6_MTRRFIX16K_80000, Msr);
1235 #define MSR_P6_MTRRFIX16K_80000 0x00000258
1241 @param ECX MSR_P6_MTRRFIX16K_A0000 (0x00000259)
1242 @param EAX Lower 32-bits of MSR value.
1243 @param EDX Upper 32-bits of MSR value.
1245 <b>Example usage</b>
1249 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX16K_A0000);
1250 AsmWriteMsr64 (MSR_P6_MTRRFIX16K_A0000, Msr);
1253 #define MSR_P6_MTRRFIX16K_A0000 0x00000259
1259 @param ECX MSR_P6_MTRRFIX4K_C0000 (0x00000268)
1260 @param EAX Lower 32-bits of MSR value.
1261 @param EDX Upper 32-bits of MSR value.
1263 <b>Example usage</b>
1267 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_C0000);
1268 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_C0000, Msr);
1271 #define MSR_P6_MTRRFIX4K_C0000 0x00000268
1277 @param ECX MSR_P6_MTRRFIX4K_C8000 (0x00000269)
1278 @param EAX Lower 32-bits of MSR value.
1279 @param EDX Upper 32-bits of MSR value.
1281 <b>Example usage</b>
1285 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_C8000);
1286 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_C8000, Msr);
1289 #define MSR_P6_MTRRFIX4K_C8000 0x00000269
1295 @param ECX MSR_P6_MTRRFIX4K_D0000 (0x0000026A)
1296 @param EAX Lower 32-bits of MSR value.
1297 @param EDX Upper 32-bits of MSR value.
1299 <b>Example usage</b>
1303 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_D0000);
1304 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_D0000, Msr);
1307 #define MSR_P6_MTRRFIX4K_D0000 0x0000026A
1313 @param ECX MSR_P6_MTRRFIX4K_D8000 (0x0000026B)
1314 @param EAX Lower 32-bits of MSR value.
1315 @param EDX Upper 32-bits of MSR value.
1317 <b>Example usage</b>
1321 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_D8000);
1322 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_D8000, Msr);
1325 #define MSR_P6_MTRRFIX4K_D8000 0x0000026B
1331 @param ECX MSR_P6_MTRRFIX4K_E0000 (0x0000026C)
1332 @param EAX Lower 32-bits of MSR value.
1333 @param EDX Upper 32-bits of MSR value.
1335 <b>Example usage</b>
1339 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_E0000);
1340 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_E0000, Msr);
1343 #define MSR_P6_MTRRFIX4K_E0000 0x0000026C
1349 @param ECX MSR_P6_MTRRFIX4K_E8000 (0x0000026D)
1350 @param EAX Lower 32-bits of MSR value.
1351 @param EDX Upper 32-bits of MSR value.
1353 <b>Example usage</b>
1357 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_E8000);
1358 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_E8000, Msr);
1361 #define MSR_P6_MTRRFIX4K_E8000 0x0000026D
1367 @param ECX MSR_P6_MTRRFIX4K_F0000 (0x0000026E)
1368 @param EAX Lower 32-bits of MSR value.
1369 @param EDX Upper 32-bits of MSR value.
1371 <b>Example usage</b>
1375 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_F0000);
1376 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_F0000, Msr);
1379 #define MSR_P6_MTRRFIX4K_F0000 0x0000026E
1385 @param ECX MSR_P6_MTRRFIX4K_F8000 (0x0000026F)
1386 @param EAX Lower 32-bits of MSR value.
1387 @param EDX Upper 32-bits of MSR value.
1389 <b>Example usage</b>
1393 Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_F8000);
1394 AsmWriteMsr64 (MSR_P6_MTRRFIX4K_F8000, Msr);
1397 #define MSR_P6_MTRRFIX4K_F8000 0x0000026F
1403 @param ECX MSR_P6_MTRRDEFTYPE (0x000002FF)
1404 @param EAX Lower 32-bits of MSR value.
1405 Described by the type MSR_P6_MTRRDEFTYPE_REGISTER.
1406 @param EDX Upper 32-bits of MSR value.
1407 Described by the type MSR_P6_MTRRDEFTYPE_REGISTER.
1409 <b>Example usage</b>
1411 MSR_P6_MTRRDEFTYPE_REGISTER Msr;
1413 Msr.Uint64 = AsmReadMsr64 (MSR_P6_MTRRDEFTYPE);
1414 AsmWriteMsr64 (MSR_P6_MTRRDEFTYPE, Msr.Uint64);
1417 #define MSR_P6_MTRRDEFTYPE 0x000002FF
1420 MSR information returned for MSR index #MSR_P6_MTRRDEFTYPE
1424 /// Individual bit fields
1428 /// [Bits 2:0] Default memory type.
1433 /// [Bit 10] Fixed MTRR enable.
1437 /// [Bit 11] MTRR Enable.
1440 UINT32 Reserved2
:20;
1441 UINT32 Reserved3
:32;
1444 /// All bit fields as a 32-bit value
1448 /// All bit fields as a 64-bit value
1451 } MSR_P6_MTRRDEFTYPE_REGISTER
;
1457 @param ECX MSR_P6_MC0_CTL (0x00000400)
1458 @param EAX Lower 32-bits of MSR value.
1459 @param EDX Upper 32-bits of MSR value.
1461 <b>Example usage</b>
1465 Msr = AsmReadMsr64 (MSR_P6_MC0_CTL);
1466 AsmWriteMsr64 (MSR_P6_MC0_CTL, Msr);
1470 #define MSR_P6_MC0_CTL 0x00000400
1471 #define MSR_P6_MC1_CTL 0x00000404
1472 #define MSR_P6_MC2_CTL 0x00000408
1473 #define MSR_P6_MC3_CTL 0x00000410
1474 #define MSR_P6_MC4_CTL 0x0000040C
1480 Bit definitions for MSR_P6_MC4_STATUS are the same as MSR_P6_MC0_STATUS,
1481 except bits 0, 4, 57, and 61 are hardcoded to 1.
1483 @param ECX MSR_P6_MCn_STATUS
1484 @param EAX Lower 32-bits of MSR value.
1485 Described by the type MSR_P6_MC_STATUS_REGISTER.
1486 @param EDX Upper 32-bits of MSR value.
1487 Described by the type MSR_P6_MC_STATUS_REGISTER.
1489 <b>Example usage</b>
1491 MSR_P6_MC_STATUS_REGISTER Msr;
1493 Msr.Uint64 = AsmReadMsr64 (MSR_P6_MC0_STATUS);
1494 AsmWriteMsr64 (MSR_P6_MC0_STATUS, Msr.Uint64);
1498 #define MSR_P6_MC0_STATUS 0x00000401
1499 #define MSR_P6_MC1_STATUS 0x00000405
1500 #define MSR_P6_MC2_STATUS 0x00000409
1501 #define MSR_P6_MC3_STATUS 0x00000411
1502 #define MSR_P6_MC4_STATUS 0x0000040D
1506 MSR information returned for MSR index #MSR_P6_MC0_STATUS to
1511 /// Individual bit fields
1515 /// [Bits 15:0] MC_STATUS_MCACOD.
1517 UINT32 MC_STATUS_MCACOD
:16;
1519 /// [Bits 31:16] MC_STATUS_MSCOD.
1521 UINT32 MC_STATUS_MSCOD
:16;
1524 /// [Bit 57] MC_STATUS_DAM.
1526 UINT32 MC_STATUS_DAM
:1;
1528 /// [Bit 58] MC_STATUS_ADDRV.
1530 UINT32 MC_STATUS_ADDRV
:1;
1532 /// [Bit 59] MC_STATUS_MISCV.
1534 UINT32 MC_STATUS_MISCV
:1;
1536 /// [Bit 60] MC_STATUS_EN. (Note: For MC0_STATUS only, this bit is
1537 /// hardcoded to 1.).
1539 UINT32 MC_STATUS_EN
:1;
1541 /// [Bit 61] MC_STATUS_UC.
1543 UINT32 MC_STATUS_UC
:1;
1545 /// [Bit 62] MC_STATUS_O.
1547 UINT32 MC_STATUS_O
:1;
1549 /// [Bit 63] MC_STATUS_V.
1551 UINT32 MC_STATUS_V
:1;
1554 /// All bit fields as a 64-bit value
1557 } MSR_P6_MC_STATUS_REGISTER
;
1562 MSR_P6_MC4_ADDR is defined in MCA architecture but not implemented in P6 Family processors.
1564 @param ECX MSR_P6_MC0_ADDR (0x00000402)
1565 @param EAX Lower 32-bits of MSR value.
1566 @param EDX Upper 32-bits of MSR value.
1568 <b>Example usage</b>
1572 Msr = AsmReadMsr64 (MSR_P6_MC0_ADDR);
1573 AsmWriteMsr64 (MSR_P6_MC0_ADDR, Msr);
1577 #define MSR_P6_MC0_ADDR 0x00000402
1578 #define MSR_P6_MC1_ADDR 0x00000406
1579 #define MSR_P6_MC2_ADDR 0x0000040A
1580 #define MSR_P6_MC3_ADDR 0x00000412
1581 #define MSR_P6_MC4_ADDR 0x0000040E
1586 Defined in MCA architecture but not implemented in the P6 family processors.
1588 @param ECX MSR_P6_MC0_MISC (0x00000403)
1589 @param EAX Lower 32-bits of MSR value.
1590 @param EDX Upper 32-bits of MSR value.
1592 <b>Example usage</b>
1596 Msr = AsmReadMsr64 (MSR_P6_MC0_MISC);
1597 AsmWriteMsr64 (MSR_P6_MC0_MISC, Msr);
1601 #define MSR_P6_MC0_MISC 0x00000403
1602 #define MSR_P6_MC1_MISC 0x00000407
1603 #define MSR_P6_MC2_MISC 0x0000040B
1604 #define MSR_P6_MC3_MISC 0x00000413
1605 #define MSR_P6_MC4_MISC 0x0000040F