• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   MSR Definitions for P6 Family Processors.
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, 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.21.
21 
22 **/
23 
24 #ifndef __P6_MSR_H__
25 #define __P6_MSR_H__
26 
27 #include <Register/ArchitecturalMsr.h>
28 
29 /**
30   See Section 35.22, "MSRs in Pentium Processors.".
31 
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.
35 
36   <b>Example usage</b>
37   @code
38   UINT64  Msr;
39 
40   Msr = AsmReadMsr64 (MSR_P6_P5_MC_ADDR);
41   AsmWriteMsr64 (MSR_P6_P5_MC_ADDR, Msr);
42   @endcode
43   @note MSR_P6_P5_MC_ADDR is defined as P5_MC_ADDR in SDM.
44 **/
45 #define MSR_P6_P5_MC_ADDR                        0x00000000
46 
47 
48 /**
49   See Section 35.22, "MSRs in Pentium Processors.".
50 
51   @param  ECX  MSR_P6_P5_MC_TYPE (0x00000001)
52   @param  EAX  Lower 32-bits of MSR value.
53   @param  EDX  Upper 32-bits of MSR value.
54 
55   <b>Example usage</b>
56   @code
57   UINT64  Msr;
58 
59   Msr = AsmReadMsr64 (MSR_P6_P5_MC_TYPE);
60   AsmWriteMsr64 (MSR_P6_P5_MC_TYPE, Msr);
61   @endcode
62   @note MSR_P6_P5_MC_TYPE is defined as P5_MC_TYPE in SDM.
63 **/
64 #define MSR_P6_P5_MC_TYPE                        0x00000001
65 
66 
67 /**
68   See Section 17.14, "Time-Stamp Counter.".
69 
70   @param  ECX  MSR_P6_TSC (0x00000010)
71   @param  EAX  Lower 32-bits of MSR value.
72   @param  EDX  Upper 32-bits of MSR value.
73 
74   <b>Example usage</b>
75   @code
76   UINT64  Msr;
77 
78   Msr = AsmReadMsr64 (MSR_P6_TSC);
79   AsmWriteMsr64 (MSR_P6_TSC, Msr);
80   @endcode
81   @note MSR_P6_TSC is defined as TSC in SDM.
82 **/
83 #define MSR_P6_TSC                               0x00000010
84 
85 
86 /**
87   Platform ID (R)  The operating system can use this MSR to determine "slot"
88   information for the processor and the proper microcode update to load.
89 
90   @param  ECX  MSR_P6_IA32_PLATFORM_ID (0x00000017)
91   @param  EAX  Lower 32-bits of MSR value.
92                Described by the type MSR_P6_IA32_PLATFORM_ID_REGISTER.
93   @param  EDX  Upper 32-bits of MSR value.
94                Described by the type MSR_P6_IA32_PLATFORM_ID_REGISTER.
95 
96   <b>Example usage</b>
97   @code
98   MSR_P6_IA32_PLATFORM_ID_REGISTER  Msr;
99 
100   Msr.Uint64 = AsmReadMsr64 (MSR_P6_IA32_PLATFORM_ID);
101   @endcode
102   @note MSR_P6_IA32_PLATFORM_ID is defined as IA32_PLATFORM_ID in SDM.
103 **/
104 #define MSR_P6_IA32_PLATFORM_ID                  0x00000017
105 
106 /**
107   MSR information returned for MSR index #MSR_P6_IA32_PLATFORM_ID
108 **/
109 typedef union {
110   ///
111   /// Individual bit fields
112   ///
113   struct {
114     UINT32  Reserved1:32;
115     UINT32  Reserved2:18;
116     ///
117     /// [Bits 52:50] Platform Id (R) Contains information concerning the
118     /// intended platform for the processor.
119     ///
120     ///  52 51 50
121     ///   0  0  0  Processor Flag 0.
122     ///   0  0  1  Processor Flag 1
123     ///   0  1  0  Processor Flag 2
124     ///   0  1  1  Processor Flag 3
125     ///   1  0  0  Processor Flag 4
126     ///   1  0  1  Processor Flag 5
127     ///   1  1  0  Processor Flag 6
128     ///   1  1  1  Processor Flag 7
129     ///
130     UINT32  PlatformId:3;
131     ///
132     /// [Bits 56:53] L2 Cache Latency Read.
133     ///
134     UINT32  L2CacheLatencyRead:4;
135     UINT32  Reserved3:3;
136     ///
137     /// [Bit 60] Clock Frequency Ratio Read.
138     ///
139     UINT32  ClockFrequencyRatioRead:1;
140     UINT32  Reserved4:3;
141   } Bits;
142   ///
143   /// All bit fields as a 64-bit value
144   ///
145   UINT64  Uint64;
146 } MSR_P6_IA32_PLATFORM_ID_REGISTER;
147 
148 
149 /**
150   Section 10.4.4, "Local APIC Status and Location.".
151 
152   @param  ECX  MSR_P6_APIC_BASE (0x0000001B)
153   @param  EAX  Lower 32-bits of MSR value.
154                Described by the type MSR_P6_APIC_BASE_REGISTER.
155   @param  EDX  Upper 32-bits of MSR value.
156                Described by the type MSR_P6_APIC_BASE_REGISTER.
157 
158   <b>Example usage</b>
159   @code
160   MSR_P6_APIC_BASE_REGISTER  Msr;
161 
162   Msr.Uint64 = AsmReadMsr64 (MSR_P6_APIC_BASE);
163   AsmWriteMsr64 (MSR_P6_APIC_BASE, Msr.Uint64);
164   @endcode
165   @note MSR_P6_APIC_BASE is defined as APIC_BASE in SDM.
166 **/
167 #define MSR_P6_APIC_BASE                         0x0000001B
168 
169 /**
170   MSR information returned for MSR index #MSR_P6_APIC_BASE
171 **/
172 typedef union {
173   ///
174   /// Individual bit fields
175   ///
176   struct {
177     UINT32  Reserved1:8;
178     ///
179     /// [Bit 8] Boot Strap Processor indicator Bit 1 = BSP.
180     ///
181     UINT32  BSP:1;
182     UINT32  Reserved2:2;
183     ///
184     /// [Bit 11] APIC Global Enable Bit - Permanent till reset 1 = Enabled 0 =
185     /// Disabled.
186     ///
187     UINT32  EN:1;
188     ///
189     /// [Bits 31:12] APIC Base Address.
190     ///
191     UINT32  ApicBase:20;
192     UINT32  Reserved3:32;
193   } Bits;
194   ///
195   /// All bit fields as a 32-bit value
196   ///
197   UINT32  Uint32;
198   ///
199   /// All bit fields as a 64-bit value
200   ///
201   UINT64  Uint64;
202 } MSR_P6_APIC_BASE_REGISTER;
203 
204 
205 /**
206   Processor Hard Power-On Configuration (R/W) Enables and disables processor
207   features; (R) indicates current processor configuration.
208 
209   @param  ECX  MSR_P6_EBL_CR_POWERON (0x0000002A)
210   @param  EAX  Lower 32-bits of MSR value.
211                Described by the type MSR_P6_EBL_CR_POWERON_REGISTER.
212   @param  EDX  Upper 32-bits of MSR value.
213                Described by the type MSR_P6_EBL_CR_POWERON_REGISTER.
214 
215   <b>Example usage</b>
216   @code
217   MSR_P6_EBL_CR_POWERON_REGISTER  Msr;
218 
219   Msr.Uint64 = AsmReadMsr64 (MSR_P6_EBL_CR_POWERON);
220   AsmWriteMsr64 (MSR_P6_EBL_CR_POWERON, Msr.Uint64);
221   @endcode
222   @note MSR_P6_EBL_CR_POWERON is defined as EBL_CR_POWERON in SDM.
223 **/
224 #define MSR_P6_EBL_CR_POWERON                    0x0000002A
225 
226 /**
227   MSR information returned for MSR index #MSR_P6_EBL_CR_POWERON
228 **/
229 typedef union {
230   ///
231   /// Individual bit fields
232   ///
233   struct {
234     UINT32  Reserved1:1;
235     ///
236     /// [Bit 1] Data Error Checking Enable (R/W) 1 = Enabled 0 = Disabled.
237     ///
238     UINT32  DataErrorCheckingEnable:1;
239     ///
240     /// [Bit 2] Response Error Checking Enable FRCERR Observation Enable (R/W)
241     /// 1 = Enabled 0 = Disabled.
242     ///
243     UINT32  ResponseErrorCheckingEnable:1;
244     ///
245     /// [Bit 3] AERR# Drive Enable (R/W) 1 = Enabled 0 = Disabled.
246     ///
247     UINT32  AERR_DriveEnable:1;
248     ///
249     /// [Bit 4] BERR# Enable for Initiator Bus Requests (R/W) 1 = Enabled 0 =
250     /// Disabled.
251     ///
252     UINT32  BERR_Enable:1;
253     UINT32  Reserved2:1;
254     ///
255     /// [Bit 6] BERR# Driver Enable for Initiator Internal Errors (R/W) 1 =
256     /// Enabled 0 = Disabled.
257     ///
258     UINT32  BERR_DriverEnable:1;
259     ///
260     /// [Bit 7] BINIT# Driver Enable (R/W) 1 = Enabled 0 = Disabled.
261     ///
262     UINT32  BINIT_DriverEnable:1;
263     ///
264     /// [Bit 8] Output Tri-state Enabled (R) 1 = Enabled 0 = Disabled.
265     ///
266     UINT32  OutputTriStateEnable:1;
267     ///
268     /// [Bit 9] Execute BIST (R) 1 = Enabled 0 = Disabled.
269     ///
270     UINT32  ExecuteBIST:1;
271     ///
272     /// [Bit 10] AERR# Observation Enabled (R) 1 = Enabled 0 = Disabled.
273     ///
274     UINT32  AERR_ObservationEnabled:1;
275     UINT32  Reserved3:1;
276     ///
277     /// [Bit 12] BINIT# Observation Enabled (R) 1 = Enabled 0 = Disabled.
278     ///
279     UINT32  BINIT_ObservationEnabled:1;
280     ///
281     /// [Bit 13] In Order Queue Depth (R) 1 = 1 0 = 8.
282     ///
283     UINT32  InOrderQueueDepth:1;
284     ///
285     /// [Bit 14] 1-MByte Power on Reset Vector (R) 1 = 1MByte 0 = 4GBytes.
286     ///
287     UINT32  ResetVector:1;
288     ///
289     /// [Bit 15] FRC Mode Enable (R) 1 = Enabled 0 = Disabled.
290     ///
291     UINT32  FRCModeEnable:1;
292     ///
293     /// [Bits 17:16] APIC Cluster ID (R).
294     ///
295     UINT32  APICClusterID:2;
296     ///
297     /// [Bits 19:18] System Bus Frequency (R) 00 = 66MHz 10 = 100Mhz 01 =
298     /// 133MHz 11 = Reserved.
299     ///
300     UINT32  SystemBusFrequency:2;
301     ///
302     /// [Bits 21:20] Symmetric Arbitration ID (R).
303     ///
304     UINT32  SymmetricArbitrationID:2;
305     ///
306     /// [Bits 25:22] Clock Frequency Ratio (R).
307     ///
308     UINT32  ClockFrequencyRatio:4;
309     ///
310     /// [Bit 26] Low Power Mode Enable (R/W).
311     ///
312     UINT32  LowPowerModeEnable:1;
313     ///
314     /// [Bit 27] Clock Frequency Ratio.
315     ///
316     UINT32  ClockFrequencyRatio1:1;
317     UINT32  Reserved4:4;
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_P6_EBL_CR_POWERON_REGISTER;
329 
330 
331 /**
332   Test Control Register.
333 
334   @param  ECX  MSR_P6_TEST_CTL (0x00000033)
335   @param  EAX  Lower 32-bits of MSR value.
336                Described by the type MSR_P6_TEST_CTL_REGISTER.
337   @param  EDX  Upper 32-bits of MSR value.
338                Described by the type MSR_P6_TEST_CTL_REGISTER.
339 
340   <b>Example usage</b>
341   @code
342   MSR_P6_TEST_CTL_REGISTER  Msr;
343 
344   Msr.Uint64 = AsmReadMsr64 (MSR_P6_TEST_CTL);
345   AsmWriteMsr64 (MSR_P6_TEST_CTL, Msr.Uint64);
346   @endcode
347   @note MSR_P6_TEST_CTL is defined as TEST_CTL in SDM.
348 **/
349 #define MSR_P6_TEST_CTL                          0x00000033
350 
351 /**
352   MSR information returned for MSR index #MSR_P6_TEST_CTL
353 **/
354 typedef union {
355   ///
356   /// Individual bit fields
357   ///
358   struct {
359     UINT32  Reserved1:30;
360     ///
361     /// [Bit 30] Streaming Buffer Disable.
362     ///
363     UINT32  StreamingBufferDisable:1;
364     ///
365     /// [Bit 31] Disable LOCK# Assertion for split locked access.
366     ///
367     UINT32  Disable_LOCK:1;
368     UINT32  Reserved2:32;
369   } Bits;
370   ///
371   /// All bit fields as a 32-bit value
372   ///
373   UINT32  Uint32;
374   ///
375   /// All bit fields as a 64-bit value
376   ///
377   UINT64  Uint64;
378 } MSR_P6_TEST_CTL_REGISTER;
379 
380 
381 /**
382   BIOS Update Trigger Register.
383 
384   @param  ECX  MSR_P6_BIOS_UPDT_TRIG (0x00000079)
385   @param  EAX  Lower 32-bits of MSR value.
386   @param  EDX  Upper 32-bits of MSR value.
387 
388   <b>Example usage</b>
389   @code
390   UINT64  Msr;
391 
392   Msr = AsmReadMsr64 (MSR_P6_BIOS_UPDT_TRIG);
393   AsmWriteMsr64 (MSR_P6_BIOS_UPDT_TRIG, Msr);
394   @endcode
395   @note MSR_P6_BIOS_UPDT_TRIG is defined as BIOS_UPDT_TRIG in SDM.
396 **/
397 #define MSR_P6_BIOS_UPDT_TRIG                    0x00000079
398 
399 
400 /**
401   Chunk n data register D[63:0]: used to write to and read from the L2.
402 
403   @param  ECX  MSR_P6_BBL_CR_Dn
404   @param  EAX  Lower 32-bits of MSR value.
405   @param  EDX  Upper 32-bits of MSR value.
406 
407   <b>Example usage</b>
408   @code
409   UINT64  Msr;
410 
411   Msr = AsmReadMsr64 (MSR_P6_BBL_CR_D0);
412   AsmWriteMsr64 (MSR_P6_BBL_CR_D0, Msr);
413   @endcode
414   @note MSR_P6_BBL_CR_D0 is defined as BBL_CR_D0 in SDM.
415         MSR_P6_BBL_CR_D1 is defined as BBL_CR_D1 in SDM.
416         MSR_P6_BBL_CR_D2 is defined as BBL_CR_D2 in SDM.
417   @{
418 **/
419 #define MSR_P6_BBL_CR_D0                         0x00000088
420 #define MSR_P6_BBL_CR_D1                         0x00000089
421 #define MSR_P6_BBL_CR_D2                         0x0000008A
422 /// @}
423 
424 
425 /**
426   BIOS Update Signature Register or Chunk 3 data register D[63:0] Used to
427   write to and read from the L2 depending on the usage model.
428 
429   @param  ECX  MSR_P6_BIOS_SIGN (0x0000008B)
430   @param  EAX  Lower 32-bits of MSR value.
431   @param  EDX  Upper 32-bits of MSR value.
432 
433   <b>Example usage</b>
434   @code
435   UINT64  Msr;
436 
437   Msr = AsmReadMsr64 (MSR_P6_BIOS_SIGN);
438   AsmWriteMsr64 (MSR_P6_BIOS_SIGN, Msr);
439   @endcode
440   @note MSR_P6_BIOS_SIGN is defined as BIOS_SIGN in SDM.
441 **/
442 #define MSR_P6_BIOS_SIGN                         0x0000008B
443 
444 
445 /**
446 
447 
448   @param  ECX  MSR_P6_PERFCTR0 (0x000000C1)
449   @param  EAX  Lower 32-bits of MSR value.
450   @param  EDX  Upper 32-bits of MSR value.
451 
452   <b>Example usage</b>
453   @code
454   UINT64  Msr;
455 
456   Msr = AsmReadMsr64 (MSR_P6_PERFCTR0);
457   AsmWriteMsr64 (MSR_P6_PERFCTR0, Msr);
458   @endcode
459   @note MSR_P6_PERFCTR0 is defined as PERFCTR0 in SDM.
460         MSR_P6_PERFCTR1 is defined as PERFCTR1 in SDM.
461   @{
462 **/
463 #define MSR_P6_PERFCTR0                          0x000000C1
464 #define MSR_P6_PERFCTR1                          0x000000C2
465 /// @}
466 
467 
468 /**
469 
470 
471   @param  ECX  MSR_P6_MTRRCAP (0x000000FE)
472   @param  EAX  Lower 32-bits of MSR value.
473   @param  EDX  Upper 32-bits of MSR value.
474 
475   <b>Example usage</b>
476   @code
477   UINT64  Msr;
478 
479   Msr = AsmReadMsr64 (MSR_P6_MTRRCAP);
480   AsmWriteMsr64 (MSR_P6_MTRRCAP, Msr);
481   @endcode
482   @note MSR_P6_MTRRCAP is defined as MTRRCAP in SDM.
483 **/
484 #define MSR_P6_MTRRCAP                           0x000000FE
485 
486 
487 /**
488   Address register: used to send specified address (A31-A3) to L2 during cache
489   initialization accesses.
490 
491   @param  ECX  MSR_P6_BBL_CR_ADDR (0x00000116)
492   @param  EAX  Lower 32-bits of MSR value.
493                Described by the type MSR_P6_BBL_CR_ADDR_REGISTER.
494   @param  EDX  Upper 32-bits of MSR value.
495                Described by the type MSR_P6_BBL_CR_ADDR_REGISTER.
496 
497   <b>Example usage</b>
498   @code
499   MSR_P6_BBL_CR_ADDR_REGISTER  Msr;
500 
501   Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_ADDR);
502   AsmWriteMsr64 (MSR_P6_BBL_CR_ADDR, Msr.Uint64);
503   @endcode
504   @note MSR_P6_BBL_CR_ADDR is defined as BBL_CR_ADDR in SDM.
505 **/
506 #define MSR_P6_BBL_CR_ADDR                       0x00000116
507 
508 /**
509   MSR information returned for MSR index #MSR_P6_BBL_CR_ADDR
510 **/
511 typedef union {
512   ///
513   /// Individual bit fields
514   ///
515   struct {
516     UINT32  Reserved1:3;
517     ///
518     /// [Bits 31:3] Address bits
519     ///
520     UINT32  Address:29;
521     UINT32  Reserved2:32;
522   } Bits;
523   ///
524   /// All bit fields as a 32-bit value
525   ///
526   UINT32  Uint32;
527   ///
528   /// All bit fields as a 64-bit value
529   ///
530   UINT64  Uint64;
531 } MSR_P6_BBL_CR_ADDR_REGISTER;
532 
533 
534 /**
535   Data ECC register D[7:0]: used to write ECC and read ECC to/from L2.
536 
537   @param  ECX  MSR_P6_BBL_CR_DECC (0x00000118)
538   @param  EAX  Lower 32-bits of MSR value.
539   @param  EDX  Upper 32-bits of MSR value.
540 
541   <b>Example usage</b>
542   @code
543   UINT64  Msr;
544 
545   Msr = AsmReadMsr64 (MSR_P6_BBL_CR_DECC);
546   AsmWriteMsr64 (MSR_P6_BBL_CR_DECC, Msr);
547   @endcode
548   @note MSR_P6_BBL_CR_DECC is defined as BBL_CR_DECC in SDM.
549 **/
550 #define MSR_P6_BBL_CR_DECC                       0x00000118
551 
552 
553 /**
554   Control register: used to program L2 commands to be issued via cache
555   configuration accesses mechanism. Also receives L2 lookup response.
556 
557   @param  ECX  MSR_P6_BBL_CR_CTL (0x00000119)
558   @param  EAX  Lower 32-bits of MSR value.
559                Described by the type MSR_P6_BBL_CR_CTL_REGISTER.
560   @param  EDX  Upper 32-bits of MSR value.
561                Described by the type MSR_P6_BBL_CR_CTL_REGISTER.
562 
563   <b>Example usage</b>
564   @code
565   MSR_P6_BBL_CR_CTL_REGISTER  Msr;
566 
567   Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_CTL);
568   AsmWriteMsr64 (MSR_P6_BBL_CR_CTL, Msr.Uint64);
569   @endcode
570   @note MSR_P6_BBL_CR_CTL is defined as BBL_CR_CTL in SDM.
571 **/
572 #define MSR_P6_BBL_CR_CTL                        0x00000119
573 
574 /**
575   MSR information returned for MSR index #MSR_P6_BBL_CR_CTL
576 **/
577 typedef union {
578   ///
579   /// Individual bit fields
580   ///
581   struct {
582     ///
583     /// [Bits 4:0] L2 Command
584     ///   Data Read w/ LRU update (RLU)
585     ///   Tag Read w/ Data Read (TRR)
586     ///   Tag Inquire (TI)
587     ///   L2 Control Register Read (CR)
588     ///   L2 Control Register Write (CW)
589     ///   Tag Write w/ Data Read (TWR)
590     ///   Tag Write w/ Data Write (TWW)
591     ///   Tag Write (TW).
592     ///
593     UINT32  L2Command:5;
594     ///
595     /// [Bits 6:5] State to L2
596     ///
597     UINT32  StateToL2:2;
598     UINT32  Reserved:1;
599     ///
600     /// [Bits 9:8] Way to L2.
601     ///
602     UINT32  WayToL2:2;
603     ///
604     /// [Bits 11:10] Way 0 - 00, Way 1 - 01, Way 2 - 10, Way 3 - 11.
605     ///
606     UINT32  Way:2;
607     ///
608     /// [Bits 13:12] Modified - 11,Exclusive - 10, Shared - 01, Invalid - 00.
609     ///
610     UINT32  MESI:2;
611     ///
612     /// [Bits 15:14] State from L2.
613     ///
614     UINT32  StateFromL2:2;
615     UINT32  Reserved2:1;
616     ///
617     /// [Bit 17] L2 Hit.
618     ///
619     UINT32  L2Hit:1;
620     UINT32  Reserved3:1;
621     ///
622     /// [Bits 20:19] User supplied ECC.
623     ///
624     UINT32  UserEcc:2;
625     ///
626     /// [Bit 21] Processor number Disable = 1 Enable = 0 Reserved.
627     ///
628     UINT32  ProcessorNumber:1;
629     UINT32  Reserved4:10;
630     UINT32  Reserved5:32;
631   } Bits;
632   ///
633   /// All bit fields as a 32-bit value
634   ///
635   UINT32  Uint32;
636   ///
637   /// All bit fields as a 64-bit value
638   ///
639   UINT64  Uint64;
640 } MSR_P6_BBL_CR_CTL_REGISTER;
641 
642 
643 /**
644   Trigger register: used to initiate a cache configuration accesses access,
645   Write only with Data = 0.
646 
647   @param  ECX  MSR_P6_BBL_CR_TRIG (0x0000011A)
648   @param  EAX  Lower 32-bits of MSR value.
649   @param  EDX  Upper 32-bits of MSR value.
650 
651   <b>Example usage</b>
652   @code
653   UINT64  Msr;
654 
655   Msr = AsmReadMsr64 (MSR_P6_BBL_CR_TRIG);
656   AsmWriteMsr64 (MSR_P6_BBL_CR_TRIG, Msr);
657   @endcode
658   @note MSR_P6_BBL_CR_TRIG is defined as BBL_CR_TRIG in SDM.
659 **/
660 #define MSR_P6_BBL_CR_TRIG                       0x0000011A
661 
662 
663 /**
664   Busy register: indicates when a cache configuration accesses L2 command is
665   in progress. D[0] = 1 = BUSY.
666 
667   @param  ECX  MSR_P6_BBL_CR_BUSY (0x0000011B)
668   @param  EAX  Lower 32-bits of MSR value.
669   @param  EDX  Upper 32-bits of MSR value.
670 
671   <b>Example usage</b>
672   @code
673   UINT64  Msr;
674 
675   Msr = AsmReadMsr64 (MSR_P6_BBL_CR_BUSY);
676   AsmWriteMsr64 (MSR_P6_BBL_CR_BUSY, Msr);
677   @endcode
678   @note MSR_P6_BBL_CR_BUSY is defined as BBL_CR_BUSY in SDM.
679 **/
680 #define MSR_P6_BBL_CR_BUSY                       0x0000011B
681 
682 
683 /**
684   Control register 3: used to configure the L2 Cache.
685 
686   @param  ECX  MSR_P6_BBL_CR_CTL3 (0x0000011E)
687   @param  EAX  Lower 32-bits of MSR value.
688                Described by the type MSR_P6_BBL_CR_CTL3_REGISTER.
689   @param  EDX  Upper 32-bits of MSR value.
690                Described by the type MSR_P6_BBL_CR_CTL3_REGISTER.
691 
692   <b>Example usage</b>
693   @code
694   MSR_P6_BBL_CR_CTL3_REGISTER  Msr;
695 
696   Msr.Uint64 = AsmReadMsr64 (MSR_P6_BBL_CR_CTL3);
697   AsmWriteMsr64 (MSR_P6_BBL_CR_CTL3, Msr.Uint64);
698   @endcode
699   @note MSR_P6_BBL_CR_CTL3 is defined as BBL_CR_CTL3 in SDM.
700 **/
701 #define MSR_P6_BBL_CR_CTL3                       0x0000011E
702 
703 /**
704   MSR information returned for MSR index #MSR_P6_BBL_CR_CTL3
705 **/
706 typedef union {
707   ///
708   /// Individual bit fields
709   ///
710   struct {
711     ///
712     /// [Bit 0] L2 Configured (read/write ).
713     ///
714     UINT32  L2Configured:1;
715     ///
716     /// [Bits 4:1] L2 Cache Latency (read/write).
717     ///
718     UINT32  L2CacheLatency:4;
719     ///
720     /// [Bit 5] ECC Check Enable (read/write).
721     ///
722     UINT32  ECCCheckEnable:1;
723     ///
724     /// [Bit 6] Address Parity Check Enable (read/write).
725     ///
726     UINT32  AddressParityCheckEnable:1;
727     ///
728     /// [Bit 7] CRTN Parity Check Enable (read/write).
729     ///
730     UINT32  CRTNParityCheckEnable:1;
731     ///
732     /// [Bit 8] L2 Enabled (read/write).
733     ///
734     UINT32  L2Enabled:1;
735     ///
736     /// [Bits 10:9] L2 Associativity (read only) Direct Mapped 2 Way 4 Way
737     /// Reserved.
738     ///
739     UINT32  L2Associativity:2;
740     ///
741     /// [Bits 12:11] Number of L2 banks (read only).
742     ///
743     UINT32  L2Banks:2;
744     ///
745     /// [Bits 17:13] Cache size per bank (read/write) 256KBytes 512KBytes
746     /// 1MByte 2MByte 4MBytes.
747     ///
748     UINT32  CacheSizePerBank:5;
749     ///
750     /// [Bit 18] Cache State error checking enable (read/write).
751     ///
752     UINT32  CacheStateErrorEnable:1;
753     UINT32  Reserved1:1;
754     ///
755     /// [Bits 22:20] L2 Physical Address Range support 64GBytes 32GBytes
756     /// 16GBytes 8GBytes 4GBytes 2GBytes 1GBytes 512MBytes.
757     ///
758     UINT32  L2AddressRange:3;
759     ///
760     /// [Bit 23] L2 Hardware Disable (read only).
761     ///
762     UINT32  L2HardwareDisable:1;
763     UINT32  Reserved2:1;
764     ///
765     /// [Bit 25] Cache bus fraction (read only).
766     ///
767     UINT32  CacheBusFraction:1;
768     UINT32  Reserved3:6;
769     UINT32  Reserved4:32;
770   } Bits;
771   ///
772   /// All bit fields as a 32-bit value
773   ///
774   UINT32  Uint32;
775   ///
776   /// All bit fields as a 64-bit value
777   ///
778   UINT64  Uint64;
779 } MSR_P6_BBL_CR_CTL3_REGISTER;
780 
781 
782 /**
783   CS register target for CPL 0 code.
784 
785   @param  ECX  MSR_P6_SYSENTER_CS_MSR (0x00000174)
786   @param  EAX  Lower 32-bits of MSR value.
787   @param  EDX  Upper 32-bits of MSR value.
788 
789   <b>Example usage</b>
790   @code
791   UINT64  Msr;
792 
793   Msr = AsmReadMsr64 (MSR_P6_SYSENTER_CS_MSR);
794   AsmWriteMsr64 (MSR_P6_SYSENTER_CS_MSR, Msr);
795   @endcode
796   @note MSR_P6_SYSENTER_CS_MSR is defined as SYSENTER_CS_MSR in SDM.
797 **/
798 #define MSR_P6_SYSENTER_CS_MSR                   0x00000174
799 
800 
801 /**
802   Stack pointer for CPL 0 stack.
803 
804   @param  ECX  MSR_P6_SYSENTER_ESP_MSR (0x00000175)
805   @param  EAX  Lower 32-bits of MSR value.
806   @param  EDX  Upper 32-bits of MSR value.
807 
808   <b>Example usage</b>
809   @code
810   UINT64  Msr;
811 
812   Msr = AsmReadMsr64 (MSR_P6_SYSENTER_ESP_MSR);
813   AsmWriteMsr64 (MSR_P6_SYSENTER_ESP_MSR, Msr);
814   @endcode
815   @note MSR_P6_SYSENTER_ESP_MSR is defined as SYSENTER_ESP_MSR in SDM.
816 **/
817 #define MSR_P6_SYSENTER_ESP_MSR                  0x00000175
818 
819 
820 /**
821   CPL 0 code entry point.
822 
823   @param  ECX  MSR_P6_SYSENTER_EIP_MSR (0x00000176)
824   @param  EAX  Lower 32-bits of MSR value.
825   @param  EDX  Upper 32-bits of MSR value.
826 
827   <b>Example usage</b>
828   @code
829   UINT64  Msr;
830 
831   Msr = AsmReadMsr64 (MSR_P6_SYSENTER_EIP_MSR);
832   AsmWriteMsr64 (MSR_P6_SYSENTER_EIP_MSR, Msr);
833   @endcode
834   @note MSR_P6_SYSENTER_EIP_MSR is defined as SYSENTER_EIP_MSR in SDM.
835 **/
836 #define MSR_P6_SYSENTER_EIP_MSR                  0x00000176
837 
838 
839 /**
840 
841 
842   @param  ECX  MSR_P6_MCG_CAP (0x00000179)
843   @param  EAX  Lower 32-bits of MSR value.
844   @param  EDX  Upper 32-bits of MSR value.
845 
846   <b>Example usage</b>
847   @code
848   UINT64  Msr;
849 
850   Msr = AsmReadMsr64 (MSR_P6_MCG_CAP);
851   AsmWriteMsr64 (MSR_P6_MCG_CAP, Msr);
852   @endcode
853   @note MSR_P6_MCG_CAP is defined as MCG_CAP in SDM.
854 **/
855 #define MSR_P6_MCG_CAP                           0x00000179
856 
857 
858 /**
859 
860 
861   @param  ECX  MSR_P6_MCG_STATUS (0x0000017A)
862   @param  EAX  Lower 32-bits of MSR value.
863   @param  EDX  Upper 32-bits of MSR value.
864 
865   <b>Example usage</b>
866   @code
867   UINT64  Msr;
868 
869   Msr = AsmReadMsr64 (MSR_P6_MCG_STATUS);
870   AsmWriteMsr64 (MSR_P6_MCG_STATUS, Msr);
871   @endcode
872   @note MSR_P6_MCG_STATUS is defined as MCG_STATUS in SDM.
873 **/
874 #define MSR_P6_MCG_STATUS                        0x0000017A
875 
876 
877 /**
878 
879 
880   @param  ECX  MSR_P6_MCG_CTL (0x0000017B)
881   @param  EAX  Lower 32-bits of MSR value.
882   @param  EDX  Upper 32-bits of MSR value.
883 
884   <b>Example usage</b>
885   @code
886   UINT64  Msr;
887 
888   Msr = AsmReadMsr64 (MSR_P6_MCG_CTL);
889   AsmWriteMsr64 (MSR_P6_MCG_CTL, Msr);
890   @endcode
891   @note MSR_P6_MCG_CTL is defined as MCG_CTL in SDM.
892 **/
893 #define MSR_P6_MCG_CTL                           0x0000017B
894 
895 
896 /**
897 
898 
899   @param  ECX  MSR_P6_PERFEVTSELn
900   @param  EAX  Lower 32-bits of MSR value.
901                Described by the type MSR_P6_PERFEVTSEL_REGISTER.
902   @param  EDX  Upper 32-bits of MSR value.
903                Described by the type MSR_P6_PERFEVTSEL_REGISTER.
904 
905   <b>Example usage</b>
906   @code
907   MSR_P6_PERFEVTSEL_REGISTER  Msr;
908 
909   Msr.Uint64 = AsmReadMsr64 (MSR_P6_PERFEVTSEL0);
910   AsmWriteMsr64 (MSR_P6_PERFEVTSEL0, Msr.Uint64);
911   @endcode
912   @note MSR_P6_PERFEVTSEL0 is defined as PERFEVTSEL0 in SDM.
913         MSR_P6_PERFEVTSEL1 is defined as PERFEVTSEL1 in SDM.
914   @{
915 **/
916 #define MSR_P6_PERFEVTSEL0                       0x00000186
917 #define MSR_P6_PERFEVTSEL1                       0x00000187
918 /// @}
919 
920 /**
921   MSR information returned for MSR indexes #MSR_P6_PERFEVTSEL0 and
922   #MSR_P6_PERFEVTSEL1.
923 **/
924 typedef union {
925   ///
926   /// Individual bit fields
927   ///
928   struct {
929     ///
930     /// [Bits 7:0] Event Select Refer to Performance Counter section for a
931     /// list of event encodings.
932     ///
933     UINT32  EventSelect:8;
934     ///
935     /// [Bits 15:8] UMASK (Unit Mask) Unit mask register set to 0 to enable
936     /// all count options.
937     ///
938     UINT32  UMASK:8;
939     ///
940     /// [Bit 16] USER Controls the counting of events at Privilege levels of
941     /// 1, 2, and 3.
942     ///
943     UINT32  USR:1;
944     ///
945     /// [Bit 17] OS Controls the counting of events at Privilege level of 0.
946     ///
947     UINT32  OS:1;
948     ///
949     /// [Bit 18] E Occurrence/Duration Mode Select 1 = Occurrence 0 = Duration.
950     ///
951     UINT32  E:1;
952     ///
953     /// [Bit 19] PC Enabled the signaling of performance counter overflow via
954     /// BP0 pin.
955     ///
956     UINT32  PC:1;
957     ///
958     /// [Bit 20] INT Enables the signaling of counter overflow via input to
959     /// APIC 1 = Enable 0 = Disable.
960     ///
961     UINT32  INT:1;
962     UINT32  Reserved1:1;
963     ///
964     /// [Bit 22] ENABLE Enables the counting of performance events in both
965     /// counters 1 = Enable 0 = Disable.
966     ///
967     UINT32  EN:1;
968     ///
969     /// [Bit 23] INV Inverts the result of the CMASK condition 1 = Inverted 0
970     /// = Non-Inverted.
971     ///
972     UINT32  INV:1;
973     ///
974     /// [Bits 31:24] CMASK (Counter Mask).
975     ///
976     UINT32  CMASK:8;
977     UINT32  Reserved2:32;
978   } Bits;
979   ///
980   /// All bit fields as a 32-bit value
981   ///
982   UINT32  Uint32;
983   ///
984   /// All bit fields as a 64-bit value
985   ///
986   UINT64  Uint64;
987 } MSR_P6_PERFEVTSEL_REGISTER;
988 
989 
990 /**
991 
992 
993   @param  ECX  MSR_P6_DEBUGCTLMSR (0x000001D9)
994   @param  EAX  Lower 32-bits of MSR value.
995                Described by the type MSR_P6_DEBUGCTLMSR_REGISTER.
996   @param  EDX  Upper 32-bits of MSR value.
997                Described by the type MSR_P6_DEBUGCTLMSR_REGISTER.
998 
999   <b>Example usage</b>
1000   @code
1001   MSR_P6_DEBUGCTLMSR_REGISTER  Msr;
1002 
1003   Msr.Uint64 = AsmReadMsr64 (MSR_P6_DEBUGCTLMSR);
1004   AsmWriteMsr64 (MSR_P6_DEBUGCTLMSR, Msr.Uint64);
1005   @endcode
1006   @note MSR_P6_DEBUGCTLMSR is defined as DEBUGCTLMSR in SDM.
1007 **/
1008 #define MSR_P6_DEBUGCTLMSR                       0x000001D9
1009 
1010 /**
1011   MSR information returned for MSR index #MSR_P6_DEBUGCTLMSR
1012 **/
1013 typedef union {
1014   ///
1015   /// Individual bit fields
1016   ///
1017   struct {
1018     ///
1019     /// [Bit 0] Enable/Disable Last Branch Records.
1020     ///
1021     UINT32  LBR:1;
1022     ///
1023     /// [Bit 1] Branch Trap Flag.
1024     ///
1025     UINT32  BTF:1;
1026     ///
1027     /// [Bit 2] Performance Monitoring/Break Point Pins.
1028     ///
1029     UINT32  PB0:1;
1030     ///
1031     /// [Bit 3] Performance Monitoring/Break Point Pins.
1032     ///
1033     UINT32  PB1:1;
1034     ///
1035     /// [Bit 4] Performance Monitoring/Break Point Pins.
1036     ///
1037     UINT32  PB2:1;
1038     ///
1039     /// [Bit 5] Performance Monitoring/Break Point Pins.
1040     ///
1041     UINT32  PB3:1;
1042     ///
1043     /// [Bit 6] Enable/Disable Execution Trace Messages.
1044     ///
1045     UINT32  TR:1;
1046     UINT32  Reserved1:25;
1047     UINT32  Reserved2:32;
1048   } Bits;
1049   ///
1050   /// All bit fields as a 32-bit value
1051   ///
1052   UINT32  Uint32;
1053   ///
1054   /// All bit fields as a 64-bit value
1055   ///
1056   UINT64  Uint64;
1057 } MSR_P6_DEBUGCTLMSR_REGISTER;
1058 
1059 
1060 /**
1061 
1062 
1063   @param  ECX  MSR_P6_LASTBRANCHFROMIP (0x000001DB)
1064   @param  EAX  Lower 32-bits of MSR value.
1065   @param  EDX  Upper 32-bits of MSR value.
1066 
1067   <b>Example usage</b>
1068   @code
1069   UINT64  Msr;
1070 
1071   Msr = AsmReadMsr64 (MSR_P6_LASTBRANCHFROMIP);
1072   AsmWriteMsr64 (MSR_P6_LASTBRANCHFROMIP, Msr);
1073   @endcode
1074   @note MSR_P6_LASTBRANCHFROMIP is defined as LASTBRANCHFROMIP in SDM.
1075 **/
1076 #define MSR_P6_LASTBRANCHFROMIP                  0x000001DB
1077 
1078 
1079 /**
1080 
1081 
1082   @param  ECX  MSR_P6_LASTBRANCHTOIP (0x000001DC)
1083   @param  EAX  Lower 32-bits of MSR value.
1084   @param  EDX  Upper 32-bits of MSR value.
1085 
1086   <b>Example usage</b>
1087   @code
1088   UINT64  Msr;
1089 
1090   Msr = AsmReadMsr64 (MSR_P6_LASTBRANCHTOIP);
1091   AsmWriteMsr64 (MSR_P6_LASTBRANCHTOIP, Msr);
1092   @endcode
1093   @note MSR_P6_LASTBRANCHTOIP is defined as LASTBRANCHTOIP in SDM.
1094 **/
1095 #define MSR_P6_LASTBRANCHTOIP                    0x000001DC
1096 
1097 
1098 /**
1099 
1100 
1101   @param  ECX  MSR_P6_LASTINTFROMIP (0x000001DD)
1102   @param  EAX  Lower 32-bits of MSR value.
1103   @param  EDX  Upper 32-bits of MSR value.
1104 
1105   <b>Example usage</b>
1106   @code
1107   UINT64  Msr;
1108 
1109   Msr = AsmReadMsr64 (MSR_P6_LASTINTFROMIP);
1110   AsmWriteMsr64 (MSR_P6_LASTINTFROMIP, Msr);
1111   @endcode
1112   @note MSR_P6_LASTINTFROMIP is defined as LASTINTFROMIP in SDM.
1113 **/
1114 #define MSR_P6_LASTINTFROMIP                     0x000001DD
1115 
1116 
1117 /**
1118 
1119 
1120   @param  ECX  MSR_P6_LASTINTTOIP (0x000001DE)
1121   @param  EAX  Lower 32-bits of MSR value.
1122   @param  EDX  Upper 32-bits of MSR value.
1123 
1124   <b>Example usage</b>
1125   @code
1126   UINT64  Msr;
1127 
1128   Msr = AsmReadMsr64 (MSR_P6_LASTINTTOIP);
1129   AsmWriteMsr64 (MSR_P6_LASTINTTOIP, Msr);
1130   @endcode
1131   @note MSR_P6_LASTINTTOIP is defined as LASTINTTOIP in SDM.
1132 **/
1133 #define MSR_P6_LASTINTTOIP                       0x000001DE
1134 
1135 
1136 /**
1137 
1138 
1139   @param  ECX  MSR_P6_ROB_CR_BKUPTMPDR6 (0x000001E0)
1140   @param  EAX  Lower 32-bits of MSR value.
1141                Described by the type MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER.
1142   @param  EDX  Upper 32-bits of MSR value.
1143                Described by the type MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER.
1144 
1145   <b>Example usage</b>
1146   @code
1147   MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER  Msr;
1148 
1149   Msr.Uint64 = AsmReadMsr64 (MSR_P6_ROB_CR_BKUPTMPDR6);
1150   AsmWriteMsr64 (MSR_P6_ROB_CR_BKUPTMPDR6, Msr.Uint64);
1151   @endcode
1152   @note MSR_P6_ROB_CR_BKUPTMPDR6 is defined as ROB_CR_BKUPTMPDR6 in SDM.
1153 **/
1154 #define MSR_P6_ROB_CR_BKUPTMPDR6                 0x000001E0
1155 
1156 /**
1157   MSR information returned for MSR index #MSR_P6_ROB_CR_BKUPTMPDR6
1158 **/
1159 typedef union {
1160   ///
1161   /// Individual bit fields
1162   ///
1163   struct {
1164     UINT32  Reserved1:2;
1165     ///
1166     /// [Bit 2] Fast Strings Enable bit. Default is enabled.
1167     ///
1168     UINT32  FastStrings:1;
1169     UINT32  Reserved2:29;
1170     UINT32  Reserved3:32;
1171   } Bits;
1172   ///
1173   /// All bit fields as a 32-bit value
1174   ///
1175   UINT32  Uint32;
1176   ///
1177   /// All bit fields as a 64-bit value
1178   ///
1179   UINT64  Uint64;
1180 } MSR_P6_ROB_CR_BKUPTMPDR6_REGISTER;
1181 
1182 
1183 /**
1184 
1185 
1186   @param  ECX  MSR_P6_MTRRPHYSBASEn
1187   @param  EAX  Lower 32-bits of MSR value.
1188   @param  EDX  Upper 32-bits of MSR value.
1189 
1190   <b>Example usage</b>
1191   @code
1192   UINT64  Msr;
1193 
1194   Msr = AsmReadMsr64 (MSR_P6_MTRRPHYSBASE0);
1195   AsmWriteMsr64 (MSR_P6_MTRRPHYSBASE0, Msr);
1196   @endcode
1197   @note MSR_P6_MTRRPHYSBASE0 is defined as MTRRPHYSBASE0 in SDM.
1198         MSR_P6_MTRRPHYSBASE1 is defined as MTRRPHYSBASE1 in SDM.
1199         MSR_P6_MTRRPHYSBASE2 is defined as MTRRPHYSBASE2 in SDM.
1200         MSR_P6_MTRRPHYSBASE3 is defined as MTRRPHYSBASE3 in SDM.
1201         MSR_P6_MTRRPHYSBASE4 is defined as MTRRPHYSBASE4 in SDM.
1202         MSR_P6_MTRRPHYSBASE5 is defined as MTRRPHYSBASE5 in SDM.
1203         MSR_P6_MTRRPHYSBASE6 is defined as MTRRPHYSBASE6 in SDM.
1204         MSR_P6_MTRRPHYSBASE7 is defined as MTRRPHYSBASE7 in SDM.
1205   @{
1206 **/
1207 #define MSR_P6_MTRRPHYSBASE0                     0x00000200
1208 #define MSR_P6_MTRRPHYSBASE1                     0x00000202
1209 #define MSR_P6_MTRRPHYSBASE2                     0x00000204
1210 #define MSR_P6_MTRRPHYSBASE3                     0x00000206
1211 #define MSR_P6_MTRRPHYSBASE4                     0x00000208
1212 #define MSR_P6_MTRRPHYSBASE5                     0x0000020A
1213 #define MSR_P6_MTRRPHYSBASE6                     0x0000020C
1214 #define MSR_P6_MTRRPHYSBASE7                     0x0000020E
1215 /// @}
1216 
1217 
1218 /**
1219 
1220 
1221   @param  ECX  MSR_P6_MTRRPHYSMASKn
1222   @param  EAX  Lower 32-bits of MSR value.
1223   @param  EDX  Upper 32-bits of MSR value.
1224 
1225   <b>Example usage</b>
1226   @code
1227   UINT64  Msr;
1228 
1229   Msr = AsmReadMsr64 (MSR_P6_MTRRPHYSMASK0);
1230   AsmWriteMsr64 (MSR_P6_MTRRPHYSMASK0, Msr);
1231   @endcode
1232   @note MSR_P6_MTRRPHYSMASK0 is defined as MTRRPHYSMASK0 in SDM.
1233         MSR_P6_MTRRPHYSMASK1 is defined as MTRRPHYSMASK1 in SDM.
1234         MSR_P6_MTRRPHYSMASK2 is defined as MTRRPHYSMASK2 in SDM.
1235         MSR_P6_MTRRPHYSMASK3 is defined as MTRRPHYSMASK3 in SDM.
1236         MSR_P6_MTRRPHYSMASK4 is defined as MTRRPHYSMASK4 in SDM.
1237         MSR_P6_MTRRPHYSMASK5 is defined as MTRRPHYSMASK5 in SDM.
1238         MSR_P6_MTRRPHYSMASK6 is defined as MTRRPHYSMASK6 in SDM.
1239         MSR_P6_MTRRPHYSMASK7 is defined as MTRRPHYSMASK7 in SDM.
1240   @{
1241 **/
1242 #define MSR_P6_MTRRPHYSMASK0                     0x00000201
1243 #define MSR_P6_MTRRPHYSMASK1                     0x00000203
1244 #define MSR_P6_MTRRPHYSMASK2                     0x00000205
1245 #define MSR_P6_MTRRPHYSMASK3                     0x00000207
1246 #define MSR_P6_MTRRPHYSMASK4                     0x00000209
1247 #define MSR_P6_MTRRPHYSMASK5                     0x0000020B
1248 #define MSR_P6_MTRRPHYSMASK6                     0x0000020D
1249 #define MSR_P6_MTRRPHYSMASK7                     0x0000020F
1250 /// @}
1251 
1252 
1253 /**
1254 
1255 
1256   @param  ECX  MSR_P6_MTRRFIX64K_00000 (0x00000250)
1257   @param  EAX  Lower 32-bits of MSR value.
1258   @param  EDX  Upper 32-bits of MSR value.
1259 
1260   <b>Example usage</b>
1261   @code
1262   UINT64  Msr;
1263 
1264   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX64K_00000);
1265   AsmWriteMsr64 (MSR_P6_MTRRFIX64K_00000, Msr);
1266   @endcode
1267   @note MSR_P6_MTRRFIX64K_00000 is defined as MTRRFIX64K_00000 in SDM.
1268 **/
1269 #define MSR_P6_MTRRFIX64K_00000                  0x00000250
1270 
1271 
1272 /**
1273 
1274 
1275   @param  ECX  MSR_P6_MTRRFIX16K_80000 (0x00000258)
1276   @param  EAX  Lower 32-bits of MSR value.
1277   @param  EDX  Upper 32-bits of MSR value.
1278 
1279   <b>Example usage</b>
1280   @code
1281   UINT64  Msr;
1282 
1283   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX16K_80000);
1284   AsmWriteMsr64 (MSR_P6_MTRRFIX16K_80000, Msr);
1285   @endcode
1286   @note MSR_P6_MTRRFIX16K_80000 is defined as MTRRFIX16K_80000 in SDM.
1287 **/
1288 #define MSR_P6_MTRRFIX16K_80000                  0x00000258
1289 
1290 
1291 /**
1292 
1293 
1294   @param  ECX  MSR_P6_MTRRFIX16K_A0000 (0x00000259)
1295   @param  EAX  Lower 32-bits of MSR value.
1296   @param  EDX  Upper 32-bits of MSR value.
1297 
1298   <b>Example usage</b>
1299   @code
1300   UINT64  Msr;
1301 
1302   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX16K_A0000);
1303   AsmWriteMsr64 (MSR_P6_MTRRFIX16K_A0000, Msr);
1304   @endcode
1305   @note MSR_P6_MTRRFIX16K_A0000 is defined as MTRRFIX16K_A0000 in SDM.
1306 **/
1307 #define MSR_P6_MTRRFIX16K_A0000                  0x00000259
1308 
1309 
1310 /**
1311 
1312 
1313   @param  ECX  MSR_P6_MTRRFIX4K_C0000 (0x00000268)
1314   @param  EAX  Lower 32-bits of MSR value.
1315   @param  EDX  Upper 32-bits of MSR value.
1316 
1317   <b>Example usage</b>
1318   @code
1319   UINT64  Msr;
1320 
1321   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_C0000);
1322   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_C0000, Msr);
1323   @endcode
1324   @note MSR_P6_MTRRFIX4K_C0000 is defined as MTRRFIX4K_C0000 in SDM.
1325 **/
1326 #define MSR_P6_MTRRFIX4K_C0000                   0x00000268
1327 
1328 
1329 /**
1330 
1331 
1332   @param  ECX  MSR_P6_MTRRFIX4K_C8000 (0x00000269)
1333   @param  EAX  Lower 32-bits of MSR value.
1334   @param  EDX  Upper 32-bits of MSR value.
1335 
1336   <b>Example usage</b>
1337   @code
1338   UINT64  Msr;
1339 
1340   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_C8000);
1341   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_C8000, Msr);
1342   @endcode
1343   @note MSR_P6_MTRRFIX4K_C8000 is defined as MTRRFIX4K_C8000 in SDM.
1344 **/
1345 #define MSR_P6_MTRRFIX4K_C8000                   0x00000269
1346 
1347 
1348 /**
1349 
1350 
1351   @param  ECX  MSR_P6_MTRRFIX4K_D0000 (0x0000026A)
1352   @param  EAX  Lower 32-bits of MSR value.
1353   @param  EDX  Upper 32-bits of MSR value.
1354 
1355   <b>Example usage</b>
1356   @code
1357   UINT64  Msr;
1358 
1359   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_D0000);
1360   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_D0000, Msr);
1361   @endcode
1362   @note MSR_P6_MTRRFIX4K_D0000 is defined as MTRRFIX4K_D0000 in SDM.
1363 **/
1364 #define MSR_P6_MTRRFIX4K_D0000                   0x0000026A
1365 
1366 
1367 /**
1368 
1369 
1370   @param  ECX  MSR_P6_MTRRFIX4K_D8000 (0x0000026B)
1371   @param  EAX  Lower 32-bits of MSR value.
1372   @param  EDX  Upper 32-bits of MSR value.
1373 
1374   <b>Example usage</b>
1375   @code
1376   UINT64  Msr;
1377 
1378   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_D8000);
1379   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_D8000, Msr);
1380   @endcode
1381   @note MSR_P6_MTRRFIX4K_D8000 is defined as MTRRFIX4K_D8000 in SDM.
1382 **/
1383 #define MSR_P6_MTRRFIX4K_D8000                   0x0000026B
1384 
1385 
1386 /**
1387 
1388 
1389   @param  ECX  MSR_P6_MTRRFIX4K_E0000 (0x0000026C)
1390   @param  EAX  Lower 32-bits of MSR value.
1391   @param  EDX  Upper 32-bits of MSR value.
1392 
1393   <b>Example usage</b>
1394   @code
1395   UINT64  Msr;
1396 
1397   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_E0000);
1398   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_E0000, Msr);
1399   @endcode
1400   @note MSR_P6_MTRRFIX4K_E0000 is defined as MTRRFIX4K_E0000 in SDM.
1401 **/
1402 #define MSR_P6_MTRRFIX4K_E0000                   0x0000026C
1403 
1404 
1405 /**
1406 
1407 
1408   @param  ECX  MSR_P6_MTRRFIX4K_E8000 (0x0000026D)
1409   @param  EAX  Lower 32-bits of MSR value.
1410   @param  EDX  Upper 32-bits of MSR value.
1411 
1412   <b>Example usage</b>
1413   @code
1414   UINT64  Msr;
1415 
1416   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_E8000);
1417   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_E8000, Msr);
1418   @endcode
1419   @note MSR_P6_MTRRFIX4K_E8000 is defined as MTRRFIX4K_E8000 in SDM.
1420 **/
1421 #define MSR_P6_MTRRFIX4K_E8000                   0x0000026D
1422 
1423 
1424 /**
1425 
1426 
1427   @param  ECX  MSR_P6_MTRRFIX4K_F0000 (0x0000026E)
1428   @param  EAX  Lower 32-bits of MSR value.
1429   @param  EDX  Upper 32-bits of MSR value.
1430 
1431   <b>Example usage</b>
1432   @code
1433   UINT64  Msr;
1434 
1435   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_F0000);
1436   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_F0000, Msr);
1437   @endcode
1438   @note MSR_P6_MTRRFIX4K_F0000 is defined as MTRRFIX4K_F0000 in SDM.
1439 **/
1440 #define MSR_P6_MTRRFIX4K_F0000                   0x0000026E
1441 
1442 
1443 /**
1444 
1445 
1446   @param  ECX  MSR_P6_MTRRFIX4K_F8000 (0x0000026F)
1447   @param  EAX  Lower 32-bits of MSR value.
1448   @param  EDX  Upper 32-bits of MSR value.
1449 
1450   <b>Example usage</b>
1451   @code
1452   UINT64  Msr;
1453 
1454   Msr = AsmReadMsr64 (MSR_P6_MTRRFIX4K_F8000);
1455   AsmWriteMsr64 (MSR_P6_MTRRFIX4K_F8000, Msr);
1456   @endcode
1457   @note MSR_P6_MTRRFIX4K_F8000 is defined as MTRRFIX4K_F8000 in SDM.
1458 **/
1459 #define MSR_P6_MTRRFIX4K_F8000                   0x0000026F
1460 
1461 
1462 /**
1463 
1464 
1465   @param  ECX  MSR_P6_MTRRDEFTYPE (0x000002FF)
1466   @param  EAX  Lower 32-bits of MSR value.
1467                Described by the type MSR_P6_MTRRDEFTYPE_REGISTER.
1468   @param  EDX  Upper 32-bits of MSR value.
1469                Described by the type MSR_P6_MTRRDEFTYPE_REGISTER.
1470 
1471   <b>Example usage</b>
1472   @code
1473   MSR_P6_MTRRDEFTYPE_REGISTER  Msr;
1474 
1475   Msr.Uint64 = AsmReadMsr64 (MSR_P6_MTRRDEFTYPE);
1476   AsmWriteMsr64 (MSR_P6_MTRRDEFTYPE, Msr.Uint64);
1477   @endcode
1478   @note MSR_P6_MTRRDEFTYPE is defined as MTRRDEFTYPE in SDM.
1479 **/
1480 #define MSR_P6_MTRRDEFTYPE                       0x000002FF
1481 
1482 /**
1483   MSR information returned for MSR index #MSR_P6_MTRRDEFTYPE
1484 **/
1485 typedef union {
1486   ///
1487   /// Individual bit fields
1488   ///
1489   struct {
1490     ///
1491     /// [Bits 2:0] Default memory type.
1492     ///
1493     UINT32  Type:3;
1494     UINT32  Reserved1:7;
1495     ///
1496     /// [Bit 10] Fixed MTRR enable.
1497     ///
1498     UINT32  FE:1;
1499     ///
1500     /// [Bit 11] MTRR Enable.
1501     ///
1502     UINT32  E:1;
1503     UINT32  Reserved2:20;
1504     UINT32  Reserved3:32;
1505   } Bits;
1506   ///
1507   /// All bit fields as a 32-bit value
1508   ///
1509   UINT32  Uint32;
1510   ///
1511   /// All bit fields as a 64-bit value
1512   ///
1513   UINT64  Uint64;
1514 } MSR_P6_MTRRDEFTYPE_REGISTER;
1515 
1516 
1517 /**
1518 
1519 
1520   @param  ECX  MSR_P6_MC0_CTL (0x00000400)
1521   @param  EAX  Lower 32-bits of MSR value.
1522   @param  EDX  Upper 32-bits of MSR value.
1523 
1524   <b>Example usage</b>
1525   @code
1526   UINT64  Msr;
1527 
1528   Msr = AsmReadMsr64 (MSR_P6_MC0_CTL);
1529   AsmWriteMsr64 (MSR_P6_MC0_CTL, Msr);
1530   @endcode
1531   @note MSR_P6_MC0_CTL is defined as MC0_CTL in SDM.
1532         MSR_P6_MC1_CTL is defined as MC1_CTL in SDM.
1533         MSR_P6_MC2_CTL is defined as MC2_CTL in SDM.
1534         MSR_P6_MC3_CTL is defined as MC3_CTL in SDM.
1535         MSR_P6_MC4_CTL is defined as MC4_CTL in SDM.
1536   @{
1537 **/
1538 #define MSR_P6_MC0_CTL                           0x00000400
1539 #define MSR_P6_MC1_CTL                           0x00000404
1540 #define MSR_P6_MC2_CTL                           0x00000408
1541 #define MSR_P6_MC3_CTL                           0x00000410
1542 #define MSR_P6_MC4_CTL                           0x0000040C
1543 /// @}
1544 
1545 
1546 /**
1547 
1548   Bit definitions for MSR_P6_MC4_STATUS are the same as MSR_P6_MC0_STATUS,
1549   except bits 0, 4, 57, and 61 are hardcoded to 1.
1550 
1551   @param  ECX  MSR_P6_MCn_STATUS
1552   @param  EAX  Lower 32-bits of MSR value.
1553                Described by the type MSR_P6_MC_STATUS_REGISTER.
1554   @param  EDX  Upper 32-bits of MSR value.
1555                Described by the type MSR_P6_MC_STATUS_REGISTER.
1556 
1557   <b>Example usage</b>
1558   @code
1559   MSR_P6_MC_STATUS_REGISTER  Msr;
1560 
1561   Msr.Uint64 = AsmReadMsr64 (MSR_P6_MC0_STATUS);
1562   AsmWriteMsr64 (MSR_P6_MC0_STATUS, Msr.Uint64);
1563   @endcode
1564   @note MSR_P6_MC0_STATUS is defined as MC0_STATUS in SDM.
1565         MSR_P6_MC1_STATUS is defined as MC1_STATUS in SDM.
1566         MSR_P6_MC2_STATUS is defined as MC2_STATUS in SDM.
1567         MSR_P6_MC3_STATUS is defined as MC3_STATUS in SDM.
1568         MSR_P6_MC4_STATUS is defined as MC4_STATUS in SDM.
1569   @{
1570 **/
1571 #define MSR_P6_MC0_STATUS                        0x00000401
1572 #define MSR_P6_MC1_STATUS                        0x00000405
1573 #define MSR_P6_MC2_STATUS                        0x00000409
1574 #define MSR_P6_MC3_STATUS                        0x00000411
1575 #define MSR_P6_MC4_STATUS                        0x0000040D
1576 /// @}
1577 
1578 /**
1579   MSR information returned for MSR index #MSR_P6_MC0_STATUS to
1580   #MSR_P6_MC4_STATUS
1581 **/
1582 typedef union {
1583   ///
1584   /// Individual bit fields
1585   ///
1586   struct {
1587     ///
1588     /// [Bits 15:0] MC_STATUS_MCACOD.
1589     ///
1590     UINT32  MC_STATUS_MCACOD:16;
1591     ///
1592     /// [Bits 31:16] MC_STATUS_MSCOD.
1593     ///
1594     UINT32  MC_STATUS_MSCOD:16;
1595     UINT32  Reserved:25;
1596     ///
1597     /// [Bit 57] MC_STATUS_DAM.
1598     ///
1599     UINT32  MC_STATUS_DAM:1;
1600     ///
1601     /// [Bit 58] MC_STATUS_ADDRV.
1602     ///
1603     UINT32  MC_STATUS_ADDRV:1;
1604     ///
1605     /// [Bit 59] MC_STATUS_MISCV.
1606     ///
1607     UINT32  MC_STATUS_MISCV:1;
1608     ///
1609     /// [Bit 60] MC_STATUS_EN. (Note: For MC0_STATUS only, this bit is
1610     /// hardcoded to 1.).
1611     ///
1612     UINT32  MC_STATUS_EN:1;
1613     ///
1614     /// [Bit 61] MC_STATUS_UC.
1615     ///
1616     UINT32  MC_STATUS_UC:1;
1617     ///
1618     /// [Bit 62] MC_STATUS_O.
1619     ///
1620     UINT32  MC_STATUS_O:1;
1621     ///
1622     /// [Bit 63] MC_STATUS_V.
1623     ///
1624     UINT32  MC_STATUS_V:1;
1625   } Bits;
1626   ///
1627   /// All bit fields as a 64-bit value
1628   ///
1629   UINT64  Uint64;
1630 } MSR_P6_MC_STATUS_REGISTER;
1631 
1632 
1633 /**
1634 
1635   MSR_P6_MC4_ADDR is defined in MCA architecture but not implemented in P6 Family processors.
1636 
1637   @param  ECX  MSR_P6_MC0_ADDR (0x00000402)
1638   @param  EAX  Lower 32-bits of MSR value.
1639   @param  EDX  Upper 32-bits of MSR value.
1640 
1641   <b>Example usage</b>
1642   @code
1643   UINT64  Msr;
1644 
1645   Msr = AsmReadMsr64 (MSR_P6_MC0_ADDR);
1646   AsmWriteMsr64 (MSR_P6_MC0_ADDR, Msr);
1647   @endcode
1648   @note MSR_P6_MC0_ADDR is defined as MC0_ADDR in SDM.
1649         MSR_P6_MC1_ADDR is defined as MC1_ADDR in SDM.
1650         MSR_P6_MC2_ADDR is defined as MC2_ADDR in SDM.
1651         MSR_P6_MC3_ADDR is defined as MC3_ADDR in SDM.
1652         MSR_P6_MC4_ADDR is defined as MC4_ADDR in SDM.
1653   @{
1654 **/
1655 #define MSR_P6_MC0_ADDR                          0x00000402
1656 #define MSR_P6_MC1_ADDR                          0x00000406
1657 #define MSR_P6_MC2_ADDR                          0x0000040A
1658 #define MSR_P6_MC3_ADDR                          0x00000412
1659 #define MSR_P6_MC4_ADDR                          0x0000040E
1660 /// @}
1661 
1662 
1663 /**
1664   Defined in MCA architecture but not implemented in the P6 family processors.
1665 
1666   @param  ECX  MSR_P6_MC0_MISC (0x00000403)
1667   @param  EAX  Lower 32-bits of MSR value.
1668   @param  EDX  Upper 32-bits of MSR value.
1669 
1670   <b>Example usage</b>
1671   @code
1672   UINT64  Msr;
1673 
1674   Msr = AsmReadMsr64 (MSR_P6_MC0_MISC);
1675   AsmWriteMsr64 (MSR_P6_MC0_MISC, Msr);
1676   @endcode
1677   @note MSR_P6_MC0_MISC is defined as MC0_MISC in SDM.
1678         MSR_P6_MC1_MISC is defined as MC1_MISC in SDM.
1679         MSR_P6_MC2_MISC is defined as MC2_MISC in SDM.
1680         MSR_P6_MC3_MISC is defined as MC3_MISC in SDM.
1681         MSR_P6_MC4_MISC is defined as MC4_MISC in SDM.
1682   @{
1683 **/
1684 #define MSR_P6_MC0_MISC                          0x00000403
1685 #define MSR_P6_MC1_MISC                          0x00000407
1686 #define MSR_P6_MC2_MISC                          0x0000040B
1687 #define MSR_P6_MC3_MISC                          0x00000413
1688 #define MSR_P6_MC4_MISC                          0x0000040F
1689 /// @}
1690 
1691 #endif
1692