Home | History | Annotate | Download | only in Msr
      1 /** @file
      2   MSR Definitions for Intel processors based on the Skylake microarchitecture.
      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.15.
     21 
     22 **/
     23 
     24 #ifndef __SKYLAKE_MSR_H__
     25 #define __SKYLAKE_MSR_H__
     26 
     27 #include <Register/ArchitecturalMsr.h>
     28 
     29 /**
     30   Package. Maximum Ratio Limit of Turbo Mode RO if MSR_PLATFORM_INFO.[28] = 0,
     31   RW if MSR_PLATFORM_INFO.[28] = 1.
     32 
     33   @param  ECX  MSR_SKYLAKE_TURBO_RATIO_LIMIT (0x000001AD)
     34   @param  EAX  Lower 32-bits of MSR value.
     35                Described by the type MSR_SKYLAKE_TURBO_RATIO_LIMIT_REGISTER.
     36   @param  EDX  Upper 32-bits of MSR value.
     37                Described by the type MSR_SKYLAKE_TURBO_RATIO_LIMIT_REGISTER.
     38 
     39   <b>Example usage</b>
     40   @code
     41   MSR_SKYLAKE_TURBO_RATIO_LIMIT_REGISTER  Msr;
     42 
     43   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_TURBO_RATIO_LIMIT);
     44   @endcode
     45   @note MSR_SKYLAKE_TURBO_RATIO_LIMIT is defined as MSR_TURBO_RATIO_LIMIT in SDM.
     46 **/
     47 #define MSR_SKYLAKE_TURBO_RATIO_LIMIT            0x000001AD
     48 
     49 /**
     50   MSR information returned for MSR index #MSR_SKYLAKE_TURBO_RATIO_LIMIT
     51 **/
     52 typedef union {
     53   ///
     54   /// Individual bit fields
     55   ///
     56   struct {
     57     ///
     58     /// [Bits 7:0] Package. Maximum Ratio Limit for 1C Maximum turbo ratio
     59     /// limit of 1 core active.
     60     ///
     61     UINT32  Maximum1C:8;
     62     ///
     63     /// [Bits 15:8] Package. Maximum Ratio Limit for 2C Maximum turbo ratio
     64     /// limit of 2 core active.
     65     ///
     66     UINT32  Maximum2C:8;
     67     ///
     68     /// [Bits 23:16] Package. Maximum Ratio Limit for 3C Maximum turbo ratio
     69     /// limit of 3 core active.
     70     ///
     71     UINT32  Maximum3C:8;
     72     ///
     73     /// [Bits 31:24] Package. Maximum Ratio Limit for 4C Maximum turbo ratio
     74     /// limit of 4 core active.
     75     ///
     76     UINT32  Maximum4C:8;
     77     UINT32  Reserved:32;
     78   } Bits;
     79   ///
     80   /// All bit fields as a 32-bit value
     81   ///
     82   UINT32  Uint32;
     83   ///
     84   /// All bit fields as a 64-bit value
     85   ///
     86   UINT64  Uint64;
     87 } MSR_SKYLAKE_TURBO_RATIO_LIMIT_REGISTER;
     88 
     89 
     90 /**
     91   Thread. Last Branch Record Stack TOS (R/W)  Contains an index (bits 0-4)
     92   that points to the MSR containing the most recent branch record.
     93 
     94   @param  ECX  MSR_SKYLAKE_LASTBRANCH_TOS (0x000001C9)
     95   @param  EAX  Lower 32-bits of MSR value.
     96   @param  EDX  Upper 32-bits of MSR value.
     97 
     98   <b>Example usage</b>
     99   @code
    100   UINT64  Msr;
    101 
    102   Msr = AsmReadMsr64 (MSR_SKYLAKE_LASTBRANCH_TOS);
    103   AsmWriteMsr64 (MSR_SKYLAKE_LASTBRANCH_TOS, Msr);
    104   @endcode
    105   @note MSR_SKYLAKE_LASTBRANCH_TOS is defined as MSR_LASTBRANCH_TOS in SDM.
    106 **/
    107 #define MSR_SKYLAKE_LASTBRANCH_TOS               0x000001C9
    108 
    109 
    110 /**
    111   Package. Lower 64 Bit OwnerEpoch Component of SGX Key (RO). Low 64 bits of
    112   an 128-bit external entropy value for key derivation of an enclave.
    113 
    114   @param  ECX  MSR_SKYLAKE_SGXOWNER0 (0x00000300)
    115   @param  EAX  Lower 32-bits of MSR value.
    116   @param  EDX  Upper 32-bits of MSR value.
    117 
    118   <b>Example usage</b>
    119   @code
    120   UINT64  Msr;
    121 
    122   Msr = AsmReadMsr64 (MSR_SKYLAKE_SGXOWNER0);
    123   @endcode
    124   @note MSR_SKYLAKE_SGXOWNER0 is defined as MSR_SGXOWNER0 in SDM.
    125 **/
    126 #define MSR_SKYLAKE_SGXOWNER0                    0x00000300
    127 
    128 
    129 /**
    130   Package. Upper 64 Bit OwnerEpoch Component of SGX Key (RO). Upper 64 bits of
    131   an 128-bit external entropy value for key derivation of an enclave.
    132 
    133   @param  ECX  MSR_SKYLAKE_SGXOWNER1 (0x00000301)
    134   @param  EAX  Lower 32-bits of MSR value.
    135   @param  EDX  Upper 32-bits of MSR value.
    136 
    137   <b>Example usage</b>
    138   @code
    139   UINT64  Msr;
    140 
    141   Msr = AsmReadMsr64 (MSR_SKYLAKE_SGXOWNER1);
    142   @endcode
    143   @note MSR_SKYLAKE_SGXOWNER1 is defined as MSR_SGXOWNER1 in SDM.
    144 **/
    145 #define MSR_SKYLAKE_SGXOWNER1                    0x00000301
    146 
    147 
    148 /**
    149   See Table 35-2. See Section 18.2.4, "Architectural Performance Monitoring
    150   Version 4.".
    151 
    152   @param  ECX  MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS (0x0000038E)
    153   @param  EAX  Lower 32-bits of MSR value.
    154                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_REGISTER.
    155   @param  EDX  Upper 32-bits of MSR value.
    156                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_REGISTER.
    157 
    158   <b>Example usage</b>
    159   @code
    160   MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_REGISTER  Msr;
    161 
    162   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS);
    163   AsmWriteMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS, Msr.Uint64);
    164   @endcode
    165   @note MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS is defined as IA32_PERF_GLOBAL_STATUS in SDM.
    166 **/
    167 #define MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS      0x0000038E
    168 
    169 /**
    170   MSR information returned for MSR index #MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS
    171 **/
    172 typedef union {
    173   ///
    174   /// Individual bit fields
    175   ///
    176   struct {
    177     ///
    178     /// [Bit 0] Thread. Ovf_PMC0.
    179     ///
    180     UINT32  Ovf_PMC0:1;
    181     ///
    182     /// [Bit 1] Thread. Ovf_PMC1.
    183     ///
    184     UINT32  Ovf_PMC1:1;
    185     ///
    186     /// [Bit 2] Thread. Ovf_PMC2.
    187     ///
    188     UINT32  Ovf_PMC2:1;
    189     ///
    190     /// [Bit 3] Thread. Ovf_PMC3.
    191     ///
    192     UINT32  Ovf_PMC3:1;
    193     ///
    194     /// [Bit 4] Thread. Ovf_PMC4 (if CPUID.0AH:EAX[15:8] > 4).
    195     ///
    196     UINT32  Ovf_PMC4:1;
    197     ///
    198     /// [Bit 5] Thread. Ovf_PMC5 (if CPUID.0AH:EAX[15:8] > 5).
    199     ///
    200     UINT32  Ovf_PMC5:1;
    201     ///
    202     /// [Bit 6] Thread. Ovf_PMC6 (if CPUID.0AH:EAX[15:8] > 6).
    203     ///
    204     UINT32  Ovf_PMC6:1;
    205     ///
    206     /// [Bit 7] Thread. Ovf_PMC7 (if CPUID.0AH:EAX[15:8] > 7).
    207     ///
    208     UINT32  Ovf_PMC7:1;
    209     UINT32  Reserved1:24;
    210     ///
    211     /// [Bit 32] Thread. Ovf_FixedCtr0.
    212     ///
    213     UINT32  Ovf_FixedCtr0:1;
    214     ///
    215     /// [Bit 33] Thread. Ovf_FixedCtr1.
    216     ///
    217     UINT32  Ovf_FixedCtr1:1;
    218     ///
    219     /// [Bit 34] Thread. Ovf_FixedCtr2.
    220     ///
    221     UINT32  Ovf_FixedCtr2:1;
    222     UINT32  Reserved2:20;
    223     ///
    224     /// [Bit 55] Thread. Trace_ToPA_PMI.
    225     ///
    226     UINT32  Trace_ToPA_PMI:1;
    227     UINT32  Reserved3:2;
    228     ///
    229     /// [Bit 58] Thread. LBR_Frz.
    230     ///
    231     UINT32  LBR_Frz:1;
    232     ///
    233     /// [Bit 59] Thread. CTR_Frz.
    234     ///
    235     UINT32  CTR_Frz:1;
    236     ///
    237     /// [Bit 60] Thread. ASCI.
    238     ///
    239     UINT32  ASCI:1;
    240     ///
    241     /// [Bit 61] Thread. Ovf_Uncore.
    242     ///
    243     UINT32  Ovf_Uncore:1;
    244     ///
    245     /// [Bit 62] Thread. Ovf_BufDSSAVE.
    246     ///
    247     UINT32  Ovf_BufDSSAVE:1;
    248     ///
    249     /// [Bit 63] Thread. CondChgd.
    250     ///
    251     UINT32  CondChgd:1;
    252   } Bits;
    253   ///
    254   /// All bit fields as a 64-bit value
    255   ///
    256   UINT64  Uint64;
    257 } MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_REGISTER;
    258 
    259 
    260 /**
    261   See Table 35-2. See Section 18.2.4, "Architectural Performance Monitoring
    262   Version 4.".
    263 
    264   @param  ECX  MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET (0x00000390)
    265   @param  EAX  Lower 32-bits of MSR value.
    266                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
    267   @param  EDX  Upper 32-bits of MSR value.
    268                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
    269 
    270   <b>Example usage</b>
    271   @code
    272   MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER  Msr;
    273 
    274   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET);
    275   AsmWriteMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET, Msr.Uint64);
    276   @endcode
    277   @note MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET is defined as IA32_PERF_GLOBAL_STATUS_RESET in SDM.
    278 **/
    279 #define MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET 0x00000390
    280 
    281 /**
    282   MSR information returned for MSR index
    283   #MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET
    284 **/
    285 typedef union {
    286   ///
    287   /// Individual bit fields
    288   ///
    289   struct {
    290     ///
    291     /// [Bit 0] Thread. Set 1 to clear Ovf_PMC0.
    292     ///
    293     UINT32  Ovf_PMC0:1;
    294     ///
    295     /// [Bit 1] Thread. Set 1 to clear Ovf_PMC1.
    296     ///
    297     UINT32  Ovf_PMC1:1;
    298     ///
    299     /// [Bit 2] Thread. Set 1 to clear Ovf_PMC2.
    300     ///
    301     UINT32  Ovf_PMC2:1;
    302     ///
    303     /// [Bit 3] Thread. Set 1 to clear Ovf_PMC3.
    304     ///
    305     UINT32  Ovf_PMC3:1;
    306     ///
    307     /// [Bit 4] Thread. Set 1 to clear Ovf_PMC4 (if CPUID.0AH:EAX[15:8] > 4).
    308     ///
    309     UINT32  Ovf_PMC4:1;
    310     ///
    311     /// [Bit 5] Thread. Set 1 to clear Ovf_PMC5 (if CPUID.0AH:EAX[15:8] > 5).
    312     ///
    313     UINT32  Ovf_PMC5:1;
    314     ///
    315     /// [Bit 6] Thread. Set 1 to clear Ovf_PMC6 (if CPUID.0AH:EAX[15:8] > 6).
    316     ///
    317     UINT32  Ovf_PMC6:1;
    318     ///
    319     /// [Bit 7] Thread. Set 1 to clear Ovf_PMC7 (if CPUID.0AH:EAX[15:8] > 7).
    320     ///
    321     UINT32  Ovf_PMC7:1;
    322     UINT32  Reserved1:24;
    323     ///
    324     /// [Bit 32] Thread. Set 1 to clear Ovf_FixedCtr0.
    325     ///
    326     UINT32  Ovf_FixedCtr0:1;
    327     ///
    328     /// [Bit 33] Thread. Set 1 to clear Ovf_FixedCtr1.
    329     ///
    330     UINT32  Ovf_FixedCtr1:1;
    331     ///
    332     /// [Bit 34] Thread. Set 1 to clear Ovf_FixedCtr2.
    333     ///
    334     UINT32  Ovf_FixedCtr2:1;
    335     UINT32  Reserved2:20;
    336     ///
    337     /// [Bit 55] Thread. Set 1 to clear Trace_ToPA_PMI.
    338     ///
    339     UINT32  Trace_ToPA_PMI:1;
    340     UINT32  Reserved3:2;
    341     ///
    342     /// [Bit 58] Thread. Set 1 to clear LBR_Frz.
    343     ///
    344     UINT32  LBR_Frz:1;
    345     ///
    346     /// [Bit 59] Thread. Set 1 to clear CTR_Frz.
    347     ///
    348     UINT32  CTR_Frz:1;
    349     ///
    350     /// [Bit 60] Thread. Set 1 to clear ASCI.
    351     ///
    352     UINT32  ASCI:1;
    353     ///
    354     /// [Bit 61] Thread. Set 1 to clear Ovf_Uncore.
    355     ///
    356     UINT32  Ovf_Uncore:1;
    357     ///
    358     /// [Bit 62] Thread. Set 1 to clear Ovf_BufDSSAVE.
    359     ///
    360     UINT32  Ovf_BufDSSAVE:1;
    361     ///
    362     /// [Bit 63] Thread. Set 1 to clear CondChgd.
    363     ///
    364     UINT32  CondChgd:1;
    365   } Bits;
    366   ///
    367   /// All bit fields as a 64-bit value
    368   ///
    369   UINT64  Uint64;
    370 } MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER;
    371 
    372 
    373 /**
    374   See Table 35-2. See Section 18.2.4, "Architectural Performance Monitoring
    375   Version 4.".
    376 
    377   @param  ECX  MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET (0x00000391)
    378   @param  EAX  Lower 32-bits of MSR value.
    379                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
    380   @param  EDX  Upper 32-bits of MSR value.
    381                Described by the type MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
    382 
    383   <b>Example usage</b>
    384   @code
    385   MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET_REGISTER  Msr;
    386 
    387   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET);
    388   AsmWriteMsr64 (MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET, Msr.Uint64);
    389   @endcode
    390   @note MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET is defined as IA32_PERF_GLOBAL_STATUS_SET in SDM.
    391 **/
    392 #define MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET  0x00000391
    393 
    394 /**
    395   MSR information returned for MSR index
    396   #MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET
    397 **/
    398 typedef union {
    399   ///
    400   /// Individual bit fields
    401   ///
    402   struct {
    403     ///
    404     /// [Bit 0] Thread. Set 1 to cause Ovf_PMC0 = 1.
    405     ///
    406     UINT32  Ovf_PMC0:1;
    407     ///
    408     /// [Bit 1] Thread. Set 1 to cause Ovf_PMC1 = 1.
    409     ///
    410     UINT32  Ovf_PMC1:1;
    411     ///
    412     /// [Bit 2] Thread. Set 1 to cause Ovf_PMC2 = 1.
    413     ///
    414     UINT32  Ovf_PMC2:1;
    415     ///
    416     /// [Bit 3] Thread. Set 1 to cause Ovf_PMC3 = 1.
    417     ///
    418     UINT32  Ovf_PMC3:1;
    419     ///
    420     /// [Bit 4] Thread. Set 1 to cause Ovf_PMC4=1 (if CPUID.0AH:EAX[15:8] > 4).
    421     ///
    422     UINT32  Ovf_PMC4:1;
    423     ///
    424     /// [Bit 5] Thread. Set 1 to cause Ovf_PMC5=1 (if CPUID.0AH:EAX[15:8] > 5).
    425     ///
    426     UINT32  Ovf_PMC5:1;
    427     ///
    428     /// [Bit 6] Thread. Set 1 to cause Ovf_PMC6=1 (if CPUID.0AH:EAX[15:8] > 6).
    429     ///
    430     UINT32  Ovf_PMC6:1;
    431     ///
    432     /// [Bit 7] Thread. Set 1 to cause Ovf_PMC7=1 (if CPUID.0AH:EAX[15:8] > 7).
    433     ///
    434     UINT32  Ovf_PMC7:1;
    435     UINT32  Reserved1:24;
    436     ///
    437     /// [Bit 32] Thread. Set 1 to cause Ovf_FixedCtr0 = 1.
    438     ///
    439     UINT32  Ovf_FixedCtr0:1;
    440     ///
    441     /// [Bit 33] Thread. Set 1 to cause Ovf_FixedCtr1 = 1.
    442     ///
    443     UINT32  Ovf_FixedCtr1:1;
    444     ///
    445     /// [Bit 34] Thread. Set 1 to cause Ovf_FixedCtr2 = 1.
    446     ///
    447     UINT32  Ovf_FixedCtr2:1;
    448     UINT32  Reserved2:20;
    449     ///
    450     /// [Bit 55] Thread. Set 1 to cause Trace_ToPA_PMI = 1.
    451     ///
    452     UINT32  Trace_ToPA_PMI:1;
    453     UINT32  Reserved3:2;
    454     ///
    455     /// [Bit 58] Thread. Set 1 to cause LBR_Frz = 1.
    456     ///
    457     UINT32  LBR_Frz:1;
    458     ///
    459     /// [Bit 59] Thread. Set 1 to cause CTR_Frz = 1.
    460     ///
    461     UINT32  CTR_Frz:1;
    462     ///
    463     /// [Bit 60] Thread. Set 1 to cause ASCI = 1.
    464     ///
    465     UINT32  ASCI:1;
    466     ///
    467     /// [Bit 61] Thread. Set 1 to cause Ovf_Uncore.
    468     ///
    469     UINT32  Ovf_Uncore:1;
    470     ///
    471     /// [Bit 62] Thread. Set 1 to cause Ovf_BufDSSAVE.
    472     ///
    473     UINT32  Ovf_BufDSSAVE:1;
    474     UINT32  Reserved4:1;
    475   } Bits;
    476   ///
    477   /// All bit fields as a 64-bit value
    478   ///
    479   UINT64  Uint64;
    480 } MSR_SKYLAKE_IA32_PERF_GLOBAL_STATUS_SET_REGISTER;
    481 
    482 
    483 /**
    484   Thread. FrontEnd Precise Event Condition Select (R/W).
    485 
    486   @param  ECX  MSR_SKYLAKE_PEBS_FRONTEND (0x000003F7)
    487   @param  EAX  Lower 32-bits of MSR value.
    488                Described by the type MSR_SKYLAKE_PEBS_FRONTEND_REGISTER.
    489   @param  EDX  Upper 32-bits of MSR value.
    490                Described by the type MSR_SKYLAKE_PEBS_FRONTEND_REGISTER.
    491 
    492   <b>Example usage</b>
    493   @code
    494   MSR_SKYLAKE_PEBS_FRONTEND_REGISTER  Msr;
    495 
    496   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_PEBS_FRONTEND);
    497   AsmWriteMsr64 (MSR_SKYLAKE_PEBS_FRONTEND, Msr.Uint64);
    498   @endcode
    499   @note MSR_SKYLAKE_PEBS_FRONTEND is defined as MSR_PEBS_FRONTEND in SDM.
    500 **/
    501 #define MSR_SKYLAKE_PEBS_FRONTEND                0x000003F7
    502 
    503 /**
    504   MSR information returned for MSR index #MSR_SKYLAKE_PEBS_FRONTEND
    505 **/
    506 typedef union {
    507   ///
    508   /// Individual bit fields
    509   ///
    510   struct {
    511     ///
    512     /// [Bits 2:0] Event Code Select.
    513     ///
    514     UINT32  EventCodeSelect:3;
    515     UINT32  Reserved1:1;
    516     ///
    517     /// [Bit 4] Event Code Select High.
    518     ///
    519     UINT32  EventCodeSelectHigh:1;
    520     UINT32  Reserved2:3;
    521     ///
    522     /// [Bits 19:8] IDQ_Bubble_Length Specifier.
    523     ///
    524     UINT32  IDQ_Bubble_Length:12;
    525     ///
    526     /// [Bits 22:20] IDQ_Bubble_Width Specifier.
    527     ///
    528     UINT32  IDQ_Bubble_Width:3;
    529     UINT32  Reserved3:9;
    530     UINT32  Reserved4:32;
    531   } Bits;
    532   ///
    533   /// All bit fields as a 32-bit value
    534   ///
    535   UINT32  Uint32;
    536   ///
    537   /// All bit fields as a 64-bit value
    538   ///
    539   UINT64  Uint64;
    540 } MSR_SKYLAKE_PEBS_FRONTEND_REGISTER;
    541 
    542 
    543 /**
    544   Package. PP0 Energy Status (R/O)  See Section 14.9.4, "PP0/PP1 RAPL
    545   Domains.".
    546 
    547   @param  ECX  MSR_SKYLAKE_PP0_ENERGY_STATUS (0x00000639)
    548   @param  EAX  Lower 32-bits of MSR value.
    549   @param  EDX  Upper 32-bits of MSR value.
    550 
    551   <b>Example usage</b>
    552   @code
    553   UINT64  Msr;
    554 
    555   Msr = AsmReadMsr64 (MSR_SKYLAKE_PP0_ENERGY_STATUS);
    556   @endcode
    557   @note MSR_SKYLAKE_PP0_ENERGY_STATUS is defined as MSR_PP0_ENERGY_STATUS in SDM.
    558 **/
    559 #define MSR_SKYLAKE_PP0_ENERGY_STATUS            0x00000639
    560 
    561 
    562 /**
    563   Platform*. Platform Energy Counter. (R/O). This MSR is valid only if both
    564   platform vendor hardware implementation and BIOS enablement support it. This
    565   MSR will read 0 if not valid.
    566 
    567   @param  ECX  MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER (0x0000064D)
    568   @param  EAX  Lower 32-bits of MSR value.
    569                Described by the type MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER_REGISTER.
    570   @param  EDX  Upper 32-bits of MSR value.
    571                Described by the type MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER_REGISTER.
    572 
    573   <b>Example usage</b>
    574   @code
    575   MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER_REGISTER  Msr;
    576 
    577   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER);
    578   @endcode
    579   @note MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER is defined as MSR_PLATFORM_ENERGY_COUNTER in SDM.
    580 **/
    581 #define MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER      0x0000064D
    582 
    583 /**
    584   MSR information returned for MSR index #MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER
    585 **/
    586 typedef union {
    587   ///
    588   /// Individual bit fields
    589   ///
    590   struct {
    591     ///
    592     /// [Bits 31:0] Total energy consumed by all devices in the platform that
    593     /// receive power from integrated power delivery mechanism, Included
    594     /// platform devices are processor cores, SOC, memory, add-on or
    595     /// peripheral devices that get powered directly from the platform power
    596     /// delivery means. The energy units are specified in the
    597     /// MSR_RAPL_POWER_UNIT.Enery_Status_Unit.
    598     ///
    599     UINT32  TotalEnergy:32;
    600     UINT32  Reserved:32;
    601   } Bits;
    602   ///
    603   /// All bit fields as a 32-bit value
    604   ///
    605   UINT32  Uint32;
    606   ///
    607   /// All bit fields as a 64-bit value
    608   ///
    609   UINT64  Uint64;
    610 } MSR_SKYLAKE_PLATFORM_ENERGY_COUNTER_REGISTER;
    611 
    612 
    613 /**
    614   Thread. Productive Performance Count. (R/O). Hardware's view of workload
    615   scalability. See Section 14.4.5.1.
    616 
    617   @param  ECX  MSR_SKYLAKE_PPERF (0x0000064E)
    618   @param  EAX  Lower 32-bits of MSR value.
    619   @param  EDX  Upper 32-bits of MSR value.
    620 
    621   <b>Example usage</b>
    622   @code
    623   UINT64  Msr;
    624 
    625   Msr = AsmReadMsr64 (MSR_SKYLAKE_PPERF);
    626   @endcode
    627   @note MSR_SKYLAKE_PPERF is defined as MSR_PPERF in SDM.
    628 **/
    629 #define MSR_SKYLAKE_PPERF                        0x0000064E
    630 
    631 
    632 /**
    633   Package. Indicator of Frequency Clipping in Processor Cores (R/W) (frequency
    634   refers to processor core frequency).
    635 
    636   @param  ECX  MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS (0x0000064F)
    637   @param  EAX  Lower 32-bits of MSR value.
    638                Described by the type MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS_REGISTER.
    639   @param  EDX  Upper 32-bits of MSR value.
    640                Described by the type MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS_REGISTER.
    641 
    642   <b>Example usage</b>
    643   @code
    644   MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS_REGISTER  Msr;
    645 
    646   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS);
    647   AsmWriteMsr64 (MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS, Msr.Uint64);
    648   @endcode
    649   @note MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS is defined as MSR_CORE_PERF_LIMIT_REASONS in SDM.
    650 **/
    651 #define MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS      0x0000064F
    652 
    653 /**
    654   MSR information returned for MSR index #MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS
    655 **/
    656 typedef union {
    657   ///
    658   /// Individual bit fields
    659   ///
    660   struct {
    661     ///
    662     /// [Bit 0] PROCHOT Status (R0) When set, frequency is reduced below the
    663     /// operating system request due to assertion of external PROCHOT.
    664     ///
    665     UINT32  PROCHOT_Status:1;
    666     ///
    667     /// [Bit 1] Thermal Status (R0) When set, frequency is reduced below the
    668     /// operating system request due to a thermal event.
    669     ///
    670     UINT32  ThermalStatus:1;
    671     UINT32  Reserved1:2;
    672     ///
    673     /// [Bit 4] Residency State Regulation Status (R0) When set, frequency is
    674     /// reduced below the operating system request due to residency state
    675     /// regulation limit.
    676     ///
    677     UINT32  ResidencyStateRegulationStatus:1;
    678     ///
    679     /// [Bit 5] Running Average Thermal Limit Status (R0) When set, frequency
    680     /// is reduced below the operating system request due to Running Average
    681     /// Thermal Limit (RATL).
    682     ///
    683     UINT32  RunningAverageThermalLimitStatus:1;
    684     ///
    685     /// [Bit 6] VR Therm Alert Status (R0) When set, frequency is reduced
    686     /// below the operating system request due to a thermal alert from a
    687     /// processor Voltage Regulator (VR).
    688     ///
    689     UINT32  VRThermAlertStatus:1;
    690     ///
    691     /// [Bit 7] VR Therm Design Current Status (R0) When set, frequency is
    692     /// reduced below the operating system request due to VR thermal design
    693     /// current limit.
    694     ///
    695     UINT32  VRThermDesignCurrentStatus:1;
    696     ///
    697     /// [Bit 8] Other Status (R0) When set, frequency is reduced below the
    698     /// operating system request due to electrical or other constraints.
    699     ///
    700     UINT32  OtherStatus:1;
    701     UINT32  Reserved2:1;
    702     ///
    703     /// [Bit 10] Package/Platform-Level Power Limiting PL1 Status (R0) When
    704     /// set, frequency is reduced below the operating system request due to
    705     /// package/platform-level power limiting PL1.
    706     ///
    707     UINT32  PL1Status:1;
    708     ///
    709     /// [Bit 11] Package/Platform-Level PL2 Power Limiting Status (R0) When
    710     /// set, frequency is reduced below the operating system request due to
    711     /// package/platform-level power limiting PL2/PL3.
    712     ///
    713     UINT32  PL2Status:1;
    714     ///
    715     /// [Bit 12] Max Turbo Limit Status (R0) When set, frequency is reduced
    716     /// below the operating system request due to multi-core turbo limits.
    717     ///
    718     UINT32  MaxTurboLimitStatus:1;
    719     ///
    720     /// [Bit 13] Turbo Transition Attenuation Status (R0) When set, frequency
    721     /// is reduced below the operating system request due to Turbo transition
    722     /// attenuation. This prevents performance degradation due to frequent
    723     /// operating ratio changes.
    724     ///
    725     UINT32  TurboTransitionAttenuationStatus:1;
    726     UINT32  Reserved3:2;
    727     ///
    728     /// [Bit 16] PROCHOT Log  When set, indicates that the PROCHOT Status bit
    729     /// has asserted since the log bit was last cleared. This log bit will
    730     /// remain set until cleared by software writing 0.
    731     ///
    732     UINT32  PROCHOT_Log:1;
    733     ///
    734     /// [Bit 17] Thermal Log  When set, indicates that the Thermal Status bit
    735     /// has asserted since the log bit was last cleared. This log bit will
    736     /// remain set until cleared by software writing 0.
    737     ///
    738     UINT32  ThermalLog:1;
    739     UINT32  Reserved4:2;
    740     ///
    741     /// [Bit 20] Residency State Regulation Log  When set, indicates that the
    742     /// Residency State Regulation Status bit has asserted since the log bit
    743     /// was last cleared. This log bit will remain set until cleared by
    744     /// software writing 0.
    745     ///
    746     UINT32  ResidencyStateRegulationLog:1;
    747     ///
    748     /// [Bit 21] Running Average Thermal Limit Log  When set, indicates that
    749     /// the RATL Status bit has asserted since the log bit was last cleared.
    750     /// This log bit will remain set until cleared by software writing 0.
    751     ///
    752     UINT32  RunningAverageThermalLimitLog:1;
    753     ///
    754     /// [Bit 22] VR Therm Alert Log  When set, indicates that the VR Therm
    755     /// Alert Status bit has asserted since the log bit was last cleared. This
    756     /// log bit will remain set until cleared by software writing 0.
    757     ///
    758     UINT32  VRThermAlertLog:1;
    759     ///
    760     /// [Bit 23] VR Thermal Design Current Log  When set, indicates that the
    761     /// VR TDC Status bit has asserted since the log bit was last cleared.
    762     /// This log bit will remain set until cleared by software writing 0.
    763     ///
    764     UINT32  VRThermalDesignCurrentLog:1;
    765     ///
    766     /// [Bit 24] Other Log  When set, indicates that the Other Status bit has
    767     /// asserted since the log bit was last cleared. This log bit will remain
    768     /// set until cleared by software writing 0.
    769     ///
    770     UINT32  OtherLog:1;
    771     UINT32  Reserved5:1;
    772     ///
    773     /// [Bit 26] Package/Platform-Level PL1 Power Limiting Log  When set,
    774     /// indicates that the Package or Platform Level PL1 Power Limiting Status
    775     /// bit has asserted since the log bit was last cleared. This log bit will
    776     /// remain set until cleared by software writing 0.
    777     ///
    778     UINT32  PL1Log:1;
    779     ///
    780     /// [Bit 27] Package/Platform-Level PL2 Power Limiting Log When set,
    781     /// indicates that the Package or Platform Level PL2/PL3 Power Limiting
    782     /// Status bit has asserted since the log bit was last cleared. This log
    783     /// bit will remain set until cleared by software writing 0.
    784     ///
    785     UINT32  PL2Log:1;
    786     ///
    787     /// [Bit 28] Max Turbo Limit Log When set, indicates that the Max Turbo
    788     /// Limit Status bit has asserted since the log bit was last cleared. This
    789     /// log bit will remain set until cleared by software writing 0.
    790     ///
    791     UINT32  MaxTurboLimitLog:1;
    792     ///
    793     /// [Bit 29] Turbo Transition Attenuation Log When set, indicates that the
    794     /// Turbo Transition Attenuation Status bit has asserted since the log bit
    795     /// was last cleared. This log bit will remain set until cleared by
    796     /// software writing 0.
    797     ///
    798     UINT32  TurboTransitionAttenuationLog:1;
    799     UINT32  Reserved6:2;
    800     UINT32  Reserved7:32;
    801   } Bits;
    802   ///
    803   /// All bit fields as a 32-bit value
    804   ///
    805   UINT32  Uint32;
    806   ///
    807   /// All bit fields as a 64-bit value
    808   ///
    809   UINT64  Uint64;
    810 } MSR_SKYLAKE_CORE_PERF_LIMIT_REASONS_REGISTER;
    811 
    812 
    813 /**
    814   Package. HDC Configuration (R/W)..
    815 
    816   @param  ECX  MSR_SKYLAKE_PKG_HDC_CONFIG (0x00000652)
    817   @param  EAX  Lower 32-bits of MSR value.
    818                Described by the type MSR_SKYLAKE_PKG_HDC_CONFIG_REGISTER.
    819   @param  EDX  Upper 32-bits of MSR value.
    820                Described by the type MSR_SKYLAKE_PKG_HDC_CONFIG_REGISTER.
    821 
    822   <b>Example usage</b>
    823   @code
    824   MSR_SKYLAKE_PKG_HDC_CONFIG_REGISTER  Msr;
    825 
    826   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_PKG_HDC_CONFIG);
    827   AsmWriteMsr64 (MSR_SKYLAKE_PKG_HDC_CONFIG, Msr.Uint64);
    828   @endcode
    829   @note MSR_SKYLAKE_PKG_HDC_CONFIG is defined as MSR_PKG_HDC_CONFIG in SDM.
    830 **/
    831 #define MSR_SKYLAKE_PKG_HDC_CONFIG               0x00000652
    832 
    833 /**
    834   MSR information returned for MSR index #MSR_SKYLAKE_PKG_HDC_CONFIG
    835 **/
    836 typedef union {
    837   ///
    838   /// Individual bit fields
    839   ///
    840   struct {
    841     ///
    842     /// [Bits 2:0] PKG_Cx_Monitor.  Configures Package Cx state threshold for
    843     /// MSR_PKG_HDC_DEEP_RESIDENCY.
    844     ///
    845     UINT32  PKG_Cx_Monitor:3;
    846     UINT32  Reserved1:29;
    847     UINT32  Reserved2:32;
    848   } Bits;
    849   ///
    850   /// All bit fields as a 32-bit value
    851   ///
    852   UINT32  Uint32;
    853   ///
    854   /// All bit fields as a 64-bit value
    855   ///
    856   UINT64  Uint64;
    857 } MSR_SKYLAKE_PKG_HDC_CONFIG_REGISTER;
    858 
    859 
    860 /**
    861   Core. Core HDC Idle Residency. (R/O). Core_Cx_Duty_Cycle_Cnt.
    862 
    863   @param  ECX  MSR_SKYLAKE_CORE_HDC_RESIDENCY (0x00000653)
    864   @param  EAX  Lower 32-bits of MSR value.
    865   @param  EDX  Upper 32-bits of MSR value.
    866 
    867   <b>Example usage</b>
    868   @code
    869   UINT64  Msr;
    870 
    871   Msr = AsmReadMsr64 (MSR_SKYLAKE_CORE_HDC_RESIDENCY);
    872   @endcode
    873   @note MSR_SKYLAKE_CORE_HDC_RESIDENCY is defined as MSR_CORE_HDC_RESIDENCY in SDM.
    874 **/
    875 #define MSR_SKYLAKE_CORE_HDC_RESIDENCY           0x00000653
    876 
    877 
    878 /**
    879   Package. Accumulate the cycles the package was in C2 state and at least one
    880   logical processor was in forced idle. (R/O). Pkg_C2_Duty_Cycle_Cnt.
    881 
    882   @param  ECX  MSR_SKYLAKE_PKG_HDC_SHALLOW_RESIDENCY (0x00000655)
    883   @param  EAX  Lower 32-bits of MSR value.
    884   @param  EDX  Upper 32-bits of MSR value.
    885 
    886   <b>Example usage</b>
    887   @code
    888   UINT64  Msr;
    889 
    890   Msr = AsmReadMsr64 (MSR_SKYLAKE_PKG_HDC_SHALLOW_RESIDENCY);
    891   @endcode
    892   @note MSR_SKYLAKE_PKG_HDC_SHALLOW_RESIDENCY is defined as MSR_PKG_HDC_SHALLOW_RESIDENCY in SDM.
    893 **/
    894 #define MSR_SKYLAKE_PKG_HDC_SHALLOW_RESIDENCY    0x00000655
    895 
    896 
    897 /**
    898   Package. Package Cx HDC Idle Residency. (R/O). Pkg_Cx_Duty_Cycle_Cnt.
    899 
    900   @param  ECX  MSR_SKYLAKE_PKG_HDC_DEEP_RESIDENCY (0x00000656)
    901   @param  EAX  Lower 32-bits of MSR value.
    902   @param  EDX  Upper 32-bits of MSR value.
    903 
    904   <b>Example usage</b>
    905   @code
    906   UINT64  Msr;
    907 
    908   Msr = AsmReadMsr64 (MSR_SKYLAKE_PKG_HDC_DEEP_RESIDENCY);
    909   @endcode
    910   @note MSR_SKYLAKE_PKG_HDC_DEEP_RESIDENCY is defined as MSR_PKG_HDC_DEEP_RESIDENCY in SDM.
    911 **/
    912 #define MSR_SKYLAKE_PKG_HDC_DEEP_RESIDENCY       0x00000656
    913 
    914 
    915 /**
    916   Package. Core-count Weighted C0 Residency. (R/O). Increment at the same rate
    917   as the TSC. The increment each cycle is weighted by the number of processor
    918   cores in the package that reside in C0. If N cores are simultaneously in C0,
    919   then each cycle the counter increments by N.
    920 
    921   @param  ECX  MSR_SKYLAKE_WEIGHTED_CORE_C0 (0x00000658)
    922   @param  EAX  Lower 32-bits of MSR value.
    923   @param  EDX  Upper 32-bits of MSR value.
    924 
    925   <b>Example usage</b>
    926   @code
    927   UINT64  Msr;
    928 
    929   Msr = AsmReadMsr64 (MSR_SKYLAKE_WEIGHTED_CORE_C0);
    930   @endcode
    931   @note MSR_SKYLAKE_WEIGHTED_CORE_C0 is defined as MSR_WEIGHTED_CORE_C0 in SDM.
    932 **/
    933 #define MSR_SKYLAKE_WEIGHTED_CORE_C0             0x00000658
    934 
    935 
    936 /**
    937   Package. Any Core C0 Residency. (R/O). Increment at the same rate as the
    938   TSC. The increment each cycle is one if any processor core in the package is
    939   in C0.
    940 
    941   @param  ECX  MSR_SKYLAKE_ANY_CORE_C0 (0x00000659)
    942   @param  EAX  Lower 32-bits of MSR value.
    943   @param  EDX  Upper 32-bits of MSR value.
    944 
    945   <b>Example usage</b>
    946   @code
    947   UINT64  Msr;
    948 
    949   Msr = AsmReadMsr64 (MSR_SKYLAKE_ANY_CORE_C0);
    950   @endcode
    951   @note MSR_SKYLAKE_ANY_CORE_C0 is defined as MSR_ANY_CORE_C0 in SDM.
    952 **/
    953 #define MSR_SKYLAKE_ANY_CORE_C0                  0x00000659
    954 
    955 
    956 /**
    957   Package. Any Graphics Engine C0 Residency. (R/O). Increment at the same rate
    958   as the TSC. The increment each cycle is one if any processor graphic
    959   device's compute engines are in C0.
    960 
    961   @param  ECX  MSR_SKYLAKE_ANY_GFXE_C0 (0x0000065A)
    962   @param  EAX  Lower 32-bits of MSR value.
    963   @param  EDX  Upper 32-bits of MSR value.
    964 
    965   <b>Example usage</b>
    966   @code
    967   UINT64  Msr;
    968 
    969   Msr = AsmReadMsr64 (MSR_SKYLAKE_ANY_GFXE_C0);
    970   @endcode
    971   @note MSR_SKYLAKE_ANY_GFXE_C0 is defined as MSR_ANY_GFXE_C0 in SDM.
    972 **/
    973 #define MSR_SKYLAKE_ANY_GFXE_C0                  0x0000065A
    974 
    975 
    976 /**
    977   Package. Core and Graphics Engine Overlapped C0 Residency. (R/O). Increment
    978   at the same rate as the TSC. The increment each cycle is one if at least one
    979   compute engine of the processor graphics is in C0 and at least one processor
    980   core in the package is also in C0.
    981 
    982   @param  ECX  MSR_SKYLAKE_CORE_GFXE_OVERLAP_C0 (0x0000065B)
    983   @param  EAX  Lower 32-bits of MSR value.
    984   @param  EDX  Upper 32-bits of MSR value.
    985 
    986   <b>Example usage</b>
    987   @code
    988   UINT64  Msr;
    989 
    990   Msr = AsmReadMsr64 (MSR_SKYLAKE_CORE_GFXE_OVERLAP_C0);
    991   @endcode
    992   @note MSR_SKYLAKE_CORE_GFXE_OVERLAP_C0 is defined as MSR_CORE_GFXE_OVERLAP_C0 in SDM.
    993 **/
    994 #define MSR_SKYLAKE_CORE_GFXE_OVERLAP_C0         0x0000065B
    995 
    996 
    997 /**
    998   Platform*. Platform Power Limit Control (R/W-L) Allows platform BIOS to
    999   limit power consumption of the platform devices to the specified values. The
   1000   Long Duration power consumption is specified via Platform_Power_Limit_1 and
   1001   Platform_Power_Limit_1_Time. The Short Duration power consumption limit is
   1002   specified via the Platform_Power_Limit_2 with duration chosen by the
   1003   processor. The processor implements an exponential-weighted algorithm in the
   1004   placement of the time windows.
   1005 
   1006   @param  ECX  MSR_SKYLAKE_PLATFORM_POWER_LIMIT (0x0000065C)
   1007   @param  EAX  Lower 32-bits of MSR value.
   1008                Described by the type MSR_SKYLAKE_PLATFORM_POWER_LIMIT_REGISTER.
   1009   @param  EDX  Upper 32-bits of MSR value.
   1010                Described by the type MSR_SKYLAKE_PLATFORM_POWER_LIMIT_REGISTER.
   1011 
   1012   <b>Example usage</b>
   1013   @code
   1014   MSR_SKYLAKE_PLATFORM_POWER_LIMIT_REGISTER  Msr;
   1015 
   1016   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_PLATFORM_POWER_LIMIT);
   1017   AsmWriteMsr64 (MSR_SKYLAKE_PLATFORM_POWER_LIMIT, Msr.Uint64);
   1018   @endcode
   1019   @note MSR_SKYLAKE_PLATFORM_POWER_LIMIT is defined as MSR_PLATFORM_POWER_LIMIT in SDM.
   1020 **/
   1021 #define MSR_SKYLAKE_PLATFORM_POWER_LIMIT         0x0000065C
   1022 
   1023 /**
   1024   MSR information returned for MSR index #MSR_SKYLAKE_PLATFORM_POWER_LIMIT
   1025 **/
   1026 typedef union {
   1027   ///
   1028   /// Individual bit fields
   1029   ///
   1030   struct {
   1031     ///
   1032     /// [Bits 14:0] Platform Power Limit #1. Average Power limit value which
   1033     /// the platform must not exceed over a time window as specified by
   1034     /// Power_Limit_1_TIME field. The default value is the Thermal Design
   1035     /// Power (TDP) and varies with product skus. The unit is specified in
   1036     /// MSR_RAPLPOWER_UNIT.
   1037     ///
   1038     UINT32  PlatformPowerLimit1:15;
   1039     ///
   1040     /// [Bit 15] Enable Platform Power Limit #1. When set, enables the
   1041     /// processor to apply control policy such that the platform power does
   1042     /// not exceed Platform Power limit #1 over the time window specified by
   1043     /// Power Limit #1 Time Window.
   1044     ///
   1045     UINT32  EnablePlatformPowerLimit1:1;
   1046     ///
   1047     /// [Bit 16] Platform Clamping Limitation #1. When set, allows the
   1048     /// processor to go below the OS requested P states in order to maintain
   1049     /// the power below specified Platform Power Limit #1 value. This bit is
   1050     /// writeable only when CPUID (EAX=6):EAX[4] is set.
   1051     ///
   1052     UINT32  PlatformClampingLimitation1:1;
   1053     ///
   1054     /// [Bits 23:17] Time Window for Platform Power Limit #1. Specifies the
   1055     /// duration of the time window over which Platform Power Limit 1 value
   1056     /// should be maintained for sustained long duration. This field is made
   1057     /// up of two numbers from the following equation: Time Window = (float)
   1058     /// ((1+(X/4))*(2^Y)), where: X. = POWER_LIMIT_1_TIME[23:22] Y. =
   1059     /// POWER_LIMIT_1_TIME[21:17]. The maximum allowed value in this field is
   1060     /// defined in MSR_PKG_POWER_INFO[PKG_MAX_WIN]. The default value is 0DH,
   1061     /// The unit is specified in MSR_RAPLPOWER_UNIT[Time Unit].
   1062     ///
   1063     UINT32  Time:7;
   1064     UINT32  Reserved1:8;
   1065     ///
   1066     /// [Bits 46:32] Platform Power Limit #2. Average Power limit value which
   1067     /// the platform must not exceed over the Short Duration time window
   1068     /// chosen by the processor. The recommended default value is 1.25 times
   1069     /// the Long Duration Power Limit (i.e. Platform Power Limit # 1).
   1070     ///
   1071     UINT32  PlatformPowerLimit2:15;
   1072     ///
   1073     /// [Bit 47] Enable Platform Power Limit #2. When set, enables the
   1074     /// processor to apply control policy such that the platform power does
   1075     /// not exceed Platform Power limit #2 over the Short Duration time window.
   1076     ///
   1077     UINT32  EnablePlatformPowerLimit2:1;
   1078     ///
   1079     /// [Bit 48] Platform Clamping Limitation #2. When set, allows the
   1080     /// processor to go below the OS requested P states in order to maintain
   1081     /// the power below specified Platform Power Limit #2 value.
   1082     ///
   1083     UINT32  PlatformClampingLimitation2:1;
   1084     UINT32  Reserved2:14;
   1085     ///
   1086     /// [Bit 63] Lock. Setting this bit will lock all other bits of this MSR
   1087     /// until system RESET.
   1088     ///
   1089     UINT32  Lock:1;
   1090   } Bits;
   1091   ///
   1092   /// All bit fields as a 64-bit value
   1093   ///
   1094   UINT64  Uint64;
   1095 } MSR_SKYLAKE_PLATFORM_POWER_LIMIT_REGISTER;
   1096 
   1097 
   1098 /**
   1099   Thread. Last Branch Record n From IP (R/W) One of 32 triplets of last
   1100   branch record registers on the last branch record stack. This part of the
   1101   stack contains pointers to the source instruction. See also: -  Last Branch
   1102   Record Stack TOS at 1C9H -  Section 17.10.
   1103 
   1104   @param  ECX  MSR_SKYLAKE_LASTBRANCH_n_FROM_IP
   1105   @param  EAX  Lower 32-bits of MSR value.
   1106   @param  EDX  Upper 32-bits of MSR value.
   1107 
   1108   <b>Example usage</b>
   1109   @code
   1110   UINT64  Msr;
   1111 
   1112   Msr = AsmReadMsr64 (MSR_SKYLAKE_LASTBRANCH_16_FROM_IP);
   1113   AsmWriteMsr64 (MSR_SKYLAKE_LASTBRANCH_16_FROM_IP, Msr);
   1114   @endcode
   1115   @note MSR_SKYLAKE_LASTBRANCH_16_FROM_IP is defined as MSR_LASTBRANCH_16_FROM_IP in SDM.
   1116         MSR_SKYLAKE_LASTBRANCH_17_FROM_IP is defined as MSR_LASTBRANCH_17_FROM_IP in SDM.
   1117         MSR_SKYLAKE_LASTBRANCH_18_FROM_IP is defined as MSR_LASTBRANCH_18_FROM_IP in SDM.
   1118         MSR_SKYLAKE_LASTBRANCH_19_FROM_IP is defined as MSR_LASTBRANCH_19_FROM_IP in SDM.
   1119         MSR_SKYLAKE_LASTBRANCH_20_FROM_IP is defined as MSR_LASTBRANCH_20_FROM_IP in SDM.
   1120         MSR_SKYLAKE_LASTBRANCH_21_FROM_IP is defined as MSR_LASTBRANCH_21_FROM_IP in SDM.
   1121         MSR_SKYLAKE_LASTBRANCH_22_FROM_IP is defined as MSR_LASTBRANCH_22_FROM_IP in SDM.
   1122         MSR_SKYLAKE_LASTBRANCH_23_FROM_IP is defined as MSR_LASTBRANCH_23_FROM_IP in SDM.
   1123         MSR_SKYLAKE_LASTBRANCH_24_FROM_IP is defined as MSR_LASTBRANCH_24_FROM_IP in SDM.
   1124         MSR_SKYLAKE_LASTBRANCH_25_FROM_IP is defined as MSR_LASTBRANCH_25_FROM_IP in SDM.
   1125         MSR_SKYLAKE_LASTBRANCH_26_FROM_IP is defined as MSR_LASTBRANCH_26_FROM_IP in SDM.
   1126         MSR_SKYLAKE_LASTBRANCH_27_FROM_IP is defined as MSR_LASTBRANCH_27_FROM_IP in SDM.
   1127         MSR_SKYLAKE_LASTBRANCH_28_FROM_IP is defined as MSR_LASTBRANCH_28_FROM_IP in SDM.
   1128         MSR_SKYLAKE_LASTBRANCH_29_FROM_IP is defined as MSR_LASTBRANCH_29_FROM_IP in SDM.
   1129         MSR_SKYLAKE_LASTBRANCH_30_FROM_IP is defined as MSR_LASTBRANCH_30_FROM_IP in SDM.
   1130         MSR_SKYLAKE_LASTBRANCH_31_FROM_IP is defined as MSR_LASTBRANCH_31_FROM_IP in SDM.
   1131   @{
   1132 **/
   1133 #define MSR_SKYLAKE_LASTBRANCH_16_FROM_IP        0x00000690
   1134 #define MSR_SKYLAKE_LASTBRANCH_17_FROM_IP        0x00000691
   1135 #define MSR_SKYLAKE_LASTBRANCH_18_FROM_IP        0x00000692
   1136 #define MSR_SKYLAKE_LASTBRANCH_19_FROM_IP        0x00000693
   1137 #define MSR_SKYLAKE_LASTBRANCH_20_FROM_IP        0x00000694
   1138 #define MSR_SKYLAKE_LASTBRANCH_21_FROM_IP        0x00000695
   1139 #define MSR_SKYLAKE_LASTBRANCH_22_FROM_IP        0x00000696
   1140 #define MSR_SKYLAKE_LASTBRANCH_23_FROM_IP        0x00000697
   1141 #define MSR_SKYLAKE_LASTBRANCH_24_FROM_IP        0x00000698
   1142 #define MSR_SKYLAKE_LASTBRANCH_25_FROM_IP        0x00000699
   1143 #define MSR_SKYLAKE_LASTBRANCH_26_FROM_IP        0x0000069A
   1144 #define MSR_SKYLAKE_LASTBRANCH_27_FROM_IP        0x0000069B
   1145 #define MSR_SKYLAKE_LASTBRANCH_28_FROM_IP        0x0000069C
   1146 #define MSR_SKYLAKE_LASTBRANCH_29_FROM_IP        0x0000069D
   1147 #define MSR_SKYLAKE_LASTBRANCH_30_FROM_IP        0x0000069E
   1148 #define MSR_SKYLAKE_LASTBRANCH_31_FROM_IP        0x0000069F
   1149 /// @}
   1150 
   1151 
   1152 /**
   1153   Package. Indicator of Frequency Clipping in the Processor Graphics (R/W)
   1154   (frequency refers to processor graphics frequency).
   1155 
   1156   @param  ECX  MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS (0x000006B0)
   1157   @param  EAX  Lower 32-bits of MSR value.
   1158                Described by the type MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS_REGISTER.
   1159   @param  EDX  Upper 32-bits of MSR value.
   1160                Described by the type MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS_REGISTER.
   1161 
   1162   <b>Example usage</b>
   1163   @code
   1164   MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS_REGISTER  Msr;
   1165 
   1166   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS);
   1167   AsmWriteMsr64 (MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS, Msr.Uint64);
   1168   @endcode
   1169   @note MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS is defined as MSR_GRAPHICS_PERF_LIMIT_REASONS in SDM.
   1170 **/
   1171 #define MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS  0x000006B0
   1172 
   1173 /**
   1174   MSR information returned for MSR index
   1175   #MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS
   1176 **/
   1177 typedef union {
   1178   ///
   1179   /// Individual bit fields
   1180   ///
   1181   struct {
   1182     ///
   1183     /// [Bit 0] PROCHOT Status (R0) When set, frequency is reduced due to
   1184     /// assertion of external PROCHOT.
   1185     ///
   1186     UINT32  PROCHOT_Status:1;
   1187     ///
   1188     /// [Bit 1] Thermal Status (R0) When set, frequency is reduced due to a
   1189     /// thermal event.
   1190     ///
   1191     UINT32  ThermalStatus:1;
   1192     UINT32  Reserved1:3;
   1193     ///
   1194     /// [Bit 5] Running Average Thermal Limit Status (R0) When set, frequency
   1195     /// is reduced due to running average thermal limit.
   1196     ///
   1197     UINT32  RunningAverageThermalLimitStatus:1;
   1198     ///
   1199     /// [Bit 6] VR Therm Alert Status (R0) When set, frequency is reduced due
   1200     /// to a thermal alert from a processor Voltage Regulator.
   1201     ///
   1202     UINT32  VRThermAlertStatus:1;
   1203     ///
   1204     /// [Bit 7] VR Thermal Design Current Status (R0) When set, frequency is
   1205     /// reduced due to VR TDC limit.
   1206     ///
   1207     UINT32  VRThermalDesignCurrentStatus:1;
   1208     ///
   1209     /// [Bit 8] Other Status (R0) When set, frequency is reduced due to
   1210     /// electrical or other constraints.
   1211     ///
   1212     UINT32  OtherStatus:1;
   1213     UINT32  Reserved2:1;
   1214     ///
   1215     /// [Bit 10] Package/Platform-Level Power Limiting PL1 Status (R0) When
   1216     /// set, frequency is reduced due to package/platform-level power limiting
   1217     /// PL1.
   1218     ///
   1219     UINT32  PL1Status:1;
   1220     ///
   1221     /// [Bit 11] Package/Platform-Level PL2 Power Limiting Status (R0) When
   1222     /// set, frequency is reduced due to package/platform-level power limiting
   1223     /// PL2/PL3.
   1224     ///
   1225     UINT32  PL2Status:1;
   1226     ///
   1227     /// [Bit 12] Inefficient Operation Status (R0) When set, processor
   1228     /// graphics frequency is operating below target frequency.
   1229     ///
   1230     UINT32  InefficientOperationStatus:1;
   1231     UINT32  Reserved3:3;
   1232     ///
   1233     /// [Bit 16] PROCHOT Log  When set, indicates that the PROCHOT Status bit
   1234     /// has asserted since the log bit was last cleared. This log bit will
   1235     /// remain set until cleared by software writing 0.
   1236     ///
   1237     UINT32  PROCHOT_Log:1;
   1238     ///
   1239     /// [Bit 17] Thermal Log  When set, indicates that the Thermal Status bit
   1240     /// has asserted since the log bit was last cleared. This log bit will
   1241     /// remain set until cleared by software writing 0.
   1242     ///
   1243     UINT32  ThermalLog:1;
   1244     UINT32  Reserved4:3;
   1245     ///
   1246     /// [Bit 21] Running Average Thermal Limit Log  When set, indicates that
   1247     /// the RATL Status bit has asserted since the log bit was last cleared.
   1248     /// This log bit will remain set until cleared by software writing 0.
   1249     ///
   1250     UINT32  RunningAverageThermalLimitLog:1;
   1251     ///
   1252     /// [Bit 22] VR Therm Alert Log  When set, indicates that the VR Therm
   1253     /// Alert Status bit has asserted since the log bit was last cleared. This
   1254     /// log bit will remain set until cleared by software writing 0.
   1255     ///
   1256     UINT32  VRThermAlertLog:1;
   1257     ///
   1258     /// [Bit 23] VR Thermal Design Current Log  When set, indicates that the
   1259     /// VR Therm Alert Status bit has asserted since the log bit was last
   1260     /// cleared. This log bit will remain set until cleared by software
   1261     /// writing 0.
   1262     ///
   1263     UINT32  VRThermalDesignCurrentLog:1;
   1264     ///
   1265     /// [Bit 24] Other Log  When set, indicates that the OTHER Status bit has
   1266     /// asserted since the log bit was last cleared. This log bit will remain
   1267     /// set until cleared by software writing 0.
   1268     ///
   1269     UINT32  OtherLog:1;
   1270     UINT32  Reserved5:1;
   1271     ///
   1272     /// [Bit 26] Package/Platform-Level PL1 Power Limiting Log  When set,
   1273     /// indicates that the Package/Platform Level PL1 Power Limiting Status
   1274     /// bit has asserted since the log bit was last cleared. This log bit will
   1275     /// remain set until cleared by software writing 0.
   1276     ///
   1277     UINT32  PL1Log:1;
   1278     ///
   1279     /// [Bit 27] Package/Platform-Level PL2 Power Limiting Log When set,
   1280     /// indicates that the Package/Platform Level PL2 Power Limiting Status
   1281     /// bit has asserted since the log bit was last cleared. This log bit will
   1282     /// remain set until cleared by software writing 0.
   1283     ///
   1284     UINT32  PL2Log:1;
   1285     ///
   1286     /// [Bit 28] Inefficient Operation Log When set, indicates that the
   1287     /// Inefficient Operation Status bit has asserted since the log bit was
   1288     /// last cleared. This log bit will remain set until cleared by software
   1289     /// writing 0.
   1290     ///
   1291     UINT32  InefficientOperationLog:1;
   1292     UINT32  Reserved6:3;
   1293     UINT32  Reserved7:32;
   1294   } Bits;
   1295   ///
   1296   /// All bit fields as a 32-bit value
   1297   ///
   1298   UINT32  Uint32;
   1299   ///
   1300   /// All bit fields as a 64-bit value
   1301   ///
   1302   UINT64  Uint64;
   1303 } MSR_SKYLAKE_GRAPHICS_PERF_LIMIT_REASONS_REGISTER;
   1304 
   1305 
   1306 /**
   1307   Package. Indicator of Frequency Clipping in the Ring Interconnect (R/W)
   1308   (frequency refers to ring interconnect in the uncore).
   1309 
   1310   @param  ECX  MSR_SKYLAKE_RING_PERF_LIMIT_REASONS (0x000006B1)
   1311   @param  EAX  Lower 32-bits of MSR value.
   1312                Described by the type MSR_SKYLAKE_RING_PERF_LIMIT_REASONS_REGISTER.
   1313   @param  EDX  Upper 32-bits of MSR value.
   1314                Described by the type MSR_SKYLAKE_RING_PERF_LIMIT_REASONS_REGISTER.
   1315 
   1316   <b>Example usage</b>
   1317   @code
   1318   MSR_SKYLAKE_RING_PERF_LIMIT_REASONS_REGISTER  Msr;
   1319 
   1320   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_RING_PERF_LIMIT_REASONS);
   1321   AsmWriteMsr64 (MSR_SKYLAKE_RING_PERF_LIMIT_REASONS, Msr.Uint64);
   1322   @endcode
   1323   @note MSR_SKYLAKE_RING_PERF_LIMIT_REASONS is defined as MSR_RING_PERF_LIMIT_REASONS in SDM.
   1324 **/
   1325 #define MSR_SKYLAKE_RING_PERF_LIMIT_REASONS      0x000006B1
   1326 
   1327 /**
   1328   MSR information returned for MSR index #MSR_SKYLAKE_RING_PERF_LIMIT_REASONS
   1329 **/
   1330 typedef union {
   1331   ///
   1332   /// Individual bit fields
   1333   ///
   1334   struct {
   1335     ///
   1336     /// [Bit 0] PROCHOT Status (R0) When set, frequency is reduced due to
   1337     /// assertion of external PROCHOT.
   1338     ///
   1339     UINT32  PROCHOT_Status:1;
   1340     ///
   1341     /// [Bit 1] Thermal Status (R0) When set, frequency is reduced due to a
   1342     /// thermal event.
   1343     ///
   1344     UINT32  ThermalStatus:1;
   1345     UINT32  Reserved1:3;
   1346     ///
   1347     /// [Bit 5] Running Average Thermal Limit Status (R0) When set, frequency
   1348     /// is reduced due to running average thermal limit.
   1349     ///
   1350     UINT32  RunningAverageThermalLimitStatus:1;
   1351     ///
   1352     /// [Bit 6] VR Therm Alert Status (R0) When set, frequency is reduced due
   1353     /// to a thermal alert from a processor Voltage Regulator.
   1354     ///
   1355     UINT32  VRThermAlertStatus:1;
   1356     ///
   1357     /// [Bit 7] VR Thermal Design Current Status (R0) When set, frequency is
   1358     /// reduced due to VR TDC limit.
   1359     ///
   1360     UINT32  VRThermalDesignCurrentStatus:1;
   1361     ///
   1362     /// [Bit 8] Other Status (R0) When set, frequency is reduced due to
   1363     /// electrical or other constraints.
   1364     ///
   1365     UINT32  OtherStatus:1;
   1366     UINT32  Reserved2:1;
   1367     ///
   1368     /// [Bit 10] Package/Platform-Level Power Limiting PL1 Status (R0) When
   1369     /// set, frequency is reduced due to package/Platform-level power limiting
   1370     /// PL1.
   1371     ///
   1372     UINT32  PL1Status:1;
   1373     ///
   1374     /// [Bit 11] Package/Platform-Level PL2 Power Limiting Status (R0) When
   1375     /// set, frequency is reduced due to package/Platform-level power limiting
   1376     /// PL2/PL3.
   1377     ///
   1378     UINT32  PL2Status:1;
   1379     UINT32  Reserved3:4;
   1380     ///
   1381     /// [Bit 16] PROCHOT Log  When set, indicates that the PROCHOT Status bit
   1382     /// has asserted since the log bit was last cleared. This log bit will
   1383     /// remain set until cleared by software writing 0.
   1384     ///
   1385     UINT32  PROCHOT_Log:1;
   1386     ///
   1387     /// [Bit 17] Thermal Log  When set, indicates that the Thermal Status bit
   1388     /// has asserted since the log bit was last cleared. This log bit will
   1389     /// remain set until cleared by software writing 0.
   1390     ///
   1391     UINT32  ThermalLog:1;
   1392     UINT32  Reserved4:3;
   1393     ///
   1394     /// [Bit 21] Running Average Thermal Limit Log  When set, indicates that
   1395     /// the RATL Status bit has asserted since the log bit was last cleared.
   1396     /// This log bit will remain set until cleared by software writing 0.
   1397     ///
   1398     UINT32  RunningAverageThermalLimitLog:1;
   1399     ///
   1400     /// [Bit 22] VR Therm Alert Log  When set, indicates that the VR Therm
   1401     /// Alert Status bit has asserted since the log bit was last cleared. This
   1402     /// log bit will remain set until cleared by software writing 0.
   1403     ///
   1404     UINT32  VRThermAlertLog:1;
   1405     ///
   1406     /// [Bit 23] VR Thermal Design Current Log  When set, indicates that the
   1407     /// VR Therm Alert Status bit has asserted since the log bit was last
   1408     /// cleared. This log bit will remain set until cleared by software
   1409     /// writing 0.
   1410     ///
   1411     UINT32  VRThermalDesignCurrentLog:1;
   1412     ///
   1413     /// [Bit 24] Other Log  When set, indicates that the OTHER Status bit has
   1414     /// asserted since the log bit was last cleared. This log bit will remain
   1415     /// set until cleared by software writing 0.
   1416     ///
   1417     UINT32  OtherLog:1;
   1418     UINT32  Reserved5:1;
   1419     ///
   1420     /// [Bit 26] Package/Platform-Level PL1 Power Limiting Log  When set,
   1421     /// indicates that the Package/Platform Level PL1 Power Limiting Status
   1422     /// bit has asserted since the log bit was last cleared. This log bit will
   1423     /// remain set until cleared by software writing 0.
   1424     ///
   1425     UINT32  PL1Log:1;
   1426     ///
   1427     /// [Bit 27] Package/Platform-Level PL2 Power Limiting Log When set,
   1428     /// indicates that the Package/Platform Level PL2 Power Limiting Status
   1429     /// bit has asserted since the log bit was last cleared. This log bit will
   1430     /// remain set until cleared by software writing 0.
   1431     ///
   1432     UINT32  PL2Log:1;
   1433     UINT32  Reserved6:4;
   1434     UINT32  Reserved7:32;
   1435   } Bits;
   1436   ///
   1437   /// All bit fields as a 32-bit value
   1438   ///
   1439   UINT32  Uint32;
   1440   ///
   1441   /// All bit fields as a 64-bit value
   1442   ///
   1443   UINT64  Uint64;
   1444 } MSR_SKYLAKE_RING_PERF_LIMIT_REASONS_REGISTER;
   1445 
   1446 
   1447 /**
   1448   Thread. Last Branch Record n To IP (R/W) One of 32 triplets of last branch
   1449   record registers on the last branch record stack. This part of the stack
   1450   contains pointers to the destination instruction. See also: -  Last Branch
   1451   Record Stack TOS at 1C9H -  Section 17.10.
   1452 
   1453   @param  ECX  MSR_SKYLAKE_LASTBRANCH_n_TO_IP
   1454   @param  EAX  Lower 32-bits of MSR value.
   1455   @param  EDX  Upper 32-bits of MSR value.
   1456 
   1457   <b>Example usage</b>
   1458   @code
   1459   UINT64  Msr;
   1460 
   1461   Msr = AsmReadMsr64 (MSR_SKYLAKE_LASTBRANCH_16_TO_IP);
   1462   AsmWriteMsr64 (MSR_SKYLAKE_LASTBRANCH_16_TO_IP, Msr);
   1463   @endcode
   1464   @note MSR_SKYLAKE_LASTBRANCH_16_TO_IP is defined as MSR_LASTBRANCH_16_TO_IP in SDM.
   1465         MSR_SKYLAKE_LASTBRANCH_17_TO_IP is defined as MSR_LASTBRANCH_17_TO_IP in SDM.
   1466         MSR_SKYLAKE_LASTBRANCH_18_TO_IP is defined as MSR_LASTBRANCH_18_TO_IP in SDM.
   1467         MSR_SKYLAKE_LASTBRANCH_19_TO_IP is defined as MSR_LASTBRANCH_19_TO_IP in SDM.
   1468         MSR_SKYLAKE_LASTBRANCH_20_TO_IP is defined as MSR_LASTBRANCH_20_TO_IP in SDM.
   1469         MSR_SKYLAKE_LASTBRANCH_21_TO_IP is defined as MSR_LASTBRANCH_21_TO_IP in SDM.
   1470         MSR_SKYLAKE_LASTBRANCH_22_TO_IP is defined as MSR_LASTBRANCH_22_TO_IP in SDM.
   1471         MSR_SKYLAKE_LASTBRANCH_23_TO_IP is defined as MSR_LASTBRANCH_23_TO_IP in SDM.
   1472         MSR_SKYLAKE_LASTBRANCH_24_TO_IP is defined as MSR_LASTBRANCH_24_TO_IP in SDM.
   1473         MSR_SKYLAKE_LASTBRANCH_25_TO_IP is defined as MSR_LASTBRANCH_25_TO_IP in SDM.
   1474         MSR_SKYLAKE_LASTBRANCH_26_TO_IP is defined as MSR_LASTBRANCH_26_TO_IP in SDM.
   1475         MSR_SKYLAKE_LASTBRANCH_27_TO_IP is defined as MSR_LASTBRANCH_27_TO_IP in SDM.
   1476         MSR_SKYLAKE_LASTBRANCH_28_TO_IP is defined as MSR_LASTBRANCH_28_TO_IP in SDM.
   1477         MSR_SKYLAKE_LASTBRANCH_29_TO_IP is defined as MSR_LASTBRANCH_29_TO_IP in SDM.
   1478         MSR_SKYLAKE_LASTBRANCH_30_TO_IP is defined as MSR_LASTBRANCH_30_TO_IP in SDM.
   1479         MSR_SKYLAKE_LASTBRANCH_31_TO_IP is defined as MSR_LASTBRANCH_31_TO_IP in SDM.
   1480   @{
   1481 **/
   1482 #define MSR_SKYLAKE_LASTBRANCH_16_TO_IP          0x000006D0
   1483 #define MSR_SKYLAKE_LASTBRANCH_17_TO_IP          0x000006D1
   1484 #define MSR_SKYLAKE_LASTBRANCH_18_TO_IP          0x000006D2
   1485 #define MSR_SKYLAKE_LASTBRANCH_19_TO_IP          0x000006D3
   1486 #define MSR_SKYLAKE_LASTBRANCH_20_TO_IP          0x000006D4
   1487 #define MSR_SKYLAKE_LASTBRANCH_21_TO_IP          0x000006D5
   1488 #define MSR_SKYLAKE_LASTBRANCH_22_TO_IP          0x000006D6
   1489 #define MSR_SKYLAKE_LASTBRANCH_23_TO_IP          0x000006D7
   1490 #define MSR_SKYLAKE_LASTBRANCH_24_TO_IP          0x000006D8
   1491 #define MSR_SKYLAKE_LASTBRANCH_25_TO_IP          0x000006D9
   1492 #define MSR_SKYLAKE_LASTBRANCH_26_TO_IP          0x000006DA
   1493 #define MSR_SKYLAKE_LASTBRANCH_27_TO_IP          0x000006DB
   1494 #define MSR_SKYLAKE_LASTBRANCH_28_TO_IP          0x000006DC
   1495 #define MSR_SKYLAKE_LASTBRANCH_29_TO_IP          0x000006DD
   1496 #define MSR_SKYLAKE_LASTBRANCH_30_TO_IP          0x000006DE
   1497 #define MSR_SKYLAKE_LASTBRANCH_31_TO_IP          0x000006DF
   1498 /// @}
   1499 
   1500 
   1501 /**
   1502   Thread. Last Branch Record n Additional Information (R/W) One of 32 triplet
   1503   of last branch record registers on the last branch record stack. This part
   1504   of the stack contains flag, TSX-related and elapsed cycle information. See
   1505   also: -  Last Branch Record Stack TOS at 1C9H -  Section 17.7.1, "LBR
   1506   Stack.".
   1507 
   1508   @param  ECX  MSR_SKYLAKE_LBR_INFO_n
   1509   @param  EAX  Lower 32-bits of MSR value.
   1510   @param  EDX  Upper 32-bits of MSR value.
   1511 
   1512   <b>Example usage</b>
   1513   @code
   1514   UINT64  Msr;
   1515 
   1516   Msr = AsmReadMsr64 (MSR_SKYLAKE_LBR_INFO_0);
   1517   AsmWriteMsr64 (MSR_SKYLAKE_LBR_INFO_0, Msr);
   1518   @endcode
   1519   @note MSR_SKYLAKE_LBR_INFO_0  is defined as MSR_LBR_INFO_0  in SDM.
   1520         MSR_SKYLAKE_LBR_INFO_1  is defined as MSR_LBR_INFO_1  in SDM.
   1521         MSR_SKYLAKE_LBR_INFO_2  is defined as MSR_LBR_INFO_2  in SDM.
   1522         MSR_SKYLAKE_LBR_INFO_3  is defined as MSR_LBR_INFO_3  in SDM.
   1523         MSR_SKYLAKE_LBR_INFO_4  is defined as MSR_LBR_INFO_4  in SDM.
   1524         MSR_SKYLAKE_LBR_INFO_5  is defined as MSR_LBR_INFO_5  in SDM.
   1525         MSR_SKYLAKE_LBR_INFO_6  is defined as MSR_LBR_INFO_6  in SDM.
   1526         MSR_SKYLAKE_LBR_INFO_7  is defined as MSR_LBR_INFO_7  in SDM.
   1527         MSR_SKYLAKE_LBR_INFO_8  is defined as MSR_LBR_INFO_8  in SDM.
   1528         MSR_SKYLAKE_LBR_INFO_9  is defined as MSR_LBR_INFO_9  in SDM.
   1529         MSR_SKYLAKE_LBR_INFO_10 is defined as MSR_LBR_INFO_10 in SDM.
   1530         MSR_SKYLAKE_LBR_INFO_11 is defined as MSR_LBR_INFO_11 in SDM.
   1531         MSR_SKYLAKE_LBR_INFO_12 is defined as MSR_LBR_INFO_12 in SDM.
   1532         MSR_SKYLAKE_LBR_INFO_13 is defined as MSR_LBR_INFO_13 in SDM.
   1533         MSR_SKYLAKE_LBR_INFO_14 is defined as MSR_LBR_INFO_14 in SDM.
   1534         MSR_SKYLAKE_LBR_INFO_15 is defined as MSR_LBR_INFO_15 in SDM.
   1535         MSR_SKYLAKE_LBR_INFO_16 is defined as MSR_LBR_INFO_16 in SDM.
   1536         MSR_SKYLAKE_LBR_INFO_17 is defined as MSR_LBR_INFO_17 in SDM.
   1537         MSR_SKYLAKE_LBR_INFO_18 is defined as MSR_LBR_INFO_18 in SDM.
   1538         MSR_SKYLAKE_LBR_INFO_19 is defined as MSR_LBR_INFO_19 in SDM.
   1539         MSR_SKYLAKE_LBR_INFO_20 is defined as MSR_LBR_INFO_20 in SDM.
   1540         MSR_SKYLAKE_LBR_INFO_21 is defined as MSR_LBR_INFO_21 in SDM.
   1541         MSR_SKYLAKE_LBR_INFO_22 is defined as MSR_LBR_INFO_22 in SDM.
   1542         MSR_SKYLAKE_LBR_INFO_23 is defined as MSR_LBR_INFO_23 in SDM.
   1543         MSR_SKYLAKE_LBR_INFO_24 is defined as MSR_LBR_INFO_24 in SDM.
   1544         MSR_SKYLAKE_LBR_INFO_25 is defined as MSR_LBR_INFO_25 in SDM.
   1545         MSR_SKYLAKE_LBR_INFO_26 is defined as MSR_LBR_INFO_26 in SDM.
   1546         MSR_SKYLAKE_LBR_INFO_27 is defined as MSR_LBR_INFO_27 in SDM.
   1547         MSR_SKYLAKE_LBR_INFO_28 is defined as MSR_LBR_INFO_28 in SDM.
   1548         MSR_SKYLAKE_LBR_INFO_29 is defined as MSR_LBR_INFO_29 in SDM.
   1549         MSR_SKYLAKE_LBR_INFO_30 is defined as MSR_LBR_INFO_30 in SDM.
   1550         MSR_SKYLAKE_LBR_INFO_31 is defined as MSR_LBR_INFO_31 in SDM.
   1551   @{
   1552 **/
   1553 #define MSR_SKYLAKE_LBR_INFO_0                   0x00000DC0
   1554 #define MSR_SKYLAKE_LBR_INFO_1                   0x00000DC1
   1555 #define MSR_SKYLAKE_LBR_INFO_2                   0x00000DC2
   1556 #define MSR_SKYLAKE_LBR_INFO_3                   0x00000DC3
   1557 #define MSR_SKYLAKE_LBR_INFO_4                   0x00000DC4
   1558 #define MSR_SKYLAKE_LBR_INFO_5                   0x00000DC5
   1559 #define MSR_SKYLAKE_LBR_INFO_6                   0x00000DC6
   1560 #define MSR_SKYLAKE_LBR_INFO_7                   0x00000DC7
   1561 #define MSR_SKYLAKE_LBR_INFO_8                   0x00000DC8
   1562 #define MSR_SKYLAKE_LBR_INFO_9                   0x00000DC9
   1563 #define MSR_SKYLAKE_LBR_INFO_10                  0x00000DCA
   1564 #define MSR_SKYLAKE_LBR_INFO_11                  0x00000DCB
   1565 #define MSR_SKYLAKE_LBR_INFO_12                  0x00000DCC
   1566 #define MSR_SKYLAKE_LBR_INFO_13                  0x00000DCD
   1567 #define MSR_SKYLAKE_LBR_INFO_14                  0x00000DCE
   1568 #define MSR_SKYLAKE_LBR_INFO_15                  0x00000DCF
   1569 #define MSR_SKYLAKE_LBR_INFO_16                  0x00000DD0
   1570 #define MSR_SKYLAKE_LBR_INFO_17                  0x00000DD1
   1571 #define MSR_SKYLAKE_LBR_INFO_18                  0x00000DD2
   1572 #define MSR_SKYLAKE_LBR_INFO_19                  0x00000DD3
   1573 #define MSR_SKYLAKE_LBR_INFO_20                  0x00000DD4
   1574 #define MSR_SKYLAKE_LBR_INFO_21                  0x00000DD5
   1575 #define MSR_SKYLAKE_LBR_INFO_22                  0x00000DD6
   1576 #define MSR_SKYLAKE_LBR_INFO_23                  0x00000DD7
   1577 #define MSR_SKYLAKE_LBR_INFO_24                  0x00000DD8
   1578 #define MSR_SKYLAKE_LBR_INFO_25                  0x00000DD9
   1579 #define MSR_SKYLAKE_LBR_INFO_26                  0x00000DDA
   1580 #define MSR_SKYLAKE_LBR_INFO_27                  0x00000DDB
   1581 #define MSR_SKYLAKE_LBR_INFO_28                  0x00000DDC
   1582 #define MSR_SKYLAKE_LBR_INFO_29                  0x00000DDD
   1583 #define MSR_SKYLAKE_LBR_INFO_30                  0x00000DDE
   1584 #define MSR_SKYLAKE_LBR_INFO_31                  0x00000DDF
   1585 /// @}
   1586 
   1587 
   1588 /**
   1589   Package. Uncore fixed counter control (R/W).
   1590 
   1591   @param  ECX  MSR_SKYLAKE_UNC_PERF_FIXED_CTRL (0x00000394)
   1592   @param  EAX  Lower 32-bits of MSR value.
   1593                Described by the type MSR_SKYLAKE_UNC_PERF_FIXED_CTRL_REGISTER.
   1594   @param  EDX  Upper 32-bits of MSR value.
   1595                Described by the type MSR_SKYLAKE_UNC_PERF_FIXED_CTRL_REGISTER.
   1596 
   1597   <b>Example usage</b>
   1598   @code
   1599   MSR_SKYLAKE_UNC_PERF_FIXED_CTRL_REGISTER  Msr;
   1600 
   1601   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_UNC_PERF_FIXED_CTRL);
   1602   AsmWriteMsr64 (MSR_SKYLAKE_UNC_PERF_FIXED_CTRL, Msr.Uint64);
   1603   @endcode
   1604   @note MSR_SKYLAKE_UNC_PERF_FIXED_CTRL is defined as MSR_UNC_PERF_FIXED_CTRL in SDM.
   1605 **/
   1606 #define MSR_SKYLAKE_UNC_PERF_FIXED_CTRL          0x00000394
   1607 
   1608 /**
   1609   MSR information returned for MSR index #MSR_SKYLAKE_UNC_PERF_FIXED_CTRL
   1610 **/
   1611 typedef union {
   1612   ///
   1613   /// Individual bit fields
   1614   ///
   1615   struct {
   1616     UINT32  Reserved1:20;
   1617     ///
   1618     /// [Bit 20] Enable overflow propagation.
   1619     ///
   1620     UINT32  EnableOverflow:1;
   1621     UINT32  Reserved2:1;
   1622     ///
   1623     /// [Bit 22] Enable counting.
   1624     ///
   1625     UINT32  EnableCounting:1;
   1626     UINT32  Reserved3:9;
   1627     UINT32  Reserved4:32;
   1628   } Bits;
   1629   ///
   1630   /// All bit fields as a 32-bit value
   1631   ///
   1632   UINT32  Uint32;
   1633   ///
   1634   /// All bit fields as a 64-bit value
   1635   ///
   1636   UINT64  Uint64;
   1637 } MSR_SKYLAKE_UNC_PERF_FIXED_CTRL_REGISTER;
   1638 
   1639 
   1640 /**
   1641   Package. Uncore fixed counter.
   1642 
   1643   @param  ECX  MSR_SKYLAKE_UNC_PERF_FIXED_CTR (0x00000395)
   1644   @param  EAX  Lower 32-bits of MSR value.
   1645                Described by the type MSR_SKYLAKE_UNC_PERF_FIXED_CTR_REGISTER.
   1646   @param  EDX  Upper 32-bits of MSR value.
   1647                Described by the type MSR_SKYLAKE_UNC_PERF_FIXED_CTR_REGISTER.
   1648 
   1649   <b>Example usage</b>
   1650   @code
   1651   MSR_SKYLAKE_UNC_PERF_FIXED_CTR_REGISTER  Msr;
   1652 
   1653   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_UNC_PERF_FIXED_CTR);
   1654   AsmWriteMsr64 (MSR_SKYLAKE_UNC_PERF_FIXED_CTR, Msr.Uint64);
   1655   @endcode
   1656   @note MSR_SKYLAKE_UNC_PERF_FIXED_CTR is defined as MSR_UNC_PERF_FIXED_CTR in SDM.
   1657 **/
   1658 #define MSR_SKYLAKE_UNC_PERF_FIXED_CTR           0x00000395
   1659 
   1660 /**
   1661   MSR information returned for MSR index #MSR_SKYLAKE_UNC_PERF_FIXED_CTR
   1662 **/
   1663 typedef union {
   1664   ///
   1665   /// Individual bit fields
   1666   ///
   1667   struct {
   1668     ///
   1669     /// [Bits 31:0] Current count.
   1670     ///
   1671     UINT32  CurrentCount:32;
   1672     ///
   1673     /// [Bits 43:32] Current count.
   1674     ///
   1675     UINT32  CurrentCountHi:12;
   1676     UINT32  Reserved:20;
   1677   } Bits;
   1678   ///
   1679   /// All bit fields as a 64-bit value
   1680   ///
   1681   UINT64  Uint64;
   1682 } MSR_SKYLAKE_UNC_PERF_FIXED_CTR_REGISTER;
   1683 
   1684 
   1685 /**
   1686   Package. Uncore C-Box configuration information (R/O).
   1687 
   1688   @param  ECX  MSR_SKYLAKE_UNC_CBO_CONFIG (0x00000396)
   1689   @param  EAX  Lower 32-bits of MSR value.
   1690                Described by the type MSR_SKYLAKE_UNC_CBO_CONFIG_REGISTER.
   1691   @param  EDX  Upper 32-bits of MSR value.
   1692                Described by the type MSR_SKYLAKE_UNC_CBO_CONFIG_REGISTER.
   1693 
   1694   <b>Example usage</b>
   1695   @code
   1696   MSR_SKYLAKE_UNC_CBO_CONFIG_REGISTER  Msr;
   1697 
   1698   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_CONFIG);
   1699   @endcode
   1700   @note MSR_SKYLAKE_UNC_CBO_CONFIG is defined as MSR_UNC_CBO_CONFIG in SDM.
   1701 **/
   1702 #define MSR_SKYLAKE_UNC_CBO_CONFIG               0x00000396
   1703 
   1704 /**
   1705   MSR information returned for MSR index #MSR_SKYLAKE_UNC_CBO_CONFIG
   1706 **/
   1707 typedef union {
   1708   ///
   1709   /// Individual bit fields
   1710   ///
   1711   struct {
   1712     ///
   1713     /// [Bits 3:0] Specifies the number of C-Box units with programmable
   1714     /// counters (including processor cores and processor graphics),.
   1715     ///
   1716     UINT32  CBox:4;
   1717     UINT32  Reserved1:28;
   1718     UINT32  Reserved2:32;
   1719   } Bits;
   1720   ///
   1721   /// All bit fields as a 32-bit value
   1722   ///
   1723   UINT32  Uint32;
   1724   ///
   1725   /// All bit fields as a 64-bit value
   1726   ///
   1727   UINT64  Uint64;
   1728 } MSR_SKYLAKE_UNC_CBO_CONFIG_REGISTER;
   1729 
   1730 
   1731 /**
   1732   Package. Uncore Arb unit, performance counter 0.
   1733 
   1734   @param  ECX  MSR_SKYLAKE_UNC_ARB_PERFCTR0 (0x000003B0)
   1735   @param  EAX  Lower 32-bits of MSR value.
   1736   @param  EDX  Upper 32-bits of MSR value.
   1737 
   1738   <b>Example usage</b>
   1739   @code
   1740   UINT64  Msr;
   1741 
   1742   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_ARB_PERFCTR0);
   1743   AsmWriteMsr64 (MSR_SKYLAKE_UNC_ARB_PERFCTR0, Msr);
   1744   @endcode
   1745   @note MSR_SKYLAKE_UNC_ARB_PERFCTR0 is defined as MSR_UNC_ARB_PERFCTR0 in SDM.
   1746 **/
   1747 #define MSR_SKYLAKE_UNC_ARB_PERFCTR0             0x000003B0
   1748 
   1749 
   1750 /**
   1751   Package. Uncore Arb unit, performance counter 1.
   1752 
   1753   @param  ECX  MSR_SKYLAKE_UNC_ARB_PERFCTR1 (0x000003B1)
   1754   @param  EAX  Lower 32-bits of MSR value.
   1755   @param  EDX  Upper 32-bits of MSR value.
   1756 
   1757   <b>Example usage</b>
   1758   @code
   1759   UINT64  Msr;
   1760 
   1761   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_ARB_PERFCTR1);
   1762   AsmWriteMsr64 (MSR_SKYLAKE_UNC_ARB_PERFCTR1, Msr);
   1763   @endcode
   1764   @note MSR_SKYLAKE_UNC_ARB_PERFCTR1 is defined as MSR_UNC_ARB_PERFCTR1 in SDM.
   1765 **/
   1766 #define MSR_SKYLAKE_UNC_ARB_PERFCTR1             0x000003B1
   1767 
   1768 
   1769 /**
   1770   Package. Uncore Arb unit, counter 0 event select MSR.
   1771 
   1772   @param  ECX  MSR_SKYLAKE_UNC_ARB_PERFEVTSEL0 (0x000003B2)
   1773   @param  EAX  Lower 32-bits of MSR value.
   1774   @param  EDX  Upper 32-bits of MSR value.
   1775 
   1776   <b>Example usage</b>
   1777   @code
   1778   UINT64  Msr;
   1779 
   1780   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_ARB_PERFEVTSEL0);
   1781   AsmWriteMsr64 (MSR_SKYLAKE_UNC_ARB_PERFEVTSEL0, Msr);
   1782   @endcode
   1783   @note MSR_SKYLAKE_UNC_ARB_PERFEVTSEL0 is defined as MSR_UNC_ARB_PERFEVTSEL0 in SDM.
   1784 **/
   1785 #define MSR_SKYLAKE_UNC_ARB_PERFEVTSEL0          0x000003B2
   1786 
   1787 
   1788 /**
   1789   Package. Uncore Arb unit, counter 1 event select MSR.
   1790 
   1791   @param  ECX  MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1 (0x000003B3)
   1792   @param  EAX  Lower 32-bits of MSR value.
   1793   @param  EDX  Upper 32-bits of MSR value.
   1794 
   1795   <b>Example usage</b>
   1796   @code
   1797   UINT64  Msr;
   1798 
   1799   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1);
   1800   AsmWriteMsr64 (MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1, Msr);
   1801   @endcode
   1802   @note MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1 is defined as MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1 in SDM.
   1803 **/
   1804 #define MSR_SKYLAKE_UNC_ARB_PERFEVTSEL1          0x000003B3
   1805 
   1806 
   1807 /**
   1808   Package. Uncore C-Box 0, counter 0 event select MSR.
   1809 
   1810   @param  ECX  MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL0 (0x00000700)
   1811   @param  EAX  Lower 32-bits of MSR value.
   1812   @param  EDX  Upper 32-bits of MSR value.
   1813 
   1814   <b>Example usage</b>
   1815   @code
   1816   UINT64  Msr;
   1817 
   1818   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL0);
   1819   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL0, Msr);
   1820   @endcode
   1821   @note MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL0 is defined as MSR_UNC_CBO_0_PERFEVTSEL0 in SDM.
   1822 **/
   1823 #define MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL0        0x00000700
   1824 
   1825 
   1826 /**
   1827   Package. Uncore C-Box 0, counter 1 event select MSR.
   1828 
   1829   @param  ECX  MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL1 (0x00000701)
   1830   @param  EAX  Lower 32-bits of MSR value.
   1831   @param  EDX  Upper 32-bits of MSR value.
   1832 
   1833   <b>Example usage</b>
   1834   @code
   1835   UINT64  Msr;
   1836 
   1837   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL1);
   1838   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL1, Msr);
   1839   @endcode
   1840   @note MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL1 is defined as MSR_UNC_CBO_0_PERFEVTSEL1 in SDM.
   1841 **/
   1842 #define MSR_SKYLAKE_UNC_CBO_0_PERFEVTSEL1        0x00000701
   1843 
   1844 
   1845 /**
   1846   Package. Uncore C-Box 0, performance counter 0.
   1847 
   1848   @param  ECX  MSR_SKYLAKE_UNC_CBO_0_PERFCTR0 (0x00000706)
   1849   @param  EAX  Lower 32-bits of MSR value.
   1850   @param  EDX  Upper 32-bits of MSR value.
   1851 
   1852   <b>Example usage</b>
   1853   @code
   1854   UINT64  Msr;
   1855 
   1856   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFCTR0);
   1857   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFCTR0, Msr);
   1858   @endcode
   1859   @note MSR_SKYLAKE_UNC_CBO_0_PERFCTR0 is defined as MSR_UNC_CBO_0_PERFCTR0 in SDM.
   1860 **/
   1861 #define MSR_SKYLAKE_UNC_CBO_0_PERFCTR0           0x00000706
   1862 
   1863 
   1864 /**
   1865   Package. Uncore C-Box 0, performance counter 1.
   1866 
   1867   @param  ECX  MSR_SKYLAKE_UNC_CBO_0_PERFCTR1 (0x00000707)
   1868   @param  EAX  Lower 32-bits of MSR value.
   1869   @param  EDX  Upper 32-bits of MSR value.
   1870 
   1871   <b>Example usage</b>
   1872   @code
   1873   UINT64  Msr;
   1874 
   1875   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFCTR1);
   1876   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_0_PERFCTR1, Msr);
   1877   @endcode
   1878   @note MSR_SKYLAKE_UNC_CBO_0_PERFCTR1 is defined as MSR_UNC_CBO_0_PERFCTR1 in SDM.
   1879 **/
   1880 #define MSR_SKYLAKE_UNC_CBO_0_PERFCTR1           0x00000707
   1881 
   1882 
   1883 /**
   1884   Package. Uncore C-Box 1, counter 0 event select MSR.
   1885 
   1886   @param  ECX  MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL0 (0x00000710)
   1887   @param  EAX  Lower 32-bits of MSR value.
   1888   @param  EDX  Upper 32-bits of MSR value.
   1889 
   1890   <b>Example usage</b>
   1891   @code
   1892   UINT64  Msr;
   1893 
   1894   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL0);
   1895   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL0, Msr);
   1896   @endcode
   1897   @note MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL0 is defined as MSR_UNC_CBO_1_PERFEVTSEL0 in SDM.
   1898 **/
   1899 #define MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL0        0x00000710
   1900 
   1901 
   1902 /**
   1903   Package. Uncore C-Box 1, counter 1 event select MSR.
   1904 
   1905   @param  ECX  MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL1 (0x00000711)
   1906   @param  EAX  Lower 32-bits of MSR value.
   1907   @param  EDX  Upper 32-bits of MSR value.
   1908 
   1909   <b>Example usage</b>
   1910   @code
   1911   UINT64  Msr;
   1912 
   1913   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL1);
   1914   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL1, Msr);
   1915   @endcode
   1916   @note MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL1 is defined as MSR_UNC_CBO_1_PERFEVTSEL1 in SDM.
   1917 **/
   1918 #define MSR_SKYLAKE_UNC_CBO_1_PERFEVTSEL1        0x00000711
   1919 
   1920 
   1921 /**
   1922   Package. Uncore C-Box 1, performance counter 0.
   1923 
   1924   @param  ECX  MSR_SKYLAKE_UNC_CBO_1_PERFCTR0 (0x00000716)
   1925   @param  EAX  Lower 32-bits of MSR value.
   1926   @param  EDX  Upper 32-bits of MSR value.
   1927 
   1928   <b>Example usage</b>
   1929   @code
   1930   UINT64  Msr;
   1931 
   1932   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFCTR0);
   1933   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFCTR0, Msr);
   1934   @endcode
   1935   @note MSR_SKYLAKE_UNC_CBO_1_PERFCTR0 is defined as MSR_UNC_CBO_1_PERFCTR0 in SDM.
   1936 **/
   1937 #define MSR_SKYLAKE_UNC_CBO_1_PERFCTR0           0x00000716
   1938 
   1939 
   1940 /**
   1941   Package. Uncore C-Box 1, performance counter 1.
   1942 
   1943   @param  ECX  MSR_SKYLAKE_UNC_CBO_1_PERFCTR1 (0x00000717)
   1944   @param  EAX  Lower 32-bits of MSR value.
   1945   @param  EDX  Upper 32-bits of MSR value.
   1946 
   1947   <b>Example usage</b>
   1948   @code
   1949   UINT64  Msr;
   1950 
   1951   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFCTR1);
   1952   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_1_PERFCTR1, Msr);
   1953   @endcode
   1954   @note MSR_SKYLAKE_UNC_CBO_1_PERFCTR1 is defined as MSR_UNC_CBO_1_PERFCTR1 in SDM.
   1955 **/
   1956 #define MSR_SKYLAKE_UNC_CBO_1_PERFCTR1           0x00000717
   1957 
   1958 
   1959 /**
   1960   Package. Uncore C-Box 2, counter 0 event select MSR.
   1961 
   1962   @param  ECX  MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL0 (0x00000720)
   1963   @param  EAX  Lower 32-bits of MSR value.
   1964   @param  EDX  Upper 32-bits of MSR value.
   1965 
   1966   <b>Example usage</b>
   1967   @code
   1968   UINT64  Msr;
   1969 
   1970   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL0);
   1971   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL0, Msr);
   1972   @endcode
   1973   @note MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL0 is defined as MSR_UNC_CBO_2_PERFEVTSEL0 in SDM.
   1974 **/
   1975 #define MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL0        0x00000720
   1976 
   1977 
   1978 /**
   1979   Package. Uncore C-Box 2, counter 1 event select MSR.
   1980 
   1981   @param  ECX  MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL1 (0x00000721)
   1982   @param  EAX  Lower 32-bits of MSR value.
   1983   @param  EDX  Upper 32-bits of MSR value.
   1984 
   1985   <b>Example usage</b>
   1986   @code
   1987   UINT64  Msr;
   1988 
   1989   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL1);
   1990   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL1, Msr);
   1991   @endcode
   1992   @note MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL1 is defined as MSR_UNC_CBO_2_PERFEVTSEL1 in SDM.
   1993 **/
   1994 #define MSR_SKYLAKE_UNC_CBO_2_PERFEVTSEL1        0x00000721
   1995 
   1996 
   1997 /**
   1998   Package. Uncore C-Box 2, performance counter 0.
   1999 
   2000   @param  ECX  MSR_SKYLAKE_UNC_CBO_2_PERFCTR0 (0x00000726)
   2001   @param  EAX  Lower 32-bits of MSR value.
   2002   @param  EDX  Upper 32-bits of MSR value.
   2003 
   2004   <b>Example usage</b>
   2005   @code
   2006   UINT64  Msr;
   2007 
   2008   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFCTR0);
   2009   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFCTR0, Msr);
   2010   @endcode
   2011   @note MSR_SKYLAKE_UNC_CBO_2_PERFCTR0 is defined as MSR_UNC_CBO_2_PERFCTR0 in SDM.
   2012 **/
   2013 #define MSR_SKYLAKE_UNC_CBO_2_PERFCTR0           0x00000726
   2014 
   2015 
   2016 /**
   2017   Package. Uncore C-Box 2, performance counter 1.
   2018 
   2019   @param  ECX  MSR_SKYLAKE_UNC_CBO_2_PERFCTR1 (0x00000727)
   2020   @param  EAX  Lower 32-bits of MSR value.
   2021   @param  EDX  Upper 32-bits of MSR value.
   2022 
   2023   <b>Example usage</b>
   2024   @code
   2025   UINT64  Msr;
   2026 
   2027   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFCTR1);
   2028   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_2_PERFCTR1, Msr);
   2029   @endcode
   2030   @note MSR_SKYLAKE_UNC_CBO_2_PERFCTR1 is defined as MSR_UNC_CBO_2_PERFCTR1 in SDM.
   2031 **/
   2032 #define MSR_SKYLAKE_UNC_CBO_2_PERFCTR1           0x00000727
   2033 
   2034 
   2035 /**
   2036   Package. Uncore C-Box 3, counter 0 event select MSR.
   2037 
   2038   @param  ECX  MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL0 (0x00000730)
   2039   @param  EAX  Lower 32-bits of MSR value.
   2040   @param  EDX  Upper 32-bits of MSR value.
   2041 
   2042   <b>Example usage</b>
   2043   @code
   2044   UINT64  Msr;
   2045 
   2046   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL0);
   2047   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL0, Msr);
   2048   @endcode
   2049   @note MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL0 is defined as MSR_UNC_CBO_3_PERFEVTSEL0 in SDM.
   2050 **/
   2051 #define MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL0        0x00000730
   2052 
   2053 
   2054 /**
   2055   Package. Uncore C-Box 3, counter 1 event select MSR.
   2056 
   2057   @param  ECX  MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL1 (0x00000731)
   2058   @param  EAX  Lower 32-bits of MSR value.
   2059   @param  EDX  Upper 32-bits of MSR value.
   2060 
   2061   <b>Example usage</b>
   2062   @code
   2063   UINT64  Msr;
   2064 
   2065   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL1);
   2066   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL1, Msr);
   2067   @endcode
   2068   @note MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL1 is defined as MSR_UNC_CBO_3_PERFEVTSEL1 in SDM.
   2069 **/
   2070 #define MSR_SKYLAKE_UNC_CBO_3_PERFEVTSEL1        0x00000731
   2071 
   2072 
   2073 /**
   2074   Package. Uncore C-Box 3, performance counter 0.
   2075 
   2076   @param  ECX  MSR_SKYLAKE_UNC_CBO_3_PERFCTR0 (0x00000736)
   2077   @param  EAX  Lower 32-bits of MSR value.
   2078   @param  EDX  Upper 32-bits of MSR value.
   2079 
   2080   <b>Example usage</b>
   2081   @code
   2082   UINT64  Msr;
   2083 
   2084   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFCTR0);
   2085   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFCTR0, Msr);
   2086   @endcode
   2087   @note MSR_SKYLAKE_UNC_CBO_3_PERFCTR0 is defined as MSR_UNC_CBO_3_PERFCTR0 in SDM.
   2088 **/
   2089 #define MSR_SKYLAKE_UNC_CBO_3_PERFCTR0           0x00000736
   2090 
   2091 
   2092 /**
   2093   Package. Uncore C-Box 3, performance counter 1.
   2094 
   2095   @param  ECX  MSR_SKYLAKE_UNC_CBO_3_PERFCTR1 (0x00000737)
   2096   @param  EAX  Lower 32-bits of MSR value.
   2097   @param  EDX  Upper 32-bits of MSR value.
   2098 
   2099   <b>Example usage</b>
   2100   @code
   2101   UINT64  Msr;
   2102 
   2103   Msr = AsmReadMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFCTR1);
   2104   AsmWriteMsr64 (MSR_SKYLAKE_UNC_CBO_3_PERFCTR1, Msr);
   2105   @endcode
   2106   @note MSR_SKYLAKE_UNC_CBO_3_PERFCTR1 is defined as MSR_UNC_CBO_3_PERFCTR1 in SDM.
   2107 **/
   2108 #define MSR_SKYLAKE_UNC_CBO_3_PERFCTR1           0x00000737
   2109 
   2110 
   2111 /**
   2112   Package. Uncore PMU global control.
   2113 
   2114   @param  ECX  MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL (0x00000E01)
   2115   @param  EAX  Lower 32-bits of MSR value.
   2116                Described by the type MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL_REGISTER.
   2117   @param  EDX  Upper 32-bits of MSR value.
   2118                Described by the type MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL_REGISTER.
   2119 
   2120   <b>Example usage</b>
   2121   @code
   2122   MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL_REGISTER  Msr;
   2123 
   2124   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL);
   2125   AsmWriteMsr64 (MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL, Msr.Uint64);
   2126   @endcode
   2127   @note MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL is defined as MSR_UNC_PERF_GLOBAL_CTRL in SDM.
   2128 **/
   2129 #define MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL         0x00000E01
   2130 
   2131 /**
   2132   MSR information returned for MSR index #MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL
   2133 **/
   2134 typedef union {
   2135   ///
   2136   /// Individual bit fields
   2137   ///
   2138   struct {
   2139     ///
   2140     /// [Bit 0] Slice 0 select.
   2141     ///
   2142     UINT32  PMI_Sel_Slice0:1;
   2143     ///
   2144     /// [Bit 1] Slice 1 select.
   2145     ///
   2146     UINT32  PMI_Sel_Slice1:1;
   2147     ///
   2148     /// [Bit 2] Slice 2 select.
   2149     ///
   2150     UINT32  PMI_Sel_Slice2:1;
   2151     ///
   2152     /// [Bit 3] Slice 3 select.
   2153     ///
   2154     UINT32  PMI_Sel_Slice3:1;
   2155     ///
   2156     /// [Bit 4] Slice 4select.
   2157     ///
   2158     UINT32  PMI_Sel_Slice4:1;
   2159     UINT32  Reserved1:14;
   2160     UINT32  Reserved2:10;
   2161     ///
   2162     /// [Bit 29] Enable all uncore counters.
   2163     ///
   2164     UINT32  EN:1;
   2165     ///
   2166     /// [Bit 30] Enable wake on PMI.
   2167     ///
   2168     UINT32  WakePMI:1;
   2169     ///
   2170     /// [Bit 31] Enable Freezing counter when overflow.
   2171     ///
   2172     UINT32  FREEZE:1;
   2173     UINT32  Reserved3:32;
   2174   } Bits;
   2175   ///
   2176   /// All bit fields as a 32-bit value
   2177   ///
   2178   UINT32  Uint32;
   2179   ///
   2180   /// All bit fields as a 64-bit value
   2181   ///
   2182   UINT64  Uint64;
   2183 } MSR_SKYLAKE_UNC_PERF_GLOBAL_CTRL_REGISTER;
   2184 
   2185 
   2186 /**
   2187   Package. Uncore PMU main status.
   2188 
   2189   @param  ECX  MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS (0x00000E02)
   2190   @param  EAX  Lower 32-bits of MSR value.
   2191                Described by the type MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS_REGISTER.
   2192   @param  EDX  Upper 32-bits of MSR value.
   2193                Described by the type MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS_REGISTER.
   2194 
   2195   <b>Example usage</b>
   2196   @code
   2197   MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS_REGISTER  Msr;
   2198 
   2199   Msr.Uint64 = AsmReadMsr64 (MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS);
   2200   AsmWriteMsr64 (MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS, Msr.Uint64);
   2201   @endcode
   2202   @note MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS is defined as MSR_UNC_PERF_GLOBAL_STATUS in SDM.
   2203 **/
   2204 #define MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS       0x00000E02
   2205 
   2206 /**
   2207   MSR information returned for MSR index #MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS
   2208 **/
   2209 typedef union {
   2210   ///
   2211   /// Individual bit fields
   2212   ///
   2213   struct {
   2214     ///
   2215     /// [Bit 0] Fixed counter overflowed.
   2216     ///
   2217     UINT32  Fixed:1;
   2218     ///
   2219     /// [Bit 1] An ARB counter overflowed.
   2220     ///
   2221     UINT32  ARB:1;
   2222     UINT32  Reserved1:1;
   2223     ///
   2224     /// [Bit 3] A CBox counter overflowed (on any slice).
   2225     ///
   2226     UINT32  CBox:1;
   2227     UINT32  Reserved2:28;
   2228     UINT32  Reserved3:32;
   2229   } Bits;
   2230   ///
   2231   /// All bit fields as a 32-bit value
   2232   ///
   2233   UINT32  Uint32;
   2234   ///
   2235   /// All bit fields as a 64-bit value
   2236   ///
   2237   UINT64  Uint64;
   2238 } MSR_SKYLAKE_UNC_PERF_GLOBAL_STATUS_REGISTER;
   2239 
   2240 #endif
   2241