[edk2-devel] [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/

Ni, Ray posted 8 patches 6 years, 6 months ago
There is a newer version of this series
[edk2-devel] [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/
Posted by Ni, Ray 6 years, 6 months ago
The patch moves all files under UefiCpuPkg/Include/Register/ to
MdePkg/Include/Register using following detailed approaches:
1. Move UefiCpuPkg/Include/Register/Amd/ to
   MdePkg/Include/Register/Amd folder.
2. Move remaining in UefiCpuPkg/Include/Register/ to
   MdePkg/Include/Register/Intel folder.
3. Create wrapper header files under UefiCpuPkg/Include/Register/
   to include the accordingly files in MdePkg/Include/Register/Intel.
   This is to avoid build break because code in other repos like
   edk2-platform includes the file from UefiCpuPkg.

The wrapper header files will be removed after all consumers code
is updated.

Signed-off-by: Ray Ni <ray.ni@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Leo Duran <leo.duran@amd.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
---
 .../Include/Register/Amd/Cpuid.h              |    0
 .../Include/Register/Amd/Fam17Msr.h           |    0
 .../Include/Register/Amd/Msr.h                |    4 +-
 .../Register/Intel}/ArchitecturalMsr.h        |    8 +-
 .../Include/Register/Intel}/LocalApic.h       |    6 +-
 .../Include/Register/Intel}/Microcode.h       |    6 +-
 MdePkg/Include/Register/Intel/Msr.h           |   44 +
 .../Include/Register/Intel}/Msr/AtomMsr.h     |    4 +-
 .../Register/Intel}/Msr/BroadwellMsr.h        |    4 +-
 .../Include/Register/Intel}/Msr/Core2Msr.h    |    4 +-
 .../Include/Register/Intel}/Msr/CoreMsr.h     |    4 +-
 .../Include/Register/Intel}/Msr/GoldmontMsr.h |    4 +-
 .../Register/Intel}/Msr/GoldmontPlusMsr.h     |    4 +-
 .../Include/Register/Intel}/Msr/HaswellEMsr.h |    4 +-
 .../Include/Register/Intel}/Msr/HaswellMsr.h  |    4 +-
 .../Register/Intel}/Msr/IvyBridgeMsr.h        |    4 +-
 .../Include/Register/Intel}/Msr/NehalemMsr.h  |    4 +-
 .../Include/Register/Intel}/Msr/P6Msr.h       |    4 +-
 .../Include/Register/Intel}/Msr/Pentium4Msr.h |    2 +-
 .../Include/Register/Intel}/Msr/PentiumMMsr.h |    2 +-
 .../Include/Register/Intel}/Msr/PentiumMsr.h  |    2 +-
 .../Register/Intel}/Msr/SandyBridgeMsr.h      |    2 +-
 .../Register/Intel}/Msr/SilvermontMsr.h       |    2 +-
 .../Include/Register/Intel}/Msr/SkylakeMsr.h  |    2 +-
 .../Include/Register/Intel}/Msr/Xeon5600Msr.h |    2 +-
 .../Include/Register/Intel}/Msr/XeonDMsr.h    |    2 +-
 .../Include/Register/Intel}/Msr/XeonE7Msr.h   |    2 +-
 .../Include/Register/Intel}/Msr/XeonPhiMsr.h  |    2 +-
 .../Register/Intel}/SmramSaveStateMap.h       |    6 +-
 .../Include/Register/Intel}/StmApi.h          |   12 +-
 .../Register/Intel}/StmResourceDescriptor.h   |    6 +-
 .../Include/Register/Intel}/StmStatusCode.h   |    6 +-
 .../Include/Register/ArchitecturalMsr.h       | 6565 +----------------
 UefiCpuPkg/Include/Register/Cpuid.h           |    5 -
 UefiCpuPkg/Include/Register/LocalApic.h       |  175 +-
 UefiCpuPkg/Include/Register/Microcode.h       |  187 +-
 UefiCpuPkg/Include/Register/Msr.h             |   36 +-
 .../Include/Register/SmramSaveStateMap.h      |  179 +-
 UefiCpuPkg/Include/Register/StmApi.h          |  941 +--
 39 files changed, 122 insertions(+), 8128 deletions(-)
 rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Cpuid.h (100%)
 rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Fam17Msr.h (100%)
 rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Msr.h (78%)
 copy {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/ArchitecturalMsr.h (96%)
 copy {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/LocalApic.h (95%)
 copy {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Microcode.h (95%)
 create mode 100644 MdePkg/Include/Register/Intel/Msr.h
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/AtomMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/BroadwellMsr.h (95%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/Core2Msr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/CoreMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/GoldmontMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/GoldmontPlusMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/HaswellEMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/HaswellMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/IvyBridgeMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/NehalemMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/P6Msr.h (95%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/Pentium4Msr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/PentiumMMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/PentiumMsr.h (95%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/SandyBridgeMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/SilvermontMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/SkylakeMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/Xeon5600Msr.h (95%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/XeonDMsr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/XeonE7Msr.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/Msr/XeonPhiMsr.h (96%)
 copy {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/SmramSaveStateMap.h (93%)
 copy {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/StmApi.h (96%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/StmResourceDescriptor.h (92%)
 rename {UefiCpuPkg/Include/Register => MdePkg/Include/Register/Intel}/StmStatusCode.h (94%)

diff --git a/UefiCpuPkg/Include/Register/Amd/Cpuid.h b/MdePkg/Include/Register/Amd/Cpuid.h
similarity index 100%
rename from UefiCpuPkg/Include/Register/Amd/Cpuid.h
rename to MdePkg/Include/Register/Amd/Cpuid.h
diff --git a/UefiCpuPkg/Include/Register/Amd/Fam17Msr.h b/MdePkg/Include/Register/Amd/Fam17Msr.h
similarity index 100%
rename from UefiCpuPkg/Include/Register/Amd/Fam17Msr.h
rename to MdePkg/Include/Register/Amd/Fam17Msr.h
diff --git a/UefiCpuPkg/Include/Register/Amd/Msr.h b/MdePkg/Include/Register/Amd/Msr.h
similarity index 78%
rename from UefiCpuPkg/Include/Register/Amd/Msr.h
rename to MdePkg/Include/Register/Amd/Msr.h
index b7db0ae042..e74de7a1df 100644
--- a/UefiCpuPkg/Include/Register/Amd/Msr.h
+++ b/MdePkg/Include/Register/Amd/Msr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>
+  Copyright (c) 2017 - 2019, Advanced Micro Devices. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -17,7 +17,7 @@
 #ifndef __AMD_MSR_H__
 #define __AMD_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 #include <Register/Amd/Fam17Msr.h>
 
 #endif
diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
similarity index 96%
copy from UefiCpuPkg/Include/Register/ArchitecturalMsr.h
copy to MdePkg/Include/Register/Intel/ArchitecturalMsr.h
index c2bd382000..28e71cf713 100644
--- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
+++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
@@ -1,12 +1,12 @@
 /** @file
-  Architectural MSR Definitions.
+  Intel Architectural MSR Definitions.
 
   Provides defines for Machine Specific Registers(MSR) indexes. Data structures
   are provided for MSRs that contain one or more bit fields.  If the MSR value
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -15,8 +15,8 @@
 
 **/
 
-#ifndef __ARCHITECTURAL_MSR_H__
-#define __ARCHITECTURAL_MSR_H__
+#ifndef __INTEL_ARCHITECTURAL_MSR_H__
+#define __INTEL_ARCHITECTURAL_MSR_H__
 
 /**
   See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor (05_01H).
diff --git a/UefiCpuPkg/Include/Register/LocalApic.h b/MdePkg/Include/Register/Intel/LocalApic.h
similarity index 95%
copy from UefiCpuPkg/Include/Register/LocalApic.h
copy to MdePkg/Include/Register/Intel/LocalApic.h
index 369ba96af8..35625cff70 100644
--- a/UefiCpuPkg/Include/Register/LocalApic.h
+++ b/MdePkg/Include/Register/Intel/LocalApic.h
@@ -1,13 +1,13 @@
 /** @file
   IA32 Local APIC Definitions.
 
-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
-#ifndef __LOCAL_APIC_H__
-#define __LOCAL_APIC_H__
+#ifndef __INTEL_LOCAL_APIC_H__
+#define __INTEL_LOCAL_APIC_H__
 
 //
 // Definition for Local APIC registers and related values
diff --git a/UefiCpuPkg/Include/Register/Microcode.h b/MdePkg/Include/Register/Intel/Microcode.h
similarity index 95%
copy from UefiCpuPkg/Include/Register/Microcode.h
copy to MdePkg/Include/Register/Intel/Microcode.h
index e85c0cc640..93fa3d6d53 100644
--- a/UefiCpuPkg/Include/Register/Microcode.h
+++ b/MdePkg/Include/Register/Intel/Microcode.h
@@ -5,7 +5,7 @@
   Intel(R) 64 and IA-32 Architectures Software Developer's Manual
     Volume 3A, Section 9.11  Microcode Definitions
 
-  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -14,8 +14,8 @@
 
 **/
 
-#ifndef __MICROCODE_H__
-#define __MICROCODE_H__
+#ifndef __INTEL_MICROCODE_H__
+#define __INTEL_MICROCODE_H__
 
 ///
 /// CPU Microcode Date in BCD format
diff --git a/MdePkg/Include/Register/Intel/Msr.h b/MdePkg/Include/Register/Intel/Msr.h
new file mode 100644
index 0000000000..7bd656cdaa
--- /dev/null
+++ b/MdePkg/Include/Register/Intel/Msr.h
@@ -0,0 +1,44 @@
+/** @file
+  MSR Definitions.
+
+  Provides defines for Machine Specific Registers(MSR) indexes. Data structures
+  are provided for MSRs that contain one or more bit fields.  If the MSR value
+  returned is a single 32-bit or 64-bit value, then a data structure is not
+  provided for that MSR.
+
+  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  @par Specification Reference:
+  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
+  May 2018, Volume 4: Model-Specific-Registers (MSR)
+
+**/
+
+#ifndef __INTEL_MSR_H__
+#define __INTEL_MSR_H__
+
+#include <Register/Intel/ArchitecturalMsr.h>
+#include <Register/Intel/Msr/Core2Msr.h>
+#include <Register/Intel/Msr/AtomMsr.h>
+#include <Register/Intel/Msr/SilvermontMsr.h>
+#include <Register/Intel/Msr/GoldmontMsr.h>
+#include <Register/Intel/Msr/GoldmontPlusMsr.h>
+#include <Register/Intel/Msr/NehalemMsr.h>
+#include <Register/Intel/Msr/Xeon5600Msr.h>
+#include <Register/Intel/Msr/XeonE7Msr.h>
+#include <Register/Intel/Msr/SandyBridgeMsr.h>
+#include <Register/Intel/Msr/IvyBridgeMsr.h>
+#include <Register/Intel/Msr/HaswellMsr.h>
+#include <Register/Intel/Msr/HaswellEMsr.h>
+#include <Register/Intel/Msr/BroadwellMsr.h>
+#include <Register/Intel/Msr/XeonDMsr.h>
+#include <Register/Intel/Msr/SkylakeMsr.h>
+#include <Register/Intel/Msr/XeonPhiMsr.h>
+#include <Register/Intel/Msr/Pentium4Msr.h>
+#include <Register/Intel/Msr/CoreMsr.h>
+#include <Register/Intel/Msr/PentiumMMsr.h>
+#include <Register/Intel/Msr/P6Msr.h>
+#include <Register/Intel/Msr/PentiumMsr.h>
+
+#endif
diff --git a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/AtomMsr.h
rename to MdePkg/Include/Register/Intel/Msr/AtomMsr.h
index 802efe54a6..c174df1535 100644
--- a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __ATOM_MSR_H__
 #define __ATOM_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Atom(TM) Processor Family?
diff --git a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
similarity index 95%
rename from UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
rename to MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
index e9d39d99c4..d05869e037 100644
--- a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __BROADWELL_MSR_H__
 #define __BROADWELL_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Broadwell microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/Core2Msr.h
rename to MdePkg/Include/Register/Intel/Msr/Core2Msr.h
index a5d66261ec..e9d999cdd5 100644
--- a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h
+++ b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __CORE2_MSR_H__
 #define __CORE2_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Core(TM) 2 Processor Family?
diff --git a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/CoreMsr.h
rename to MdePkg/Include/Register/Intel/Msr/CoreMsr.h
index 5368db83ba..1e43bc13f5 100644
--- a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __CORE_MSR_H__
 #define __CORE_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel Core Solo and Intel Core Duo Processors?
diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
rename to MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
index a7db0374f8..d44172f29c 100644
--- a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __GOLDMONT_MSR_H__
 #define __GOLDMONT_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel Atom processors based on the Goldmont microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
rename to MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
index 635f4cae43..2edc1363b7 100644
--- a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __GOLDMONT_PLUS_MSR_H__
 #define __GOLDMONT_PLUS_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel Atom processors based on the Goldmont plus microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
rename to MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
index 6cde974b1d..6c8e29d2ac 100644
--- a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __HASWELL_E_MSR_H__
 #define __HASWELL_E_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Haswell-E microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
rename to MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
index 3aec00cab2..704a7079f2 100644
--- a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __HASWELL_MSR_H__
 #define __HASWELL_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Haswell microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
rename to MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
index fc94f91be0..bc8559d519 100644
--- a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __IVY_BRIDGE_MSR_H__
 #define __IVY_BRIDGE_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Ivy Bridge microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
rename to MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
index ada2084654..a21e8a5e85 100644
--- a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __NEHALEM_MSR_H__
 #define __NEHALEM_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Nehalem microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/P6Msr.h b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
similarity index 95%
rename from UefiCpuPkg/Include/Register/Msr/P6Msr.h
rename to MdePkg/Include/Register/Intel/Msr/P6Msr.h
index 020349291a..d4af2774d3 100644
--- a/UefiCpuPkg/Include/Register/Msr/P6Msr.h
+++ b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
@@ -6,7 +6,7 @@
   returned is a single 32-bit or 64-bit value, then a data structure is not
   provided for that MSR.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -18,7 +18,7 @@
 #ifndef __P6_MSR_H__
 #define __P6_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is P6 Family Processors?
diff --git a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
rename to MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
index 1d66cc2b31..f5e16a1df7 100644
--- a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
+++ b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
@@ -18,7 +18,7 @@
 #ifndef __PENTIUM_4_MSR_H__
 #define __PENTIUM_4_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Pentium(R) 4 Processors?
diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
rename to MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
index 869eec1114..f25e4f53b1 100644
--- a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
@@ -18,7 +18,7 @@
 #ifndef __PENTIUM_M_MSR_H__
 #define __PENTIUM_M_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Pentium M Processors?
diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
similarity index 95%
rename from UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
rename to MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
index c87212f08f..93286c89e3 100644
--- a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
@@ -18,7 +18,7 @@
 #ifndef __PENTIUM_MSR_H__
 #define __PENTIUM_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Pentium Processors?
diff --git a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
rename to MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
index 0f977e2a2f..322f355378 100644
--- a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
@@ -18,7 +18,7 @@
 #ifndef __SANDY_BRIDGE_MSR_H__
 #define __SANDY_BRIDGE_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Sandy Bridge microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
rename to MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
index fc2a8f6c87..3a772de87a 100644
--- a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
@@ -18,7 +18,7 @@
 #ifndef __SILVERMONT_MSR_H__
 #define __SILVERMONT_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Silvermont microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
rename to MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
index 01166e3446..923cce5395 100644
--- a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
@@ -18,7 +18,7 @@
 #ifndef __SKYLAKE_MSR_H__
 #define __SKYLAKE_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel processors based on the Skylake microarchitecture?
diff --git a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
similarity index 95%
rename from UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
rename to MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
index c285d1877f..8e2305f95c 100644
--- a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
+++ b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
@@ -18,7 +18,7 @@
 #ifndef __XEON_5600_MSR_H__
 #define __XEON_5600_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Xeon(R) Processor Series 5600?
diff --git a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
rename to MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
index dae11c8e30..7fde55e181 100644
--- a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
@@ -18,7 +18,7 @@
 #ifndef __XEON_D_MSR_H__
 #define __XEON_D_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Xeon(R) Processor D product Family?
diff --git a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
rename to MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
index 2e9b296d51..528ba073a1 100644
--- a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
+++ b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
@@ -18,7 +18,7 @@
 #ifndef __XEON_E7_MSR_H__
 #define __XEON_E7_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Xeon(R) Processor E7 Family?
diff --git a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
similarity index 96%
rename from UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
rename to MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
index 57d71d6a7d..96f5ab8acd 100644
--- a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
+++ b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
@@ -18,7 +18,7 @@
 #ifndef __XEON_PHI_MSR_H__
 #define __XEON_PHI_MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 /**
   Is Intel(R) Xeon(R) Phi(TM) processor Family?
diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
similarity index 93%
copy from UefiCpuPkg/Include/Register/SmramSaveStateMap.h
copy to MdePkg/Include/Register/Intel/SmramSaveStateMap.h
index 6473e51a55..81aa6c3c66 100644
--- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
+++ b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
@@ -7,13 +7,13 @@ Intel(R) 64 and IA-32 Architectures Software Developer's Manual
   Volume 3C, Section 34.5 SMI Handler Execution Environment
   Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
 
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
-#ifndef __SMRAM_SAVE_STATE_MAP_H__
-#define __SMRAM_SAVE_STATE_MAP_H__
+#ifndef __INTEL_SMRAM_SAVE_STATE_MAP_H__
+#define __INTEL_SMRAM_SAVE_STATE_MAP_H__
 
 ///
 /// Default SMBASE address
diff --git a/UefiCpuPkg/Include/Register/StmApi.h b/MdePkg/Include/Register/Intel/StmApi.h
similarity index 96%
copy from UefiCpuPkg/Include/Register/StmApi.h
copy to MdePkg/Include/Register/Intel/StmApi.h
index 0ecc0b86d5..63f215ca34 100644
--- a/UefiCpuPkg/Include/Register/StmApi.h
+++ b/MdePkg/Include/Register/Intel/StmApi.h
@@ -1,7 +1,7 @@
 /** @file
   STM API definition
 
-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -9,12 +9,12 @@
 
 **/
 
-#ifndef _STM_API_H_
-#define _STM_API_H_
+#ifndef _INTEL_STM_API_H_
+#define _INTEL_STM_API_H_
 
-#include <Register/StmStatusCode.h>
-#include <Register/StmResourceDescriptor.h>
-#include <Register/ArchitecturalMsr.h>
+#include <Register/Intel/StmStatusCode.h>
+#include <Register/Intel/StmResourceDescriptor.h>
+#include <Register/Intel/ArchitecturalMsr.h>
 
 #pragma pack (1)
 
diff --git a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
similarity index 92%
rename from UefiCpuPkg/Include/Register/StmResourceDescriptor.h
rename to MdePkg/Include/Register/Intel/StmResourceDescriptor.h
index ec043c909e..da4c91d0f4 100644
--- a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h
+++ b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
@@ -1,7 +1,7 @@
 /** @file
   STM Resource Descriptor
 
-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -9,8 +9,8 @@
 
 **/
 
-#ifndef _STM_RESOURCE_DESCRIPTOR_H_
-#define _STM_RESOURCE_DESCRIPTOR_H_
+#ifndef _INTEL_STM_RESOURCE_DESCRIPTOR_H_
+#define _INTEL_STM_RESOURCE_DESCRIPTOR_H_
 
 #pragma pack (1)
 
diff --git a/UefiCpuPkg/Include/Register/StmStatusCode.h b/MdePkg/Include/Register/Intel/StmStatusCode.h
similarity index 94%
rename from UefiCpuPkg/Include/Register/StmStatusCode.h
rename to MdePkg/Include/Register/Intel/StmStatusCode.h
index 42f95fbda4..2460c12598 100644
--- a/UefiCpuPkg/Include/Register/StmStatusCode.h
+++ b/MdePkg/Include/Register/Intel/StmStatusCode.h
@@ -1,7 +1,7 @@
 /** @file
   STM Status Codes
 
-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
@@ -9,8 +9,8 @@
 
 **/
 
-#ifndef _STM_STATUS_CODE_H_
-#define _STM_STATUS_CODE_H_
+#ifndef _INTEL_STM_STATUS_CODE_H_
+#define _INTEL_STM_STATUS_CODE_H_
 
 /**
   STM Status Codes
diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
index c2bd382000..a2a34c5ec4 100644
--- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
+++ b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
@@ -1,6572 +1,13 @@
 /** @file
-  Architectural MSR Definitions.
+  Wrapper header file to include <Register/Intel/ArchitecturalMsr.h> in MdePkg.
 
-  Provides defines for Machine Specific Registers(MSR) indexes. Data structures
-  are provided for MSRs that contain one or more bit fields.  If the MSR value
-  returned is a single 32-bit or 64-bit value, then a data structure is not
-  provided for that MSR.
-
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-  @par Specification Reference:
-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
-  May 2018, Volume 4: Model-Specific-Registers (MSR)
-
 **/
 
 #ifndef __ARCHITECTURAL_MSR_H__
 #define __ARCHITECTURAL_MSR_H__
 
-/**
-  See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor (05_01H).
-
-  @param  ECX  MSR_IA32_P5_MC_ADDR (0x00000000)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_ADDR);
-  AsmWriteMsr64 (MSR_IA32_P5_MC_ADDR, Msr);
-  @endcode
-  @note MSR_IA32_P5_MC_ADDR is defined as IA32_P5_MC_ADDR in SDM.
-**/
-#define MSR_IA32_P5_MC_ADDR                      0x00000000
-
-
-/**
-  See Section 2.22, "MSRs in Pentium Processors.". DF_DM = 05_01H.
-
-  @param  ECX  MSR_IA32_P5_MC_TYPE (0x00000001)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_TYPE);
-  AsmWriteMsr64 (MSR_IA32_P5_MC_TYPE, Msr);
-  @endcode
-  @note MSR_IA32_P5_MC_TYPE is defined as IA32_P5_MC_TYPE in SDM.
-**/
-#define MSR_IA32_P5_MC_TYPE                      0x00000001
-
-
-/**
-  See Section 8.10.5, "Monitor/Mwait Address Range Determination.". Introduced
-  at Display Family / Display Model 0F_03H.
-
-  @param  ECX  MSR_IA32_MONITOR_FILTER_SIZE (0x00000006)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MONITOR_FILTER_SIZE);
-  AsmWriteMsr64 (MSR_IA32_MONITOR_FILTER_SIZE, Msr);
-  @endcode
-  @note MSR_IA32_MONITOR_FILTER_SIZE is defined as IA32_MONITOR_FILTER_SIZE in SDM.
-**/
-#define MSR_IA32_MONITOR_FILTER_SIZE             0x00000006
-
-
-/**
-  See Section 17.17, "Time-Stamp Counter.". Introduced at Display Family /
-  Display Model 05_01H.
-
-  @param  ECX  MSR_IA32_TIME_STAMP_COUNTER (0x00000010)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_TIME_STAMP_COUNTER);
-  AsmWriteMsr64 (MSR_IA32_TIME_STAMP_COUNTER, Msr);
-  @endcode
-  @note MSR_IA32_TIME_STAMP_COUNTER is defined as IA32_TIME_STAMP_COUNTER in SDM.
-**/
-#define MSR_IA32_TIME_STAMP_COUNTER              0x00000010
-
-
-/**
-  Platform ID (RO)  The operating system can use this MSR to determine "slot"
-  information for the processor and the proper microcode update to load.
-  Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_PLATFORM_ID (0x00000017)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PLATFORM_ID_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PLATFORM_ID);
-  @endcode
-  @note MSR_IA32_PLATFORM_ID is defined as IA32_PLATFORM_ID in SDM.
-**/
-#define MSR_IA32_PLATFORM_ID                     0x00000017
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PLATFORM_ID
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved1:32;
-    UINT32  Reserved2:18;
-    ///
-    /// [Bits 52:50] Platform Id (RO)  Contains information concerning the
-    /// intended platform for the processor.
-    ///   52 51 50
-    ///   -- -- --
-    ///    0  0  0  Processor Flag 0.
-    ///    0  0  1  Processor Flag 1
-    ///    0  1  0  Processor Flag 2
-    ///    0  1  1  Processor Flag 3
-    ///    1  0  0  Processor Flag 4
-    ///    1  0  1  Processor Flag 5
-    ///    1  1  0  Processor Flag 6
-    ///    1  1  1  Processor Flag 7
-    ///
-    UINT32  PlatformId:3;
-    UINT32  Reserved3:11;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PLATFORM_ID_REGISTER;
-
-
-/**
-  06_01H.
-
-  @param  ECX  MSR_IA32_APIC_BASE (0x0000001B)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_APIC_BASE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_APIC_BASE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_APIC_BASE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE);
-  AsmWriteMsr64 (MSR_IA32_APIC_BASE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_APIC_BASE is defined as IA32_APIC_BASE in SDM.
-**/
-#define MSR_IA32_APIC_BASE                       0x0000001B
-
-/**
-  MSR information returned for MSR index #MSR_IA32_APIC_BASE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved1:8;
-    ///
-    /// [Bit 8] BSP flag (R/W).
-    ///
-    UINT32  BSP:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bit 10] Enable x2APIC mode. Introduced at Display Family / Display
-    /// Model 06_1AH.
-    ///
-    UINT32  EXTD:1;
-    ///
-    /// [Bit 11] APIC Global Enable (R/W).
-    ///
-    UINT32  EN:1;
-    ///
-    /// [Bits 31:12] APIC Base (R/W).
-    ///
-    UINT32  ApicBase:20;
-    ///
-    /// [Bits 63:32] APIC Base (R/W).
-    ///
-    UINT32  ApicBaseHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_APIC_BASE_REGISTER;
-
-
-/**
-  Control Features in Intel 64 Processor (R/W). If any one enumeration
-  condition for defined bit field holds.
-
-  @param  ECX  MSR_IA32_FEATURE_CONTROL (0x0000003A)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_FEATURE_CONTROL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
-  AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_FEATURE_CONTROL is defined as IA32_FEATURE_CONTROL in SDM.
-**/
-#define MSR_IA32_FEATURE_CONTROL                 0x0000003A
-
-/**
-  MSR information returned for MSR index #MSR_IA32_FEATURE_CONTROL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Lock bit (R/WO): (1 = locked). When set, locks this MSR from
-    /// being written, writes to this bit will result in GP(0). Note: Once the
-    /// Lock bit is set, the contents of this register cannot be modified.
-    /// Therefore the lock bit must be set after configuring support for Intel
-    /// Virtualization Technology and prior to transferring control to an
-    /// option ROM or the OS. Hence, once the Lock bit is set, the entire
-    /// IA32_FEATURE_CONTROL contents are preserved across RESET when PWRGOOD
-    /// is not deasserted. If any one enumeration condition for defined bit
-    /// field position greater than bit 0 holds.
-    ///
-    UINT32  Lock:1;
-    ///
-    /// [Bit 1] Enable VMX inside SMX operation (R/WL): This bit enables a
-    /// system executive to use VMX in conjunction with SMX to support
-    /// Intel(R) Trusted Execution Technology. BIOS must set this bit only
-    /// when the CPUID function 1 returns VMX feature flag and SMX feature
-    /// flag set (ECX bits 5 and 6 respectively). If CPUID.01H:ECX[5] = 1 &&
-    /// CPUID.01H:ECX[6] = 1.
-    ///
-    UINT32  EnableVmxInsideSmx:1;
-    ///
-    /// [Bit 2] Enable VMX outside SMX operation (R/WL): This bit enables VMX
-    /// for system executive that do not require SMX. BIOS must set this bit
-    /// only when the CPUID function 1 returns VMX feature flag set (ECX bit
-    /// 5). If CPUID.01H:ECX[5] = 1.
-    ///
-    UINT32  EnableVmxOutsideSmx:1;
-    UINT32  Reserved1:5;
-    ///
-    /// [Bits 14:8] SENTER Local Function Enables (R/WL): When set, each bit
-    /// in the field represents an enable control for a corresponding SENTER
-    /// function. This bit is supported only if CPUID.1:ECX.[bit 6] is set. If
-    /// CPUID.01H:ECX[6] = 1.
-    ///
-    UINT32  SenterLocalFunctionEnables:7;
-    ///
-    /// [Bit 15] SENTER Global Enable (R/WL): This bit must be set to enable
-    /// SENTER leaf functions. This bit is supported only if CPUID.1:ECX.[bit
-    /// 6] is set. If CPUID.01H:ECX[6] = 1.
-    ///
-    UINT32  SenterGlobalEnable:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bit 17] SGX Launch Control Enable (R/WL): This bit must be set to
-    /// enable runtime reconfiguration of SGX Launch Control via
-    /// IA32_SGXLEPUBKEYHASHn MSR. If CPUID.(EAX=07H, ECX=0H): ECX[30] = 1.
-    ///
-    UINT32  SgxLaunchControlEnable:1;
-    ///
-    /// [Bit 18] SGX Global Enable (R/WL): This bit must be set to enable SGX
-    /// leaf functions. If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1.
-    ///
-    UINT32  SgxEnable:1;
-    UINT32  Reserved3:1;
-    ///
-    /// [Bit 20] LMCE On (R/WL): When set, system software can program the
-    /// MSRs associated with LMCE to configure delivery of some machine check
-    /// exceptions to a single logical processor. If IA32_MCG_CAP[27] = 1.
-    ///
-    UINT32  LmceOn:1;
-    UINT32  Reserved4:11;
-    UINT32  Reserved5:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_FEATURE_CONTROL_REGISTER;
-
-
-/**
-  Per Logical Processor TSC Adjust (R/Write to clear). If CPUID.(EAX=07H,
-  ECX=0H): EBX[1] = 1. THREAD_ADJUST:  Local offset value of the IA32_TSC for
-  a logical processor. Reset value is Zero. A write to IA32_TSC will modify
-  the local offset in IA32_TSC_ADJUST and the content of IA32_TSC, but does
-  not affect the internal invariant TSC hardware.
-
-  @param  ECX  MSR_IA32_TSC_ADJUST (0x0000003B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_TSC_ADJUST);
-  AsmWriteMsr64 (MSR_IA32_TSC_ADJUST, Msr);
-  @endcode
-  @note MSR_IA32_TSC_ADJUST is defined as IA32_TSC_ADJUST in SDM.
-**/
-#define MSR_IA32_TSC_ADJUST                      0x0000003B
-
-
-/**
-  BIOS Update Trigger (W) Executing a WRMSR instruction to this MSR causes a
-  microcode update to be loaded into the processor. See Section 9.11.6,
-  "Microcode Update Loader." A processor may prevent writing to this MSR when
-  loading guest states on VM entries or saving guest states on VM exits.
-  Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_BIOS_UPDT_TRIG (0x00000079)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = 0;
-  AsmWriteMsr64 (MSR_IA32_BIOS_UPDT_TRIG, Msr);
-  @endcode
-  @note MSR_IA32_BIOS_UPDT_TRIG is defined as IA32_BIOS_UPDT_TRIG in SDM.
-**/
-#define MSR_IA32_BIOS_UPDT_TRIG                  0x00000079
-
-
-/**
-  BIOS Update Signature (RO) Returns the microcode update signature following
-  the execution of CPUID.01H. A processor may prevent writing to this MSR when
-  loading guest states on VM entries or saving guest states on VM exits.
-  Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_BIOS_SIGN_ID (0x0000008B)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_BIOS_SIGN_ID_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID);
-  @endcode
-  @note MSR_IA32_BIOS_SIGN_ID is defined as IA32_BIOS_SIGN_ID in SDM.
-**/
-#define MSR_IA32_BIOS_SIGN_ID                    0x0000008B
-
-/**
-  MSR information returned for MSR index #MSR_IA32_BIOS_SIGN_ID
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved:32;
-    ///
-    /// [Bits 63:32] Microcode update signature. This field contains the
-    /// signature of the currently loaded microcode update when read following
-    /// the execution of the CPUID instruction, function 1. It is required
-    /// that this register field be pre-loaded with zero prior to executing
-    /// the CPUID, function 1. If the field remains equal to zero, then there
-    /// is no microcode update loaded. Another nonzero value will be the
-    /// signature.
-    ///
-    UINT32  MicrocodeUpdateSignature:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_BIOS_SIGN_ID_REGISTER;
-
-
-/**
-  IA32_SGXLEPUBKEYHASH[(64*n+63):(64*n)] (R/W) Bits (64*n+63):(64*n) of the
-  SHA256 digest of the SIGSTRUCT.MODULUS for SGX Launch Enclave. On reset, the
-  default value is the digest of Intel's signing key. Read permitted If
-  CPUID.(EAX=12H,ECX=0H):EAX[0]=1, Write permitted if CPUID.(EAX=12H,ECX=0H):
-  EAX[0]=1 && IA32_FEATURE_CONTROL[17] = 1 && IA32_FEATURE_CONTROL[0] = 1.
-
-  @param  ECX  MSR_IA32_SGXLEPUBKEYHASHn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_SGXLEPUBKEYHASHn);
-  AsmWriteMsr64 (MSR_IA32_SGXLEPUBKEYHASHn, Msr);
-  @endcode
-  @note MSR_IA32_SGXLEPUBKEYHASH0 is defined as IA32_SGXLEPUBKEYHASH0 in SDM.
-        MSR_IA32_SGXLEPUBKEYHASH1 is defined as IA32_SGXLEPUBKEYHASH1 in SDM.
-        MSR_IA32_SGXLEPUBKEYHASH2 is defined as IA32_SGXLEPUBKEYHASH2 in SDM.
-        MSR_IA32_SGXLEPUBKEYHASH3 is defined as IA32_SGXLEPUBKEYHASH3 in SDM.
-  @{
-**/
-#define MSR_IA32_SGXLEPUBKEYHASH0                0x0000008C
-#define MSR_IA32_SGXLEPUBKEYHASH1                0x0000008D
-#define MSR_IA32_SGXLEPUBKEYHASH2                0x0000008E
-#define MSR_IA32_SGXLEPUBKEYHASH3                0x0000008F
-/// @}
-
-
-/**
-  SMM Monitor Configuration (R/W). If CPUID.01H: ECX[5]=1 or CPUID.01H: ECX[6] =
-  1.
-
-  @param  ECX  MSR_IA32_SMM_MONITOR_CTL (0x0000009B)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_SMM_MONITOR_CTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMM_MONITOR_CTL);
-  AsmWriteMsr64 (MSR_IA32_SMM_MONITOR_CTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_SMM_MONITOR_CTL is defined as IA32_SMM_MONITOR_CTL in SDM.
-**/
-#define MSR_IA32_SMM_MONITOR_CTL                 0x0000009B
-
-/**
-  MSR information returned for MSR index #MSR_IA32_SMM_MONITOR_CTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Valid (R/W).  The STM may be invoked using VMCALL only if this
-    /// bit is 1. Because VMCALL is used to activate the dual-monitor treatment
-    /// (see Section 34.15.6), the dual-monitor treatment cannot be activated
-    /// if the bit is 0. This bit is cleared when the logical processor is
-    /// reset.
-    ///
-    UINT32  Valid:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 2] Controls SMI unblocking by VMXOFF (see Section 34.14.4). If
-    /// IA32_VMX_MISC[28].
-    ///
-    UINT32  BlockSmi:1;
-    UINT32  Reserved2:9;
-    ///
-    /// [Bits 31:12] MSEG Base (R/W).
-    ///
-    UINT32  MsegBase:20;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_SMM_MONITOR_CTL_REGISTER;
-
-/**
-  MSEG header that is located at the physical address specified by the MsegBase
-  field of #MSR_IA32_SMM_MONITOR_CTL_REGISTER.
-**/
-typedef struct {
-  ///
-  /// Different processors may use different MSEG revision identifiers. These
-  /// identifiers enable software to avoid using an MSEG header formatted for
-  /// one processor on a processor that uses a different format. Software can
-  /// discover the MSEG revision identifier that a processor uses by reading
-  /// the VMX capability MSR IA32_VMX_MISC.
-  //
-  UINT32  MsegHeaderRevision;
-  ///
-  /// Bits 31:1 of this field are reserved and must be zero. Bit 0 of the field
-  /// is the IA-32e mode SMM feature bit. It indicates whether the logical
-  /// processor will be in IA-32e mode after the STM is activated.
-  ///
-  UINT32  MonitorFeatures;
-  UINT32  GdtrLimit;
-  UINT32  GdtrBaseOffset;
-  UINT32  CsSelector;
-  UINT32  EipOffset;
-  UINT32  EspOffset;
-  UINT32  Cr3Offset;
-  ///
-  /// Pad header so total size is 2KB
-  ///
-  UINT8   Reserved[SIZE_2KB - 8 * sizeof (UINT32)];
-} MSEG_HEADER;
-
-///
-/// @{ Define values for the MonitorFeatures field of #MSEG_HEADER
-///
-#define STM_FEATURES_IA32E 0x1
-///
-/// @}
-///
-
-/**
-  Base address of the logical processor's SMRAM image (RO, SMM only). If
-  IA32_VMX_MISC[15].
-
-  @param  ECX  MSR_IA32_SMBASE (0x0000009E)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_SMBASE);
-  @endcode
-  @note MSR_IA32_SMBASE is defined as IA32_SMBASE in SDM.
-**/
-#define MSR_IA32_SMBASE                          0x0000009E
-
-
-/**
-  General Performance Counters (R/W).
-  MSR_IA32_PMCn is supported if CPUID.0AH: EAX[15:8] > n.
-
-  @param  ECX  MSR_IA32_PMCn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_PMC0);
-  AsmWriteMsr64 (MSR_IA32_PMC0, Msr);
-  @endcode
-  @note MSR_IA32_PMC0 is defined as IA32_PMC0 in SDM.
-        MSR_IA32_PMC1 is defined as IA32_PMC1 in SDM.
-        MSR_IA32_PMC2 is defined as IA32_PMC2 in SDM.
-        MSR_IA32_PMC3 is defined as IA32_PMC3 in SDM.
-        MSR_IA32_PMC4 is defined as IA32_PMC4 in SDM.
-        MSR_IA32_PMC5 is defined as IA32_PMC5 in SDM.
-        MSR_IA32_PMC6 is defined as IA32_PMC6 in SDM.
-        MSR_IA32_PMC7 is defined as IA32_PMC7 in SDM.
-  @{
-**/
-#define MSR_IA32_PMC0                            0x000000C1
-#define MSR_IA32_PMC1                            0x000000C2
-#define MSR_IA32_PMC2                            0x000000C3
-#define MSR_IA32_PMC3                            0x000000C4
-#define MSR_IA32_PMC4                            0x000000C5
-#define MSR_IA32_PMC5                            0x000000C6
-#define MSR_IA32_PMC6                            0x000000C7
-#define MSR_IA32_PMC7                            0x000000C8
-/// @}
-
-
-/**
-  TSC Frequency Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] = 1.
-  C0_MCNT: C0 TSC Frequency Clock Count Increments at fixed interval (relative
-  to TSC freq.) when the logical processor is in C0. Cleared upon overflow /
-  wrap-around of IA32_APERF.
-
-  @param  ECX  MSR_IA32_MPERF (0x000000E7)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MPERF);
-  AsmWriteMsr64 (MSR_IA32_MPERF, Msr);
-  @endcode
-  @note MSR_IA32_MPERF is defined as IA32_MPERF in SDM.
-**/
-#define MSR_IA32_MPERF                           0x000000E7
-
-
-/**
-  Actual Performance Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] =
-  1. C0_ACNT: C0 Actual Frequency Clock Count Accumulates core clock counts at
-  the coordinated clock frequency, when the logical processor is in C0.
-  Cleared upon overflow / wrap-around of IA32_MPERF.
-
-  @param  ECX  MSR_IA32_APERF (0x000000E8)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_APERF);
-  AsmWriteMsr64 (MSR_IA32_APERF, Msr);
-  @endcode
-  @note MSR_IA32_APERF is defined as IA32_APERF in SDM.
-**/
-#define MSR_IA32_APERF                           0x000000E8
-
-
-/**
-  MTRR Capability (RO) Section 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR.".
-  Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_MTRRCAP (0x000000FE)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRRCAP_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRRCAP_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MTRRCAP_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP);
-  @endcode
-  @note MSR_IA32_MTRRCAP is defined as IA32_MTRRCAP in SDM.
-**/
-#define MSR_IA32_MTRRCAP                         0x000000FE
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MTRRCAP
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] VCNT: The number of variable memory type ranges in the
-    /// processor.
-    ///
-    UINT32  VCNT:8;
-    ///
-    /// [Bit 8] Fixed range MTRRs are supported when set.
-    ///
-    UINT32  FIX:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 10] WC Supported when set.
-    ///
-    UINT32  WC:1;
-    ///
-    /// [Bit 11] SMRR Supported when set.
-    ///
-    UINT32  SMRR:1;
-    UINT32  Reserved2:20;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MTRRCAP_REGISTER;
-
-
-/**
-  SYSENTER_CS_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_SYSENTER_CS (0x00000174)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_SYSENTER_CS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SYSENTER_CS);
-  AsmWriteMsr64 (MSR_IA32_SYSENTER_CS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_SYSENTER_CS is defined as IA32_SYSENTER_CS in SDM.
-**/
-#define MSR_IA32_SYSENTER_CS                     0x00000174
-
-/**
-  MSR information returned for MSR index #MSR_IA32_SYSENTER_CS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 15:0] CS Selector.
-    ///
-    UINT32  CS:16;
-    UINT32  Reserved1:16;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_SYSENTER_CS_REGISTER;
-
-
-/**
-  SYSENTER_ESP_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_SYSENTER_ESP (0x00000175)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_ESP);
-  AsmWriteMsr64 (MSR_IA32_SYSENTER_ESP, Msr);
-  @endcode
-  @note MSR_IA32_SYSENTER_ESP is defined as IA32_SYSENTER_ESP in SDM.
-**/
-#define MSR_IA32_SYSENTER_ESP                    0x00000175
-
-
-/**
-  SYSENTER_EIP_MSR (R/W). Introduced at Display Family / Display Model 06_01H.
-
-  @param  ECX  MSR_IA32_SYSENTER_EIP (0x00000176)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_EIP);
-  AsmWriteMsr64 (MSR_IA32_SYSENTER_EIP, Msr);
-  @endcode
-  @note MSR_IA32_SYSENTER_EIP is defined as IA32_SYSENTER_EIP in SDM.
-**/
-#define MSR_IA32_SYSENTER_EIP                    0x00000176
-
-
-/**
-  Global Machine Check Capability (RO). Introduced at Display Family / Display
-  Model 06_01H.
-
-  @param  ECX  MSR_IA32_MCG_CAP (0x00000179)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_CAP_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_CAP_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MCG_CAP_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
-  @endcode
-  @note MSR_IA32_MCG_CAP is defined as IA32_MCG_CAP in SDM.
-**/
-#define MSR_IA32_MCG_CAP                         0x00000179
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MCG_CAP
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Count: Number of reporting banks.
-    ///
-    UINT32  Count:8;
-    ///
-    /// [Bit 8] MCG_CTL_P: IA32_MCG_CTL is present if this bit is set.
-    ///
-    UINT32  MCG_CTL_P:1;
-    ///
-    /// [Bit 9] MCG_EXT_P: Extended machine check state registers are present
-    /// if this bit is set.
-    ///
-    UINT32  MCG_EXT_P:1;
-    ///
-    /// [Bit 10] MCP_CMCI_P: Support for corrected MC error event is present.
-    /// Introduced at Display Family / Display Model 06_01H.
-    ///
-    UINT32  MCP_CMCI_P:1;
-    ///
-    /// [Bit 11] MCG_TES_P: Threshold-based error status register are present
-    /// if this bit is set.
-    ///
-    UINT32  MCG_TES_P:1;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bits 23:16] MCG_EXT_CNT: Number of extended machine check state
-    /// registers present.
-    ///
-    UINT32  MCG_EXT_CNT:8;
-    ///
-    /// [Bit 24] MCG_SER_P: The processor supports software error recovery if
-    /// this bit is set.
-    ///
-    UINT32  MCG_SER_P:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bit 26] MCG_ELOG_P: Indicates that the processor allows platform
-    /// firmware to be invoked when an error is detected so that it may
-    /// provide additional platform specific information in an ACPI format
-    /// "Generic Error Data Entry" that augments the data included in machine
-    /// check bank registers. Introduced at Display Family / Display Model
-    /// 06_3EH.
-    ///
-    UINT32  MCG_ELOG_P:1;
-    ///
-    /// [Bit 27] MCG_LMCE_P: Indicates that the processor support extended
-    /// state in IA32_MCG_STATUS and associated MSR necessary to configure
-    /// Local Machine Check Exception (LMCE). Introduced at Display Family /
-    /// Display Model 06_3EH.
-    ///
-    UINT32  MCG_LMCE_P:1;
-    UINT32  Reserved3:4;
-    UINT32  Reserved4:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MCG_CAP_REGISTER;
-
-
-/**
-  Global Machine Check Status (R/W0). Introduced at Display Family / Display
-  Model 06_01H.
-
-  @param  ECX  MSR_IA32_MCG_STATUS (0x0000017A)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MCG_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_STATUS);
-  AsmWriteMsr64 (MSR_IA32_MCG_STATUS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MCG_STATUS is defined as IA32_MCG_STATUS in SDM.
-**/
-#define MSR_IA32_MCG_STATUS                      0x0000017A
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MCG_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] RIPV. Restart IP valid. Introduced at Display Family / Display
-    /// Model 06_01H.
-    ///
-    UINT32  RIPV:1;
-    ///
-    /// [Bit 1] EIPV. Error IP valid. Introduced at Display Family / Display
-    /// Model 06_01H.
-    ///
-    UINT32  EIPV:1;
-    ///
-    /// [Bit 2] MCIP. Machine check in progress. Introduced at Display Family
-    /// / Display Model 06_01H.
-    ///
-    UINT32  MCIP:1;
-    ///
-    /// [Bit 3] LMCE_S. If IA32_MCG_CAP.LMCE_P[2 7] =1.
-    ///
-    UINT32  LMCE_S:1;
-    UINT32  Reserved1:28;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MCG_STATUS_REGISTER;
-
-
-/**
-  Global Machine Check Control (R/W). If IA32_MCG_CAP.CTL_P[8] =1.
-
-  @param  ECX  MSR_IA32_MCG_CTL (0x0000017B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MCG_CTL);
-  AsmWriteMsr64 (MSR_IA32_MCG_CTL, Msr);
-  @endcode
-  @note MSR_IA32_MCG_CTL is defined as IA32_MCG_CTL in SDM.
-**/
-#define MSR_IA32_MCG_CTL                         0x0000017B
-
-
-/**
-  Performance Event Select Register n (R/W). If CPUID.0AH: EAX[15:8] > n.
-
-  @param  ECX  MSR_IA32_PERFEVTSELn
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERFEVTSEL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERFEVTSEL0);
-  AsmWriteMsr64 (MSR_IA32_PERFEVTSEL0, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERFEVTSEL0 is defined as IA32_PERFEVTSEL0 in SDM.
-        MSR_IA32_PERFEVTSEL1 is defined as IA32_PERFEVTSEL1 in SDM.
-        MSR_IA32_PERFEVTSEL2 is defined as IA32_PERFEVTSEL2 in SDM.
-        MSR_IA32_PERFEVTSEL3 is defined as IA32_PERFEVTSEL3 in SDM.
-  @{
-**/
-#define MSR_IA32_PERFEVTSEL0                     0x00000186
-#define MSR_IA32_PERFEVTSEL1                     0x00000187
-#define MSR_IA32_PERFEVTSEL2                     0x00000188
-#define MSR_IA32_PERFEVTSEL3                     0x00000189
-/// @}
-
-/**
-  MSR information returned for MSR indexes #MSR_IA32_PERFEVTSEL0 to
-  #MSR_IA32_PERFEVTSEL3
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Event Select: Selects a performance event logic unit.
-    ///
-    UINT32  EventSelect:8;
-    ///
-    /// [Bits 15:8] UMask: Qualifies the microarchitectural condition to
-    /// detect on the selected event logic.
-    ///
-    UINT32  UMASK:8;
-    ///
-    /// [Bit 16] USR: Counts while in privilege level is not ring 0.
-    ///
-    UINT32  USR:1;
-    ///
-    /// [Bit 17] OS: Counts while in privilege level is ring 0.
-    ///
-    UINT32  OS:1;
-    ///
-    /// [Bit 18] Edge: Enables edge detection if set.
-    ///
-    UINT32  E:1;
-    ///
-    /// [Bit 19] PC: enables pin control.
-    ///
-    UINT32  PC:1;
-    ///
-    /// [Bit 20] INT: enables interrupt on counter overflow.
-    ///
-    UINT32  INT:1;
-    ///
-    /// [Bit 21] AnyThread: When set to 1, it enables counting the associated
-    /// event conditions occurring across all logical processors sharing a
-    /// processor core. When set to 0, the counter only increments the
-    /// associated event conditions occurring in the logical processor which
-    /// programmed the MSR.
-    ///
-    UINT32  ANY:1;
-    ///
-    /// [Bit 22] EN: enables the corresponding performance counter to commence
-    /// counting when this bit is set.
-    ///
-    UINT32  EN:1;
-    ///
-    /// [Bit 23] INV: invert the CMASK.
-    ///
-    UINT32  INV:1;
-    ///
-    /// [Bits 31:24] CMASK: When CMASK is not zero, the corresponding
-    /// performance counter increments each cycle if the event count is
-    /// greater than or equal to the CMASK.
-    ///
-    UINT32  CMASK:8;
-    UINT32  Reserved:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERFEVTSEL_REGISTER;
-
-
-/**
-  Current performance state(P-State) operating point (RO). Introduced at
-  Display Family / Display Model 0F_03H.
-
-  @param  ECX  MSR_IA32_PERF_STATUS (0x00000198)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_STATUS);
-  @endcode
-  @note MSR_IA32_PERF_STATUS is defined as IA32_PERF_STATUS in SDM.
-**/
-#define MSR_IA32_PERF_STATUS                     0x00000198
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 15:0] Current performance State Value.
-    ///
-    UINT32  State:16;
-    UINT32  Reserved1:16;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_STATUS_REGISTER;
-
-
-/**
-  (R/W). Introduced at Display Family / Display Model 0F_03H.
-
-  @param  ECX  MSR_IA32_PERF_CTL (0x00000199)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_CTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_CTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_CTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CTL);
-  AsmWriteMsr64 (MSR_IA32_PERF_CTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_CTL is defined as IA32_PERF_CTL in SDM.
-**/
-#define MSR_IA32_PERF_CTL                        0x00000199
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_CTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 15:0] Target performance State Value.
-    ///
-    UINT32  TargetState:16;
-    UINT32  Reserved1:16;
-    ///
-    /// [Bit 32] IDA Engage. (R/W) When set to 1: disengages IDA. 06_0FH
-    /// (Mobile only).
-    ///
-    UINT32  IDA:1;
-    UINT32  Reserved2:31;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_CTL_REGISTER;
-
-
-/**
-  Clock Modulation Control (R/W) See Section 14.7.3, "Software Controlled
-  Clock Modulation.". If CPUID.01H:EDX[22] = 1.
-
-  @param  ECX  MSR_IA32_CLOCK_MODULATION (0x0000019A)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_CLOCK_MODULATION_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_CLOCK_MODULATION);
-  AsmWriteMsr64 (MSR_IA32_CLOCK_MODULATION, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_CLOCK_MODULATION is defined as IA32_CLOCK_MODULATION in SDM.
-**/
-#define MSR_IA32_CLOCK_MODULATION                0x0000019A
-
-/**
-  MSR information returned for MSR index #MSR_IA32_CLOCK_MODULATION
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Extended On-Demand Clock Modulation Duty Cycle:. If
-    /// CPUID.06H:EAX[5] = 1.
-    ///
-    UINT32  ExtendedOnDemandClockModulationDutyCycle:1;
-    ///
-    /// [Bits 3:1] On-Demand Clock Modulation Duty Cycle: Specific encoded
-    /// values for target duty cycle modulation. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  OnDemandClockModulationDutyCycle:3;
-    ///
-    /// [Bit 4] On-Demand Clock Modulation Enable: Set 1 to enable modulation.
-    /// If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  OnDemandClockModulationEnable:1;
-    UINT32  Reserved1:27;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_CLOCK_MODULATION_REGISTER;
-
-
-/**
-  Thermal Interrupt Control (R/W) Enables and disables the generation of an
-  interrupt on temperature transitions detected with the processor's thermal
-  sensors and thermal monitor. See Section 14.7.2, "Thermal Monitor.".
-  If CPUID.01H:EDX[22] = 1
-
-  @param  ECX  MSR_IA32_THERM_INTERRUPT (0x0000019B)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_THERM_INTERRUPT_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_INTERRUPT);
-  AsmWriteMsr64 (MSR_IA32_THERM_INTERRUPT, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_THERM_INTERRUPT is defined as IA32_THERM_INTERRUPT in SDM.
-**/
-#define MSR_IA32_THERM_INTERRUPT                 0x0000019B
-
-/**
-  MSR information returned for MSR index #MSR_IA32_THERM_INTERRUPT
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] High-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  HighTempEnable:1;
-    ///
-    /// [Bit 1] Low-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  LowTempEnable:1;
-    ///
-    /// [Bit 2] PROCHOT# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  PROCHOT_Enable:1;
-    ///
-    /// [Bit 3] FORCEPR# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  FORCEPR_Enable:1;
-    ///
-    /// [Bit 4] Critical Temperature Interrupt Enable.
-    /// If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  CriticalTempEnable:1;
-    UINT32  Reserved1:3;
-    ///
-    /// [Bits 14:8] Threshold #1 Value. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  Threshold1:7;
-    ///
-    /// [Bit 15] Threshold #1 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  Threshold1Enable:1;
-    ///
-    /// [Bits 22:16] Threshold #2 Value. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  Threshold2:7;
-    ///
-    /// [Bit 23] Threshold #2 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  Threshold2Enable:1;
-    ///
-    /// [Bit 24] Power Limit Notification Enable. If CPUID.06H:EAX[4] = 1.
-    ///
-    UINT32  PowerLimitNotificationEnable:1;
-    UINT32  Reserved2:7;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_THERM_INTERRUPT_REGISTER;
-
-
-/**
-  Thermal Status Information (RO) Contains status information about the
-  processor's thermal sensor and automatic thermal monitoring facilities. See
-  Section 14.7.2, "Thermal Monitor". If CPUID.01H:EDX[22] = 1.
-
-  @param  ECX  MSR_IA32_THERM_STATUS (0x0000019C)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_THERM_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_STATUS);
-  @endcode
-  @note MSR_IA32_THERM_STATUS is defined as IA32_THERM_STATUS in SDM.
-**/
-#define MSR_IA32_THERM_STATUS                    0x0000019C
-
-/**
-  MSR information returned for MSR index #MSR_IA32_THERM_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Thermal Status (RO):. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  ThermalStatus:1;
-    ///
-    /// [Bit 1] Thermal Status Log (R/W):. If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  ThermalStatusLog:1;
-    ///
-    /// [Bit 2] PROCHOT # or FORCEPR# event (RO). If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  PROCHOT_FORCEPR_Event:1;
-    ///
-    /// [Bit 3] PROCHOT # or FORCEPR# log (R/WC0). If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  PROCHOT_FORCEPR_Log:1;
-    ///
-    /// [Bit 4] Critical Temperature Status (RO). If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  CriticalTempStatus:1;
-    ///
-    /// [Bit 5] Critical Temperature Status log (R/WC0).
-    /// If CPUID.01H:EDX[22] = 1.
-    ///
-    UINT32  CriticalTempStatusLog:1;
-    ///
-    /// [Bit 6] Thermal Threshold #1 Status (RO). If CPUID.01H:ECX[8] = 1.
-    ///
-    UINT32  ThermalThreshold1Status:1;
-    ///
-    /// [Bit 7] Thermal Threshold #1 log (R/WC0). If CPUID.01H:ECX[8] = 1.
-    ///
-    UINT32  ThermalThreshold1Log:1;
-    ///
-    /// [Bit 8] Thermal Threshold #2 Status (RO). If CPUID.01H:ECX[8] = 1.
-    ///
-    UINT32  ThermalThreshold2Status:1;
-    ///
-    /// [Bit 9] Thermal Threshold #2 log (R/WC0). If CPUID.01H:ECX[8] = 1.
-    ///
-    UINT32  ThermalThreshold2Log:1;
-    ///
-    /// [Bit 10] Power Limitation Status (RO). If CPUID.06H:EAX[4] = 1.
-    ///
-    UINT32  PowerLimitStatus:1;
-    ///
-    /// [Bit 11] Power Limitation log (R/WC0). If CPUID.06H:EAX[4] = 1.
-    ///
-    UINT32  PowerLimitLog:1;
-    ///
-    /// [Bit 12] Current Limit Status (RO). If CPUID.06H:EAX[7] = 1.
-    ///
-    UINT32  CurrentLimitStatus:1;
-    ///
-    /// [Bit 13] Current Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
-    ///
-    UINT32  CurrentLimitLog:1;
-    ///
-    /// [Bit 14] Cross Domain Limit Status (RO). If CPUID.06H:EAX[7] = 1.
-    ///
-    UINT32  CrossDomainLimitStatus:1;
-    ///
-    /// [Bit 15] Cross Domain Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
-    ///
-    UINT32  CrossDomainLimitLog:1;
-    ///
-    /// [Bits 22:16] Digital Readout (RO). If CPUID.06H:EAX[0] = 1.
-    ///
-    UINT32  DigitalReadout:7;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bits 30:27] Resolution in Degrees Celsius (RO). If CPUID.06H:EAX[0] =
-    /// 1.
-    ///
-    UINT32  ResolutionInDegreesCelsius:4;
-    ///
-    /// [Bit 31] Reading Valid (RO). If CPUID.06H:EAX[0] = 1.
-    ///
-    UINT32  ReadingValid:1;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_THERM_STATUS_REGISTER;
-
-
-/**
-  Enable Misc. Processor Features (R/W)  Allows a variety of processor
-  functions to be enabled and disabled.
-
-  @param  ECX  MSR_IA32_MISC_ENABLE (0x000001A0)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MISC_ENABLE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MISC_ENABLE);
-  AsmWriteMsr64 (MSR_IA32_MISC_ENABLE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MISC_ENABLE is defined as IA32_MISC_ENABLE in SDM.
-**/
-#define MSR_IA32_MISC_ENABLE                     0x000001A0
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MISC_ENABLE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Fast-Strings Enable When set, the fast-strings feature (for
-    /// REP MOVS and REP STORS) is enabled (default); when clear, fast-strings
-    /// are disabled. Introduced at Display Family / Display Model 0F_0H.
-    ///
-    UINT32  FastStrings:1;
-    UINT32  Reserved1:2;
-    ///
-    /// [Bit 3] Automatic Thermal Control Circuit Enable (R/W)  1 = Setting
-    /// this bit enables the thermal control circuit (TCC) portion of the
-    /// Intel Thermal Monitor feature. This allows the processor to
-    /// automatically reduce power consumption in response to TCC activation.
-    /// 0 = Disabled. Note: In some products clearing this bit might be
-    /// ignored in critical thermal conditions, and TM1, TM2 and adaptive
-    /// thermal throttling will still be activated. The default value of this
-    /// field varies with product. See respective tables where default value is
-    /// listed. Introduced at Display Family / Display Model 0F_0H.
-    ///
-    UINT32  AutomaticThermalControlCircuit:1;
-    UINT32  Reserved2:3;
-    ///
-    /// [Bit 7] Performance Monitoring Available (R)  1 = Performance
-    /// monitoring enabled 0 = Performance monitoring disabled. Introduced at
-    /// Display Family / Display Model 0F_0H.
-    ///
-    UINT32  PerformanceMonitoring:1;
-    UINT32  Reserved3:3;
-    ///
-    /// [Bit 11] Branch Trace Storage Unavailable (RO) 1 = Processor doesn't
-    /// support branch trace storage (BTS) 0 = BTS is supported. Introduced at
-    /// Display Family / Display Model 0F_0H.
-    ///
-    UINT32  BTS:1;
-    ///
-    /// [Bit 12] Processor Event Based Sampling (PEBS)  Unavailable (RO)  1 =
-    /// PEBS is not supported; 0 = PEBS is supported. Introduced at Display
-    /// Family / Display Model 06_0FH.
-    ///
-    UINT32  PEBS:1;
-    UINT32  Reserved4:3;
-    ///
-    /// [Bit 16] Enhanced Intel SpeedStep Technology  Enable (R/W) 0= Enhanced
-    /// Intel SpeedStep Technology disabled 1 = Enhanced Intel SpeedStep
-    /// Technology enabled. If CPUID.01H: ECX[7] =1.
-    ///
-    UINT32  EIST:1;
-    UINT32  Reserved5:1;
-    ///
-    /// [Bit 18] ENABLE MONITOR FSM (R/W) When this bit is set to 0, the
-    /// MONITOR feature flag is not set (CPUID.01H:ECX[bit 3] = 0). This
-    /// indicates that MONITOR/MWAIT are not supported. Software attempts to
-    /// execute MONITOR/MWAIT will cause #UD when this bit is 0. When this bit
-    /// is set to 1 (default), MONITOR/MWAIT are supported (CPUID.01H:ECX[bit
-    /// 3] = 1). If the SSE3 feature flag ECX[0] is not set (CPUID.01H:ECX[bit
-    /// 0] = 0), the OS must not attempt to alter this bit. BIOS must leave it
-    /// in the default state. Writing this bit when the SSE3 feature flag is
-    /// set to 0 may generate a #GP exception. Introduced at Display Family /
-    /// Display Model 0F_03H.
-    ///
-    UINT32  MONITOR:1;
-    UINT32  Reserved6:3;
-    ///
-    /// [Bit 22] Limit CPUID Maxval (R/W) When this bit is set to 1, CPUID.00H
-    /// returns a maximum value in EAX[7:0] of 2. BIOS should contain a setup
-    /// question that allows users to specify when the installed OS does not
-    /// support CPUID functions greater than 2. Before setting this bit, BIOS
-    /// must execute the CPUID.0H and examine the maximum value returned in
-    /// EAX[7:0]. If the maximum value is greater than 2, this bit is
-    /// supported. Otherwise, this bit is not supported. Setting this bit when
-    /// the maximum value is not greater than 2 may generate a #GP exception.
-    /// Setting this bit may cause unexpected behavior in software that
-    /// depends on the availability of CPUID leaves greater than 2. Introduced
-    /// at Display Family / Display Model 0F_03H.
-    ///
-    UINT32  LimitCpuidMaxval:1;
-    ///
-    /// [Bit 23] xTPR Message Disable (R/W) When set to 1, xTPR messages are
-    /// disabled. xTPR messages are optional messages that allow the processor
-    /// to inform the chipset of its priority. if CPUID.01H:ECX[14] = 1.
-    ///
-    UINT32  xTPR_Message_Disable:1;
-    UINT32  Reserved7:8;
-    UINT32  Reserved8:2;
-    ///
-    /// [Bit 34] XD Bit Disable (R/W) When set to 1, the Execute Disable Bit
-    /// feature (XD Bit) is disabled and the XD Bit extended feature flag will
-    /// be clear (CPUID.80000001H: EDX[20]=0). When set to a 0 (default), the
-    /// Execute Disable Bit feature (if available) allows the OS to enable PAE
-    /// paging and take advantage of data only pages. BIOS must not alter the
-    /// contents of this bit location, if XD bit is not supported. Writing
-    /// this bit to 1 when the XD Bit extended feature flag is set to 0 may
-    /// generate a #GP exception. if CPUID.80000001H:EDX[2 0] = 1.
-    ///
-    UINT32  XD:1;
-    UINT32  Reserved9:29;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MISC_ENABLE_REGISTER;
-
-
-/**
-  Performance Energy Bias Hint (R/W). if CPUID.6H:ECX[3] = 1.
-
-  @param  ECX  MSR_IA32_ENERGY_PERF_BIAS (0x000001B0)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_ENERGY_PERF_BIAS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_ENERGY_PERF_BIAS);
-  AsmWriteMsr64 (MSR_IA32_ENERGY_PERF_BIAS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_ENERGY_PERF_BIAS is defined as IA32_ENERGY_PERF_BIAS in SDM.
-**/
-#define MSR_IA32_ENERGY_PERF_BIAS                0x000001B0
-
-/**
-  MSR information returned for MSR index #MSR_IA32_ENERGY_PERF_BIAS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 3:0] Power Policy Preference: 0 indicates preference to highest
-    /// performance. 15 indicates preference to maximize energy saving.
-    ///
-    UINT32  PowerPolicyPreference:4;
-    UINT32  Reserved1:28;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_ENERGY_PERF_BIAS_REGISTER;
-
-
-/**
-  Package Thermal Status Information (RO) Contains status information about
-  the package's thermal sensor. See Section 14.8, "Package Level Thermal
-  Management.". If CPUID.06H: EAX[6] = 1.
-
-  @param  ECX  MSR_IA32_PACKAGE_THERM_STATUS (0x000001B1)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PACKAGE_THERM_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_STATUS);
-  @endcode
-  @note MSR_IA32_PACKAGE_THERM_STATUS is defined as IA32_PACKAGE_THERM_STATUS in SDM.
-**/
-#define MSR_IA32_PACKAGE_THERM_STATUS            0x000001B1
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PACKAGE_THERM_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Pkg Thermal Status (RO):.
-    ///
-    UINT32  ThermalStatus:1;
-    ///
-    /// [Bit 1] Pkg Thermal Status Log (R/W):.
-    ///
-    UINT32  ThermalStatusLog:1;
-    ///
-    /// [Bit 2] Pkg PROCHOT # event (RO).
-    ///
-    UINT32  PROCHOT_Event:1;
-    ///
-    /// [Bit 3] Pkg PROCHOT # log (R/WC0).
-    ///
-    UINT32  PROCHOT_Log:1;
-    ///
-    /// [Bit 4] Pkg Critical Temperature Status (RO).
-    ///
-    UINT32  CriticalTempStatus:1;
-    ///
-    /// [Bit 5] Pkg Critical Temperature Status log (R/WC0).
-    ///
-    UINT32  CriticalTempStatusLog:1;
-    ///
-    /// [Bit 6] Pkg Thermal Threshold #1 Status (RO).
-    ///
-    UINT32  ThermalThreshold1Status:1;
-    ///
-    /// [Bit 7] Pkg Thermal Threshold #1 log (R/WC0).
-    ///
-    UINT32  ThermalThreshold1Log:1;
-    ///
-    /// [Bit 8] Pkg Thermal Threshold #2 Status (RO).
-    ///
-    UINT32  ThermalThreshold2Status:1;
-    ///
-    /// [Bit 9] Pkg Thermal Threshold #1 log (R/WC0).
-    ///
-    UINT32  ThermalThreshold2Log:1;
-    ///
-    /// [Bit 10] Pkg Power Limitation Status (RO).
-    ///
-    UINT32  PowerLimitStatus:1;
-    ///
-    /// [Bit 11] Pkg Power Limitation log (R/WC0).
-    ///
-    UINT32  PowerLimitLog:1;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bits 22:16] Pkg Digital Readout (RO).
-    ///
-    UINT32  DigitalReadout:7;
-    UINT32  Reserved2:9;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PACKAGE_THERM_STATUS_REGISTER;
-
-
-/**
-  Pkg Thermal Interrupt Control (R/W) Enables and disables the generation of
-  an interrupt on temperature transitions detected with the package's thermal
-  sensor. See Section 14.8, "Package Level Thermal Management.". If CPUID.06H:
-  EAX[6] = 1.
-
-  @param  ECX  MSR_IA32_PACKAGE_THERM_INTERRUPT (0x000001B2)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT);
-  AsmWriteMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PACKAGE_THERM_INTERRUPT is defined as IA32_PACKAGE_THERM_INTERRUPT in SDM.
-**/
-#define MSR_IA32_PACKAGE_THERM_INTERRUPT         0x000001B2
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PACKAGE_THERM_INTERRUPT
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Pkg High-Temperature Interrupt Enable.
-    ///
-    UINT32  HighTempEnable:1;
-    ///
-    /// [Bit 1] Pkg Low-Temperature Interrupt Enable.
-    ///
-    UINT32  LowTempEnable:1;
-    ///
-    /// [Bit 2] Pkg PROCHOT# Interrupt Enable.
-    ///
-    UINT32  PROCHOT_Enable:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 4] Pkg Overheat Interrupt Enable.
-    ///
-    UINT32  OverheatEnable:1;
-    UINT32  Reserved2:3;
-    ///
-    /// [Bits 14:8] Pkg Threshold #1 Value.
-    ///
-    UINT32  Threshold1:7;
-    ///
-    /// [Bit 15] Pkg Threshold #1 Interrupt Enable.
-    ///
-    UINT32  Threshold1Enable:1;
-    ///
-    /// [Bits 22:16] Pkg Threshold #2 Value.
-    ///
-    UINT32  Threshold2:7;
-    ///
-    /// [Bit 23] Pkg Threshold #2 Interrupt Enable.
-    ///
-    UINT32  Threshold2Enable:1;
-    ///
-    /// [Bit 24] Pkg Power Limit Notification Enable.
-    ///
-    UINT32  PowerLimitNotificationEnable:1;
-    UINT32  Reserved3:7;
-    UINT32  Reserved4:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER;
-
-
-/**
-  Trace/Profile Resource Control (R/W). Introduced at Display Family / Display
-  Model 06_0EH.
-
-  @param  ECX  MSR_IA32_DEBUGCTL (0x000001D9)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_DEBUGCTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL);
-  AsmWriteMsr64 (MSR_IA32_DEBUGCTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_DEBUGCTL is defined as IA32_DEBUGCTL in SDM.
-**/
-#define MSR_IA32_DEBUGCTL                        0x000001D9
-
-/**
-  MSR information returned for MSR index #MSR_IA32_DEBUGCTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] LBR: Setting this bit to 1 enables the processor to record a
-    /// running trace of the most recent branches taken by the processor in
-    /// the LBR stack. Introduced at Display Family / Display Model 06_01H.
-    ///
-    UINT32  LBR:1;
-    ///
-    /// [Bit 1] BTF: Setting this bit to 1 enables the processor to treat
-    /// EFLAGS.TF as single-step on branches instead of single-step on
-    /// instructions. Introduced at Display Family / Display Model 06_01H.
-    ///
-    UINT32  BTF:1;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bit 6] TR: Setting this bit to 1 enables branch trace messages to be
-    /// sent. Introduced at Display Family / Display Model 06_0EH.
-    ///
-    UINT32  TR:1;
-    ///
-    /// [Bit 7] BTS: Setting this bit enables branch trace messages (BTMs) to
-    /// be logged in a BTS buffer. Introduced at Display Family / Display
-    /// Model 06_0EH.
-    ///
-    UINT32  BTS:1;
-    ///
-    /// [Bit 8] BTINT: When clear, BTMs are logged in a BTS buffer in circular
-    /// fashion. When this bit is set, an interrupt is generated by the BTS
-    /// facility when the BTS buffer is full. Introduced at Display Family /
-    /// Display Model 06_0EH.
-    ///
-    UINT32  BTINT:1;
-    ///
-    /// [Bit 9] BTS_OFF_OS: When set, BTS or BTM is skipped if CPL = 0.
-    /// Introduced at Display Family / Display Model 06_0FH.
-    ///
-    UINT32  BTS_OFF_OS:1;
-    ///
-    /// [Bit 10] BTS_OFF_USR: When set, BTS or BTM is skipped if CPL > 0.
-    /// Introduced at Display Family / Display Model 06_0FH.
-    ///
-    UINT32  BTS_OFF_USR:1;
-    ///
-    /// [Bit 11] FREEZE_LBRS_ON_PMI: When set, the LBR stack is frozen on a
-    /// PMI request. If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
-    ///
-    UINT32  FREEZE_LBRS_ON_PMI:1;
-    ///
-    /// [Bit 12] FREEZE_PERFMON_ON_PMI: When set, each ENABLE bit of the
-    /// global counter control MSR are frozen (address 38FH) on a PMI request.
-    /// If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
-    ///
-    UINT32  FREEZE_PERFMON_ON_PMI:1;
-    ///
-    /// [Bit 13] ENABLE_UNCORE_PMI: When set, enables the logical processor to
-    /// receive and generate PMI on behalf of the uncore. Introduced at
-    /// Display Family / Display Model 06_1AH.
-    ///
-    UINT32  ENABLE_UNCORE_PMI:1;
-    ///
-    /// [Bit 14] FREEZE_WHILE_SMM: When set, freezes perfmon and trace
-    /// messages while in SMM. If IA32_PERF_CAPABILITIES[ 12] = 1.
-    ///
-    UINT32  FREEZE_WHILE_SMM:1;
-    ///
-    /// [Bit 15] RTM_DEBUG: When set, enables DR7 debug bit on XBEGIN. If
-    /// (CPUID.(EAX=07H, ECX=0):EBX[11] = 1).
-    ///
-    UINT32  RTM_DEBUG:1;
-    UINT32  Reserved2:16;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_DEBUGCTL_REGISTER;
-
-
-/**
-  SMRR Base Address (Writeable only in SMM)  Base address of SMM memory range.
-  If IA32_MTRRCAP.SMRR[11] = 1.
-
-  @param  ECX  MSR_IA32_SMRR_PHYSBASE (0x000001F2)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_SMRR_PHYSBASE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSBASE);
-  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSBASE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_SMRR_PHYSBASE is defined as IA32_SMRR_PHYSBASE in SDM.
-**/
-#define MSR_IA32_SMRR_PHYSBASE                   0x000001F2
-
-/**
-  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSBASE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Type. Specifies memory type of the range.
-    ///
-    UINT32  Type:8;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bits 31:12] PhysBase.  SMRR physical Base Address.
-    ///
-    UINT32  PhysBase:20;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_SMRR_PHYSBASE_REGISTER;
-
-
-/**
-  SMRR Range Mask (Writeable only in SMM) Range Mask of SMM memory range. If
-  IA32_MTRRCAP[SMRR] = 1.
-
-  @param  ECX  MSR_IA32_SMRR_PHYSMASK (0x000001F3)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_SMRR_PHYSMASK_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSMASK);
-  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSMASK, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_SMRR_PHYSMASK is defined as IA32_SMRR_PHYSMASK in SDM.
-**/
-#define MSR_IA32_SMRR_PHYSMASK                   0x000001F3
-
-/**
-  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSMASK
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved1:11;
-    ///
-    /// [Bit 11] Valid Enable range mask.
-    ///
-    UINT32  Valid:1;
-    ///
-    /// [Bits 31:12] PhysMask SMRR address range mask.
-    ///
-    UINT32  PhysMask:20;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_SMRR_PHYSMASK_REGISTER;
-
-
-/**
-  DCA Capability (R). If CPUID.01H: ECX[18] = 1.
-
-  @param  ECX  MSR_IA32_PLATFORM_DCA_CAP (0x000001F8)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_PLATFORM_DCA_CAP);
-  @endcode
-  @note MSR_IA32_PLATFORM_DCA_CAP is defined as IA32_PLATFORM_DCA_CAP in SDM.
-**/
-#define MSR_IA32_PLATFORM_DCA_CAP                0x000001F8
-
-
-/**
-  If set, CPU supports Prefetch-Hint type. If CPUID.01H: ECX[18] = 1.
-
-  @param  ECX  MSR_IA32_CPU_DCA_CAP (0x000001F9)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_CPU_DCA_CAP);
-  AsmWriteMsr64 (MSR_IA32_CPU_DCA_CAP, Msr);
-  @endcode
-  @note MSR_IA32_CPU_DCA_CAP is defined as IA32_CPU_DCA_CAP in SDM.
-**/
-#define MSR_IA32_CPU_DCA_CAP                     0x000001F9
-
-
-/**
-  DCA type 0 Status and Control register. If CPUID.01H: ECX[18] = 1.
-
-  @param  ECX  MSR_IA32_DCA_0_CAP (0x000001FA)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_DCA_0_CAP_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DCA_0_CAP);
-  AsmWriteMsr64 (MSR_IA32_DCA_0_CAP, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_DCA_0_CAP is defined as IA32_DCA_0_CAP in SDM.
-**/
-#define MSR_IA32_DCA_0_CAP                       0x000001FA
-
-/**
-  MSR information returned for MSR index #MSR_IA32_DCA_0_CAP
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] DCA_ACTIVE: Set by HW when DCA is fuseenabled and no
-    /// defeatures are set.
-    ///
-    UINT32  DCA_ACTIVE:1;
-    ///
-    /// [Bits 2:1] TRANSACTION.
-    ///
-    UINT32  TRANSACTION:2;
-    ///
-    /// [Bits 6:3] DCA_TYPE.
-    ///
-    UINT32  DCA_TYPE:4;
-    ///
-    /// [Bits 10:7] DCA_QUEUE_SIZE.
-    ///
-    UINT32  DCA_QUEUE_SIZE:4;
-    UINT32  Reserved1:2;
-    ///
-    /// [Bits 16:13] DCA_DELAY: Writes will update the register but have no HW
-    /// side-effect.
-    ///
-    UINT32  DCA_DELAY:4;
-    UINT32  Reserved2:7;
-    ///
-    /// [Bit 24] SW_BLOCK: SW can request DCA block by setting this bit.
-    ///
-    UINT32  SW_BLOCK:1;
-    UINT32  Reserved3:1;
-    ///
-    /// [Bit 26] HW_BLOCK: Set when DCA is blocked by HW (e.g. CR0.CD = 1).
-    ///
-    UINT32  HW_BLOCK:1;
-    UINT32  Reserved4:5;
-    UINT32  Reserved5:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_DCA_0_CAP_REGISTER;
-
-
-/**
-  MTRRphysBasen.  See Section 11.11.2.3, "Variable Range MTRRs".
-  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
-
-  @param  ECX  MSR_IA32_MTRR_PHYSBASEn
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MTRR_PHYSBASE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0);
-  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSBASE0, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MTRR_PHYSBASE0 is defined as IA32_MTRR_PHYSBASE0 in SDM.
-        MSR_IA32_MTRR_PHYSBASE1 is defined as IA32_MTRR_PHYSBASE1 in SDM.
-        MSR_IA32_MTRR_PHYSBASE2 is defined as IA32_MTRR_PHYSBASE2 in SDM.
-        MSR_IA32_MTRR_PHYSBASE3 is defined as IA32_MTRR_PHYSBASE3 in SDM.
-        MSR_IA32_MTRR_PHYSBASE4 is defined as IA32_MTRR_PHYSBASE4 in SDM.
-        MSR_IA32_MTRR_PHYSBASE5 is defined as IA32_MTRR_PHYSBASE5 in SDM.
-        MSR_IA32_MTRR_PHYSBASE6 is defined as IA32_MTRR_PHYSBASE6 in SDM.
-        MSR_IA32_MTRR_PHYSBASE7 is defined as IA32_MTRR_PHYSBASE7 in SDM.
-        MSR_IA32_MTRR_PHYSBASE8 is defined as IA32_MTRR_PHYSBASE8 in SDM.
-        MSR_IA32_MTRR_PHYSBASE9 is defined as IA32_MTRR_PHYSBASE9 in SDM.
-  @{
-**/
-#define MSR_IA32_MTRR_PHYSBASE0                  0x00000200
-#define MSR_IA32_MTRR_PHYSBASE1                  0x00000202
-#define MSR_IA32_MTRR_PHYSBASE2                  0x00000204
-#define MSR_IA32_MTRR_PHYSBASE3                  0x00000206
-#define MSR_IA32_MTRR_PHYSBASE4                  0x00000208
-#define MSR_IA32_MTRR_PHYSBASE5                  0x0000020A
-#define MSR_IA32_MTRR_PHYSBASE6                  0x0000020C
-#define MSR_IA32_MTRR_PHYSBASE7                  0x0000020E
-#define MSR_IA32_MTRR_PHYSBASE8                  0x00000210
-#define MSR_IA32_MTRR_PHYSBASE9                  0x00000212
-/// @}
-
-/**
-  MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
-  #MSR_IA32_MTRR_PHYSBASE9
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Type. Specifies memory type of the range.
-    ///
-    UINT32  Type:8;
-    UINT32  Reserved1:4;
-    ///
-    /// [Bits 31:12] PhysBase.  MTRR physical Base Address.
-    ///
-    UINT32  PhysBase:20;
-    ///
-    /// [Bits MAXPHYSADDR:32] PhysBase.  Upper bits of MTRR physical Base Address.
-    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on the
-    /// maximum physical address range supported by the processor. It is
-    /// reported by CPUID leaf function 80000008H. If CPUID does not support
-    /// leaf 80000008H, the processor supports 36-bit physical address size,
-    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
-    ///
-    UINT32  PhysBaseHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MTRR_PHYSBASE_REGISTER;
-
-
-/**
-  MTRRphysMaskn.  See Section 11.11.2.3, "Variable Range MTRRs".
-  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
-
-  @param  ECX  MSR_IA32_MTRR_PHYSMASKn
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MTRR_PHYSMASK_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0);
-  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSMASK0, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MTRR_PHYSMASK0 is defined as IA32_MTRR_PHYSMASK0 in SDM.
-        MSR_IA32_MTRR_PHYSMASK1 is defined as IA32_MTRR_PHYSMASK1 in SDM.
-        MSR_IA32_MTRR_PHYSMASK2 is defined as IA32_MTRR_PHYSMASK2 in SDM.
-        MSR_IA32_MTRR_PHYSMASK3 is defined as IA32_MTRR_PHYSMASK3 in SDM.
-        MSR_IA32_MTRR_PHYSMASK4 is defined as IA32_MTRR_PHYSMASK4 in SDM.
-        MSR_IA32_MTRR_PHYSMASK5 is defined as IA32_MTRR_PHYSMASK5 in SDM.
-        MSR_IA32_MTRR_PHYSMASK6 is defined as IA32_MTRR_PHYSMASK6 in SDM.
-        MSR_IA32_MTRR_PHYSMASK7 is defined as IA32_MTRR_PHYSMASK7 in SDM.
-        MSR_IA32_MTRR_PHYSMASK8 is defined as IA32_MTRR_PHYSMASK8 in SDM.
-        MSR_IA32_MTRR_PHYSMASK9 is defined as IA32_MTRR_PHYSMASK9 in SDM.
-  @{
-**/
-#define MSR_IA32_MTRR_PHYSMASK0                  0x00000201
-#define MSR_IA32_MTRR_PHYSMASK1                  0x00000203
-#define MSR_IA32_MTRR_PHYSMASK2                  0x00000205
-#define MSR_IA32_MTRR_PHYSMASK3                  0x00000207
-#define MSR_IA32_MTRR_PHYSMASK4                  0x00000209
-#define MSR_IA32_MTRR_PHYSMASK5                  0x0000020B
-#define MSR_IA32_MTRR_PHYSMASK6                  0x0000020D
-#define MSR_IA32_MTRR_PHYSMASK7                  0x0000020F
-#define MSR_IA32_MTRR_PHYSMASK8                  0x00000211
-#define MSR_IA32_MTRR_PHYSMASK9                  0x00000213
-/// @}
-
-/**
-  MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSMASK0 to
-  #MSR_IA32_MTRR_PHYSMASK9
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved1:11;
-    ///
-    /// [Bit 11] Valid Enable range mask.
-    ///
-    UINT32  V:1;
-    ///
-    /// [Bits 31:12] PhysMask.  MTRR address range mask.
-    ///
-    UINT32  PhysMask:20;
-    ///
-    /// [Bits MAXPHYSADDR:32] PhysMask.  Upper bits of MTRR address range mask.
-    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on the
-    /// maximum physical address range supported by the processor. It is
-    /// reported by CPUID leaf function 80000008H. If CPUID does not support
-    /// leaf 80000008H, the processor supports 36-bit physical address size,
-    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
-    ///
-    UINT32  PhysMaskHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MTRR_PHYSMASK_REGISTER;
-
-
-/**
-  MTRRfix64K_00000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX64K_00000 (0x00000250)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX64K_00000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX64K_00000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX64K_00000 is defined as IA32_MTRR_FIX64K_00000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX64K_00000               0x00000250
-
-
-/**
-  MTRRfix16K_80000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX16K_80000 (0x00000258)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_80000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_80000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX16K_80000 is defined as IA32_MTRR_FIX16K_80000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX16K_80000               0x00000258
-
-
-/**
-  MTRRfix16K_A0000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX16K_A0000 (0x00000259)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_A0000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_A0000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX16K_A0000 is defined as IA32_MTRR_FIX16K_A0000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX16K_A0000               0x00000259
-
-
-/**
-  See Section 11.11.2.2, "Fixed Range MTRRs.". If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_C0000 (0x00000268)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C0000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C0000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_C0000 is defined as IA32_MTRR_FIX4K_C0000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_C0000                0x00000268
-
-
-/**
-  MTRRfix4K_C8000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_C8000 (0x00000269)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C8000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C8000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_C8000 is defined as IA32_MTRR_FIX4K_C8000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_C8000                0x00000269
-
-
-/**
-  MTRRfix4K_D0000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_D0000 (0x0000026A)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D0000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D0000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_D0000 is defined as IA32_MTRR_FIX4K_D0000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_D0000                0x0000026A
-
-
-/**
-  MTRRfix4K_D8000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_D8000 (0x0000026B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D8000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D8000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_D8000 is defined as IA32_MTRR_FIX4K_D8000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_D8000                0x0000026B
-
-
-/**
-  MTRRfix4K_E0000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_E0000 (0x0000026C)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E0000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E0000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_E0000 is defined as IA32_MTRR_FIX4K_E0000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_E0000                0x0000026C
-
-
-/**
-  MTRRfix4K_E8000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_E8000 (0x0000026D)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E8000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E8000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_E8000 is defined as IA32_MTRR_FIX4K_E8000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_E8000                0x0000026D
-
-
-/**
-  MTRRfix4K_F0000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_F0000 (0x0000026E)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F0000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F0000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_F0000 is defined as IA32_MTRR_FIX4K_F0000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_F0000                0x0000026E
-
-
-/**
-  MTRRfix4K_F8000. If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_FIX4K_F8000 (0x0000026F)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F8000);
-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F8000, Msr);
-  @endcode
-  @note MSR_IA32_MTRR_FIX4K_F8000 is defined as IA32_MTRR_FIX4K_F8000 in SDM.
-**/
-#define MSR_IA32_MTRR_FIX4K_F8000                0x0000026F
-
-
-/**
-  IA32_PAT (R/W). If CPUID.01H: EDX.MTRR[16] =1.
-
-  @param  ECX  MSR_IA32_PAT (0x00000277)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PAT_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PAT_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PAT_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PAT);
-  AsmWriteMsr64 (MSR_IA32_PAT, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PAT is defined as IA32_PAT in SDM.
-**/
-#define MSR_IA32_PAT                             0x00000277
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PAT
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 2:0] PA0.
-    ///
-    UINT32  PA0:3;
-    UINT32  Reserved1:5;
-    ///
-    /// [Bits 10:8] PA1.
-    ///
-    UINT32  PA1:3;
-    UINT32  Reserved2:5;
-    ///
-    /// [Bits 18:16] PA2.
-    ///
-    UINT32  PA2:3;
-    UINT32  Reserved3:5;
-    ///
-    /// [Bits 26:24] PA3.
-    ///
-    UINT32  PA3:3;
-    UINT32  Reserved4:5;
-    ///
-    /// [Bits 34:32] PA4.
-    ///
-    UINT32  PA4:3;
-    UINT32  Reserved5:5;
-    ///
-    /// [Bits 42:40] PA5.
-    ///
-    UINT32  PA5:3;
-    UINT32  Reserved6:5;
-    ///
-    /// [Bits 50:48] PA6.
-    ///
-    UINT32  PA6:3;
-    UINT32  Reserved7:5;
-    ///
-    /// [Bits 58:56] PA7.
-    ///
-    UINT32  PA7:3;
-    UINT32  Reserved8:5;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PAT_REGISTER;
-
-
-/**
-  Provides the programming interface to use corrected MC error signaling
-  capability (R/W). If IA32_MCG_CAP[10] = 1 && IA32_MCG_CAP[7:0] > n.
-
-  @param  ECX  MSR_IA32_MCn_CTL2
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MC_CTL2_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MC_CTL2_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MC_CTL2_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MC0_CTL2);
-  AsmWriteMsr64 (MSR_IA32_MC0_CTL2, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MC0_CTL2  is defined as IA32_MC0_CTL2  in SDM.
-        MSR_IA32_MC1_CTL2  is defined as IA32_MC1_CTL2  in SDM.
-        MSR_IA32_MC2_CTL2  is defined as IA32_MC2_CTL2  in SDM.
-        MSR_IA32_MC3_CTL2  is defined as IA32_MC3_CTL2  in SDM.
-        MSR_IA32_MC4_CTL2  is defined as IA32_MC4_CTL2  in SDM.
-        MSR_IA32_MC5_CTL2  is defined as IA32_MC5_CTL2  in SDM.
-        MSR_IA32_MC6_CTL2  is defined as IA32_MC6_CTL2  in SDM.
-        MSR_IA32_MC7_CTL2  is defined as IA32_MC7_CTL2  in SDM.
-        MSR_IA32_MC8_CTL2  is defined as IA32_MC8_CTL2  in SDM.
-        MSR_IA32_MC9_CTL2  is defined as IA32_MC9_CTL2  in SDM.
-        MSR_IA32_MC10_CTL2 is defined as IA32_MC10_CTL2 in SDM.
-        MSR_IA32_MC11_CTL2 is defined as IA32_MC11_CTL2 in SDM.
-        MSR_IA32_MC12_CTL2 is defined as IA32_MC12_CTL2 in SDM.
-        MSR_IA32_MC13_CTL2 is defined as IA32_MC13_CTL2 in SDM.
-        MSR_IA32_MC14_CTL2 is defined as IA32_MC14_CTL2 in SDM.
-        MSR_IA32_MC15_CTL2 is defined as IA32_MC15_CTL2 in SDM.
-        MSR_IA32_MC16_CTL2 is defined as IA32_MC16_CTL2 in SDM.
-        MSR_IA32_MC17_CTL2 is defined as IA32_MC17_CTL2 in SDM.
-        MSR_IA32_MC18_CTL2 is defined as IA32_MC18_CTL2 in SDM.
-        MSR_IA32_MC19_CTL2 is defined as IA32_MC19_CTL2 in SDM.
-        MSR_IA32_MC20_CTL2 is defined as IA32_MC20_CTL2 in SDM.
-        MSR_IA32_MC21_CTL2 is defined as IA32_MC21_CTL2 in SDM.
-        MSR_IA32_MC22_CTL2 is defined as IA32_MC22_CTL2 in SDM.
-        MSR_IA32_MC23_CTL2 is defined as IA32_MC23_CTL2 in SDM.
-        MSR_IA32_MC24_CTL2 is defined as IA32_MC24_CTL2 in SDM.
-        MSR_IA32_MC25_CTL2 is defined as IA32_MC25_CTL2 in SDM.
-        MSR_IA32_MC26_CTL2 is defined as IA32_MC26_CTL2 in SDM.
-        MSR_IA32_MC27_CTL2 is defined as IA32_MC27_CTL2 in SDM.
-        MSR_IA32_MC28_CTL2 is defined as IA32_MC28_CTL2 in SDM.
-        MSR_IA32_MC29_CTL2 is defined as IA32_MC29_CTL2 in SDM.
-        MSR_IA32_MC30_CTL2 is defined as IA32_MC30_CTL2 in SDM.
-        MSR_IA32_MC31_CTL2 is defined as IA32_MC31_CTL2 in SDM.
-  @{
-**/
-#define MSR_IA32_MC0_CTL2                        0x00000280
-#define MSR_IA32_MC1_CTL2                        0x00000281
-#define MSR_IA32_MC2_CTL2                        0x00000282
-#define MSR_IA32_MC3_CTL2                        0x00000283
-#define MSR_IA32_MC4_CTL2                        0x00000284
-#define MSR_IA32_MC5_CTL2                        0x00000285
-#define MSR_IA32_MC6_CTL2                        0x00000286
-#define MSR_IA32_MC7_CTL2                        0x00000287
-#define MSR_IA32_MC8_CTL2                        0x00000288
-#define MSR_IA32_MC9_CTL2                        0x00000289
-#define MSR_IA32_MC10_CTL2                       0x0000028A
-#define MSR_IA32_MC11_CTL2                       0x0000028B
-#define MSR_IA32_MC12_CTL2                       0x0000028C
-#define MSR_IA32_MC13_CTL2                       0x0000028D
-#define MSR_IA32_MC14_CTL2                       0x0000028E
-#define MSR_IA32_MC15_CTL2                       0x0000028F
-#define MSR_IA32_MC16_CTL2                       0x00000290
-#define MSR_IA32_MC17_CTL2                       0x00000291
-#define MSR_IA32_MC18_CTL2                       0x00000292
-#define MSR_IA32_MC19_CTL2                       0x00000293
-#define MSR_IA32_MC20_CTL2                       0x00000294
-#define MSR_IA32_MC21_CTL2                       0x00000295
-#define MSR_IA32_MC22_CTL2                       0x00000296
-#define MSR_IA32_MC23_CTL2                       0x00000297
-#define MSR_IA32_MC24_CTL2                       0x00000298
-#define MSR_IA32_MC25_CTL2                       0x00000299
-#define MSR_IA32_MC26_CTL2                       0x0000029A
-#define MSR_IA32_MC27_CTL2                       0x0000029B
-#define MSR_IA32_MC28_CTL2                       0x0000029C
-#define MSR_IA32_MC29_CTL2                       0x0000029D
-#define MSR_IA32_MC30_CTL2                       0x0000029E
-#define MSR_IA32_MC31_CTL2                       0x0000029F
-/// @}
-
-/**
-  MSR information returned for MSR indexes #MSR_IA32_MC0_CTL2
-  to #MSR_IA32_MC31_CTL2
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 14:0] Corrected error count threshold.
-    ///
-    UINT32  CorrectedErrorCountThreshold:15;
-    UINT32  Reserved1:15;
-    ///
-    /// [Bit 30] CMCI_EN.
-    ///
-    UINT32  CMCI_EN:1;
-    UINT32  Reserved2:1;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MC_CTL2_REGISTER;
-
-
-/**
-  MTRRdefType (R/W). If CPUID.01H: EDX.MTRR[12] =1.
-
-  @param  ECX  MSR_IA32_MTRR_DEF_TYPE (0x000002FF)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MTRR_DEF_TYPE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
-  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MTRR_DEF_TYPE is defined as IA32_MTRR_DEF_TYPE in SDM.
-**/
-#define MSR_IA32_MTRR_DEF_TYPE                   0x000002FF
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MTRR_DEF_TYPE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 2:0] Default Memory Type.
-    ///
-    UINT32  Type:3;
-    UINT32  Reserved1:7;
-    ///
-    /// [Bit 10] Fixed Range MTRR Enable.
-    ///
-    UINT32  FE:1;
-    ///
-    /// [Bit 11] MTRR Enable.
-    ///
-    UINT32  E:1;
-    UINT32  Reserved2:20;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MTRR_DEF_TYPE_REGISTER;
-
-
-/**
-  Fixed-Function Performance Counter 0 (R/W): Counts Instr_Retired.Any. If
-  CPUID.0AH: EDX[4:0] > 0.
-
-  @param  ECX  MSR_IA32_FIXED_CTR0 (0x00000309)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR0);
-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR0, Msr);
-  @endcode
-  @note MSR_IA32_FIXED_CTR0 is defined as IA32_FIXED_CTR0 in SDM.
-**/
-#define MSR_IA32_FIXED_CTR0                      0x00000309
-
-
-/**
-  Fixed-Function Performance Counter 1 (R/W): Counts CPU_CLK_Unhalted.Core. If
-  CPUID.0AH: EDX[4:0] > 1.
-
-  @param  ECX  MSR_IA32_FIXED_CTR1 (0x0000030A)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR1);
-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR1, Msr);
-  @endcode
-  @note MSR_IA32_FIXED_CTR1 is defined as IA32_FIXED_CTR1 in SDM.
-**/
-#define MSR_IA32_FIXED_CTR1                      0x0000030A
-
-
-/**
-  Fixed-Function Performance Counter 2 (R/W): Counts CPU_CLK_Unhalted.Ref. If
-  CPUID.0AH: EDX[4:0] > 2.
-
-  @param  ECX  MSR_IA32_FIXED_CTR2 (0x0000030B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR2);
-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR2, Msr);
-  @endcode
-  @note MSR_IA32_FIXED_CTR2 is defined as IA32_FIXED_CTR2 in SDM.
-**/
-#define MSR_IA32_FIXED_CTR2                      0x0000030B
-
-
-/**
-  RO. If CPUID.01H: ECX[15] = 1.
-
-  @param  ECX  MSR_IA32_PERF_CAPABILITIES (0x00000345)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_CAPABILITIES_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CAPABILITIES);
-  AsmWriteMsr64 (MSR_IA32_PERF_CAPABILITIES, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_CAPABILITIES is defined as IA32_PERF_CAPABILITIES in SDM.
-**/
-#define MSR_IA32_PERF_CAPABILITIES               0x00000345
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_CAPABILITIES
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 5:0] LBR format.
-    ///
-    UINT32  LBR_FMT:6;
-    ///
-    /// [Bit 6] PEBS Trap.
-    ///
-    UINT32  PEBS_TRAP:1;
-    ///
-    /// [Bit 7] PEBSSaveArchRegs.
-    ///
-    UINT32  PEBS_ARCH_REG:1;
-    ///
-    /// [Bits 11:8] PEBS Record Format.
-    ///
-    UINT32  PEBS_REC_FMT:4;
-    ///
-    /// [Bit 12] 1: Freeze while SMM is supported.
-    ///
-    UINT32  SMM_FREEZE:1;
-    ///
-    /// [Bit 13] 1: Full width of counter writable via IA32_A_PMCx.
-    ///
-    UINT32  FW_WRITE:1;
-    UINT32  Reserved1:18;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_CAPABILITIES_REGISTER;
-
-
-/**
-  Fixed-Function Performance Counter Control (R/W) Counter increments while
-  the results of ANDing respective enable bit in IA32_PERF_GLOBAL_CTRL with
-  the corresponding OS or USR bits in this MSR is true. If CPUID.0AH: EAX[7:0]
-  > 1.
-
-  @param  ECX  MSR_IA32_FIXED_CTR_CTRL (0x0000038D)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_FIXED_CTR_CTRL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FIXED_CTR_CTRL);
-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR_CTRL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_FIXED_CTR_CTRL is defined as IA32_FIXED_CTR_CTRL in SDM.
-**/
-#define MSR_IA32_FIXED_CTR_CTRL                  0x0000038D
-
-/**
-  MSR information returned for MSR index #MSR_IA32_FIXED_CTR_CTRL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] EN0_OS: Enable Fixed Counter 0 to count while CPL = 0.
-    ///
-    UINT32  EN0_OS:1;
-    ///
-    /// [Bit 1] EN0_Usr: Enable Fixed Counter 0 to count while CPL > 0.
-    ///
-    UINT32  EN0_Usr:1;
-    ///
-    /// [Bit 2] AnyThread: When set to 1, it enables counting the associated
-    /// event conditions occurring across all logical processors sharing a
-    /// processor core. When set to 0, the counter only increments the
-    /// associated event conditions occurring in the logical processor which
-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
-    ///
-    UINT32  AnyThread0:1;
-    ///
-    /// [Bit 3] EN0_PMI: Enable PMI when fixed counter 0 overflows.
-    ///
-    UINT32  EN0_PMI:1;
-    ///
-    /// [Bit 4] EN1_OS: Enable Fixed Counter 1 to count while CPL = 0.
-    ///
-    UINT32  EN1_OS:1;
-    ///
-    /// [Bit 5] EN1_Usr: Enable Fixed Counter 1 to count while CPL > 0.
-    ///
-    UINT32  EN1_Usr:1;
-    ///
-    /// [Bit 6] AnyThread: When set to 1, it enables counting the associated
-    /// event conditions occurring across all logical processors sharing a
-    /// processor core. When set to 0, the counter only increments the
-    /// associated event conditions occurring in the logical processor which
-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
-    ///
-    UINT32  AnyThread1:1;
-    ///
-    /// [Bit 7] EN1_PMI: Enable PMI when fixed counter 1 overflows.
-    ///
-    UINT32  EN1_PMI:1;
-    ///
-    /// [Bit 8] EN2_OS: Enable Fixed Counter 2 to count while CPL = 0.
-    ///
-    UINT32  EN2_OS:1;
-    ///
-    /// [Bit 9] EN2_Usr: Enable Fixed Counter 2 to count while CPL > 0.
-    ///
-    UINT32  EN2_Usr:1;
-    ///
-    /// [Bit 10] AnyThread: When set to 1, it enables counting the associated
-    /// event conditions occurring across all logical processors sharing a
-    /// processor core. When set to 0, the counter only increments the
-    /// associated event conditions occurring in the logical processor which
-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
-    ///
-    UINT32  AnyThread2:1;
-    ///
-    /// [Bit 11] EN2_PMI: Enable PMI when fixed counter 2 overflows.
-    ///
-    UINT32  EN2_PMI:1;
-    UINT32  Reserved1:20;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_FIXED_CTR_CTRL_REGISTER;
-
-
-/**
-  Global Performance Counter Status (RO). If CPUID.0AH: EAX[7:0] > 0.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS (0x0000038E)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_STATUS is defined as IA32_PERF_GLOBAL_STATUS in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_STATUS              0x0000038E
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Ovf_PMC0: Overflow status of IA32_PMC0. If CPUID.0AH:
-    /// EAX[15:8] > 0.
-    ///
-    UINT32  Ovf_PMC0:1;
-    ///
-    /// [Bit 1] Ovf_PMC1: Overflow status of IA32_PMC1. If CPUID.0AH:
-    /// EAX[15:8] > 1.
-    ///
-    UINT32  Ovf_PMC1:1;
-    ///
-    /// [Bit 2] Ovf_PMC2: Overflow status of IA32_PMC2. If CPUID.0AH:
-    /// EAX[15:8] > 2.
-    ///
-    UINT32  Ovf_PMC2:1;
-    ///
-    /// [Bit 3] Ovf_PMC3: Overflow status of IA32_PMC3. If CPUID.0AH:
-    /// EAX[15:8] > 3.
-    ///
-    UINT32  Ovf_PMC3:1;
-    UINT32  Reserved1:28;
-    ///
-    /// [Bit 32] Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0. If
-    /// CPUID.0AH: EAX[7:0] > 1.
-    ///
-    UINT32  Ovf_FixedCtr0:1;
-    ///
-    /// [Bit 33] Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1. If
-    /// CPUID.0AH: EAX[7:0] > 1.
-    ///
-    UINT32  Ovf_FixedCtr1:1;
-    ///
-    /// [Bit 34] Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2. If
-    /// CPUID.0AH: EAX[7:0] > 1.
-    ///
-    UINT32  Ovf_FixedCtr2:1;
-    UINT32  Reserved2:20;
-    ///
-    /// [Bit 55] Trace_ToPA_PMI: A PMI occurred due to a ToPA entry memory
-    /// buffer was completely filled. If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
-    /// && IA32_RTIT_CTL.ToPA = 1.
-    ///
-    UINT32  Trace_ToPA_PMI:1;
-    UINT32  Reserved3:2;
-    ///
-    /// [Bit 58] LBR_Frz: LBRs are frozen due to -
-    /// IA32_DEBUGCTL.FREEZE_LBR_ON_PMI=1, -  The LBR stack overflowed. If
-    /// CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  LBR_Frz:1;
-    ///
-    /// [Bit 59] CTR_Frz: Performance counters in the core PMU are frozen due
-    /// to -  IA32_DEBUGCTL.FREEZE_PERFMON_ON_ PMI=1, -  one or more core PMU
-    /// counters overflowed. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  CTR_Frz:1;
-    ///
-    /// [Bit 60] ASCI: Data in the performance counters in the core PMU may
-    /// include contributions from the direct or indirect operation intel SGX
-    /// to protect an enclave. If CPUID.(EAX=07H, ECX=0):EBX[2] = 1.
-    ///
-    UINT32  ASCI:1;
-    ///
-    /// [Bit 61] Ovf_Uncore: Uncore counter overflow status. If CPUID.0AH:
-    /// EAX[7:0] > 2.
-    ///
-    UINT32  Ovf_Uncore:1;
-    ///
-    /// [Bit 62] OvfBuf: DS SAVE area Buffer overflow status. If CPUID.0AH:
-    /// EAX[7:0] > 0.
-    ///
-    UINT32  OvfBuf:1;
-    ///
-    /// [Bit 63] CondChgd: status bits of this register has changed. If
-    /// CPUID.0AH: EAX[7:0] > 0.
-    ///
-    UINT32  CondChgd:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_STATUS_REGISTER;
-
-
-/**
-  Global Performance Counter Control (R/W) Counter increments while the result
-  of ANDing respective enable bit in this MSR with the corresponding OS or USR
-  bits in the general-purpose or fixed counter control MSR is true. If
-  CPUID.0AH: EAX[7:0] > 0.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_CTRL (0x0000038F)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_CTRL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_CTRL);
-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_CTRL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_CTRL is defined as IA32_PERF_GLOBAL_CTRL in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_CTRL                0x0000038F
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_CTRL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-///
-  struct {
-    ///
-    /// [Bits 31:0] EN_PMCn. If CPUID.0AH: EAX[15:8] > n.
-    /// Enable bitmask.  Only the first n-1 bits are valid.
-    /// Bits n..31 are reserved.
-    ///
-    UINT32  EN_PMCn:32;
-    ///
-    /// [Bits 63:32] EN_FIXED_CTRn. If CPUID.0AH: EDX[4:0] > n.
-    /// Enable bitmask.  Only the first n-1 bits are valid.
-    /// Bits 31:n are reserved.
-    ///
-    UINT32  EN_FIXED_CTRn:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_CTRL_REGISTER;
-
-
-/**
-  Global Performance Counter Overflow Control (R/W). If CPUID.0AH: EAX[7:0] >
-  0 && CPUID.0AH: EAX[7:0] <= 3.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_OVF_CTRL (0x00000390)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL);
-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_OVF_CTRL is defined as IA32_PERF_GLOBAL_OVF_CTRL in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_OVF_CTRL            0x00000390
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_OVF_CTRL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
-    /// Clear bitmask.  Only the first n-1 bits are valid.
-    /// Bits 31:n are reserved.
-    ///
-    UINT32  Ovf_PMCn:32;
-    ///
-    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
-    /// If CPUID.0AH: EDX[4:0] > n.
-    /// Clear bitmask.  Only the first n-1 bits are valid.
-    /// Bits 22:n are reserved.
-    ///
-    UINT32  Ovf_FIXED_CTRn:23;
-    ///
-    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
-    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1.
-    ///
-    UINT32  Trace_ToPA_PMI:1;
-    UINT32  Reserved2:5;
-    ///
-    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
-    /// Display Model 06_2EH.
-    ///
-    UINT32  Ovf_Uncore:1;
-    ///
-    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
-    ///
-    UINT32  OvfBuf:1;
-    ///
-    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
-    ///
-    UINT32  CondChgd:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER;
-
-
-/**
-  Global Performance Counter Overflow Reset Control (R/W). If CPUID.0AH:
-  EAX[7:0] > 3.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_RESET (0x00000390)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET);
-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_STATUS_RESET is defined as IA32_PERF_GLOBAL_STATUS_RESET in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_STATUS_RESET        0x00000390
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS_RESET
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
-    /// Clear bitmask.  Only the first n-1 bits are valid.
-    /// Bits 31:n are reserved.
-    ///
-    UINT32  Ovf_PMCn:32;
-    ///
-    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
-    /// If CPUID.0AH: EDX[4:0] > n.
-    /// Clear bitmask.  Only the first n-1 bits are valid.
-    /// Bits 22:n are reserved.
-    ///
-    UINT32  Ovf_FIXED_CTRn:23;
-    ///
-    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
-    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA[8] = 1.
-    ///
-    UINT32  Trace_ToPA_PMI:1;
-    UINT32  Reserved2:2;
-    ///
-    /// [Bit 58] Set 1 to Clear LBR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  LBR_Frz:1;
-    ///
-    /// [Bit 59] Set 1 to Clear CTR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  CTR_Frz:1;
-    ///
-    /// [Bit 60] Set 1 to Clear ASCI bit. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  ASCI:1;
-    ///
-    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
-    /// Display Model 06_2EH.
-    ///
-    UINT32  Ovf_Uncore:1;
-    ///
-    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
-    ///
-    UINT32  OvfBuf:1;
-    ///
-    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
-    ///
-    UINT32  CondChgd:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER;
-
-
-/**
-  Global Performance Counter Overflow Set Control (R/W). If CPUID.0AH:
-  EAX[7:0] > 3.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_SET (0x00000391)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET);
-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_STATUS_SET is defined as IA32_PERF_GLOBAL_STATUS_SET in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_STATUS_SET          0x00000391
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_STATUS_SET
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Set 1 to cause Ovf_PMCn = 1. If CPUID.0AH: EAX[7:0] > n.
-    /// Set bitmask.  Only the first n-1 bits are valid.
-    /// Bits 31:n are reserved.
-    ///
-    UINT32  Ovf_PMCn:32;
-    ///
-    /// [Bits 54:32] Set 1 to cause Ovf_FIXED_CTRn = 1.
-    /// If CPUID.0AH: EAX[7:0] > n.
-    /// Set bitmask.  Only the first n-1 bits are valid.
-    /// Bits 22:n are reserved.
-    ///
-    UINT32  Ovf_FIXED_CTRn:23;
-    ///
-    /// [Bit 55] Set 1 to cause Trace_ToPA_PMI = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  Trace_ToPA_PMI:1;
-    UINT32  Reserved2:2;
-    ///
-    /// [Bit 58] Set 1 to cause LBR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  LBR_Frz:1;
-    ///
-    /// [Bit 59] Set 1 to cause CTR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  CTR_Frz:1;
-    ///
-    /// [Bit 60] Set 1 to cause ASCI = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  ASCI:1;
-    ///
-    /// [Bit 61] Set 1 to cause Ovf_Uncore = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  Ovf_Uncore:1;
-    ///
-    /// [Bit 62] Set 1 to cause OvfBuf = 1. If CPUID.0AH: EAX[7:0] > 3.
-    ///
-    UINT32  OvfBuf:1;
-    UINT32  Reserved3:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER;
-
-
-/**
-  Indicator of core perfmon interface is in use (RO). If CPUID.0AH: EAX[7:0] >
-  3.
-
-  @param  ECX  MSR_IA32_PERF_GLOBAL_INUSE (0x00000392)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PERF_GLOBAL_INUSE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_INUSE);
-  @endcode
-  @note MSR_IA32_PERF_GLOBAL_INUSE is defined as IA32_PERF_GLOBAL_INUSE in SDM.
-**/
-#define MSR_IA32_PERF_GLOBAL_INUSE               0x00000392
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_INUSE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] IA32_PERFEVTSELn in use.  If CPUID.0AH: EAX[7:0] > n.
-    /// Status bitmask.  Only the first n-1 bits are valid.
-    /// Bits 31:n are reserved.
-    ///
-    UINT32  IA32_PERFEVTSELn:32;
-    ///
-    /// [Bits 62:32] IA32_FIXED_CTRn in use.
-    /// If CPUID.0AH: EAX[7:0] > n.
-    /// Status bitmask.  Only the first n-1 bits are valid.
-    /// Bits 30:n are reserved.
-    ///
-    UINT32  IA32_FIXED_CTRn:31;
-    ///
-    /// [Bit 63] PMI in use.
-    ///
-    UINT32  PMI:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PERF_GLOBAL_INUSE_REGISTER;
-
-
-/**
-  PEBS Control (R/W).
-
-  @param  ECX  MSR_IA32_PEBS_ENABLE (0x000003F1)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PEBS_ENABLE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PEBS_ENABLE);
-  AsmWriteMsr64 (MSR_IA32_PEBS_ENABLE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PEBS_ENABLE is defined as IA32_PEBS_ENABLE in SDM.
-**/
-#define MSR_IA32_PEBS_ENABLE                     0x000003F1
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PEBS_ENABLE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Enable PEBS on IA32_PMC0. Introduced at Display Family /
-    /// Display Model 06_0FH.
-    ///
-    UINT32  Enable:1;
-    ///
-    /// [Bits 3:1] Reserved or Model specific.
-    ///
-    UINT32  Reserved1:3;
-    UINT32  Reserved2:28;
-    ///
-    /// [Bits 35:32] Reserved or Model specific.
-    ///
-    UINT32  Reserved3:4;
-    UINT32  Reserved4:28;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PEBS_ENABLE_REGISTER;
-
-
-/**
-  MCn_CTL. If IA32_MCG_CAP.CNT > n.
-
-  @param  ECX  MSR_IA32_MCn_CTL
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MC0_CTL);
-  AsmWriteMsr64 (MSR_IA32_MC0_CTL, Msr);
-  @endcode
-  @note MSR_IA32_MC0_CTL  is defined as IA32_MC0_CTL  in SDM.
-        MSR_IA32_MC1_CTL  is defined as IA32_MC1_CTL  in SDM.
-        MSR_IA32_MC2_CTL  is defined as IA32_MC2_CTL  in SDM.
-        MSR_IA32_MC3_CTL  is defined as IA32_MC3_CTL  in SDM.
-        MSR_IA32_MC4_CTL  is defined as IA32_MC4_CTL  in SDM.
-        MSR_IA32_MC5_CTL  is defined as IA32_MC5_CTL  in SDM.
-        MSR_IA32_MC6_CTL  is defined as IA32_MC6_CTL  in SDM.
-        MSR_IA32_MC7_CTL  is defined as IA32_MC7_CTL  in SDM.
-        MSR_IA32_MC8_CTL  is defined as IA32_MC8_CTL  in SDM.
-        MSR_IA32_MC9_CTL  is defined as IA32_MC9_CTL  in SDM.
-        MSR_IA32_MC10_CTL is defined as IA32_MC10_CTL in SDM.
-        MSR_IA32_MC11_CTL is defined as IA32_MC11_CTL in SDM.
-        MSR_IA32_MC12_CTL is defined as IA32_MC12_CTL in SDM.
-        MSR_IA32_MC13_CTL is defined as IA32_MC13_CTL in SDM.
-        MSR_IA32_MC14_CTL is defined as IA32_MC14_CTL in SDM.
-        MSR_IA32_MC15_CTL is defined as IA32_MC15_CTL in SDM.
-        MSR_IA32_MC16_CTL is defined as IA32_MC16_CTL in SDM.
-        MSR_IA32_MC17_CTL is defined as IA32_MC17_CTL in SDM.
-        MSR_IA32_MC18_CTL is defined as IA32_MC18_CTL in SDM.
-        MSR_IA32_MC19_CTL is defined as IA32_MC19_CTL in SDM.
-        MSR_IA32_MC20_CTL is defined as IA32_MC20_CTL in SDM.
-        MSR_IA32_MC21_CTL is defined as IA32_MC21_CTL in SDM.
-        MSR_IA32_MC22_CTL is defined as IA32_MC22_CTL in SDM.
-        MSR_IA32_MC23_CTL is defined as IA32_MC23_CTL in SDM.
-        MSR_IA32_MC24_CTL is defined as IA32_MC24_CTL in SDM.
-        MSR_IA32_MC25_CTL is defined as IA32_MC25_CTL in SDM.
-        MSR_IA32_MC26_CTL is defined as IA32_MC26_CTL in SDM.
-        MSR_IA32_MC27_CTL is defined as IA32_MC27_CTL in SDM.
-        MSR_IA32_MC28_CTL is defined as IA32_MC28_CTL in SDM.
-  @{
-**/
-#define MSR_IA32_MC0_CTL                         0x00000400
-#define MSR_IA32_MC1_CTL                         0x00000404
-#define MSR_IA32_MC2_CTL                         0x00000408
-#define MSR_IA32_MC3_CTL                         0x0000040C
-#define MSR_IA32_MC4_CTL                         0x00000410
-#define MSR_IA32_MC5_CTL                         0x00000414
-#define MSR_IA32_MC6_CTL                         0x00000418
-#define MSR_IA32_MC7_CTL                         0x0000041C
-#define MSR_IA32_MC8_CTL                         0x00000420
-#define MSR_IA32_MC9_CTL                         0x00000424
-#define MSR_IA32_MC10_CTL                        0x00000428
-#define MSR_IA32_MC11_CTL                        0x0000042C
-#define MSR_IA32_MC12_CTL                        0x00000430
-#define MSR_IA32_MC13_CTL                        0x00000434
-#define MSR_IA32_MC14_CTL                        0x00000438
-#define MSR_IA32_MC15_CTL                        0x0000043C
-#define MSR_IA32_MC16_CTL                        0x00000440
-#define MSR_IA32_MC17_CTL                        0x00000444
-#define MSR_IA32_MC18_CTL                        0x00000448
-#define MSR_IA32_MC19_CTL                        0x0000044C
-#define MSR_IA32_MC20_CTL                        0x00000450
-#define MSR_IA32_MC21_CTL                        0x00000454
-#define MSR_IA32_MC22_CTL                        0x00000458
-#define MSR_IA32_MC23_CTL                        0x0000045C
-#define MSR_IA32_MC24_CTL                        0x00000460
-#define MSR_IA32_MC25_CTL                        0x00000464
-#define MSR_IA32_MC26_CTL                        0x00000468
-#define MSR_IA32_MC27_CTL                        0x0000046C
-#define MSR_IA32_MC28_CTL                        0x00000470
-/// @}
-
-
-/**
-  MCn_STATUS. If IA32_MCG_CAP.CNT > n.
-
-  @param  ECX  MSR_IA32_MCn_STATUS
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MC0_STATUS);
-  AsmWriteMsr64 (MSR_IA32_MC0_STATUS, Msr);
-  @endcode
-  @note MSR_IA32_MC0_STATUS  is defined as IA32_MC0_STATUS  in SDM.
-        MSR_IA32_MC1_STATUS  is defined as IA32_MC1_STATUS  in SDM.
-        MSR_IA32_MC2_STATUS  is defined as IA32_MC2_STATUS  in SDM.
-        MSR_IA32_MC3_STATUS  is defined as IA32_MC3_STATUS  in SDM.
-        MSR_IA32_MC4_STATUS  is defined as IA32_MC4_STATUS  in SDM.
-        MSR_IA32_MC5_STATUS  is defined as IA32_MC5_STATUS  in SDM.
-        MSR_IA32_MC6_STATUS  is defined as IA32_MC6_STATUS  in SDM.
-        MSR_IA32_MC7_STATUS  is defined as IA32_MC7_STATUS  in SDM.
-        MSR_IA32_MC8_STATUS  is defined as IA32_MC8_STATUS  in SDM.
-        MSR_IA32_MC9_STATUS  is defined as IA32_MC9_STATUS  in SDM.
-        MSR_IA32_MC10_STATUS is defined as IA32_MC10_STATUS in SDM.
-        MSR_IA32_MC11_STATUS is defined as IA32_MC11_STATUS in SDM.
-        MSR_IA32_MC12_STATUS is defined as IA32_MC12_STATUS in SDM.
-        MSR_IA32_MC13_STATUS is defined as IA32_MC13_STATUS in SDM.
-        MSR_IA32_MC14_STATUS is defined as IA32_MC14_STATUS in SDM.
-        MSR_IA32_MC15_STATUS is defined as IA32_MC15_STATUS in SDM.
-        MSR_IA32_MC16_STATUS is defined as IA32_MC16_STATUS in SDM.
-        MSR_IA32_MC17_STATUS is defined as IA32_MC17_STATUS in SDM.
-        MSR_IA32_MC18_STATUS is defined as IA32_MC18_STATUS in SDM.
-        MSR_IA32_MC19_STATUS is defined as IA32_MC19_STATUS in SDM.
-        MSR_IA32_MC20_STATUS is defined as IA32_MC20_STATUS in SDM.
-        MSR_IA32_MC21_STATUS is defined as IA32_MC21_STATUS in SDM.
-        MSR_IA32_MC22_STATUS is defined as IA32_MC22_STATUS in SDM.
-        MSR_IA32_MC23_STATUS is defined as IA32_MC23_STATUS in SDM.
-        MSR_IA32_MC24_STATUS is defined as IA32_MC24_STATUS in SDM.
-        MSR_IA32_MC25_STATUS is defined as IA32_MC25_STATUS in SDM.
-        MSR_IA32_MC26_STATUS is defined as IA32_MC26_STATUS in SDM.
-        MSR_IA32_MC27_STATUS is defined as IA32_MC27_STATUS in SDM.
-        MSR_IA32_MC28_STATUS is defined as IA32_MC28_STATUS in SDM.
-  @{
-**/
-#define MSR_IA32_MC0_STATUS                      0x00000401
-#define MSR_IA32_MC1_STATUS                      0x00000405
-#define MSR_IA32_MC2_STATUS                      0x00000409
-#define MSR_IA32_MC3_STATUS                      0x0000040D
-#define MSR_IA32_MC4_STATUS                      0x00000411
-#define MSR_IA32_MC5_STATUS                      0x00000415
-#define MSR_IA32_MC6_STATUS                      0x00000419
-#define MSR_IA32_MC7_STATUS                      0x0000041D
-#define MSR_IA32_MC8_STATUS                      0x00000421
-#define MSR_IA32_MC9_STATUS                      0x00000425
-#define MSR_IA32_MC10_STATUS                     0x00000429
-#define MSR_IA32_MC11_STATUS                     0x0000042D
-#define MSR_IA32_MC12_STATUS                     0x00000431
-#define MSR_IA32_MC13_STATUS                     0x00000435
-#define MSR_IA32_MC14_STATUS                     0x00000439
-#define MSR_IA32_MC15_STATUS                     0x0000043D
-#define MSR_IA32_MC16_STATUS                     0x00000441
-#define MSR_IA32_MC17_STATUS                     0x00000445
-#define MSR_IA32_MC18_STATUS                     0x00000449
-#define MSR_IA32_MC19_STATUS                     0x0000044D
-#define MSR_IA32_MC20_STATUS                     0x00000451
-#define MSR_IA32_MC21_STATUS                     0x00000455
-#define MSR_IA32_MC22_STATUS                     0x00000459
-#define MSR_IA32_MC23_STATUS                     0x0000045D
-#define MSR_IA32_MC24_STATUS                     0x00000461
-#define MSR_IA32_MC25_STATUS                     0x00000465
-#define MSR_IA32_MC26_STATUS                     0x00000469
-#define MSR_IA32_MC27_STATUS                     0x0000046D
-#define MSR_IA32_MC28_STATUS                     0x00000471
-/// @}
-
-
-/**
-  MCn_ADDR. If IA32_MCG_CAP.CNT > n.
-
-  @param  ECX  MSR_IA32_MCn_ADDR
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MC0_ADDR);
-  AsmWriteMsr64 (MSR_IA32_MC0_ADDR, Msr);
-  @endcode
-  @note MSR_IA32_MC0_ADDR  is defined as IA32_MC0_ADDR  in SDM.
-        MSR_IA32_MC1_ADDR  is defined as IA32_MC1_ADDR  in SDM.
-        MSR_IA32_MC2_ADDR  is defined as IA32_MC2_ADDR  in SDM.
-        MSR_IA32_MC3_ADDR  is defined as IA32_MC3_ADDR  in SDM.
-        MSR_IA32_MC4_ADDR  is defined as IA32_MC4_ADDR  in SDM.
-        MSR_IA32_MC5_ADDR  is defined as IA32_MC5_ADDR  in SDM.
-        MSR_IA32_MC6_ADDR  is defined as IA32_MC6_ADDR  in SDM.
-        MSR_IA32_MC7_ADDR  is defined as IA32_MC7_ADDR  in SDM.
-        MSR_IA32_MC8_ADDR  is defined as IA32_MC8_ADDR  in SDM.
-        MSR_IA32_MC9_ADDR  is defined as IA32_MC9_ADDR  in SDM.
-        MSR_IA32_MC10_ADDR is defined as IA32_MC10_ADDR in SDM.
-        MSR_IA32_MC11_ADDR is defined as IA32_MC11_ADDR in SDM.
-        MSR_IA32_MC12_ADDR is defined as IA32_MC12_ADDR in SDM.
-        MSR_IA32_MC13_ADDR is defined as IA32_MC13_ADDR in SDM.
-        MSR_IA32_MC14_ADDR is defined as IA32_MC14_ADDR in SDM.
-        MSR_IA32_MC15_ADDR is defined as IA32_MC15_ADDR in SDM.
-        MSR_IA32_MC16_ADDR is defined as IA32_MC16_ADDR in SDM.
-        MSR_IA32_MC17_ADDR is defined as IA32_MC17_ADDR in SDM.
-        MSR_IA32_MC18_ADDR is defined as IA32_MC18_ADDR in SDM.
-        MSR_IA32_MC19_ADDR is defined as IA32_MC19_ADDR in SDM.
-        MSR_IA32_MC20_ADDR is defined as IA32_MC20_ADDR in SDM.
-        MSR_IA32_MC21_ADDR is defined as IA32_MC21_ADDR in SDM.
-        MSR_IA32_MC22_ADDR is defined as IA32_MC22_ADDR in SDM.
-        MSR_IA32_MC23_ADDR is defined as IA32_MC23_ADDR in SDM.
-        MSR_IA32_MC24_ADDR is defined as IA32_MC24_ADDR in SDM.
-        MSR_IA32_MC25_ADDR is defined as IA32_MC25_ADDR in SDM.
-        MSR_IA32_MC26_ADDR is defined as IA32_MC26_ADDR in SDM.
-        MSR_IA32_MC27_ADDR is defined as IA32_MC27_ADDR in SDM.
-        MSR_IA32_MC28_ADDR is defined as IA32_MC28_ADDR in SDM.
-  @{
-**/
-#define MSR_IA32_MC0_ADDR                        0x00000402
-#define MSR_IA32_MC1_ADDR                        0x00000406
-#define MSR_IA32_MC2_ADDR                        0x0000040A
-#define MSR_IA32_MC3_ADDR                        0x0000040E
-#define MSR_IA32_MC4_ADDR                        0x00000412
-#define MSR_IA32_MC5_ADDR                        0x00000416
-#define MSR_IA32_MC6_ADDR                        0x0000041A
-#define MSR_IA32_MC7_ADDR                        0x0000041E
-#define MSR_IA32_MC8_ADDR                        0x00000422
-#define MSR_IA32_MC9_ADDR                        0x00000426
-#define MSR_IA32_MC10_ADDR                       0x0000042A
-#define MSR_IA32_MC11_ADDR                       0x0000042E
-#define MSR_IA32_MC12_ADDR                       0x00000432
-#define MSR_IA32_MC13_ADDR                       0x00000436
-#define MSR_IA32_MC14_ADDR                       0x0000043A
-#define MSR_IA32_MC15_ADDR                       0x0000043E
-#define MSR_IA32_MC16_ADDR                       0x00000442
-#define MSR_IA32_MC17_ADDR                       0x00000446
-#define MSR_IA32_MC18_ADDR                       0x0000044A
-#define MSR_IA32_MC19_ADDR                       0x0000044E
-#define MSR_IA32_MC20_ADDR                       0x00000452
-#define MSR_IA32_MC21_ADDR                       0x00000456
-#define MSR_IA32_MC22_ADDR                       0x0000045A
-#define MSR_IA32_MC23_ADDR                       0x0000045E
-#define MSR_IA32_MC24_ADDR                       0x00000462
-#define MSR_IA32_MC25_ADDR                       0x00000466
-#define MSR_IA32_MC26_ADDR                       0x0000046A
-#define MSR_IA32_MC27_ADDR                       0x0000046E
-#define MSR_IA32_MC28_ADDR                       0x00000472
-/// @}
-
-
-/**
-  MCn_MISC. If IA32_MCG_CAP.CNT > n.
-
-  @param  ECX  MSR_IA32_MCn_MISC
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_MC0_MISC);
-  AsmWriteMsr64 (MSR_IA32_MC0_MISC, Msr);
-  @endcode
-  @note MSR_IA32_MC0_MISC  is defined as IA32_MC0_MISC  in SDM.
-        MSR_IA32_MC1_MISC  is defined as IA32_MC1_MISC  in SDM.
-        MSR_IA32_MC2_MISC  is defined as IA32_MC2_MISC  in SDM.
-        MSR_IA32_MC3_MISC  is defined as IA32_MC3_MISC  in SDM.
-        MSR_IA32_MC4_MISC  is defined as IA32_MC4_MISC  in SDM.
-        MSR_IA32_MC5_MISC  is defined as IA32_MC5_MISC  in SDM.
-        MSR_IA32_MC6_MISC  is defined as IA32_MC6_MISC  in SDM.
-        MSR_IA32_MC7_MISC  is defined as IA32_MC7_MISC  in SDM.
-        MSR_IA32_MC8_MISC  is defined as IA32_MC8_MISC  in SDM.
-        MSR_IA32_MC9_MISC  is defined as IA32_MC9_MISC  in SDM.
-        MSR_IA32_MC10_MISC is defined as IA32_MC10_MISC in SDM.
-        MSR_IA32_MC11_MISC is defined as IA32_MC11_MISC in SDM.
-        MSR_IA32_MC12_MISC is defined as IA32_MC12_MISC in SDM.
-        MSR_IA32_MC13_MISC is defined as IA32_MC13_MISC in SDM.
-        MSR_IA32_MC14_MISC is defined as IA32_MC14_MISC in SDM.
-        MSR_IA32_MC15_MISC is defined as IA32_MC15_MISC in SDM.
-        MSR_IA32_MC16_MISC is defined as IA32_MC16_MISC in SDM.
-        MSR_IA32_MC17_MISC is defined as IA32_MC17_MISC in SDM.
-        MSR_IA32_MC18_MISC is defined as IA32_MC18_MISC in SDM.
-        MSR_IA32_MC19_MISC is defined as IA32_MC19_MISC in SDM.
-        MSR_IA32_MC20_MISC is defined as IA32_MC20_MISC in SDM.
-        MSR_IA32_MC21_MISC is defined as IA32_MC21_MISC in SDM.
-        MSR_IA32_MC22_MISC is defined as IA32_MC22_MISC in SDM.
-        MSR_IA32_MC23_MISC is defined as IA32_MC23_MISC in SDM.
-        MSR_IA32_MC24_MISC is defined as IA32_MC24_MISC in SDM.
-        MSR_IA32_MC25_MISC is defined as IA32_MC25_MISC in SDM.
-        MSR_IA32_MC26_MISC is defined as IA32_MC26_MISC in SDM.
-        MSR_IA32_MC27_MISC is defined as IA32_MC27_MISC in SDM.
-        MSR_IA32_MC28_MISC is defined as IA32_MC28_MISC in SDM.
-  @{
-**/
-#define MSR_IA32_MC0_MISC                        0x00000403
-#define MSR_IA32_MC1_MISC                        0x00000407
-#define MSR_IA32_MC2_MISC                        0x0000040B
-#define MSR_IA32_MC3_MISC                        0x0000040F
-#define MSR_IA32_MC4_MISC                        0x00000413
-#define MSR_IA32_MC5_MISC                        0x00000417
-#define MSR_IA32_MC6_MISC                        0x0000041B
-#define MSR_IA32_MC7_MISC                        0x0000041F
-#define MSR_IA32_MC8_MISC                        0x00000423
-#define MSR_IA32_MC9_MISC                        0x00000427
-#define MSR_IA32_MC10_MISC                       0x0000042B
-#define MSR_IA32_MC11_MISC                       0x0000042F
-#define MSR_IA32_MC12_MISC                       0x00000433
-#define MSR_IA32_MC13_MISC                       0x00000437
-#define MSR_IA32_MC14_MISC                       0x0000043B
-#define MSR_IA32_MC15_MISC                       0x0000043F
-#define MSR_IA32_MC16_MISC                       0x00000443
-#define MSR_IA32_MC17_MISC                       0x00000447
-#define MSR_IA32_MC18_MISC                       0x0000044B
-#define MSR_IA32_MC19_MISC                       0x0000044F
-#define MSR_IA32_MC20_MISC                       0x00000453
-#define MSR_IA32_MC21_MISC                       0x00000457
-#define MSR_IA32_MC22_MISC                       0x0000045B
-#define MSR_IA32_MC23_MISC                       0x0000045F
-#define MSR_IA32_MC24_MISC                       0x00000463
-#define MSR_IA32_MC25_MISC                       0x00000467
-#define MSR_IA32_MC26_MISC                       0x0000046B
-#define MSR_IA32_MC27_MISC                       0x0000046F
-#define MSR_IA32_MC28_MISC                       0x00000473
-/// @}
-
-
-/**
-  Reporting Register of Basic VMX  Capabilities (R/O) See Appendix A.1, "Basic
-  VMX Information.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_BASIC (0x00000480)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_VMX_BASIC_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_BASIC);
-  @endcode
-  @note MSR_IA32_VMX_BASIC is defined as IA32_VMX_BASIC in SDM.
-**/
-#define MSR_IA32_VMX_BASIC                       0x00000480
-
-/**
-  MSR information returned for MSR index #MSR_IA32_VMX_BASIC
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 30:0] VMCS revision identifier used by the processor.  Processors
-    /// that use the same VMCS revision identifier use the same size for VMCS
-    /// regions (see subsequent item on bits 44:32).
-    ///
-    /// @note Earlier versions of this manual specified that the VMCS revision
-    /// identifier was a 32-bit field in bits 31:0 of this MSR. For all
-    /// processors produced prior to this change, bit 31 of this MSR was read
-    /// as 0.
-    ///
-    UINT32  VmcsRevisonId:31;
-    UINT32  MustBeZero:1;
-    ///
-    /// [Bit 44:32] Reports the number of bytes that software should allocate
-    /// for the VMXON region and any VMCS region.  It is a value greater than
-    /// 0 and at most 4096(bit 44 is set if and only if bits 43:32 are clear).
-    ///
-    UINT32  VmcsSize:13;
-    UINT32  Reserved1:3;
-    ///
-    /// [Bit 48] Indicates the width of the physical addresses that may be used
-    /// for the VMXON region, each VMCS, and data structures referenced by
-    /// pointers in a VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX
-    /// transitions).  If the bit is 0, these addresses are limited to the
-    /// processor's physical-address width.  If the bit is 1, these addresses
-    /// are limited to 32 bits. This bit is always 0 for processors that
-    /// support Intel 64 architecture.
-    ///
-    /// @note On processors that support Intel 64 architecture, the pointer
-    /// must not set bits beyond the processor's physical address width.
-    ///
-    UINT32  VmcsAddressWidth:1;
-    ///
-    /// [Bit 49] If bit 49 is read as 1, the logical processor supports the
-    /// dual-monitor treatment of system-management interrupts and
-    /// system-management mode. See Section 34.15 for details of this treatment.
-    ///
-    UINT32  DualMonitor:1;
-    ///
-    /// [Bit 53:50] report the memory type that should be used for the VMCS,
-    /// for data structures referenced by pointers in the VMCS (I/O bitmaps,
-    /// virtual-APIC page, MSR areas for VMX transitions), and for the MSEG
-    /// header. If software needs to access these data structures (e.g., to
-    /// modify the contents of the MSR bitmaps), it can configure the paging
-    /// structures to map them into the linear-address space. If it does so,
-    /// it should establish mappings that use the memory type reported bits
-    /// 53:50 in this MSR.
-    ///
-    /// As of this writing, all processors that support VMX operation indicate
-    /// the write-back type.
-    ///
-    /// If software needs to access these data structures (e.g., to modify
-    /// the contents of the MSR bitmaps), it can configure the paging
-    /// structures to map them into the linear-address space. If it does so,
-    /// it should establish mappings that use the memory type reported in this
-    /// MSR.
-    ///
-    /// @note Alternatively, software may map any of these regions or
-    /// structures with the UC memory type. (This may be necessary for the MSEG
-    /// header.) Doing so is discouraged unless necessary as it will cause the
-    /// performance of software accesses to those structures to suffer.
-    ///
-    ///
-    UINT32  MemoryType:4;
-    ///
-    /// [Bit 54] If bit 54 is read as 1, the processor reports information in
-    /// the VM-exit instruction-information field on VM exitsdue to execution
-    /// of the INS and OUTS instructions (see Section 27.2.4). This reporting
-    /// is done only if this bit is read as 1.
-    ///
-    UINT32  InsOutsReporting:1;
-    ///
-    /// [Bit 55] Bit 55 is read as 1 if any VMX controls that default to 1 may
-    /// be cleared to 0. See Appendix A.2 for details. It also reports support
-    /// for the VMX capability MSRs IA32_VMX_TRUE_PINBASED_CTLS,
-    /// IA32_VMX_TRUE_PROCBASED_CTLS, IA32_VMX_TRUE_EXIT_CTLS, and
-    /// IA32_VMX_TRUE_ENTRY_CTLS. See Appendix A.3.1, Appendix A.3.2,
-    /// Appendix A.4, and Appendix A.5 for details.
-    ///
-    UINT32  VmxControls:1;
-    UINT32  Reserved2:8;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_VMX_BASIC_REGISTER;
-
-///
-/// @{ Define value for bit field MSR_IA32_VMX_BASIC_REGISTER.MemoryType
-///
-#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_UNCACHEABLE  0x00
-#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_WRITE_BACK   0x06
-///
-/// @}
-///
-
-
-/**
-  Capability Reporting Register of Pinbased VM-execution Controls (R/O) See
-  Appendix A.3.1, "Pin-Based VMExecution Controls.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_PINBASED_CTLS (0x00000481)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PINBASED_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_PINBASED_CTLS is defined as IA32_VMX_PINBASED_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_PINBASED_CTLS               0x00000481
-
-
-/**
-  Capability Reporting Register of Primary  Processor-based VM-execution
-  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-Execution
-  Controls.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS (0x00000482)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_PROCBASED_CTLS is defined as IA32_VMX_PROCBASED_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_PROCBASED_CTLS              0x00000482
-
-
-/**
-  Capability Reporting Register of VM-exit  Controls (R/O) See Appendix A.4,
-  "VM-Exit Controls.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_EXIT_CTLS (0x00000483)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_EXIT_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_EXIT_CTLS is defined as IA32_VMX_EXIT_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_EXIT_CTLS                   0x00000483
-
-
-/**
-  Capability Reporting Register of VMentry Controls (R/O) See Appendix A.5,
-  "VM-Entry Controls.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_ENTRY_CTLS (0x00000484)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_ENTRY_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_ENTRY_CTLS is defined as IA32_VMX_ENTRY_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_ENTRY_CTLS                  0x00000484
-
-
-/**
-  Reporting Register of Miscellaneous VMX Capabilities (R/O) See Appendix A.6,
-  "Miscellaneous Data.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_MISC (0x00000485)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  IA32_VMX_MISC_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_MISC);
-  @endcode
-  @note MSR_IA32_VMX_MISC is defined as IA32_VMX_MISC in SDM.
-**/
-#define MSR_IA32_VMX_MISC                        0x00000485
-
-/**
-  MSR information returned for MSR index #IA32_VMX_MISC
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 4:0] Reports a value X that specifies the relationship between the
-    /// rate of the VMX-preemption timer and that of the timestamp counter (TSC).
-    /// Specifically, the VMX-preemption timer (if it is active) counts down by
-    /// 1 every time bit X in the TSC changes due to a TSC increment.
-    ///
-    UINT32  VmxTimerRatio:5;
-    ///
-    /// [Bit 5] If bit 5 is read as 1, VM exits store the value of IA32_EFER.LMA
-    /// into the "IA-32e mode guest" VM-entry control;see Section 27.2 for more
-    /// details. This bit is read as 1 on any logical processor that supports
-    /// the 1-setting of the "unrestricted guest" VM-execution control.
-    ///
-    UINT32  VmExitEferLma:1;
-    ///
-    /// [Bit 6] reports (if set) the support for activity state 1 (HLT).
-    ///
-    UINT32  HltActivityStateSupported:1;
-    ///
-    /// [Bit 7] reports (if set) the support for activity state 2 (shutdown).
-    ///
-    UINT32  ShutdownActivityStateSupported:1;
-    ///
-    /// [Bit 8] reports (if set) the support for activity state 3 (wait-for-SIPI).
-    ///
-    UINT32  WaitForSipiActivityStateSupported:1;
-    UINT32  Reserved1:5;
-    ///
-    /// [Bit 14] If read as 1, Intel(R) Processor Trace (Intel PT) can be used
-    /// in VMX operation. If the processor supports Intel PT but does not allow
-    /// it to be used in VMX operation, execution of VMXON clears
-    /// IA32_RTIT_CTL.TraceEn (see "VMXON-Enter VMX Operation" in Chapter 30);
-    /// any attempt to set that bit while in VMX operation (including VMX root
-    /// operation) using the WRMSR instruction causes a general-protection
-    /// exception.
-    ///
-    UINT32  ProcessorTraceSupported:1;
-    ///
-    /// [Bit 15] If read as 1, the RDMSR instruction can be used in system-
-    /// management mode (SMM) to read the IA32_SMBASE MSR (MSR address 9EH).
-    /// See Section 34.15.6.3.
-    ///
-    UINT32  SmBaseMsrSupported:1;
-    ///
-    /// [Bits 24:16] Indicate the number of CR3-target values supported by the
-    /// processor. This number is a value between 0 and 256, inclusive (bit 24
-    /// is set if and only if bits 23:16 are clear).
-    ///
-    UINT32  NumberOfCr3TargetValues:9;
-    ///
-    /// [Bit 27:25] Bits 27:25 is used to compute the recommended maximum
-    /// number of MSRs that should appear in the VM-exit MSR-store list, the
-    /// VM-exit MSR-load list, or the VM-entry MSR-load list. Specifically, if
-    /// the value bits 27:25 of IA32_VMX_MISC is N, then 512 * (N + 1) is the
-    /// recommended maximum number of MSRs to be included in each list. If the
-    /// limit is exceeded, undefined processor behavior may result (including a
-    /// machine check during the VMX transition).
-    ///
-    UINT32  MsrStoreListMaximum:3;
-    ///
-    /// [Bit 28] If read as 1, bit 2 of the IA32_SMM_MONITOR_CTL can be set
-    /// to 1. VMXOFF unblocks SMIs unless IA32_SMM_MONITOR_CTL[bit 2] is 1
-    /// (see Section 34.14.4).
-    ///
-    UINT32  BlockSmiSupported:1;
-    ///
-    /// [Bit 29] read as 1, software can use VMWRITE to write to any supported
-    /// field in the VMCS; otherwise, VMWRITE cannot be used to modify VM-exit
-    /// information fields.
-    ///
-    UINT32  VmWriteSupported:1;
-    ///
-    /// [Bit 30] If read as 1, VM entry allows injection of a software
-    /// interrupt, software exception, or privileged software exception with an
-    /// instruction length of 0.
-    ///
-    UINT32  VmInjectSupported:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bits 63:32] Reports the 32-bit MSEG revision identifier used by the
-    /// processor.
-    ///
-    UINT32  MsegRevisionIdentifier:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} IA32_VMX_MISC_REGISTER;
-
-
-/**
-  Capability Reporting Register of CR0 Bits Fixed to 0 (R/O) See Appendix A.7,
-  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_CR0_FIXED0 (0x00000486)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED0);
-  @endcode
-  @note MSR_IA32_VMX_CR0_FIXED0 is defined as IA32_VMX_CR0_FIXED0 in SDM.
-**/
-#define MSR_IA32_VMX_CR0_FIXED0                  0x00000486
-
-
-/**
-  Capability Reporting Register of CR0 Bits Fixed to 1 (R/O) See Appendix A.7,
-  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_CR0_FIXED1 (0x00000487)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED1);
-  @endcode
-  @note MSR_IA32_VMX_CR0_FIXED1 is defined as IA32_VMX_CR0_FIXED1 in SDM.
-**/
-#define MSR_IA32_VMX_CR0_FIXED1                  0x00000487
-
-
-/**
-  Capability Reporting Register of CR4 Bits Fixed to 0 (R/O) See Appendix A.8,
-  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_CR4_FIXED0 (0x00000488)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED0);
-  @endcode
-  @note MSR_IA32_VMX_CR4_FIXED0 is defined as IA32_VMX_CR4_FIXED0 in SDM.
-**/
-#define MSR_IA32_VMX_CR4_FIXED0                  0x00000488
-
-
-/**
-  Capability Reporting Register of CR4 Bits Fixed to 1 (R/O) See Appendix A.8,
-  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_CR4_FIXED1 (0x00000489)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED1);
-  @endcode
-  @note MSR_IA32_VMX_CR4_FIXED1 is defined as IA32_VMX_CR4_FIXED1 in SDM.
-**/
-#define MSR_IA32_VMX_CR4_FIXED1                  0x00000489
-
-
-/**
-  Capability Reporting Register of VMCS Field Enumeration (R/O) See Appendix
-  A.9, "VMCS Enumeration.". If CPUID.01H:ECX.[5] = 1.
-
-  @param  ECX  MSR_IA32_VMX_VMCS_ENUM (0x0000048A)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMCS_ENUM);
-  @endcode
-  @note MSR_IA32_VMX_VMCS_ENUM is defined as IA32_VMX_VMCS_ENUM in SDM.
-**/
-#define MSR_IA32_VMX_VMCS_ENUM                   0x0000048A
-
-
-/**
-  Capability Reporting Register of  Secondary Processor-based  VM-execution
-  Controls (R/O) See Appendix A.3.3, "Secondary Processor- Based VM-Execution
-  Controls.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C TLS[63]).
-
-  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS2 (0x0000048B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS2);
-  @endcode
-  @note MSR_IA32_VMX_PROCBASED_CTLS2 is defined as IA32_VMX_PROCBASED_CTLS2 in SDM.
-**/
-#define MSR_IA32_VMX_PROCBASED_CTLS2             0x0000048B
-
-
-/**
-  Capability Reporting Register of EPT and  VPID (R/O) See Appendix A.10,
-  "VPID and EPT Capabilities.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C
-  TLS[63] && ( IA32_VMX_PROCBASED_C TLS2[33] IA32_VMX_PROCBASED_C TLS2[37]) ).
-
-  @param  ECX  MSR_IA32_VMX_EPT_VPID_CAP (0x0000048C)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_EPT_VPID_CAP);
-  @endcode
-  @note MSR_IA32_VMX_EPT_VPID_CAP is defined as IA32_VMX_EPT_VPID_CAP in SDM.
-**/
-#define MSR_IA32_VMX_EPT_VPID_CAP                0x0000048C
-
-
-/**
-  Capability Reporting Register of Pinbased VM-execution Flex Controls (R/O)
-  See Appendix A.3.1, "Pin-Based VMExecution Controls.". If (
-  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
-
-  @param  ECX  MSR_IA32_VMX_TRUE_PINBASED_CTLS (0x0000048D)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PINBASED_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_TRUE_PINBASED_CTLS is defined as IA32_VMX_TRUE_PINBASED_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_TRUE_PINBASED_CTLS          0x0000048D
-
-
-/**
-  Capability Reporting Register of Primary  Processor-based VM-execution Flex
-  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-Execution
-  Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
-
-  @param  ECX  MSR_IA32_VMX_TRUE_PROCBASED_CTLS (0x0000048E)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PROCBASED_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_TRUE_PROCBASED_CTLS is defined as IA32_VMX_TRUE_PROCBASED_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS         0x0000048E
-
-
-/**
-  Capability Reporting Register of VM-exit  Flex Controls (R/O) See Appendix
-  A.4, "VM-Exit Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
-
-  @param  ECX  MSR_IA32_VMX_TRUE_EXIT_CTLS (0x0000048F)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_EXIT_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_TRUE_EXIT_CTLS is defined as IA32_VMX_TRUE_EXIT_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_TRUE_EXIT_CTLS              0x0000048F
-
-
-/**
-  Capability Reporting Register of VMentry Flex Controls (R/O) See Appendix
-  A.5, "VM-Entry Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
-
-  @param  ECX  MSR_IA32_VMX_TRUE_ENTRY_CTLS (0x00000490)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_ENTRY_CTLS);
-  @endcode
-  @note MSR_IA32_VMX_TRUE_ENTRY_CTLS is defined as IA32_VMX_TRUE_ENTRY_CTLS in SDM.
-**/
-#define MSR_IA32_VMX_TRUE_ENTRY_CTLS             0x00000490
-
-
-/**
-  Capability Reporting Register of VMfunction Controls (R/O). If(
-  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
-
-  @param  ECX  MSR_IA32_VMX_VMFUNC (0x00000491)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMFUNC);
-  @endcode
-  @note MSR_IA32_VMX_VMFUNC is defined as IA32_VMX_VMFUNC in SDM.
-**/
-#define MSR_IA32_VMX_VMFUNC                      0x00000491
-
-
-/**
-  Full Width Writable IA32_PMCn Alias (R/W). (If CPUID.0AH: EAX[15:8] > n) &&
-  IA32_PERF_CAPABILITIES[ 13] = 1.
-
-  @param  ECX  MSR_IA32_A_PMCn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_A_PMC0);
-  AsmWriteMsr64 (MSR_IA32_A_PMC0, Msr);
-  @endcode
-  @note MSR_IA32_A_PMC0 is defined as IA32_A_PMC0 in SDM.
-        MSR_IA32_A_PMC1 is defined as IA32_A_PMC1 in SDM.
-        MSR_IA32_A_PMC2 is defined as IA32_A_PMC2 in SDM.
-        MSR_IA32_A_PMC3 is defined as IA32_A_PMC3 in SDM.
-        MSR_IA32_A_PMC4 is defined as IA32_A_PMC4 in SDM.
-        MSR_IA32_A_PMC5 is defined as IA32_A_PMC5 in SDM.
-        MSR_IA32_A_PMC6 is defined as IA32_A_PMC6 in SDM.
-        MSR_IA32_A_PMC7 is defined as IA32_A_PMC7 in SDM.
-  @{
-**/
-#define MSR_IA32_A_PMC0                          0x000004C1
-#define MSR_IA32_A_PMC1                          0x000004C2
-#define MSR_IA32_A_PMC2                          0x000004C3
-#define MSR_IA32_A_PMC3                          0x000004C4
-#define MSR_IA32_A_PMC4                          0x000004C5
-#define MSR_IA32_A_PMC5                          0x000004C6
-#define MSR_IA32_A_PMC6                          0x000004C7
-#define MSR_IA32_A_PMC7                          0x000004C8
-/// @}
-
-
-/**
-  (R/W). If IA32_MCG_CAP.LMCE_P =1.
-
-  @param  ECX  MSR_IA32_MCG_EXT_CTL (0x000004D0)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_MCG_EXT_CTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_EXT_CTL);
-  AsmWriteMsr64 (MSR_IA32_MCG_EXT_CTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_MCG_EXT_CTL is defined as IA32_MCG_EXT_CTL in SDM.
-**/
-#define MSR_IA32_MCG_EXT_CTL                     0x000004D0
-
-/**
-  MSR information returned for MSR index #MSR_IA32_MCG_EXT_CTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] LMCE_EN.
-    ///
-    UINT32  LMCE_EN:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_MCG_EXT_CTL_REGISTER;
-
-
-/**
-  Status and SVN Threshold of SGX Support for ACM (RO). If CPUID.(EAX=07H,
-  ECX=0H): EBX[2] = 1.
-
-  @param  ECX  MSR_IA32_SGX_SVN_STATUS (0x00000500)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_SGX_SVN_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SGX_SVN_STATUS);
-  @endcode
-  @note MSR_IA32_SGX_SVN_STATUS is defined as IA32_SGX_SVN_STATUS in SDM.
-**/
-#define MSR_IA32_SGX_SVN_STATUS                  0x00000500
-
-/**
-  MSR information returned for MSR index #MSR_IA32_SGX_SVN_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Lock. See Section 41.11.3, "Interactions with Authenticated
-    /// Code Modules (ACMs)".
-    ///
-    UINT32  Lock:1;
-    UINT32  Reserved1:15;
-    ///
-    /// [Bits 23:16] SGX_SVN_SINIT. See Section 41.11.3, "Interactions with
-    /// Authenticated Code Modules (ACMs)".
-    ///
-    UINT32  SGX_SVN_SINIT:8;
-    UINT32  Reserved2:8;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_SGX_SVN_STATUS_REGISTER;
-
-
-/**
-  Trace Output Base Register (R/W). If ((CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
-  && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1) (CPUID.(EAX=14H,ECX=0): ECX[2] = 1)
-  ) ).
-
-  @param  ECX  MSR_IA32_RTIT_OUTPUT_BASE (0x00000560)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_OUTPUT_BASE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_BASE);
-  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_BASE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_OUTPUT_BASE is defined as IA32_RTIT_OUTPUT_BASE in SDM.
-**/
-#define MSR_IA32_RTIT_OUTPUT_BASE                0x00000560
-
-/**
-  MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_BASE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved:7;
-    ///
-    /// [Bits 31:7] Base physical address.
-    ///
-    UINT32  Base:25;
-    ///
-    /// [Bits 63:32] Base physical address.
-    ///
-    UINT32  BaseHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_OUTPUT_BASE_REGISTER;
-
-
-/**
-  Trace Output Mask Pointers Register (R/W). If ((CPUID.(EAX=07H,
-  ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1)
-  (CPUID.(EAX=14H,ECX=0): ECX[2] = 1) ) ).
-
-  @param  ECX  MSR_IA32_RTIT_OUTPUT_MASK_PTRS (0x00000561)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS);
-  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_OUTPUT_MASK_PTRS is defined as IA32_RTIT_OUTPUT_MASK_PTRS in SDM.
-**/
-#define MSR_IA32_RTIT_OUTPUT_MASK_PTRS           0x00000561
-
-/**
-  MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_MASK_PTRS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved:7;
-    ///
-    /// [Bits 31:7] MaskOrTableOffset.
-    ///
-    UINT32  MaskOrTableOffset:25;
-    ///
-    /// [Bits 63:32] Output Offset.
-    ///
-    UINT32  OutputOffset:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER;
-
-/**
-  Format of ToPA table entries.
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] END. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  END:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 2] INT. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  INT:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bit 4] STOP. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  STOP:1;
-    UINT32  Reserved3:1;
-    ///
-    /// [Bit 6:9] Indicates the size of the associated output region. See Section
-    /// 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  Size:4;
-    UINT32  Reserved4:2;
-    ///
-    /// [Bit 12:31] Output Region Base Physical Address low part.
-    /// [Bit 12:31] Output Region Base Physical Address [12:63] value to match.
-    /// ATTENTION: The size of the address field is determined by the processor's
-    /// physical-address width (MAXPHYADDR) in bits, as reported in
-    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
-    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is reserved part.
-    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  Base:20;
-    ///
-    /// [Bit 32:63] Output Region Base Physical Address high part.
-    /// [Bit 32:63] Output Region Base Physical Address [12:63] value to match.
-    /// ATTENTION: The size of the address field is determined by the processor's
-    /// physical-address width (MAXPHYADDR) in bits, as reported in
-    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
-    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is reserved part.
-    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
-    ///
-    UINT32  BaseHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} RTIT_TOPA_TABLE_ENTRY;
-
-///
-/// The size of the associated output region usd by Topa.
-///
-typedef enum {
-  RtitTopaMemorySize4K = 0,
-  RtitTopaMemorySize8K,
-  RtitTopaMemorySize16K,
-  RtitTopaMemorySize32K,
-  RtitTopaMemorySize64K,
-  RtitTopaMemorySize128K,
-  RtitTopaMemorySize256K,
-  RtitTopaMemorySize512K,
-  RtitTopaMemorySize1M,
-  RtitTopaMemorySize2M,
-  RtitTopaMemorySize4M,
-  RtitTopaMemorySize8M,
-  RtitTopaMemorySize16M,
-  RtitTopaMemorySize32M,
-  RtitTopaMemorySize64M,
-  RtitTopaMemorySize128M
-} RTIT_TOPA_MEMORY_SIZE;
-
-/**
-  Trace Control Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
-
-  @param  ECX  MSR_IA32_RTIT_CTL (0x00000570)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_CTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CTL);
-  AsmWriteMsr64 (MSR_IA32_RTIT_CTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_CTL is defined as IA32_RTIT_CTL in SDM.
-**/
-#define MSR_IA32_RTIT_CTL                        0x00000570
-
-/**
-  MSR information returned for MSR index #MSR_IA32_RTIT_CTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] TraceEn.
-    ///
-    UINT32  TraceEn:1;
-    ///
-    /// [Bit 1] CYCEn. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
-    ///
-    UINT32  CYCEn:1;
-    ///
-    /// [Bit 2] OS.
-    ///
-    UINT32  OS:1;
-    ///
-    /// [Bit 3] User.
-    ///
-    UINT32  User:1;
-    ///
-    /// [Bit 4] PwrEvtEn.
-    ///
-    UINT32  PwrEvtEn:1;
-    ///
-    /// [Bit 5] FUPonPTW.
-    ///
-    UINT32  FUPonPTW:1;
-    ///
-    /// [Bit 6] FabricEn. If (CPUID.(EAX=07H, ECX=0):ECX[3] = 1).
-    ///
-    UINT32  FabricEn:1;
-    ///
-    /// [Bit 7] CR3 filter.
-    ///
-    UINT32  CR3:1;
-    ///
-    /// [Bit 8] ToPA.
-    ///
-    UINT32  ToPA:1;
-    ///
-    /// [Bit 9] MTCEn. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
-    ///
-    UINT32  MTCEn:1;
-    ///
-    /// [Bit 10] TSCEn.
-    ///
-    UINT32  TSCEn:1;
-    ///
-    /// [Bit 11] DisRETC.
-    ///
-    UINT32  DisRETC:1;
-    ///
-    /// [Bit 12] PTWEn.
-    ///
-    UINT32  PTWEn:1;
-    ///
-    /// [Bit 13] BranchEn.
-    ///
-    UINT32  BranchEn:1;
-    ///
-    /// [Bits 17:14] MTCFreq. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
-    ///
-    UINT32  MTCFreq:4;
-    UINT32  Reserved3:1;
-    ///
-    /// [Bits 22:19] CYCThresh. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
-    ///
-    UINT32  CYCThresh:4;
-    UINT32  Reserved4:1;
-    ///
-    /// [Bits 27:24] PSBFreq. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
-    ///
-    UINT32  PSBFreq:4;
-    UINT32  Reserved5:4;
-    ///
-    /// [Bits 35:32] ADDR0_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 0).
-    ///
-    UINT32  ADDR0_CFG:4;
-    ///
-    /// [Bits 39:36] ADDR1_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 1).
-    ///
-    UINT32  ADDR1_CFG:4;
-    ///
-    /// [Bits 43:40] ADDR2_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 2).
-    ///
-    UINT32  ADDR2_CFG:4;
-    ///
-    /// [Bits 47:44] ADDR3_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 3).
-    ///
-    UINT32  ADDR3_CFG:4;
-    UINT32  Reserved6:16;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_CTL_REGISTER;
-
-
-/**
-  Tracing Status Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
-
-  @param  ECX  MSR_IA32_RTIT_STATUS (0x00000571)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_STATUS);
-  AsmWriteMsr64 (MSR_IA32_RTIT_STATUS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_STATUS is defined as IA32_RTIT_STATUS in SDM.
-**/
-#define MSR_IA32_RTIT_STATUS                     0x00000571
-
-/**
-  MSR information returned for MSR index #MSR_IA32_RTIT_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] FilterEn, (writes ignored).
-    /// If (CPUID.(EAX=07H, ECX=0):EBX[2] = 1).
-    ///
-    UINT32  FilterEn:1;
-    ///
-    /// [Bit 1] ContexEn, (writes ignored).
-    ///
-    UINT32  ContexEn:1;
-    ///
-    /// [Bit 2] TriggerEn, (writes ignored).
-    ///
-    UINT32  TriggerEn:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 4] Error.
-    ///
-    UINT32  Error:1;
-    ///
-    /// [Bit 5] Stopped.
-    ///
-    UINT32  Stopped:1;
-    UINT32  Reserved2:26;
-    ///
-    /// [Bits 48:32] PacketByteCnt. If (CPUID.(EAX=07H, ECX=0):EBX[1] > 3).
-    ///
-    UINT32  PacketByteCnt:17;
-    UINT32  Reserved3:15;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_STATUS_REGISTER;
-
-
-/**
-  Trace Filter CR3 Match Register (R/W).
-  If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
-
-  @param  ECX  MSR_IA32_RTIT_CR3_MATCH (0x00000572)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_CR3_MATCH_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CR3_MATCH);
-  AsmWriteMsr64 (MSR_IA32_RTIT_CR3_MATCH, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_CR3_MATCH is defined as IA32_RTIT_CR3_MATCH in SDM.
-**/
-#define MSR_IA32_RTIT_CR3_MATCH                  0x00000572
-
-/**
-  MSR information returned for MSR index #MSR_IA32_RTIT_CR3_MATCH
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved:5;
-    ///
-    /// [Bits 31:5] CR3[63:5] value to match.
-    ///
-    UINT32  Cr3:27;
-    ///
-    /// [Bits 63:32] CR3[63:5] value to match.
-    ///
-    UINT32  Cr3Hi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_CR3_MATCH_REGISTER;
-
-
-/**
-  Region n Start Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
-
-  @param  ECX  MSR_IA32_RTIT_ADDRn_A
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_A);
-  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_A, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_ADDR0_A is defined as IA32_RTIT_ADDR0_A in SDM.
-        MSR_IA32_RTIT_ADDR1_A is defined as IA32_RTIT_ADDR1_A in SDM.
-        MSR_IA32_RTIT_ADDR2_A is defined as IA32_RTIT_ADDR2_A in SDM.
-        MSR_IA32_RTIT_ADDR3_A is defined as IA32_RTIT_ADDR3_A in SDM.
-  @{
-**/
-#define MSR_IA32_RTIT_ADDR0_A                    0x00000580
-#define MSR_IA32_RTIT_ADDR1_A                    0x00000582
-#define MSR_IA32_RTIT_ADDR2_A                    0x00000584
-#define MSR_IA32_RTIT_ADDR3_A                    0x00000586
-/// @}
-
-
-/**
-  Region n End Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
-
-  @param  ECX  MSR_IA32_RTIT_ADDRn_B
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_B);
-  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_B, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_RTIT_ADDR0_B is defined as IA32_RTIT_ADDR0_B in SDM.
-        MSR_IA32_RTIT_ADDR1_B is defined as IA32_RTIT_ADDR1_B in SDM.
-        MSR_IA32_RTIT_ADDR2_B is defined as IA32_RTIT_ADDR2_B in SDM.
-        MSR_IA32_RTIT_ADDR3_B is defined as IA32_RTIT_ADDR3_B in SDM.
-  @{
-**/
-#define MSR_IA32_RTIT_ADDR0_B                    0x00000581
-#define MSR_IA32_RTIT_ADDR1_B                    0x00000583
-#define MSR_IA32_RTIT_ADDR2_B                    0x00000585
-#define MSR_IA32_RTIT_ADDR3_B                    0x00000587
-/// @}
-
-
-/**
-  MSR information returned for MSR indexes
-  #MSR_IA32_RTIT_ADDR0_A to #MSR_IA32_RTIT_ADDR3_A and
-  #MSR_IA32_RTIT_ADDR0_B to #MSR_IA32_RTIT_ADDR3_B
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Virtual Address.
-    ///
-    UINT32  VirtualAddress:32;
-    ///
-    /// [Bits 47:32] Virtual Address.
-    ///
-    UINT32  VirtualAddressHi:16;
-    ///
-    /// [Bits 63:48] SignExt_VA.
-    ///
-    UINT32  SignExt_VA:16;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_RTIT_ADDR_REGISTER;
-
-
-/**
-  DS Save Area (R/W) Points to the linear address of the first byte of the DS
-  buffer management area, which is used to manage the BTS and PEBS buffers.
-  See Section 18.6.3.4, "Debug Store (DS) Mechanism.". If(
-  CPUID.01H:EDX.DS[21] = 1. The linear address of the first byte of the DS
-  buffer management area, if IA-32e mode is active.
-
-  @param  ECX  MSR_IA32_DS_AREA (0x00000600)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_DS_AREA_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_DS_AREA_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_DS_AREA);
-  AsmWriteMsr64 (MSR_IA32_DS_AREA, Msr);
-  @endcode
-  @note MSR_IA32_DS_AREA is defined as IA32_DS_AREA in SDM.
-**/
-#define MSR_IA32_DS_AREA                         0x00000600
-
-
-/**
-  TSC Target of Local APIC's TSC Deadline Mode (R/W). If CPUID.01H:ECX.[24] =
-  1.
-
-  @param  ECX  MSR_IA32_TSC_DEADLINE (0x000006E0)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_TSC_DEADLINE);
-  AsmWriteMsr64 (MSR_IA32_TSC_DEADLINE, Msr);
-  @endcode
-  @note MSR_IA32_TSC_DEADLINE is defined as IA32_TSC_DEADLINE in SDM.
-**/
-#define MSR_IA32_TSC_DEADLINE                    0x000006E0
-
-
-/**
-  Enable/disable HWP (R/W). If CPUID.06H:EAX.[7] = 1.
-
-  @param  ECX  MSR_IA32_PM_ENABLE (0x00000770)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PM_ENABLE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_ENABLE);
-  AsmWriteMsr64 (MSR_IA32_PM_ENABLE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PM_ENABLE is defined as IA32_PM_ENABLE in SDM.
-**/
-#define MSR_IA32_PM_ENABLE                       0x00000770
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PM_ENABLE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] HWP_ENABLE (R/W1-Once). See Section 14.4.2, "Enabling HWP". If
-    /// CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  HWP_ENABLE:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PM_ENABLE_REGISTER;
-
-
-/**
-  HWP Performance Range Enumeration (RO). If CPUID.06H:EAX.[7] = 1.
-
-  @param  ECX  MSR_IA32_HWP_CAPABILITIES (0x00000771)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_HWP_CAPABILITIES_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_CAPABILITIES);
-  @endcode
-  @note MSR_IA32_HWP_CAPABILITIES is defined as IA32_HWP_CAPABILITIES in SDM.
-**/
-#define MSR_IA32_HWP_CAPABILITIES                0x00000771
-
-/**
-  MSR information returned for MSR index #MSR_IA32_HWP_CAPABILITIES
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Highest_Performance See Section 14.4.3, "HWP Performance
-    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Highest_Performance:8;
-    ///
-    /// [Bits 15:8] Guaranteed_Performance See Section 14.4.3, "HWP
-    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Guaranteed_Performance:8;
-    ///
-    /// [Bits 23:16] Most_Efficient_Performance See Section 14.4.3, "HWP
-    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Most_Efficient_Performance:8;
-    ///
-    /// [Bits 31:24] Lowest_Performance See Section 14.4.3, "HWP Performance
-    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Lowest_Performance:8;
-    UINT32  Reserved:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_HWP_CAPABILITIES_REGISTER;
-
-
-/**
-  Power Management Control Hints for All Logical Processors in a Package
-  (R/W). If CPUID.06H:EAX.[11] = 1.
-
-  @param  ECX  MSR_IA32_HWP_REQUEST_PKG (0x00000772)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_HWP_REQUEST_PKG_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST_PKG);
-  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST_PKG, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_HWP_REQUEST_PKG is defined as IA32_HWP_REQUEST_PKG in SDM.
-**/
-#define MSR_IA32_HWP_REQUEST_PKG                 0x00000772
-
-/**
-  MSR information returned for MSR index #MSR_IA32_HWP_REQUEST_PKG
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[11] = 1.
-    ///
-    UINT32  Minimum_Performance:8;
-    ///
-    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[11] = 1.
-    ///
-    UINT32  Maximum_Performance:8;
-    ///
-    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
-    /// If CPUID.06H:EAX.[11] = 1.
-    ///
-    UINT32  Desired_Performance:8;
-    ///
-    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
-    /// "Managing HWP". If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[10] = 1.
-    ///
-    UINT32  Energy_Performance_Preference:8;
-    ///
-    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[9] = 1.
-    ///
-    UINT32  Activity_Window:10;
-    UINT32  Reserved:22;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_HWP_REQUEST_PKG_REGISTER;
-
-
-/**
-  Control HWP Native Interrupts (R/W). If CPUID.06H:EAX.[8] = 1.
-
-  @param  ECX  MSR_IA32_HWP_INTERRUPT (0x00000773)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_HWP_INTERRUPT_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_INTERRUPT);
-  AsmWriteMsr64 (MSR_IA32_HWP_INTERRUPT, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_HWP_INTERRUPT is defined as IA32_HWP_INTERRUPT in SDM.
-**/
-#define MSR_IA32_HWP_INTERRUPT                   0x00000773
-
-/**
-  MSR information returned for MSR index #MSR_IA32_HWP_INTERRUPT
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] EN_Guaranteed_Performance_Change. See Section 14.4.6, "HWP
-    /// Notifications". If CPUID.06H:EAX.[8] = 1.
-    ///
-    UINT32  EN_Guaranteed_Performance_Change:1;
-    ///
-    /// [Bit 1] EN_Excursion_Minimum. See Section 14.4.6, "HWP Notifications".
-    /// If CPUID.06H:EAX.[8] = 1.
-    ///
-    UINT32  EN_Excursion_Minimum:1;
-    UINT32  Reserved1:30;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_HWP_INTERRUPT_REGISTER;
-
-
-/**
-  Power Management Control Hints to a Logical Processor (R/W). If
-  CPUID.06H:EAX.[7] = 1.
-
-  @param  ECX  MSR_IA32_HWP_REQUEST (0x00000774)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_HWP_REQUEST_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST);
-  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_HWP_REQUEST is defined as IA32_HWP_REQUEST in SDM.
-**/
-#define MSR_IA32_HWP_REQUEST                     0x00000774
-
-/**
-  MSR information returned for MSR index #MSR_IA32_HWP_REQUEST
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Minimum_Performance:8;
-    ///
-    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Maximum_Performance:8;
-    ///
-    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
-    /// If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Desired_Performance:8;
-    ///
-    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
-    /// "Managing HWP". If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[10] = 1.
-    ///
-    UINT32  Energy_Performance_Preference:8;
-    ///
-    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[9] = 1.
-    ///
-    UINT32  Activity_Window:10;
-    ///
-    /// [Bit 42] Package_Control See Section 14.4.4, "Managing HWP". If
-    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[11] = 1.
-    ///
-    UINT32  Package_Control:1;
-    UINT32  Reserved:21;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_HWP_REQUEST_REGISTER;
-
-
-/**
-  Log bits indicating changes to  Guaranteed & excursions to Minimum (R/W). If
-  CPUID.06H:EAX.[7] = 1.
-
-  @param  ECX  MSR_IA32_HWP_STATUS (0x00000777)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_HWP_STATUS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_STATUS);
-  AsmWriteMsr64 (MSR_IA32_HWP_STATUS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_HWP_STATUS is defined as IA32_HWP_STATUS in SDM.
-**/
-#define MSR_IA32_HWP_STATUS                      0x00000777
-
-/**
-  MSR information returned for MSR index #MSR_IA32_HWP_STATUS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Guaranteed_Performance_Change (R/WC0). See Section 14.4.5,
-    /// "HWP Feedback". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Guaranteed_Performance_Change:1;
-    UINT32  Reserved1:1;
-    ///
-    /// [Bit 2] Excursion_To_Minimum (R/WC0). See Section 14.4.5, "HWP
-    /// Feedback". If CPUID.06H:EAX.[7] = 1.
-    ///
-    UINT32  Excursion_To_Minimum:1;
-    UINT32  Reserved2:29;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_HWP_STATUS_REGISTER;
-
-
-/**
-  x2APIC ID Register (R/O) See x2APIC Specification. If CPUID.01H:ECX[21] = 1
-  && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_APICID (0x00000802)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_APICID);
-  @endcode
-  @note MSR_IA32_X2APIC_APICID is defined as IA32_X2APIC_APICID in SDM.
-**/
-#define MSR_IA32_X2APIC_APICID                   0x00000802
-
-
-/**
-  x2APIC Version Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_VERSION (0x00000803)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_VERSION);
-  @endcode
-  @note MSR_IA32_X2APIC_VERSION is defined as IA32_X2APIC_VERSION in SDM.
-**/
-#define MSR_IA32_X2APIC_VERSION                  0x00000803
-
-
-/**
-  x2APIC Task Priority Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_TPR (0x00000808)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TPR);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_TPR, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_TPR is defined as IA32_X2APIC_TPR in SDM.
-**/
-#define MSR_IA32_X2APIC_TPR                      0x00000808
-
-
-/**
-  x2APIC Processor Priority Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_PPR (0x0000080A)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_PPR);
-  @endcode
-  @note MSR_IA32_X2APIC_PPR is defined as IA32_X2APIC_PPR in SDM.
-**/
-#define MSR_IA32_X2APIC_PPR                      0x0000080A
-
-
-/**
-  x2APIC EOI Register (W/O). If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10]
-  = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_EOI (0x0000080B)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = 0;
-  AsmWriteMsr64 (MSR_IA32_X2APIC_EOI, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_EOI is defined as IA32_X2APIC_EOI in SDM.
-**/
-#define MSR_IA32_X2APIC_EOI                      0x0000080B
-
-
-/**
-  x2APIC Logical Destination Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LDR (0x0000080D)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LDR);
-  @endcode
-  @note MSR_IA32_X2APIC_LDR is defined as IA32_X2APIC_LDR in SDM.
-**/
-#define MSR_IA32_X2APIC_LDR                      0x0000080D
-
-
-/**
-  x2APIC Spurious Interrupt Vector Register (R/W). If CPUID.01H:ECX.[21] = 1
-  && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_SIVR (0x0000080F)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_SIVR);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_SIVR, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_SIVR is defined as IA32_X2APIC_SIVR in SDM.
-**/
-#define MSR_IA32_X2APIC_SIVR                     0x0000080F
-
-
-/**
-  x2APIC In-Service Register Bits (n * 32 + 31):(n * 32) (R/O).
-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_ISRn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ISR0);
-  @endcode
-  @note MSR_IA32_X2APIC_ISR0 is defined as IA32_X2APIC_ISR0 in SDM.
-        MSR_IA32_X2APIC_ISR1 is defined as IA32_X2APIC_ISR1 in SDM.
-        MSR_IA32_X2APIC_ISR2 is defined as IA32_X2APIC_ISR2 in SDM.
-        MSR_IA32_X2APIC_ISR3 is defined as IA32_X2APIC_ISR3 in SDM.
-        MSR_IA32_X2APIC_ISR4 is defined as IA32_X2APIC_ISR4 in SDM.
-        MSR_IA32_X2APIC_ISR5 is defined as IA32_X2APIC_ISR5 in SDM.
-        MSR_IA32_X2APIC_ISR6 is defined as IA32_X2APIC_ISR6 in SDM.
-        MSR_IA32_X2APIC_ISR7 is defined as IA32_X2APIC_ISR7 in SDM.
-  @{
-**/
-#define MSR_IA32_X2APIC_ISR0                     0x00000810
-#define MSR_IA32_X2APIC_ISR1                     0x00000811
-#define MSR_IA32_X2APIC_ISR2                     0x00000812
-#define MSR_IA32_X2APIC_ISR3                     0x00000813
-#define MSR_IA32_X2APIC_ISR4                     0x00000814
-#define MSR_IA32_X2APIC_ISR5                     0x00000815
-#define MSR_IA32_X2APIC_ISR6                     0x00000816
-#define MSR_IA32_X2APIC_ISR7                     0x00000817
-/// @}
-
-
-/**
-  x2APIC Trigger Mode Register Bits (n * 32 + ):(n * 32) (R/O).
-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_TMRn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TMR0);
-  @endcode
-  @note MSR_IA32_X2APIC_TMR0 is defined as IA32_X2APIC_TMR0 in SDM.
-        MSR_IA32_X2APIC_TMR1 is defined as IA32_X2APIC_TMR1 in SDM.
-        MSR_IA32_X2APIC_TMR2 is defined as IA32_X2APIC_TMR2 in SDM.
-        MSR_IA32_X2APIC_TMR3 is defined as IA32_X2APIC_TMR3 in SDM.
-        MSR_IA32_X2APIC_TMR4 is defined as IA32_X2APIC_TMR4 in SDM.
-        MSR_IA32_X2APIC_TMR5 is defined as IA32_X2APIC_TMR5 in SDM.
-        MSR_IA32_X2APIC_TMR6 is defined as IA32_X2APIC_TMR6 in SDM.
-        MSR_IA32_X2APIC_TMR7 is defined as IA32_X2APIC_TMR7 in SDM.
-  @{
-**/
-#define MSR_IA32_X2APIC_TMR0                     0x00000818
-#define MSR_IA32_X2APIC_TMR1                     0x00000819
-#define MSR_IA32_X2APIC_TMR2                     0x0000081A
-#define MSR_IA32_X2APIC_TMR3                     0x0000081B
-#define MSR_IA32_X2APIC_TMR4                     0x0000081C
-#define MSR_IA32_X2APIC_TMR5                     0x0000081D
-#define MSR_IA32_X2APIC_TMR6                     0x0000081E
-#define MSR_IA32_X2APIC_TMR7                     0x0000081F
-/// @}
-
-
-/**
-  x2APIC Interrupt Request Register Bits (n* 32 + 31):(n * 32) (R/O).
-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_IRRn
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_IRR0);
-  @endcode
-  @note MSR_IA32_X2APIC_IRR0 is defined as IA32_X2APIC_IRR0 in SDM.
-        MSR_IA32_X2APIC_IRR1 is defined as IA32_X2APIC_IRR1 in SDM.
-        MSR_IA32_X2APIC_IRR2 is defined as IA32_X2APIC_IRR2 in SDM.
-        MSR_IA32_X2APIC_IRR3 is defined as IA32_X2APIC_IRR3 in SDM.
-        MSR_IA32_X2APIC_IRR4 is defined as IA32_X2APIC_IRR4 in SDM.
-        MSR_IA32_X2APIC_IRR5 is defined as IA32_X2APIC_IRR5 in SDM.
-        MSR_IA32_X2APIC_IRR6 is defined as IA32_X2APIC_IRR6 in SDM.
-        MSR_IA32_X2APIC_IRR7 is defined as IA32_X2APIC_IRR7 in SDM.
-  @{
-**/
-#define MSR_IA32_X2APIC_IRR0                     0x00000820
-#define MSR_IA32_X2APIC_IRR1                     0x00000821
-#define MSR_IA32_X2APIC_IRR2                     0x00000822
-#define MSR_IA32_X2APIC_IRR3                     0x00000823
-#define MSR_IA32_X2APIC_IRR4                     0x00000824
-#define MSR_IA32_X2APIC_IRR5                     0x00000825
-#define MSR_IA32_X2APIC_IRR6                     0x00000826
-#define MSR_IA32_X2APIC_IRR7                     0x00000827
-/// @}
-
-
-/**
-  x2APIC Error Status Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_ESR (0x00000828)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ESR);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_ESR, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_ESR is defined as IA32_X2APIC_ESR in SDM.
-**/
-#define MSR_IA32_X2APIC_ESR                      0x00000828
-
-
-/**
-  x2APIC LVT Corrected Machine Check Interrupt Register (R/W). If
-  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_CMCI (0x0000082F)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_CMCI);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_CMCI, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_CMCI is defined as IA32_X2APIC_LVT_CMCI in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_CMCI                 0x0000082F
-
-
-/**
-  x2APIC Interrupt Command Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_ICR (0x00000830)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ICR);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_ICR, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_ICR is defined as IA32_X2APIC_ICR in SDM.
-**/
-#define MSR_IA32_X2APIC_ICR                      0x00000830
-
-
-/**
-  x2APIC LVT Timer Interrupt Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_TIMER (0x00000832)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_TIMER);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_TIMER, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_TIMER is defined as IA32_X2APIC_LVT_TIMER in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_TIMER                0x00000832
-
-
-/**
-  x2APIC LVT Thermal Sensor Interrupt Register (R/W). If CPUID.01H:ECX.[21] =
-  1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_THERMAL (0x00000833)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_THERMAL);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_THERMAL, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_THERMAL is defined as IA32_X2APIC_LVT_THERMAL in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_THERMAL              0x00000833
-
-
-/**
-  x2APIC LVT Performance Monitor Interrupt Register (R/W). If
-  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_PMI (0x00000834)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_PMI);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_PMI, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_PMI is defined as IA32_X2APIC_LVT_PMI in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_PMI                  0x00000834
-
-
-/**
-  x2APIC LVT LINT0 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_LINT0 (0x00000835)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT0);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT0, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_LINT0 is defined as IA32_X2APIC_LVT_LINT0 in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_LINT0                0x00000835
-
-
-/**
-  x2APIC LVT LINT1 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_LINT1 (0x00000836)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT1);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT1, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_LINT1 is defined as IA32_X2APIC_LVT_LINT1 in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_LINT1                0x00000836
-
-
-/**
-  x2APIC LVT Error Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_LVT_ERROR (0x00000837)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_ERROR);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_ERROR, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_LVT_ERROR is defined as IA32_X2APIC_LVT_ERROR in SDM.
-**/
-#define MSR_IA32_X2APIC_LVT_ERROR                0x00000837
-
-
-/**
-  x2APIC Initial Count Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_INIT_COUNT (0x00000838)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_INIT_COUNT);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_INIT_COUNT, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_INIT_COUNT is defined as IA32_X2APIC_INIT_COUNT in SDM.
-**/
-#define MSR_IA32_X2APIC_INIT_COUNT               0x00000838
-
-
-/**
-  x2APIC Current Count Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_CUR_COUNT (0x00000839)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_CUR_COUNT);
-  @endcode
-  @note MSR_IA32_X2APIC_CUR_COUNT is defined as IA32_X2APIC_CUR_COUNT in SDM.
-**/
-#define MSR_IA32_X2APIC_CUR_COUNT                0x00000839
-
-
-/**
-  x2APIC Divide Configuration Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_DIV_CONF (0x0000083E)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_DIV_CONF);
-  AsmWriteMsr64 (MSR_IA32_X2APIC_DIV_CONF, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_DIV_CONF is defined as IA32_X2APIC_DIV_CONF in SDM.
-**/
-#define MSR_IA32_X2APIC_DIV_CONF                 0x0000083E
-
-
-/**
-  x2APIC Self IPI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
-  IA32_APIC_BASE.[10] = 1.
-
-  @param  ECX  MSR_IA32_X2APIC_SELF_IPI (0x0000083F)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = 0;
-  AsmWriteMsr64 (MSR_IA32_X2APIC_SELF_IPI, Msr);
-  @endcode
-  @note MSR_IA32_X2APIC_SELF_IPI is defined as IA32_X2APIC_SELF_IPI in SDM.
-**/
-#define MSR_IA32_X2APIC_SELF_IPI                 0x0000083F
-
-
-/**
-  Silicon Debug Feature Control (R/W). If CPUID.01H:ECX.[11] = 1.
-
-  @param  ECX  MSR_IA32_DEBUG_INTERFACE (0x00000C80)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_DEBUG_INTERFACE_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUG_INTERFACE);
-  AsmWriteMsr64 (MSR_IA32_DEBUG_INTERFACE, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_DEBUG_INTERFACE is defined as IA32_DEBUG_INTERFACE in SDM.
-**/
-#define MSR_IA32_DEBUG_INTERFACE                 0x00000C80
-
-/**
-  MSR information returned for MSR index #MSR_IA32_DEBUG_INTERFACE
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Enable (R/W) BIOS set 1 to enable Silicon debug features.
-    /// Default is 0. If CPUID.01H:ECX.[11] = 1.
-    ///
-    UINT32  Enable:1;
-    UINT32  Reserved1:29;
-    ///
-    /// [Bit 30] Lock (R/W): If 1, locks any further change to the MSR. The
-    /// lock bit is set automatically on the first SMI assertion even if not
-    /// explicitly set by BIOS. Default is 0. If CPUID.01H:ECX.[11] = 1.
-    ///
-    UINT32  Lock:1;
-    ///
-    /// [Bit 31] Debug Occurred (R/O): This "sticky bit" is set by hardware to
-    /// indicate the status of bit 0. Default is 0. If CPUID.01H:ECX.[11] = 1.
-    ///
-    UINT32  DebugOccurred:1;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_DEBUG_INTERFACE_REGISTER;
-
-
-/**
-  L3 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=1):ECX.[2] = 1 ).
-
-  @param  ECX  MSR_IA32_L3_QOS_CFG (0x00000C81)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_L3_QOS_CFG_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L3_QOS_CFG);
-  AsmWriteMsr64 (MSR_IA32_L3_QOS_CFG, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_L3_QOS_CFG is defined as IA32_L3_QOS_CFG in SDM.
-**/
-#define MSR_IA32_L3_QOS_CFG                      0x00000C81
-
-/**
-  MSR information returned for MSR index #MSR_IA32_L3_QOS_CFG
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Enable (R/W) Set 1 to enable L3 CAT masks and COS to operate
-    /// in Code and Data Prioritization (CDP) mode.
-    ///
-    UINT32  Enable:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_L3_QOS_CFG_REGISTER;
-
-/**
-  L2 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=2):ECX.[2] = 1 ).
-
-  @param  ECX  MSR_IA32_L2_QOS_CFG (0x00000C82)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_L2_QOS_CFG_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L2_QOS_CFG);
-  AsmWriteMsr64 (MSR_IA32_L2_QOS_CFG, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_L2_QOS_CFG is defined as IA32_L2_QOS_CFG in SDM.
-**/
-#define MSR_IA32_L2_QOS_CFG                      0x00000C82
-
-/**
-  MSR information returned for MSR index #MSR_IA32_L2_QOS_CFG
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] Enable (R/W) Set 1 to enable L2 CAT masks and COS to operate
-    /// in Code and Data Prioritization (CDP) mode.
-    ///
-    UINT32  Enable:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_L2_QOS_CFG_REGISTER;
-
-/**
-  Monitoring Event Select Register (R/W). If ( CPUID.(EAX=07H, ECX=0):EBX.[12]
-  = 1 ).
-
-  @param  ECX  MSR_IA32_QM_EVTSEL (0x00000C8D)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_QM_EVTSEL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_EVTSEL);
-  AsmWriteMsr64 (MSR_IA32_QM_EVTSEL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_QM_EVTSEL is defined as IA32_QM_EVTSEL in SDM.
-**/
-#define MSR_IA32_QM_EVTSEL                       0x00000C8D
-
-/**
-  MSR information returned for MSR index #MSR_IA32_QM_EVTSEL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 7:0] Event ID: ID of a supported monitoring event to report via
-    /// IA32_QM_CTR.
-    ///
-    UINT32  EventID:8;
-    UINT32  Reserved:24;
-    ///
-    /// [Bits 63:32] Resource Monitoring ID: ID for monitoring hardware to
-    /// report monitored data via IA32_QM_CTR. N = Ceil (Log:sub:`2` (
-    /// CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
-    ///
-    UINT32  ResourceMonitoringID:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_QM_EVTSEL_REGISTER;
-
-
-/**
-  Monitoring Counter Register (R/O). If ( CPUID.(EAX=07H, ECX=0):EBX.[12] = 1
-  ).
-
-  @param  ECX  MSR_IA32_QM_CTR (0x00000C8E)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_QM_CTR_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_QM_CTR_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_QM_CTR_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_CTR);
-  @endcode
-  @note MSR_IA32_QM_CTR is defined as IA32_QM_CTR in SDM.
-**/
-#define MSR_IA32_QM_CTR                          0x00000C8E
-
-/**
-  MSR information returned for MSR index #MSR_IA32_QM_CTR
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Resource Monitored Data.
-    ///
-    UINT32  ResourceMonitoredData:32;
-    ///
-    /// [Bits 61:32] Resource Monitored Data.
-    ///
-    UINT32  ResourceMonitoredDataHi:30;
-    ///
-    /// [Bit 62] Unavailable: If 1, indicates data for this RMID is not
-    /// available or not monitored for this resource or RMID.
-    ///
-    UINT32  Unavailable:1;
-    ///
-    /// [Bit 63] Error: If 1, indicates and unsupported RMID or event type was
-    /// written to IA32_PQR_QM_EVTSEL.
-    ///
-    UINT32  Error:1;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_QM_CTR_REGISTER;
-
-
-/**
-  Resource Association Register (R/W). If ( (CPUID.(EAX=07H, ECX=0):EBX[12]
-  =1) or (CPUID.(EAX=07H, ECX=0):EBX[15] =1 ) ).
-
-  @param  ECX  MSR_IA32_PQR_ASSOC (0x00000C8F)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PQR_ASSOC_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PQR_ASSOC);
-  AsmWriteMsr64 (MSR_IA32_PQR_ASSOC, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PQR_ASSOC is defined as IA32_PQR_ASSOC in SDM.
-**/
-#define MSR_IA32_PQR_ASSOC                       0x00000C8F
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PQR_ASSOC
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] Resource Monitoring ID (R/W): ID for monitoring hardware
-    /// to track internal operation, e.g. memory access. N = Ceil (Log:sub:`2`
-    /// ( CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
-    ///
-    UINT32  ResourceMonitoringID:32;
-    ///
-    /// [Bits 63:32] COS (R/W). The class of service (COS) to enforce (on
-    /// writes); returns the current COS when read. If ( CPUID.(EAX=07H,
-    /// ECX=0):EBX.[15] = 1 ).
-    ///
-    UINT32  COS:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PQR_ASSOC_REGISTER;
-
-
-/**
-  Supervisor State of MPX Configuration. (R/W). If (CPUID.(EAX=07H,
-  ECX=0H):EBX[14] = 1).
-
-  @param  ECX  MSR_IA32_BNDCFGS (0x00000D90)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_BNDCFGS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_BNDCFGS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_BNDCFGS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BNDCFGS);
-  AsmWriteMsr64 (MSR_IA32_BNDCFGS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_BNDCFGS is defined as IA32_BNDCFGS in SDM.
-**/
-#define MSR_IA32_BNDCFGS                         0x00000D90
-
-/**
-  MSR information returned for MSR index #MSR_IA32_BNDCFGS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] EN: Enable Intel MPX in supervisor mode.
-    ///
-    UINT32  EN:1;
-    ///
-    /// [Bit 1] BNDPRESERVE: Preserve the bounds registers for near branch
-    /// instructions in the absence of the BND prefix.
-    ///
-    UINT32  BNDPRESERVE:1;
-    UINT32  Reserved:10;
-    ///
-    /// [Bits 31:12] Base Address of Bound Directory.
-    ///
-    UINT32  Base:20;
-    ///
-    /// [Bits 63:32] Base Address of Bound Directory.
-    ///
-    UINT32  BaseHi:32;
-  } Bits;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_BNDCFGS_REGISTER;
-
-
-/**
-  Extended Supervisor State Mask (R/W). If( CPUID.(0DH, 1):EAX.[3] = 1.
-
-  @param  ECX  MSR_IA32_XSS (0x00000DA0)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_XSS_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_XSS_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_XSS_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_XSS);
-  AsmWriteMsr64 (MSR_IA32_XSS, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_XSS is defined as IA32_XSS in SDM.
-**/
-#define MSR_IA32_XSS                             0x00000DA0
-
-/**
-  MSR information returned for MSR index #MSR_IA32_XSS
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    UINT32  Reserved1:8;
-    ///
-    /// [Bit 8] Trace Packet Configuration State (R/W).
-    ///
-    UINT32  TracePacketConfigurationState:1;
-    UINT32  Reserved2:23;
-    UINT32  Reserved3:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_XSS_REGISTER;
-
-
-/**
-  Package Level Enable/disable HDC (R/W). If CPUID.06H:EAX.[13] = 1.
-
-  @param  ECX  MSR_IA32_PKG_HDC_CTL (0x00000DB0)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PKG_HDC_CTL_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PKG_HDC_CTL);
-  AsmWriteMsr64 (MSR_IA32_PKG_HDC_CTL, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PKG_HDC_CTL is defined as IA32_PKG_HDC_CTL in SDM.
-**/
-#define MSR_IA32_PKG_HDC_CTL                     0x00000DB0
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PKG_HDC_CTL
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] HDC_Pkg_Enable (R/W) Force HDC idling or wake up HDC-idled
-    /// logical processors in the package. See Section 14.5.2, "Package level
-    /// Enabling HDC". If CPUID.06H:EAX.[13] = 1.
-    ///
-    UINT32  HDC_Pkg_Enable:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PKG_HDC_CTL_REGISTER;
-
-
-/**
-  Enable/disable HWP (R/W). If CPUID.06H:EAX.[13] = 1.
-
-  @param  ECX  MSR_IA32_PM_CTL1 (0x00000DB1)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_PM_CTL1_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_PM_CTL1_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_PM_CTL1_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_CTL1);
-  AsmWriteMsr64 (MSR_IA32_PM_CTL1, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_PM_CTL1 is defined as IA32_PM_CTL1 in SDM.
-**/
-#define MSR_IA32_PM_CTL1                         0x00000DB1
-
-/**
-  MSR information returned for MSR index #MSR_IA32_PM_CTL1
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] HDC_Allow_Block (R/W) Allow/Block this logical processor for
-    /// package level HDC control. See Section 14.5.3.
-    /// If CPUID.06H:EAX.[13] = 1.
-    ///
-    UINT32  HDC_Allow_Block:1;
-    UINT32  Reserved1:31;
-    UINT32  Reserved2:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_PM_CTL1_REGISTER;
-
-
-/**
-  Per-Logical_Processor HDC Idle Residency (R/0). If CPUID.06H:EAX.[13] = 1.
-  Stall_Cycle_Cnt (R/W) Stalled cycles due to HDC forced idle on this logical
-  processor. See Section 14.5.4.1. If CPUID.06H:EAX.[13] = 1.
-
-  @param  ECX  MSR_IA32_THREAD_STALL (0x00000DB2)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_THREAD_STALL);
-  @endcode
-  @note MSR_IA32_THREAD_STALL is defined as IA32_THREAD_STALL in SDM.
-**/
-#define MSR_IA32_THREAD_STALL                    0x00000DB2
-
-
-/**
-  Extended Feature Enables. If ( CPUID.80000001H:EDX.[2 0]
-  CPUID.80000001H:EDX.[2 9]).
-
-  @param  ECX  MSR_IA32_EFER (0xC0000080)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_EFER_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_EFER_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_EFER_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_EFER);
-  AsmWriteMsr64 (MSR_IA32_EFER, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_EFER is defined as IA32_EFER in SDM.
-**/
-#define MSR_IA32_EFER                            0xC0000080
-
-/**
-  MSR information returned for MSR index #MSR_IA32_EFER
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bit 0] SYSCALL Enable: IA32_EFER.SCE (R/W) Enables SYSCALL/SYSRET
-    /// instructions in 64-bit mode.
-    ///
-    UINT32  SCE:1;
-    UINT32  Reserved1:7;
-    ///
-    /// [Bit 8] IA-32e Mode Enable: IA32_EFER.LME (R/W) Enables IA-32e mode
-    /// operation.
-    ///
-    UINT32  LME:1;
-    UINT32  Reserved2:1;
-    ///
-    /// [Bit 10] IA-32e Mode Active: IA32_EFER.LMA (R) Indicates IA-32e mode
-    /// is active when set.
-    ///
-    UINT32  LMA:1;
-    ///
-    /// [Bit 11] Execute Disable Bit Enable: IA32_EFER.NXE (R/W).
-    ///
-    UINT32  NXE:1;
-    UINT32  Reserved3:20;
-    UINT32  Reserved4:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_EFER_REGISTER;
-
-
-/**
-  System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_STAR (0xC0000081)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_STAR);
-  AsmWriteMsr64 (MSR_IA32_STAR, Msr);
-  @endcode
-  @note MSR_IA32_STAR is defined as IA32_STAR in SDM.
-**/
-#define MSR_IA32_STAR                            0xC0000081
-
-
-/**
-  IA-32e Mode System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_LSTAR (0xC0000082)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_LSTAR);
-  AsmWriteMsr64 (MSR_IA32_LSTAR, Msr);
-  @endcode
-  @note MSR_IA32_LSTAR is defined as IA32_LSTAR in SDM.
-**/
-#define MSR_IA32_LSTAR                           0xC0000082
-
-/**
-  IA-32e Mode System Call Target Address (R/W) Not used, as the SYSCALL
-  instruction is not recognized in compatibility mode. If
-  CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_CSTAR (0xC0000083)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_CSTAR);
-  AsmWriteMsr64 (MSR_IA32_CSTAR, Msr);
-  @endcode
-  @note MSR_IA32_CSTAR is defined as IA32_CSTAR in SDM.
-**/
-#define MSR_IA32_CSTAR                           0xC0000083
-
-/**
-  System Call Flag Mask (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_FMASK (0xC0000084)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_FMASK);
-  AsmWriteMsr64 (MSR_IA32_FMASK, Msr);
-  @endcode
-  @note MSR_IA32_FMASK is defined as IA32_FMASK in SDM.
-**/
-#define MSR_IA32_FMASK                           0xC0000084
-
-
-/**
-  Map of BASE Address of FS (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_FS_BASE (0xC0000100)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_FS_BASE);
-  AsmWriteMsr64 (MSR_IA32_FS_BASE, Msr);
-  @endcode
-  @note MSR_IA32_FS_BASE is defined as IA32_FS_BASE in SDM.
-**/
-#define MSR_IA32_FS_BASE                         0xC0000100
-
-
-/**
-  Map of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_GS_BASE (0xC0000101)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_GS_BASE);
-  AsmWriteMsr64 (MSR_IA32_GS_BASE, Msr);
-  @endcode
-  @note MSR_IA32_GS_BASE is defined as IA32_GS_BASE in SDM.
-**/
-#define MSR_IA32_GS_BASE                         0xC0000101
-
-
-/**
-  Swap Target of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
-
-  @param  ECX  MSR_IA32_KERNEL_GS_BASE (0xC0000102)
-  @param  EAX  Lower 32-bits of MSR value.
-  @param  EDX  Upper 32-bits of MSR value.
-
-  <b>Example usage</b>
-  @code
-  UINT64  Msr;
-
-  Msr = AsmReadMsr64 (MSR_IA32_KERNEL_GS_BASE);
-  AsmWriteMsr64 (MSR_IA32_KERNEL_GS_BASE, Msr);
-  @endcode
-  @note MSR_IA32_KERNEL_GS_BASE is defined as IA32_KERNEL_GS_BASE in SDM.
-**/
-#define MSR_IA32_KERNEL_GS_BASE                  0xC0000102
-
-
-/**
-  Auxiliary TSC (RW). If CPUID.80000001H: EDX[27] = 1.
-
-  @param  ECX  MSR_IA32_TSC_AUX (0xC0000103)
-  @param  EAX  Lower 32-bits of MSR value.
-               Described by the type MSR_IA32_TSC_AUX_REGISTER.
-  @param  EDX  Upper 32-bits of MSR value.
-               Described by the type MSR_IA32_TSC_AUX_REGISTER.
-
-  <b>Example usage</b>
-  @code
-  MSR_IA32_TSC_AUX_REGISTER  Msr;
-
-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_TSC_AUX);
-  AsmWriteMsr64 (MSR_IA32_TSC_AUX, Msr.Uint64);
-  @endcode
-  @note MSR_IA32_TSC_AUX is defined as IA32_TSC_AUX in SDM.
-**/
-#define MSR_IA32_TSC_AUX                         0xC0000103
-
-/**
-  MSR information returned for MSR index #MSR_IA32_TSC_AUX
-**/
-typedef union {
-  ///
-  /// Individual bit fields
-  ///
-  struct {
-    ///
-    /// [Bits 31:0] AUX: Auxiliary signature of TSC.
-    ///
-    UINT32  AUX:32;
-    UINT32  Reserved:32;
-  } Bits;
-  ///
-  /// All bit fields as a 32-bit value
-  ///
-  UINT32  Uint32;
-  ///
-  /// All bit fields as a 64-bit value
-  ///
-  UINT64  Uint64;
-} MSR_IA32_TSC_AUX_REGISTER;
+#include <Register/Intel/ArchitecturalMsr.h>
 
 #endif
diff --git a/UefiCpuPkg/Include/Register/Cpuid.h b/UefiCpuPkg/Include/Register/Cpuid.h
index ac7b8f927f..fda8b2342e 100644
--- a/UefiCpuPkg/Include/Register/Cpuid.h
+++ b/UefiCpuPkg/Include/Register/Cpuid.h
@@ -3,11 +3,6 @@
 
   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-  @par Specification Reference:
-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 2A,
-  November 2018, CPUID instruction.
-
 **/
 
 #ifndef __CPUID_H__
diff --git a/UefiCpuPkg/Include/Register/LocalApic.h b/UefiCpuPkg/Include/Register/LocalApic.h
index 369ba96af8..1cc2b312db 100644
--- a/UefiCpuPkg/Include/Register/LocalApic.h
+++ b/UefiCpuPkg/Include/Register/LocalApic.h
@@ -1,183 +1,14 @@
 /** @file
-  IA32 Local APIC Definitions.
+  Wrapper header file to include <Register/Intel/LocalApic.h> in MdePkg.
 
-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
-
 **/
 
 #ifndef __LOCAL_APIC_H__
 #define __LOCAL_APIC_H__
 
-//
-// Definition for Local APIC registers and related values
-//
-#define XAPIC_ID_OFFSET                         0x20
-#define XAPIC_VERSION_OFFSET                    0x30
-#define XAPIC_EOI_OFFSET                        0x0b0
-#define XAPIC_ICR_DFR_OFFSET                    0x0e0
-#define XAPIC_SPURIOUS_VECTOR_OFFSET            0x0f0
-#define XAPIC_ICR_LOW_OFFSET                    0x300
-#define XAPIC_ICR_HIGH_OFFSET                   0x310
-#define XAPIC_LVT_TIMER_OFFSET                  0x320
-#define XAPIC_LVT_LINT0_OFFSET                  0x350
-#define XAPIC_LVT_LINT1_OFFSET                  0x360
-#define XAPIC_TIMER_INIT_COUNT_OFFSET           0x380
-#define XAPIC_TIMER_CURRENT_COUNT_OFFSET        0x390
-#define XAPIC_TIMER_DIVIDE_CONFIGURATION_OFFSET 0x3E0
-
-#define X2APIC_MSR_BASE_ADDRESS                 0x800
-#define X2APIC_MSR_ICR_ADDRESS                  0x830
-
-#define LOCAL_APIC_DELIVERY_MODE_FIXED           0
-#define LOCAL_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1
-#define LOCAL_APIC_DELIVERY_MODE_SMI             2
-#define LOCAL_APIC_DELIVERY_MODE_NMI             4
-#define LOCAL_APIC_DELIVERY_MODE_INIT            5
-#define LOCAL_APIC_DELIVERY_MODE_STARTUP         6
-#define LOCAL_APIC_DELIVERY_MODE_EXTINT          7
-
-#define LOCAL_APIC_DESTINATION_SHORTHAND_NO_SHORTHAND       0
-#define LOCAL_APIC_DESTINATION_SHORTHAND_SELF               1
-#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_INCLUDING_SELF 2
-#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_EXCLUDING_SELF 3
-
-//
-// Local APIC Version Register.
-//
-typedef union {
-  struct {
-    UINT32  Version:8;                  ///< The version numbers of the local APIC.
-    UINT32  Reserved0:8;                ///< Reserved.
-    UINT32  MaxLvtEntry:8;              ///< Number of LVT entries minus 1.
-    UINT32  EoiBroadcastSuppression:1;  ///< 1 if EOI-broadcast suppression supported.
-    UINT32  Reserved1:7;                ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_VERSION;
-
-//
-// Low half of Interrupt Command Register (ICR).
-//
-typedef union {
-  struct {
-    UINT32  Vector:8;                ///< The vector number of the interrupt being sent.
-    UINT32  DeliveryMode:3;          ///< Specifies the type of IPI to be sent.
-    UINT32  DestinationMode:1;       ///< 0: physical destination mode, 1: logical destination mode.
-    UINT32  DeliveryStatus:1;        ///< Indicates the IPI delivery status. This field is reserved in x2APIC mode.
-    UINT32  Reserved0:1;             ///< Reserved.
-    UINT32  Level:1;                 ///< 0 for the INIT level de-assert delivery mode. Otherwise 1.
-    UINT32  TriggerMode:1;           ///< 0: edge, 1: level when using the INIT level de-assert delivery mode.
-    UINT32  Reserved1:2;             ///< Reserved.
-    UINT32  DestinationShorthand:2;  ///< A shorthand notation to specify the destination of the interrupt.
-    UINT32  Reserved2:12;            ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_ICR_LOW;
-
-//
-// High half of Interrupt Command Register (ICR)
-//
-typedef union {
-  struct {
-    UINT32  Reserved0:24;   ///< Reserved.
-    UINT32  Destination:8;  ///< Specifies the target processor or processors in xAPIC mode.
-  } Bits;
-  UINT32    Uint32;         ///< Destination field expanded to 32-bit in x2APIC mode.
-} LOCAL_APIC_ICR_HIGH;
-
-//
-// Spurious-Interrupt Vector Register (SVR)
-//
-typedef union {
-  struct {
-    UINT32  SpuriousVector:8;           ///< Spurious Vector.
-    UINT32  SoftwareEnable:1;           ///< APIC Software Enable/Disable.
-    UINT32  FocusProcessorChecking:1;   ///< Focus Processor Checking.
-    UINT32  Reserved0:2;                ///< Reserved.
-    UINT32  EoiBroadcastSuppression:1;  ///< EOI-Broadcast Suppression.
-    UINT32  Reserved1:19;               ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_SVR;
-
-//
-// Divide Configuration Register (DCR)
-//
-typedef union {
-  struct {
-    UINT32  DivideValue1:2;  ///< Low 2 bits of the divide value.
-    UINT32  Reserved0:1;     ///< Always 0.
-    UINT32  DivideValue2:1;  ///< Highest 1 bit of the divide value.
-    UINT32  Reserved1:28;    ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_DCR;
-
-//
-// LVT Timer Register
-//
-typedef union {
-  struct {
-    UINT32  Vector:8;          ///< The vector number of the interrupt being sent.
-    UINT32  Reserved0:4;       ///< Reserved.
-    UINT32  DeliveryStatus:1;  ///< 0: Idle, 1: send pending.
-    UINT32  Reserved1:3;       ///< Reserved.
-    UINT32  Mask:1;            ///< 0: Not masked, 1: Masked.
-    UINT32  TimerMode:1;       ///< 0: One-shot, 1: Periodic.
-    UINT32  Reserved2:14;      ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_LVT_TIMER;
-
-//
-// LVT LINT0/LINT1 Register
-//
-typedef union {
-  struct {
-    UINT32  Vector:8;            ///< The vector number of the interrupt being sent.
-    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
-    UINT32  Reserved0:1;         ///< Reserved.
-    UINT32  DeliveryStatus:1;    ///< 0: Idle, 1: send pending.
-    UINT32  InputPinPolarity:1;  ///< Interrupt Input Pin Polarity.
-    UINT32  RemoteIrr:1;         ///< RO. Set when the local APIC accepts the interrupt and reset when an EOI is received.
-    UINT32  TriggerMode:1;       ///< 0:edge, 1:level.
-    UINT32  Mask:1;              ///< 0: Not masked, 1: Masked.
-    UINT32  Reserved1:15;        ///< Reserved.
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_LVT_LINT;
-
-//
-// MSI Address Register
-//
-typedef union {
-  struct {
-    UINT32  Reserved0:2;         ///< Reserved
-    UINT32  DestinationMode:1;   ///< Specifies the Destination Mode.
-    UINT32  RedirectionHint:1;   ///< Specifies the Redirection Hint.
-    UINT32  Reserved1:8;         ///< Reserved.
-    UINT32  DestinationId:8;     ///< Specifies the Destination ID.
-    UINT32  BaseAddress:12;      ///< Must be 0FEEH
-  } Bits;
-  UINT32    Uint32;
-} LOCAL_APIC_MSI_ADDRESS;
-
-//
-// MSI Address Register
-//
-typedef union {
-  struct {
-    UINT32  Vector:8;            ///< Interrupt vector in range 010h..0FEH
-    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
-    UINT32  Reserved0:3;         ///< Reserved.
-    UINT32  Level:1;             ///< 0:Deassert, 1:Assert.  Ignored for Edge triggered interrupts.
-    UINT32  TriggerMode:1;       ///< 0:Edge,     1:Level.
-    UINT32  Reserved1:16;        ///< Reserved.
-    UINT32  Reserved2:32;        ///< Reserved.
-  } Bits;
-  UINT64    Uint64;
-} LOCAL_APIC_MSI_DATA;
+#include <Register/Intel/LocalApic.h>
 
 #endif
 
diff --git a/UefiCpuPkg/Include/Register/Microcode.h b/UefiCpuPkg/Include/Register/Microcode.h
index e85c0cc640..df0670bd46 100644
--- a/UefiCpuPkg/Include/Register/Microcode.h
+++ b/UefiCpuPkg/Include/Register/Microcode.h
@@ -1,194 +1,13 @@
 /** @file
-  Microcode Definitions.
+  Wrapper header file to include <Register/Intel/Microcode.h> in MdePkg.
 
-  Microcode Definitions based on contents of the
-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual
-    Volume 3A, Section 9.11  Microcode Definitions
-
-  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-  @par Specification Reference:
-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 3A,
-  June 2016, Chapter 9 Processor Management and Initialization, Section 9-11.
-
 **/
 
 #ifndef __MICROCODE_H__
 #define __MICROCODE_H__
 
-///
-/// CPU Microcode Date in BCD format
-///
-typedef union {
-  struct {
-    UINT32   Year:16;
-    UINT32   Day:8;
-    UINT32   Month:8;
-  } Bits;
-  UINT32     Uint32;
-} CPU_MICROCODE_DATE;
-
-///
-/// CPU Microcode Processor Signature format
-///
-typedef union {
-  struct {
-    UINT32   Stepping:4;
-    UINT32   Model:4;
-    UINT32   Family:4;
-    UINT32   Type:2;
-    UINT32   Reserved1:2;
-    UINT32   ExtendedModel:4;
-    UINT32   ExtendedFamily:8;
-    UINT32   Reserved2:4;
-  } Bits;
-  UINT32     Uint32;
-} CPU_MICROCODE_PROCESSOR_SIGNATURE;
-
-#pragma pack (1)
-
-///
-/// Microcode Update Format definition
-///
-typedef struct {
-  ///
-  /// Version number of the update header
-  ///
-  UINT32                            HeaderVersion;
-  ///
-  /// Unique version number for the update, the basis for the update
-  /// signature provided by the processor to indicate the current update
-  /// functioning within the processor. Used by the BIOS to authenticate
-  /// the update and verify that the processor loads successfully. The
-  /// value in this field cannot be used for processor stepping identification
-  /// alone. This is a signed 32-bit number.
-  ///
-  UINT32                            UpdateRevision;
-  ///
-  /// Date of the update creation in binary format: mmddyyyy (e.g.
-  /// 07/18/98 is 07181998H).
-  ///
-  CPU_MICROCODE_DATE                Date;
-  ///
-  /// Extended family, extended model, type, family, model, and stepping
-  /// of processor that requires this particular update revision (e.g.,
-  /// 00000650H). Each microcode update is designed specifically for a
-  /// given extended family, extended model, type, family, model, and
-  /// stepping of the processor.
-  /// The BIOS uses the processor signature field in conjunction with the
-  /// CPUID instruction to determine whether or not an update is
-  /// appropriate to load on a processor. The information encoded within
-  /// this field exactly corresponds to the bit representations returned by
-  /// the CPUID instruction.
-  ///
-  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
-  ///
-  /// Checksum of Update Data and Header. Used to verify the integrity of
-  /// the update header and data. Checksum is correct when the
-  /// summation of all the DWORDs (including the extended Processor
-  /// Signature Table) that comprise the microcode update result in
-  /// 00000000H.
-  ///
-  UINT32                            Checksum;
-  ///
-  /// Version number of the loader program needed to correctly load this
-  /// update. The initial version is 00000001H
-  ///
-  UINT32                            LoaderRevision;
-  ///
-  /// Platform type information is encoded in the lower 8 bits of this 4-
-  /// byte field. Each bit represents a particular platform type for a given
-  /// CPUID. The BIOS uses the processor flags field in conjunction with
-  /// the platform Id bits in MSR (17H) to determine whether or not an
-  /// update is appropriate to load on a processor. Multiple bits may be set
-  /// representing support for multiple platform IDs.
-  ///
-  UINT32                            ProcessorFlags;
-  ///
-  /// Specifies the size of the encrypted data in bytes, and must be a
-  /// multiple of DWORDs. If this value is 00000000H, then the microcode
-  /// update encrypted data is 2000 bytes (or 500 DWORDs).
-  ///
-  UINT32                            DataSize;
-  ///
-  /// Specifies the total size of the microcode update in bytes. It is the
-  /// summation of the header size, the encrypted data size and the size of
-  /// the optional extended signature table. This value is always a multiple
-  /// of 1024.
-  ///
-  UINT32                            TotalSize;
-  ///
-  /// Reserved fields for future expansion.
-  ///
-  UINT8                             Reserved[12];
-} CPU_MICROCODE_HEADER;
-
-///
-/// Extended Signature Table Header Field Definitions
-///
-typedef struct {
-  ///
-  /// Specifies the number of extended signature structures (Processor
-  /// Signature[n], processor flags[n] and checksum[n]) that exist in this
-  /// microcode update
-  ///
-  UINT32                            ExtendedSignatureCount;
-  ///
-  /// Checksum of update extended processor signature table. Used to
-  /// verify the integrity of the extended processor signature table.
-  /// Checksum is correct when the summation of the DWORDs that
-  /// comprise the extended processor signature table results in
-  /// 00000000H.
-  ///
-  UINT32                            ExtendedChecksum;
-  ///
-  /// Reserved fields.
-  ///
-  UINT8                             Reserved[12];
-} CPU_MICROCODE_EXTENDED_TABLE_HEADER;
-
-///
-/// Extended Signature Table Field Definitions
-///
-typedef struct {
-  ///
-  /// Extended family, extended model, type, family, model, and stepping
-  /// of processor that requires this particular update revision (e.g.,
-  /// 00000650H). Each microcode update is designed specifically for a
-  /// given extended family, extended model, type, family, model, and
-  /// stepping of the processor.
-  /// The BIOS uses the processor signature field in conjunction with the
-  /// CPUID instruction to determine whether or not an update is
-  /// appropriate to load on a processor. The information encoded within
-  /// this field exactly corresponds to the bit representations returned by
-  /// the CPUID instruction.
-  ///
-  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
-  ///
-  /// Platform type information is encoded in the lower 8 bits of this 4-
-  /// byte field. Each bit represents a particular platform type for a given
-  /// CPUID. The BIOS uses the processor flags field in conjunction with
-  /// the platform Id bits in MSR (17H) to determine whether or not an
-  /// update is appropriate to load on a processor. Multiple bits may be set
-  /// representing support for multiple platform IDs.
-  ///
-  UINT32                             ProcessorFlag;
-  ///
-  /// Used by utility software to decompose a microcode update into
-  /// multiple microcode updates where each of the new updates is
-  /// constructed without the optional Extended Processor Signature
-  /// Table.
-  /// To calculate the Checksum, substitute the Primary Processor
-  /// Signature entry and the Processor Flags entry with the
-  /// corresponding Extended Patch entry. Delete the Extended Processor
-  /// Signature Table entries. The Checksum is correct when the
-  /// summation of all DWORDs that comprise the created Extended
-  /// Processor Patch results in 00000000H.
-  ///
-  UINT32                             Checksum;
-} CPU_MICROCODE_EXTENDED_TABLE;
-
-#pragma pack ()
+#include <Register/Intel/Microcode.h>
 
 #endif
diff --git a/UefiCpuPkg/Include/Register/Msr.h b/UefiCpuPkg/Include/Register/Msr.h
index c9be042983..38e3cd85ab 100644
--- a/UefiCpuPkg/Include/Register/Msr.h
+++ b/UefiCpuPkg/Include/Register/Msr.h
@@ -1,44 +1,14 @@
 /** @file
-  MSR Definitions.
+  Wrapper header file to include <Register/Intel/Msr.h> in MdePkg.
 
-  Provides defines for Machine Specific Registers(MSR) indexes. Data structures
-  are provided for MSRs that contain one or more bit fields.  If the MSR value
-  returned is a single 32-bit or 64-bit value, then a data structure is not
-  provided for that MSR.
-
-  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
-  @par Specification Reference:
-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
-  May 2018, Volume 4: Model-Specific-Registers (MSR)
-
 **/
 
 #ifndef __MSR_H__
 #define __MSR_H__
 
-#include <Register/ArchitecturalMsr.h>
-#include <Register/Msr/Core2Msr.h>
-#include <Register/Msr/AtomMsr.h>
-#include <Register/Msr/SilvermontMsr.h>
-#include <Register/Msr/GoldmontMsr.h>
-#include <Register/Msr/GoldmontPlusMsr.h>
-#include <Register/Msr/NehalemMsr.h>
-#include <Register/Msr/Xeon5600Msr.h>
-#include <Register/Msr/XeonE7Msr.h>
-#include <Register/Msr/SandyBridgeMsr.h>
-#include <Register/Msr/IvyBridgeMsr.h>
-#include <Register/Msr/HaswellMsr.h>
-#include <Register/Msr/HaswellEMsr.h>
-#include <Register/Msr/BroadwellMsr.h>
-#include <Register/Msr/XeonDMsr.h>
-#include <Register/Msr/SkylakeMsr.h>
-#include <Register/Msr/XeonPhiMsr.h>
-#include <Register/Msr/Pentium4Msr.h>
-#include <Register/Msr/CoreMsr.h>
-#include <Register/Msr/PentiumMMsr.h>
-#include <Register/Msr/P6Msr.h>
-#include <Register/Msr/PentiumMsr.h>
+#include <Register/Intel/Msr.h>
 
 #endif
diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
index 6473e51a55..1ab69f09e9 100644
--- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
+++ b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
@@ -1,184 +1,13 @@
 /** @file
-SMRAM Save State Map Definitions.
-
-SMRAM Save State Map definitions based on contents of the
-Intel(R) 64 and IA-32 Architectures Software Developer's Manual
-  Volume 3C, Section 34.4 SMRAM
-  Volume 3C, Section 34.5 SMI Handler Execution Environment
-  Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
-
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
+  Wrapper header file to include <Register/Intel/SmramSaveStateMap.h> in MdePkg.
 
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
 **/
 
 #ifndef __SMRAM_SAVE_STATE_MAP_H__
 #define __SMRAM_SAVE_STATE_MAP_H__
 
-///
-/// Default SMBASE address
-///
-#define SMM_DEFAULT_SMBASE           0x30000
-
-///
-/// Offset of SMM handler from SMBASE
-///
-#define SMM_HANDLER_OFFSET           0x8000
-
-///
-/// Offset of SMRAM Save State Map from SMBASE
-///
-#define SMRAM_SAVE_STATE_MAP_OFFSET  0xfc00
-
-#pragma pack (1)
-
-///
-/// 32-bit SMRAM Save State Map
-///
-typedef struct {
-  UINT8   Reserved[0x200];  // 7c00h
-                            // Padded an extra 0x200 bytes so 32-bit and 64-bit
-                            // SMRAM Save State Maps are the same size
-  UINT8   Reserved1[0xf8];  // 7e00h
-  UINT32  SMBASE;           // 7ef8h
-  UINT32  SMMRevId;         // 7efch
-  UINT16  IORestart;        // 7f00h
-  UINT16  AutoHALTRestart;  // 7f02h
-  UINT8   Reserved2[0x9C];  // 7f08h
-  UINT32  IOMemAddr;        // 7fa0h
-  UINT32  IOMisc;           // 7fa4h
-  UINT32  _ES;              // 7fa8h
-  UINT32  _CS;              // 7fach
-  UINT32  _SS;              // 7fb0h
-  UINT32  _DS;              // 7fb4h
-  UINT32  _FS;              // 7fb8h
-  UINT32  _GS;              // 7fbch
-  UINT32  Reserved3;        // 7fc0h
-  UINT32  _TR;              // 7fc4h
-  UINT32  _DR7;             // 7fc8h
-  UINT32  _DR6;             // 7fcch
-  UINT32  _EAX;             // 7fd0h
-  UINT32  _ECX;             // 7fd4h
-  UINT32  _EDX;             // 7fd8h
-  UINT32  _EBX;             // 7fdch
-  UINT32  _ESP;             // 7fe0h
-  UINT32  _EBP;             // 7fe4h
-  UINT32  _ESI;             // 7fe8h
-  UINT32  _EDI;             // 7fech
-  UINT32  _EIP;             // 7ff0h
-  UINT32  _EFLAGS;          // 7ff4h
-  UINT32  _CR3;             // 7ff8h
-  UINT32  _CR0;             // 7ffch
-} SMRAM_SAVE_STATE_MAP32;
-
-///
-/// 64-bit SMRAM Save State Map
-///
-typedef struct {
-  UINT8   Reserved1[0x1d0];  // 7c00h
-  UINT32  GdtBaseHiDword;    // 7dd0h
-  UINT32  LdtBaseHiDword;    // 7dd4h
-  UINT32  IdtBaseHiDword;    // 7dd8h
-  UINT8   Reserved2[0xc];    // 7ddch
-  UINT64  IO_EIP;            // 7de8h
-  UINT8   Reserved3[0x50];   // 7df0h
-  UINT32  _CR4;              // 7e40h
-  UINT8   Reserved4[0x48];   // 7e44h
-  UINT32  GdtBaseLoDword;    // 7e8ch
-  UINT32  Reserved5;         // 7e90h
-  UINT32  IdtBaseLoDword;    // 7e94h
-  UINT32  Reserved6;         // 7e98h
-  UINT32  LdtBaseLoDword;    // 7e9ch
-  UINT8   Reserved7[0x38];   // 7ea0h
-  UINT64  EptVmxControl;     // 7ed8h
-  UINT32  EnEptVmxControl;   // 7ee0h
-  UINT8   Reserved8[0x14];   // 7ee4h
-  UINT32  SMBASE;            // 7ef8h
-  UINT32  SMMRevId;          // 7efch
-  UINT16  IORestart;         // 7f00h
-  UINT16  AutoHALTRestart;   // 7f02h
-  UINT8   Reserved9[0x18];   // 7f04h
-  UINT64  _R15;              // 7f1ch
-  UINT64  _R14;
-  UINT64  _R13;
-  UINT64  _R12;
-  UINT64  _R11;
-  UINT64  _R10;
-  UINT64  _R9;
-  UINT64  _R8;
-  UINT64  _RAX;              // 7f5ch
-  UINT64  _RCX;
-  UINT64  _RDX;
-  UINT64  _RBX;
-  UINT64  _RSP;
-  UINT64  _RBP;
-  UINT64  _RSI;
-  UINT64  _RDI;
-  UINT64  IOMemAddr;         // 7f9ch
-  UINT32  IOMisc;            // 7fa4h
-  UINT32  _ES;               // 7fa8h
-  UINT32  _CS;
-  UINT32  _SS;
-  UINT32  _DS;
-  UINT32  _FS;
-  UINT32  _GS;
-  UINT32  _LDTR;             // 7fc0h
-  UINT32  _TR;
-  UINT64  _DR7;              // 7fc8h
-  UINT64  _DR6;
-  UINT64  _RIP;              // 7fd8h
-  UINT64  IA32_EFER;         // 7fe0h
-  UINT64  _RFLAGS;           // 7fe8h
-  UINT64  _CR3;              // 7ff0h
-  UINT64  _CR0;              // 7ff8h
-} SMRAM_SAVE_STATE_MAP64;
-
-///
-/// Union of 32-bit and 64-bit SMRAM Save State Maps
-///
-typedef union  {
-  SMRAM_SAVE_STATE_MAP32  x86;
-  SMRAM_SAVE_STATE_MAP64  x64;
-} SMRAM_SAVE_STATE_MAP;
-
-///
-/// Minimum SMM Revision ID that supports IOMisc field in SMRAM Save State Map
-///
-#define SMRAM_SAVE_STATE_MIN_REV_ID_IOMISC  0x30004
-
-///
-/// SMRAM Save State Map IOMisc I/O Length Values
-///
-#define  SMM_IO_LENGTH_BYTE             0x01
-#define  SMM_IO_LENGTH_WORD             0x02
-#define  SMM_IO_LENGTH_DWORD            0x04
-
-///
-/// SMRAM Save State Map IOMisc I/O Instruction Type Values
-///
-#define  SMM_IO_TYPE_IN_IMMEDIATE       0x9
-#define  SMM_IO_TYPE_IN_DX              0x1
-#define  SMM_IO_TYPE_OUT_IMMEDIATE      0x8
-#define  SMM_IO_TYPE_OUT_DX             0x0
-#define  SMM_IO_TYPE_INS                0x3
-#define  SMM_IO_TYPE_OUTS               0x2
-#define  SMM_IO_TYPE_REP_INS            0x7
-#define  SMM_IO_TYPE_REP_OUTS           0x6
-
-///
-/// SMRAM Save State Map IOMisc structure
-///
-typedef union {
-  struct {
-    UINT32  SmiFlag:1;
-    UINT32  Length:3;
-    UINT32  Type:4;
-    UINT32  Reserved1:8;
-    UINT32  Port:16;
-  } Bits;
-  UINT32  Uint32;
-} SMRAM_SAVE_STATE_IOMISC;
-
-#pragma pack ()
+#include <Register/Intel/SmramSaveStateMap.h>
 
 #endif
diff --git a/UefiCpuPkg/Include/Register/StmApi.h b/UefiCpuPkg/Include/Register/StmApi.h
index 0ecc0b86d5..4526155405 100644
--- a/UefiCpuPkg/Include/Register/StmApi.h
+++ b/UefiCpuPkg/Include/Register/StmApi.h
@@ -1,948 +1,13 @@
 /** @file
-  STM API definition
+  Wrapper header file to include <Register/Intel/StmApi.h> in MdePkg.
 
-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-  @par Specification Reference:
-  SMI Transfer Monitor (STM) User Guide Revision 1.00
-
 **/
 
 #ifndef _STM_API_H_
 #define _STM_API_H_
 
-#include <Register/StmStatusCode.h>
-#include <Register/StmResourceDescriptor.h>
-#include <Register/ArchitecturalMsr.h>
-
-#pragma pack (1)
-
-/**
-  STM Header Structures
-**/
-
-typedef struct {
-  UINT32  Intel64ModeSupported :1;  ///> bitfield
-  UINT32  EptSupported         :1;  ///> bitfield
-  UINT32  Reserved             :30; ///> must be 0
-} STM_FEAT;
-
-#define STM_SPEC_VERSION_MAJOR  1
-#define STM_SPEC_VERSION_MINOR  0
-
-typedef struct {
-  UINT8     StmSpecVerMajor;
-  UINT8     StmSpecVerMinor;
-  ///
-  /// Must be zero
-  ///
-  UINT16    Reserved;
-  UINT32    StaticImageSize;
-  UINT32    PerProcDynamicMemorySize;
-  UINT32    AdditionalDynamicMemorySize;
-  STM_FEAT  StmFeatures;
-  UINT32    NumberOfRevIDs;
-  UINT32    StmSmmRevID[1];
-  ///
-  /// The total STM_HEADER should be 4K.
-  ///
-} SOFTWARE_STM_HEADER;
-
-typedef struct {
-  MSEG_HEADER          HwStmHdr;
-  SOFTWARE_STM_HEADER  SwStmHdr;
-} STM_HEADER;
-
-
-/**
-  VMCALL API Numbers
-  API number convention: BIOS facing VMCALL interfaces have bit 16 clear
-**/
-
-/**
-  StmMapAddressRange enables a SMM guest to create a non-1:1 virtual to
-  physical mapping of an address range into the SMM guest's virtual
-  memory space.
-
-  @param  EAX  #STM_API_MAP_ADDRESS_RANGE (0x00000001)
-  @param  EBX  Low 32 bits of physical address of caller allocated
-               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure.
-  @param  ECX  High 32 bits of physical address of caller allocated
-               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure. If Intel64Mode is
-               clear (0), ECX must be 0.
-
-  @note  All fields of STM_MAP_ADDRESS_RANGE_DESCRIPTOR are inputs only. They
-         are not modified by StmMapAddressRange.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS.
-                The memory range was mapped as requested.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
-                The requested mapping contains a protected resource.
-  @retval  EAX  #ERROR_STM_CACHE_TYPE_NOT_SUPPORTED
-                The requested cache type could not be satisfied.
-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
-                Page count must not be zero.
-  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
-                STM supports EPT and has not implemented StmMapAddressRange().
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_MAP_ADDRESS_RANGE                  0x00000001
-
-/**
-  STM Map Address Range Descriptor for #STM_API_MAP_ADDRESS_RANGE VMCALL
-**/
-typedef struct {
-  UINT64  PhysicalAddress;
-  UINT64  VirtualAddress;
-  UINT32  PageCount;
-  UINT32  PatCacheType;
-} STM_MAP_ADDRESS_RANGE_DESCRIPTOR;
-
-/**
-  Define values for PatCacheType field of #STM_MAP_ADDRESS_RANGE_DESCRIPTOR
-  @{
-**/
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_ST_UC        0x00
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WC           0x01
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WT           0x04
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WP           0x05
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WB           0x06
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_UC           0x07
-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_FOLLOW_MTRR  0xFFFFFFFF
-/// @}
-
-/**
-  StmUnmapAddressRange enables a SMM guest to remove mappings from its page
-  table.
-
-  If TXT_PROCESSOR_SMM_DESCRIPTOR.EptEnabled bit is set by the STM, BIOS can
-  control its own page tables. In this case, the STM implementation may
-  optionally return ERROR_STM_FUNCTION_NOT_SUPPORTED.
-
-  @param  EAX  #STM_API_UNMAP_ADDRESS_RANGE (0x00000002)
-  @param  EBX  Low 32 bits of virtual address of caller allocated
-               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure.
-  @param  ECX  High 32 bits of virtual address of caller allocated
-               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure. If Intel64Mode is
-               clear (0), ECX must be zero.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The memory range was unmapped
-                as requested.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
-                STM supports EPT and has not implemented StmUnmapAddressRange().
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_UNMAP_ADDRESS_RANGE                0x00000002
-
-/**
-  STM Unmap Address Range Descriptor for #STM_API_UNMAP_ADDRESS_RANGE VMCALL
-**/
-typedef struct {
-  UINT64  VirtualAddress;
-  UINT32  Length;
-} STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR;
-
-
-/**
-  Since the normal OS environment runs with a different set of page tables than
-  the SMM guest, virtual mappings will certainly be different. In order to do a
-  guest virtual to host physical translation of an address from the normal OS
-  code (EIP for example), it is necessary to walk the page tables governing the
-  OS page mappings. Since the SMM guest has no direct access to the page tables,
-  it must ask the STM to do this page table walk. This is supported via the
-  StmAddressLookup VMCALL. All OS page table formats need to be supported,
-  (e.g. PAE, PSE, Intel64, EPT, etc.)
-
-  StmAddressLookup takes a CR3 value and a virtual address from the interrupted
-  code as input and returns the corresponding physical address. It also
-  optionally maps the physical address into the SMM guest's virtual address
-  space. This new mapping persists ONLY for the duration of the SMI and if
-  needed in subsequent SMIs it must be remapped. PAT cache types follow the
-  interrupted environment's page table.
-
-  If EPT is enabled, OS CR3 only provides guest physical address information,
-  but the SMM guest might also need to know the host physical address. Since
-  SMM does not have direct access rights to EPT (it is protected by the STM),
-  SMM can input InterruptedEptp to let STM help to walk through it, and output
-  the host physical address.
-
-  @param  EAX  #STM_API_ADDRESS_LOOKUP (0x00000003)
-  @param  EBX  Low 32 bits of virtual address of caller allocated
-               STM_ADDRESS_LOOKUP_DESCRIPTOR structure.
-  @param  ECX  High 32 bits of virtual address of caller allocated
-               STM_ADDRESS_LOOKUP_DESCRIPTOR structure. If Intel64Mode is
-               clear (0), ECX must be zero.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS.  PhysicalAddress contains the
-                host physical address determined by walking the interrupted SMM
-                guest's page tables.  SmmGuestVirtualAddress contains the SMM
-                guest's virtual mapping of the requested address.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
-                The requested page was a protected page.
-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
-                The requested virtual address did not exist in the page given
-                page table.
-  @retval  EAX  #ERROR_STM_BAD_CR3
-                The CR3 input was invalid. CR3 values must be from one of the
-                interrupted guest, or from the interrupted guest of another
-                processor.
-  @retval  EAX  #ERROR_STM_PHYSICAL_OVER_4G
-                The resulting physical address is greater than 4G and no virtual
-                address was supplied. The STM could not determine what address
-                within the SMM guest's virtual address space to do the mapping.
-                STM_ADDRESS_LOOKUP_DESCRIPTOR field PhysicalAddress contains the
-                physical address determined by walking the interrupted
-                environment's page tables.
-  @retval  EAX  #ERROR_STM_VIRTUAL_SPACE_TOO_SMALL
-                A specific virtual mapping was requested, but
-                SmmGuestVirtualAddress + Length exceeds 4G and the SMI handler
-                is running in 32 bit mode.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_ADDRESS_LOOKUP                     0x00000003
-
-/**
-  STM Lookup Address Range Descriptor for #STM_API_ADDRESS_LOOKUP VMCALL
-**/
-typedef struct {
-  UINT64  InterruptedGuestVirtualAddress;
-  UINT32  Length;
-  UINT64  InterruptedCr3;
-  UINT64  InterruptedEptp;
-  UINT32  MapToSmmGuest:2;
-  UINT32  InterruptedCr4Pae:1;
-  UINT32  InterruptedCr4Pse:1;
-  UINT32  InterruptedIa32eMode:1;
-  UINT32  Reserved1:27;
-  UINT32  Reserved2;
-  UINT64  PhysicalAddress;
-  UINT64  SmmGuestVirtualAddress;
-} STM_ADDRESS_LOOKUP_DESCRIPTOR;
-
-/**
-  Define values for the MapToSmmGuest field of #STM_ADDRESS_LOOKUP_DESCRIPTOR
-  @{
-**/
-#define STM_ADDRESS_LOOKUP_DESCRIPTOR_DO_NOT_MAP                 0
-#define STM_ADDRESS_LOOKUP_DESCRIPTOR_ONE_TO_ONE                 1
-#define STM_ADDRESS_LOOKUP_DESCRIPTOR_VIRTUAL_ADDRESS_SPECIFIED  3
-/// @}
-
-
-/**
-  When returning from a protection exception (see section 6.2), the SMM guest
-  can instruct the STM to take one of two paths. It can either request a value
-  be logged to the TXT.ERRORCODE register and subsequently reset the machine
-  (indicating it couldn't resolve the problem), or it can request that the STM
-  resume the SMM guest again with the specified register state.
-
-  Unlike other VMCALL interfaces, StmReturnFromProtectionException behaves more
-  like a jump or an IRET instruction than a "call". It does not return directly
-  to the caller, but indirectly to a different location specified on the
-  caller's stack (see section 6.2) or not at all.
-
-  If the SMM guest STM protection exception handler itself causes a protection
-  exception (e.g. a single nested exception), or more than 100 un-nested
-  exceptions occur within the scope of a single SMI event, the STM must write
-  STM_CRASH_PROTECTION_EXCEPTION_FAILURE to the TXT.ERRORCODE register and
-  assert TXT.CMD.SYS_RESET. The reason for these restrictions is to simplify
-  the code requirements while still enabling a reasonable debugging capability.
-
-  @param  EAX  #STM_API_RETURN_FROM_PROTECTION_EXCEPTION (0x00000004)
-  @param  EBX  If 0, resume SMM guest using register state found on exception
-               stack.  If in range 0x01..0x0F, EBX contains a BIOS error code
-               which the STM must record in the TXT.ERRORCODE register and
-               subsequently reset the system via TXT.CMD.SYS_RESET. The value
-               of the TXT.ERRORCODE register is calculated as follows:
-
-                 TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC
-
-               Values 0x10..0xFFFFFFFF are reserved, do not use.
-
-**/
-#define STM_API_RETURN_FROM_PROTECTION_EXCEPTION   0x00000004
-
-
-/**
-  VMCALL API Numbers
-  API number convention: MLE facing VMCALL interfaces have bit 16 set.
-
-  The STM configuration lifecycle is as follows:
-    1. SENTER->SINIT->MLE: MLE begins execution with SMI disabled (masked).
-    2. MLE invokes #STM_API_INITIALIZE_PROTECTION VMCALL to prepare STM for
-       setup of initial protection profile. This is done on a single CPU and
-       has global effect.
-    3. MLE invokes #STM_API_PROTECT_RESOURCE VMCALL to define the initial
-       protection profile. The protection profile is global across all CPUs.
-    4. MLE invokes #STM_API_START VMCALL to enable the STM to begin receiving
-       SMI events. This must be done on every logical CPU.
-    5. MLE may invoke #STM_API_PROTECT_RESOURCE VMCALL or
-       #STM_API_UNPROTECT_RESOURCE VMCALL during runtime as many times as
-       necessary.
-    6. MLE invokes #STM_API_STOP VMCALL to disable the STM. SMI is again masked
-       following #STM_API_STOP VMCALL.
-**/
-
-/**
-  StartStmVmcall() is used to configure an STM that is present in MSEG. SMIs
-  should remain disabled from the invocation of GETSEC[SENTER] until they are
-  re-enabled by StartStmVMCALL(). When StartStmVMCALL() returns, SMI is
-  enabled and the STM has been started and is active. Prior to invoking
-  StartStmVMCALL(), the MLE root should first invoke
-  InitializeProtectionVMCALL() followed by as many iterations of
-  ProtectResourceVMCALL() as necessary to establish the initial protection
-  profile.  StartStmVmcall() must be invoked on all processor threads.
-
-  @param  EAX  #STM_API_START (0x00010001)
-  @param  EDX  STM configuration options. These provide the MLE with the
-               ability to pass configuration parameters to the STM.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The STM has been configured
-                and is now active and the guarding all requested resources.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_ALREADY_STARTED
-                The STM is already configured and active. STM remains active and
-                guarding previously enabled resource list.
-  @retval  EAX  #ERROR_STM_WITHOUT_SMX_UNSUPPORTED
-                The StartStmVMCALL() was invoked from VMX root mode, but outside
-                of SMX. This error code indicates the STM or platform does not
-                support the STM outside of SMX. The SMI handler remains active
-                and operates in legacy mode. See Appendix C
-  @retval  EAX  #ERROR_STM_UNSUPPORTED_MSR_BIT
-                The CPU doesn't support the MSR bit. The STM is not active.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_START                              (BIT16 | 1)
-
-/**
-  Bit values for EDX input parameter to #STM_API_START VMCALL
-  @{
-**/
-#define STM_CONFIG_SMI_UNBLOCKING_BY_VMX_OFF  BIT0
-/// @}
-
-
-/**
-  The StopStmVMCALL() is invoked by the MLE to teardown an active STM. This is
-  normally done as part of a full teardown of the SMX environment when the
-  system is being shut down. At the time the call is invoked, SMI is enabled
-  and the STM is active.  When the call returns, the STM has been stopped and
-  all STM context is discarded and SMI is disabled.
-
-  @param  EAX  #STM_API_STOP (0x00010002)
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The STM has been stopped and
-                is no longer processing SMI events. SMI is blocked.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_STOPPED
-                The STM was not active.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_STOP                               (BIT16 | 2)
-
-
-/**
-  The ProtectResourceVMCALL() is invoked by the MLE root to request protection
-  of specific resources. The request is defined by a STM_RESOURCE_LIST, which
-  may contain more than one resource descriptor. Each resource descriptor is
-  processed separately by the STM. Whether or not protection for any specific
-  resource is granted is returned by the STM via the ReturnStatus bit in the
-  associated STM_RSC_DESC_HEADER.
-
-  @param  EAX  #STM_API_PROTECT_RESOURCE (0x00010003)
-  @param  EBX  Low 32 bits of physical address of caller allocated
-               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
-               making the buffer 4K aligned.
-  @param  ECX  High 32 bits of physical address of caller allocated
-               STM_RESOURCE_LIST.
-
-  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
-         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
-         return, the ReturnStatus bit is set for each resource request granted,
-         and clear for each resource request denied. There are no other fields
-         modified by ProtectResourceVMCALL(). The STM_RESOURCE_LIST must be
-         contained entirely within a single 4K page.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The STM has successfully
-                merged the entire protection request into the active protection
-                profile.  There is therefore no need to check the ReturnStatus
-                bits in the STM_RESOURCE_LIST.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_UNPROTECTABLE_RESOURCE
-                At least one of the requested resource protections intersects a
-                BIOS required resource. Therefore, the caller must walk through
-                the STM_RESOURCE_LIST to determine which of the requested
-                resources was not granted protection. The entire list must be
-                traversed since there may be multiple failures.
-  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
-                The resource list could not be parsed correctly, or did not
-                terminate before crossing a 4K page boundary. The caller must
-                walk through the STM_RESOURCE_LIST to determine which of the
-                requested resources was not granted protection. The entire list
-                must be traversed since there may be multiple failures.
-  @retval  EAX  #ERROR_STM_OUT_OF_RESOURCES
-                The STM has encountered an internal error and cannot complete
-                the request.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_PROTECT_RESOURCE                   (BIT16 | 3)
-
-
-/**
-  The UnProtectResourceVMCALL() is invoked by the MLE root to request that the
-  STM allow the SMI handler access to the specified resources.
-
-  @param  EAX  #STM_API_UNPROTECT_RESOURCE (0x00010004)
-  @param  EBX  Low 32 bits of physical address of caller allocated
-               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
-               making the buffer 4K aligned.
-  @param  ECX  High 32 bits of physical address of caller allocated
-               STM_RESOURCE_LIST.
-
-  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
-         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
-         return, the ReturnStatus bit is set for each resource processed. For
-         a properly formed STM_RESOURCE_LIST, this should be all resources
-         listed. There are no other fields modified by
-         UnProtectResourceVMCALL(). The STM_RESOURCE_LIST must be contained
-         entirely within a single 4K page.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The requested resources are
-                not being guarded by the STM.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
-                The resource list could not be parsed correctly, or did not
-                terminate before crossing a 4K page boundary. The caller must
-                walk through the STM_RESOURCE_LIST to determine which of the
-                requested resources were not able to be unprotected. The entire
-                list must be traversed since there may be multiple failures.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_UNPROTECT_RESOURCE                 (BIT16 | 4)
-
-
-/**
-  The GetBiosResourcesVMCALL() is invoked by the MLE root to request the list
-  of BIOS required resources from the STM.
-
-  @param  EAX  #STM_API_GET_BIOS_RESOURCES (0x00010005)
-  @param  EBX  Low 32 bits of physical address of caller allocated destination
-               buffer. Bits 11:0 are ignored and assumed to be zero, making the
-               buffer 4K aligned.
-  @param  ECX  High 32 bits of physical address of caller allocated destination
-               buffer.
-  @param  EDX  Indicates which page of the BIOS resource list to copy into the
-               destination buffer. The first page is indicated by 0, the second
-               page by 1, etc.
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS. The destination buffer
-                contains the BIOS required resources. If the page retrieved is
-                the last page, EDX will be cleared to 0. If there are more pages
-                to retrieve, EDX is incremented to the next page index. Calling
-                software should iterate on GetBiosResourcesVMCALL() until EDX is
-                returned cleared to 0.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
-                The page index supplied in EDX input was out of range.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-  @retval  EDX  Page index of next page to read. A return of EDX=0 signifies
-                that the entire list has been read.
-                @note  EDX is both an input and an output register.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_GET_BIOS_RESOURCES                 (BIT16 | 5)
-
-
-/**
-  The ManageVmcsDatabaseVMCALL() is invoked by the MLE root to add or remove an
-  MLE guest (including the MLE root) from the list of protected domains.
-
-  @param  EAX  #STM_API_MANAGE_VMCS_DATABASE (0x00010006)
-  @param  EBX  Low 32 bits of physical address of caller allocated
-               STM_VMCS_DATABASE_REQUEST. Bits 11:0 are ignored and assumed to
-               be zero, making the buffer 4K aligned.
-  @param  ECX  High 32 bits of physical address of caller allocated
-               STM_VMCS_DATABASE_REQUEST.
-
-  @note  All fields of STM_VMCS_DATABASE_REQUEST are inputs only.  They are not
-         modified by ManageVmcsDatabaseVMCALL().
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_INVALID_VMCS
-                Indicates a request to remove a VMCS from the database was made,
-                but the referenced VMCS was not found in the database.
-  @retval  EAX  #ERROR_STM_VMCS_PRESENT
-                Indicates a request to add a VMCS to the database was made, but
-                the referenced VMCS was already present in the database.
-  @retval  EAX  #ERROR_INVALID_PARAMETER
-                Indicates non-zero reserved field.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_MANAGE_VMCS_DATABASE               (BIT16 | 6)
-
-/**
-  STM VMCS Database Request for #STM_API_MANAGE_VMCS_DATABASE VMCALL
-**/
-typedef struct {
-  ///
-  /// bits 11:0 are reserved and must be 0
-  ///
-  UINT64  VmcsPhysPointer;
-  UINT32  DomainType :4;
-  UINT32  XStatePolicy :2;
-  UINT32  DegradationPolicy :4;
-  ///
-  /// Must be 0
-  ///
-  UINT32  Reserved1 :22;
-  UINT32  AddOrRemove;
-} STM_VMCS_DATABASE_REQUEST;
-
-/**
-  Values for the DomainType field of #STM_VMCS_DATABASE_REQUEST
-  @{
-**/
-#define DOMAIN_UNPROTECTED            0
-#define DOMAIN_DISALLOWED_IO_OUT      BIT0
-#define DOMAIN_DISALLOWED_IO_IN       BIT1
-#define DOMAIN_INTEGRITY              BIT2
-#define DOMAIN_CONFIDENTIALITY        BIT3
-#define DOMAIN_INTEGRITY_PROT_OUT_IN  (DOMAIN_INTEGRITY)
-#define DOMAIN_FULLY_PROT_OUT_IN      (DOMAIN_CONFIDENTIALITY | DOMAIN_INTEGRITY)
-#define DOMAIN_FULLY_PROT             (DOMAIN_FULLY_PROT_OUT_IN | DOMAIN_DISALLOWED_IO_IN | DOMAIN_DISALLOWED_IO_OUT)
-/// @}
-
-/**
-  Values for the XStatePolicy field of #STM_VMCS_DATABASE_REQUEST
-  @{
-**/
-#define XSTATE_READWRITE  0x00
-#define XSTATE_READONLY   0x01
-#define XSTATE_SCRUB      0x03
-/// @}
-
-/**
-  Values for the AddOrRemove field of #STM_VMCS_DATABASE_REQUEST
-  @{
-**/
-#define STM_VMCS_DATABASE_REQUEST_ADD     1
-#define STM_VMCS_DATABASE_REQUEST_REMOVE  0
-/// @}
-
-
-/**
-  InitializeProtectionVMCALL() prepares the STM for setup of the initial
-  protection profile which is subsequently communicated via one or more
-  invocations of ProtectResourceVMCALL(), prior to invoking StartStmVMCALL().
-  It is only necessary to invoke InitializeProtectionVMCALL() on one processor
-  thread.  InitializeProtectionVMCALL() does not alter whether SMIs are masked
-  or unmasked. The STM should return back to the MLE with "Blocking by SMI" set
-  to 1 in the GUEST_INTERRUPTIBILITY field for the VMCS the STM created for the
-  MLE guest.
-
-  @param  EAX  #STM_API_INITIALIZE_PROTECTION (0x00010007)
-
-  @retval  CF   0
-                No error, EAX set to STM_SUCCESS, EBX bits set to indicate STM
-                capabilities as defined below. The STM has set up an empty
-                protection profile, except for the resources that it sets up to
-                protect itself. The STM must not allow the SMI handler to map
-                any pages from the MSEG Base to the top of TSEG. The STM must
-                also not allow SMI handler access to those MSRs which the STM
-                requires for its own protection.
-  @retval  CF   1
-                An error occurred, EAX holds relevant error value.
-  @retval  EAX  #ERROR_STM_ALREADY_STARTED
-                The STM is already configured and active. The STM remains active
-                and guarding the previously enabled resource list.
-  @retval  EAX  #ERROR_STM_UNPROTECTABLE
-                The STM determines that based on the platform configuration, the
-                STM is unable to protect itself. For example, the BIOS required
-                resource list contains memory pages in MSEG.
-  @retval  EAX  #ERROR_STM_UNSPECIFIED
-                An unspecified error occurred.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_INITIALIZE_PROTECTION              (BIT16 | 7)
-
-/**
-  Byte granular support bits returned in EBX from #STM_API_INITIALIZE_PROTECTION
-  @{
-**/
-#define STM_RSC_BGI  BIT1
-#define STM_RSC_BGM  BIT2
-#define STM_RSC_MSR  BIT3
-/// @}
-
-
-/**
-  The ManageEventLogVMCALL() is invoked by the MLE root to control the logging
-  feature. It consists of several sub-functions to facilitate establishment of
-  the log itself, configuring what events will be logged, and functions to
-  start, stop, and clear the log.
-
-  @param  EAX  #STM_API_MANAGE_EVENT_LOG (0x00010008)
-  @param  EBX  Low 32 bits of physical address of caller allocated
-               STM_EVENT_LOG_MANAGEMENT_REQUEST. Bits 11:0 are ignored and
-               assumed to be zero, making the buffer 4K aligned.
-  @param  ECX  High 32 bits of physical address of caller allocated
-               STM_EVENT_LOG_MANAGEMENT_REQUEST.
-
-  @retval  CF=0
-           No error, EAX set to STM_SUCCESS.
-  @retval  CF=1
-           An error occurred, EAX holds relevant error value. See subfunction
-           descriptions below for details.
-
-  @note  All other registers unmodified.
-**/
-#define STM_API_MANAGE_EVENT_LOG                   (BIT16 | 8)
-
-///
-/// STM Event Log Management Request for #STM_API_MANAGE_EVENT_LOG VMCALL
-///
-typedef struct {
-  UINT32      SubFunctionIndex;
-  union {
-    struct {
-      UINT32  PageCount;
-      //
-      // number of elements is PageCount
-      //
-      UINT64  Pages[];
-    } LogBuffer;
-    //
-    // bitmap of EVENT_TYPE
-    //
-    UINT32    EventEnableBitmap;
-  } Data;
-} STM_EVENT_LOG_MANAGEMENT_REQUEST;
-
-/**
-  Defines values for the SubFunctionIndex field of
-  #STM_EVENT_LOG_MANAGEMENT_REQUEST
-  @{
-**/
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_NEW_LOG        1
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CONFIGURE_LOG  2
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_START_LOG      3
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_STOP_LOG       4
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CLEAR_LOG      5
-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_DELETE_LOG     6
-/// @}
-
-/**
-  Log Entry Header
-**/
-typedef struct {
-  UINT32  EventSerialNumber;
-  UINT16  Type;
-  UINT16  Lock :1;
-  UINT16  Valid :1;
-  UINT16  ReadByMle :1;
-  UINT16  Wrapped :1;
-  UINT16  Reserved :12;
-} LOG_ENTRY_HEADER;
-
-/**
-  Enum values for the Type field of #LOG_ENTRY_HEADER
-**/
-typedef enum {
-  EvtLogStarted,
-  EvtLogStopped,
-  EvtLogInvalidParameterDetected,
-  EvtHandledProtectionException,
-  ///
-  /// unhandled protection exceptions result in reset & cannot be logged
-  ///
-  EvtBiosAccessToUnclaimedResource,
-  EvtMleResourceProtectionGranted,
-  EvtMleResourceProtectionDenied,
-  EvtMleResourceUnprotect,
-  EvtMleResourceUnprotectError,
-  EvtMleDomainTypeDegraded,
-  ///
-  /// add more here
-  ///
-  EvtMleMax,
-  ///
-  /// Not used
-  ///
-  EvtInvalid = 0xFFFFFFFF,
-} EVENT_TYPE;
-
-typedef struct {
-  UINT32  Reserved;
-} ENTRY_EVT_LOG_STARTED;
-
-typedef struct {
-  UINT32  Reserved;
-} ENTRY_EVT_LOG_STOPPED;
-
-typedef struct {
-  UINT32  VmcallApiNumber;
-} ENTRY_EVT_LOG_INVALID_PARAM;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_MLE_RSC_PROT_GRANTED;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_MLE_RSC_PROT_DENIED;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_MLE_RSC_UNPROT;
-
-typedef struct {
-  STM_RSC  Resource;
-} ENTRY_EVT_MLE_RSC_UNPROT_ERROR;
-
-typedef struct {
-  UINT64  VmcsPhysPointer;
-  UINT8   ExpectedDomainType;
-  UINT8   DegradedDomainType;
-} ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED;
-
-typedef union {
-  ENTRY_EVT_LOG_STARTED                       Started;
-  ENTRY_EVT_LOG_STOPPED                       Stopped;
-  ENTRY_EVT_LOG_INVALID_PARAM                 InvalidParam;
-  ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION  HandledProtectionException;
-  ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC         BiosUnclaimedRsc;
-  ENTRY_EVT_MLE_RSC_PROT_GRANTED              MleRscProtGranted;
-  ENTRY_EVT_MLE_RSC_PROT_DENIED               MleRscProtDenied;
-  ENTRY_EVT_MLE_RSC_UNPROT                    MleRscUnprot;
-  ENTRY_EVT_MLE_RSC_UNPROT_ERROR              MleRscUnprotError;
-  ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED          MleDomainTypeDegraded;
-} LOG_ENTRY_DATA;
-
-typedef struct {
-  LOG_ENTRY_HEADER  Hdr;
-  LOG_ENTRY_DATA    Data;
-} STM_LOG_ENTRY;
-
-/**
-  Maximum STM Log Entry Size
-**/
-#define STM_LOG_ENTRY_SIZE  256
-
-
-/**
-  STM Protection Exception Stack Frame Structures
-**/
-
-typedef struct {
-  UINT32  Rdi;
-  UINT32  Rsi;
-  UINT32  Rbp;
-  UINT32  Rdx;
-  UINT32  Rcx;
-  UINT32  Rbx;
-  UINT32  Rax;
-  UINT32  Cr3;
-  UINT32  Cr2;
-  UINT32  Cr0;
-  UINT32  VmcsExitInstructionInfo;
-  UINT32  VmcsExitInstructionLength;
-  UINT64  VmcsExitQualification;
-  ///
-  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
-  ///
-  UINT32  ErrorCode;
-  UINT32  Rip;
-  UINT32  Cs;
-  UINT32  Rflags;
-  UINT32  Rsp;
-  UINT32  Ss;
-} STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32;
-
-typedef struct {
-  UINT64  R15;
-  UINT64  R14;
-  UINT64  R13;
-  UINT64  R12;
-  UINT64  R11;
-  UINT64  R10;
-  UINT64  R9;
-  UINT64  R8;
-  UINT64  Rdi;
-  UINT64  Rsi;
-  UINT64  Rbp;
-  UINT64  Rdx;
-  UINT64  Rcx;
-  UINT64  Rbx;
-  UINT64  Rax;
-  UINT64  Cr8;
-  UINT64  Cr3;
-  UINT64  Cr2;
-  UINT64  Cr0;
-  UINT64  VmcsExitInstructionInfo;
-  UINT64  VmcsExitInstructionLength;
-  UINT64  VmcsExitQualification;
-  ///
-  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
-  ///
-  UINT64  ErrorCode;
-  UINT64  Rip;
-  UINT64  Cs;
-  UINT64  Rflags;
-  UINT64  Rsp;
-  UINT64  Ss;
-} STM_PROTECTION_EXCEPTION_STACK_FRAME_X64;
-
-typedef union {
-  STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32  *Ia32StackFrame;
-  STM_PROTECTION_EXCEPTION_STACK_FRAME_X64   *X64StackFrame;
-} STM_PROTECTION_EXCEPTION_STACK_FRAME;
-
-/**
-  Enum values for the ErrorCode field in
-  #STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32 and
-  #STM_PROTECTION_EXCEPTION_STACK_FRAME_X64
-**/
-typedef enum {
-  TxtSmmPageViolation = 1,
-  TxtSmmMsrViolation,
-  TxtSmmRegisterViolation,
-  TxtSmmIoViolation,
-  TxtSmmPciViolation
-} TXT_SMM_PROTECTION_EXCEPTION_TYPE;
-
-/**
-  TXT Pocessor SMM Descriptor (PSD) structures
-**/
-
-typedef struct {
-  UINT64  SpeRip;
-  UINT64  SpeRsp;
-  UINT16  SpeSs;
-  UINT16  PageViolationException:1;
-  UINT16  MsrViolationException:1;
-  UINT16  RegisterViolationException:1;
-  UINT16  IoViolationException:1;
-  UINT16  PciViolationException:1;
-  UINT16  Reserved1:11;
-  UINT32  Reserved2;
-} STM_PROTECTION_EXCEPTION_HANDLER;
-
-typedef struct {
-  UINT8  ExecutionDisableOutsideSmrr:1;
-  UINT8  Intel64Mode:1;
-  UINT8  Cr4Pae : 1;
-  UINT8  Cr4Pse : 1;
-  UINT8  Reserved1 : 4;
-} STM_SMM_ENTRY_STATE;
-
-typedef struct {
-  UINT8  SmramToVmcsRestoreRequired : 1; ///> BIOS restore hint
-  UINT8  ReinitializeVmcsRequired : 1;   ///> BIOS request
-  UINT8  Reserved2 : 6;
-} STM_SMM_RESUME_STATE;
-
-typedef struct {
-  UINT8  DomainType : 4;   ///> STM input to BIOS on each SMI
-  UINT8  XStatePolicy : 2; ///> STM input to BIOS on each SMI
-  UINT8  EptEnabled : 1;
-  UINT8  Reserved3 : 1;
-} STM_SMM_STATE;
-
-#define TXT_SMM_PSD_OFFSET                          0xfb00
-#define TXT_PROCESSOR_SMM_DESCRIPTOR_SIGNATURE      SIGNATURE_64('T', 'X', 'T', 'P', 'S', 'S', 'I', 'G')
-#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MAJOR  1
-#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MINOR  0
-
-typedef struct {
-  UINT64                            Signature;
-  UINT16                            Size;
-  UINT8                             SmmDescriptorVerMajor;
-  UINT8                             SmmDescriptorVerMinor;
-  UINT32                            LocalApicId;
-  STM_SMM_ENTRY_STATE               SmmEntryState;
-  STM_SMM_RESUME_STATE              SmmResumeState;
-  STM_SMM_STATE                     StmSmmState;
-  UINT8                             Reserved4;
-  UINT16                            SmmCs;
-  UINT16                            SmmDs;
-  UINT16                            SmmSs;
-  UINT16                            SmmOtherSegment;
-  UINT16                            SmmTr;
-  UINT16                            Reserved5;
-  UINT64                            SmmCr3;
-  UINT64                            SmmStmSetupRip;
-  UINT64                            SmmStmTeardownRip;
-  UINT64                            SmmSmiHandlerRip;
-  UINT64                            SmmSmiHandlerRsp;
-  UINT64                            SmmGdtPtr;
-  UINT32                            SmmGdtSize;
-  UINT32                            RequiredStmSmmRevId;
-  STM_PROTECTION_EXCEPTION_HANDLER  StmProtectionExceptionHandler;
-  UINT64                            Reserved6;
-  UINT64                            BiosHwResourceRequirementsPtr;
-  // extend area
-  UINT64                            AcpiRsdp;
-  UINT8                             PhysicalAddressBits;
-} TXT_PROCESSOR_SMM_DESCRIPTOR;
-
-#pragma pack ()
+#include <Register/Intel/StmApi.h>
 
 #endif
-- 
2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44785): https://edk2.groups.io/g/devel/message/44785
Mute This Topic: https://groups.io/mt/32677233/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/
Posted by Dong, Eric 6 years, 6 months ago
Ray,

Same as comments for patch 5/8, I think the copyright time not correct.

Thanks,
Eric
> -----Original Message-----
> From: Ni, Ray
> Sent: Thursday, August 1, 2019 5:59 PM
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Laszlo Ersek <lersek@redhat.com>;
> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Leo Duran <leo.duran@amd.com>; Brijesh Singh
> <brijesh.singh@amd.com>
> Subject: [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to
> MdePkg/Include/
> 
> The patch moves all files under UefiCpuPkg/Include/Register/ to
> MdePkg/Include/Register using following detailed approaches:
> 1. Move UefiCpuPkg/Include/Register/Amd/ to
>    MdePkg/Include/Register/Amd folder.
> 2. Move remaining in UefiCpuPkg/Include/Register/ to
>    MdePkg/Include/Register/Intel folder.
> 3. Create wrapper header files under UefiCpuPkg/Include/Register/
>    to include the accordingly files in MdePkg/Include/Register/Intel.
>    This is to avoid build break because code in other repos like
>    edk2-platform includes the file from UefiCpuPkg.
> 
> The wrapper header files will be removed after all consumers code
> is updated.
> 
> Signed-off-by: Ray Ni <ray.ni@intel.com>
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Leo Duran <leo.duran@amd.com>
> Cc: Brijesh Singh <brijesh.singh@amd.com>
> ---
>  .../Include/Register/Amd/Cpuid.h              |    0
>  .../Include/Register/Amd/Fam17Msr.h           |    0
>  .../Include/Register/Amd/Msr.h                |    4 +-
>  .../Register/Intel}/ArchitecturalMsr.h        |    8 +-
>  .../Include/Register/Intel}/LocalApic.h       |    6 +-
>  .../Include/Register/Intel}/Microcode.h       |    6 +-
>  MdePkg/Include/Register/Intel/Msr.h           |   44 +
>  .../Include/Register/Intel}/Msr/AtomMsr.h     |    4 +-
>  .../Register/Intel}/Msr/BroadwellMsr.h        |    4 +-
>  .../Include/Register/Intel}/Msr/Core2Msr.h    |    4 +-
>  .../Include/Register/Intel}/Msr/CoreMsr.h     |    4 +-
>  .../Include/Register/Intel}/Msr/GoldmontMsr.h |    4 +-
>  .../Register/Intel}/Msr/GoldmontPlusMsr.h     |    4 +-
>  .../Include/Register/Intel}/Msr/HaswellEMsr.h |    4 +-
>  .../Include/Register/Intel}/Msr/HaswellMsr.h  |    4 +-
>  .../Register/Intel}/Msr/IvyBridgeMsr.h        |    4 +-
>  .../Include/Register/Intel}/Msr/NehalemMsr.h  |    4 +-
>  .../Include/Register/Intel}/Msr/P6Msr.h       |    4 +-
>  .../Include/Register/Intel}/Msr/Pentium4Msr.h |    2 +-
>  .../Include/Register/Intel}/Msr/PentiumMMsr.h |    2 +-
>  .../Include/Register/Intel}/Msr/PentiumMsr.h  |    2 +-
>  .../Register/Intel}/Msr/SandyBridgeMsr.h      |    2 +-
>  .../Register/Intel}/Msr/SilvermontMsr.h       |    2 +-
>  .../Include/Register/Intel}/Msr/SkylakeMsr.h  |    2 +-
>  .../Include/Register/Intel}/Msr/Xeon5600Msr.h |    2 +-
>  .../Include/Register/Intel}/Msr/XeonDMsr.h    |    2 +-
>  .../Include/Register/Intel}/Msr/XeonE7Msr.h   |    2 +-
>  .../Include/Register/Intel}/Msr/XeonPhiMsr.h  |    2 +-
>  .../Register/Intel}/SmramSaveStateMap.h       |    6 +-
>  .../Include/Register/Intel}/StmApi.h          |   12 +-
>  .../Register/Intel}/StmResourceDescriptor.h   |    6 +-
>  .../Include/Register/Intel}/StmStatusCode.h   |    6 +-
>  .../Include/Register/ArchitecturalMsr.h       | 6565 +----------------
>  UefiCpuPkg/Include/Register/Cpuid.h           |    5 -
>  UefiCpuPkg/Include/Register/LocalApic.h       |  175 +-
>  UefiCpuPkg/Include/Register/Microcode.h       |  187 +-
>  UefiCpuPkg/Include/Register/Msr.h             |   36 +-
>  .../Include/Register/SmramSaveStateMap.h      |  179 +-
>  UefiCpuPkg/Include/Register/StmApi.h          |  941 +--
>  39 files changed, 122 insertions(+), 8128 deletions(-)
>  rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Cpuid.h (100%)
>  rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Fam17Msr.h
> (100%)
>  rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Msr.h (78%)
>  copy {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/ArchitecturalMsr.h (96%)
>  copy {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/LocalApic.h (95%)
>  copy {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Microcode.h (95%)
>  create mode 100644 MdePkg/Include/Register/Intel/Msr.h
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/AtomMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/BroadwellMsr.h (95%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/Core2Msr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/CoreMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/GoldmontMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/GoldmontPlusMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/HaswellEMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/HaswellMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/IvyBridgeMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/NehalemMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/P6Msr.h (95%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/Pentium4Msr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/PentiumMMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/PentiumMsr.h (95%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/SandyBridgeMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/SilvermontMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/SkylakeMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/Xeon5600Msr.h (95%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/XeonDMsr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/XeonE7Msr.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/Msr/XeonPhiMsr.h (96%)
>  copy {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/SmramSaveStateMap.h (93%)
>  copy {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/StmApi.h (96%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/StmResourceDescriptor.h (92%)
>  rename {UefiCpuPkg/Include/Register =>
> MdePkg/Include/Register/Intel}/StmStatusCode.h (94%)
> 
> diff --git a/UefiCpuPkg/Include/Register/Amd/Cpuid.h
> b/MdePkg/Include/Register/Amd/Cpuid.h
> similarity index 100%
> rename from UefiCpuPkg/Include/Register/Amd/Cpuid.h
> rename to MdePkg/Include/Register/Amd/Cpuid.h
> diff --git a/UefiCpuPkg/Include/Register/Amd/Fam17Msr.h
> b/MdePkg/Include/Register/Amd/Fam17Msr.h
> similarity index 100%
> rename from UefiCpuPkg/Include/Register/Amd/Fam17Msr.h
> rename to MdePkg/Include/Register/Amd/Fam17Msr.h
> diff --git a/UefiCpuPkg/Include/Register/Amd/Msr.h
> b/MdePkg/Include/Register/Amd/Msr.h
> similarity index 78%
> rename from UefiCpuPkg/Include/Register/Amd/Msr.h
> rename to MdePkg/Include/Register/Amd/Msr.h
> index b7db0ae042..e74de7a1df 100644
> --- a/UefiCpuPkg/Include/Register/Amd/Msr.h
> +++ b/MdePkg/Include/Register/Amd/Msr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>
> +  Copyright (c) 2017 - 2019, Advanced Micro Devices. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -17,7 +17,7 @@
>  #ifndef __AMD_MSR_H__
>  #define __AMD_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
>  #include <Register/Amd/Fam17Msr.h>
> 
>  #endif
> diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> similarity index 96%
> copy from UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> copy to MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> index c2bd382000..28e71cf713 100644
> --- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> +++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> @@ -1,12 +1,12 @@
>  /** @file
> -  Architectural MSR Definitions.
> +  Intel Architectural MSR Definitions.
> 
>    Provides defines for Machine Specific Registers(MSR) indexes. Data
> structures
>    are provided for MSRs that contain one or more bit fields.  If the MSR value
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -15,8 +15,8 @@
> 
>  **/
> 
> -#ifndef __ARCHITECTURAL_MSR_H__
> -#define __ARCHITECTURAL_MSR_H__
> +#ifndef __INTEL_ARCHITECTURAL_MSR_H__
> +#define __INTEL_ARCHITECTURAL_MSR_H__
> 
>  /**
>    See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor
> (05_01H).
> diff --git a/UefiCpuPkg/Include/Register/LocalApic.h
> b/MdePkg/Include/Register/Intel/LocalApic.h
> similarity index 95%
> copy from UefiCpuPkg/Include/Register/LocalApic.h
> copy to MdePkg/Include/Register/Intel/LocalApic.h
> index 369ba96af8..35625cff70 100644
> --- a/UefiCpuPkg/Include/Register/LocalApic.h
> +++ b/MdePkg/Include/Register/Intel/LocalApic.h
> @@ -1,13 +1,13 @@
>  /** @file
>    IA32 Local APIC Definitions.
> 
> -  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> 
> -#ifndef __LOCAL_APIC_H__
> -#define __LOCAL_APIC_H__
> +#ifndef __INTEL_LOCAL_APIC_H__
> +#define __INTEL_LOCAL_APIC_H__
> 
>  //
>  // Definition for Local APIC registers and related values
> diff --git a/UefiCpuPkg/Include/Register/Microcode.h
> b/MdePkg/Include/Register/Intel/Microcode.h
> similarity index 95%
> copy from UefiCpuPkg/Include/Register/Microcode.h
> copy to MdePkg/Include/Register/Intel/Microcode.h
> index e85c0cc640..93fa3d6d53 100644
> --- a/UefiCpuPkg/Include/Register/Microcode.h
> +++ b/MdePkg/Include/Register/Intel/Microcode.h
> @@ -5,7 +5,7 @@
>    Intel(R) 64 and IA-32 Architectures Software Developer's Manual
>      Volume 3A, Section 9.11  Microcode Definitions
> 
> -  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -14,8 +14,8 @@
> 
>  **/
> 
> -#ifndef __MICROCODE_H__
> -#define __MICROCODE_H__
> +#ifndef __INTEL_MICROCODE_H__
> +#define __INTEL_MICROCODE_H__
> 
>  ///
>  /// CPU Microcode Date in BCD format
> diff --git a/MdePkg/Include/Register/Intel/Msr.h
> b/MdePkg/Include/Register/Intel/Msr.h
> new file mode 100644
> index 0000000000..7bd656cdaa
> --- /dev/null
> +++ b/MdePkg/Include/Register/Intel/Msr.h
> @@ -0,0 +1,44 @@
> +/** @file
> +  MSR Definitions.
> +
> +  Provides defines for Machine Specific Registers(MSR) indexes. Data
> structures
> +  are provided for MSRs that contain one or more bit fields.  If the MSR value
> +  returned is a single 32-bit or 64-bit value, then a data structure is not
> +  provided for that MSR.
> +
> +  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +  @par Specification Reference:
> +  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume
> 4,
> +  May 2018, Volume 4: Model-Specific-Registers (MSR)
> +
> +**/
> +
> +#ifndef __INTEL_MSR_H__
> +#define __INTEL_MSR_H__
> +
> +#include <Register/Intel/ArchitecturalMsr.h>
> +#include <Register/Intel/Msr/Core2Msr.h>
> +#include <Register/Intel/Msr/AtomMsr.h>
> +#include <Register/Intel/Msr/SilvermontMsr.h>
> +#include <Register/Intel/Msr/GoldmontMsr.h>
> +#include <Register/Intel/Msr/GoldmontPlusMsr.h>
> +#include <Register/Intel/Msr/NehalemMsr.h>
> +#include <Register/Intel/Msr/Xeon5600Msr.h>
> +#include <Register/Intel/Msr/XeonE7Msr.h>
> +#include <Register/Intel/Msr/SandyBridgeMsr.h>
> +#include <Register/Intel/Msr/IvyBridgeMsr.h>
> +#include <Register/Intel/Msr/HaswellMsr.h>
> +#include <Register/Intel/Msr/HaswellEMsr.h>
> +#include <Register/Intel/Msr/BroadwellMsr.h>
> +#include <Register/Intel/Msr/XeonDMsr.h>
> +#include <Register/Intel/Msr/SkylakeMsr.h>
> +#include <Register/Intel/Msr/XeonPhiMsr.h>
> +#include <Register/Intel/Msr/Pentium4Msr.h>
> +#include <Register/Intel/Msr/CoreMsr.h>
> +#include <Register/Intel/Msr/PentiumMMsr.h>
> +#include <Register/Intel/Msr/P6Msr.h>
> +#include <Register/Intel/Msr/PentiumMsr.h>
> +
> +#endif
> diff --git a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h
> b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/AtomMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/AtomMsr.h
> index 802efe54a6..c174df1535 100644
> --- a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __ATOM_MSR_H__
>  #define __ATOM_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Atom(TM) Processor Family?
> diff --git a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
> b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
> similarity index 95%
> rename from UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
> index e9d39d99c4..d05869e037 100644
> --- a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __BROADWELL_MSR_H__
>  #define __BROADWELL_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Broadwell microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h
> b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/Core2Msr.h
> rename to MdePkg/Include/Register/Intel/Msr/Core2Msr.h
> index a5d66261ec..e9d999cdd5 100644
> --- a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __CORE2_MSR_H__
>  #define __CORE2_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Core(TM) 2 Processor Family?
> diff --git a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h
> b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/CoreMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/CoreMsr.h
> index 5368db83ba..1e43bc13f5 100644
> --- a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __CORE_MSR_H__
>  #define __CORE_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel Core Solo and Intel Core Duo Processors?
> diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
> b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
> index a7db0374f8..d44172f29c 100644
> --- a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __GOLDMONT_MSR_H__
>  #define __GOLDMONT_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel Atom processors based on the Goldmont microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
> b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
> index 635f4cae43..2edc1363b7 100644
> --- a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __GOLDMONT_PLUS_MSR_H__
>  #define __GOLDMONT_PLUS_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel Atom processors based on the Goldmont plus microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
> b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
> index 6cde974b1d..6c8e29d2ac 100644
> --- a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __HASWELL_E_MSR_H__
>  #define __HASWELL_E_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Haswell-E microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
> b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
> index 3aec00cab2..704a7079f2 100644
> --- a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __HASWELL_MSR_H__
>  #define __HASWELL_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Haswell microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
> b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
> index fc94f91be0..bc8559d519 100644
> --- a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __IVY_BRIDGE_MSR_H__
>  #define __IVY_BRIDGE_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Ivy Bridge microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
> b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
> index ada2084654..a21e8a5e85 100644
> --- a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __NEHALEM_MSR_H__
>  #define __NEHALEM_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Nehalem microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/P6Msr.h
> b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
> similarity index 95%
> rename from UefiCpuPkg/Include/Register/Msr/P6Msr.h
> rename to MdePkg/Include/Register/Intel/Msr/P6Msr.h
> index 020349291a..d4af2774d3 100644
> --- a/UefiCpuPkg/Include/Register/Msr/P6Msr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
> @@ -6,7 +6,7 @@
>    returned is a single 32-bit or 64-bit value, then a data structure is not
>    provided for that MSR.
> 
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -18,7 +18,7 @@
>  #ifndef __P6_MSR_H__
>  #define __P6_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is P6 Family Processors?
> diff --git a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
> b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
> rename to MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
> index 1d66cc2b31..f5e16a1df7 100644
> --- a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
> @@ -18,7 +18,7 @@
>  #ifndef __PENTIUM_4_MSR_H__
>  #define __PENTIUM_4_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Pentium(R) 4 Processors?
> diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
> b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
> index 869eec1114..f25e4f53b1 100644
> --- a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __PENTIUM_M_MSR_H__
>  #define __PENTIUM_M_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Pentium M Processors?
> diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
> b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
> similarity index 95%
> rename from UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
> index c87212f08f..93286c89e3 100644
> --- a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __PENTIUM_MSR_H__
>  #define __PENTIUM_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Pentium Processors?
> diff --git a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
> b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
> index 0f977e2a2f..322f355378 100644
> --- a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __SANDY_BRIDGE_MSR_H__
>  #define __SANDY_BRIDGE_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Sandy Bridge microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
> b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
> index fc2a8f6c87..3a772de87a 100644
> --- a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __SILVERMONT_MSR_H__
>  #define __SILVERMONT_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Silvermont microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
> b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
> index 01166e3446..923cce5395 100644
> --- a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __SKYLAKE_MSR_H__
>  #define __SKYLAKE_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel processors based on the Skylake microarchitecture?
> diff --git a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
> b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
> similarity index 95%
> rename from UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
> rename to MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
> index c285d1877f..8e2305f95c 100644
> --- a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
> @@ -18,7 +18,7 @@
>  #ifndef __XEON_5600_MSR_H__
>  #define __XEON_5600_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Xeon(R) Processor Series 5600?
> diff --git a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
> b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
> index dae11c8e30..7fde55e181 100644
> --- a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __XEON_D_MSR_H__
>  #define __XEON_D_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Xeon(R) Processor D product Family?
> diff --git a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
> b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
> rename to MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
> index 2e9b296d51..528ba073a1 100644
> --- a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
> @@ -18,7 +18,7 @@
>  #ifndef __XEON_E7_MSR_H__
>  #define __XEON_E7_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Xeon(R) Processor E7 Family?
> diff --git a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
> b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
> similarity index 96%
> rename from UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
> rename to MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
> index 57d71d6a7d..96f5ab8acd 100644
> --- a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
> +++ b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
> @@ -18,7 +18,7 @@
>  #ifndef __XEON_PHI_MSR_H__
>  #define __XEON_PHI_MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  /**
>    Is Intel(R) Xeon(R) Phi(TM) processor Family?
> diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
> similarity index 93%
> copy from UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> copy to MdePkg/Include/Register/Intel/SmramSaveStateMap.h
> index 6473e51a55..81aa6c3c66 100644
> --- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> +++ b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
> @@ -7,13 +7,13 @@ Intel(R) 64 and IA-32 Architectures Software
> Developer's Manual
>    Volume 3C, Section 34.5 SMI Handler Execution Environment
>    Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
> 
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> 
> -#ifndef __SMRAM_SAVE_STATE_MAP_H__
> -#define __SMRAM_SAVE_STATE_MAP_H__
> +#ifndef __INTEL_SMRAM_SAVE_STATE_MAP_H__
> +#define __INTEL_SMRAM_SAVE_STATE_MAP_H__
> 
>  ///
>  /// Default SMBASE address
> diff --git a/UefiCpuPkg/Include/Register/StmApi.h
> b/MdePkg/Include/Register/Intel/StmApi.h
> similarity index 96%
> copy from UefiCpuPkg/Include/Register/StmApi.h
> copy to MdePkg/Include/Register/Intel/StmApi.h
> index 0ecc0b86d5..63f215ca34 100644
> --- a/UefiCpuPkg/Include/Register/StmApi.h
> +++ b/MdePkg/Include/Register/Intel/StmApi.h
> @@ -1,7 +1,7 @@
>  /** @file
>    STM API definition
> 
> -  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -9,12 +9,12 @@
> 
>  **/
> 
> -#ifndef _STM_API_H_
> -#define _STM_API_H_
> +#ifndef _INTEL_STM_API_H_
> +#define _INTEL_STM_API_H_
> 
> -#include <Register/StmStatusCode.h>
> -#include <Register/StmResourceDescriptor.h>
> -#include <Register/ArchitecturalMsr.h>
> +#include <Register/Intel/StmStatusCode.h>
> +#include <Register/Intel/StmResourceDescriptor.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  #pragma pack (1)
> 
> diff --git a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h
> b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
> similarity index 92%
> rename from UefiCpuPkg/Include/Register/StmResourceDescriptor.h
> rename to MdePkg/Include/Register/Intel/StmResourceDescriptor.h
> index ec043c909e..da4c91d0f4 100644
> --- a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h
> +++ b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
> @@ -1,7 +1,7 @@
>  /** @file
>    STM Resource Descriptor
> 
> -  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -9,8 +9,8 @@
> 
>  **/
> 
> -#ifndef _STM_RESOURCE_DESCRIPTOR_H_
> -#define _STM_RESOURCE_DESCRIPTOR_H_
> +#ifndef _INTEL_STM_RESOURCE_DESCRIPTOR_H_
> +#define _INTEL_STM_RESOURCE_DESCRIPTOR_H_
> 
>  #pragma pack (1)
> 
> diff --git a/UefiCpuPkg/Include/Register/StmStatusCode.h
> b/MdePkg/Include/Register/Intel/StmStatusCode.h
> similarity index 94%
> rename from UefiCpuPkg/Include/Register/StmStatusCode.h
> rename to MdePkg/Include/Register/Intel/StmStatusCode.h
> index 42f95fbda4..2460c12598 100644
> --- a/UefiCpuPkg/Include/Register/StmStatusCode.h
> +++ b/MdePkg/Include/Register/Intel/StmStatusCode.h
> @@ -1,7 +1,7 @@
>  /** @file
>    STM Status Codes
> 
> -  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>    @par Specification Reference:
> @@ -9,8 +9,8 @@
> 
>  **/
> 
> -#ifndef _STM_STATUS_CODE_H_
> -#define _STM_STATUS_CODE_H_
> +#ifndef _INTEL_STM_STATUS_CODE_H_
> +#define _INTEL_STM_STATUS_CODE_H_
> 
>  /**
>    STM Status Codes
> diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> index c2bd382000..a2a34c5ec4 100644
> --- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> +++ b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
> @@ -1,6572 +1,13 @@
>  /** @file
> -  Architectural MSR Definitions.
> +  Wrapper header file to include <Register/Intel/ArchitecturalMsr.h> in
> MdePkg.
> 
> -  Provides defines for Machine Specific Registers(MSR) indexes. Data
> structures
> -  are provided for MSRs that contain one or more bit fields.  If the MSR value
> -  returned is a single 32-bit or 64-bit value, then a data structure is not
> -  provided for that MSR.
> -
> -  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -  @par Specification Reference:
> -  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
> -  May 2018, Volume 4: Model-Specific-Registers (MSR)
> -
>  **/
> 
>  #ifndef __ARCHITECTURAL_MSR_H__
>  #define __ARCHITECTURAL_MSR_H__
> 
> -/**
> -  See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor
> (05_01H).
> -
> -  @param  ECX  MSR_IA32_P5_MC_ADDR (0x00000000)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_ADDR);
> -  AsmWriteMsr64 (MSR_IA32_P5_MC_ADDR, Msr);
> -  @endcode
> -  @note MSR_IA32_P5_MC_ADDR is defined as IA32_P5_MC_ADDR in SDM.
> -**/
> -#define MSR_IA32_P5_MC_ADDR                      0x00000000
> -
> -
> -/**
> -  See Section 2.22, "MSRs in Pentium Processors.". DF_DM = 05_01H.
> -
> -  @param  ECX  MSR_IA32_P5_MC_TYPE (0x00000001)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_TYPE);
> -  AsmWriteMsr64 (MSR_IA32_P5_MC_TYPE, Msr);
> -  @endcode
> -  @note MSR_IA32_P5_MC_TYPE is defined as IA32_P5_MC_TYPE in SDM.
> -**/
> -#define MSR_IA32_P5_MC_TYPE                      0x00000001
> -
> -
> -/**
> -  See Section 8.10.5, "Monitor/Mwait Address Range Determination.".
> Introduced
> -  at Display Family / Display Model 0F_03H.
> -
> -  @param  ECX  MSR_IA32_MONITOR_FILTER_SIZE (0x00000006)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MONITOR_FILTER_SIZE);
> -  AsmWriteMsr64 (MSR_IA32_MONITOR_FILTER_SIZE, Msr);
> -  @endcode
> -  @note MSR_IA32_MONITOR_FILTER_SIZE is defined as
> IA32_MONITOR_FILTER_SIZE in SDM.
> -**/
> -#define MSR_IA32_MONITOR_FILTER_SIZE             0x00000006
> -
> -
> -/**
> -  See Section 17.17, "Time-Stamp Counter.". Introduced at Display Family /
> -  Display Model 05_01H.
> -
> -  @param  ECX  MSR_IA32_TIME_STAMP_COUNTER (0x00000010)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_TIME_STAMP_COUNTER);
> -  AsmWriteMsr64 (MSR_IA32_TIME_STAMP_COUNTER, Msr);
> -  @endcode
> -  @note MSR_IA32_TIME_STAMP_COUNTER is defined as
> IA32_TIME_STAMP_COUNTER in SDM.
> -**/
> -#define MSR_IA32_TIME_STAMP_COUNTER              0x00000010
> -
> -
> -/**
> -  Platform ID (RO)  The operating system can use this MSR to determine
> "slot"
> -  information for the processor and the proper microcode update to load.
> -  Introduced at Display Family / Display Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_PLATFORM_ID (0x00000017)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PLATFORM_ID_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PLATFORM_ID);
> -  @endcode
> -  @note MSR_IA32_PLATFORM_ID is defined as IA32_PLATFORM_ID in SDM.
> -**/
> -#define MSR_IA32_PLATFORM_ID                     0x00000017
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PLATFORM_ID
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved1:32;
> -    UINT32  Reserved2:18;
> -    ///
> -    /// [Bits 52:50] Platform Id (RO)  Contains information concerning the
> -    /// intended platform for the processor.
> -    ///   52 51 50
> -    ///   -- -- --
> -    ///    0  0  0  Processor Flag 0.
> -    ///    0  0  1  Processor Flag 1
> -    ///    0  1  0  Processor Flag 2
> -    ///    0  1  1  Processor Flag 3
> -    ///    1  0  0  Processor Flag 4
> -    ///    1  0  1  Processor Flag 5
> -    ///    1  1  0  Processor Flag 6
> -    ///    1  1  1  Processor Flag 7
> -    ///
> -    UINT32  PlatformId:3;
> -    UINT32  Reserved3:11;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PLATFORM_ID_REGISTER;
> -
> -
> -/**
> -  06_01H.
> -
> -  @param  ECX  MSR_IA32_APIC_BASE (0x0000001B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_APIC_BASE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_APIC_BASE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_APIC_BASE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE);
> -  AsmWriteMsr64 (MSR_IA32_APIC_BASE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_APIC_BASE is defined as IA32_APIC_BASE in SDM.
> -**/
> -#define MSR_IA32_APIC_BASE                       0x0000001B
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_APIC_BASE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved1:8;
> -    ///
> -    /// [Bit 8] BSP flag (R/W).
> -    ///
> -    UINT32  BSP:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bit 10] Enable x2APIC mode. Introduced at Display Family / Display
> -    /// Model 06_1AH.
> -    ///
> -    UINT32  EXTD:1;
> -    ///
> -    /// [Bit 11] APIC Global Enable (R/W).
> -    ///
> -    UINT32  EN:1;
> -    ///
> -    /// [Bits 31:12] APIC Base (R/W).
> -    ///
> -    UINT32  ApicBase:20;
> -    ///
> -    /// [Bits 63:32] APIC Base (R/W).
> -    ///
> -    UINT32  ApicBaseHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_APIC_BASE_REGISTER;
> -
> -
> -/**
> -  Control Features in Intel 64 Processor (R/W). If any one enumeration
> -  condition for defined bit field holds.
> -
> -  @param  ECX  MSR_IA32_FEATURE_CONTROL (0x0000003A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_FEATURE_CONTROL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
> -  AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_FEATURE_CONTROL is defined as
> IA32_FEATURE_CONTROL in SDM.
> -**/
> -#define MSR_IA32_FEATURE_CONTROL                 0x0000003A
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_FEATURE_CONTROL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Lock bit (R/WO): (1 = locked). When set, locks this MSR from
> -    /// being written, writes to this bit will result in GP(0). Note: Once the
> -    /// Lock bit is set, the contents of this register cannot be modified.
> -    /// Therefore the lock bit must be set after configuring support for Intel
> -    /// Virtualization Technology and prior to transferring control to an
> -    /// option ROM or the OS. Hence, once the Lock bit is set, the entire
> -    /// IA32_FEATURE_CONTROL contents are preserved across RESET when
> PWRGOOD
> -    /// is not deasserted. If any one enumeration condition for defined bit
> -    /// field position greater than bit 0 holds.
> -    ///
> -    UINT32  Lock:1;
> -    ///
> -    /// [Bit 1] Enable VMX inside SMX operation (R/WL): This bit enables a
> -    /// system executive to use VMX in conjunction with SMX to support
> -    /// Intel(R) Trusted Execution Technology. BIOS must set this bit only
> -    /// when the CPUID function 1 returns VMX feature flag and SMX feature
> -    /// flag set (ECX bits 5 and 6 respectively). If CPUID.01H:ECX[5] = 1 &&
> -    /// CPUID.01H:ECX[6] = 1.
> -    ///
> -    UINT32  EnableVmxInsideSmx:1;
> -    ///
> -    /// [Bit 2] Enable VMX outside SMX operation (R/WL): This bit enables
> VMX
> -    /// for system executive that do not require SMX. BIOS must set this bit
> -    /// only when the CPUID function 1 returns VMX feature flag set (ECX bit
> -    /// 5). If CPUID.01H:ECX[5] = 1.
> -    ///
> -    UINT32  EnableVmxOutsideSmx:1;
> -    UINT32  Reserved1:5;
> -    ///
> -    /// [Bits 14:8] SENTER Local Function Enables (R/WL): When set, each bit
> -    /// in the field represents an enable control for a corresponding SENTER
> -    /// function. This bit is supported only if CPUID.1:ECX.[bit 6] is set. If
> -    /// CPUID.01H:ECX[6] = 1.
> -    ///
> -    UINT32  SenterLocalFunctionEnables:7;
> -    ///
> -    /// [Bit 15] SENTER Global Enable (R/WL): This bit must be set to enable
> -    /// SENTER leaf functions. This bit is supported only if CPUID.1:ECX.[bit
> -    /// 6] is set. If CPUID.01H:ECX[6] = 1.
> -    ///
> -    UINT32  SenterGlobalEnable:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bit 17] SGX Launch Control Enable (R/WL): This bit must be set to
> -    /// enable runtime reconfiguration of SGX Launch Control via
> -    /// IA32_SGXLEPUBKEYHASHn MSR. If CPUID.(EAX=07H, ECX=0H): ECX[30]
> = 1.
> -    ///
> -    UINT32  SgxLaunchControlEnable:1;
> -    ///
> -    /// [Bit 18] SGX Global Enable (R/WL): This bit must be set to enable SGX
> -    /// leaf functions. If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1.
> -    ///
> -    UINT32  SgxEnable:1;
> -    UINT32  Reserved3:1;
> -    ///
> -    /// [Bit 20] LMCE On (R/WL): When set, system software can program the
> -    /// MSRs associated with LMCE to configure delivery of some machine
> check
> -    /// exceptions to a single logical processor. If IA32_MCG_CAP[27] = 1.
> -    ///
> -    UINT32  LmceOn:1;
> -    UINT32  Reserved4:11;
> -    UINT32  Reserved5:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_FEATURE_CONTROL_REGISTER;
> -
> -
> -/**
> -  Per Logical Processor TSC Adjust (R/Write to clear). If CPUID.(EAX=07H,
> -  ECX=0H): EBX[1] = 1. THREAD_ADJUST:  Local offset value of the IA32_TSC
> for
> -  a logical processor. Reset value is Zero. A write to IA32_TSC will modify
> -  the local offset in IA32_TSC_ADJUST and the content of IA32_TSC, but does
> -  not affect the internal invariant TSC hardware.
> -
> -  @param  ECX  MSR_IA32_TSC_ADJUST (0x0000003B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_TSC_ADJUST);
> -  AsmWriteMsr64 (MSR_IA32_TSC_ADJUST, Msr);
> -  @endcode
> -  @note MSR_IA32_TSC_ADJUST is defined as IA32_TSC_ADJUST in SDM.
> -**/
> -#define MSR_IA32_TSC_ADJUST                      0x0000003B
> -
> -
> -/**
> -  BIOS Update Trigger (W) Executing a WRMSR instruction to this MSR causes
> a
> -  microcode update to be loaded into the processor. See Section 9.11.6,
> -  "Microcode Update Loader." A processor may prevent writing to this MSR
> when
> -  loading guest states on VM entries or saving guest states on VM exits.
> -  Introduced at Display Family / Display Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_BIOS_UPDT_TRIG (0x00000079)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = 0;
> -  AsmWriteMsr64 (MSR_IA32_BIOS_UPDT_TRIG, Msr);
> -  @endcode
> -  @note MSR_IA32_BIOS_UPDT_TRIG is defined as IA32_BIOS_UPDT_TRIG
> in SDM.
> -**/
> -#define MSR_IA32_BIOS_UPDT_TRIG                  0x00000079
> -
> -
> -/**
> -  BIOS Update Signature (RO) Returns the microcode update signature
> following
> -  the execution of CPUID.01H. A processor may prevent writing to this MSR
> when
> -  loading guest states on VM entries or saving guest states on VM exits.
> -  Introduced at Display Family / Display Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_BIOS_SIGN_ID (0x0000008B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_BIOS_SIGN_ID_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID);
> -  @endcode
> -  @note MSR_IA32_BIOS_SIGN_ID is defined as IA32_BIOS_SIGN_ID in SDM.
> -**/
> -#define MSR_IA32_BIOS_SIGN_ID                    0x0000008B
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_BIOS_SIGN_ID
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved:32;
> -    ///
> -    /// [Bits 63:32] Microcode update signature. This field contains the
> -    /// signature of the currently loaded microcode update when read
> following
> -    /// the execution of the CPUID instruction, function 1. It is required
> -    /// that this register field be pre-loaded with zero prior to executing
> -    /// the CPUID, function 1. If the field remains equal to zero, then there
> -    /// is no microcode update loaded. Another nonzero value will be the
> -    /// signature.
> -    ///
> -    UINT32  MicrocodeUpdateSignature:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_BIOS_SIGN_ID_REGISTER;
> -
> -
> -/**
> -  IA32_SGXLEPUBKEYHASH[(64*n+63):(64*n)] (R/W) Bits (64*n+63):(64*n)
> of the
> -  SHA256 digest of the SIGSTRUCT.MODULUS for SGX Launch Enclave. On
> reset, the
> -  default value is the digest of Intel's signing key. Read permitted If
> -  CPUID.(EAX=12H,ECX=0H):EAX[0]=1, Write permitted if
> CPUID.(EAX=12H,ECX=0H):
> -  EAX[0]=1 && IA32_FEATURE_CONTROL[17] = 1 &&
> IA32_FEATURE_CONTROL[0] = 1.
> -
> -  @param  ECX  MSR_IA32_SGXLEPUBKEYHASHn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_SGXLEPUBKEYHASHn);
> -  AsmWriteMsr64 (MSR_IA32_SGXLEPUBKEYHASHn, Msr);
> -  @endcode
> -  @note MSR_IA32_SGXLEPUBKEYHASH0 is defined as
> IA32_SGXLEPUBKEYHASH0 in SDM.
> -        MSR_IA32_SGXLEPUBKEYHASH1 is defined as
> IA32_SGXLEPUBKEYHASH1 in SDM.
> -        MSR_IA32_SGXLEPUBKEYHASH2 is defined as
> IA32_SGXLEPUBKEYHASH2 in SDM.
> -        MSR_IA32_SGXLEPUBKEYHASH3 is defined as
> IA32_SGXLEPUBKEYHASH3 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_SGXLEPUBKEYHASH0                0x0000008C
> -#define MSR_IA32_SGXLEPUBKEYHASH1                0x0000008D
> -#define MSR_IA32_SGXLEPUBKEYHASH2                0x0000008E
> -#define MSR_IA32_SGXLEPUBKEYHASH3                0x0000008F
> -/// @}
> -
> -
> -/**
> -  SMM Monitor Configuration (R/W). If CPUID.01H: ECX[5]=1 or CPUID.01H:
> ECX[6] =
> -  1.
> -
> -  @param  ECX  MSR_IA32_SMM_MONITOR_CTL (0x0000009B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_SMM_MONITOR_CTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMM_MONITOR_CTL);
> -  AsmWriteMsr64 (MSR_IA32_SMM_MONITOR_CTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_SMM_MONITOR_CTL is defined as
> IA32_SMM_MONITOR_CTL in SDM.
> -**/
> -#define MSR_IA32_SMM_MONITOR_CTL                 0x0000009B
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_SMM_MONITOR_CTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Valid (R/W).  The STM may be invoked using VMCALL only if this
> -    /// bit is 1. Because VMCALL is used to activate the dual-monitor
> treatment
> -    /// (see Section 34.15.6), the dual-monitor treatment cannot be activated
> -    /// if the bit is 0. This bit is cleared when the logical processor is
> -    /// reset.
> -    ///
> -    UINT32  Valid:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 2] Controls SMI unblocking by VMXOFF (see Section 34.14.4). If
> -    /// IA32_VMX_MISC[28].
> -    ///
> -    UINT32  BlockSmi:1;
> -    UINT32  Reserved2:9;
> -    ///
> -    /// [Bits 31:12] MSEG Base (R/W).
> -    ///
> -    UINT32  MsegBase:20;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_SMM_MONITOR_CTL_REGISTER;
> -
> -/**
> -  MSEG header that is located at the physical address specified by the
> MsegBase
> -  field of #MSR_IA32_SMM_MONITOR_CTL_REGISTER.
> -**/
> -typedef struct {
> -  ///
> -  /// Different processors may use different MSEG revision identifiers. These
> -  /// identifiers enable software to avoid using an MSEG header formatted
> for
> -  /// one processor on a processor that uses a different format. Software can
> -  /// discover the MSEG revision identifier that a processor uses by reading
> -  /// the VMX capability MSR IA32_VMX_MISC.
> -  //
> -  UINT32  MsegHeaderRevision;
> -  ///
> -  /// Bits 31:1 of this field are reserved and must be zero. Bit 0 of the field
> -  /// is the IA-32e mode SMM feature bit. It indicates whether the logical
> -  /// processor will be in IA-32e mode after the STM is activated.
> -  ///
> -  UINT32  MonitorFeatures;
> -  UINT32  GdtrLimit;
> -  UINT32  GdtrBaseOffset;
> -  UINT32  CsSelector;
> -  UINT32  EipOffset;
> -  UINT32  EspOffset;
> -  UINT32  Cr3Offset;
> -  ///
> -  /// Pad header so total size is 2KB
> -  ///
> -  UINT8   Reserved[SIZE_2KB - 8 * sizeof (UINT32)];
> -} MSEG_HEADER;
> -
> -///
> -/// @{ Define values for the MonitorFeatures field of #MSEG_HEADER
> -///
> -#define STM_FEATURES_IA32E 0x1
> -///
> -/// @}
> -///
> -
> -/**
> -  Base address of the logical processor's SMRAM image (RO, SMM only). If
> -  IA32_VMX_MISC[15].
> -
> -  @param  ECX  MSR_IA32_SMBASE (0x0000009E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_SMBASE);
> -  @endcode
> -  @note MSR_IA32_SMBASE is defined as IA32_SMBASE in SDM.
> -**/
> -#define MSR_IA32_SMBASE                          0x0000009E
> -
> -
> -/**
> -  General Performance Counters (R/W).
> -  MSR_IA32_PMCn is supported if CPUID.0AH: EAX[15:8] > n.
> -
> -  @param  ECX  MSR_IA32_PMCn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_PMC0);
> -  AsmWriteMsr64 (MSR_IA32_PMC0, Msr);
> -  @endcode
> -  @note MSR_IA32_PMC0 is defined as IA32_PMC0 in SDM.
> -        MSR_IA32_PMC1 is defined as IA32_PMC1 in SDM.
> -        MSR_IA32_PMC2 is defined as IA32_PMC2 in SDM.
> -        MSR_IA32_PMC3 is defined as IA32_PMC3 in SDM.
> -        MSR_IA32_PMC4 is defined as IA32_PMC4 in SDM.
> -        MSR_IA32_PMC5 is defined as IA32_PMC5 in SDM.
> -        MSR_IA32_PMC6 is defined as IA32_PMC6 in SDM.
> -        MSR_IA32_PMC7 is defined as IA32_PMC7 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_PMC0                            0x000000C1
> -#define MSR_IA32_PMC1                            0x000000C2
> -#define MSR_IA32_PMC2                            0x000000C3
> -#define MSR_IA32_PMC3                            0x000000C4
> -#define MSR_IA32_PMC4                            0x000000C5
> -#define MSR_IA32_PMC5                            0x000000C6
> -#define MSR_IA32_PMC6                            0x000000C7
> -#define MSR_IA32_PMC7                            0x000000C8
> -/// @}
> -
> -
> -/**
> -  TSC Frequency Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] = 1.
> -  C0_MCNT: C0 TSC Frequency Clock Count Increments at fixed interval
> (relative
> -  to TSC freq.) when the logical processor is in C0. Cleared upon overflow /
> -  wrap-around of IA32_APERF.
> -
> -  @param  ECX  MSR_IA32_MPERF (0x000000E7)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MPERF);
> -  AsmWriteMsr64 (MSR_IA32_MPERF, Msr);
> -  @endcode
> -  @note MSR_IA32_MPERF is defined as IA32_MPERF in SDM.
> -**/
> -#define MSR_IA32_MPERF                           0x000000E7
> -
> -
> -/**
> -  Actual Performance Clock Counter (R/Write to clear). If CPUID.06H: ECX[0]
> =
> -  1. C0_ACNT: C0 Actual Frequency Clock Count Accumulates core clock
> counts at
> -  the coordinated clock frequency, when the logical processor is in C0.
> -  Cleared upon overflow / wrap-around of IA32_MPERF.
> -
> -  @param  ECX  MSR_IA32_APERF (0x000000E8)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_APERF);
> -  AsmWriteMsr64 (MSR_IA32_APERF, Msr);
> -  @endcode
> -  @note MSR_IA32_APERF is defined as IA32_APERF in SDM.
> -**/
> -#define MSR_IA32_APERF                           0x000000E8
> -
> -
> -/**
> -  MTRR Capability (RO) Section 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR.".
> -  Introduced at Display Family / Display Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_MTRRCAP (0x000000FE)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRRCAP_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRRCAP_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MTRRCAP_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP);
> -  @endcode
> -  @note MSR_IA32_MTRRCAP is defined as IA32_MTRRCAP in SDM.
> -**/
> -#define MSR_IA32_MTRRCAP                         0x000000FE
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MTRRCAP
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] VCNT: The number of variable memory type ranges in the
> -    /// processor.
> -    ///
> -    UINT32  VCNT:8;
> -    ///
> -    /// [Bit 8] Fixed range MTRRs are supported when set.
> -    ///
> -    UINT32  FIX:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 10] WC Supported when set.
> -    ///
> -    UINT32  WC:1;
> -    ///
> -    /// [Bit 11] SMRR Supported when set.
> -    ///
> -    UINT32  SMRR:1;
> -    UINT32  Reserved2:20;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MTRRCAP_REGISTER;
> -
> -
> -/**
> -  SYSENTER_CS_MSR (R/W). Introduced at Display Family / Display Model
> 06_01H.
> -
> -  @param  ECX  MSR_IA32_SYSENTER_CS (0x00000174)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_SYSENTER_CS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SYSENTER_CS);
> -  AsmWriteMsr64 (MSR_IA32_SYSENTER_CS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_SYSENTER_CS is defined as IA32_SYSENTER_CS in SDM.
> -**/
> -#define MSR_IA32_SYSENTER_CS                     0x00000174
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_SYSENTER_CS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 15:0] CS Selector.
> -    ///
> -    UINT32  CS:16;
> -    UINT32  Reserved1:16;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_SYSENTER_CS_REGISTER;
> -
> -
> -/**
> -  SYSENTER_ESP_MSR (R/W). Introduced at Display Family / Display Model
> 06_01H.
> -
> -  @param  ECX  MSR_IA32_SYSENTER_ESP (0x00000175)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_ESP);
> -  AsmWriteMsr64 (MSR_IA32_SYSENTER_ESP, Msr);
> -  @endcode
> -  @note MSR_IA32_SYSENTER_ESP is defined as IA32_SYSENTER_ESP in SDM.
> -**/
> -#define MSR_IA32_SYSENTER_ESP                    0x00000175
> -
> -
> -/**
> -  SYSENTER_EIP_MSR (R/W). Introduced at Display Family / Display Model
> 06_01H.
> -
> -  @param  ECX  MSR_IA32_SYSENTER_EIP (0x00000176)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_EIP);
> -  AsmWriteMsr64 (MSR_IA32_SYSENTER_EIP, Msr);
> -  @endcode
> -  @note MSR_IA32_SYSENTER_EIP is defined as IA32_SYSENTER_EIP in SDM.
> -**/
> -#define MSR_IA32_SYSENTER_EIP                    0x00000176
> -
> -
> -/**
> -  Global Machine Check Capability (RO). Introduced at Display Family /
> Display
> -  Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_MCG_CAP (0x00000179)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_CAP_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_CAP_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MCG_CAP_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
> -  @endcode
> -  @note MSR_IA32_MCG_CAP is defined as IA32_MCG_CAP in SDM.
> -**/
> -#define MSR_IA32_MCG_CAP                         0x00000179
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MCG_CAP
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Count: Number of reporting banks.
> -    ///
> -    UINT32  Count:8;
> -    ///
> -    /// [Bit 8] MCG_CTL_P: IA32_MCG_CTL is present if this bit is set.
> -    ///
> -    UINT32  MCG_CTL_P:1;
> -    ///
> -    /// [Bit 9] MCG_EXT_P: Extended machine check state registers are
> present
> -    /// if this bit is set.
> -    ///
> -    UINT32  MCG_EXT_P:1;
> -    ///
> -    /// [Bit 10] MCP_CMCI_P: Support for corrected MC error event is present.
> -    /// Introduced at Display Family / Display Model 06_01H.
> -    ///
> -    UINT32  MCP_CMCI_P:1;
> -    ///
> -    /// [Bit 11] MCG_TES_P: Threshold-based error status register are present
> -    /// if this bit is set.
> -    ///
> -    UINT32  MCG_TES_P:1;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bits 23:16] MCG_EXT_CNT: Number of extended machine check state
> -    /// registers present.
> -    ///
> -    UINT32  MCG_EXT_CNT:8;
> -    ///
> -    /// [Bit 24] MCG_SER_P: The processor supports software error recovery
> if
> -    /// this bit is set.
> -    ///
> -    UINT32  MCG_SER_P:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bit 26] MCG_ELOG_P: Indicates that the processor allows platform
> -    /// firmware to be invoked when an error is detected so that it may
> -    /// provide additional platform specific information in an ACPI format
> -    /// "Generic Error Data Entry" that augments the data included in machine
> -    /// check bank registers. Introduced at Display Family / Display Model
> -    /// 06_3EH.
> -    ///
> -    UINT32  MCG_ELOG_P:1;
> -    ///
> -    /// [Bit 27] MCG_LMCE_P: Indicates that the processor support extended
> -    /// state in IA32_MCG_STATUS and associated MSR necessary to
> configure
> -    /// Local Machine Check Exception (LMCE). Introduced at Display Family /
> -    /// Display Model 06_3EH.
> -    ///
> -    UINT32  MCG_LMCE_P:1;
> -    UINT32  Reserved3:4;
> -    UINT32  Reserved4:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MCG_CAP_REGISTER;
> -
> -
> -/**
> -  Global Machine Check Status (R/W0). Introduced at Display Family / Display
> -  Model 06_01H.
> -
> -  @param  ECX  MSR_IA32_MCG_STATUS (0x0000017A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MCG_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_STATUS);
> -  AsmWriteMsr64 (MSR_IA32_MCG_STATUS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MCG_STATUS is defined as IA32_MCG_STATUS in SDM.
> -**/
> -#define MSR_IA32_MCG_STATUS                      0x0000017A
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MCG_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] RIPV. Restart IP valid. Introduced at Display Family / Display
> -    /// Model 06_01H.
> -    ///
> -    UINT32  RIPV:1;
> -    ///
> -    /// [Bit 1] EIPV. Error IP valid. Introduced at Display Family / Display
> -    /// Model 06_01H.
> -    ///
> -    UINT32  EIPV:1;
> -    ///
> -    /// [Bit 2] MCIP. Machine check in progress. Introduced at Display Family
> -    /// / Display Model 06_01H.
> -    ///
> -    UINT32  MCIP:1;
> -    ///
> -    /// [Bit 3] LMCE_S. If IA32_MCG_CAP.LMCE_P[2 7] =1.
> -    ///
> -    UINT32  LMCE_S:1;
> -    UINT32  Reserved1:28;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MCG_STATUS_REGISTER;
> -
> -
> -/**
> -  Global Machine Check Control (R/W). If IA32_MCG_CAP.CTL_P[8] =1.
> -
> -  @param  ECX  MSR_IA32_MCG_CTL (0x0000017B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MCG_CTL);
> -  AsmWriteMsr64 (MSR_IA32_MCG_CTL, Msr);
> -  @endcode
> -  @note MSR_IA32_MCG_CTL is defined as IA32_MCG_CTL in SDM.
> -**/
> -#define MSR_IA32_MCG_CTL                         0x0000017B
> -
> -
> -/**
> -  Performance Event Select Register n (R/W). If CPUID.0AH: EAX[15:8] > n.
> -
> -  @param  ECX  MSR_IA32_PERFEVTSELn
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERFEVTSEL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERFEVTSEL0);
> -  AsmWriteMsr64 (MSR_IA32_PERFEVTSEL0, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERFEVTSEL0 is defined as IA32_PERFEVTSEL0 in SDM.
> -        MSR_IA32_PERFEVTSEL1 is defined as IA32_PERFEVTSEL1 in SDM.
> -        MSR_IA32_PERFEVTSEL2 is defined as IA32_PERFEVTSEL2 in SDM.
> -        MSR_IA32_PERFEVTSEL3 is defined as IA32_PERFEVTSEL3 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_PERFEVTSEL0                     0x00000186
> -#define MSR_IA32_PERFEVTSEL1                     0x00000187
> -#define MSR_IA32_PERFEVTSEL2                     0x00000188
> -#define MSR_IA32_PERFEVTSEL3                     0x00000189
> -/// @}
> -
> -/**
> -  MSR information returned for MSR indexes #MSR_IA32_PERFEVTSEL0 to
> -  #MSR_IA32_PERFEVTSEL3
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Event Select: Selects a performance event logic unit.
> -    ///
> -    UINT32  EventSelect:8;
> -    ///
> -    /// [Bits 15:8] UMask: Qualifies the microarchitectural condition to
> -    /// detect on the selected event logic.
> -    ///
> -    UINT32  UMASK:8;
> -    ///
> -    /// [Bit 16] USR: Counts while in privilege level is not ring 0.
> -    ///
> -    UINT32  USR:1;
> -    ///
> -    /// [Bit 17] OS: Counts while in privilege level is ring 0.
> -    ///
> -    UINT32  OS:1;
> -    ///
> -    /// [Bit 18] Edge: Enables edge detection if set.
> -    ///
> -    UINT32  E:1;
> -    ///
> -    /// [Bit 19] PC: enables pin control.
> -    ///
> -    UINT32  PC:1;
> -    ///
> -    /// [Bit 20] INT: enables interrupt on counter overflow.
> -    ///
> -    UINT32  INT:1;
> -    ///
> -    /// [Bit 21] AnyThread: When set to 1, it enables counting the associated
> -    /// event conditions occurring across all logical processors sharing a
> -    /// processor core. When set to 0, the counter only increments the
> -    /// associated event conditions occurring in the logical processor which
> -    /// programmed the MSR.
> -    ///
> -    UINT32  ANY:1;
> -    ///
> -    /// [Bit 22] EN: enables the corresponding performance counter to
> commence
> -    /// counting when this bit is set.
> -    ///
> -    UINT32  EN:1;
> -    ///
> -    /// [Bit 23] INV: invert the CMASK.
> -    ///
> -    UINT32  INV:1;
> -    ///
> -    /// [Bits 31:24] CMASK: When CMASK is not zero, the corresponding
> -    /// performance counter increments each cycle if the event count is
> -    /// greater than or equal to the CMASK.
> -    ///
> -    UINT32  CMASK:8;
> -    UINT32  Reserved:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERFEVTSEL_REGISTER;
> -
> -
> -/**
> -  Current performance state(P-State) operating point (RO). Introduced at
> -  Display Family / Display Model 0F_03H.
> -
> -  @param  ECX  MSR_IA32_PERF_STATUS (0x00000198)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_STATUS);
> -  @endcode
> -  @note MSR_IA32_PERF_STATUS is defined as IA32_PERF_STATUS in SDM.
> -**/
> -#define MSR_IA32_PERF_STATUS                     0x00000198
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PERF_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 15:0] Current performance State Value.
> -    ///
> -    UINT32  State:16;
> -    UINT32  Reserved1:16;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_STATUS_REGISTER;
> -
> -
> -/**
> -  (R/W). Introduced at Display Family / Display Model 0F_03H.
> -
> -  @param  ECX  MSR_IA32_PERF_CTL (0x00000199)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_CTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_CTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_CTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CTL);
> -  AsmWriteMsr64 (MSR_IA32_PERF_CTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_CTL is defined as IA32_PERF_CTL in SDM.
> -**/
> -#define MSR_IA32_PERF_CTL                        0x00000199
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PERF_CTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 15:0] Target performance State Value.
> -    ///
> -    UINT32  TargetState:16;
> -    UINT32  Reserved1:16;
> -    ///
> -    /// [Bit 32] IDA Engage. (R/W) When set to 1: disengages IDA. 06_0FH
> -    /// (Mobile only).
> -    ///
> -    UINT32  IDA:1;
> -    UINT32  Reserved2:31;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_CTL_REGISTER;
> -
> -
> -/**
> -  Clock Modulation Control (R/W) See Section 14.7.3, "Software Controlled
> -  Clock Modulation.". If CPUID.01H:EDX[22] = 1.
> -
> -  @param  ECX  MSR_IA32_CLOCK_MODULATION (0x0000019A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_CLOCK_MODULATION_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_CLOCK_MODULATION);
> -  AsmWriteMsr64 (MSR_IA32_CLOCK_MODULATION, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_CLOCK_MODULATION is defined as
> IA32_CLOCK_MODULATION in SDM.
> -**/
> -#define MSR_IA32_CLOCK_MODULATION                0x0000019A
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_CLOCK_MODULATION
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Extended On-Demand Clock Modulation Duty Cycle:. If
> -    /// CPUID.06H:EAX[5] = 1.
> -    ///
> -    UINT32  ExtendedOnDemandClockModulationDutyCycle:1;
> -    ///
> -    /// [Bits 3:1] On-Demand Clock Modulation Duty Cycle: Specific encoded
> -    /// values for target duty cycle modulation. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  OnDemandClockModulationDutyCycle:3;
> -    ///
> -    /// [Bit 4] On-Demand Clock Modulation Enable: Set 1 to enable
> modulation.
> -    /// If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  OnDemandClockModulationEnable:1;
> -    UINT32  Reserved1:27;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_CLOCK_MODULATION_REGISTER;
> -
> -
> -/**
> -  Thermal Interrupt Control (R/W) Enables and disables the generation of an
> -  interrupt on temperature transitions detected with the processor's thermal
> -  sensors and thermal monitor. See Section 14.7.2, "Thermal Monitor.".
> -  If CPUID.01H:EDX[22] = 1
> -
> -  @param  ECX  MSR_IA32_THERM_INTERRUPT (0x0000019B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_THERM_INTERRUPT_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_INTERRUPT);
> -  AsmWriteMsr64 (MSR_IA32_THERM_INTERRUPT, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_THERM_INTERRUPT is defined as
> IA32_THERM_INTERRUPT in SDM.
> -**/
> -#define MSR_IA32_THERM_INTERRUPT                 0x0000019B
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_THERM_INTERRUPT
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] High-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  HighTempEnable:1;
> -    ///
> -    /// [Bit 1] Low-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  LowTempEnable:1;
> -    ///
> -    /// [Bit 2] PROCHOT# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  PROCHOT_Enable:1;
> -    ///
> -    /// [Bit 3] FORCEPR# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  FORCEPR_Enable:1;
> -    ///
> -    /// [Bit 4] Critical Temperature Interrupt Enable.
> -    /// If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  CriticalTempEnable:1;
> -    UINT32  Reserved1:3;
> -    ///
> -    /// [Bits 14:8] Threshold #1 Value. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  Threshold1:7;
> -    ///
> -    /// [Bit 15] Threshold #1 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  Threshold1Enable:1;
> -    ///
> -    /// [Bits 22:16] Threshold #2 Value. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  Threshold2:7;
> -    ///
> -    /// [Bit 23] Threshold #2 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  Threshold2Enable:1;
> -    ///
> -    /// [Bit 24] Power Limit Notification Enable. If CPUID.06H:EAX[4] = 1.
> -    ///
> -    UINT32  PowerLimitNotificationEnable:1;
> -    UINT32  Reserved2:7;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_THERM_INTERRUPT_REGISTER;
> -
> -
> -/**
> -  Thermal Status Information (RO) Contains status information about the
> -  processor's thermal sensor and automatic thermal monitoring facilities. See
> -  Section 14.7.2, "Thermal Monitor". If CPUID.01H:EDX[22] = 1.
> -
> -  @param  ECX  MSR_IA32_THERM_STATUS (0x0000019C)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_THERM_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_STATUS);
> -  @endcode
> -  @note MSR_IA32_THERM_STATUS is defined as IA32_THERM_STATUS in
> SDM.
> -**/
> -#define MSR_IA32_THERM_STATUS                    0x0000019C
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_THERM_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Thermal Status (RO):. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  ThermalStatus:1;
> -    ///
> -    /// [Bit 1] Thermal Status Log (R/W):. If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  ThermalStatusLog:1;
> -    ///
> -    /// [Bit 2] PROCHOT # or FORCEPR# event (RO). If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  PROCHOT_FORCEPR_Event:1;
> -    ///
> -    /// [Bit 3] PROCHOT # or FORCEPR# log (R/WC0). If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  PROCHOT_FORCEPR_Log:1;
> -    ///
> -    /// [Bit 4] Critical Temperature Status (RO). If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  CriticalTempStatus:1;
> -    ///
> -    /// [Bit 5] Critical Temperature Status log (R/WC0).
> -    /// If CPUID.01H:EDX[22] = 1.
> -    ///
> -    UINT32  CriticalTempStatusLog:1;
> -    ///
> -    /// [Bit 6] Thermal Threshold #1 Status (RO). If CPUID.01H:ECX[8] = 1.
> -    ///
> -    UINT32  ThermalThreshold1Status:1;
> -    ///
> -    /// [Bit 7] Thermal Threshold #1 log (R/WC0). If CPUID.01H:ECX[8] = 1.
> -    ///
> -    UINT32  ThermalThreshold1Log:1;
> -    ///
> -    /// [Bit 8] Thermal Threshold #2 Status (RO). If CPUID.01H:ECX[8] = 1.
> -    ///
> -    UINT32  ThermalThreshold2Status:1;
> -    ///
> -    /// [Bit 9] Thermal Threshold #2 log (R/WC0). If CPUID.01H:ECX[8] = 1.
> -    ///
> -    UINT32  ThermalThreshold2Log:1;
> -    ///
> -    /// [Bit 10] Power Limitation Status (RO). If CPUID.06H:EAX[4] = 1.
> -    ///
> -    UINT32  PowerLimitStatus:1;
> -    ///
> -    /// [Bit 11] Power Limitation log (R/WC0). If CPUID.06H:EAX[4] = 1.
> -    ///
> -    UINT32  PowerLimitLog:1;
> -    ///
> -    /// [Bit 12] Current Limit Status (RO). If CPUID.06H:EAX[7] = 1.
> -    ///
> -    UINT32  CurrentLimitStatus:1;
> -    ///
> -    /// [Bit 13] Current Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
> -    ///
> -    UINT32  CurrentLimitLog:1;
> -    ///
> -    /// [Bit 14] Cross Domain Limit Status (RO). If CPUID.06H:EAX[7] = 1.
> -    ///
> -    UINT32  CrossDomainLimitStatus:1;
> -    ///
> -    /// [Bit 15] Cross Domain Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
> -    ///
> -    UINT32  CrossDomainLimitLog:1;
> -    ///
> -    /// [Bits 22:16] Digital Readout (RO). If CPUID.06H:EAX[0] = 1.
> -    ///
> -    UINT32  DigitalReadout:7;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bits 30:27] Resolution in Degrees Celsius (RO). If CPUID.06H:EAX[0] =
> -    /// 1.
> -    ///
> -    UINT32  ResolutionInDegreesCelsius:4;
> -    ///
> -    /// [Bit 31] Reading Valid (RO). If CPUID.06H:EAX[0] = 1.
> -    ///
> -    UINT32  ReadingValid:1;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_THERM_STATUS_REGISTER;
> -
> -
> -/**
> -  Enable Misc. Processor Features (R/W)  Allows a variety of processor
> -  functions to be enabled and disabled.
> -
> -  @param  ECX  MSR_IA32_MISC_ENABLE (0x000001A0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MISC_ENABLE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MISC_ENABLE);
> -  AsmWriteMsr64 (MSR_IA32_MISC_ENABLE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MISC_ENABLE is defined as IA32_MISC_ENABLE in SDM.
> -**/
> -#define MSR_IA32_MISC_ENABLE                     0x000001A0
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MISC_ENABLE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Fast-Strings Enable When set, the fast-strings feature (for
> -    /// REP MOVS and REP STORS) is enabled (default); when clear, fast-
> strings
> -    /// are disabled. Introduced at Display Family / Display Model 0F_0H.
> -    ///
> -    UINT32  FastStrings:1;
> -    UINT32  Reserved1:2;
> -    ///
> -    /// [Bit 3] Automatic Thermal Control Circuit Enable (R/W)  1 = Setting
> -    /// this bit enables the thermal control circuit (TCC) portion of the
> -    /// Intel Thermal Monitor feature. This allows the processor to
> -    /// automatically reduce power consumption in response to TCC activation.
> -    /// 0 = Disabled. Note: In some products clearing this bit might be
> -    /// ignored in critical thermal conditions, and TM1, TM2 and adaptive
> -    /// thermal throttling will still be activated. The default value of this
> -    /// field varies with product. See respective tables where default value is
> -    /// listed. Introduced at Display Family / Display Model 0F_0H.
> -    ///
> -    UINT32  AutomaticThermalControlCircuit:1;
> -    UINT32  Reserved2:3;
> -    ///
> -    /// [Bit 7] Performance Monitoring Available (R)  1 = Performance
> -    /// monitoring enabled 0 = Performance monitoring disabled. Introduced
> at
> -    /// Display Family / Display Model 0F_0H.
> -    ///
> -    UINT32  PerformanceMonitoring:1;
> -    UINT32  Reserved3:3;
> -    ///
> -    /// [Bit 11] Branch Trace Storage Unavailable (RO) 1 = Processor doesn't
> -    /// support branch trace storage (BTS) 0 = BTS is supported. Introduced at
> -    /// Display Family / Display Model 0F_0H.
> -    ///
> -    UINT32  BTS:1;
> -    ///
> -    /// [Bit 12] Processor Event Based Sampling (PEBS)  Unavailable (RO)  1 =
> -    /// PEBS is not supported; 0 = PEBS is supported. Introduced at Display
> -    /// Family / Display Model 06_0FH.
> -    ///
> -    UINT32  PEBS:1;
> -    UINT32  Reserved4:3;
> -    ///
> -    /// [Bit 16] Enhanced Intel SpeedStep Technology  Enable (R/W) 0=
> Enhanced
> -    /// Intel SpeedStep Technology disabled 1 = Enhanced Intel SpeedStep
> -    /// Technology enabled. If CPUID.01H: ECX[7] =1.
> -    ///
> -    UINT32  EIST:1;
> -    UINT32  Reserved5:1;
> -    ///
> -    /// [Bit 18] ENABLE MONITOR FSM (R/W) When this bit is set to 0, the
> -    /// MONITOR feature flag is not set (CPUID.01H:ECX[bit 3] = 0). This
> -    /// indicates that MONITOR/MWAIT are not supported. Software
> attempts to
> -    /// execute MONITOR/MWAIT will cause #UD when this bit is 0. When this
> bit
> -    /// is set to 1 (default), MONITOR/MWAIT are supported
> (CPUID.01H:ECX[bit
> -    /// 3] = 1). If the SSE3 feature flag ECX[0] is not set (CPUID.01H:ECX[bit
> -    /// 0] = 0), the OS must not attempt to alter this bit. BIOS must leave it
> -    /// in the default state. Writing this bit when the SSE3 feature flag is
> -    /// set to 0 may generate a #GP exception. Introduced at Display Family /
> -    /// Display Model 0F_03H.
> -    ///
> -    UINT32  MONITOR:1;
> -    UINT32  Reserved6:3;
> -    ///
> -    /// [Bit 22] Limit CPUID Maxval (R/W) When this bit is set to 1, CPUID.00H
> -    /// returns a maximum value in EAX[7:0] of 2. BIOS should contain a setup
> -    /// question that allows users to specify when the installed OS does not
> -    /// support CPUID functions greater than 2. Before setting this bit, BIOS
> -    /// must execute the CPUID.0H and examine the maximum value
> returned in
> -    /// EAX[7:0]. If the maximum value is greater than 2, this bit is
> -    /// supported. Otherwise, this bit is not supported. Setting this bit when
> -    /// the maximum value is not greater than 2 may generate a #GP
> exception.
> -    /// Setting this bit may cause unexpected behavior in software that
> -    /// depends on the availability of CPUID leaves greater than 2. Introduced
> -    /// at Display Family / Display Model 0F_03H.
> -    ///
> -    UINT32  LimitCpuidMaxval:1;
> -    ///
> -    /// [Bit 23] xTPR Message Disable (R/W) When set to 1, xTPR messages are
> -    /// disabled. xTPR messages are optional messages that allow the
> processor
> -    /// to inform the chipset of its priority. if CPUID.01H:ECX[14] = 1.
> -    ///
> -    UINT32  xTPR_Message_Disable:1;
> -    UINT32  Reserved7:8;
> -    UINT32  Reserved8:2;
> -    ///
> -    /// [Bit 34] XD Bit Disable (R/W) When set to 1, the Execute Disable Bit
> -    /// feature (XD Bit) is disabled and the XD Bit extended feature flag will
> -    /// be clear (CPUID.80000001H: EDX[20]=0). When set to a 0 (default), the
> -    /// Execute Disable Bit feature (if available) allows the OS to enable PAE
> -    /// paging and take advantage of data only pages. BIOS must not alter the
> -    /// contents of this bit location, if XD bit is not supported. Writing
> -    /// this bit to 1 when the XD Bit extended feature flag is set to 0 may
> -    /// generate a #GP exception. if CPUID.80000001H:EDX[2 0] = 1.
> -    ///
> -    UINT32  XD:1;
> -    UINT32  Reserved9:29;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MISC_ENABLE_REGISTER;
> -
> -
> -/**
> -  Performance Energy Bias Hint (R/W). if CPUID.6H:ECX[3] = 1.
> -
> -  @param  ECX  MSR_IA32_ENERGY_PERF_BIAS (0x000001B0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_ENERGY_PERF_BIAS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_ENERGY_PERF_BIAS);
> -  AsmWriteMsr64 (MSR_IA32_ENERGY_PERF_BIAS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_ENERGY_PERF_BIAS is defined as
> IA32_ENERGY_PERF_BIAS in SDM.
> -**/
> -#define MSR_IA32_ENERGY_PERF_BIAS                0x000001B0
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_ENERGY_PERF_BIAS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 3:0] Power Policy Preference: 0 indicates preference to highest
> -    /// performance. 15 indicates preference to maximize energy saving.
> -    ///
> -    UINT32  PowerPolicyPreference:4;
> -    UINT32  Reserved1:28;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_ENERGY_PERF_BIAS_REGISTER;
> -
> -
> -/**
> -  Package Thermal Status Information (RO) Contains status information
> about
> -  the package's thermal sensor. See Section 14.8, "Package Level Thermal
> -  Management.". If CPUID.06H: EAX[6] = 1.
> -
> -  @param  ECX  MSR_IA32_PACKAGE_THERM_STATUS (0x000001B1)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PACKAGE_THERM_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_STATUS);
> -  @endcode
> -  @note MSR_IA32_PACKAGE_THERM_STATUS is defined as
> IA32_PACKAGE_THERM_STATUS in SDM.
> -**/
> -#define MSR_IA32_PACKAGE_THERM_STATUS            0x000001B1
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PACKAGE_THERM_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Pkg Thermal Status (RO):.
> -    ///
> -    UINT32  ThermalStatus:1;
> -    ///
> -    /// [Bit 1] Pkg Thermal Status Log (R/W):.
> -    ///
> -    UINT32  ThermalStatusLog:1;
> -    ///
> -    /// [Bit 2] Pkg PROCHOT # event (RO).
> -    ///
> -    UINT32  PROCHOT_Event:1;
> -    ///
> -    /// [Bit 3] Pkg PROCHOT # log (R/WC0).
> -    ///
> -    UINT32  PROCHOT_Log:1;
> -    ///
> -    /// [Bit 4] Pkg Critical Temperature Status (RO).
> -    ///
> -    UINT32  CriticalTempStatus:1;
> -    ///
> -    /// [Bit 5] Pkg Critical Temperature Status log (R/WC0).
> -    ///
> -    UINT32  CriticalTempStatusLog:1;
> -    ///
> -    /// [Bit 6] Pkg Thermal Threshold #1 Status (RO).
> -    ///
> -    UINT32  ThermalThreshold1Status:1;
> -    ///
> -    /// [Bit 7] Pkg Thermal Threshold #1 log (R/WC0).
> -    ///
> -    UINT32  ThermalThreshold1Log:1;
> -    ///
> -    /// [Bit 8] Pkg Thermal Threshold #2 Status (RO).
> -    ///
> -    UINT32  ThermalThreshold2Status:1;
> -    ///
> -    /// [Bit 9] Pkg Thermal Threshold #1 log (R/WC0).
> -    ///
> -    UINT32  ThermalThreshold2Log:1;
> -    ///
> -    /// [Bit 10] Pkg Power Limitation Status (RO).
> -    ///
> -    UINT32  PowerLimitStatus:1;
> -    ///
> -    /// [Bit 11] Pkg Power Limitation log (R/WC0).
> -    ///
> -    UINT32  PowerLimitLog:1;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bits 22:16] Pkg Digital Readout (RO).
> -    ///
> -    UINT32  DigitalReadout:7;
> -    UINT32  Reserved2:9;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PACKAGE_THERM_STATUS_REGISTER;
> -
> -
> -/**
> -  Pkg Thermal Interrupt Control (R/W) Enables and disables the generation
> of
> -  an interrupt on temperature transitions detected with the package's
> thermal
> -  sensor. See Section 14.8, "Package Level Thermal Management.". If
> CPUID.06H:
> -  EAX[6] = 1.
> -
> -  @param  ECX  MSR_IA32_PACKAGE_THERM_INTERRUPT (0x000001B2)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT);
> -  AsmWriteMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PACKAGE_THERM_INTERRUPT is defined as
> IA32_PACKAGE_THERM_INTERRUPT in SDM.
> -**/
> -#define MSR_IA32_PACKAGE_THERM_INTERRUPT         0x000001B2
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PACKAGE_THERM_INTERRUPT
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Pkg High-Temperature Interrupt Enable.
> -    ///
> -    UINT32  HighTempEnable:1;
> -    ///
> -    /// [Bit 1] Pkg Low-Temperature Interrupt Enable.
> -    ///
> -    UINT32  LowTempEnable:1;
> -    ///
> -    /// [Bit 2] Pkg PROCHOT# Interrupt Enable.
> -    ///
> -    UINT32  PROCHOT_Enable:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 4] Pkg Overheat Interrupt Enable.
> -    ///
> -    UINT32  OverheatEnable:1;
> -    UINT32  Reserved2:3;
> -    ///
> -    /// [Bits 14:8] Pkg Threshold #1 Value.
> -    ///
> -    UINT32  Threshold1:7;
> -    ///
> -    /// [Bit 15] Pkg Threshold #1 Interrupt Enable.
> -    ///
> -    UINT32  Threshold1Enable:1;
> -    ///
> -    /// [Bits 22:16] Pkg Threshold #2 Value.
> -    ///
> -    UINT32  Threshold2:7;
> -    ///
> -    /// [Bit 23] Pkg Threshold #2 Interrupt Enable.
> -    ///
> -    UINT32  Threshold2Enable:1;
> -    ///
> -    /// [Bit 24] Pkg Power Limit Notification Enable.
> -    ///
> -    UINT32  PowerLimitNotificationEnable:1;
> -    UINT32  Reserved3:7;
> -    UINT32  Reserved4:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER;
> -
> -
> -/**
> -  Trace/Profile Resource Control (R/W). Introduced at Display Family /
> Display
> -  Model 06_0EH.
> -
> -  @param  ECX  MSR_IA32_DEBUGCTL (0x000001D9)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_DEBUGCTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL);
> -  AsmWriteMsr64 (MSR_IA32_DEBUGCTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_DEBUGCTL is defined as IA32_DEBUGCTL in SDM.
> -**/
> -#define MSR_IA32_DEBUGCTL                        0x000001D9
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_DEBUGCTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] LBR: Setting this bit to 1 enables the processor to record a
> -    /// running trace of the most recent branches taken by the processor in
> -    /// the LBR stack. Introduced at Display Family / Display Model 06_01H.
> -    ///
> -    UINT32  LBR:1;
> -    ///
> -    /// [Bit 1] BTF: Setting this bit to 1 enables the processor to treat
> -    /// EFLAGS.TF as single-step on branches instead of single-step on
> -    /// instructions. Introduced at Display Family / Display Model 06_01H.
> -    ///
> -    UINT32  BTF:1;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bit 6] TR: Setting this bit to 1 enables branch trace messages to be
> -    /// sent. Introduced at Display Family / Display Model 06_0EH.
> -    ///
> -    UINT32  TR:1;
> -    ///
> -    /// [Bit 7] BTS: Setting this bit enables branch trace messages (BTMs) to
> -    /// be logged in a BTS buffer. Introduced at Display Family / Display
> -    /// Model 06_0EH.
> -    ///
> -    UINT32  BTS:1;
> -    ///
> -    /// [Bit 8] BTINT: When clear, BTMs are logged in a BTS buffer in circular
> -    /// fashion. When this bit is set, an interrupt is generated by the BTS
> -    /// facility when the BTS buffer is full. Introduced at Display Family /
> -    /// Display Model 06_0EH.
> -    ///
> -    UINT32  BTINT:1;
> -    ///
> -    /// [Bit 9] BTS_OFF_OS: When set, BTS or BTM is skipped if CPL = 0.
> -    /// Introduced at Display Family / Display Model 06_0FH.
> -    ///
> -    UINT32  BTS_OFF_OS:1;
> -    ///
> -    /// [Bit 10] BTS_OFF_USR: When set, BTS or BTM is skipped if CPL > 0.
> -    /// Introduced at Display Family / Display Model 06_0FH.
> -    ///
> -    UINT32  BTS_OFF_USR:1;
> -    ///
> -    /// [Bit 11] FREEZE_LBRS_ON_PMI: When set, the LBR stack is frozen on a
> -    /// PMI request. If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
> -    ///
> -    UINT32  FREEZE_LBRS_ON_PMI:1;
> -    ///
> -    /// [Bit 12] FREEZE_PERFMON_ON_PMI: When set, each ENABLE bit of the
> -    /// global counter control MSR are frozen (address 38FH) on a PMI request.
> -    /// If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
> -    ///
> -    UINT32  FREEZE_PERFMON_ON_PMI:1;
> -    ///
> -    /// [Bit 13] ENABLE_UNCORE_PMI: When set, enables the logical
> processor to
> -    /// receive and generate PMI on behalf of the uncore. Introduced at
> -    /// Display Family / Display Model 06_1AH.
> -    ///
> -    UINT32  ENABLE_UNCORE_PMI:1;
> -    ///
> -    /// [Bit 14] FREEZE_WHILE_SMM: When set, freezes perfmon and trace
> -    /// messages while in SMM. If IA32_PERF_CAPABILITIES[ 12] = 1.
> -    ///
> -    UINT32  FREEZE_WHILE_SMM:1;
> -    ///
> -    /// [Bit 15] RTM_DEBUG: When set, enables DR7 debug bit on XBEGIN. If
> -    /// (CPUID.(EAX=07H, ECX=0):EBX[11] = 1).
> -    ///
> -    UINT32  RTM_DEBUG:1;
> -    UINT32  Reserved2:16;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_DEBUGCTL_REGISTER;
> -
> -
> -/**
> -  SMRR Base Address (Writeable only in SMM)  Base address of SMM
> memory range.
> -  If IA32_MTRRCAP.SMRR[11] = 1.
> -
> -  @param  ECX  MSR_IA32_SMRR_PHYSBASE (0x000001F2)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_SMRR_PHYSBASE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSBASE);
> -  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSBASE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_SMRR_PHYSBASE is defined as IA32_SMRR_PHYSBASE in
> SDM.
> -**/
> -#define MSR_IA32_SMRR_PHYSBASE                   0x000001F2
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSBASE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Type. Specifies memory type of the range.
> -    ///
> -    UINT32  Type:8;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bits 31:12] PhysBase.  SMRR physical Base Address.
> -    ///
> -    UINT32  PhysBase:20;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_SMRR_PHYSBASE_REGISTER;
> -
> -
> -/**
> -  SMRR Range Mask (Writeable only in SMM) Range Mask of SMM memory
> range. If
> -  IA32_MTRRCAP[SMRR] = 1.
> -
> -  @param  ECX  MSR_IA32_SMRR_PHYSMASK (0x000001F3)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_SMRR_PHYSMASK_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSMASK);
> -  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSMASK, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_SMRR_PHYSMASK is defined as IA32_SMRR_PHYSMASK
> in SDM.
> -**/
> -#define MSR_IA32_SMRR_PHYSMASK                   0x000001F3
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSMASK
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved1:11;
> -    ///
> -    /// [Bit 11] Valid Enable range mask.
> -    ///
> -    UINT32  Valid:1;
> -    ///
> -    /// [Bits 31:12] PhysMask SMRR address range mask.
> -    ///
> -    UINT32  PhysMask:20;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_SMRR_PHYSMASK_REGISTER;
> -
> -
> -/**
> -  DCA Capability (R). If CPUID.01H: ECX[18] = 1.
> -
> -  @param  ECX  MSR_IA32_PLATFORM_DCA_CAP (0x000001F8)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_PLATFORM_DCA_CAP);
> -  @endcode
> -  @note MSR_IA32_PLATFORM_DCA_CAP is defined as
> IA32_PLATFORM_DCA_CAP in SDM.
> -**/
> -#define MSR_IA32_PLATFORM_DCA_CAP                0x000001F8
> -
> -
> -/**
> -  If set, CPU supports Prefetch-Hint type. If CPUID.01H: ECX[18] = 1.
> -
> -  @param  ECX  MSR_IA32_CPU_DCA_CAP (0x000001F9)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_CPU_DCA_CAP);
> -  AsmWriteMsr64 (MSR_IA32_CPU_DCA_CAP, Msr);
> -  @endcode
> -  @note MSR_IA32_CPU_DCA_CAP is defined as IA32_CPU_DCA_CAP in
> SDM.
> -**/
> -#define MSR_IA32_CPU_DCA_CAP                     0x000001F9
> -
> -
> -/**
> -  DCA type 0 Status and Control register. If CPUID.01H: ECX[18] = 1.
> -
> -  @param  ECX  MSR_IA32_DCA_0_CAP (0x000001FA)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_DCA_0_CAP_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DCA_0_CAP);
> -  AsmWriteMsr64 (MSR_IA32_DCA_0_CAP, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_DCA_0_CAP is defined as IA32_DCA_0_CAP in SDM.
> -**/
> -#define MSR_IA32_DCA_0_CAP                       0x000001FA
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_DCA_0_CAP
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] DCA_ACTIVE: Set by HW when DCA is fuseenabled and no
> -    /// defeatures are set.
> -    ///
> -    UINT32  DCA_ACTIVE:1;
> -    ///
> -    /// [Bits 2:1] TRANSACTION.
> -    ///
> -    UINT32  TRANSACTION:2;
> -    ///
> -    /// [Bits 6:3] DCA_TYPE.
> -    ///
> -    UINT32  DCA_TYPE:4;
> -    ///
> -    /// [Bits 10:7] DCA_QUEUE_SIZE.
> -    ///
> -    UINT32  DCA_QUEUE_SIZE:4;
> -    UINT32  Reserved1:2;
> -    ///
> -    /// [Bits 16:13] DCA_DELAY: Writes will update the register but have no
> HW
> -    /// side-effect.
> -    ///
> -    UINT32  DCA_DELAY:4;
> -    UINT32  Reserved2:7;
> -    ///
> -    /// [Bit 24] SW_BLOCK: SW can request DCA block by setting this bit.
> -    ///
> -    UINT32  SW_BLOCK:1;
> -    UINT32  Reserved3:1;
> -    ///
> -    /// [Bit 26] HW_BLOCK: Set when DCA is blocked by HW (e.g. CR0.CD = 1).
> -    ///
> -    UINT32  HW_BLOCK:1;
> -    UINT32  Reserved4:5;
> -    UINT32  Reserved5:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_DCA_0_CAP_REGISTER;
> -
> -
> -/**
> -  MTRRphysBasen.  See Section 11.11.2.3, "Variable Range MTRRs".
> -  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
> -
> -  @param  ECX  MSR_IA32_MTRR_PHYSBASEn
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MTRR_PHYSBASE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSBASE0, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MTRR_PHYSBASE0 is defined as IA32_MTRR_PHYSBASE0
> in SDM.
> -        MSR_IA32_MTRR_PHYSBASE1 is defined as IA32_MTRR_PHYSBASE1 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE2 is defined as IA32_MTRR_PHYSBASE2 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE3 is defined as IA32_MTRR_PHYSBASE3 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE4 is defined as IA32_MTRR_PHYSBASE4 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE5 is defined as IA32_MTRR_PHYSBASE5 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE6 is defined as IA32_MTRR_PHYSBASE6 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE7 is defined as IA32_MTRR_PHYSBASE7 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE8 is defined as IA32_MTRR_PHYSBASE8 in
> SDM.
> -        MSR_IA32_MTRR_PHYSBASE9 is defined as IA32_MTRR_PHYSBASE9 in
> SDM.
> -  @{
> -**/
> -#define MSR_IA32_MTRR_PHYSBASE0                  0x00000200
> -#define MSR_IA32_MTRR_PHYSBASE1                  0x00000202
> -#define MSR_IA32_MTRR_PHYSBASE2                  0x00000204
> -#define MSR_IA32_MTRR_PHYSBASE3                  0x00000206
> -#define MSR_IA32_MTRR_PHYSBASE4                  0x00000208
> -#define MSR_IA32_MTRR_PHYSBASE5                  0x0000020A
> -#define MSR_IA32_MTRR_PHYSBASE6                  0x0000020C
> -#define MSR_IA32_MTRR_PHYSBASE7                  0x0000020E
> -#define MSR_IA32_MTRR_PHYSBASE8                  0x00000210
> -#define MSR_IA32_MTRR_PHYSBASE9                  0x00000212
> -/// @}
> -
> -/**
> -  MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0
> to
> -  #MSR_IA32_MTRR_PHYSBASE9
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Type. Specifies memory type of the range.
> -    ///
> -    UINT32  Type:8;
> -    UINT32  Reserved1:4;
> -    ///
> -    /// [Bits 31:12] PhysBase.  MTRR physical Base Address.
> -    ///
> -    UINT32  PhysBase:20;
> -    ///
> -    /// [Bits MAXPHYSADDR:32] PhysBase.  Upper bits of MTRR physical Base
> Address.
> -    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends
> on the
> -    /// maximum physical address range supported by the processor. It is
> -    /// reported by CPUID leaf function 80000008H. If CPUID does not support
> -    /// leaf 80000008H, the processor supports 36-bit physical address size,
> -    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
> -    ///
> -    UINT32  PhysBaseHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MTRR_PHYSBASE_REGISTER;
> -
> -
> -/**
> -  MTRRphysMaskn.  See Section 11.11.2.3, "Variable Range MTRRs".
> -  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
> -
> -  @param  ECX  MSR_IA32_MTRR_PHYSMASKn
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MTRR_PHYSMASK_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSMASK0, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MTRR_PHYSMASK0 is defined as
> IA32_MTRR_PHYSMASK0 in SDM.
> -        MSR_IA32_MTRR_PHYSMASK1 is defined as IA32_MTRR_PHYSMASK1 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK2 is defined as IA32_MTRR_PHYSMASK2 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK3 is defined as IA32_MTRR_PHYSMASK3 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK4 is defined as IA32_MTRR_PHYSMASK4 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK5 is defined as IA32_MTRR_PHYSMASK5 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK6 is defined as IA32_MTRR_PHYSMASK6 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK7 is defined as IA32_MTRR_PHYSMASK7 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK8 is defined as IA32_MTRR_PHYSMASK8 in
> SDM.
> -        MSR_IA32_MTRR_PHYSMASK9 is defined as IA32_MTRR_PHYSMASK9 in
> SDM.
> -  @{
> -**/
> -#define MSR_IA32_MTRR_PHYSMASK0                  0x00000201
> -#define MSR_IA32_MTRR_PHYSMASK1                  0x00000203
> -#define MSR_IA32_MTRR_PHYSMASK2                  0x00000205
> -#define MSR_IA32_MTRR_PHYSMASK3                  0x00000207
> -#define MSR_IA32_MTRR_PHYSMASK4                  0x00000209
> -#define MSR_IA32_MTRR_PHYSMASK5                  0x0000020B
> -#define MSR_IA32_MTRR_PHYSMASK6                  0x0000020D
> -#define MSR_IA32_MTRR_PHYSMASK7                  0x0000020F
> -#define MSR_IA32_MTRR_PHYSMASK8                  0x00000211
> -#define MSR_IA32_MTRR_PHYSMASK9                  0x00000213
> -/// @}
> -
> -/**
> -  MSR information returned for MSR indexes
> #MSR_IA32_MTRR_PHYSMASK0 to
> -  #MSR_IA32_MTRR_PHYSMASK9
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved1:11;
> -    ///
> -    /// [Bit 11] Valid Enable range mask.
> -    ///
> -    UINT32  V:1;
> -    ///
> -    /// [Bits 31:12] PhysMask.  MTRR address range mask.
> -    ///
> -    UINT32  PhysMask:20;
> -    ///
> -    /// [Bits MAXPHYSADDR:32] PhysMask.  Upper bits of MTRR address range
> mask.
> -    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends
> on the
> -    /// maximum physical address range supported by the processor. It is
> -    /// reported by CPUID leaf function 80000008H. If CPUID does not support
> -    /// leaf 80000008H, the processor supports 36-bit physical address size,
> -    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
> -    ///
> -    UINT32  PhysMaskHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MTRR_PHYSMASK_REGISTER;
> -
> -
> -/**
> -  MTRRfix64K_00000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX64K_00000 (0x00000250)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX64K_00000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX64K_00000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX64K_00000 is defined as
> IA32_MTRR_FIX64K_00000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX64K_00000               0x00000250
> -
> -
> -/**
> -  MTRRfix16K_80000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX16K_80000 (0x00000258)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_80000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_80000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX16K_80000 is defined as
> IA32_MTRR_FIX16K_80000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX16K_80000               0x00000258
> -
> -
> -/**
> -  MTRRfix16K_A0000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX16K_A0000 (0x00000259)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_A0000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_A0000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX16K_A0000 is defined as
> IA32_MTRR_FIX16K_A0000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX16K_A0000               0x00000259
> -
> -
> -/**
> -  See Section 11.11.2.2, "Fixed Range MTRRs.". If CPUID.01H: EDX.MTRR[12]
> =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_C0000 (0x00000268)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C0000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C0000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_C0000 is defined as
> IA32_MTRR_FIX4K_C0000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_C0000                0x00000268
> -
> -
> -/**
> -  MTRRfix4K_C8000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_C8000 (0x00000269)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C8000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C8000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_C8000 is defined as
> IA32_MTRR_FIX4K_C8000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_C8000                0x00000269
> -
> -
> -/**
> -  MTRRfix4K_D0000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_D0000 (0x0000026A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D0000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D0000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_D0000 is defined as
> IA32_MTRR_FIX4K_D0000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_D0000                0x0000026A
> -
> -
> -/**
> -  MTRRfix4K_D8000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_D8000 (0x0000026B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D8000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D8000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_D8000 is defined as
> IA32_MTRR_FIX4K_D8000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_D8000                0x0000026B
> -
> -
> -/**
> -  MTRRfix4K_E0000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_E0000 (0x0000026C)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E0000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E0000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_E0000 is defined as
> IA32_MTRR_FIX4K_E0000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_E0000                0x0000026C
> -
> -
> -/**
> -  MTRRfix4K_E8000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_E8000 (0x0000026D)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E8000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E8000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_E8000 is defined as
> IA32_MTRR_FIX4K_E8000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_E8000                0x0000026D
> -
> -
> -/**
> -  MTRRfix4K_F0000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_F0000 (0x0000026E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F0000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F0000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_F0000 is defined as
> IA32_MTRR_FIX4K_F0000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_F0000                0x0000026E
> -
> -
> -/**
> -  MTRRfix4K_F8000. If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_FIX4K_F8000 (0x0000026F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F8000);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F8000, Msr);
> -  @endcode
> -  @note MSR_IA32_MTRR_FIX4K_F8000 is defined as
> IA32_MTRR_FIX4K_F8000 in SDM.
> -**/
> -#define MSR_IA32_MTRR_FIX4K_F8000                0x0000026F
> -
> -
> -/**
> -  IA32_PAT (R/W). If CPUID.01H: EDX.MTRR[16] =1.
> -
> -  @param  ECX  MSR_IA32_PAT (0x00000277)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PAT_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PAT_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PAT_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PAT);
> -  AsmWriteMsr64 (MSR_IA32_PAT, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PAT is defined as IA32_PAT in SDM.
> -**/
> -#define MSR_IA32_PAT                             0x00000277
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PAT
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 2:0] PA0.
> -    ///
> -    UINT32  PA0:3;
> -    UINT32  Reserved1:5;
> -    ///
> -    /// [Bits 10:8] PA1.
> -    ///
> -    UINT32  PA1:3;
> -    UINT32  Reserved2:5;
> -    ///
> -    /// [Bits 18:16] PA2.
> -    ///
> -    UINT32  PA2:3;
> -    UINT32  Reserved3:5;
> -    ///
> -    /// [Bits 26:24] PA3.
> -    ///
> -    UINT32  PA3:3;
> -    UINT32  Reserved4:5;
> -    ///
> -    /// [Bits 34:32] PA4.
> -    ///
> -    UINT32  PA4:3;
> -    UINT32  Reserved5:5;
> -    ///
> -    /// [Bits 42:40] PA5.
> -    ///
> -    UINT32  PA5:3;
> -    UINT32  Reserved6:5;
> -    ///
> -    /// [Bits 50:48] PA6.
> -    ///
> -    UINT32  PA6:3;
> -    UINT32  Reserved7:5;
> -    ///
> -    /// [Bits 58:56] PA7.
> -    ///
> -    UINT32  PA7:3;
> -    UINT32  Reserved8:5;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PAT_REGISTER;
> -
> -
> -/**
> -  Provides the programming interface to use corrected MC error signaling
> -  capability (R/W). If IA32_MCG_CAP[10] = 1 && IA32_MCG_CAP[7:0] > n.
> -
> -  @param  ECX  MSR_IA32_MCn_CTL2
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MC_CTL2_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MC_CTL2_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MC_CTL2_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MC0_CTL2);
> -  AsmWriteMsr64 (MSR_IA32_MC0_CTL2, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MC0_CTL2  is defined as IA32_MC0_CTL2  in SDM.
> -        MSR_IA32_MC1_CTL2  is defined as IA32_MC1_CTL2  in SDM.
> -        MSR_IA32_MC2_CTL2  is defined as IA32_MC2_CTL2  in SDM.
> -        MSR_IA32_MC3_CTL2  is defined as IA32_MC3_CTL2  in SDM.
> -        MSR_IA32_MC4_CTL2  is defined as IA32_MC4_CTL2  in SDM.
> -        MSR_IA32_MC5_CTL2  is defined as IA32_MC5_CTL2  in SDM.
> -        MSR_IA32_MC6_CTL2  is defined as IA32_MC6_CTL2  in SDM.
> -        MSR_IA32_MC7_CTL2  is defined as IA32_MC7_CTL2  in SDM.
> -        MSR_IA32_MC8_CTL2  is defined as IA32_MC8_CTL2  in SDM.
> -        MSR_IA32_MC9_CTL2  is defined as IA32_MC9_CTL2  in SDM.
> -        MSR_IA32_MC10_CTL2 is defined as IA32_MC10_CTL2 in SDM.
> -        MSR_IA32_MC11_CTL2 is defined as IA32_MC11_CTL2 in SDM.
> -        MSR_IA32_MC12_CTL2 is defined as IA32_MC12_CTL2 in SDM.
> -        MSR_IA32_MC13_CTL2 is defined as IA32_MC13_CTL2 in SDM.
> -        MSR_IA32_MC14_CTL2 is defined as IA32_MC14_CTL2 in SDM.
> -        MSR_IA32_MC15_CTL2 is defined as IA32_MC15_CTL2 in SDM.
> -        MSR_IA32_MC16_CTL2 is defined as IA32_MC16_CTL2 in SDM.
> -        MSR_IA32_MC17_CTL2 is defined as IA32_MC17_CTL2 in SDM.
> -        MSR_IA32_MC18_CTL2 is defined as IA32_MC18_CTL2 in SDM.
> -        MSR_IA32_MC19_CTL2 is defined as IA32_MC19_CTL2 in SDM.
> -        MSR_IA32_MC20_CTL2 is defined as IA32_MC20_CTL2 in SDM.
> -        MSR_IA32_MC21_CTL2 is defined as IA32_MC21_CTL2 in SDM.
> -        MSR_IA32_MC22_CTL2 is defined as IA32_MC22_CTL2 in SDM.
> -        MSR_IA32_MC23_CTL2 is defined as IA32_MC23_CTL2 in SDM.
> -        MSR_IA32_MC24_CTL2 is defined as IA32_MC24_CTL2 in SDM.
> -        MSR_IA32_MC25_CTL2 is defined as IA32_MC25_CTL2 in SDM.
> -        MSR_IA32_MC26_CTL2 is defined as IA32_MC26_CTL2 in SDM.
> -        MSR_IA32_MC27_CTL2 is defined as IA32_MC27_CTL2 in SDM.
> -        MSR_IA32_MC28_CTL2 is defined as IA32_MC28_CTL2 in SDM.
> -        MSR_IA32_MC29_CTL2 is defined as IA32_MC29_CTL2 in SDM.
> -        MSR_IA32_MC30_CTL2 is defined as IA32_MC30_CTL2 in SDM.
> -        MSR_IA32_MC31_CTL2 is defined as IA32_MC31_CTL2 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_MC0_CTL2                        0x00000280
> -#define MSR_IA32_MC1_CTL2                        0x00000281
> -#define MSR_IA32_MC2_CTL2                        0x00000282
> -#define MSR_IA32_MC3_CTL2                        0x00000283
> -#define MSR_IA32_MC4_CTL2                        0x00000284
> -#define MSR_IA32_MC5_CTL2                        0x00000285
> -#define MSR_IA32_MC6_CTL2                        0x00000286
> -#define MSR_IA32_MC7_CTL2                        0x00000287
> -#define MSR_IA32_MC8_CTL2                        0x00000288
> -#define MSR_IA32_MC9_CTL2                        0x00000289
> -#define MSR_IA32_MC10_CTL2                       0x0000028A
> -#define MSR_IA32_MC11_CTL2                       0x0000028B
> -#define MSR_IA32_MC12_CTL2                       0x0000028C
> -#define MSR_IA32_MC13_CTL2                       0x0000028D
> -#define MSR_IA32_MC14_CTL2                       0x0000028E
> -#define MSR_IA32_MC15_CTL2                       0x0000028F
> -#define MSR_IA32_MC16_CTL2                       0x00000290
> -#define MSR_IA32_MC17_CTL2                       0x00000291
> -#define MSR_IA32_MC18_CTL2                       0x00000292
> -#define MSR_IA32_MC19_CTL2                       0x00000293
> -#define MSR_IA32_MC20_CTL2                       0x00000294
> -#define MSR_IA32_MC21_CTL2                       0x00000295
> -#define MSR_IA32_MC22_CTL2                       0x00000296
> -#define MSR_IA32_MC23_CTL2                       0x00000297
> -#define MSR_IA32_MC24_CTL2                       0x00000298
> -#define MSR_IA32_MC25_CTL2                       0x00000299
> -#define MSR_IA32_MC26_CTL2                       0x0000029A
> -#define MSR_IA32_MC27_CTL2                       0x0000029B
> -#define MSR_IA32_MC28_CTL2                       0x0000029C
> -#define MSR_IA32_MC29_CTL2                       0x0000029D
> -#define MSR_IA32_MC30_CTL2                       0x0000029E
> -#define MSR_IA32_MC31_CTL2                       0x0000029F
> -/// @}
> -
> -/**
> -  MSR information returned for MSR indexes #MSR_IA32_MC0_CTL2
> -  to #MSR_IA32_MC31_CTL2
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 14:0] Corrected error count threshold.
> -    ///
> -    UINT32  CorrectedErrorCountThreshold:15;
> -    UINT32  Reserved1:15;
> -    ///
> -    /// [Bit 30] CMCI_EN.
> -    ///
> -    UINT32  CMCI_EN:1;
> -    UINT32  Reserved2:1;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MC_CTL2_REGISTER;
> -
> -
> -/**
> -  MTRRdefType (R/W). If CPUID.01H: EDX.MTRR[12] =1.
> -
> -  @param  ECX  MSR_IA32_MTRR_DEF_TYPE (0x000002FF)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MTRR_DEF_TYPE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> -  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MTRR_DEF_TYPE is defined as IA32_MTRR_DEF_TYPE in
> SDM.
> -**/
> -#define MSR_IA32_MTRR_DEF_TYPE                   0x000002FF
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MTRR_DEF_TYPE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 2:0] Default Memory Type.
> -    ///
> -    UINT32  Type:3;
> -    UINT32  Reserved1:7;
> -    ///
> -    /// [Bit 10] Fixed Range MTRR Enable.
> -    ///
> -    UINT32  FE:1;
> -    ///
> -    /// [Bit 11] MTRR Enable.
> -    ///
> -    UINT32  E:1;
> -    UINT32  Reserved2:20;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MTRR_DEF_TYPE_REGISTER;
> -
> -
> -/**
> -  Fixed-Function Performance Counter 0 (R/W): Counts Instr_Retired.Any. If
> -  CPUID.0AH: EDX[4:0] > 0.
> -
> -  @param  ECX  MSR_IA32_FIXED_CTR0 (0x00000309)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR0);
> -  AsmWriteMsr64 (MSR_IA32_FIXED_CTR0, Msr);
> -  @endcode
> -  @note MSR_IA32_FIXED_CTR0 is defined as IA32_FIXED_CTR0 in SDM.
> -**/
> -#define MSR_IA32_FIXED_CTR0                      0x00000309
> -
> -
> -/**
> -  Fixed-Function Performance Counter 1 (R/W): Counts
> CPU_CLK_Unhalted.Core. If
> -  CPUID.0AH: EDX[4:0] > 1.
> -
> -  @param  ECX  MSR_IA32_FIXED_CTR1 (0x0000030A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR1);
> -  AsmWriteMsr64 (MSR_IA32_FIXED_CTR1, Msr);
> -  @endcode
> -  @note MSR_IA32_FIXED_CTR1 is defined as IA32_FIXED_CTR1 in SDM.
> -**/
> -#define MSR_IA32_FIXED_CTR1                      0x0000030A
> -
> -
> -/**
> -  Fixed-Function Performance Counter 2 (R/W): Counts
> CPU_CLK_Unhalted.Ref. If
> -  CPUID.0AH: EDX[4:0] > 2.
> -
> -  @param  ECX  MSR_IA32_FIXED_CTR2 (0x0000030B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR2);
> -  AsmWriteMsr64 (MSR_IA32_FIXED_CTR2, Msr);
> -  @endcode
> -  @note MSR_IA32_FIXED_CTR2 is defined as IA32_FIXED_CTR2 in SDM.
> -**/
> -#define MSR_IA32_FIXED_CTR2                      0x0000030B
> -
> -
> -/**
> -  RO. If CPUID.01H: ECX[15] = 1.
> -
> -  @param  ECX  MSR_IA32_PERF_CAPABILITIES (0x00000345)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_CAPABILITIES_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CAPABILITIES);
> -  AsmWriteMsr64 (MSR_IA32_PERF_CAPABILITIES, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_CAPABILITIES is defined as
> IA32_PERF_CAPABILITIES in SDM.
> -**/
> -#define MSR_IA32_PERF_CAPABILITIES               0x00000345
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PERF_CAPABILITIES
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 5:0] LBR format.
> -    ///
> -    UINT32  LBR_FMT:6;
> -    ///
> -    /// [Bit 6] PEBS Trap.
> -    ///
> -    UINT32  PEBS_TRAP:1;
> -    ///
> -    /// [Bit 7] PEBSSaveArchRegs.
> -    ///
> -    UINT32  PEBS_ARCH_REG:1;
> -    ///
> -    /// [Bits 11:8] PEBS Record Format.
> -    ///
> -    UINT32  PEBS_REC_FMT:4;
> -    ///
> -    /// [Bit 12] 1: Freeze while SMM is supported.
> -    ///
> -    UINT32  SMM_FREEZE:1;
> -    ///
> -    /// [Bit 13] 1: Full width of counter writable via IA32_A_PMCx.
> -    ///
> -    UINT32  FW_WRITE:1;
> -    UINT32  Reserved1:18;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_CAPABILITIES_REGISTER;
> -
> -
> -/**
> -  Fixed-Function Performance Counter Control (R/W) Counter increments
> while
> -  the results of ANDing respective enable bit in IA32_PERF_GLOBAL_CTRL
> with
> -  the corresponding OS or USR bits in this MSR is true. If CPUID.0AH: EAX[7:0]
> -  > 1.
> -
> -  @param  ECX  MSR_IA32_FIXED_CTR_CTRL (0x0000038D)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_FIXED_CTR_CTRL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FIXED_CTR_CTRL);
> -  AsmWriteMsr64 (MSR_IA32_FIXED_CTR_CTRL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_FIXED_CTR_CTRL is defined as IA32_FIXED_CTR_CTRL in
> SDM.
> -**/
> -#define MSR_IA32_FIXED_CTR_CTRL                  0x0000038D
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_FIXED_CTR_CTRL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] EN0_OS: Enable Fixed Counter 0 to count while CPL = 0.
> -    ///
> -    UINT32  EN0_OS:1;
> -    ///
> -    /// [Bit 1] EN0_Usr: Enable Fixed Counter 0 to count while CPL > 0.
> -    ///
> -    UINT32  EN0_Usr:1;
> -    ///
> -    /// [Bit 2] AnyThread: When set to 1, it enables counting the associated
> -    /// event conditions occurring across all logical processors sharing a
> -    /// processor core. When set to 0, the counter only increments the
> -    /// associated event conditions occurring in the logical processor which
> -    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
> -    ///
> -    UINT32  AnyThread0:1;
> -    ///
> -    /// [Bit 3] EN0_PMI: Enable PMI when fixed counter 0 overflows.
> -    ///
> -    UINT32  EN0_PMI:1;
> -    ///
> -    /// [Bit 4] EN1_OS: Enable Fixed Counter 1 to count while CPL = 0.
> -    ///
> -    UINT32  EN1_OS:1;
> -    ///
> -    /// [Bit 5] EN1_Usr: Enable Fixed Counter 1 to count while CPL > 0.
> -    ///
> -    UINT32  EN1_Usr:1;
> -    ///
> -    /// [Bit 6] AnyThread: When set to 1, it enables counting the associated
> -    /// event conditions occurring across all logical processors sharing a
> -    /// processor core. When set to 0, the counter only increments the
> -    /// associated event conditions occurring in the logical processor which
> -    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
> -    ///
> -    UINT32  AnyThread1:1;
> -    ///
> -    /// [Bit 7] EN1_PMI: Enable PMI when fixed counter 1 overflows.
> -    ///
> -    UINT32  EN1_PMI:1;
> -    ///
> -    /// [Bit 8] EN2_OS: Enable Fixed Counter 2 to count while CPL = 0.
> -    ///
> -    UINT32  EN2_OS:1;
> -    ///
> -    /// [Bit 9] EN2_Usr: Enable Fixed Counter 2 to count while CPL > 0.
> -    ///
> -    UINT32  EN2_Usr:1;
> -    ///
> -    /// [Bit 10] AnyThread: When set to 1, it enables counting the associated
> -    /// event conditions occurring across all logical processors sharing a
> -    /// processor core. When set to 0, the counter only increments the
> -    /// associated event conditions occurring in the logical processor which
> -    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
> -    ///
> -    UINT32  AnyThread2:1;
> -    ///
> -    /// [Bit 11] EN2_PMI: Enable PMI when fixed counter 2 overflows.
> -    ///
> -    UINT32  EN2_PMI:1;
> -    UINT32  Reserved1:20;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_FIXED_CTR_CTRL_REGISTER;
> -
> -
> -/**
> -  Global Performance Counter Status (RO). If CPUID.0AH: EAX[7:0] > 0.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS (0x0000038E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_STATUS is defined as
> IA32_PERF_GLOBAL_STATUS in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_STATUS              0x0000038E
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PERF_GLOBAL_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Ovf_PMC0: Overflow status of IA32_PMC0. If CPUID.0AH:
> -    /// EAX[15:8] > 0.
> -    ///
> -    UINT32  Ovf_PMC0:1;
> -    ///
> -    /// [Bit 1] Ovf_PMC1: Overflow status of IA32_PMC1. If CPUID.0AH:
> -    /// EAX[15:8] > 1.
> -    ///
> -    UINT32  Ovf_PMC1:1;
> -    ///
> -    /// [Bit 2] Ovf_PMC2: Overflow status of IA32_PMC2. If CPUID.0AH:
> -    /// EAX[15:8] > 2.
> -    ///
> -    UINT32  Ovf_PMC2:1;
> -    ///
> -    /// [Bit 3] Ovf_PMC3: Overflow status of IA32_PMC3. If CPUID.0AH:
> -    /// EAX[15:8] > 3.
> -    ///
> -    UINT32  Ovf_PMC3:1;
> -    UINT32  Reserved1:28;
> -    ///
> -    /// [Bit 32] Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0. If
> -    /// CPUID.0AH: EAX[7:0] > 1.
> -    ///
> -    UINT32  Ovf_FixedCtr0:1;
> -    ///
> -    /// [Bit 33] Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1. If
> -    /// CPUID.0AH: EAX[7:0] > 1.
> -    ///
> -    UINT32  Ovf_FixedCtr1:1;
> -    ///
> -    /// [Bit 34] Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2. If
> -    /// CPUID.0AH: EAX[7:0] > 1.
> -    ///
> -    UINT32  Ovf_FixedCtr2:1;
> -    UINT32  Reserved2:20;
> -    ///
> -    /// [Bit 55] Trace_ToPA_PMI: A PMI occurred due to a ToPA entry memory
> -    /// buffer was completely filled. If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
> -    /// && IA32_RTIT_CTL.ToPA = 1.
> -    ///
> -    UINT32  Trace_ToPA_PMI:1;
> -    UINT32  Reserved3:2;
> -    ///
> -    /// [Bit 58] LBR_Frz: LBRs are frozen due to -
> -    /// IA32_DEBUGCTL.FREEZE_LBR_ON_PMI=1, -  The LBR stack overflowed.
> If
> -    /// CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  LBR_Frz:1;
> -    ///
> -    /// [Bit 59] CTR_Frz: Performance counters in the core PMU are frozen
> due
> -    /// to -  IA32_DEBUGCTL.FREEZE_PERFMON_ON_ PMI=1, -  one or more
> core PMU
> -    /// counters overflowed. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  CTR_Frz:1;
> -    ///
> -    /// [Bit 60] ASCI: Data in the performance counters in the core PMU may
> -    /// include contributions from the direct or indirect operation intel SGX
> -    /// to protect an enclave. If CPUID.(EAX=07H, ECX=0):EBX[2] = 1.
> -    ///
> -    UINT32  ASCI:1;
> -    ///
> -    /// [Bit 61] Ovf_Uncore: Uncore counter overflow status. If CPUID.0AH:
> -    /// EAX[7:0] > 2.
> -    ///
> -    UINT32  Ovf_Uncore:1;
> -    ///
> -    /// [Bit 62] OvfBuf: DS SAVE area Buffer overflow status. If CPUID.0AH:
> -    /// EAX[7:0] > 0.
> -    ///
> -    UINT32  OvfBuf:1;
> -    ///
> -    /// [Bit 63] CondChgd: status bits of this register has changed. If
> -    /// CPUID.0AH: EAX[7:0] > 0.
> -    ///
> -    UINT32  CondChgd:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_STATUS_REGISTER;
> -
> -
> -/**
> -  Global Performance Counter Control (R/W) Counter increments while the
> result
> -  of ANDing respective enable bit in this MSR with the corresponding OS or
> USR
> -  bits in the general-purpose or fixed counter control MSR is true. If
> -  CPUID.0AH: EAX[7:0] > 0.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_CTRL (0x0000038F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_CTRL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_CTRL);
> -  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_CTRL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_CTRL is defined as
> IA32_PERF_GLOBAL_CTRL in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_CTRL                0x0000038F
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_CTRL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -///
> -  struct {
> -    ///
> -    /// [Bits 31:0] EN_PMCn. If CPUID.0AH: EAX[15:8] > n.
> -    /// Enable bitmask.  Only the first n-1 bits are valid.
> -    /// Bits n..31 are reserved.
> -    ///
> -    UINT32  EN_PMCn:32;
> -    ///
> -    /// [Bits 63:32] EN_FIXED_CTRn. If CPUID.0AH: EDX[4:0] > n.
> -    /// Enable bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 31:n are reserved.
> -    ///
> -    UINT32  EN_FIXED_CTRn:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_CTRL_REGISTER;
> -
> -
> -/**
> -  Global Performance Counter Overflow Control (R/W). If CPUID.0AH:
> EAX[7:0] >
> -  0 && CPUID.0AH: EAX[7:0] <= 3.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_OVF_CTRL (0x00000390)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL);
> -  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_OVF_CTRL is defined as
> IA32_PERF_GLOBAL_OVF_CTRL in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_OVF_CTRL            0x00000390
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PERF_GLOBAL_OVF_CTRL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
> -    /// Clear bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 31:n are reserved.
> -    ///
> -    UINT32  Ovf_PMCn:32;
> -    ///
> -    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
> -    /// If CPUID.0AH: EDX[4:0] > n.
> -    /// Clear bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 22:n are reserved.
> -    ///
> -    UINT32  Ovf_FIXED_CTRn:23;
> -    ///
> -    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
> -    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1.
> -    ///
> -    UINT32  Trace_ToPA_PMI:1;
> -    UINT32  Reserved2:5;
> -    ///
> -    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
> -    /// Display Model 06_2EH.
> -    ///
> -    UINT32  Ovf_Uncore:1;
> -    ///
> -    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
> -    ///
> -    UINT32  OvfBuf:1;
> -    ///
> -    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
> -    ///
> -    UINT32  CondChgd:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER;
> -
> -
> -/**
> -  Global Performance Counter Overflow Reset Control (R/W). If CPUID.0AH:
> -  EAX[7:0] > 3.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_RESET (0x00000390)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET);
> -  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_STATUS_RESET is defined as
> IA32_PERF_GLOBAL_STATUS_RESET in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_STATUS_RESET        0x00000390
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PERF_GLOBAL_STATUS_RESET
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
> -    /// Clear bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 31:n are reserved.
> -    ///
> -    UINT32  Ovf_PMCn:32;
> -    ///
> -    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
> -    /// If CPUID.0AH: EDX[4:0] > n.
> -    /// Clear bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 22:n are reserved.
> -    ///
> -    UINT32  Ovf_FIXED_CTRn:23;
> -    ///
> -    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
> -    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA[8] = 1.
> -    ///
> -    UINT32  Trace_ToPA_PMI:1;
> -    UINT32  Reserved2:2;
> -    ///
> -    /// [Bit 58] Set 1 to Clear LBR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  LBR_Frz:1;
> -    ///
> -    /// [Bit 59] Set 1 to Clear CTR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  CTR_Frz:1;
> -    ///
> -    /// [Bit 60] Set 1 to Clear ASCI bit. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  ASCI:1;
> -    ///
> -    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
> -    /// Display Model 06_2EH.
> -    ///
> -    UINT32  Ovf_Uncore:1;
> -    ///
> -    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
> -    ///
> -    UINT32  OvfBuf:1;
> -    ///
> -    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
> -    ///
> -    UINT32  CondChgd:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER;
> -
> -
> -/**
> -  Global Performance Counter Overflow Set Control (R/W). If CPUID.0AH:
> -  EAX[7:0] > 3.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_SET (0x00000391)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET);
> -  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_STATUS_SET is defined as
> IA32_PERF_GLOBAL_STATUS_SET in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_STATUS_SET          0x00000391
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PERF_GLOBAL_STATUS_SET
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Set 1 to cause Ovf_PMCn = 1. If CPUID.0AH: EAX[7:0] > n.
> -    /// Set bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 31:n are reserved.
> -    ///
> -    UINT32  Ovf_PMCn:32;
> -    ///
> -    /// [Bits 54:32] Set 1 to cause Ovf_FIXED_CTRn = 1.
> -    /// If CPUID.0AH: EAX[7:0] > n.
> -    /// Set bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 22:n are reserved.
> -    ///
> -    UINT32  Ovf_FIXED_CTRn:23;
> -    ///
> -    /// [Bit 55] Set 1 to cause Trace_ToPA_PMI = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  Trace_ToPA_PMI:1;
> -    UINT32  Reserved2:2;
> -    ///
> -    /// [Bit 58] Set 1 to cause LBR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  LBR_Frz:1;
> -    ///
> -    /// [Bit 59] Set 1 to cause CTR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  CTR_Frz:1;
> -    ///
> -    /// [Bit 60] Set 1 to cause ASCI = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  ASCI:1;
> -    ///
> -    /// [Bit 61] Set 1 to cause Ovf_Uncore = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  Ovf_Uncore:1;
> -    ///
> -    /// [Bit 62] Set 1 to cause OvfBuf = 1. If CPUID.0AH: EAX[7:0] > 3.
> -    ///
> -    UINT32  OvfBuf:1;
> -    UINT32  Reserved3:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER;
> -
> -
> -/**
> -  Indicator of core perfmon interface is in use (RO). If CPUID.0AH: EAX[7:0] >
> -  3.
> -
> -  @param  ECX  MSR_IA32_PERF_GLOBAL_INUSE (0x00000392)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PERF_GLOBAL_INUSE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_INUSE);
> -  @endcode
> -  @note MSR_IA32_PERF_GLOBAL_INUSE is defined as
> IA32_PERF_GLOBAL_INUSE in SDM.
> -**/
> -#define MSR_IA32_PERF_GLOBAL_INUSE               0x00000392
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_PERF_GLOBAL_INUSE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] IA32_PERFEVTSELn in use.  If CPUID.0AH: EAX[7:0] > n.
> -    /// Status bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 31:n are reserved.
> -    ///
> -    UINT32  IA32_PERFEVTSELn:32;
> -    ///
> -    /// [Bits 62:32] IA32_FIXED_CTRn in use.
> -    /// If CPUID.0AH: EAX[7:0] > n.
> -    /// Status bitmask.  Only the first n-1 bits are valid.
> -    /// Bits 30:n are reserved.
> -    ///
> -    UINT32  IA32_FIXED_CTRn:31;
> -    ///
> -    /// [Bit 63] PMI in use.
> -    ///
> -    UINT32  PMI:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PERF_GLOBAL_INUSE_REGISTER;
> -
> -
> -/**
> -  PEBS Control (R/W).
> -
> -  @param  ECX  MSR_IA32_PEBS_ENABLE (0x000003F1)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PEBS_ENABLE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PEBS_ENABLE);
> -  AsmWriteMsr64 (MSR_IA32_PEBS_ENABLE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PEBS_ENABLE is defined as IA32_PEBS_ENABLE in SDM.
> -**/
> -#define MSR_IA32_PEBS_ENABLE                     0x000003F1
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PEBS_ENABLE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Enable PEBS on IA32_PMC0. Introduced at Display Family /
> -    /// Display Model 06_0FH.
> -    ///
> -    UINT32  Enable:1;
> -    ///
> -    /// [Bits 3:1] Reserved or Model specific.
> -    ///
> -    UINT32  Reserved1:3;
> -    UINT32  Reserved2:28;
> -    ///
> -    /// [Bits 35:32] Reserved or Model specific.
> -    ///
> -    UINT32  Reserved3:4;
> -    UINT32  Reserved4:28;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PEBS_ENABLE_REGISTER;
> -
> -
> -/**
> -  MCn_CTL. If IA32_MCG_CAP.CNT > n.
> -
> -  @param  ECX  MSR_IA32_MCn_CTL
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MC0_CTL);
> -  AsmWriteMsr64 (MSR_IA32_MC0_CTL, Msr);
> -  @endcode
> -  @note MSR_IA32_MC0_CTL  is defined as IA32_MC0_CTL  in SDM.
> -        MSR_IA32_MC1_CTL  is defined as IA32_MC1_CTL  in SDM.
> -        MSR_IA32_MC2_CTL  is defined as IA32_MC2_CTL  in SDM.
> -        MSR_IA32_MC3_CTL  is defined as IA32_MC3_CTL  in SDM.
> -        MSR_IA32_MC4_CTL  is defined as IA32_MC4_CTL  in SDM.
> -        MSR_IA32_MC5_CTL  is defined as IA32_MC5_CTL  in SDM.
> -        MSR_IA32_MC6_CTL  is defined as IA32_MC6_CTL  in SDM.
> -        MSR_IA32_MC7_CTL  is defined as IA32_MC7_CTL  in SDM.
> -        MSR_IA32_MC8_CTL  is defined as IA32_MC8_CTL  in SDM.
> -        MSR_IA32_MC9_CTL  is defined as IA32_MC9_CTL  in SDM.
> -        MSR_IA32_MC10_CTL is defined as IA32_MC10_CTL in SDM.
> -        MSR_IA32_MC11_CTL is defined as IA32_MC11_CTL in SDM.
> -        MSR_IA32_MC12_CTL is defined as IA32_MC12_CTL in SDM.
> -        MSR_IA32_MC13_CTL is defined as IA32_MC13_CTL in SDM.
> -        MSR_IA32_MC14_CTL is defined as IA32_MC14_CTL in SDM.
> -        MSR_IA32_MC15_CTL is defined as IA32_MC15_CTL in SDM.
> -        MSR_IA32_MC16_CTL is defined as IA32_MC16_CTL in SDM.
> -        MSR_IA32_MC17_CTL is defined as IA32_MC17_CTL in SDM.
> -        MSR_IA32_MC18_CTL is defined as IA32_MC18_CTL in SDM.
> -        MSR_IA32_MC19_CTL is defined as IA32_MC19_CTL in SDM.
> -        MSR_IA32_MC20_CTL is defined as IA32_MC20_CTL in SDM.
> -        MSR_IA32_MC21_CTL is defined as IA32_MC21_CTL in SDM.
> -        MSR_IA32_MC22_CTL is defined as IA32_MC22_CTL in SDM.
> -        MSR_IA32_MC23_CTL is defined as IA32_MC23_CTL in SDM.
> -        MSR_IA32_MC24_CTL is defined as IA32_MC24_CTL in SDM.
> -        MSR_IA32_MC25_CTL is defined as IA32_MC25_CTL in SDM.
> -        MSR_IA32_MC26_CTL is defined as IA32_MC26_CTL in SDM.
> -        MSR_IA32_MC27_CTL is defined as IA32_MC27_CTL in SDM.
> -        MSR_IA32_MC28_CTL is defined as IA32_MC28_CTL in SDM.
> -  @{
> -**/
> -#define MSR_IA32_MC0_CTL                         0x00000400
> -#define MSR_IA32_MC1_CTL                         0x00000404
> -#define MSR_IA32_MC2_CTL                         0x00000408
> -#define MSR_IA32_MC3_CTL                         0x0000040C
> -#define MSR_IA32_MC4_CTL                         0x00000410
> -#define MSR_IA32_MC5_CTL                         0x00000414
> -#define MSR_IA32_MC6_CTL                         0x00000418
> -#define MSR_IA32_MC7_CTL                         0x0000041C
> -#define MSR_IA32_MC8_CTL                         0x00000420
> -#define MSR_IA32_MC9_CTL                         0x00000424
> -#define MSR_IA32_MC10_CTL                        0x00000428
> -#define MSR_IA32_MC11_CTL                        0x0000042C
> -#define MSR_IA32_MC12_CTL                        0x00000430
> -#define MSR_IA32_MC13_CTL                        0x00000434
> -#define MSR_IA32_MC14_CTL                        0x00000438
> -#define MSR_IA32_MC15_CTL                        0x0000043C
> -#define MSR_IA32_MC16_CTL                        0x00000440
> -#define MSR_IA32_MC17_CTL                        0x00000444
> -#define MSR_IA32_MC18_CTL                        0x00000448
> -#define MSR_IA32_MC19_CTL                        0x0000044C
> -#define MSR_IA32_MC20_CTL                        0x00000450
> -#define MSR_IA32_MC21_CTL                        0x00000454
> -#define MSR_IA32_MC22_CTL                        0x00000458
> -#define MSR_IA32_MC23_CTL                        0x0000045C
> -#define MSR_IA32_MC24_CTL                        0x00000460
> -#define MSR_IA32_MC25_CTL                        0x00000464
> -#define MSR_IA32_MC26_CTL                        0x00000468
> -#define MSR_IA32_MC27_CTL                        0x0000046C
> -#define MSR_IA32_MC28_CTL                        0x00000470
> -/// @}
> -
> -
> -/**
> -  MCn_STATUS. If IA32_MCG_CAP.CNT > n.
> -
> -  @param  ECX  MSR_IA32_MCn_STATUS
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MC0_STATUS);
> -  AsmWriteMsr64 (MSR_IA32_MC0_STATUS, Msr);
> -  @endcode
> -  @note MSR_IA32_MC0_STATUS  is defined as IA32_MC0_STATUS  in SDM.
> -        MSR_IA32_MC1_STATUS  is defined as IA32_MC1_STATUS  in SDM.
> -        MSR_IA32_MC2_STATUS  is defined as IA32_MC2_STATUS  in SDM.
> -        MSR_IA32_MC3_STATUS  is defined as IA32_MC3_STATUS  in SDM.
> -        MSR_IA32_MC4_STATUS  is defined as IA32_MC4_STATUS  in SDM.
> -        MSR_IA32_MC5_STATUS  is defined as IA32_MC5_STATUS  in SDM.
> -        MSR_IA32_MC6_STATUS  is defined as IA32_MC6_STATUS  in SDM.
> -        MSR_IA32_MC7_STATUS  is defined as IA32_MC7_STATUS  in SDM.
> -        MSR_IA32_MC8_STATUS  is defined as IA32_MC8_STATUS  in SDM.
> -        MSR_IA32_MC9_STATUS  is defined as IA32_MC9_STATUS  in SDM.
> -        MSR_IA32_MC10_STATUS is defined as IA32_MC10_STATUS in SDM.
> -        MSR_IA32_MC11_STATUS is defined as IA32_MC11_STATUS in SDM.
> -        MSR_IA32_MC12_STATUS is defined as IA32_MC12_STATUS in SDM.
> -        MSR_IA32_MC13_STATUS is defined as IA32_MC13_STATUS in SDM.
> -        MSR_IA32_MC14_STATUS is defined as IA32_MC14_STATUS in SDM.
> -        MSR_IA32_MC15_STATUS is defined as IA32_MC15_STATUS in SDM.
> -        MSR_IA32_MC16_STATUS is defined as IA32_MC16_STATUS in SDM.
> -        MSR_IA32_MC17_STATUS is defined as IA32_MC17_STATUS in SDM.
> -        MSR_IA32_MC18_STATUS is defined as IA32_MC18_STATUS in SDM.
> -        MSR_IA32_MC19_STATUS is defined as IA32_MC19_STATUS in SDM.
> -        MSR_IA32_MC20_STATUS is defined as IA32_MC20_STATUS in SDM.
> -        MSR_IA32_MC21_STATUS is defined as IA32_MC21_STATUS in SDM.
> -        MSR_IA32_MC22_STATUS is defined as IA32_MC22_STATUS in SDM.
> -        MSR_IA32_MC23_STATUS is defined as IA32_MC23_STATUS in SDM.
> -        MSR_IA32_MC24_STATUS is defined as IA32_MC24_STATUS in SDM.
> -        MSR_IA32_MC25_STATUS is defined as IA32_MC25_STATUS in SDM.
> -        MSR_IA32_MC26_STATUS is defined as IA32_MC26_STATUS in SDM.
> -        MSR_IA32_MC27_STATUS is defined as IA32_MC27_STATUS in SDM.
> -        MSR_IA32_MC28_STATUS is defined as IA32_MC28_STATUS in SDM.
> -  @{
> -**/
> -#define MSR_IA32_MC0_STATUS                      0x00000401
> -#define MSR_IA32_MC1_STATUS                      0x00000405
> -#define MSR_IA32_MC2_STATUS                      0x00000409
> -#define MSR_IA32_MC3_STATUS                      0x0000040D
> -#define MSR_IA32_MC4_STATUS                      0x00000411
> -#define MSR_IA32_MC5_STATUS                      0x00000415
> -#define MSR_IA32_MC6_STATUS                      0x00000419
> -#define MSR_IA32_MC7_STATUS                      0x0000041D
> -#define MSR_IA32_MC8_STATUS                      0x00000421
> -#define MSR_IA32_MC9_STATUS                      0x00000425
> -#define MSR_IA32_MC10_STATUS                     0x00000429
> -#define MSR_IA32_MC11_STATUS                     0x0000042D
> -#define MSR_IA32_MC12_STATUS                     0x00000431
> -#define MSR_IA32_MC13_STATUS                     0x00000435
> -#define MSR_IA32_MC14_STATUS                     0x00000439
> -#define MSR_IA32_MC15_STATUS                     0x0000043D
> -#define MSR_IA32_MC16_STATUS                     0x00000441
> -#define MSR_IA32_MC17_STATUS                     0x00000445
> -#define MSR_IA32_MC18_STATUS                     0x00000449
> -#define MSR_IA32_MC19_STATUS                     0x0000044D
> -#define MSR_IA32_MC20_STATUS                     0x00000451
> -#define MSR_IA32_MC21_STATUS                     0x00000455
> -#define MSR_IA32_MC22_STATUS                     0x00000459
> -#define MSR_IA32_MC23_STATUS                     0x0000045D
> -#define MSR_IA32_MC24_STATUS                     0x00000461
> -#define MSR_IA32_MC25_STATUS                     0x00000465
> -#define MSR_IA32_MC26_STATUS                     0x00000469
> -#define MSR_IA32_MC27_STATUS                     0x0000046D
> -#define MSR_IA32_MC28_STATUS                     0x00000471
> -/// @}
> -
> -
> -/**
> -  MCn_ADDR. If IA32_MCG_CAP.CNT > n.
> -
> -  @param  ECX  MSR_IA32_MCn_ADDR
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MC0_ADDR);
> -  AsmWriteMsr64 (MSR_IA32_MC0_ADDR, Msr);
> -  @endcode
> -  @note MSR_IA32_MC0_ADDR  is defined as IA32_MC0_ADDR  in SDM.
> -        MSR_IA32_MC1_ADDR  is defined as IA32_MC1_ADDR  in SDM.
> -        MSR_IA32_MC2_ADDR  is defined as IA32_MC2_ADDR  in SDM.
> -        MSR_IA32_MC3_ADDR  is defined as IA32_MC3_ADDR  in SDM.
> -        MSR_IA32_MC4_ADDR  is defined as IA32_MC4_ADDR  in SDM.
> -        MSR_IA32_MC5_ADDR  is defined as IA32_MC5_ADDR  in SDM.
> -        MSR_IA32_MC6_ADDR  is defined as IA32_MC6_ADDR  in SDM.
> -        MSR_IA32_MC7_ADDR  is defined as IA32_MC7_ADDR  in SDM.
> -        MSR_IA32_MC8_ADDR  is defined as IA32_MC8_ADDR  in SDM.
> -        MSR_IA32_MC9_ADDR  is defined as IA32_MC9_ADDR  in SDM.
> -        MSR_IA32_MC10_ADDR is defined as IA32_MC10_ADDR in SDM.
> -        MSR_IA32_MC11_ADDR is defined as IA32_MC11_ADDR in SDM.
> -        MSR_IA32_MC12_ADDR is defined as IA32_MC12_ADDR in SDM.
> -        MSR_IA32_MC13_ADDR is defined as IA32_MC13_ADDR in SDM.
> -        MSR_IA32_MC14_ADDR is defined as IA32_MC14_ADDR in SDM.
> -        MSR_IA32_MC15_ADDR is defined as IA32_MC15_ADDR in SDM.
> -        MSR_IA32_MC16_ADDR is defined as IA32_MC16_ADDR in SDM.
> -        MSR_IA32_MC17_ADDR is defined as IA32_MC17_ADDR in SDM.
> -        MSR_IA32_MC18_ADDR is defined as IA32_MC18_ADDR in SDM.
> -        MSR_IA32_MC19_ADDR is defined as IA32_MC19_ADDR in SDM.
> -        MSR_IA32_MC20_ADDR is defined as IA32_MC20_ADDR in SDM.
> -        MSR_IA32_MC21_ADDR is defined as IA32_MC21_ADDR in SDM.
> -        MSR_IA32_MC22_ADDR is defined as IA32_MC22_ADDR in SDM.
> -        MSR_IA32_MC23_ADDR is defined as IA32_MC23_ADDR in SDM.
> -        MSR_IA32_MC24_ADDR is defined as IA32_MC24_ADDR in SDM.
> -        MSR_IA32_MC25_ADDR is defined as IA32_MC25_ADDR in SDM.
> -        MSR_IA32_MC26_ADDR is defined as IA32_MC26_ADDR in SDM.
> -        MSR_IA32_MC27_ADDR is defined as IA32_MC27_ADDR in SDM.
> -        MSR_IA32_MC28_ADDR is defined as IA32_MC28_ADDR in SDM.
> -  @{
> -**/
> -#define MSR_IA32_MC0_ADDR                        0x00000402
> -#define MSR_IA32_MC1_ADDR                        0x00000406
> -#define MSR_IA32_MC2_ADDR                        0x0000040A
> -#define MSR_IA32_MC3_ADDR                        0x0000040E
> -#define MSR_IA32_MC4_ADDR                        0x00000412
> -#define MSR_IA32_MC5_ADDR                        0x00000416
> -#define MSR_IA32_MC6_ADDR                        0x0000041A
> -#define MSR_IA32_MC7_ADDR                        0x0000041E
> -#define MSR_IA32_MC8_ADDR                        0x00000422
> -#define MSR_IA32_MC9_ADDR                        0x00000426
> -#define MSR_IA32_MC10_ADDR                       0x0000042A
> -#define MSR_IA32_MC11_ADDR                       0x0000042E
> -#define MSR_IA32_MC12_ADDR                       0x00000432
> -#define MSR_IA32_MC13_ADDR                       0x00000436
> -#define MSR_IA32_MC14_ADDR                       0x0000043A
> -#define MSR_IA32_MC15_ADDR                       0x0000043E
> -#define MSR_IA32_MC16_ADDR                       0x00000442
> -#define MSR_IA32_MC17_ADDR                       0x00000446
> -#define MSR_IA32_MC18_ADDR                       0x0000044A
> -#define MSR_IA32_MC19_ADDR                       0x0000044E
> -#define MSR_IA32_MC20_ADDR                       0x00000452
> -#define MSR_IA32_MC21_ADDR                       0x00000456
> -#define MSR_IA32_MC22_ADDR                       0x0000045A
> -#define MSR_IA32_MC23_ADDR                       0x0000045E
> -#define MSR_IA32_MC24_ADDR                       0x00000462
> -#define MSR_IA32_MC25_ADDR                       0x00000466
> -#define MSR_IA32_MC26_ADDR                       0x0000046A
> -#define MSR_IA32_MC27_ADDR                       0x0000046E
> -#define MSR_IA32_MC28_ADDR                       0x00000472
> -/// @}
> -
> -
> -/**
> -  MCn_MISC. If IA32_MCG_CAP.CNT > n.
> -
> -  @param  ECX  MSR_IA32_MCn_MISC
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_MC0_MISC);
> -  AsmWriteMsr64 (MSR_IA32_MC0_MISC, Msr);
> -  @endcode
> -  @note MSR_IA32_MC0_MISC  is defined as IA32_MC0_MISC  in SDM.
> -        MSR_IA32_MC1_MISC  is defined as IA32_MC1_MISC  in SDM.
> -        MSR_IA32_MC2_MISC  is defined as IA32_MC2_MISC  in SDM.
> -        MSR_IA32_MC3_MISC  is defined as IA32_MC3_MISC  in SDM.
> -        MSR_IA32_MC4_MISC  is defined as IA32_MC4_MISC  in SDM.
> -        MSR_IA32_MC5_MISC  is defined as IA32_MC5_MISC  in SDM.
> -        MSR_IA32_MC6_MISC  is defined as IA32_MC6_MISC  in SDM.
> -        MSR_IA32_MC7_MISC  is defined as IA32_MC7_MISC  in SDM.
> -        MSR_IA32_MC8_MISC  is defined as IA32_MC8_MISC  in SDM.
> -        MSR_IA32_MC9_MISC  is defined as IA32_MC9_MISC  in SDM.
> -        MSR_IA32_MC10_MISC is defined as IA32_MC10_MISC in SDM.
> -        MSR_IA32_MC11_MISC is defined as IA32_MC11_MISC in SDM.
> -        MSR_IA32_MC12_MISC is defined as IA32_MC12_MISC in SDM.
> -        MSR_IA32_MC13_MISC is defined as IA32_MC13_MISC in SDM.
> -        MSR_IA32_MC14_MISC is defined as IA32_MC14_MISC in SDM.
> -        MSR_IA32_MC15_MISC is defined as IA32_MC15_MISC in SDM.
> -        MSR_IA32_MC16_MISC is defined as IA32_MC16_MISC in SDM.
> -        MSR_IA32_MC17_MISC is defined as IA32_MC17_MISC in SDM.
> -        MSR_IA32_MC18_MISC is defined as IA32_MC18_MISC in SDM.
> -        MSR_IA32_MC19_MISC is defined as IA32_MC19_MISC in SDM.
> -        MSR_IA32_MC20_MISC is defined as IA32_MC20_MISC in SDM.
> -        MSR_IA32_MC21_MISC is defined as IA32_MC21_MISC in SDM.
> -        MSR_IA32_MC22_MISC is defined as IA32_MC22_MISC in SDM.
> -        MSR_IA32_MC23_MISC is defined as IA32_MC23_MISC in SDM.
> -        MSR_IA32_MC24_MISC is defined as IA32_MC24_MISC in SDM.
> -        MSR_IA32_MC25_MISC is defined as IA32_MC25_MISC in SDM.
> -        MSR_IA32_MC26_MISC is defined as IA32_MC26_MISC in SDM.
> -        MSR_IA32_MC27_MISC is defined as IA32_MC27_MISC in SDM.
> -        MSR_IA32_MC28_MISC is defined as IA32_MC28_MISC in SDM.
> -  @{
> -**/
> -#define MSR_IA32_MC0_MISC                        0x00000403
> -#define MSR_IA32_MC1_MISC                        0x00000407
> -#define MSR_IA32_MC2_MISC                        0x0000040B
> -#define MSR_IA32_MC3_MISC                        0x0000040F
> -#define MSR_IA32_MC4_MISC                        0x00000413
> -#define MSR_IA32_MC5_MISC                        0x00000417
> -#define MSR_IA32_MC6_MISC                        0x0000041B
> -#define MSR_IA32_MC7_MISC                        0x0000041F
> -#define MSR_IA32_MC8_MISC                        0x00000423
> -#define MSR_IA32_MC9_MISC                        0x00000427
> -#define MSR_IA32_MC10_MISC                       0x0000042B
> -#define MSR_IA32_MC11_MISC                       0x0000042F
> -#define MSR_IA32_MC12_MISC                       0x00000433
> -#define MSR_IA32_MC13_MISC                       0x00000437
> -#define MSR_IA32_MC14_MISC                       0x0000043B
> -#define MSR_IA32_MC15_MISC                       0x0000043F
> -#define MSR_IA32_MC16_MISC                       0x00000443
> -#define MSR_IA32_MC17_MISC                       0x00000447
> -#define MSR_IA32_MC18_MISC                       0x0000044B
> -#define MSR_IA32_MC19_MISC                       0x0000044F
> -#define MSR_IA32_MC20_MISC                       0x00000453
> -#define MSR_IA32_MC21_MISC                       0x00000457
> -#define MSR_IA32_MC22_MISC                       0x0000045B
> -#define MSR_IA32_MC23_MISC                       0x0000045F
> -#define MSR_IA32_MC24_MISC                       0x00000463
> -#define MSR_IA32_MC25_MISC                       0x00000467
> -#define MSR_IA32_MC26_MISC                       0x0000046B
> -#define MSR_IA32_MC27_MISC                       0x0000046F
> -#define MSR_IA32_MC28_MISC                       0x00000473
> -/// @}
> -
> -
> -/**
> -  Reporting Register of Basic VMX  Capabilities (R/O) See Appendix A.1,
> "Basic
> -  VMX Information.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_BASIC (0x00000480)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_VMX_BASIC_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_BASIC);
> -  @endcode
> -  @note MSR_IA32_VMX_BASIC is defined as IA32_VMX_BASIC in SDM.
> -**/
> -#define MSR_IA32_VMX_BASIC                       0x00000480
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_VMX_BASIC
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 30:0] VMCS revision identifier used by the processor.  Processors
> -    /// that use the same VMCS revision identifier use the same size for VMCS
> -    /// regions (see subsequent item on bits 44:32).
> -    ///
> -    /// @note Earlier versions of this manual specified that the VMCS revision
> -    /// identifier was a 32-bit field in bits 31:0 of this MSR. For all
> -    /// processors produced prior to this change, bit 31 of this MSR was read
> -    /// as 0.
> -    ///
> -    UINT32  VmcsRevisonId:31;
> -    UINT32  MustBeZero:1;
> -    ///
> -    /// [Bit 44:32] Reports the number of bytes that software should allocate
> -    /// for the VMXON region and any VMCS region.  It is a value greater than
> -    /// 0 and at most 4096(bit 44 is set if and only if bits 43:32 are clear).
> -    ///
> -    UINT32  VmcsSize:13;
> -    UINT32  Reserved1:3;
> -    ///
> -    /// [Bit 48] Indicates the width of the physical addresses that may be used
> -    /// for the VMXON region, each VMCS, and data structures referenced by
> -    /// pointers in a VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX
> -    /// transitions).  If the bit is 0, these addresses are limited to the
> -    /// processor's physical-address width.  If the bit is 1, these addresses
> -    /// are limited to 32 bits. This bit is always 0 for processors that
> -    /// support Intel 64 architecture.
> -    ///
> -    /// @note On processors that support Intel 64 architecture, the pointer
> -    /// must not set bits beyond the processor's physical address width.
> -    ///
> -    UINT32  VmcsAddressWidth:1;
> -    ///
> -    /// [Bit 49] If bit 49 is read as 1, the logical processor supports the
> -    /// dual-monitor treatment of system-management interrupts and
> -    /// system-management mode. See Section 34.15 for details of this
> treatment.
> -    ///
> -    UINT32  DualMonitor:1;
> -    ///
> -    /// [Bit 53:50] report the memory type that should be used for the VMCS,
> -    /// for data structures referenced by pointers in the VMCS (I/O bitmaps,
> -    /// virtual-APIC page, MSR areas for VMX transitions), and for the MSEG
> -    /// header. If software needs to access these data structures (e.g., to
> -    /// modify the contents of the MSR bitmaps), it can configure the paging
> -    /// structures to map them into the linear-address space. If it does so,
> -    /// it should establish mappings that use the memory type reported bits
> -    /// 53:50 in this MSR.
> -    ///
> -    /// As of this writing, all processors that support VMX operation indicate
> -    /// the write-back type.
> -    ///
> -    /// If software needs to access these data structures (e.g., to modify
> -    /// the contents of the MSR bitmaps), it can configure the paging
> -    /// structures to map them into the linear-address space. If it does so,
> -    /// it should establish mappings that use the memory type reported in this
> -    /// MSR.
> -    ///
> -    /// @note Alternatively, software may map any of these regions or
> -    /// structures with the UC memory type. (This may be necessary for the
> MSEG
> -    /// header.) Doing so is discouraged unless necessary as it will cause the
> -    /// performance of software accesses to those structures to suffer.
> -    ///
> -    ///
> -    UINT32  MemoryType:4;
> -    ///
> -    /// [Bit 54] If bit 54 is read as 1, the processor reports information in
> -    /// the VM-exit instruction-information field on VM exitsdue to execution
> -    /// of the INS and OUTS instructions (see Section 27.2.4). This reporting
> -    /// is done only if this bit is read as 1.
> -    ///
> -    UINT32  InsOutsReporting:1;
> -    ///
> -    /// [Bit 55] Bit 55 is read as 1 if any VMX controls that default to 1 may
> -    /// be cleared to 0. See Appendix A.2 for details. It also reports support
> -    /// for the VMX capability MSRs IA32_VMX_TRUE_PINBASED_CTLS,
> -    /// IA32_VMX_TRUE_PROCBASED_CTLS, IA32_VMX_TRUE_EXIT_CTLS,
> and
> -    /// IA32_VMX_TRUE_ENTRY_CTLS. See Appendix A.3.1, Appendix A.3.2,
> -    /// Appendix A.4, and Appendix A.5 for details.
> -    ///
> -    UINT32  VmxControls:1;
> -    UINT32  Reserved2:8;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_VMX_BASIC_REGISTER;
> -
> -///
> -/// @{ Define value for bit field
> MSR_IA32_VMX_BASIC_REGISTER.MemoryType
> -///
> -#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_UNCACHEABLE
> 0x00
> -#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_WRITE_BACK
> 0x06
> -///
> -/// @}
> -///
> -
> -
> -/**
> -  Capability Reporting Register of Pinbased VM-execution Controls (R/O) See
> -  Appendix A.3.1, "Pin-Based VMExecution Controls.". If CPUID.01H:ECX.[5]
> = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_PINBASED_CTLS (0x00000481)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_PINBASED_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_PINBASED_CTLS is defined as
> IA32_VMX_PINBASED_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_PINBASED_CTLS               0x00000481
> -
> -
> -/**
> -  Capability Reporting Register of Primary  Processor-based VM-execution
> -  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-
> Execution
> -  Controls.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS (0x00000482)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_PROCBASED_CTLS is defined as
> IA32_VMX_PROCBASED_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_PROCBASED_CTLS              0x00000482
> -
> -
> -/**
> -  Capability Reporting Register of VM-exit  Controls (R/O) See Appendix A.4,
> -  "VM-Exit Controls.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_EXIT_CTLS (0x00000483)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_EXIT_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_EXIT_CTLS is defined as IA32_VMX_EXIT_CTLS in
> SDM.
> -**/
> -#define MSR_IA32_VMX_EXIT_CTLS                   0x00000483
> -
> -
> -/**
> -  Capability Reporting Register of VMentry Controls (R/O) See Appendix A.5,
> -  "VM-Entry Controls.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_ENTRY_CTLS (0x00000484)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_ENTRY_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_ENTRY_CTLS is defined as IA32_VMX_ENTRY_CTLS
> in SDM.
> -**/
> -#define MSR_IA32_VMX_ENTRY_CTLS                  0x00000484
> -
> -
> -/**
> -  Reporting Register of Miscellaneous VMX Capabilities (R/O) See Appendix
> A.6,
> -  "Miscellaneous Data.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_MISC (0x00000485)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  IA32_VMX_MISC_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_MISC);
> -  @endcode
> -  @note MSR_IA32_VMX_MISC is defined as IA32_VMX_MISC in SDM.
> -**/
> -#define MSR_IA32_VMX_MISC                        0x00000485
> -
> -/**
> -  MSR information returned for MSR index #IA32_VMX_MISC
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 4:0] Reports a value X that specifies the relationship between the
> -    /// rate of the VMX-preemption timer and that of the timestamp counter
> (TSC).
> -    /// Specifically, the VMX-preemption timer (if it is active) counts down by
> -    /// 1 every time bit X in the TSC changes due to a TSC increment.
> -    ///
> -    UINT32  VmxTimerRatio:5;
> -    ///
> -    /// [Bit 5] If bit 5 is read as 1, VM exits store the value of IA32_EFER.LMA
> -    /// into the "IA-32e mode guest" VM-entry control;see Section 27.2 for
> more
> -    /// details. This bit is read as 1 on any logical processor that supports
> -    /// the 1-setting of the "unrestricted guest" VM-execution control.
> -    ///
> -    UINT32  VmExitEferLma:1;
> -    ///
> -    /// [Bit 6] reports (if set) the support for activity state 1 (HLT).
> -    ///
> -    UINT32  HltActivityStateSupported:1;
> -    ///
> -    /// [Bit 7] reports (if set) the support for activity state 2 (shutdown).
> -    ///
> -    UINT32  ShutdownActivityStateSupported:1;
> -    ///
> -    /// [Bit 8] reports (if set) the support for activity state 3 (wait-for-SIPI).
> -    ///
> -    UINT32  WaitForSipiActivityStateSupported:1;
> -    UINT32  Reserved1:5;
> -    ///
> -    /// [Bit 14] If read as 1, Intel(R) Processor Trace (Intel PT) can be used
> -    /// in VMX operation. If the processor supports Intel PT but does not allow
> -    /// it to be used in VMX operation, execution of VMXON clears
> -    /// IA32_RTIT_CTL.TraceEn (see "VMXON-Enter VMX Operation" in
> Chapter 30);
> -    /// any attempt to set that bit while in VMX operation (including VMX root
> -    /// operation) using the WRMSR instruction causes a general-protection
> -    /// exception.
> -    ///
> -    UINT32  ProcessorTraceSupported:1;
> -    ///
> -    /// [Bit 15] If read as 1, the RDMSR instruction can be used in system-
> -    /// management mode (SMM) to read the IA32_SMBASE MSR (MSR
> address 9EH).
> -    /// See Section 34.15.6.3.
> -    ///
> -    UINT32  SmBaseMsrSupported:1;
> -    ///
> -    /// [Bits 24:16] Indicate the number of CR3-target values supported by the
> -    /// processor. This number is a value between 0 and 256, inclusive (bit 24
> -    /// is set if and only if bits 23:16 are clear).
> -    ///
> -    UINT32  NumberOfCr3TargetValues:9;
> -    ///
> -    /// [Bit 27:25] Bits 27:25 is used to compute the recommended maximum
> -    /// number of MSRs that should appear in the VM-exit MSR-store list, the
> -    /// VM-exit MSR-load list, or the VM-entry MSR-load list. Specifically, if
> -    /// the value bits 27:25 of IA32_VMX_MISC is N, then 512 * (N + 1) is the
> -    /// recommended maximum number of MSRs to be included in each list. If
> the
> -    /// limit is exceeded, undefined processor behavior may result (including a
> -    /// machine check during the VMX transition).
> -    ///
> -    UINT32  MsrStoreListMaximum:3;
> -    ///
> -    /// [Bit 28] If read as 1, bit 2 of the IA32_SMM_MONITOR_CTL can be set
> -    /// to 1. VMXOFF unblocks SMIs unless IA32_SMM_MONITOR_CTL[bit 2]
> is 1
> -    /// (see Section 34.14.4).
> -    ///
> -    UINT32  BlockSmiSupported:1;
> -    ///
> -    /// [Bit 29] read as 1, software can use VMWRITE to write to any
> supported
> -    /// field in the VMCS; otherwise, VMWRITE cannot be used to modify VM-
> exit
> -    /// information fields.
> -    ///
> -    UINT32  VmWriteSupported:1;
> -    ///
> -    /// [Bit 30] If read as 1, VM entry allows injection of a software
> -    /// interrupt, software exception, or privileged software exception with
> an
> -    /// instruction length of 0.
> -    ///
> -    UINT32  VmInjectSupported:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bits 63:32] Reports the 32-bit MSEG revision identifier used by the
> -    /// processor.
> -    ///
> -    UINT32  MsegRevisionIdentifier:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} IA32_VMX_MISC_REGISTER;
> -
> -
> -/**
> -  Capability Reporting Register of CR0 Bits Fixed to 0 (R/O) See Appendix A.7,
> -  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_CR0_FIXED0 (0x00000486)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED0);
> -  @endcode
> -  @note MSR_IA32_VMX_CR0_FIXED0 is defined as IA32_VMX_CR0_FIXED0
> in SDM.
> -**/
> -#define MSR_IA32_VMX_CR0_FIXED0                  0x00000486
> -
> -
> -/**
> -  Capability Reporting Register of CR0 Bits Fixed to 1 (R/O) See Appendix A.7,
> -  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_CR0_FIXED1 (0x00000487)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED1);
> -  @endcode
> -  @note MSR_IA32_VMX_CR0_FIXED1 is defined as IA32_VMX_CR0_FIXED1
> in SDM.
> -**/
> -#define MSR_IA32_VMX_CR0_FIXED1                  0x00000487
> -
> -
> -/**
> -  Capability Reporting Register of CR4 Bits Fixed to 0 (R/O) See Appendix A.8,
> -  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_CR4_FIXED0 (0x00000488)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED0);
> -  @endcode
> -  @note MSR_IA32_VMX_CR4_FIXED0 is defined as IA32_VMX_CR4_FIXED0
> in SDM.
> -**/
> -#define MSR_IA32_VMX_CR4_FIXED0                  0x00000488
> -
> -
> -/**
> -  Capability Reporting Register of CR4 Bits Fixed to 1 (R/O) See Appendix A.8,
> -  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_CR4_FIXED1 (0x00000489)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED1);
> -  @endcode
> -  @note MSR_IA32_VMX_CR4_FIXED1 is defined as IA32_VMX_CR4_FIXED1
> in SDM.
> -**/
> -#define MSR_IA32_VMX_CR4_FIXED1                  0x00000489
> -
> -
> -/**
> -  Capability Reporting Register of VMCS Field Enumeration (R/O) See
> Appendix
> -  A.9, "VMCS Enumeration.". If CPUID.01H:ECX.[5] = 1.
> -
> -  @param  ECX  MSR_IA32_VMX_VMCS_ENUM (0x0000048A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMCS_ENUM);
> -  @endcode
> -  @note MSR_IA32_VMX_VMCS_ENUM is defined as
> IA32_VMX_VMCS_ENUM in SDM.
> -**/
> -#define MSR_IA32_VMX_VMCS_ENUM                   0x0000048A
> -
> -
> -/**
> -  Capability Reporting Register of  Secondary Processor-based  VM-
> execution
> -  Controls (R/O) See Appendix A.3.3, "Secondary Processor- Based VM-
> Execution
> -  Controls.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C TLS[63]).
> -
> -  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS2 (0x0000048B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS2);
> -  @endcode
> -  @note MSR_IA32_VMX_PROCBASED_CTLS2 is defined as
> IA32_VMX_PROCBASED_CTLS2 in SDM.
> -**/
> -#define MSR_IA32_VMX_PROCBASED_CTLS2             0x0000048B
> -
> -
> -/**
> -  Capability Reporting Register of EPT and  VPID (R/O) See Appendix A.10,
> -  "VPID and EPT Capabilities.". If ( CPUID.01H:ECX.[5] &&
> IA32_VMX_PROCBASED_C
> -  TLS[63] && ( IA32_VMX_PROCBASED_C TLS2[33]
> IA32_VMX_PROCBASED_C TLS2[37]) ).
> -
> -  @param  ECX  MSR_IA32_VMX_EPT_VPID_CAP (0x0000048C)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_EPT_VPID_CAP);
> -  @endcode
> -  @note MSR_IA32_VMX_EPT_VPID_CAP is defined as
> IA32_VMX_EPT_VPID_CAP in SDM.
> -**/
> -#define MSR_IA32_VMX_EPT_VPID_CAP                0x0000048C
> -
> -
> -/**
> -  Capability Reporting Register of Pinbased VM-execution Flex Controls (R/O)
> -  See Appendix A.3.1, "Pin-Based VMExecution Controls.". If (
> -  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
> -
> -  @param  ECX  MSR_IA32_VMX_TRUE_PINBASED_CTLS (0x0000048D)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PINBASED_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_TRUE_PINBASED_CTLS is defined as
> IA32_VMX_TRUE_PINBASED_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_TRUE_PINBASED_CTLS          0x0000048D
> -
> -
> -/**
> -  Capability Reporting Register of Primary  Processor-based VM-execution
> Flex
> -  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-
> Execution
> -  Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
> -
> -  @param  ECX  MSR_IA32_VMX_TRUE_PROCBASED_CTLS (0x0000048E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PROCBASED_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_TRUE_PROCBASED_CTLS is defined as
> IA32_VMX_TRUE_PROCBASED_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS         0x0000048E
> -
> -
> -/**
> -  Capability Reporting Register of VM-exit  Flex Controls (R/O) See Appendix
> -  A.4, "VM-Exit Controls.". If( CPUID.01H:ECX.[5] = 1 &&
> IA32_VMX_BASIC[55] ).
> -
> -  @param  ECX  MSR_IA32_VMX_TRUE_EXIT_CTLS (0x0000048F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_EXIT_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_TRUE_EXIT_CTLS is defined as
> IA32_VMX_TRUE_EXIT_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_TRUE_EXIT_CTLS              0x0000048F
> -
> -
> -/**
> -  Capability Reporting Register of VMentry Flex Controls (R/O) See Appendix
> -  A.5, "VM-Entry Controls.". If( CPUID.01H:ECX.[5] = 1 &&
> IA32_VMX_BASIC[55] ).
> -
> -  @param  ECX  MSR_IA32_VMX_TRUE_ENTRY_CTLS (0x00000490)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_ENTRY_CTLS);
> -  @endcode
> -  @note MSR_IA32_VMX_TRUE_ENTRY_CTLS is defined as
> IA32_VMX_TRUE_ENTRY_CTLS in SDM.
> -**/
> -#define MSR_IA32_VMX_TRUE_ENTRY_CTLS             0x00000490
> -
> -
> -/**
> -  Capability Reporting Register of VMfunction Controls (R/O). If(
> -  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
> -
> -  @param  ECX  MSR_IA32_VMX_VMFUNC (0x00000491)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMFUNC);
> -  @endcode
> -  @note MSR_IA32_VMX_VMFUNC is defined as IA32_VMX_VMFUNC in
> SDM.
> -**/
> -#define MSR_IA32_VMX_VMFUNC                      0x00000491
> -
> -
> -/**
> -  Full Width Writable IA32_PMCn Alias (R/W). (If CPUID.0AH: EAX[15:8] > n)
> &&
> -  IA32_PERF_CAPABILITIES[ 13] = 1.
> -
> -  @param  ECX  MSR_IA32_A_PMCn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_A_PMC0);
> -  AsmWriteMsr64 (MSR_IA32_A_PMC0, Msr);
> -  @endcode
> -  @note MSR_IA32_A_PMC0 is defined as IA32_A_PMC0 in SDM.
> -        MSR_IA32_A_PMC1 is defined as IA32_A_PMC1 in SDM.
> -        MSR_IA32_A_PMC2 is defined as IA32_A_PMC2 in SDM.
> -        MSR_IA32_A_PMC3 is defined as IA32_A_PMC3 in SDM.
> -        MSR_IA32_A_PMC4 is defined as IA32_A_PMC4 in SDM.
> -        MSR_IA32_A_PMC5 is defined as IA32_A_PMC5 in SDM.
> -        MSR_IA32_A_PMC6 is defined as IA32_A_PMC6 in SDM.
> -        MSR_IA32_A_PMC7 is defined as IA32_A_PMC7 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_A_PMC0                          0x000004C1
> -#define MSR_IA32_A_PMC1                          0x000004C2
> -#define MSR_IA32_A_PMC2                          0x000004C3
> -#define MSR_IA32_A_PMC3                          0x000004C4
> -#define MSR_IA32_A_PMC4                          0x000004C5
> -#define MSR_IA32_A_PMC5                          0x000004C6
> -#define MSR_IA32_A_PMC6                          0x000004C7
> -#define MSR_IA32_A_PMC7                          0x000004C8
> -/// @}
> -
> -
> -/**
> -  (R/W). If IA32_MCG_CAP.LMCE_P =1.
> -
> -  @param  ECX  MSR_IA32_MCG_EXT_CTL (0x000004D0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_MCG_EXT_CTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_EXT_CTL);
> -  AsmWriteMsr64 (MSR_IA32_MCG_EXT_CTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_MCG_EXT_CTL is defined as IA32_MCG_EXT_CTL in SDM.
> -**/
> -#define MSR_IA32_MCG_EXT_CTL                     0x000004D0
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_MCG_EXT_CTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] LMCE_EN.
> -    ///
> -    UINT32  LMCE_EN:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_MCG_EXT_CTL_REGISTER;
> -
> -
> -/**
> -  Status and SVN Threshold of SGX Support for ACM (RO). If
> CPUID.(EAX=07H,
> -  ECX=0H): EBX[2] = 1.
> -
> -  @param  ECX  MSR_IA32_SGX_SVN_STATUS (0x00000500)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_SGX_SVN_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SGX_SVN_STATUS);
> -  @endcode
> -  @note MSR_IA32_SGX_SVN_STATUS is defined as
> IA32_SGX_SVN_STATUS in SDM.
> -**/
> -#define MSR_IA32_SGX_SVN_STATUS                  0x00000500
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_SGX_SVN_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Lock. See Section 41.11.3, "Interactions with Authenticated
> -    /// Code Modules (ACMs)".
> -    ///
> -    UINT32  Lock:1;
> -    UINT32  Reserved1:15;
> -    ///
> -    /// [Bits 23:16] SGX_SVN_SINIT. See Section 41.11.3, "Interactions with
> -    /// Authenticated Code Modules (ACMs)".
> -    ///
> -    UINT32  SGX_SVN_SINIT:8;
> -    UINT32  Reserved2:8;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_SGX_SVN_STATUS_REGISTER;
> -
> -
> -/**
> -  Trace Output Base Register (R/W). If ((CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
> -  && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1) (CPUID.(EAX=14H,ECX=0): ECX[2]
> = 1)
> -  ) ).
> -
> -  @param  ECX  MSR_IA32_RTIT_OUTPUT_BASE (0x00000560)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_OUTPUT_BASE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_BASE);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_BASE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_OUTPUT_BASE is defined as
> IA32_RTIT_OUTPUT_BASE in SDM.
> -**/
> -#define MSR_IA32_RTIT_OUTPUT_BASE                0x00000560
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_BASE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved:7;
> -    ///
> -    /// [Bits 31:7] Base physical address.
> -    ///
> -    UINT32  Base:25;
> -    ///
> -    /// [Bits 63:32] Base physical address.
> -    ///
> -    UINT32  BaseHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_OUTPUT_BASE_REGISTER;
> -
> -
> -/**
> -  Trace Output Mask Pointers Register (R/W). If ((CPUID.(EAX=07H,
> -  ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1)
> -  (CPUID.(EAX=14H,ECX=0): ECX[2] = 1) ) ).
> -
> -  @param  ECX  MSR_IA32_RTIT_OUTPUT_MASK_PTRS (0x00000561)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type
> MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_OUTPUT_MASK_PTRS is defined as
> IA32_RTIT_OUTPUT_MASK_PTRS in SDM.
> -**/
> -#define MSR_IA32_RTIT_OUTPUT_MASK_PTRS           0x00000561
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_RTIT_OUTPUT_MASK_PTRS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved:7;
> -    ///
> -    /// [Bits 31:7] MaskOrTableOffset.
> -    ///
> -    UINT32  MaskOrTableOffset:25;
> -    ///
> -    /// [Bits 63:32] Output Offset.
> -    ///
> -    UINT32  OutputOffset:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER;
> -
> -/**
> -  Format of ToPA table entries.
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] END. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  END:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 2] INT. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  INT:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bit 4] STOP. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  STOP:1;
> -    UINT32  Reserved3:1;
> -    ///
> -    /// [Bit 6:9] Indicates the size of the associated output region. See Section
> -    /// 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  Size:4;
> -    UINT32  Reserved4:2;
> -    ///
> -    /// [Bit 12:31] Output Region Base Physical Address low part.
> -    /// [Bit 12:31] Output Region Base Physical Address [12:63] value to match.
> -    /// ATTENTION: The size of the address field is determined by the
> processor's
> -    /// physical-address width (MAXPHYADDR) in bits, as reported in
> -    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
> -    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is
> reserved part.
> -    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  Base:20;
> -    ///
> -    /// [Bit 32:63] Output Region Base Physical Address high part.
> -    /// [Bit 32:63] Output Region Base Physical Address [12:63] value to match.
> -    /// ATTENTION: The size of the address field is determined by the
> processor's
> -    /// physical-address width (MAXPHYADDR) in bits, as reported in
> -    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
> -    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is
> reserved part.
> -    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
> -    ///
> -    UINT32  BaseHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} RTIT_TOPA_TABLE_ENTRY;
> -
> -///
> -/// The size of the associated output region usd by Topa.
> -///
> -typedef enum {
> -  RtitTopaMemorySize4K = 0,
> -  RtitTopaMemorySize8K,
> -  RtitTopaMemorySize16K,
> -  RtitTopaMemorySize32K,
> -  RtitTopaMemorySize64K,
> -  RtitTopaMemorySize128K,
> -  RtitTopaMemorySize256K,
> -  RtitTopaMemorySize512K,
> -  RtitTopaMemorySize1M,
> -  RtitTopaMemorySize2M,
> -  RtitTopaMemorySize4M,
> -  RtitTopaMemorySize8M,
> -  RtitTopaMemorySize16M,
> -  RtitTopaMemorySize32M,
> -  RtitTopaMemorySize64M,
> -  RtitTopaMemorySize128M
> -} RTIT_TOPA_MEMORY_SIZE;
> -
> -/**
> -  Trace Control Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
> -
> -  @param  ECX  MSR_IA32_RTIT_CTL (0x00000570)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_CTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CTL);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_CTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_CTL is defined as IA32_RTIT_CTL in SDM.
> -**/
> -#define MSR_IA32_RTIT_CTL                        0x00000570
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_RTIT_CTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] TraceEn.
> -    ///
> -    UINT32  TraceEn:1;
> -    ///
> -    /// [Bit 1] CYCEn. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
> -    ///
> -    UINT32  CYCEn:1;
> -    ///
> -    /// [Bit 2] OS.
> -    ///
> -    UINT32  OS:1;
> -    ///
> -    /// [Bit 3] User.
> -    ///
> -    UINT32  User:1;
> -    ///
> -    /// [Bit 4] PwrEvtEn.
> -    ///
> -    UINT32  PwrEvtEn:1;
> -    ///
> -    /// [Bit 5] FUPonPTW.
> -    ///
> -    UINT32  FUPonPTW:1;
> -    ///
> -    /// [Bit 6] FabricEn. If (CPUID.(EAX=07H, ECX=0):ECX[3] = 1).
> -    ///
> -    UINT32  FabricEn:1;
> -    ///
> -    /// [Bit 7] CR3 filter.
> -    ///
> -    UINT32  CR3:1;
> -    ///
> -    /// [Bit 8] ToPA.
> -    ///
> -    UINT32  ToPA:1;
> -    ///
> -    /// [Bit 9] MTCEn. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
> -    ///
> -    UINT32  MTCEn:1;
> -    ///
> -    /// [Bit 10] TSCEn.
> -    ///
> -    UINT32  TSCEn:1;
> -    ///
> -    /// [Bit 11] DisRETC.
> -    ///
> -    UINT32  DisRETC:1;
> -    ///
> -    /// [Bit 12] PTWEn.
> -    ///
> -    UINT32  PTWEn:1;
> -    ///
> -    /// [Bit 13] BranchEn.
> -    ///
> -    UINT32  BranchEn:1;
> -    ///
> -    /// [Bits 17:14] MTCFreq. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
> -    ///
> -    UINT32  MTCFreq:4;
> -    UINT32  Reserved3:1;
> -    ///
> -    /// [Bits 22:19] CYCThresh. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
> -    ///
> -    UINT32  CYCThresh:4;
> -    UINT32  Reserved4:1;
> -    ///
> -    /// [Bits 27:24] PSBFreq. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
> -    ///
> -    UINT32  PSBFreq:4;
> -    UINT32  Reserved5:4;
> -    ///
> -    /// [Bits 35:32] ADDR0_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 0).
> -    ///
> -    UINT32  ADDR0_CFG:4;
> -    ///
> -    /// [Bits 39:36] ADDR1_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 1).
> -    ///
> -    UINT32  ADDR1_CFG:4;
> -    ///
> -    /// [Bits 43:40] ADDR2_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 2).
> -    ///
> -    UINT32  ADDR2_CFG:4;
> -    ///
> -    /// [Bits 47:44] ADDR3_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 3).
> -    ///
> -    UINT32  ADDR3_CFG:4;
> -    UINT32  Reserved6:16;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_CTL_REGISTER;
> -
> -
> -/**
> -  Tracing Status Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
> -
> -  @param  ECX  MSR_IA32_RTIT_STATUS (0x00000571)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_STATUS);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_STATUS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_STATUS is defined as IA32_RTIT_STATUS in SDM.
> -**/
> -#define MSR_IA32_RTIT_STATUS                     0x00000571
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_RTIT_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] FilterEn, (writes ignored).
> -    /// If (CPUID.(EAX=07H, ECX=0):EBX[2] = 1).
> -    ///
> -    UINT32  FilterEn:1;
> -    ///
> -    /// [Bit 1] ContexEn, (writes ignored).
> -    ///
> -    UINT32  ContexEn:1;
> -    ///
> -    /// [Bit 2] TriggerEn, (writes ignored).
> -    ///
> -    UINT32  TriggerEn:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 4] Error.
> -    ///
> -    UINT32  Error:1;
> -    ///
> -    /// [Bit 5] Stopped.
> -    ///
> -    UINT32  Stopped:1;
> -    UINT32  Reserved2:26;
> -    ///
> -    /// [Bits 48:32] PacketByteCnt. If (CPUID.(EAX=07H, ECX=0):EBX[1] > 3).
> -    ///
> -    UINT32  PacketByteCnt:17;
> -    UINT32  Reserved3:15;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_STATUS_REGISTER;
> -
> -
> -/**
> -  Trace Filter CR3 Match Register (R/W).
> -  If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
> -
> -  @param  ECX  MSR_IA32_RTIT_CR3_MATCH (0x00000572)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_CR3_MATCH_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CR3_MATCH);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_CR3_MATCH, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_CR3_MATCH is defined as IA32_RTIT_CR3_MATCH
> in SDM.
> -**/
> -#define MSR_IA32_RTIT_CR3_MATCH                  0x00000572
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_RTIT_CR3_MATCH
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved:5;
> -    ///
> -    /// [Bits 31:5] CR3[63:5] value to match.
> -    ///
> -    UINT32  Cr3:27;
> -    ///
> -    /// [Bits 63:32] CR3[63:5] value to match.
> -    ///
> -    UINT32  Cr3Hi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_CR3_MATCH_REGISTER;
> -
> -
> -/**
> -  Region n Start Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
> -
> -  @param  ECX  MSR_IA32_RTIT_ADDRn_A
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_A);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_A, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_ADDR0_A is defined as IA32_RTIT_ADDR0_A in
> SDM.
> -        MSR_IA32_RTIT_ADDR1_A is defined as IA32_RTIT_ADDR1_A in SDM.
> -        MSR_IA32_RTIT_ADDR2_A is defined as IA32_RTIT_ADDR2_A in SDM.
> -        MSR_IA32_RTIT_ADDR3_A is defined as IA32_RTIT_ADDR3_A in SDM.
> -  @{
> -**/
> -#define MSR_IA32_RTIT_ADDR0_A                    0x00000580
> -#define MSR_IA32_RTIT_ADDR1_A                    0x00000582
> -#define MSR_IA32_RTIT_ADDR2_A                    0x00000584
> -#define MSR_IA32_RTIT_ADDR3_A                    0x00000586
> -/// @}
> -
> -
> -/**
> -  Region n End Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
> -
> -  @param  ECX  MSR_IA32_RTIT_ADDRn_B
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_B);
> -  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_B, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_RTIT_ADDR0_B is defined as IA32_RTIT_ADDR0_B in
> SDM.
> -        MSR_IA32_RTIT_ADDR1_B is defined as IA32_RTIT_ADDR1_B in SDM.
> -        MSR_IA32_RTIT_ADDR2_B is defined as IA32_RTIT_ADDR2_B in SDM.
> -        MSR_IA32_RTIT_ADDR3_B is defined as IA32_RTIT_ADDR3_B in SDM.
> -  @{
> -**/
> -#define MSR_IA32_RTIT_ADDR0_B                    0x00000581
> -#define MSR_IA32_RTIT_ADDR1_B                    0x00000583
> -#define MSR_IA32_RTIT_ADDR2_B                    0x00000585
> -#define MSR_IA32_RTIT_ADDR3_B                    0x00000587
> -/// @}
> -
> -
> -/**
> -  MSR information returned for MSR indexes
> -  #MSR_IA32_RTIT_ADDR0_A to #MSR_IA32_RTIT_ADDR3_A and
> -  #MSR_IA32_RTIT_ADDR0_B to #MSR_IA32_RTIT_ADDR3_B
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Virtual Address.
> -    ///
> -    UINT32  VirtualAddress:32;
> -    ///
> -    /// [Bits 47:32] Virtual Address.
> -    ///
> -    UINT32  VirtualAddressHi:16;
> -    ///
> -    /// [Bits 63:48] SignExt_VA.
> -    ///
> -    UINT32  SignExt_VA:16;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_RTIT_ADDR_REGISTER;
> -
> -
> -/**
> -  DS Save Area (R/W) Points to the linear address of the first byte of the DS
> -  buffer management area, which is used to manage the BTS and PEBS
> buffers.
> -  See Section 18.6.3.4, "Debug Store (DS) Mechanism.". If(
> -  CPUID.01H:EDX.DS[21] = 1. The linear address of the first byte of the DS
> -  buffer management area, if IA-32e mode is active.
> -
> -  @param  ECX  MSR_IA32_DS_AREA (0x00000600)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_DS_AREA_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_DS_AREA_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_DS_AREA);
> -  AsmWriteMsr64 (MSR_IA32_DS_AREA, Msr);
> -  @endcode
> -  @note MSR_IA32_DS_AREA is defined as IA32_DS_AREA in SDM.
> -**/
> -#define MSR_IA32_DS_AREA                         0x00000600
> -
> -
> -/**
> -  TSC Target of Local APIC's TSC Deadline Mode (R/W). If CPUID.01H:ECX.[24]
> =
> -  1.
> -
> -  @param  ECX  MSR_IA32_TSC_DEADLINE (0x000006E0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_TSC_DEADLINE);
> -  AsmWriteMsr64 (MSR_IA32_TSC_DEADLINE, Msr);
> -  @endcode
> -  @note MSR_IA32_TSC_DEADLINE is defined as IA32_TSC_DEADLINE in
> SDM.
> -**/
> -#define MSR_IA32_TSC_DEADLINE                    0x000006E0
> -
> -
> -/**
> -  Enable/disable HWP (R/W). If CPUID.06H:EAX.[7] = 1.
> -
> -  @param  ECX  MSR_IA32_PM_ENABLE (0x00000770)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PM_ENABLE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_ENABLE);
> -  AsmWriteMsr64 (MSR_IA32_PM_ENABLE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PM_ENABLE is defined as IA32_PM_ENABLE in SDM.
> -**/
> -#define MSR_IA32_PM_ENABLE                       0x00000770
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PM_ENABLE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] HWP_ENABLE (R/W1-Once). See Section 14.4.2, "Enabling HWP".
> If
> -    /// CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  HWP_ENABLE:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PM_ENABLE_REGISTER;
> -
> -
> -/**
> -  HWP Performance Range Enumeration (RO). If CPUID.06H:EAX.[7] = 1.
> -
> -  @param  ECX  MSR_IA32_HWP_CAPABILITIES (0x00000771)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_HWP_CAPABILITIES_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_CAPABILITIES);
> -  @endcode
> -  @note MSR_IA32_HWP_CAPABILITIES is defined as
> IA32_HWP_CAPABILITIES in SDM.
> -**/
> -#define MSR_IA32_HWP_CAPABILITIES                0x00000771
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_HWP_CAPABILITIES
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Highest_Performance See Section 14.4.3, "HWP Performance
> -    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Highest_Performance:8;
> -    ///
> -    /// [Bits 15:8] Guaranteed_Performance See Section 14.4.3, "HWP
> -    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] =
> 1.
> -    ///
> -    UINT32  Guaranteed_Performance:8;
> -    ///
> -    /// [Bits 23:16] Most_Efficient_Performance See Section 14.4.3, "HWP
> -    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] =
> 1.
> -    ///
> -    UINT32  Most_Efficient_Performance:8;
> -    ///
> -    /// [Bits 31:24] Lowest_Performance See Section 14.4.3, "HWP
> Performance
> -    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Lowest_Performance:8;
> -    UINT32  Reserved:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_HWP_CAPABILITIES_REGISTER;
> -
> -
> -/**
> -  Power Management Control Hints for All Logical Processors in a Package
> -  (R/W). If CPUID.06H:EAX.[11] = 1.
> -
> -  @param  ECX  MSR_IA32_HWP_REQUEST_PKG (0x00000772)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_HWP_REQUEST_PKG_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST_PKG);
> -  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST_PKG, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_HWP_REQUEST_PKG is defined as
> IA32_HWP_REQUEST_PKG in SDM.
> -**/
> -#define MSR_IA32_HWP_REQUEST_PKG                 0x00000772
> -
> -/**
> -  MSR information returned for MSR index
> #MSR_IA32_HWP_REQUEST_PKG
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP".
> If
> -    /// CPUID.06H:EAX.[11] = 1.
> -    ///
> -    UINT32  Minimum_Performance:8;
> -    ///
> -    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing
> HWP". If
> -    /// CPUID.06H:EAX.[11] = 1.
> -    ///
> -    UINT32  Maximum_Performance:8;
> -    ///
> -    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
> -    /// If CPUID.06H:EAX.[11] = 1.
> -    ///
> -    UINT32  Desired_Performance:8;
> -    ///
> -    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
> -    /// "Managing HWP". If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[10] =
> 1.
> -    ///
> -    UINT32  Energy_Performance_Preference:8;
> -    ///
> -    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
> -    /// CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[9] = 1.
> -    ///
> -    UINT32  Activity_Window:10;
> -    UINT32  Reserved:22;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_HWP_REQUEST_PKG_REGISTER;
> -
> -
> -/**
> -  Control HWP Native Interrupts (R/W). If CPUID.06H:EAX.[8] = 1.
> -
> -  @param  ECX  MSR_IA32_HWP_INTERRUPT (0x00000773)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_HWP_INTERRUPT_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_INTERRUPT);
> -  AsmWriteMsr64 (MSR_IA32_HWP_INTERRUPT, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_HWP_INTERRUPT is defined as IA32_HWP_INTERRUPT
> in SDM.
> -**/
> -#define MSR_IA32_HWP_INTERRUPT                   0x00000773
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_HWP_INTERRUPT
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] EN_Guaranteed_Performance_Change. See Section 14.4.6,
> "HWP
> -    /// Notifications". If CPUID.06H:EAX.[8] = 1.
> -    ///
> -    UINT32  EN_Guaranteed_Performance_Change:1;
> -    ///
> -    /// [Bit 1] EN_Excursion_Minimum. See Section 14.4.6, "HWP
> Notifications".
> -    /// If CPUID.06H:EAX.[8] = 1.
> -    ///
> -    UINT32  EN_Excursion_Minimum:1;
> -    UINT32  Reserved1:30;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_HWP_INTERRUPT_REGISTER;
> -
> -
> -/**
> -  Power Management Control Hints to a Logical Processor (R/W). If
> -  CPUID.06H:EAX.[7] = 1.
> -
> -  @param  ECX  MSR_IA32_HWP_REQUEST (0x00000774)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_HWP_REQUEST_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST);
> -  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_HWP_REQUEST is defined as IA32_HWP_REQUEST in
> SDM.
> -**/
> -#define MSR_IA32_HWP_REQUEST                     0x00000774
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_HWP_REQUEST
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP".
> If
> -    /// CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Minimum_Performance:8;
> -    ///
> -    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing
> HWP". If
> -    /// CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Maximum_Performance:8;
> -    ///
> -    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
> -    /// If CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Desired_Performance:8;
> -    ///
> -    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
> -    /// "Managing HWP". If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[10] = 1.
> -    ///
> -    UINT32  Energy_Performance_Preference:8;
> -    ///
> -    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
> -    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[9] = 1.
> -    ///
> -    UINT32  Activity_Window:10;
> -    ///
> -    /// [Bit 42] Package_Control See Section 14.4.4, "Managing HWP". If
> -    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[11] = 1.
> -    ///
> -    UINT32  Package_Control:1;
> -    UINT32  Reserved:21;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_HWP_REQUEST_REGISTER;
> -
> -
> -/**
> -  Log bits indicating changes to  Guaranteed & excursions to Minimum (R/W).
> If
> -  CPUID.06H:EAX.[7] = 1.
> -
> -  @param  ECX  MSR_IA32_HWP_STATUS (0x00000777)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_HWP_STATUS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_STATUS);
> -  AsmWriteMsr64 (MSR_IA32_HWP_STATUS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_HWP_STATUS is defined as IA32_HWP_STATUS in SDM.
> -**/
> -#define MSR_IA32_HWP_STATUS                      0x00000777
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_HWP_STATUS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Guaranteed_Performance_Change (R/WC0). See Section 14.4.5,
> -    /// "HWP Feedback". If CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Guaranteed_Performance_Change:1;
> -    UINT32  Reserved1:1;
> -    ///
> -    /// [Bit 2] Excursion_To_Minimum (R/WC0). See Section 14.4.5, "HWP
> -    /// Feedback". If CPUID.06H:EAX.[7] = 1.
> -    ///
> -    UINT32  Excursion_To_Minimum:1;
> -    UINT32  Reserved2:29;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_HWP_STATUS_REGISTER;
> -
> -
> -/**
> -  x2APIC ID Register (R/O) See x2APIC Specification. If CPUID.01H:ECX[21] = 1
> -  && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_APICID (0x00000802)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_APICID);
> -  @endcode
> -  @note MSR_IA32_X2APIC_APICID is defined as IA32_X2APIC_APICID in
> SDM.
> -**/
> -#define MSR_IA32_X2APIC_APICID                   0x00000802
> -
> -
> -/**
> -  x2APIC Version Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_VERSION (0x00000803)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_VERSION);
> -  @endcode
> -  @note MSR_IA32_X2APIC_VERSION is defined as IA32_X2APIC_VERSION
> in SDM.
> -**/
> -#define MSR_IA32_X2APIC_VERSION                  0x00000803
> -
> -
> -/**
> -  x2APIC Task Priority Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_TPR (0x00000808)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TPR);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_TPR, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_TPR is defined as IA32_X2APIC_TPR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_TPR                      0x00000808
> -
> -
> -/**
> -  x2APIC Processor Priority Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_PPR (0x0000080A)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_PPR);
> -  @endcode
> -  @note MSR_IA32_X2APIC_PPR is defined as IA32_X2APIC_PPR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_PPR                      0x0000080A
> -
> -
> -/**
> -  x2APIC EOI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
> IA32_APIC_BASE.[10]
> -  = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_EOI (0x0000080B)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = 0;
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_EOI, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_EOI is defined as IA32_X2APIC_EOI in SDM.
> -**/
> -#define MSR_IA32_X2APIC_EOI                      0x0000080B
> -
> -
> -/**
> -  x2APIC Logical Destination Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LDR (0x0000080D)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LDR);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LDR is defined as IA32_X2APIC_LDR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LDR                      0x0000080D
> -
> -
> -/**
> -  x2APIC Spurious Interrupt Vector Register (R/W). If CPUID.01H:ECX.[21] = 1
> -  && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_SIVR (0x0000080F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_SIVR);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_SIVR, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_SIVR is defined as IA32_X2APIC_SIVR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_SIVR                     0x0000080F
> -
> -
> -/**
> -  x2APIC In-Service Register Bits (n * 32 + 31):(n * 32) (R/O).
> -  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_ISRn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ISR0);
> -  @endcode
> -  @note MSR_IA32_X2APIC_ISR0 is defined as IA32_X2APIC_ISR0 in SDM.
> -        MSR_IA32_X2APIC_ISR1 is defined as IA32_X2APIC_ISR1 in SDM.
> -        MSR_IA32_X2APIC_ISR2 is defined as IA32_X2APIC_ISR2 in SDM.
> -        MSR_IA32_X2APIC_ISR3 is defined as IA32_X2APIC_ISR3 in SDM.
> -        MSR_IA32_X2APIC_ISR4 is defined as IA32_X2APIC_ISR4 in SDM.
> -        MSR_IA32_X2APIC_ISR5 is defined as IA32_X2APIC_ISR5 in SDM.
> -        MSR_IA32_X2APIC_ISR6 is defined as IA32_X2APIC_ISR6 in SDM.
> -        MSR_IA32_X2APIC_ISR7 is defined as IA32_X2APIC_ISR7 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_X2APIC_ISR0                     0x00000810
> -#define MSR_IA32_X2APIC_ISR1                     0x00000811
> -#define MSR_IA32_X2APIC_ISR2                     0x00000812
> -#define MSR_IA32_X2APIC_ISR3                     0x00000813
> -#define MSR_IA32_X2APIC_ISR4                     0x00000814
> -#define MSR_IA32_X2APIC_ISR5                     0x00000815
> -#define MSR_IA32_X2APIC_ISR6                     0x00000816
> -#define MSR_IA32_X2APIC_ISR7                     0x00000817
> -/// @}
> -
> -
> -/**
> -  x2APIC Trigger Mode Register Bits (n * 32 + ):(n * 32) (R/O).
> -  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_TMRn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TMR0);
> -  @endcode
> -  @note MSR_IA32_X2APIC_TMR0 is defined as IA32_X2APIC_TMR0 in SDM.
> -        MSR_IA32_X2APIC_TMR1 is defined as IA32_X2APIC_TMR1 in SDM.
> -        MSR_IA32_X2APIC_TMR2 is defined as IA32_X2APIC_TMR2 in SDM.
> -        MSR_IA32_X2APIC_TMR3 is defined as IA32_X2APIC_TMR3 in SDM.
> -        MSR_IA32_X2APIC_TMR4 is defined as IA32_X2APIC_TMR4 in SDM.
> -        MSR_IA32_X2APIC_TMR5 is defined as IA32_X2APIC_TMR5 in SDM.
> -        MSR_IA32_X2APIC_TMR6 is defined as IA32_X2APIC_TMR6 in SDM.
> -        MSR_IA32_X2APIC_TMR7 is defined as IA32_X2APIC_TMR7 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_X2APIC_TMR0                     0x00000818
> -#define MSR_IA32_X2APIC_TMR1                     0x00000819
> -#define MSR_IA32_X2APIC_TMR2                     0x0000081A
> -#define MSR_IA32_X2APIC_TMR3                     0x0000081B
> -#define MSR_IA32_X2APIC_TMR4                     0x0000081C
> -#define MSR_IA32_X2APIC_TMR5                     0x0000081D
> -#define MSR_IA32_X2APIC_TMR6                     0x0000081E
> -#define MSR_IA32_X2APIC_TMR7                     0x0000081F
> -/// @}
> -
> -
> -/**
> -  x2APIC Interrupt Request Register Bits (n* 32 + 31):(n * 32) (R/O).
> -  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_IRRn
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_IRR0);
> -  @endcode
> -  @note MSR_IA32_X2APIC_IRR0 is defined as IA32_X2APIC_IRR0 in SDM.
> -        MSR_IA32_X2APIC_IRR1 is defined as IA32_X2APIC_IRR1 in SDM.
> -        MSR_IA32_X2APIC_IRR2 is defined as IA32_X2APIC_IRR2 in SDM.
> -        MSR_IA32_X2APIC_IRR3 is defined as IA32_X2APIC_IRR3 in SDM.
> -        MSR_IA32_X2APIC_IRR4 is defined as IA32_X2APIC_IRR4 in SDM.
> -        MSR_IA32_X2APIC_IRR5 is defined as IA32_X2APIC_IRR5 in SDM.
> -        MSR_IA32_X2APIC_IRR6 is defined as IA32_X2APIC_IRR6 in SDM.
> -        MSR_IA32_X2APIC_IRR7 is defined as IA32_X2APIC_IRR7 in SDM.
> -  @{
> -**/
> -#define MSR_IA32_X2APIC_IRR0                     0x00000820
> -#define MSR_IA32_X2APIC_IRR1                     0x00000821
> -#define MSR_IA32_X2APIC_IRR2                     0x00000822
> -#define MSR_IA32_X2APIC_IRR3                     0x00000823
> -#define MSR_IA32_X2APIC_IRR4                     0x00000824
> -#define MSR_IA32_X2APIC_IRR5                     0x00000825
> -#define MSR_IA32_X2APIC_IRR6                     0x00000826
> -#define MSR_IA32_X2APIC_IRR7                     0x00000827
> -/// @}
> -
> -
> -/**
> -  x2APIC Error Status Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_ESR (0x00000828)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ESR);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_ESR, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_ESR is defined as IA32_X2APIC_ESR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_ESR                      0x00000828
> -
> -
> -/**
> -  x2APIC LVT Corrected Machine Check Interrupt Register (R/W). If
> -  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_CMCI (0x0000082F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_CMCI);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_CMCI, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_CMCI is defined as
> IA32_X2APIC_LVT_CMCI in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_CMCI                 0x0000082F
> -
> -
> -/**
> -  x2APIC Interrupt Command Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_ICR (0x00000830)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ICR);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_ICR, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_ICR is defined as IA32_X2APIC_ICR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_ICR                      0x00000830
> -
> -
> -/**
> -  x2APIC LVT Timer Interrupt Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_TIMER (0x00000832)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_TIMER);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_TIMER, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_TIMER is defined as
> IA32_X2APIC_LVT_TIMER in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_TIMER                0x00000832
> -
> -
> -/**
> -  x2APIC LVT Thermal Sensor Interrupt Register (R/W). If CPUID.01H:ECX.[21]
> =
> -  1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_THERMAL (0x00000833)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_THERMAL);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_THERMAL, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_THERMAL is defined as
> IA32_X2APIC_LVT_THERMAL in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_THERMAL              0x00000833
> -
> -
> -/**
> -  x2APIC LVT Performance Monitor Interrupt Register (R/W). If
> -  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_PMI (0x00000834)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_PMI);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_PMI, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_PMI is defined as IA32_X2APIC_LVT_PMI
> in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_PMI                  0x00000834
> -
> -
> -/**
> -  x2APIC LVT LINT0 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_LINT0 (0x00000835)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT0);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT0, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_LINT0 is defined as
> IA32_X2APIC_LVT_LINT0 in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_LINT0                0x00000835
> -
> -
> -/**
> -  x2APIC LVT LINT1 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_LINT1 (0x00000836)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT1);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT1, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_LINT1 is defined as
> IA32_X2APIC_LVT_LINT1 in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_LINT1                0x00000836
> -
> -
> -/**
> -  x2APIC LVT Error Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_LVT_ERROR (0x00000837)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_ERROR);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_ERROR, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_LVT_ERROR is defined as
> IA32_X2APIC_LVT_ERROR in SDM.
> -**/
> -#define MSR_IA32_X2APIC_LVT_ERROR                0x00000837
> -
> -
> -/**
> -  x2APIC Initial Count Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_INIT_COUNT (0x00000838)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_INIT_COUNT);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_INIT_COUNT, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_INIT_COUNT is defined as
> IA32_X2APIC_INIT_COUNT in SDM.
> -**/
> -#define MSR_IA32_X2APIC_INIT_COUNT               0x00000838
> -
> -
> -/**
> -  x2APIC Current Count Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_CUR_COUNT (0x00000839)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_CUR_COUNT);
> -  @endcode
> -  @note MSR_IA32_X2APIC_CUR_COUNT is defined as
> IA32_X2APIC_CUR_COUNT in SDM.
> -**/
> -#define MSR_IA32_X2APIC_CUR_COUNT                0x00000839
> -
> -
> -/**
> -  x2APIC Divide Configuration Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_DIV_CONF (0x0000083E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_DIV_CONF);
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_DIV_CONF, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_DIV_CONF is defined as
> IA32_X2APIC_DIV_CONF in SDM.
> -**/
> -#define MSR_IA32_X2APIC_DIV_CONF                 0x0000083E
> -
> -
> -/**
> -  x2APIC Self IPI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
> -  IA32_APIC_BASE.[10] = 1.
> -
> -  @param  ECX  MSR_IA32_X2APIC_SELF_IPI (0x0000083F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = 0;
> -  AsmWriteMsr64 (MSR_IA32_X2APIC_SELF_IPI, Msr);
> -  @endcode
> -  @note MSR_IA32_X2APIC_SELF_IPI is defined as IA32_X2APIC_SELF_IPI in
> SDM.
> -**/
> -#define MSR_IA32_X2APIC_SELF_IPI                 0x0000083F
> -
> -
> -/**
> -  Silicon Debug Feature Control (R/W). If CPUID.01H:ECX.[11] = 1.
> -
> -  @param  ECX  MSR_IA32_DEBUG_INTERFACE (0x00000C80)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_DEBUG_INTERFACE_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUG_INTERFACE);
> -  AsmWriteMsr64 (MSR_IA32_DEBUG_INTERFACE, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_DEBUG_INTERFACE is defined as
> IA32_DEBUG_INTERFACE in SDM.
> -**/
> -#define MSR_IA32_DEBUG_INTERFACE                 0x00000C80
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_DEBUG_INTERFACE
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Enable (R/W) BIOS set 1 to enable Silicon debug features.
> -    /// Default is 0. If CPUID.01H:ECX.[11] = 1.
> -    ///
> -    UINT32  Enable:1;
> -    UINT32  Reserved1:29;
> -    ///
> -    /// [Bit 30] Lock (R/W): If 1, locks any further change to the MSR. The
> -    /// lock bit is set automatically on the first SMI assertion even if not
> -    /// explicitly set by BIOS. Default is 0. If CPUID.01H:ECX.[11] = 1.
> -    ///
> -    UINT32  Lock:1;
> -    ///
> -    /// [Bit 31] Debug Occurred (R/O): This "sticky bit" is set by hardware to
> -    /// indicate the status of bit 0. Default is 0. If CPUID.01H:ECX.[11] = 1.
> -    ///
> -    UINT32  DebugOccurred:1;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_DEBUG_INTERFACE_REGISTER;
> -
> -
> -/**
> -  L3 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=1):ECX.[2] = 1 ).
> -
> -  @param  ECX  MSR_IA32_L3_QOS_CFG (0x00000C81)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_L3_QOS_CFG_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L3_QOS_CFG);
> -  AsmWriteMsr64 (MSR_IA32_L3_QOS_CFG, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_L3_QOS_CFG is defined as IA32_L3_QOS_CFG in SDM.
> -**/
> -#define MSR_IA32_L3_QOS_CFG                      0x00000C81
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_L3_QOS_CFG
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Enable (R/W) Set 1 to enable L3 CAT masks and COS to operate
> -    /// in Code and Data Prioritization (CDP) mode.
> -    ///
> -    UINT32  Enable:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_L3_QOS_CFG_REGISTER;
> -
> -/**
> -  L2 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=2):ECX.[2] = 1 ).
> -
> -  @param  ECX  MSR_IA32_L2_QOS_CFG (0x00000C82)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_L2_QOS_CFG_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L2_QOS_CFG);
> -  AsmWriteMsr64 (MSR_IA32_L2_QOS_CFG, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_L2_QOS_CFG is defined as IA32_L2_QOS_CFG in SDM.
> -**/
> -#define MSR_IA32_L2_QOS_CFG                      0x00000C82
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_L2_QOS_CFG
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] Enable (R/W) Set 1 to enable L2 CAT masks and COS to operate
> -    /// in Code and Data Prioritization (CDP) mode.
> -    ///
> -    UINT32  Enable:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_L2_QOS_CFG_REGISTER;
> -
> -/**
> -  Monitoring Event Select Register (R/W). If ( CPUID.(EAX=07H,
> ECX=0):EBX.[12]
> -  = 1 ).
> -
> -  @param  ECX  MSR_IA32_QM_EVTSEL (0x00000C8D)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_QM_EVTSEL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_EVTSEL);
> -  AsmWriteMsr64 (MSR_IA32_QM_EVTSEL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_QM_EVTSEL is defined as IA32_QM_EVTSEL in SDM.
> -**/
> -#define MSR_IA32_QM_EVTSEL                       0x00000C8D
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_QM_EVTSEL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 7:0] Event ID: ID of a supported monitoring event to report via
> -    /// IA32_QM_CTR.
> -    ///
> -    UINT32  EventID:8;
> -    UINT32  Reserved:24;
> -    ///
> -    /// [Bits 63:32] Resource Monitoring ID: ID for monitoring hardware to
> -    /// report monitored data via IA32_QM_CTR. N = Ceil (Log:sub:`2` (
> -    /// CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
> -    ///
> -    UINT32  ResourceMonitoringID:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_QM_EVTSEL_REGISTER;
> -
> -
> -/**
> -  Monitoring Counter Register (R/O). If ( CPUID.(EAX=07H, ECX=0):EBX.[12] =
> 1
> -  ).
> -
> -  @param  ECX  MSR_IA32_QM_CTR (0x00000C8E)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_QM_CTR_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_QM_CTR_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_QM_CTR_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_CTR);
> -  @endcode
> -  @note MSR_IA32_QM_CTR is defined as IA32_QM_CTR in SDM.
> -**/
> -#define MSR_IA32_QM_CTR                          0x00000C8E
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_QM_CTR
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Resource Monitored Data.
> -    ///
> -    UINT32  ResourceMonitoredData:32;
> -    ///
> -    /// [Bits 61:32] Resource Monitored Data.
> -    ///
> -    UINT32  ResourceMonitoredDataHi:30;
> -    ///
> -    /// [Bit 62] Unavailable: If 1, indicates data for this RMID is not
> -    /// available or not monitored for this resource or RMID.
> -    ///
> -    UINT32  Unavailable:1;
> -    ///
> -    /// [Bit 63] Error: If 1, indicates and unsupported RMID or event type was
> -    /// written to IA32_PQR_QM_EVTSEL.
> -    ///
> -    UINT32  Error:1;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_QM_CTR_REGISTER;
> -
> -
> -/**
> -  Resource Association Register (R/W). If ( (CPUID.(EAX=07H, ECX=0):EBX[12]
> -  =1) or (CPUID.(EAX=07H, ECX=0):EBX[15] =1 ) ).
> -
> -  @param  ECX  MSR_IA32_PQR_ASSOC (0x00000C8F)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PQR_ASSOC_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PQR_ASSOC);
> -  AsmWriteMsr64 (MSR_IA32_PQR_ASSOC, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PQR_ASSOC is defined as IA32_PQR_ASSOC in SDM.
> -**/
> -#define MSR_IA32_PQR_ASSOC                       0x00000C8F
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PQR_ASSOC
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] Resource Monitoring ID (R/W): ID for monitoring hardware
> -    /// to track internal operation, e.g. memory access. N = Ceil (Log:sub:`2`
> -    /// ( CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
> -    ///
> -    UINT32  ResourceMonitoringID:32;
> -    ///
> -    /// [Bits 63:32] COS (R/W). The class of service (COS) to enforce (on
> -    /// writes); returns the current COS when read. If ( CPUID.(EAX=07H,
> -    /// ECX=0):EBX.[15] = 1 ).
> -    ///
> -    UINT32  COS:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PQR_ASSOC_REGISTER;
> -
> -
> -/**
> -  Supervisor State of MPX Configuration. (R/W). If (CPUID.(EAX=07H,
> -  ECX=0H):EBX[14] = 1).
> -
> -  @param  ECX  MSR_IA32_BNDCFGS (0x00000D90)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_BNDCFGS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_BNDCFGS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_BNDCFGS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BNDCFGS);
> -  AsmWriteMsr64 (MSR_IA32_BNDCFGS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_BNDCFGS is defined as IA32_BNDCFGS in SDM.
> -**/
> -#define MSR_IA32_BNDCFGS                         0x00000D90
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_BNDCFGS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] EN: Enable Intel MPX in supervisor mode.
> -    ///
> -    UINT32  EN:1;
> -    ///
> -    /// [Bit 1] BNDPRESERVE: Preserve the bounds registers for near branch
> -    /// instructions in the absence of the BND prefix.
> -    ///
> -    UINT32  BNDPRESERVE:1;
> -    UINT32  Reserved:10;
> -    ///
> -    /// [Bits 31:12] Base Address of Bound Directory.
> -    ///
> -    UINT32  Base:20;
> -    ///
> -    /// [Bits 63:32] Base Address of Bound Directory.
> -    ///
> -    UINT32  BaseHi:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_BNDCFGS_REGISTER;
> -
> -
> -/**
> -  Extended Supervisor State Mask (R/W). If( CPUID.(0DH, 1):EAX.[3] = 1.
> -
> -  @param  ECX  MSR_IA32_XSS (0x00000DA0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_XSS_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_XSS_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_XSS_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_XSS);
> -  AsmWriteMsr64 (MSR_IA32_XSS, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_XSS is defined as IA32_XSS in SDM.
> -**/
> -#define MSR_IA32_XSS                             0x00000DA0
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_XSS
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    UINT32  Reserved1:8;
> -    ///
> -    /// [Bit 8] Trace Packet Configuration State (R/W).
> -    ///
> -    UINT32  TracePacketConfigurationState:1;
> -    UINT32  Reserved2:23;
> -    UINT32  Reserved3:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_XSS_REGISTER;
> -
> -
> -/**
> -  Package Level Enable/disable HDC (R/W). If CPUID.06H:EAX.[13] = 1.
> -
> -  @param  ECX  MSR_IA32_PKG_HDC_CTL (0x00000DB0)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PKG_HDC_CTL_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PKG_HDC_CTL);
> -  AsmWriteMsr64 (MSR_IA32_PKG_HDC_CTL, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PKG_HDC_CTL is defined as IA32_PKG_HDC_CTL in SDM.
> -**/
> -#define MSR_IA32_PKG_HDC_CTL                     0x00000DB0
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PKG_HDC_CTL
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] HDC_Pkg_Enable (R/W) Force HDC idling or wake up HDC-idled
> -    /// logical processors in the package. See Section 14.5.2, "Package level
> -    /// Enabling HDC". If CPUID.06H:EAX.[13] = 1.
> -    ///
> -    UINT32  HDC_Pkg_Enable:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PKG_HDC_CTL_REGISTER;
> -
> -
> -/**
> -  Enable/disable HWP (R/W). If CPUID.06H:EAX.[13] = 1.
> -
> -  @param  ECX  MSR_IA32_PM_CTL1 (0x00000DB1)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_PM_CTL1_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_PM_CTL1_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_PM_CTL1_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_CTL1);
> -  AsmWriteMsr64 (MSR_IA32_PM_CTL1, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_PM_CTL1 is defined as IA32_PM_CTL1 in SDM.
> -**/
> -#define MSR_IA32_PM_CTL1                         0x00000DB1
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_PM_CTL1
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] HDC_Allow_Block (R/W) Allow/Block this logical processor for
> -    /// package level HDC control. See Section 14.5.3.
> -    /// If CPUID.06H:EAX.[13] = 1.
> -    ///
> -    UINT32  HDC_Allow_Block:1;
> -    UINT32  Reserved1:31;
> -    UINT32  Reserved2:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_PM_CTL1_REGISTER;
> -
> -
> -/**
> -  Per-Logical_Processor HDC Idle Residency (R/0). If CPUID.06H:EAX.[13] = 1.
> -  Stall_Cycle_Cnt (R/W) Stalled cycles due to HDC forced idle on this logical
> -  processor. See Section 14.5.4.1. If CPUID.06H:EAX.[13] = 1.
> -
> -  @param  ECX  MSR_IA32_THREAD_STALL (0x00000DB2)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_THREAD_STALL);
> -  @endcode
> -  @note MSR_IA32_THREAD_STALL is defined as IA32_THREAD_STALL in
> SDM.
> -**/
> -#define MSR_IA32_THREAD_STALL                    0x00000DB2
> -
> -
> -/**
> -  Extended Feature Enables. If ( CPUID.80000001H:EDX.[2 0]
> -  CPUID.80000001H:EDX.[2 9]).
> -
> -  @param  ECX  MSR_IA32_EFER (0xC0000080)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_EFER_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_EFER_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_EFER_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_EFER);
> -  AsmWriteMsr64 (MSR_IA32_EFER, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_EFER is defined as IA32_EFER in SDM.
> -**/
> -#define MSR_IA32_EFER                            0xC0000080
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_EFER
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bit 0] SYSCALL Enable: IA32_EFER.SCE (R/W) Enables SYSCALL/SYSRET
> -    /// instructions in 64-bit mode.
> -    ///
> -    UINT32  SCE:1;
> -    UINT32  Reserved1:7;
> -    ///
> -    /// [Bit 8] IA-32e Mode Enable: IA32_EFER.LME (R/W) Enables IA-32e
> mode
> -    /// operation.
> -    ///
> -    UINT32  LME:1;
> -    UINT32  Reserved2:1;
> -    ///
> -    /// [Bit 10] IA-32e Mode Active: IA32_EFER.LMA (R) Indicates IA-32e mode
> -    /// is active when set.
> -    ///
> -    UINT32  LMA:1;
> -    ///
> -    /// [Bit 11] Execute Disable Bit Enable: IA32_EFER.NXE (R/W).
> -    ///
> -    UINT32  NXE:1;
> -    UINT32  Reserved3:20;
> -    UINT32  Reserved4:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_EFER_REGISTER;
> -
> -
> -/**
> -  System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_STAR (0xC0000081)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_STAR);
> -  AsmWriteMsr64 (MSR_IA32_STAR, Msr);
> -  @endcode
> -  @note MSR_IA32_STAR is defined as IA32_STAR in SDM.
> -**/
> -#define MSR_IA32_STAR                            0xC0000081
> -
> -
> -/**
> -  IA-32e Mode System Call Target Address (R/W). If CPUID.80000001:EDX.[29]
> = 1.
> -
> -  @param  ECX  MSR_IA32_LSTAR (0xC0000082)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_LSTAR);
> -  AsmWriteMsr64 (MSR_IA32_LSTAR, Msr);
> -  @endcode
> -  @note MSR_IA32_LSTAR is defined as IA32_LSTAR in SDM.
> -**/
> -#define MSR_IA32_LSTAR                           0xC0000082
> -
> -/**
> -  IA-32e Mode System Call Target Address (R/W) Not used, as the SYSCALL
> -  instruction is not recognized in compatibility mode. If
> -  CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_CSTAR (0xC0000083)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_CSTAR);
> -  AsmWriteMsr64 (MSR_IA32_CSTAR, Msr);
> -  @endcode
> -  @note MSR_IA32_CSTAR is defined as IA32_CSTAR in SDM.
> -**/
> -#define MSR_IA32_CSTAR                           0xC0000083
> -
> -/**
> -  System Call Flag Mask (R/W). If CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_FMASK (0xC0000084)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_FMASK);
> -  AsmWriteMsr64 (MSR_IA32_FMASK, Msr);
> -  @endcode
> -  @note MSR_IA32_FMASK is defined as IA32_FMASK in SDM.
> -**/
> -#define MSR_IA32_FMASK                           0xC0000084
> -
> -
> -/**
> -  Map of BASE Address of FS (R/W). If CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_FS_BASE (0xC0000100)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_FS_BASE);
> -  AsmWriteMsr64 (MSR_IA32_FS_BASE, Msr);
> -  @endcode
> -  @note MSR_IA32_FS_BASE is defined as IA32_FS_BASE in SDM.
> -**/
> -#define MSR_IA32_FS_BASE                         0xC0000100
> -
> -
> -/**
> -  Map of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_GS_BASE (0xC0000101)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_GS_BASE);
> -  AsmWriteMsr64 (MSR_IA32_GS_BASE, Msr);
> -  @endcode
> -  @note MSR_IA32_GS_BASE is defined as IA32_GS_BASE in SDM.
> -**/
> -#define MSR_IA32_GS_BASE                         0xC0000101
> -
> -
> -/**
> -  Swap Target of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
> -
> -  @param  ECX  MSR_IA32_KERNEL_GS_BASE (0xC0000102)
> -  @param  EAX  Lower 32-bits of MSR value.
> -  @param  EDX  Upper 32-bits of MSR value.
> -
> -  <b>Example usage</b>
> -  @code
> -  UINT64  Msr;
> -
> -  Msr = AsmReadMsr64 (MSR_IA32_KERNEL_GS_BASE);
> -  AsmWriteMsr64 (MSR_IA32_KERNEL_GS_BASE, Msr);
> -  @endcode
> -  @note MSR_IA32_KERNEL_GS_BASE is defined as IA32_KERNEL_GS_BASE
> in SDM.
> -**/
> -#define MSR_IA32_KERNEL_GS_BASE                  0xC0000102
> -
> -
> -/**
> -  Auxiliary TSC (RW). If CPUID.80000001H: EDX[27] = 1.
> -
> -  @param  ECX  MSR_IA32_TSC_AUX (0xC0000103)
> -  @param  EAX  Lower 32-bits of MSR value.
> -               Described by the type MSR_IA32_TSC_AUX_REGISTER.
> -  @param  EDX  Upper 32-bits of MSR value.
> -               Described by the type MSR_IA32_TSC_AUX_REGISTER.
> -
> -  <b>Example usage</b>
> -  @code
> -  MSR_IA32_TSC_AUX_REGISTER  Msr;
> -
> -  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_TSC_AUX);
> -  AsmWriteMsr64 (MSR_IA32_TSC_AUX, Msr.Uint64);
> -  @endcode
> -  @note MSR_IA32_TSC_AUX is defined as IA32_TSC_AUX in SDM.
> -**/
> -#define MSR_IA32_TSC_AUX                         0xC0000103
> -
> -/**
> -  MSR information returned for MSR index #MSR_IA32_TSC_AUX
> -**/
> -typedef union {
> -  ///
> -  /// Individual bit fields
> -  ///
> -  struct {
> -    ///
> -    /// [Bits 31:0] AUX: Auxiliary signature of TSC.
> -    ///
> -    UINT32  AUX:32;
> -    UINT32  Reserved:32;
> -  } Bits;
> -  ///
> -  /// All bit fields as a 32-bit value
> -  ///
> -  UINT32  Uint32;
> -  ///
> -  /// All bit fields as a 64-bit value
> -  ///
> -  UINT64  Uint64;
> -} MSR_IA32_TSC_AUX_REGISTER;
> +#include <Register/Intel/ArchitecturalMsr.h>
> 
>  #endif
> diff --git a/UefiCpuPkg/Include/Register/Cpuid.h
> b/UefiCpuPkg/Include/Register/Cpuid.h
> index ac7b8f927f..fda8b2342e 100644
> --- a/UefiCpuPkg/Include/Register/Cpuid.h
> +++ b/UefiCpuPkg/Include/Register/Cpuid.h
> @@ -3,11 +3,6 @@
> 
>    Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -  @par Specification Reference:
> -  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume
> 2A,
> -  November 2018, CPUID instruction.
> -
>  **/
> 
>  #ifndef __CPUID_H__
> diff --git a/UefiCpuPkg/Include/Register/LocalApic.h
> b/UefiCpuPkg/Include/Register/LocalApic.h
> index 369ba96af8..1cc2b312db 100644
> --- a/UefiCpuPkg/Include/Register/LocalApic.h
> +++ b/UefiCpuPkg/Include/Register/LocalApic.h
> @@ -1,183 +1,14 @@
>  /** @file
> -  IA32 Local APIC Definitions.
> +  Wrapper header file to include <Register/Intel/LocalApic.h> in MdePkg.
> 
> -  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> -
>  **/
> 
>  #ifndef __LOCAL_APIC_H__
>  #define __LOCAL_APIC_H__
> 
> -//
> -// Definition for Local APIC registers and related values
> -//
> -#define XAPIC_ID_OFFSET                         0x20
> -#define XAPIC_VERSION_OFFSET                    0x30
> -#define XAPIC_EOI_OFFSET                        0x0b0
> -#define XAPIC_ICR_DFR_OFFSET                    0x0e0
> -#define XAPIC_SPURIOUS_VECTOR_OFFSET            0x0f0
> -#define XAPIC_ICR_LOW_OFFSET                    0x300
> -#define XAPIC_ICR_HIGH_OFFSET                   0x310
> -#define XAPIC_LVT_TIMER_OFFSET                  0x320
> -#define XAPIC_LVT_LINT0_OFFSET                  0x350
> -#define XAPIC_LVT_LINT1_OFFSET                  0x360
> -#define XAPIC_TIMER_INIT_COUNT_OFFSET           0x380
> -#define XAPIC_TIMER_CURRENT_COUNT_OFFSET        0x390
> -#define XAPIC_TIMER_DIVIDE_CONFIGURATION_OFFSET 0x3E0
> -
> -#define X2APIC_MSR_BASE_ADDRESS                 0x800
> -#define X2APIC_MSR_ICR_ADDRESS                  0x830
> -
> -#define LOCAL_APIC_DELIVERY_MODE_FIXED           0
> -#define LOCAL_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1
> -#define LOCAL_APIC_DELIVERY_MODE_SMI             2
> -#define LOCAL_APIC_DELIVERY_MODE_NMI             4
> -#define LOCAL_APIC_DELIVERY_MODE_INIT            5
> -#define LOCAL_APIC_DELIVERY_MODE_STARTUP         6
> -#define LOCAL_APIC_DELIVERY_MODE_EXTINT          7
> -
> -#define LOCAL_APIC_DESTINATION_SHORTHAND_NO_SHORTHAND       0
> -#define LOCAL_APIC_DESTINATION_SHORTHAND_SELF               1
> -#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_INCLUDING_SELF 2
> -#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_EXCLUDING_SELF 3
> -
> -//
> -// Local APIC Version Register.
> -//
> -typedef union {
> -  struct {
> -    UINT32  Version:8;                  ///< The version numbers of the local APIC.
> -    UINT32  Reserved0:8;                ///< Reserved.
> -    UINT32  MaxLvtEntry:8;              ///< Number of LVT entries minus 1.
> -    UINT32  EoiBroadcastSuppression:1;  ///< 1 if EOI-broadcast suppression
> supported.
> -    UINT32  Reserved1:7;                ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_VERSION;
> -
> -//
> -// Low half of Interrupt Command Register (ICR).
> -//
> -typedef union {
> -  struct {
> -    UINT32  Vector:8;                ///< The vector number of the interrupt being
> sent.
> -    UINT32  DeliveryMode:3;          ///< Specifies the type of IPI to be sent.
> -    UINT32  DestinationMode:1;       ///< 0: physical destination mode, 1:
> logical destination mode.
> -    UINT32  DeliveryStatus:1;        ///< Indicates the IPI delivery status. This
> field is reserved in x2APIC mode.
> -    UINT32  Reserved0:1;             ///< Reserved.
> -    UINT32  Level:1;                 ///< 0 for the INIT level de-assert delivery mode.
> Otherwise 1.
> -    UINT32  TriggerMode:1;           ///< 0: edge, 1: level when using the INIT
> level de-assert delivery mode.
> -    UINT32  Reserved1:2;             ///< Reserved.
> -    UINT32  DestinationShorthand:2;  ///< A shorthand notation to specify the
> destination of the interrupt.
> -    UINT32  Reserved2:12;            ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_ICR_LOW;
> -
> -//
> -// High half of Interrupt Command Register (ICR)
> -//
> -typedef union {
> -  struct {
> -    UINT32  Reserved0:24;   ///< Reserved.
> -    UINT32  Destination:8;  ///< Specifies the target processor or processors in
> xAPIC mode.
> -  } Bits;
> -  UINT32    Uint32;         ///< Destination field expanded to 32-bit in x2APIC
> mode.
> -} LOCAL_APIC_ICR_HIGH;
> -
> -//
> -// Spurious-Interrupt Vector Register (SVR)
> -//
> -typedef union {
> -  struct {
> -    UINT32  SpuriousVector:8;           ///< Spurious Vector.
> -    UINT32  SoftwareEnable:1;           ///< APIC Software Enable/Disable.
> -    UINT32  FocusProcessorChecking:1;   ///< Focus Processor Checking.
> -    UINT32  Reserved0:2;                ///< Reserved.
> -    UINT32  EoiBroadcastSuppression:1;  ///< EOI-Broadcast Suppression.
> -    UINT32  Reserved1:19;               ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_SVR;
> -
> -//
> -// Divide Configuration Register (DCR)
> -//
> -typedef union {
> -  struct {
> -    UINT32  DivideValue1:2;  ///< Low 2 bits of the divide value.
> -    UINT32  Reserved0:1;     ///< Always 0.
> -    UINT32  DivideValue2:1;  ///< Highest 1 bit of the divide value.
> -    UINT32  Reserved1:28;    ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_DCR;
> -
> -//
> -// LVT Timer Register
> -//
> -typedef union {
> -  struct {
> -    UINT32  Vector:8;          ///< The vector number of the interrupt being sent.
> -    UINT32  Reserved0:4;       ///< Reserved.
> -    UINT32  DeliveryStatus:1;  ///< 0: Idle, 1: send pending.
> -    UINT32  Reserved1:3;       ///< Reserved.
> -    UINT32  Mask:1;            ///< 0: Not masked, 1: Masked.
> -    UINT32  TimerMode:1;       ///< 0: One-shot, 1: Periodic.
> -    UINT32  Reserved2:14;      ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_LVT_TIMER;
> -
> -//
> -// LVT LINT0/LINT1 Register
> -//
> -typedef union {
> -  struct {
> -    UINT32  Vector:8;            ///< The vector number of the interrupt being
> sent.
> -    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
> -    UINT32  Reserved0:1;         ///< Reserved.
> -    UINT32  DeliveryStatus:1;    ///< 0: Idle, 1: send pending.
> -    UINT32  InputPinPolarity:1;  ///< Interrupt Input Pin Polarity.
> -    UINT32  RemoteIrr:1;         ///< RO. Set when the local APIC accepts the
> interrupt and reset when an EOI is received.
> -    UINT32  TriggerMode:1;       ///< 0:edge, 1:level.
> -    UINT32  Mask:1;              ///< 0: Not masked, 1: Masked.
> -    UINT32  Reserved1:15;        ///< Reserved.
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_LVT_LINT;
> -
> -//
> -// MSI Address Register
> -//
> -typedef union {
> -  struct {
> -    UINT32  Reserved0:2;         ///< Reserved
> -    UINT32  DestinationMode:1;   ///< Specifies the Destination Mode.
> -    UINT32  RedirectionHint:1;   ///< Specifies the Redirection Hint.
> -    UINT32  Reserved1:8;         ///< Reserved.
> -    UINT32  DestinationId:8;     ///< Specifies the Destination ID.
> -    UINT32  BaseAddress:12;      ///< Must be 0FEEH
> -  } Bits;
> -  UINT32    Uint32;
> -} LOCAL_APIC_MSI_ADDRESS;
> -
> -//
> -// MSI Address Register
> -//
> -typedef union {
> -  struct {
> -    UINT32  Vector:8;            ///< Interrupt vector in range 010h..0FEH
> -    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
> -    UINT32  Reserved0:3;         ///< Reserved.
> -    UINT32  Level:1;             ///< 0:Deassert, 1:Assert.  Ignored for Edge
> triggered interrupts.
> -    UINT32  TriggerMode:1;       ///< 0:Edge,     1:Level.
> -    UINT32  Reserved1:16;        ///< Reserved.
> -    UINT32  Reserved2:32;        ///< Reserved.
> -  } Bits;
> -  UINT64    Uint64;
> -} LOCAL_APIC_MSI_DATA;
> +#include <Register/Intel/LocalApic.h>
> 
>  #endif
> 
> diff --git a/UefiCpuPkg/Include/Register/Microcode.h
> b/UefiCpuPkg/Include/Register/Microcode.h
> index e85c0cc640..df0670bd46 100644
> --- a/UefiCpuPkg/Include/Register/Microcode.h
> +++ b/UefiCpuPkg/Include/Register/Microcode.h
> @@ -1,194 +1,13 @@
>  /** @file
> -  Microcode Definitions.
> +  Wrapper header file to include <Register/Intel/Microcode.h> in MdePkg.
> 
> -  Microcode Definitions based on contents of the
> -  Intel(R) 64 and IA-32 Architectures Software Developer's Manual
> -    Volume 3A, Section 9.11  Microcode Definitions
> -
> -  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -  @par Specification Reference:
> -  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume
> 3A,
> -  June 2016, Chapter 9 Processor Management and Initialization, Section 9-11.
> -
>  **/
> 
>  #ifndef __MICROCODE_H__
>  #define __MICROCODE_H__
> 
> -///
> -/// CPU Microcode Date in BCD format
> -///
> -typedef union {
> -  struct {
> -    UINT32   Year:16;
> -    UINT32   Day:8;
> -    UINT32   Month:8;
> -  } Bits;
> -  UINT32     Uint32;
> -} CPU_MICROCODE_DATE;
> -
> -///
> -/// CPU Microcode Processor Signature format
> -///
> -typedef union {
> -  struct {
> -    UINT32   Stepping:4;
> -    UINT32   Model:4;
> -    UINT32   Family:4;
> -    UINT32   Type:2;
> -    UINT32   Reserved1:2;
> -    UINT32   ExtendedModel:4;
> -    UINT32   ExtendedFamily:8;
> -    UINT32   Reserved2:4;
> -  } Bits;
> -  UINT32     Uint32;
> -} CPU_MICROCODE_PROCESSOR_SIGNATURE;
> -
> -#pragma pack (1)
> -
> -///
> -/// Microcode Update Format definition
> -///
> -typedef struct {
> -  ///
> -  /// Version number of the update header
> -  ///
> -  UINT32                            HeaderVersion;
> -  ///
> -  /// Unique version number for the update, the basis for the update
> -  /// signature provided by the processor to indicate the current update
> -  /// functioning within the processor. Used by the BIOS to authenticate
> -  /// the update and verify that the processor loads successfully. The
> -  /// value in this field cannot be used for processor stepping identification
> -  /// alone. This is a signed 32-bit number.
> -  ///
> -  UINT32                            UpdateRevision;
> -  ///
> -  /// Date of the update creation in binary format: mmddyyyy (e.g.
> -  /// 07/18/98 is 07181998H).
> -  ///
> -  CPU_MICROCODE_DATE                Date;
> -  ///
> -  /// Extended family, extended model, type, family, model, and stepping
> -  /// of processor that requires this particular update revision (e.g.,
> -  /// 00000650H). Each microcode update is designed specifically for a
> -  /// given extended family, extended model, type, family, model, and
> -  /// stepping of the processor.
> -  /// The BIOS uses the processor signature field in conjunction with the
> -  /// CPUID instruction to determine whether or not an update is
> -  /// appropriate to load on a processor. The information encoded within
> -  /// this field exactly corresponds to the bit representations returned by
> -  /// the CPUID instruction.
> -  ///
> -  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
> -  ///
> -  /// Checksum of Update Data and Header. Used to verify the integrity of
> -  /// the update header and data. Checksum is correct when the
> -  /// summation of all the DWORDs (including the extended Processor
> -  /// Signature Table) that comprise the microcode update result in
> -  /// 00000000H.
> -  ///
> -  UINT32                            Checksum;
> -  ///
> -  /// Version number of the loader program needed to correctly load this
> -  /// update. The initial version is 00000001H
> -  ///
> -  UINT32                            LoaderRevision;
> -  ///
> -  /// Platform type information is encoded in the lower 8 bits of this 4-
> -  /// byte field. Each bit represents a particular platform type for a given
> -  /// CPUID. The BIOS uses the processor flags field in conjunction with
> -  /// the platform Id bits in MSR (17H) to determine whether or not an
> -  /// update is appropriate to load on a processor. Multiple bits may be set
> -  /// representing support for multiple platform IDs.
> -  ///
> -  UINT32                            ProcessorFlags;
> -  ///
> -  /// Specifies the size of the encrypted data in bytes, and must be a
> -  /// multiple of DWORDs. If this value is 00000000H, then the microcode
> -  /// update encrypted data is 2000 bytes (or 500 DWORDs).
> -  ///
> -  UINT32                            DataSize;
> -  ///
> -  /// Specifies the total size of the microcode update in bytes. It is the
> -  /// summation of the header size, the encrypted data size and the size of
> -  /// the optional extended signature table. This value is always a multiple
> -  /// of 1024.
> -  ///
> -  UINT32                            TotalSize;
> -  ///
> -  /// Reserved fields for future expansion.
> -  ///
> -  UINT8                             Reserved[12];
> -} CPU_MICROCODE_HEADER;
> -
> -///
> -/// Extended Signature Table Header Field Definitions
> -///
> -typedef struct {
> -  ///
> -  /// Specifies the number of extended signature structures (Processor
> -  /// Signature[n], processor flags[n] and checksum[n]) that exist in this
> -  /// microcode update
> -  ///
> -  UINT32                            ExtendedSignatureCount;
> -  ///
> -  /// Checksum of update extended processor signature table. Used to
> -  /// verify the integrity of the extended processor signature table.
> -  /// Checksum is correct when the summation of the DWORDs that
> -  /// comprise the extended processor signature table results in
> -  /// 00000000H.
> -  ///
> -  UINT32                            ExtendedChecksum;
> -  ///
> -  /// Reserved fields.
> -  ///
> -  UINT8                             Reserved[12];
> -} CPU_MICROCODE_EXTENDED_TABLE_HEADER;
> -
> -///
> -/// Extended Signature Table Field Definitions
> -///
> -typedef struct {
> -  ///
> -  /// Extended family, extended model, type, family, model, and stepping
> -  /// of processor that requires this particular update revision (e.g.,
> -  /// 00000650H). Each microcode update is designed specifically for a
> -  /// given extended family, extended model, type, family, model, and
> -  /// stepping of the processor.
> -  /// The BIOS uses the processor signature field in conjunction with the
> -  /// CPUID instruction to determine whether or not an update is
> -  /// appropriate to load on a processor. The information encoded within
> -  /// this field exactly corresponds to the bit representations returned by
> -  /// the CPUID instruction.
> -  ///
> -  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
> -  ///
> -  /// Platform type information is encoded in the lower 8 bits of this 4-
> -  /// byte field. Each bit represents a particular platform type for a given
> -  /// CPUID. The BIOS uses the processor flags field in conjunction with
> -  /// the platform Id bits in MSR (17H) to determine whether or not an
> -  /// update is appropriate to load on a processor. Multiple bits may be set
> -  /// representing support for multiple platform IDs.
> -  ///
> -  UINT32                             ProcessorFlag;
> -  ///
> -  /// Used by utility software to decompose a microcode update into
> -  /// multiple microcode updates where each of the new updates is
> -  /// constructed without the optional Extended Processor Signature
> -  /// Table.
> -  /// To calculate the Checksum, substitute the Primary Processor
> -  /// Signature entry and the Processor Flags entry with the
> -  /// corresponding Extended Patch entry. Delete the Extended Processor
> -  /// Signature Table entries. The Checksum is correct when the
> -  /// summation of all DWORDs that comprise the created Extended
> -  /// Processor Patch results in 00000000H.
> -  ///
> -  UINT32                             Checksum;
> -} CPU_MICROCODE_EXTENDED_TABLE;
> -
> -#pragma pack ()
> +#include <Register/Intel/Microcode.h>
> 
>  #endif
> diff --git a/UefiCpuPkg/Include/Register/Msr.h
> b/UefiCpuPkg/Include/Register/Msr.h
> index c9be042983..38e3cd85ab 100644
> --- a/UefiCpuPkg/Include/Register/Msr.h
> +++ b/UefiCpuPkg/Include/Register/Msr.h
> @@ -1,44 +1,14 @@
>  /** @file
> -  MSR Definitions.
> +  Wrapper header file to include <Register/Intel/Msr.h> in MdePkg.
> 
> -  Provides defines for Machine Specific Registers(MSR) indexes. Data
> structures
> -  are provided for MSRs that contain one or more bit fields.  If the MSR value
> -  returned is a single 32-bit or 64-bit value, then a data structure is not
> -  provided for that MSR.
> -
> -  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> -  @par Specification Reference:
> -  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
> -  May 2018, Volume 4: Model-Specific-Registers (MSR)
> -
>  **/
> 
>  #ifndef __MSR_H__
>  #define __MSR_H__
> 
> -#include <Register/ArchitecturalMsr.h>
> -#include <Register/Msr/Core2Msr.h>
> -#include <Register/Msr/AtomMsr.h>
> -#include <Register/Msr/SilvermontMsr.h>
> -#include <Register/Msr/GoldmontMsr.h>
> -#include <Register/Msr/GoldmontPlusMsr.h>
> -#include <Register/Msr/NehalemMsr.h>
> -#include <Register/Msr/Xeon5600Msr.h>
> -#include <Register/Msr/XeonE7Msr.h>
> -#include <Register/Msr/SandyBridgeMsr.h>
> -#include <Register/Msr/IvyBridgeMsr.h>
> -#include <Register/Msr/HaswellMsr.h>
> -#include <Register/Msr/HaswellEMsr.h>
> -#include <Register/Msr/BroadwellMsr.h>
> -#include <Register/Msr/XeonDMsr.h>
> -#include <Register/Msr/SkylakeMsr.h>
> -#include <Register/Msr/XeonPhiMsr.h>
> -#include <Register/Msr/Pentium4Msr.h>
> -#include <Register/Msr/CoreMsr.h>
> -#include <Register/Msr/PentiumMMsr.h>
> -#include <Register/Msr/P6Msr.h>
> -#include <Register/Msr/PentiumMsr.h>
> +#include <Register/Intel/Msr.h>
> 
>  #endif
> diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> index 6473e51a55..1ab69f09e9 100644
> --- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> +++ b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
> @@ -1,184 +1,13 @@
>  /** @file
> -SMRAM Save State Map Definitions.
> -
> -SMRAM Save State Map definitions based on contents of the
> -Intel(R) 64 and IA-32 Architectures Software Developer's Manual
> -  Volume 3C, Section 34.4 SMRAM
> -  Volume 3C, Section 34.5 SMI Handler Execution Environment
> -  Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
> -
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> +  Wrapper header file to include <Register/Intel/SmramSaveStateMap.h> in
> MdePkg.
> 
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
>  **/
> 
>  #ifndef __SMRAM_SAVE_STATE_MAP_H__
>  #define __SMRAM_SAVE_STATE_MAP_H__
> 
> -///
> -/// Default SMBASE address
> -///
> -#define SMM_DEFAULT_SMBASE           0x30000
> -
> -///
> -/// Offset of SMM handler from SMBASE
> -///
> -#define SMM_HANDLER_OFFSET           0x8000
> -
> -///
> -/// Offset of SMRAM Save State Map from SMBASE
> -///
> -#define SMRAM_SAVE_STATE_MAP_OFFSET  0xfc00
> -
> -#pragma pack (1)
> -
> -///
> -/// 32-bit SMRAM Save State Map
> -///
> -typedef struct {
> -  UINT8   Reserved[0x200];  // 7c00h
> -                            // Padded an extra 0x200 bytes so 32-bit and 64-bit
> -                            // SMRAM Save State Maps are the same size
> -  UINT8   Reserved1[0xf8];  // 7e00h
> -  UINT32  SMBASE;           // 7ef8h
> -  UINT32  SMMRevId;         // 7efch
> -  UINT16  IORestart;        // 7f00h
> -  UINT16  AutoHALTRestart;  // 7f02h
> -  UINT8   Reserved2[0x9C];  // 7f08h
> -  UINT32  IOMemAddr;        // 7fa0h
> -  UINT32  IOMisc;           // 7fa4h
> -  UINT32  _ES;              // 7fa8h
> -  UINT32  _CS;              // 7fach
> -  UINT32  _SS;              // 7fb0h
> -  UINT32  _DS;              // 7fb4h
> -  UINT32  _FS;              // 7fb8h
> -  UINT32  _GS;              // 7fbch
> -  UINT32  Reserved3;        // 7fc0h
> -  UINT32  _TR;              // 7fc4h
> -  UINT32  _DR7;             // 7fc8h
> -  UINT32  _DR6;             // 7fcch
> -  UINT32  _EAX;             // 7fd0h
> -  UINT32  _ECX;             // 7fd4h
> -  UINT32  _EDX;             // 7fd8h
> -  UINT32  _EBX;             // 7fdch
> -  UINT32  _ESP;             // 7fe0h
> -  UINT32  _EBP;             // 7fe4h
> -  UINT32  _ESI;             // 7fe8h
> -  UINT32  _EDI;             // 7fech
> -  UINT32  _EIP;             // 7ff0h
> -  UINT32  _EFLAGS;          // 7ff4h
> -  UINT32  _CR3;             // 7ff8h
> -  UINT32  _CR0;             // 7ffch
> -} SMRAM_SAVE_STATE_MAP32;
> -
> -///
> -/// 64-bit SMRAM Save State Map
> -///
> -typedef struct {
> -  UINT8   Reserved1[0x1d0];  // 7c00h
> -  UINT32  GdtBaseHiDword;    // 7dd0h
> -  UINT32  LdtBaseHiDword;    // 7dd4h
> -  UINT32  IdtBaseHiDword;    // 7dd8h
> -  UINT8   Reserved2[0xc];    // 7ddch
> -  UINT64  IO_EIP;            // 7de8h
> -  UINT8   Reserved3[0x50];   // 7df0h
> -  UINT32  _CR4;              // 7e40h
> -  UINT8   Reserved4[0x48];   // 7e44h
> -  UINT32  GdtBaseLoDword;    // 7e8ch
> -  UINT32  Reserved5;         // 7e90h
> -  UINT32  IdtBaseLoDword;    // 7e94h
> -  UINT32  Reserved6;         // 7e98h
> -  UINT32  LdtBaseLoDword;    // 7e9ch
> -  UINT8   Reserved7[0x38];   // 7ea0h
> -  UINT64  EptVmxControl;     // 7ed8h
> -  UINT32  EnEptVmxControl;   // 7ee0h
> -  UINT8   Reserved8[0x14];   // 7ee4h
> -  UINT32  SMBASE;            // 7ef8h
> -  UINT32  SMMRevId;          // 7efch
> -  UINT16  IORestart;         // 7f00h
> -  UINT16  AutoHALTRestart;   // 7f02h
> -  UINT8   Reserved9[0x18];   // 7f04h
> -  UINT64  _R15;              // 7f1ch
> -  UINT64  _R14;
> -  UINT64  _R13;
> -  UINT64  _R12;
> -  UINT64  _R11;
> -  UINT64  _R10;
> -  UINT64  _R9;
> -  UINT64  _R8;
> -  UINT64  _RAX;              // 7f5ch
> -  UINT64  _RCX;
> -  UINT64  _RDX;
> -  UINT64  _RBX;
> -  UINT64  _RSP;
> -  UINT64  _RBP;
> -  UINT64  _RSI;
> -  UINT64  _RDI;
> -  UINT64  IOMemAddr;         // 7f9ch
> -  UINT32  IOMisc;            // 7fa4h
> -  UINT32  _ES;               // 7fa8h
> -  UINT32  _CS;
> -  UINT32  _SS;
> -  UINT32  _DS;
> -  UINT32  _FS;
> -  UINT32  _GS;
> -  UINT32  _LDTR;             // 7fc0h
> -  UINT32  _TR;
> -  UINT64  _DR7;              // 7fc8h
> -  UINT64  _DR6;
> -  UINT64  _RIP;              // 7fd8h
> -  UINT64  IA32_EFER;         // 7fe0h
> -  UINT64  _RFLAGS;           // 7fe8h
> -  UINT64  _CR3;              // 7ff0h
> -  UINT64  _CR0;              // 7ff8h
> -} SMRAM_SAVE_STATE_MAP64;
> -
> -///
> -/// Union of 32-bit and 64-bit SMRAM Save State Maps
> -///
> -typedef union  {
> -  SMRAM_SAVE_STATE_MAP32  x86;
> -  SMRAM_SAVE_STATE_MAP64  x64;
> -} SMRAM_SAVE_STATE_MAP;
> -
> -///
> -/// Minimum SMM Revision ID that supports IOMisc field in SMRAM Save
> State Map
> -///
> -#define SMRAM_SAVE_STATE_MIN_REV_ID_IOMISC  0x30004
> -
> -///
> -/// SMRAM Save State Map IOMisc I/O Length Values
> -///
> -#define  SMM_IO_LENGTH_BYTE             0x01
> -#define  SMM_IO_LENGTH_WORD             0x02
> -#define  SMM_IO_LENGTH_DWORD            0x04
> -
> -///
> -/// SMRAM Save State Map IOMisc I/O Instruction Type Values
> -///
> -#define  SMM_IO_TYPE_IN_IMMEDIATE       0x9
> -#define  SMM_IO_TYPE_IN_DX              0x1
> -#define  SMM_IO_TYPE_OUT_IMMEDIATE      0x8
> -#define  SMM_IO_TYPE_OUT_DX             0x0
> -#define  SMM_IO_TYPE_INS                0x3
> -#define  SMM_IO_TYPE_OUTS               0x2
> -#define  SMM_IO_TYPE_REP_INS            0x7
> -#define  SMM_IO_TYPE_REP_OUTS           0x6
> -
> -///
> -/// SMRAM Save State Map IOMisc structure
> -///
> -typedef union {
> -  struct {
> -    UINT32  SmiFlag:1;
> -    UINT32  Length:3;
> -    UINT32  Type:4;
> -    UINT32  Reserved1:8;
> -    UINT32  Port:16;
> -  } Bits;
> -  UINT32  Uint32;
> -} SMRAM_SAVE_STATE_IOMISC;
> -
> -#pragma pack ()
> +#include <Register/Intel/SmramSaveStateMap.h>
> 
>  #endif
> diff --git a/UefiCpuPkg/Include/Register/StmApi.h
> b/UefiCpuPkg/Include/Register/StmApi.h
> index 0ecc0b86d5..4526155405 100644
> --- a/UefiCpuPkg/Include/Register/StmApi.h
> +++ b/UefiCpuPkg/Include/Register/StmApi.h
> @@ -1,948 +1,13 @@
>  /** @file
> -  STM API definition
> +  Wrapper header file to include <Register/Intel/StmApi.h> in MdePkg.
> 
> -  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -  @par Specification Reference:
> -  SMI Transfer Monitor (STM) User Guide Revision 1.00
> -
>  **/
> 
>  #ifndef _STM_API_H_
>  #define _STM_API_H_
> 
> -#include <Register/StmStatusCode.h>
> -#include <Register/StmResourceDescriptor.h>
> -#include <Register/ArchitecturalMsr.h>
> -
> -#pragma pack (1)
> -
> -/**
> -  STM Header Structures
> -**/
> -
> -typedef struct {
> -  UINT32  Intel64ModeSupported :1;  ///> bitfield
> -  UINT32  EptSupported         :1;  ///> bitfield
> -  UINT32  Reserved             :30; ///> must be 0
> -} STM_FEAT;
> -
> -#define STM_SPEC_VERSION_MAJOR  1
> -#define STM_SPEC_VERSION_MINOR  0
> -
> -typedef struct {
> -  UINT8     StmSpecVerMajor;
> -  UINT8     StmSpecVerMinor;
> -  ///
> -  /// Must be zero
> -  ///
> -  UINT16    Reserved;
> -  UINT32    StaticImageSize;
> -  UINT32    PerProcDynamicMemorySize;
> -  UINT32    AdditionalDynamicMemorySize;
> -  STM_FEAT  StmFeatures;
> -  UINT32    NumberOfRevIDs;
> -  UINT32    StmSmmRevID[1];
> -  ///
> -  /// The total STM_HEADER should be 4K.
> -  ///
> -} SOFTWARE_STM_HEADER;
> -
> -typedef struct {
> -  MSEG_HEADER          HwStmHdr;
> -  SOFTWARE_STM_HEADER  SwStmHdr;
> -} STM_HEADER;
> -
> -
> -/**
> -  VMCALL API Numbers
> -  API number convention: BIOS facing VMCALL interfaces have bit 16 clear
> -**/
> -
> -/**
> -  StmMapAddressRange enables a SMM guest to create a non-1:1 virtual to
> -  physical mapping of an address range into the SMM guest's virtual
> -  memory space.
> -
> -  @param  EAX  #STM_API_MAP_ADDRESS_RANGE (0x00000001)
> -  @param  EBX  Low 32 bits of physical address of caller allocated
> -               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure.
> -  @param  ECX  High 32 bits of physical address of caller allocated
> -               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure. If
> Intel64Mode is
> -               clear (0), ECX must be 0.
> -
> -  @note  All fields of STM_MAP_ADDRESS_RANGE_DESCRIPTOR are inputs
> only. They
> -         are not modified by StmMapAddressRange.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS.
> -                The memory range was mapped as requested.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
> -                The requested mapping contains a protected resource.
> -  @retval  EAX  #ERROR_STM_CACHE_TYPE_NOT_SUPPORTED
> -                The requested cache type could not be satisfied.
> -  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
> -                Page count must not be zero.
> -  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
> -                STM supports EPT and has not implemented
> StmMapAddressRange().
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_MAP_ADDRESS_RANGE                  0x00000001
> -
> -/**
> -  STM Map Address Range Descriptor for
> #STM_API_MAP_ADDRESS_RANGE VMCALL
> -**/
> -typedef struct {
> -  UINT64  PhysicalAddress;
> -  UINT64  VirtualAddress;
> -  UINT32  PageCount;
> -  UINT32  PatCacheType;
> -} STM_MAP_ADDRESS_RANGE_DESCRIPTOR;
> -
> -/**
> -  Define values for PatCacheType field of
> #STM_MAP_ADDRESS_RANGE_DESCRIPTOR
> -  @{
> -**/
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_ST_UC        0x00
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WC           0x01
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WT           0x04
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WP           0x05
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WB           0x06
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_UC           0x07
> -#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_FOLLOW_MTRR
> 0xFFFFFFFF
> -/// @}
> -
> -/**
> -  StmUnmapAddressRange enables a SMM guest to remove mappings from
> its page
> -  table.
> -
> -  If TXT_PROCESSOR_SMM_DESCRIPTOR.EptEnabled bit is set by the STM,
> BIOS can
> -  control its own page tables. In this case, the STM implementation may
> -  optionally return ERROR_STM_FUNCTION_NOT_SUPPORTED.
> -
> -  @param  EAX  #STM_API_UNMAP_ADDRESS_RANGE (0x00000002)
> -  @param  EBX  Low 32 bits of virtual address of caller allocated
> -               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure.
> -  @param  ECX  High 32 bits of virtual address of caller allocated
> -               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure. If
> Intel64Mode is
> -               clear (0), ECX must be zero.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The memory range was
> unmapped
> -                as requested.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
> -                STM supports EPT and has not implemented
> StmUnmapAddressRange().
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_UNMAP_ADDRESS_RANGE                0x00000002
> -
> -/**
> -  STM Unmap Address Range Descriptor for
> #STM_API_UNMAP_ADDRESS_RANGE VMCALL
> -**/
> -typedef struct {
> -  UINT64  VirtualAddress;
> -  UINT32  Length;
> -} STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR;
> -
> -
> -/**
> -  Since the normal OS environment runs with a different set of page tables
> than
> -  the SMM guest, virtual mappings will certainly be different. In order to do a
> -  guest virtual to host physical translation of an address from the normal OS
> -  code (EIP for example), it is necessary to walk the page tables governing
> the
> -  OS page mappings. Since the SMM guest has no direct access to the page
> tables,
> -  it must ask the STM to do this page table walk. This is supported via the
> -  StmAddressLookup VMCALL. All OS page table formats need to be
> supported,
> -  (e.g. PAE, PSE, Intel64, EPT, etc.)
> -
> -  StmAddressLookup takes a CR3 value and a virtual address from the
> interrupted
> -  code as input and returns the corresponding physical address. It also
> -  optionally maps the physical address into the SMM guest's virtual address
> -  space. This new mapping persists ONLY for the duration of the SMI and if
> -  needed in subsequent SMIs it must be remapped. PAT cache types follow
> the
> -  interrupted environment's page table.
> -
> -  If EPT is enabled, OS CR3 only provides guest physical address information,
> -  but the SMM guest might also need to know the host physical address.
> Since
> -  SMM does not have direct access rights to EPT (it is protected by the STM),
> -  SMM can input InterruptedEptp to let STM help to walk through it, and
> output
> -  the host physical address.
> -
> -  @param  EAX  #STM_API_ADDRESS_LOOKUP (0x00000003)
> -  @param  EBX  Low 32 bits of virtual address of caller allocated
> -               STM_ADDRESS_LOOKUP_DESCRIPTOR structure.
> -  @param  ECX  High 32 bits of virtual address of caller allocated
> -               STM_ADDRESS_LOOKUP_DESCRIPTOR structure. If Intel64Mode is
> -               clear (0), ECX must be zero.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS.  PhysicalAddress contains the
> -                host physical address determined by walking the interrupted SMM
> -                guest's page tables.  SmmGuestVirtualAddress contains the SMM
> -                guest's virtual mapping of the requested address.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
> -                The requested page was a protected page.
> -  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
> -                The requested virtual address did not exist in the page given
> -                page table.
> -  @retval  EAX  #ERROR_STM_BAD_CR3
> -                The CR3 input was invalid. CR3 values must be from one of the
> -                interrupted guest, or from the interrupted guest of another
> -                processor.
> -  @retval  EAX  #ERROR_STM_PHYSICAL_OVER_4G
> -                The resulting physical address is greater than 4G and no virtual
> -                address was supplied. The STM could not determine what address
> -                within the SMM guest's virtual address space to do the mapping.
> -                STM_ADDRESS_LOOKUP_DESCRIPTOR field PhysicalAddress
> contains the
> -                physical address determined by walking the interrupted
> -                environment's page tables.
> -  @retval  EAX  #ERROR_STM_VIRTUAL_SPACE_TOO_SMALL
> -                A specific virtual mapping was requested, but
> -                SmmGuestVirtualAddress + Length exceeds 4G and the SMI handler
> -                is running in 32 bit mode.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_ADDRESS_LOOKUP                     0x00000003
> -
> -/**
> -  STM Lookup Address Range Descriptor for #STM_API_ADDRESS_LOOKUP
> VMCALL
> -**/
> -typedef struct {
> -  UINT64  InterruptedGuestVirtualAddress;
> -  UINT32  Length;
> -  UINT64  InterruptedCr3;
> -  UINT64  InterruptedEptp;
> -  UINT32  MapToSmmGuest:2;
> -  UINT32  InterruptedCr4Pae:1;
> -  UINT32  InterruptedCr4Pse:1;
> -  UINT32  InterruptedIa32eMode:1;
> -  UINT32  Reserved1:27;
> -  UINT32  Reserved2;
> -  UINT64  PhysicalAddress;
> -  UINT64  SmmGuestVirtualAddress;
> -} STM_ADDRESS_LOOKUP_DESCRIPTOR;
> -
> -/**
> -  Define values for the MapToSmmGuest field of
> #STM_ADDRESS_LOOKUP_DESCRIPTOR
> -  @{
> -**/
> -#define STM_ADDRESS_LOOKUP_DESCRIPTOR_DO_NOT_MAP                 0
> -#define STM_ADDRESS_LOOKUP_DESCRIPTOR_ONE_TO_ONE                 1
> -#define
> STM_ADDRESS_LOOKUP_DESCRIPTOR_VIRTUAL_ADDRESS_SPECIFIED  3
> -/// @}
> -
> -
> -/**
> -  When returning from a protection exception (see section 6.2), the SMM
> guest
> -  can instruct the STM to take one of two paths. It can either request a value
> -  be logged to the TXT.ERRORCODE register and subsequently reset the
> machine
> -  (indicating it couldn't resolve the problem), or it can request that the STM
> -  resume the SMM guest again with the specified register state.
> -
> -  Unlike other VMCALL interfaces, StmReturnFromProtectionException
> behaves more
> -  like a jump or an IRET instruction than a "call". It does not return directly
> -  to the caller, but indirectly to a different location specified on the
> -  caller's stack (see section 6.2) or not at all.
> -
> -  If the SMM guest STM protection exception handler itself causes a
> protection
> -  exception (e.g. a single nested exception), or more than 100 un-nested
> -  exceptions occur within the scope of a single SMI event, the STM must
> write
> -  STM_CRASH_PROTECTION_EXCEPTION_FAILURE to the TXT.ERRORCODE
> register and
> -  assert TXT.CMD.SYS_RESET. The reason for these restrictions is to simplify
> -  the code requirements while still enabling a reasonable debugging
> capability.
> -
> -  @param  EAX  #STM_API_RETURN_FROM_PROTECTION_EXCEPTION
> (0x00000004)
> -  @param  EBX  If 0, resume SMM guest using register state found on
> exception
> -               stack.  If in range 0x01..0x0F, EBX contains a BIOS error code
> -               which the STM must record in the TXT.ERRORCODE register and
> -               subsequently reset the system via TXT.CMD.SYS_RESET. The value
> -               of the TXT.ERRORCODE register is calculated as follows:
> -
> -                 TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC
> -
> -               Values 0x10..0xFFFFFFFF are reserved, do not use.
> -
> -**/
> -#define STM_API_RETURN_FROM_PROTECTION_EXCEPTION   0x00000004
> -
> -
> -/**
> -  VMCALL API Numbers
> -  API number convention: MLE facing VMCALL interfaces have bit 16 set.
> -
> -  The STM configuration lifecycle is as follows:
> -    1. SENTER->SINIT->MLE: MLE begins execution with SMI disabled
> (masked).
> -    2. MLE invokes #STM_API_INITIALIZE_PROTECTION VMCALL to prepare
> STM for
> -       setup of initial protection profile. This is done on a single CPU and
> -       has global effect.
> -    3. MLE invokes #STM_API_PROTECT_RESOURCE VMCALL to define the
> initial
> -       protection profile. The protection profile is global across all CPUs.
> -    4. MLE invokes #STM_API_START VMCALL to enable the STM to begin
> receiving
> -       SMI events. This must be done on every logical CPU.
> -    5. MLE may invoke #STM_API_PROTECT_RESOURCE VMCALL or
> -       #STM_API_UNPROTECT_RESOURCE VMCALL during runtime as many
> times as
> -       necessary.
> -    6. MLE invokes #STM_API_STOP VMCALL to disable the STM. SMI is again
> masked
> -       following #STM_API_STOP VMCALL.
> -**/
> -
> -/**
> -  StartStmVmcall() is used to configure an STM that is present in MSEG. SMIs
> -  should remain disabled from the invocation of GETSEC[SENTER] until they
> are
> -  re-enabled by StartStmVMCALL(). When StartStmVMCALL() returns, SMI is
> -  enabled and the STM has been started and is active. Prior to invoking
> -  StartStmVMCALL(), the MLE root should first invoke
> -  InitializeProtectionVMCALL() followed by as many iterations of
> -  ProtectResourceVMCALL() as necessary to establish the initial protection
> -  profile.  StartStmVmcall() must be invoked on all processor threads.
> -
> -  @param  EAX  #STM_API_START (0x00010001)
> -  @param  EDX  STM configuration options. These provide the MLE with the
> -               ability to pass configuration parameters to the STM.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The STM has been configured
> -                and is now active and the guarding all requested resources.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_ALREADY_STARTED
> -                The STM is already configured and active. STM remains active and
> -                guarding previously enabled resource list.
> -  @retval  EAX  #ERROR_STM_WITHOUT_SMX_UNSUPPORTED
> -                The StartStmVMCALL() was invoked from VMX root mode, but
> outside
> -                of SMX. This error code indicates the STM or platform does not
> -                support the STM outside of SMX. The SMI handler remains active
> -                and operates in legacy mode. See Appendix C
> -  @retval  EAX  #ERROR_STM_UNSUPPORTED_MSR_BIT
> -                The CPU doesn't support the MSR bit. The STM is not active.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_START                              (BIT16 | 1)
> -
> -/**
> -  Bit values for EDX input parameter to #STM_API_START VMCALL
> -  @{
> -**/
> -#define STM_CONFIG_SMI_UNBLOCKING_BY_VMX_OFF  BIT0
> -/// @}
> -
> -
> -/**
> -  The StopStmVMCALL() is invoked by the MLE to teardown an active STM.
> This is
> -  normally done as part of a full teardown of the SMX environment when the
> -  system is being shut down. At the time the call is invoked, SMI is enabled
> -  and the STM is active.  When the call returns, the STM has been stopped
> and
> -  all STM context is discarded and SMI is disabled.
> -
> -  @param  EAX  #STM_API_STOP (0x00010002)
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The STM has been stopped and
> -                is no longer processing SMI events. SMI is blocked.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_STOPPED
> -                The STM was not active.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_STOP                               (BIT16 | 2)
> -
> -
> -/**
> -  The ProtectResourceVMCALL() is invoked by the MLE root to request
> protection
> -  of specific resources. The request is defined by a STM_RESOURCE_LIST,
> which
> -  may contain more than one resource descriptor. Each resource descriptor is
> -  processed separately by the STM. Whether or not protection for any
> specific
> -  resource is granted is returned by the STM via the ReturnStatus bit in the
> -  associated STM_RSC_DESC_HEADER.
> -
> -  @param  EAX  #STM_API_PROTECT_RESOURCE (0x00010003)
> -  @param  EBX  Low 32 bits of physical address of caller allocated
> -               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
> -               making the buffer 4K aligned.
> -  @param  ECX  High 32 bits of physical address of caller allocated
> -               STM_RESOURCE_LIST.
> -
> -  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
> -         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
> -         return, the ReturnStatus bit is set for each resource request granted,
> -         and clear for each resource request denied. There are no other fields
> -         modified by ProtectResourceVMCALL(). The STM_RESOURCE_LIST must
> be
> -         contained entirely within a single 4K page.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The STM has successfully
> -                merged the entire protection request into the active protection
> -                profile.  There is therefore no need to check the ReturnStatus
> -                bits in the STM_RESOURCE_LIST.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_UNPROTECTABLE_RESOURCE
> -                At least one of the requested resource protections intersects a
> -                BIOS required resource. Therefore, the caller must walk through
> -                the STM_RESOURCE_LIST to determine which of the requested
> -                resources was not granted protection. The entire list must be
> -                traversed since there may be multiple failures.
> -  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
> -                The resource list could not be parsed correctly, or did not
> -                terminate before crossing a 4K page boundary. The caller must
> -                walk through the STM_RESOURCE_LIST to determine which of the
> -                requested resources was not granted protection. The entire list
> -                must be traversed since there may be multiple failures.
> -  @retval  EAX  #ERROR_STM_OUT_OF_RESOURCES
> -                The STM has encountered an internal error and cannot complete
> -                the request.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_PROTECT_RESOURCE                   (BIT16 | 3)
> -
> -
> -/**
> -  The UnProtectResourceVMCALL() is invoked by the MLE root to request
> that the
> -  STM allow the SMI handler access to the specified resources.
> -
> -  @param  EAX  #STM_API_UNPROTECT_RESOURCE (0x00010004)
> -  @param  EBX  Low 32 bits of physical address of caller allocated
> -               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
> -               making the buffer 4K aligned.
> -  @param  ECX  High 32 bits of physical address of caller allocated
> -               STM_RESOURCE_LIST.
> -
> -  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
> -         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
> -         return, the ReturnStatus bit is set for each resource processed. For
> -         a properly formed STM_RESOURCE_LIST, this should be all resources
> -         listed. There are no other fields modified by
> -         UnProtectResourceVMCALL(). The STM_RESOURCE_LIST must be
> contained
> -         entirely within a single 4K page.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The requested resources are
> -                not being guarded by the STM.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
> -                The resource list could not be parsed correctly, or did not
> -                terminate before crossing a 4K page boundary. The caller must
> -                walk through the STM_RESOURCE_LIST to determine which of the
> -                requested resources were not able to be unprotected. The entire
> -                list must be traversed since there may be multiple failures.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_UNPROTECT_RESOURCE                 (BIT16 | 4)
> -
> -
> -/**
> -  The GetBiosResourcesVMCALL() is invoked by the MLE root to request the
> list
> -  of BIOS required resources from the STM.
> -
> -  @param  EAX  #STM_API_GET_BIOS_RESOURCES (0x00010005)
> -  @param  EBX  Low 32 bits of physical address of caller allocated destination
> -               buffer. Bits 11:0 are ignored and assumed to be zero, making the
> -               buffer 4K aligned.
> -  @param  ECX  High 32 bits of physical address of caller allocated destination
> -               buffer.
> -  @param  EDX  Indicates which page of the BIOS resource list to copy into
> the
> -               destination buffer. The first page is indicated by 0, the second
> -               page by 1, etc.
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS. The destination buffer
> -                contains the BIOS required resources. If the page retrieved is
> -                the last page, EDX will be cleared to 0. If there are more pages
> -                to retrieve, EDX is incremented to the next page index. Calling
> -                software should iterate on GetBiosResourcesVMCALL() until EDX is
> -                returned cleared to 0.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
> -                The page index supplied in EDX input was out of range.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -  @retval  EDX  Page index of next page to read. A return of EDX=0 signifies
> -                that the entire list has been read.
> -                @note  EDX is both an input and an output register.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_GET_BIOS_RESOURCES                 (BIT16 | 5)
> -
> -
> -/**
> -  The ManageVmcsDatabaseVMCALL() is invoked by the MLE root to add or
> remove an
> -  MLE guest (including the MLE root) from the list of protected domains.
> -
> -  @param  EAX  #STM_API_MANAGE_VMCS_DATABASE (0x00010006)
> -  @param  EBX  Low 32 bits of physical address of caller allocated
> -               STM_VMCS_DATABASE_REQUEST. Bits 11:0 are ignored and
> assumed to
> -               be zero, making the buffer 4K aligned.
> -  @param  ECX  High 32 bits of physical address of caller allocated
> -               STM_VMCS_DATABASE_REQUEST.
> -
> -  @note  All fields of STM_VMCS_DATABASE_REQUEST are inputs only.
> They are not
> -         modified by ManageVmcsDatabaseVMCALL().
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_INVALID_VMCS
> -                Indicates a request to remove a VMCS from the database was made,
> -                but the referenced VMCS was not found in the database.
> -  @retval  EAX  #ERROR_STM_VMCS_PRESENT
> -                Indicates a request to add a VMCS to the database was made, but
> -                the referenced VMCS was already present in the database.
> -  @retval  EAX  #ERROR_INVALID_PARAMETER
> -                Indicates non-zero reserved field.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_MANAGE_VMCS_DATABASE               (BIT16 | 6)
> -
> -/**
> -  STM VMCS Database Request for #STM_API_MANAGE_VMCS_DATABASE
> VMCALL
> -**/
> -typedef struct {
> -  ///
> -  /// bits 11:0 are reserved and must be 0
> -  ///
> -  UINT64  VmcsPhysPointer;
> -  UINT32  DomainType :4;
> -  UINT32  XStatePolicy :2;
> -  UINT32  DegradationPolicy :4;
> -  ///
> -  /// Must be 0
> -  ///
> -  UINT32  Reserved1 :22;
> -  UINT32  AddOrRemove;
> -} STM_VMCS_DATABASE_REQUEST;
> -
> -/**
> -  Values for the DomainType field of #STM_VMCS_DATABASE_REQUEST
> -  @{
> -**/
> -#define DOMAIN_UNPROTECTED            0
> -#define DOMAIN_DISALLOWED_IO_OUT      BIT0
> -#define DOMAIN_DISALLOWED_IO_IN       BIT1
> -#define DOMAIN_INTEGRITY              BIT2
> -#define DOMAIN_CONFIDENTIALITY        BIT3
> -#define DOMAIN_INTEGRITY_PROT_OUT_IN  (DOMAIN_INTEGRITY)
> -#define DOMAIN_FULLY_PROT_OUT_IN      (DOMAIN_CONFIDENTIALITY |
> DOMAIN_INTEGRITY)
> -#define DOMAIN_FULLY_PROT             (DOMAIN_FULLY_PROT_OUT_IN |
> DOMAIN_DISALLOWED_IO_IN | DOMAIN_DISALLOWED_IO_OUT)
> -/// @}
> -
> -/**
> -  Values for the XStatePolicy field of #STM_VMCS_DATABASE_REQUEST
> -  @{
> -**/
> -#define XSTATE_READWRITE  0x00
> -#define XSTATE_READONLY   0x01
> -#define XSTATE_SCRUB      0x03
> -/// @}
> -
> -/**
> -  Values for the AddOrRemove field of #STM_VMCS_DATABASE_REQUEST
> -  @{
> -**/
> -#define STM_VMCS_DATABASE_REQUEST_ADD     1
> -#define STM_VMCS_DATABASE_REQUEST_REMOVE  0
> -/// @}
> -
> -
> -/**
> -  InitializeProtectionVMCALL() prepares the STM for setup of the initial
> -  protection profile which is subsequently communicated via one or more
> -  invocations of ProtectResourceVMCALL(), prior to invoking
> StartStmVMCALL().
> -  It is only necessary to invoke InitializeProtectionVMCALL() on one
> processor
> -  thread.  InitializeProtectionVMCALL() does not alter whether SMIs are
> masked
> -  or unmasked. The STM should return back to the MLE with "Blocking by
> SMI" set
> -  to 1 in the GUEST_INTERRUPTIBILITY field for the VMCS the STM created
> for the
> -  MLE guest.
> -
> -  @param  EAX  #STM_API_INITIALIZE_PROTECTION (0x00010007)
> -
> -  @retval  CF   0
> -                No error, EAX set to STM_SUCCESS, EBX bits set to indicate STM
> -                capabilities as defined below. The STM has set up an empty
> -                protection profile, except for the resources that it sets up to
> -                protect itself. The STM must not allow the SMI handler to map
> -                any pages from the MSEG Base to the top of TSEG. The STM must
> -                also not allow SMI handler access to those MSRs which the STM
> -                requires for its own protection.
> -  @retval  CF   1
> -                An error occurred, EAX holds relevant error value.
> -  @retval  EAX  #ERROR_STM_ALREADY_STARTED
> -                The STM is already configured and active. The STM remains active
> -                and guarding the previously enabled resource list.
> -  @retval  EAX  #ERROR_STM_UNPROTECTABLE
> -                The STM determines that based on the platform configuration, the
> -                STM is unable to protect itself. For example, the BIOS required
> -                resource list contains memory pages in MSEG.
> -  @retval  EAX  #ERROR_STM_UNSPECIFIED
> -                An unspecified error occurred.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_INITIALIZE_PROTECTION              (BIT16 | 7)
> -
> -/**
> -  Byte granular support bits returned in EBX from
> #STM_API_INITIALIZE_PROTECTION
> -  @{
> -**/
> -#define STM_RSC_BGI  BIT1
> -#define STM_RSC_BGM  BIT2
> -#define STM_RSC_MSR  BIT3
> -/// @}
> -
> -
> -/**
> -  The ManageEventLogVMCALL() is invoked by the MLE root to control the
> logging
> -  feature. It consists of several sub-functions to facilitate establishment of
> -  the log itself, configuring what events will be logged, and functions to
> -  start, stop, and clear the log.
> -
> -  @param  EAX  #STM_API_MANAGE_EVENT_LOG (0x00010008)
> -  @param  EBX  Low 32 bits of physical address of caller allocated
> -               STM_EVENT_LOG_MANAGEMENT_REQUEST. Bits 11:0 are ignored
> and
> -               assumed to be zero, making the buffer 4K aligned.
> -  @param  ECX  High 32 bits of physical address of caller allocated
> -               STM_EVENT_LOG_MANAGEMENT_REQUEST.
> -
> -  @retval  CF=0
> -           No error, EAX set to STM_SUCCESS.
> -  @retval  CF=1
> -           An error occurred, EAX holds relevant error value. See subfunction
> -           descriptions below for details.
> -
> -  @note  All other registers unmodified.
> -**/
> -#define STM_API_MANAGE_EVENT_LOG                   (BIT16 | 8)
> -
> -///
> -/// STM Event Log Management Request for
> #STM_API_MANAGE_EVENT_LOG VMCALL
> -///
> -typedef struct {
> -  UINT32      SubFunctionIndex;
> -  union {
> -    struct {
> -      UINT32  PageCount;
> -      //
> -      // number of elements is PageCount
> -      //
> -      UINT64  Pages[];
> -    } LogBuffer;
> -    //
> -    // bitmap of EVENT_TYPE
> -    //
> -    UINT32    EventEnableBitmap;
> -  } Data;
> -} STM_EVENT_LOG_MANAGEMENT_REQUEST;
> -
> -/**
> -  Defines values for the SubFunctionIndex field of
> -  #STM_EVENT_LOG_MANAGEMENT_REQUEST
> -  @{
> -**/
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_NEW_LOG        1
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CONFIGURE_LOG  2
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_START_LOG      3
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_STOP_LOG       4
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CLEAR_LOG      5
> -#define STM_EVENT_LOG_MANAGEMENT_REQUEST_DELETE_LOG     6
> -/// @}
> -
> -/**
> -  Log Entry Header
> -**/
> -typedef struct {
> -  UINT32  EventSerialNumber;
> -  UINT16  Type;
> -  UINT16  Lock :1;
> -  UINT16  Valid :1;
> -  UINT16  ReadByMle :1;
> -  UINT16  Wrapped :1;
> -  UINT16  Reserved :12;
> -} LOG_ENTRY_HEADER;
> -
> -/**
> -  Enum values for the Type field of #LOG_ENTRY_HEADER
> -**/
> -typedef enum {
> -  EvtLogStarted,
> -  EvtLogStopped,
> -  EvtLogInvalidParameterDetected,
> -  EvtHandledProtectionException,
> -  ///
> -  /// unhandled protection exceptions result in reset & cannot be logged
> -  ///
> -  EvtBiosAccessToUnclaimedResource,
> -  EvtMleResourceProtectionGranted,
> -  EvtMleResourceProtectionDenied,
> -  EvtMleResourceUnprotect,
> -  EvtMleResourceUnprotectError,
> -  EvtMleDomainTypeDegraded,
> -  ///
> -  /// add more here
> -  ///
> -  EvtMleMax,
> -  ///
> -  /// Not used
> -  ///
> -  EvtInvalid = 0xFFFFFFFF,
> -} EVENT_TYPE;
> -
> -typedef struct {
> -  UINT32  Reserved;
> -} ENTRY_EVT_LOG_STARTED;
> -
> -typedef struct {
> -  UINT32  Reserved;
> -} ENTRY_EVT_LOG_STOPPED;
> -
> -typedef struct {
> -  UINT32  VmcallApiNumber;
> -} ENTRY_EVT_LOG_INVALID_PARAM;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_MLE_RSC_PROT_GRANTED;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_MLE_RSC_PROT_DENIED;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_MLE_RSC_UNPROT;
> -
> -typedef struct {
> -  STM_RSC  Resource;
> -} ENTRY_EVT_MLE_RSC_UNPROT_ERROR;
> -
> -typedef struct {
> -  UINT64  VmcsPhysPointer;
> -  UINT8   ExpectedDomainType;
> -  UINT8   DegradedDomainType;
> -} ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED;
> -
> -typedef union {
> -  ENTRY_EVT_LOG_STARTED                       Started;
> -  ENTRY_EVT_LOG_STOPPED                       Stopped;
> -  ENTRY_EVT_LOG_INVALID_PARAM                 InvalidParam;
> -  ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION
> HandledProtectionException;
> -  ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC         BiosUnclaimedRsc;
> -  ENTRY_EVT_MLE_RSC_PROT_GRANTED              MleRscProtGranted;
> -  ENTRY_EVT_MLE_RSC_PROT_DENIED               MleRscProtDenied;
> -  ENTRY_EVT_MLE_RSC_UNPROT                    MleRscUnprot;
> -  ENTRY_EVT_MLE_RSC_UNPROT_ERROR              MleRscUnprotError;
> -  ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED
> MleDomainTypeDegraded;
> -} LOG_ENTRY_DATA;
> -
> -typedef struct {
> -  LOG_ENTRY_HEADER  Hdr;
> -  LOG_ENTRY_DATA    Data;
> -} STM_LOG_ENTRY;
> -
> -/**
> -  Maximum STM Log Entry Size
> -**/
> -#define STM_LOG_ENTRY_SIZE  256
> -
> -
> -/**
> -  STM Protection Exception Stack Frame Structures
> -**/
> -
> -typedef struct {
> -  UINT32  Rdi;
> -  UINT32  Rsi;
> -  UINT32  Rbp;
> -  UINT32  Rdx;
> -  UINT32  Rcx;
> -  UINT32  Rbx;
> -  UINT32  Rax;
> -  UINT32  Cr3;
> -  UINT32  Cr2;
> -  UINT32  Cr0;
> -  UINT32  VmcsExitInstructionInfo;
> -  UINT32  VmcsExitInstructionLength;
> -  UINT64  VmcsExitQualification;
> -  ///
> -  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
> -  ///
> -  UINT32  ErrorCode;
> -  UINT32  Rip;
> -  UINT32  Cs;
> -  UINT32  Rflags;
> -  UINT32  Rsp;
> -  UINT32  Ss;
> -} STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32;
> -
> -typedef struct {
> -  UINT64  R15;
> -  UINT64  R14;
> -  UINT64  R13;
> -  UINT64  R12;
> -  UINT64  R11;
> -  UINT64  R10;
> -  UINT64  R9;
> -  UINT64  R8;
> -  UINT64  Rdi;
> -  UINT64  Rsi;
> -  UINT64  Rbp;
> -  UINT64  Rdx;
> -  UINT64  Rcx;
> -  UINT64  Rbx;
> -  UINT64  Rax;
> -  UINT64  Cr8;
> -  UINT64  Cr3;
> -  UINT64  Cr2;
> -  UINT64  Cr0;
> -  UINT64  VmcsExitInstructionInfo;
> -  UINT64  VmcsExitInstructionLength;
> -  UINT64  VmcsExitQualification;
> -  ///
> -  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
> -  ///
> -  UINT64  ErrorCode;
> -  UINT64  Rip;
> -  UINT64  Cs;
> -  UINT64  Rflags;
> -  UINT64  Rsp;
> -  UINT64  Ss;
> -} STM_PROTECTION_EXCEPTION_STACK_FRAME_X64;
> -
> -typedef union {
> -  STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32  *Ia32StackFrame;
> -  STM_PROTECTION_EXCEPTION_STACK_FRAME_X64   *X64StackFrame;
> -} STM_PROTECTION_EXCEPTION_STACK_FRAME;
> -
> -/**
> -  Enum values for the ErrorCode field in
> -  #STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32 and
> -  #STM_PROTECTION_EXCEPTION_STACK_FRAME_X64
> -**/
> -typedef enum {
> -  TxtSmmPageViolation = 1,
> -  TxtSmmMsrViolation,
> -  TxtSmmRegisterViolation,
> -  TxtSmmIoViolation,
> -  TxtSmmPciViolation
> -} TXT_SMM_PROTECTION_EXCEPTION_TYPE;
> -
> -/**
> -  TXT Pocessor SMM Descriptor (PSD) structures
> -**/
> -
> -typedef struct {
> -  UINT64  SpeRip;
> -  UINT64  SpeRsp;
> -  UINT16  SpeSs;
> -  UINT16  PageViolationException:1;
> -  UINT16  MsrViolationException:1;
> -  UINT16  RegisterViolationException:1;
> -  UINT16  IoViolationException:1;
> -  UINT16  PciViolationException:1;
> -  UINT16  Reserved1:11;
> -  UINT32  Reserved2;
> -} STM_PROTECTION_EXCEPTION_HANDLER;
> -
> -typedef struct {
> -  UINT8  ExecutionDisableOutsideSmrr:1;
> -  UINT8  Intel64Mode:1;
> -  UINT8  Cr4Pae : 1;
> -  UINT8  Cr4Pse : 1;
> -  UINT8  Reserved1 : 4;
> -} STM_SMM_ENTRY_STATE;
> -
> -typedef struct {
> -  UINT8  SmramToVmcsRestoreRequired : 1; ///> BIOS restore hint
> -  UINT8  ReinitializeVmcsRequired : 1;   ///> BIOS request
> -  UINT8  Reserved2 : 6;
> -} STM_SMM_RESUME_STATE;
> -
> -typedef struct {
> -  UINT8  DomainType : 4;   ///> STM input to BIOS on each SMI
> -  UINT8  XStatePolicy : 2; ///> STM input to BIOS on each SMI
> -  UINT8  EptEnabled : 1;
> -  UINT8  Reserved3 : 1;
> -} STM_SMM_STATE;
> -
> -#define TXT_SMM_PSD_OFFSET                          0xfb00
> -#define TXT_PROCESSOR_SMM_DESCRIPTOR_SIGNATURE
> SIGNATURE_64('T', 'X', 'T', 'P', 'S', 'S', 'I', 'G')
> -#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MAJOR  1
> -#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MINOR  0
> -
> -typedef struct {
> -  UINT64                            Signature;
> -  UINT16                            Size;
> -  UINT8                             SmmDescriptorVerMajor;
> -  UINT8                             SmmDescriptorVerMinor;
> -  UINT32                            LocalApicId;
> -  STM_SMM_ENTRY_STATE               SmmEntryState;
> -  STM_SMM_RESUME_STATE              SmmResumeState;
> -  STM_SMM_STATE                     StmSmmState;
> -  UINT8                             Reserved4;
> -  UINT16                            SmmCs;
> -  UINT16                            SmmDs;
> -  UINT16                            SmmSs;
> -  UINT16                            SmmOtherSegment;
> -  UINT16                            SmmTr;
> -  UINT16                            Reserved5;
> -  UINT64                            SmmCr3;
> -  UINT64                            SmmStmSetupRip;
> -  UINT64                            SmmStmTeardownRip;
> -  UINT64                            SmmSmiHandlerRip;
> -  UINT64                            SmmSmiHandlerRsp;
> -  UINT64                            SmmGdtPtr;
> -  UINT32                            SmmGdtSize;
> -  UINT32                            RequiredStmSmmRevId;
> -  STM_PROTECTION_EXCEPTION_HANDLER  StmProtectionExceptionHandler;
> -  UINT64                            Reserved6;
> -  UINT64                            BiosHwResourceRequirementsPtr;
> -  // extend area
> -  UINT64                            AcpiRsdp;
> -  UINT8                             PhysicalAddressBits;
> -} TXT_PROCESSOR_SMM_DESCRIPTOR;
> -
> -#pragma pack ()
> +#include <Register/Intel/StmApi.h>
> 
>  #endif
> --
> 2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44837): https://edk2.groups.io/g/devel/message/44837
Mute This Topic: https://groups.io/mt/32677233/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/
Posted by Liming Gao 6 years, 6 months ago
Reviewed-by: Liming Gao <liming.gao@intel.com>

>-----Original Message-----
>From: Ni, Ray
>Sent: Thursday, August 01, 2019 5:59 PM
>To: devel@edk2.groups.io
>Cc: Dong, Eric <eric.dong@intel.com>; Laszlo Ersek <lersek@redhat.com>;
>Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
><liming.gao@intel.com>; Leo Duran <leo.duran@amd.com>; Brijesh Singh
><brijesh.singh@amd.com>
>Subject: [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to
>MdePkg/Include/
>
>The patch moves all files under UefiCpuPkg/Include/Register/ to
>MdePkg/Include/Register using following detailed approaches:
>1. Move UefiCpuPkg/Include/Register/Amd/ to
>   MdePkg/Include/Register/Amd folder.
>2. Move remaining in UefiCpuPkg/Include/Register/ to
>   MdePkg/Include/Register/Intel folder.
>3. Create wrapper header files under UefiCpuPkg/Include/Register/
>   to include the accordingly files in MdePkg/Include/Register/Intel.
>   This is to avoid build break because code in other repos like
>   edk2-platform includes the file from UefiCpuPkg.
>
>The wrapper header files will be removed after all consumers code
>is updated.
>
>Signed-off-by: Ray Ni <ray.ni@intel.com>
>Cc: Eric Dong <eric.dong@intel.com>
>Cc: Laszlo Ersek <lersek@redhat.com>
>Cc: Michael D Kinney <michael.d.kinney@intel.com>
>Cc: Liming Gao <liming.gao@intel.com>
>Cc: Leo Duran <leo.duran@amd.com>
>Cc: Brijesh Singh <brijesh.singh@amd.com>
>---
> .../Include/Register/Amd/Cpuid.h              |    0
> .../Include/Register/Amd/Fam17Msr.h           |    0
> .../Include/Register/Amd/Msr.h                |    4 +-
> .../Register/Intel}/ArchitecturalMsr.h        |    8 +-
> .../Include/Register/Intel}/LocalApic.h       |    6 +-
> .../Include/Register/Intel}/Microcode.h       |    6 +-
> MdePkg/Include/Register/Intel/Msr.h           |   44 +
> .../Include/Register/Intel}/Msr/AtomMsr.h     |    4 +-
> .../Register/Intel}/Msr/BroadwellMsr.h        |    4 +-
> .../Include/Register/Intel}/Msr/Core2Msr.h    |    4 +-
> .../Include/Register/Intel}/Msr/CoreMsr.h     |    4 +-
> .../Include/Register/Intel}/Msr/GoldmontMsr.h |    4 +-
> .../Register/Intel}/Msr/GoldmontPlusMsr.h     |    4 +-
> .../Include/Register/Intel}/Msr/HaswellEMsr.h |    4 +-
> .../Include/Register/Intel}/Msr/HaswellMsr.h  |    4 +-
> .../Register/Intel}/Msr/IvyBridgeMsr.h        |    4 +-
> .../Include/Register/Intel}/Msr/NehalemMsr.h  |    4 +-
> .../Include/Register/Intel}/Msr/P6Msr.h       |    4 +-
> .../Include/Register/Intel}/Msr/Pentium4Msr.h |    2 +-
> .../Include/Register/Intel}/Msr/PentiumMMsr.h |    2 +-
> .../Include/Register/Intel}/Msr/PentiumMsr.h  |    2 +-
> .../Register/Intel}/Msr/SandyBridgeMsr.h      |    2 +-
> .../Register/Intel}/Msr/SilvermontMsr.h       |    2 +-
> .../Include/Register/Intel}/Msr/SkylakeMsr.h  |    2 +-
> .../Include/Register/Intel}/Msr/Xeon5600Msr.h |    2 +-
> .../Include/Register/Intel}/Msr/XeonDMsr.h    |    2 +-
> .../Include/Register/Intel}/Msr/XeonE7Msr.h   |    2 +-
> .../Include/Register/Intel}/Msr/XeonPhiMsr.h  |    2 +-
> .../Register/Intel}/SmramSaveStateMap.h       |    6 +-
> .../Include/Register/Intel}/StmApi.h          |   12 +-
> .../Register/Intel}/StmResourceDescriptor.h   |    6 +-
> .../Include/Register/Intel}/StmStatusCode.h   |    6 +-
> .../Include/Register/ArchitecturalMsr.h       | 6565 +----------------
> UefiCpuPkg/Include/Register/Cpuid.h           |    5 -
> UefiCpuPkg/Include/Register/LocalApic.h       |  175 +-
> UefiCpuPkg/Include/Register/Microcode.h       |  187 +-
> UefiCpuPkg/Include/Register/Msr.h             |   36 +-
> .../Include/Register/SmramSaveStateMap.h      |  179 +-
> UefiCpuPkg/Include/Register/StmApi.h          |  941 +--
> 39 files changed, 122 insertions(+), 8128 deletions(-)
> rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Cpuid.h (100%)
> rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Fam17Msr.h (100%)
> rename {UefiCpuPkg => MdePkg}/Include/Register/Amd/Msr.h (78%)
> copy {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/ArchitecturalMsr.h (96%)
> copy {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/LocalApic.h (95%)
> copy {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Microcode.h (95%)
> create mode 100644 MdePkg/Include/Register/Intel/Msr.h
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/AtomMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/BroadwellMsr.h (95%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/Core2Msr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/CoreMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/GoldmontMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/GoldmontPlusMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/HaswellEMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/HaswellMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/IvyBridgeMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/NehalemMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/P6Msr.h (95%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/Pentium4Msr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/PentiumMMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/PentiumMsr.h (95%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/SandyBridgeMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/SilvermontMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/SkylakeMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/Xeon5600Msr.h (95%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/XeonDMsr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/XeonE7Msr.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/Msr/XeonPhiMsr.h (96%)
> copy {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/SmramSaveStateMap.h (93%)
> copy {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/StmApi.h (96%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/StmResourceDescriptor.h (92%)
> rename {UefiCpuPkg/Include/Register =>
>MdePkg/Include/Register/Intel}/StmStatusCode.h (94%)
>
>diff --git a/UefiCpuPkg/Include/Register/Amd/Cpuid.h
>b/MdePkg/Include/Register/Amd/Cpuid.h
>similarity index 100%
>rename from UefiCpuPkg/Include/Register/Amd/Cpuid.h
>rename to MdePkg/Include/Register/Amd/Cpuid.h
>diff --git a/UefiCpuPkg/Include/Register/Amd/Fam17Msr.h
>b/MdePkg/Include/Register/Amd/Fam17Msr.h
>similarity index 100%
>rename from UefiCpuPkg/Include/Register/Amd/Fam17Msr.h
>rename to MdePkg/Include/Register/Amd/Fam17Msr.h
>diff --git a/UefiCpuPkg/Include/Register/Amd/Msr.h
>b/MdePkg/Include/Register/Amd/Msr.h
>similarity index 78%
>rename from UefiCpuPkg/Include/Register/Amd/Msr.h
>rename to MdePkg/Include/Register/Amd/Msr.h
>index b7db0ae042..e74de7a1df 100644
>--- a/UefiCpuPkg/Include/Register/Amd/Msr.h
>+++ b/MdePkg/Include/Register/Amd/Msr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>
>+  Copyright (c) 2017 - 2019, Advanced Micro Devices. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -17,7 +17,7 @@
> #ifndef __AMD_MSR_H__
> #define __AMD_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
> #include <Register/Amd/Fam17Msr.h>
>
> #endif
>diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
>similarity index 96%
>copy from UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>copy to MdePkg/Include/Register/Intel/ArchitecturalMsr.h
>index c2bd382000..28e71cf713 100644
>--- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>+++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
>@@ -1,12 +1,12 @@
> /** @file
>-  Architectural MSR Definitions.
>+  Intel Architectural MSR Definitions.
>
>   Provides defines for Machine Specific Registers(MSR) indexes. Data
>structures
>   are provided for MSRs that contain one or more bit fields.  If the MSR value
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -15,8 +15,8 @@
>
> **/
>
>-#ifndef __ARCHITECTURAL_MSR_H__
>-#define __ARCHITECTURAL_MSR_H__
>+#ifndef __INTEL_ARCHITECTURAL_MSR_H__
>+#define __INTEL_ARCHITECTURAL_MSR_H__
>
> /**
>   See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor
>(05_01H).
>diff --git a/UefiCpuPkg/Include/Register/LocalApic.h
>b/MdePkg/Include/Register/Intel/LocalApic.h
>similarity index 95%
>copy from UefiCpuPkg/Include/Register/LocalApic.h
>copy to MdePkg/Include/Register/Intel/LocalApic.h
>index 369ba96af8..35625cff70 100644
>--- a/UefiCpuPkg/Include/Register/LocalApic.h
>+++ b/MdePkg/Include/Register/Intel/LocalApic.h
>@@ -1,13 +1,13 @@
> /** @file
>   IA32 Local APIC Definitions.
>
>-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
>
>-#ifndef __LOCAL_APIC_H__
>-#define __LOCAL_APIC_H__
>+#ifndef __INTEL_LOCAL_APIC_H__
>+#define __INTEL_LOCAL_APIC_H__
>
> //
> // Definition for Local APIC registers and related values
>diff --git a/UefiCpuPkg/Include/Register/Microcode.h
>b/MdePkg/Include/Register/Intel/Microcode.h
>similarity index 95%
>copy from UefiCpuPkg/Include/Register/Microcode.h
>copy to MdePkg/Include/Register/Intel/Microcode.h
>index e85c0cc640..93fa3d6d53 100644
>--- a/UefiCpuPkg/Include/Register/Microcode.h
>+++ b/MdePkg/Include/Register/Intel/Microcode.h
>@@ -5,7 +5,7 @@
>   Intel(R) 64 and IA-32 Architectures Software Developer's Manual
>     Volume 3A, Section 9.11  Microcode Definitions
>
>-  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -14,8 +14,8 @@
>
> **/
>
>-#ifndef __MICROCODE_H__
>-#define __MICROCODE_H__
>+#ifndef __INTEL_MICROCODE_H__
>+#define __INTEL_MICROCODE_H__
>
> ///
> /// CPU Microcode Date in BCD format
>diff --git a/MdePkg/Include/Register/Intel/Msr.h
>b/MdePkg/Include/Register/Intel/Msr.h
>new file mode 100644
>index 0000000000..7bd656cdaa
>--- /dev/null
>+++ b/MdePkg/Include/Register/Intel/Msr.h
>@@ -0,0 +1,44 @@
>+/** @file
>+  MSR Definitions.
>+
>+  Provides defines for Machine Specific Registers(MSR) indexes. Data
>structures
>+  are provided for MSRs that contain one or more bit fields.  If the MSR value
>+  returned is a single 32-bit or 64-bit value, then a data structure is not
>+  provided for that MSR.
>+
>+  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
>+  SPDX-License-Identifier: BSD-2-Clause-Patent
>+
>+  @par Specification Reference:
>+  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
>+  May 2018, Volume 4: Model-Specific-Registers (MSR)
>+
>+**/
>+
>+#ifndef __INTEL_MSR_H__
>+#define __INTEL_MSR_H__
>+
>+#include <Register/Intel/ArchitecturalMsr.h>
>+#include <Register/Intel/Msr/Core2Msr.h>
>+#include <Register/Intel/Msr/AtomMsr.h>
>+#include <Register/Intel/Msr/SilvermontMsr.h>
>+#include <Register/Intel/Msr/GoldmontMsr.h>
>+#include <Register/Intel/Msr/GoldmontPlusMsr.h>
>+#include <Register/Intel/Msr/NehalemMsr.h>
>+#include <Register/Intel/Msr/Xeon5600Msr.h>
>+#include <Register/Intel/Msr/XeonE7Msr.h>
>+#include <Register/Intel/Msr/SandyBridgeMsr.h>
>+#include <Register/Intel/Msr/IvyBridgeMsr.h>
>+#include <Register/Intel/Msr/HaswellMsr.h>
>+#include <Register/Intel/Msr/HaswellEMsr.h>
>+#include <Register/Intel/Msr/BroadwellMsr.h>
>+#include <Register/Intel/Msr/XeonDMsr.h>
>+#include <Register/Intel/Msr/SkylakeMsr.h>
>+#include <Register/Intel/Msr/XeonPhiMsr.h>
>+#include <Register/Intel/Msr/Pentium4Msr.h>
>+#include <Register/Intel/Msr/CoreMsr.h>
>+#include <Register/Intel/Msr/PentiumMMsr.h>
>+#include <Register/Intel/Msr/P6Msr.h>
>+#include <Register/Intel/Msr/PentiumMsr.h>
>+
>+#endif
>diff --git a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h
>b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/AtomMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/AtomMsr.h
>index 802efe54a6..c174df1535 100644
>--- a/UefiCpuPkg/Include/Register/Msr/AtomMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/AtomMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __ATOM_MSR_H__
> #define __ATOM_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Atom(TM) Processor Family?
>diff --git a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
>b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
>similarity index 95%
>rename from UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
>index e9d39d99c4..d05869e037 100644
>--- a/UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/BroadwellMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __BROADWELL_MSR_H__
> #define __BROADWELL_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Broadwell microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h
>b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/Core2Msr.h
>rename to MdePkg/Include/Register/Intel/Msr/Core2Msr.h
>index a5d66261ec..e9d999cdd5 100644
>--- a/UefiCpuPkg/Include/Register/Msr/Core2Msr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/Core2Msr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __CORE2_MSR_H__
> #define __CORE2_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Core(TM) 2 Processor Family?
>diff --git a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h
>b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/CoreMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/CoreMsr.h
>index 5368db83ba..1e43bc13f5 100644
>--- a/UefiCpuPkg/Include/Register/Msr/CoreMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/CoreMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __CORE_MSR_H__
> #define __CORE_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel Core Solo and Intel Core Duo Processors?
>diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
>b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
>index a7db0374f8..d44172f29c 100644
>--- a/UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/GoldmontMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __GOLDMONT_MSR_H__
> #define __GOLDMONT_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel Atom processors based on the Goldmont microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
>b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
>index 635f4cae43..2edc1363b7 100644
>--- a/UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/GoldmontPlusMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __GOLDMONT_PLUS_MSR_H__
> #define __GOLDMONT_PLUS_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel Atom processors based on the Goldmont plus microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
>b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
>index 6cde974b1d..6c8e29d2ac 100644
>--- a/UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/HaswellEMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __HASWELL_E_MSR_H__
> #define __HASWELL_E_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Haswell-E microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
>b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
>index 3aec00cab2..704a7079f2 100644
>--- a/UefiCpuPkg/Include/Register/Msr/HaswellMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/HaswellMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __HASWELL_MSR_H__
> #define __HASWELL_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Haswell microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
>b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
>index fc94f91be0..bc8559d519 100644
>--- a/UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/IvyBridgeMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __IVY_BRIDGE_MSR_H__
> #define __IVY_BRIDGE_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Ivy Bridge microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
>b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
>index ada2084654..a21e8a5e85 100644
>--- a/UefiCpuPkg/Include/Register/Msr/NehalemMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/NehalemMsr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __NEHALEM_MSR_H__
> #define __NEHALEM_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Nehalem microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/P6Msr.h
>b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
>similarity index 95%
>rename from UefiCpuPkg/Include/Register/Msr/P6Msr.h
>rename to MdePkg/Include/Register/Intel/Msr/P6Msr.h
>index 020349291a..d4af2774d3 100644
>--- a/UefiCpuPkg/Include/Register/Msr/P6Msr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/P6Msr.h
>@@ -6,7 +6,7 @@
>   returned is a single 32-bit or 64-bit value, then a data structure is not
>   provided for that MSR.
>
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -18,7 +18,7 @@
> #ifndef __P6_MSR_H__
> #define __P6_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is P6 Family Processors?
>diff --git a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
>b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
>rename to MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
>index 1d66cc2b31..f5e16a1df7 100644
>--- a/UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/Pentium4Msr.h
>@@ -18,7 +18,7 @@
> #ifndef __PENTIUM_4_MSR_H__
> #define __PENTIUM_4_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Pentium(R) 4 Processors?
>diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
>b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
>index 869eec1114..f25e4f53b1 100644
>--- a/UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/PentiumMMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __PENTIUM_M_MSR_H__
> #define __PENTIUM_M_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Pentium M Processors?
>diff --git a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
>b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
>similarity index 95%
>rename from UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
>index c87212f08f..93286c89e3 100644
>--- a/UefiCpuPkg/Include/Register/Msr/PentiumMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/PentiumMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __PENTIUM_MSR_H__
> #define __PENTIUM_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Pentium Processors?
>diff --git a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
>b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
>index 0f977e2a2f..322f355378 100644
>--- a/UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/SandyBridgeMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __SANDY_BRIDGE_MSR_H__
> #define __SANDY_BRIDGE_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Sandy Bridge microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
>b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
>index fc2a8f6c87..3a772de87a 100644
>--- a/UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/SilvermontMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __SILVERMONT_MSR_H__
> #define __SILVERMONT_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Silvermont microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
>b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
>index 01166e3446..923cce5395 100644
>--- a/UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/SkylakeMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __SKYLAKE_MSR_H__
> #define __SKYLAKE_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel processors based on the Skylake microarchitecture?
>diff --git a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
>b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
>similarity index 95%
>rename from UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
>rename to MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
>index c285d1877f..8e2305f95c 100644
>--- a/UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/Xeon5600Msr.h
>@@ -18,7 +18,7 @@
> #ifndef __XEON_5600_MSR_H__
> #define __XEON_5600_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Xeon(R) Processor Series 5600?
>diff --git a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
>b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
>index dae11c8e30..7fde55e181 100644
>--- a/UefiCpuPkg/Include/Register/Msr/XeonDMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/XeonDMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __XEON_D_MSR_H__
> #define __XEON_D_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Xeon(R) Processor D product Family?
>diff --git a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
>b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
>rename to MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
>index 2e9b296d51..528ba073a1 100644
>--- a/UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/XeonE7Msr.h
>@@ -18,7 +18,7 @@
> #ifndef __XEON_E7_MSR_H__
> #define __XEON_E7_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Xeon(R) Processor E7 Family?
>diff --git a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
>b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
>similarity index 96%
>rename from UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
>rename to MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
>index 57d71d6a7d..96f5ab8acd 100644
>--- a/UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h
>+++ b/MdePkg/Include/Register/Intel/Msr/XeonPhiMsr.h
>@@ -18,7 +18,7 @@
> #ifndef __XEON_PHI_MSR_H__
> #define __XEON_PHI_MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> /**
>   Is Intel(R) Xeon(R) Phi(TM) processor Family?
>diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
>similarity index 93%
>copy from UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>copy to MdePkg/Include/Register/Intel/SmramSaveStateMap.h
>index 6473e51a55..81aa6c3c66 100644
>--- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>+++ b/MdePkg/Include/Register/Intel/SmramSaveStateMap.h
>@@ -7,13 +7,13 @@ Intel(R) 64 and IA-32 Architectures Software Developer's
>Manual
>   Volume 3C, Section 34.5 SMI Handler Execution Environment
>   Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
>
>-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
>+Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
>
>-#ifndef __SMRAM_SAVE_STATE_MAP_H__
>-#define __SMRAM_SAVE_STATE_MAP_H__
>+#ifndef __INTEL_SMRAM_SAVE_STATE_MAP_H__
>+#define __INTEL_SMRAM_SAVE_STATE_MAP_H__
>
> ///
> /// Default SMBASE address
>diff --git a/UefiCpuPkg/Include/Register/StmApi.h
>b/MdePkg/Include/Register/Intel/StmApi.h
>similarity index 96%
>copy from UefiCpuPkg/Include/Register/StmApi.h
>copy to MdePkg/Include/Register/Intel/StmApi.h
>index 0ecc0b86d5..63f215ca34 100644
>--- a/UefiCpuPkg/Include/Register/StmApi.h
>+++ b/MdePkg/Include/Register/Intel/StmApi.h
>@@ -1,7 +1,7 @@
> /** @file
>   STM API definition
>
>-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -9,12 +9,12 @@
>
> **/
>
>-#ifndef _STM_API_H_
>-#define _STM_API_H_
>+#ifndef _INTEL_STM_API_H_
>+#define _INTEL_STM_API_H_
>
>-#include <Register/StmStatusCode.h>
>-#include <Register/StmResourceDescriptor.h>
>-#include <Register/ArchitecturalMsr.h>
>+#include <Register/Intel/StmStatusCode.h>
>+#include <Register/Intel/StmResourceDescriptor.h>
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> #pragma pack (1)
>
>diff --git a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h
>b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
>similarity index 92%
>rename from UefiCpuPkg/Include/Register/StmResourceDescriptor.h
>rename to MdePkg/Include/Register/Intel/StmResourceDescriptor.h
>index ec043c909e..da4c91d0f4 100644
>--- a/UefiCpuPkg/Include/Register/StmResourceDescriptor.h
>+++ b/MdePkg/Include/Register/Intel/StmResourceDescriptor.h
>@@ -1,7 +1,7 @@
> /** @file
>   STM Resource Descriptor
>
>-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -9,8 +9,8 @@
>
> **/
>
>-#ifndef _STM_RESOURCE_DESCRIPTOR_H_
>-#define _STM_RESOURCE_DESCRIPTOR_H_
>+#ifndef _INTEL_STM_RESOURCE_DESCRIPTOR_H_
>+#define _INTEL_STM_RESOURCE_DESCRIPTOR_H_
>
> #pragma pack (1)
>
>diff --git a/UefiCpuPkg/Include/Register/StmStatusCode.h
>b/MdePkg/Include/Register/Intel/StmStatusCode.h
>similarity index 94%
>rename from UefiCpuPkg/Include/Register/StmStatusCode.h
>rename to MdePkg/Include/Register/Intel/StmStatusCode.h
>index 42f95fbda4..2460c12598 100644
>--- a/UefiCpuPkg/Include/Register/StmStatusCode.h
>+++ b/MdePkg/Include/Register/Intel/StmStatusCode.h
>@@ -1,7 +1,7 @@
> /** @file
>   STM Status Codes
>
>-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>   @par Specification Reference:
>@@ -9,8 +9,8 @@
>
> **/
>
>-#ifndef _STM_STATUS_CODE_H_
>-#define _STM_STATUS_CODE_H_
>+#ifndef _INTEL_STM_STATUS_CODE_H_
>+#define _INTEL_STM_STATUS_CODE_H_
>
> /**
>   STM Status Codes
>diff --git a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>index c2bd382000..a2a34c5ec4 100644
>--- a/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>+++ b/UefiCpuPkg/Include/Register/ArchitecturalMsr.h
>@@ -1,6572 +1,13 @@
> /** @file
>-  Architectural MSR Definitions.
>+  Wrapper header file to include <Register/Intel/ArchitecturalMsr.h> in
>MdePkg.
>
>-  Provides defines for Machine Specific Registers(MSR) indexes. Data
>structures
>-  are provided for MSRs that contain one or more bit fields.  If the MSR value
>-  returned is a single 32-bit or 64-bit value, then a data structure is not
>-  provided for that MSR.
>-
>-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>-
>-  @par Specification Reference:
>-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
>-  May 2018, Volume 4: Model-Specific-Registers (MSR)
>-
> **/
>
> #ifndef __ARCHITECTURAL_MSR_H__
> #define __ARCHITECTURAL_MSR_H__
>
>-/**
>-  See Section 2.22, "MSRs in Pentium Processors.". Pentium Processor
>(05_01H).
>-
>-  @param  ECX  MSR_IA32_P5_MC_ADDR (0x00000000)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_ADDR);
>-  AsmWriteMsr64 (MSR_IA32_P5_MC_ADDR, Msr);
>-  @endcode
>-  @note MSR_IA32_P5_MC_ADDR is defined as IA32_P5_MC_ADDR in SDM.
>-**/
>-#define MSR_IA32_P5_MC_ADDR                      0x00000000
>-
>-
>-/**
>-  See Section 2.22, "MSRs in Pentium Processors.". DF_DM = 05_01H.
>-
>-  @param  ECX  MSR_IA32_P5_MC_TYPE (0x00000001)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_P5_MC_TYPE);
>-  AsmWriteMsr64 (MSR_IA32_P5_MC_TYPE, Msr);
>-  @endcode
>-  @note MSR_IA32_P5_MC_TYPE is defined as IA32_P5_MC_TYPE in SDM.
>-**/
>-#define MSR_IA32_P5_MC_TYPE                      0x00000001
>-
>-
>-/**
>-  See Section 8.10.5, "Monitor/Mwait Address Range Determination.".
>Introduced
>-  at Display Family / Display Model 0F_03H.
>-
>-  @param  ECX  MSR_IA32_MONITOR_FILTER_SIZE (0x00000006)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MONITOR_FILTER_SIZE);
>-  AsmWriteMsr64 (MSR_IA32_MONITOR_FILTER_SIZE, Msr);
>-  @endcode
>-  @note MSR_IA32_MONITOR_FILTER_SIZE is defined as
>IA32_MONITOR_FILTER_SIZE in SDM.
>-**/
>-#define MSR_IA32_MONITOR_FILTER_SIZE             0x00000006
>-
>-
>-/**
>-  See Section 17.17, "Time-Stamp Counter.". Introduced at Display Family /
>-  Display Model 05_01H.
>-
>-  @param  ECX  MSR_IA32_TIME_STAMP_COUNTER (0x00000010)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_TIME_STAMP_COUNTER);
>-  AsmWriteMsr64 (MSR_IA32_TIME_STAMP_COUNTER, Msr);
>-  @endcode
>-  @note MSR_IA32_TIME_STAMP_COUNTER is defined as
>IA32_TIME_STAMP_COUNTER in SDM.
>-**/
>-#define MSR_IA32_TIME_STAMP_COUNTER              0x00000010
>-
>-
>-/**
>-  Platform ID (RO)  The operating system can use this MSR to determine "slot"
>-  information for the processor and the proper microcode update to load.
>-  Introduced at Display Family / Display Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_PLATFORM_ID (0x00000017)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PLATFORM_ID_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PLATFORM_ID_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PLATFORM_ID);
>-  @endcode
>-  @note MSR_IA32_PLATFORM_ID is defined as IA32_PLATFORM_ID in SDM.
>-**/
>-#define MSR_IA32_PLATFORM_ID                     0x00000017
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PLATFORM_ID
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved1:32;
>-    UINT32  Reserved2:18;
>-    ///
>-    /// [Bits 52:50] Platform Id (RO)  Contains information concerning the
>-    /// intended platform for the processor.
>-    ///   52 51 50
>-    ///   -- -- --
>-    ///    0  0  0  Processor Flag 0.
>-    ///    0  0  1  Processor Flag 1
>-    ///    0  1  0  Processor Flag 2
>-    ///    0  1  1  Processor Flag 3
>-    ///    1  0  0  Processor Flag 4
>-    ///    1  0  1  Processor Flag 5
>-    ///    1  1  0  Processor Flag 6
>-    ///    1  1  1  Processor Flag 7
>-    ///
>-    UINT32  PlatformId:3;
>-    UINT32  Reserved3:11;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PLATFORM_ID_REGISTER;
>-
>-
>-/**
>-  06_01H.
>-
>-  @param  ECX  MSR_IA32_APIC_BASE (0x0000001B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_APIC_BASE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_APIC_BASE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_APIC_BASE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE);
>-  AsmWriteMsr64 (MSR_IA32_APIC_BASE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_APIC_BASE is defined as IA32_APIC_BASE in SDM.
>-**/
>-#define MSR_IA32_APIC_BASE                       0x0000001B
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_APIC_BASE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved1:8;
>-    ///
>-    /// [Bit 8] BSP flag (R/W).
>-    ///
>-    UINT32  BSP:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bit 10] Enable x2APIC mode. Introduced at Display Family / Display
>-    /// Model 06_1AH.
>-    ///
>-    UINT32  EXTD:1;
>-    ///
>-    /// [Bit 11] APIC Global Enable (R/W).
>-    ///
>-    UINT32  EN:1;
>-    ///
>-    /// [Bits 31:12] APIC Base (R/W).
>-    ///
>-    UINT32  ApicBase:20;
>-    ///
>-    /// [Bits 63:32] APIC Base (R/W).
>-    ///
>-    UINT32  ApicBaseHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_APIC_BASE_REGISTER;
>-
>-
>-/**
>-  Control Features in Intel 64 Processor (R/W). If any one enumeration
>-  condition for defined bit field holds.
>-
>-  @param  ECX  MSR_IA32_FEATURE_CONTROL (0x0000003A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_FEATURE_CONTROL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_FEATURE_CONTROL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FEATURE_CONTROL);
>-  AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_FEATURE_CONTROL is defined as
>IA32_FEATURE_CONTROL in SDM.
>-**/
>-#define MSR_IA32_FEATURE_CONTROL                 0x0000003A
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_FEATURE_CONTROL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Lock bit (R/WO): (1 = locked). When set, locks this MSR from
>-    /// being written, writes to this bit will result in GP(0). Note: Once the
>-    /// Lock bit is set, the contents of this register cannot be modified.
>-    /// Therefore the lock bit must be set after configuring support for Intel
>-    /// Virtualization Technology and prior to transferring control to an
>-    /// option ROM or the OS. Hence, once the Lock bit is set, the entire
>-    /// IA32_FEATURE_CONTROL contents are preserved across RESET when
>PWRGOOD
>-    /// is not deasserted. If any one enumeration condition for defined bit
>-    /// field position greater than bit 0 holds.
>-    ///
>-    UINT32  Lock:1;
>-    ///
>-    /// [Bit 1] Enable VMX inside SMX operation (R/WL): This bit enables a
>-    /// system executive to use VMX in conjunction with SMX to support
>-    /// Intel(R) Trusted Execution Technology. BIOS must set this bit only
>-    /// when the CPUID function 1 returns VMX feature flag and SMX feature
>-    /// flag set (ECX bits 5 and 6 respectively). If CPUID.01H:ECX[5] = 1 &&
>-    /// CPUID.01H:ECX[6] = 1.
>-    ///
>-    UINT32  EnableVmxInsideSmx:1;
>-    ///
>-    /// [Bit 2] Enable VMX outside SMX operation (R/WL): This bit enables VMX
>-    /// for system executive that do not require SMX. BIOS must set this bit
>-    /// only when the CPUID function 1 returns VMX feature flag set (ECX bit
>-    /// 5). If CPUID.01H:ECX[5] = 1.
>-    ///
>-    UINT32  EnableVmxOutsideSmx:1;
>-    UINT32  Reserved1:5;
>-    ///
>-    /// [Bits 14:8] SENTER Local Function Enables (R/WL): When set, each bit
>-    /// in the field represents an enable control for a corresponding SENTER
>-    /// function. This bit is supported only if CPUID.1:ECX.[bit 6] is set. If
>-    /// CPUID.01H:ECX[6] = 1.
>-    ///
>-    UINT32  SenterLocalFunctionEnables:7;
>-    ///
>-    /// [Bit 15] SENTER Global Enable (R/WL): This bit must be set to enable
>-    /// SENTER leaf functions. This bit is supported only if CPUID.1:ECX.[bit
>-    /// 6] is set. If CPUID.01H:ECX[6] = 1.
>-    ///
>-    UINT32  SenterGlobalEnable:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bit 17] SGX Launch Control Enable (R/WL): This bit must be set to
>-    /// enable runtime reconfiguration of SGX Launch Control via
>-    /// IA32_SGXLEPUBKEYHASHn MSR. If CPUID.(EAX=07H, ECX=0H): ECX[30]
>= 1.
>-    ///
>-    UINT32  SgxLaunchControlEnable:1;
>-    ///
>-    /// [Bit 18] SGX Global Enable (R/WL): This bit must be set to enable SGX
>-    /// leaf functions. If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1.
>-    ///
>-    UINT32  SgxEnable:1;
>-    UINT32  Reserved3:1;
>-    ///
>-    /// [Bit 20] LMCE On (R/WL): When set, system software can program the
>-    /// MSRs associated with LMCE to configure delivery of some machine
>check
>-    /// exceptions to a single logical processor. If IA32_MCG_CAP[27] = 1.
>-    ///
>-    UINT32  LmceOn:1;
>-    UINT32  Reserved4:11;
>-    UINT32  Reserved5:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_FEATURE_CONTROL_REGISTER;
>-
>-
>-/**
>-  Per Logical Processor TSC Adjust (R/Write to clear). If CPUID.(EAX=07H,
>-  ECX=0H): EBX[1] = 1. THREAD_ADJUST:  Local offset value of the IA32_TSC
>for
>-  a logical processor. Reset value is Zero. A write to IA32_TSC will modify
>-  the local offset in IA32_TSC_ADJUST and the content of IA32_TSC, but does
>-  not affect the internal invariant TSC hardware.
>-
>-  @param  ECX  MSR_IA32_TSC_ADJUST (0x0000003B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_TSC_ADJUST);
>-  AsmWriteMsr64 (MSR_IA32_TSC_ADJUST, Msr);
>-  @endcode
>-  @note MSR_IA32_TSC_ADJUST is defined as IA32_TSC_ADJUST in SDM.
>-**/
>-#define MSR_IA32_TSC_ADJUST                      0x0000003B
>-
>-
>-/**
>-  BIOS Update Trigger (W) Executing a WRMSR instruction to this MSR causes
>a
>-  microcode update to be loaded into the processor. See Section 9.11.6,
>-  "Microcode Update Loader." A processor may prevent writing to this MSR
>when
>-  loading guest states on VM entries or saving guest states on VM exits.
>-  Introduced at Display Family / Display Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_BIOS_UPDT_TRIG (0x00000079)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = 0;
>-  AsmWriteMsr64 (MSR_IA32_BIOS_UPDT_TRIG, Msr);
>-  @endcode
>-  @note MSR_IA32_BIOS_UPDT_TRIG is defined as IA32_BIOS_UPDT_TRIG in
>SDM.
>-**/
>-#define MSR_IA32_BIOS_UPDT_TRIG                  0x00000079
>-
>-
>-/**
>-  BIOS Update Signature (RO) Returns the microcode update signature
>following
>-  the execution of CPUID.01H. A processor may prevent writing to this MSR
>when
>-  loading guest states on VM entries or saving guest states on VM exits.
>-  Introduced at Display Family / Display Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_BIOS_SIGN_ID (0x0000008B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_BIOS_SIGN_ID_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_BIOS_SIGN_ID_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BIOS_SIGN_ID);
>-  @endcode
>-  @note MSR_IA32_BIOS_SIGN_ID is defined as IA32_BIOS_SIGN_ID in SDM.
>-**/
>-#define MSR_IA32_BIOS_SIGN_ID                    0x0000008B
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_BIOS_SIGN_ID
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved:32;
>-    ///
>-    /// [Bits 63:32] Microcode update signature. This field contains the
>-    /// signature of the currently loaded microcode update when read
>following
>-    /// the execution of the CPUID instruction, function 1. It is required
>-    /// that this register field be pre-loaded with zero prior to executing
>-    /// the CPUID, function 1. If the field remains equal to zero, then there
>-    /// is no microcode update loaded. Another nonzero value will be the
>-    /// signature.
>-    ///
>-    UINT32  MicrocodeUpdateSignature:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_BIOS_SIGN_ID_REGISTER;
>-
>-
>-/**
>-  IA32_SGXLEPUBKEYHASH[(64*n+63):(64*n)] (R/W) Bits (64*n+63):(64*n) of
>the
>-  SHA256 digest of the SIGSTRUCT.MODULUS for SGX Launch Enclave. On
>reset, the
>-  default value is the digest of Intel's signing key. Read permitted If
>-  CPUID.(EAX=12H,ECX=0H):EAX[0]=1, Write permitted if
>CPUID.(EAX=12H,ECX=0H):
>-  EAX[0]=1 && IA32_FEATURE_CONTROL[17] = 1 &&
>IA32_FEATURE_CONTROL[0] = 1.
>-
>-  @param  ECX  MSR_IA32_SGXLEPUBKEYHASHn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_SGXLEPUBKEYHASHn);
>-  AsmWriteMsr64 (MSR_IA32_SGXLEPUBKEYHASHn, Msr);
>-  @endcode
>-  @note MSR_IA32_SGXLEPUBKEYHASH0 is defined as
>IA32_SGXLEPUBKEYHASH0 in SDM.
>-        MSR_IA32_SGXLEPUBKEYHASH1 is defined as IA32_SGXLEPUBKEYHASH1
>in SDM.
>-        MSR_IA32_SGXLEPUBKEYHASH2 is defined as IA32_SGXLEPUBKEYHASH2
>in SDM.
>-        MSR_IA32_SGXLEPUBKEYHASH3 is defined as IA32_SGXLEPUBKEYHASH3
>in SDM.
>-  @{
>-**/
>-#define MSR_IA32_SGXLEPUBKEYHASH0                0x0000008C
>-#define MSR_IA32_SGXLEPUBKEYHASH1                0x0000008D
>-#define MSR_IA32_SGXLEPUBKEYHASH2                0x0000008E
>-#define MSR_IA32_SGXLEPUBKEYHASH3                0x0000008F
>-/// @}
>-
>-
>-/**
>-  SMM Monitor Configuration (R/W). If CPUID.01H: ECX[5]=1 or CPUID.01H:
>ECX[6] =
>-  1.
>-
>-  @param  ECX  MSR_IA32_SMM_MONITOR_CTL (0x0000009B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMM_MONITOR_CTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_SMM_MONITOR_CTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMM_MONITOR_CTL);
>-  AsmWriteMsr64 (MSR_IA32_SMM_MONITOR_CTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_SMM_MONITOR_CTL is defined as
>IA32_SMM_MONITOR_CTL in SDM.
>-**/
>-#define MSR_IA32_SMM_MONITOR_CTL                 0x0000009B
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_SMM_MONITOR_CTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Valid (R/W).  The STM may be invoked using VMCALL only if this
>-    /// bit is 1. Because VMCALL is used to activate the dual-monitor treatment
>-    /// (see Section 34.15.6), the dual-monitor treatment cannot be activated
>-    /// if the bit is 0. This bit is cleared when the logical processor is
>-    /// reset.
>-    ///
>-    UINT32  Valid:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 2] Controls SMI unblocking by VMXOFF (see Section 34.14.4). If
>-    /// IA32_VMX_MISC[28].
>-    ///
>-    UINT32  BlockSmi:1;
>-    UINT32  Reserved2:9;
>-    ///
>-    /// [Bits 31:12] MSEG Base (R/W).
>-    ///
>-    UINT32  MsegBase:20;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_SMM_MONITOR_CTL_REGISTER;
>-
>-/**
>-  MSEG header that is located at the physical address specified by the
>MsegBase
>-  field of #MSR_IA32_SMM_MONITOR_CTL_REGISTER.
>-**/
>-typedef struct {
>-  ///
>-  /// Different processors may use different MSEG revision identifiers. These
>-  /// identifiers enable software to avoid using an MSEG header formatted for
>-  /// one processor on a processor that uses a different format. Software can
>-  /// discover the MSEG revision identifier that a processor uses by reading
>-  /// the VMX capability MSR IA32_VMX_MISC.
>-  //
>-  UINT32  MsegHeaderRevision;
>-  ///
>-  /// Bits 31:1 of this field are reserved and must be zero. Bit 0 of the field
>-  /// is the IA-32e mode SMM feature bit. It indicates whether the logical
>-  /// processor will be in IA-32e mode after the STM is activated.
>-  ///
>-  UINT32  MonitorFeatures;
>-  UINT32  GdtrLimit;
>-  UINT32  GdtrBaseOffset;
>-  UINT32  CsSelector;
>-  UINT32  EipOffset;
>-  UINT32  EspOffset;
>-  UINT32  Cr3Offset;
>-  ///
>-  /// Pad header so total size is 2KB
>-  ///
>-  UINT8   Reserved[SIZE_2KB - 8 * sizeof (UINT32)];
>-} MSEG_HEADER;
>-
>-///
>-/// @{ Define values for the MonitorFeatures field of #MSEG_HEADER
>-///
>-#define STM_FEATURES_IA32E 0x1
>-///
>-/// @}
>-///
>-
>-/**
>-  Base address of the logical processor's SMRAM image (RO, SMM only). If
>-  IA32_VMX_MISC[15].
>-
>-  @param  ECX  MSR_IA32_SMBASE (0x0000009E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_SMBASE);
>-  @endcode
>-  @note MSR_IA32_SMBASE is defined as IA32_SMBASE in SDM.
>-**/
>-#define MSR_IA32_SMBASE                          0x0000009E
>-
>-
>-/**
>-  General Performance Counters (R/W).
>-  MSR_IA32_PMCn is supported if CPUID.0AH: EAX[15:8] > n.
>-
>-  @param  ECX  MSR_IA32_PMCn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_PMC0);
>-  AsmWriteMsr64 (MSR_IA32_PMC0, Msr);
>-  @endcode
>-  @note MSR_IA32_PMC0 is defined as IA32_PMC0 in SDM.
>-        MSR_IA32_PMC1 is defined as IA32_PMC1 in SDM.
>-        MSR_IA32_PMC2 is defined as IA32_PMC2 in SDM.
>-        MSR_IA32_PMC3 is defined as IA32_PMC3 in SDM.
>-        MSR_IA32_PMC4 is defined as IA32_PMC4 in SDM.
>-        MSR_IA32_PMC5 is defined as IA32_PMC5 in SDM.
>-        MSR_IA32_PMC6 is defined as IA32_PMC6 in SDM.
>-        MSR_IA32_PMC7 is defined as IA32_PMC7 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_PMC0                            0x000000C1
>-#define MSR_IA32_PMC1                            0x000000C2
>-#define MSR_IA32_PMC2                            0x000000C3
>-#define MSR_IA32_PMC3                            0x000000C4
>-#define MSR_IA32_PMC4                            0x000000C5
>-#define MSR_IA32_PMC5                            0x000000C6
>-#define MSR_IA32_PMC6                            0x000000C7
>-#define MSR_IA32_PMC7                            0x000000C8
>-/// @}
>-
>-
>-/**
>-  TSC Frequency Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] = 1.
>-  C0_MCNT: C0 TSC Frequency Clock Count Increments at fixed interval
>(relative
>-  to TSC freq.) when the logical processor is in C0. Cleared upon overflow /
>-  wrap-around of IA32_APERF.
>-
>-  @param  ECX  MSR_IA32_MPERF (0x000000E7)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MPERF);
>-  AsmWriteMsr64 (MSR_IA32_MPERF, Msr);
>-  @endcode
>-  @note MSR_IA32_MPERF is defined as IA32_MPERF in SDM.
>-**/
>-#define MSR_IA32_MPERF                           0x000000E7
>-
>-
>-/**
>-  Actual Performance Clock Counter (R/Write to clear). If CPUID.06H: ECX[0] =
>-  1. C0_ACNT: C0 Actual Frequency Clock Count Accumulates core clock counts
>at
>-  the coordinated clock frequency, when the logical processor is in C0.
>-  Cleared upon overflow / wrap-around of IA32_MPERF.
>-
>-  @param  ECX  MSR_IA32_APERF (0x000000E8)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_APERF);
>-  AsmWriteMsr64 (MSR_IA32_APERF, Msr);
>-  @endcode
>-  @note MSR_IA32_APERF is defined as IA32_APERF in SDM.
>-**/
>-#define MSR_IA32_APERF                           0x000000E8
>-
>-
>-/**
>-  MTRR Capability (RO) Section 11.11.2.1, "IA32_MTRR_DEF_TYPE MSR.".
>-  Introduced at Display Family / Display Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_MTRRCAP (0x000000FE)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRRCAP_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRRCAP_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MTRRCAP_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP);
>-  @endcode
>-  @note MSR_IA32_MTRRCAP is defined as IA32_MTRRCAP in SDM.
>-**/
>-#define MSR_IA32_MTRRCAP                         0x000000FE
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MTRRCAP
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] VCNT: The number of variable memory type ranges in the
>-    /// processor.
>-    ///
>-    UINT32  VCNT:8;
>-    ///
>-    /// [Bit 8] Fixed range MTRRs are supported when set.
>-    ///
>-    UINT32  FIX:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 10] WC Supported when set.
>-    ///
>-    UINT32  WC:1;
>-    ///
>-    /// [Bit 11] SMRR Supported when set.
>-    ///
>-    UINT32  SMRR:1;
>-    UINT32  Reserved2:20;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MTRRCAP_REGISTER;
>-
>-
>-/**
>-  SYSENTER_CS_MSR (R/W). Introduced at Display Family / Display Model
>06_01H.
>-
>-  @param  ECX  MSR_IA32_SYSENTER_CS (0x00000174)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_SYSENTER_CS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_SYSENTER_CS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SYSENTER_CS);
>-  AsmWriteMsr64 (MSR_IA32_SYSENTER_CS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_SYSENTER_CS is defined as IA32_SYSENTER_CS in SDM.
>-**/
>-#define MSR_IA32_SYSENTER_CS                     0x00000174
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_SYSENTER_CS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 15:0] CS Selector.
>-    ///
>-    UINT32  CS:16;
>-    UINT32  Reserved1:16;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_SYSENTER_CS_REGISTER;
>-
>-
>-/**
>-  SYSENTER_ESP_MSR (R/W). Introduced at Display Family / Display Model
>06_01H.
>-
>-  @param  ECX  MSR_IA32_SYSENTER_ESP (0x00000175)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_ESP);
>-  AsmWriteMsr64 (MSR_IA32_SYSENTER_ESP, Msr);
>-  @endcode
>-  @note MSR_IA32_SYSENTER_ESP is defined as IA32_SYSENTER_ESP in SDM.
>-**/
>-#define MSR_IA32_SYSENTER_ESP                    0x00000175
>-
>-
>-/**
>-  SYSENTER_EIP_MSR (R/W). Introduced at Display Family / Display Model
>06_01H.
>-
>-  @param  ECX  MSR_IA32_SYSENTER_EIP (0x00000176)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_SYSENTER_EIP);
>-  AsmWriteMsr64 (MSR_IA32_SYSENTER_EIP, Msr);
>-  @endcode
>-  @note MSR_IA32_SYSENTER_EIP is defined as IA32_SYSENTER_EIP in SDM.
>-**/
>-#define MSR_IA32_SYSENTER_EIP                    0x00000176
>-
>-
>-/**
>-  Global Machine Check Capability (RO). Introduced at Display Family / Display
>-  Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_MCG_CAP (0x00000179)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_CAP_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_CAP_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MCG_CAP_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_CAP);
>-  @endcode
>-  @note MSR_IA32_MCG_CAP is defined as IA32_MCG_CAP in SDM.
>-**/
>-#define MSR_IA32_MCG_CAP                         0x00000179
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MCG_CAP
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Count: Number of reporting banks.
>-    ///
>-    UINT32  Count:8;
>-    ///
>-    /// [Bit 8] MCG_CTL_P: IA32_MCG_CTL is present if this bit is set.
>-    ///
>-    UINT32  MCG_CTL_P:1;
>-    ///
>-    /// [Bit 9] MCG_EXT_P: Extended machine check state registers are
>present
>-    /// if this bit is set.
>-    ///
>-    UINT32  MCG_EXT_P:1;
>-    ///
>-    /// [Bit 10] MCP_CMCI_P: Support for corrected MC error event is present.
>-    /// Introduced at Display Family / Display Model 06_01H.
>-    ///
>-    UINT32  MCP_CMCI_P:1;
>-    ///
>-    /// [Bit 11] MCG_TES_P: Threshold-based error status register are present
>-    /// if this bit is set.
>-    ///
>-    UINT32  MCG_TES_P:1;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bits 23:16] MCG_EXT_CNT: Number of extended machine check state
>-    /// registers present.
>-    ///
>-    UINT32  MCG_EXT_CNT:8;
>-    ///
>-    /// [Bit 24] MCG_SER_P: The processor supports software error recovery if
>-    /// this bit is set.
>-    ///
>-    UINT32  MCG_SER_P:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bit 26] MCG_ELOG_P: Indicates that the processor allows platform
>-    /// firmware to be invoked when an error is detected so that it may
>-    /// provide additional platform specific information in an ACPI format
>-    /// "Generic Error Data Entry" that augments the data included in machine
>-    /// check bank registers. Introduced at Display Family / Display Model
>-    /// 06_3EH.
>-    ///
>-    UINT32  MCG_ELOG_P:1;
>-    ///
>-    /// [Bit 27] MCG_LMCE_P: Indicates that the processor support extended
>-    /// state in IA32_MCG_STATUS and associated MSR necessary to configure
>-    /// Local Machine Check Exception (LMCE). Introduced at Display Family /
>-    /// Display Model 06_3EH.
>-    ///
>-    UINT32  MCG_LMCE_P:1;
>-    UINT32  Reserved3:4;
>-    UINT32  Reserved4:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MCG_CAP_REGISTER;
>-
>-
>-/**
>-  Global Machine Check Status (R/W0). Introduced at Display Family / Display
>-  Model 06_01H.
>-
>-  @param  ECX  MSR_IA32_MCG_STATUS (0x0000017A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MCG_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_STATUS);
>-  AsmWriteMsr64 (MSR_IA32_MCG_STATUS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MCG_STATUS is defined as IA32_MCG_STATUS in SDM.
>-**/
>-#define MSR_IA32_MCG_STATUS                      0x0000017A
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MCG_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] RIPV. Restart IP valid. Introduced at Display Family / Display
>-    /// Model 06_01H.
>-    ///
>-    UINT32  RIPV:1;
>-    ///
>-    /// [Bit 1] EIPV. Error IP valid. Introduced at Display Family / Display
>-    /// Model 06_01H.
>-    ///
>-    UINT32  EIPV:1;
>-    ///
>-    /// [Bit 2] MCIP. Machine check in progress. Introduced at Display Family
>-    /// / Display Model 06_01H.
>-    ///
>-    UINT32  MCIP:1;
>-    ///
>-    /// [Bit 3] LMCE_S. If IA32_MCG_CAP.LMCE_P[2 7] =1.
>-    ///
>-    UINT32  LMCE_S:1;
>-    UINT32  Reserved1:28;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MCG_STATUS_REGISTER;
>-
>-
>-/**
>-  Global Machine Check Control (R/W). If IA32_MCG_CAP.CTL_P[8] =1.
>-
>-  @param  ECX  MSR_IA32_MCG_CTL (0x0000017B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MCG_CTL);
>-  AsmWriteMsr64 (MSR_IA32_MCG_CTL, Msr);
>-  @endcode
>-  @note MSR_IA32_MCG_CTL is defined as IA32_MCG_CTL in SDM.
>-**/
>-#define MSR_IA32_MCG_CTL                         0x0000017B
>-
>-
>-/**
>-  Performance Event Select Register n (R/W). If CPUID.0AH: EAX[15:8] > n.
>-
>-  @param  ECX  MSR_IA32_PERFEVTSELn
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERFEVTSEL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERFEVTSEL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERFEVTSEL0);
>-  AsmWriteMsr64 (MSR_IA32_PERFEVTSEL0, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERFEVTSEL0 is defined as IA32_PERFEVTSEL0 in SDM.
>-        MSR_IA32_PERFEVTSEL1 is defined as IA32_PERFEVTSEL1 in SDM.
>-        MSR_IA32_PERFEVTSEL2 is defined as IA32_PERFEVTSEL2 in SDM.
>-        MSR_IA32_PERFEVTSEL3 is defined as IA32_PERFEVTSEL3 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_PERFEVTSEL0                     0x00000186
>-#define MSR_IA32_PERFEVTSEL1                     0x00000187
>-#define MSR_IA32_PERFEVTSEL2                     0x00000188
>-#define MSR_IA32_PERFEVTSEL3                     0x00000189
>-/// @}
>-
>-/**
>-  MSR information returned for MSR indexes #MSR_IA32_PERFEVTSEL0 to
>-  #MSR_IA32_PERFEVTSEL3
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Event Select: Selects a performance event logic unit.
>-    ///
>-    UINT32  EventSelect:8;
>-    ///
>-    /// [Bits 15:8] UMask: Qualifies the microarchitectural condition to
>-    /// detect on the selected event logic.
>-    ///
>-    UINT32  UMASK:8;
>-    ///
>-    /// [Bit 16] USR: Counts while in privilege level is not ring 0.
>-    ///
>-    UINT32  USR:1;
>-    ///
>-    /// [Bit 17] OS: Counts while in privilege level is ring 0.
>-    ///
>-    UINT32  OS:1;
>-    ///
>-    /// [Bit 18] Edge: Enables edge detection if set.
>-    ///
>-    UINT32  E:1;
>-    ///
>-    /// [Bit 19] PC: enables pin control.
>-    ///
>-    UINT32  PC:1;
>-    ///
>-    /// [Bit 20] INT: enables interrupt on counter overflow.
>-    ///
>-    UINT32  INT:1;
>-    ///
>-    /// [Bit 21] AnyThread: When set to 1, it enables counting the associated
>-    /// event conditions occurring across all logical processors sharing a
>-    /// processor core. When set to 0, the counter only increments the
>-    /// associated event conditions occurring in the logical processor which
>-    /// programmed the MSR.
>-    ///
>-    UINT32  ANY:1;
>-    ///
>-    /// [Bit 22] EN: enables the corresponding performance counter to
>commence
>-    /// counting when this bit is set.
>-    ///
>-    UINT32  EN:1;
>-    ///
>-    /// [Bit 23] INV: invert the CMASK.
>-    ///
>-    UINT32  INV:1;
>-    ///
>-    /// [Bits 31:24] CMASK: When CMASK is not zero, the corresponding
>-    /// performance counter increments each cycle if the event count is
>-    /// greater than or equal to the CMASK.
>-    ///
>-    UINT32  CMASK:8;
>-    UINT32  Reserved:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERFEVTSEL_REGISTER;
>-
>-
>-/**
>-  Current performance state(P-State) operating point (RO). Introduced at
>-  Display Family / Display Model 0F_03H.
>-
>-  @param  ECX  MSR_IA32_PERF_STATUS (0x00000198)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_STATUS);
>-  @endcode
>-  @note MSR_IA32_PERF_STATUS is defined as IA32_PERF_STATUS in SDM.
>-**/
>-#define MSR_IA32_PERF_STATUS                     0x00000198
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PERF_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 15:0] Current performance State Value.
>-    ///
>-    UINT32  State:16;
>-    UINT32  Reserved1:16;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_STATUS_REGISTER;
>-
>-
>-/**
>-  (R/W). Introduced at Display Family / Display Model 0F_03H.
>-
>-  @param  ECX  MSR_IA32_PERF_CTL (0x00000199)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_CTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_CTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_CTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CTL);
>-  AsmWriteMsr64 (MSR_IA32_PERF_CTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_CTL is defined as IA32_PERF_CTL in SDM.
>-**/
>-#define MSR_IA32_PERF_CTL                        0x00000199
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PERF_CTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 15:0] Target performance State Value.
>-    ///
>-    UINT32  TargetState:16;
>-    UINT32  Reserved1:16;
>-    ///
>-    /// [Bit 32] IDA Engage. (R/W) When set to 1: disengages IDA. 06_0FH
>-    /// (Mobile only).
>-    ///
>-    UINT32  IDA:1;
>-    UINT32  Reserved2:31;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_CTL_REGISTER;
>-
>-
>-/**
>-  Clock Modulation Control (R/W) See Section 14.7.3, "Software Controlled
>-  Clock Modulation.". If CPUID.01H:EDX[22] = 1.
>-
>-  @param  ECX  MSR_IA32_CLOCK_MODULATION (0x0000019A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_CLOCK_MODULATION_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_CLOCK_MODULATION_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_CLOCK_MODULATION);
>-  AsmWriteMsr64 (MSR_IA32_CLOCK_MODULATION, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_CLOCK_MODULATION is defined as
>IA32_CLOCK_MODULATION in SDM.
>-**/
>-#define MSR_IA32_CLOCK_MODULATION                0x0000019A
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_CLOCK_MODULATION
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Extended On-Demand Clock Modulation Duty Cycle:. If
>-    /// CPUID.06H:EAX[5] = 1.
>-    ///
>-    UINT32  ExtendedOnDemandClockModulationDutyCycle:1;
>-    ///
>-    /// [Bits 3:1] On-Demand Clock Modulation Duty Cycle: Specific encoded
>-    /// values for target duty cycle modulation. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  OnDemandClockModulationDutyCycle:3;
>-    ///
>-    /// [Bit 4] On-Demand Clock Modulation Enable: Set 1 to enable modulation.
>-    /// If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  OnDemandClockModulationEnable:1;
>-    UINT32  Reserved1:27;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_CLOCK_MODULATION_REGISTER;
>-
>-
>-/**
>-  Thermal Interrupt Control (R/W) Enables and disables the generation of an
>-  interrupt on temperature transitions detected with the processor's thermal
>-  sensors and thermal monitor. See Section 14.7.2, "Thermal Monitor.".
>-  If CPUID.01H:EDX[22] = 1
>-
>-  @param  ECX  MSR_IA32_THERM_INTERRUPT (0x0000019B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_THERM_INTERRUPT_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_THERM_INTERRUPT_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_INTERRUPT);
>-  AsmWriteMsr64 (MSR_IA32_THERM_INTERRUPT, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_THERM_INTERRUPT is defined as
>IA32_THERM_INTERRUPT in SDM.
>-**/
>-#define MSR_IA32_THERM_INTERRUPT                 0x0000019B
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_THERM_INTERRUPT
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] High-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  HighTempEnable:1;
>-    ///
>-    /// [Bit 1] Low-Temperature Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  LowTempEnable:1;
>-    ///
>-    /// [Bit 2] PROCHOT# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  PROCHOT_Enable:1;
>-    ///
>-    /// [Bit 3] FORCEPR# Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  FORCEPR_Enable:1;
>-    ///
>-    /// [Bit 4] Critical Temperature Interrupt Enable.
>-    /// If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  CriticalTempEnable:1;
>-    UINT32  Reserved1:3;
>-    ///
>-    /// [Bits 14:8] Threshold #1 Value. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  Threshold1:7;
>-    ///
>-    /// [Bit 15] Threshold #1 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  Threshold1Enable:1;
>-    ///
>-    /// [Bits 22:16] Threshold #2 Value. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  Threshold2:7;
>-    ///
>-    /// [Bit 23] Threshold #2 Interrupt Enable. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  Threshold2Enable:1;
>-    ///
>-    /// [Bit 24] Power Limit Notification Enable. If CPUID.06H:EAX[4] = 1.
>-    ///
>-    UINT32  PowerLimitNotificationEnable:1;
>-    UINT32  Reserved2:7;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_THERM_INTERRUPT_REGISTER;
>-
>-
>-/**
>-  Thermal Status Information (RO) Contains status information about the
>-  processor's thermal sensor and automatic thermal monitoring facilities. See
>-  Section 14.7.2, "Thermal Monitor". If CPUID.01H:EDX[22] = 1.
>-
>-  @param  ECX  MSR_IA32_THERM_STATUS (0x0000019C)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_THERM_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_THERM_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_THERM_STATUS);
>-  @endcode
>-  @note MSR_IA32_THERM_STATUS is defined as IA32_THERM_STATUS in
>SDM.
>-**/
>-#define MSR_IA32_THERM_STATUS                    0x0000019C
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_THERM_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Thermal Status (RO):. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  ThermalStatus:1;
>-    ///
>-    /// [Bit 1] Thermal Status Log (R/W):. If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  ThermalStatusLog:1;
>-    ///
>-    /// [Bit 2] PROCHOT # or FORCEPR# event (RO). If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  PROCHOT_FORCEPR_Event:1;
>-    ///
>-    /// [Bit 3] PROCHOT # or FORCEPR# log (R/WC0). If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  PROCHOT_FORCEPR_Log:1;
>-    ///
>-    /// [Bit 4] Critical Temperature Status (RO). If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  CriticalTempStatus:1;
>-    ///
>-    /// [Bit 5] Critical Temperature Status log (R/WC0).
>-    /// If CPUID.01H:EDX[22] = 1.
>-    ///
>-    UINT32  CriticalTempStatusLog:1;
>-    ///
>-    /// [Bit 6] Thermal Threshold #1 Status (RO). If CPUID.01H:ECX[8] = 1.
>-    ///
>-    UINT32  ThermalThreshold1Status:1;
>-    ///
>-    /// [Bit 7] Thermal Threshold #1 log (R/WC0). If CPUID.01H:ECX[8] = 1.
>-    ///
>-    UINT32  ThermalThreshold1Log:1;
>-    ///
>-    /// [Bit 8] Thermal Threshold #2 Status (RO). If CPUID.01H:ECX[8] = 1.
>-    ///
>-    UINT32  ThermalThreshold2Status:1;
>-    ///
>-    /// [Bit 9] Thermal Threshold #2 log (R/WC0). If CPUID.01H:ECX[8] = 1.
>-    ///
>-    UINT32  ThermalThreshold2Log:1;
>-    ///
>-    /// [Bit 10] Power Limitation Status (RO). If CPUID.06H:EAX[4] = 1.
>-    ///
>-    UINT32  PowerLimitStatus:1;
>-    ///
>-    /// [Bit 11] Power Limitation log (R/WC0). If CPUID.06H:EAX[4] = 1.
>-    ///
>-    UINT32  PowerLimitLog:1;
>-    ///
>-    /// [Bit 12] Current Limit Status (RO). If CPUID.06H:EAX[7] = 1.
>-    ///
>-    UINT32  CurrentLimitStatus:1;
>-    ///
>-    /// [Bit 13] Current Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
>-    ///
>-    UINT32  CurrentLimitLog:1;
>-    ///
>-    /// [Bit 14] Cross Domain Limit Status (RO). If CPUID.06H:EAX[7] = 1.
>-    ///
>-    UINT32  CrossDomainLimitStatus:1;
>-    ///
>-    /// [Bit 15] Cross Domain Limit log (R/WC0). If CPUID.06H:EAX[7] = 1.
>-    ///
>-    UINT32  CrossDomainLimitLog:1;
>-    ///
>-    /// [Bits 22:16] Digital Readout (RO). If CPUID.06H:EAX[0] = 1.
>-    ///
>-    UINT32  DigitalReadout:7;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bits 30:27] Resolution in Degrees Celsius (RO). If CPUID.06H:EAX[0] =
>-    /// 1.
>-    ///
>-    UINT32  ResolutionInDegreesCelsius:4;
>-    ///
>-    /// [Bit 31] Reading Valid (RO). If CPUID.06H:EAX[0] = 1.
>-    ///
>-    UINT32  ReadingValid:1;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_THERM_STATUS_REGISTER;
>-
>-
>-/**
>-  Enable Misc. Processor Features (R/W)  Allows a variety of processor
>-  functions to be enabled and disabled.
>-
>-  @param  ECX  MSR_IA32_MISC_ENABLE (0x000001A0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MISC_ENABLE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MISC_ENABLE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MISC_ENABLE);
>-  AsmWriteMsr64 (MSR_IA32_MISC_ENABLE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MISC_ENABLE is defined as IA32_MISC_ENABLE in SDM.
>-**/
>-#define MSR_IA32_MISC_ENABLE                     0x000001A0
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MISC_ENABLE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Fast-Strings Enable When set, the fast-strings feature (for
>-    /// REP MOVS and REP STORS) is enabled (default); when clear, fast-strings
>-    /// are disabled. Introduced at Display Family / Display Model 0F_0H.
>-    ///
>-    UINT32  FastStrings:1;
>-    UINT32  Reserved1:2;
>-    ///
>-    /// [Bit 3] Automatic Thermal Control Circuit Enable (R/W)  1 = Setting
>-    /// this bit enables the thermal control circuit (TCC) portion of the
>-    /// Intel Thermal Monitor feature. This allows the processor to
>-    /// automatically reduce power consumption in response to TCC activation.
>-    /// 0 = Disabled. Note: In some products clearing this bit might be
>-    /// ignored in critical thermal conditions, and TM1, TM2 and adaptive
>-    /// thermal throttling will still be activated. The default value of this
>-    /// field varies with product. See respective tables where default value is
>-    /// listed. Introduced at Display Family / Display Model 0F_0H.
>-    ///
>-    UINT32  AutomaticThermalControlCircuit:1;
>-    UINT32  Reserved2:3;
>-    ///
>-    /// [Bit 7] Performance Monitoring Available (R)  1 = Performance
>-    /// monitoring enabled 0 = Performance monitoring disabled. Introduced at
>-    /// Display Family / Display Model 0F_0H.
>-    ///
>-    UINT32  PerformanceMonitoring:1;
>-    UINT32  Reserved3:3;
>-    ///
>-    /// [Bit 11] Branch Trace Storage Unavailable (RO) 1 = Processor doesn't
>-    /// support branch trace storage (BTS) 0 = BTS is supported. Introduced at
>-    /// Display Family / Display Model 0F_0H.
>-    ///
>-    UINT32  BTS:1;
>-    ///
>-    /// [Bit 12] Processor Event Based Sampling (PEBS)  Unavailable (RO)  1 =
>-    /// PEBS is not supported; 0 = PEBS is supported. Introduced at Display
>-    /// Family / Display Model 06_0FH.
>-    ///
>-    UINT32  PEBS:1;
>-    UINT32  Reserved4:3;
>-    ///
>-    /// [Bit 16] Enhanced Intel SpeedStep Technology  Enable (R/W) 0=
>Enhanced
>-    /// Intel SpeedStep Technology disabled 1 = Enhanced Intel SpeedStep
>-    /// Technology enabled. If CPUID.01H: ECX[7] =1.
>-    ///
>-    UINT32  EIST:1;
>-    UINT32  Reserved5:1;
>-    ///
>-    /// [Bit 18] ENABLE MONITOR FSM (R/W) When this bit is set to 0, the
>-    /// MONITOR feature flag is not set (CPUID.01H:ECX[bit 3] = 0). This
>-    /// indicates that MONITOR/MWAIT are not supported. Software attempts
>to
>-    /// execute MONITOR/MWAIT will cause #UD when this bit is 0. When this
>bit
>-    /// is set to 1 (default), MONITOR/MWAIT are supported
>(CPUID.01H:ECX[bit
>-    /// 3] = 1). If the SSE3 feature flag ECX[0] is not set (CPUID.01H:ECX[bit
>-    /// 0] = 0), the OS must not attempt to alter this bit. BIOS must leave it
>-    /// in the default state. Writing this bit when the SSE3 feature flag is
>-    /// set to 0 may generate a #GP exception. Introduced at Display Family /
>-    /// Display Model 0F_03H.
>-    ///
>-    UINT32  MONITOR:1;
>-    UINT32  Reserved6:3;
>-    ///
>-    /// [Bit 22] Limit CPUID Maxval (R/W) When this bit is set to 1, CPUID.00H
>-    /// returns a maximum value in EAX[7:0] of 2. BIOS should contain a setup
>-    /// question that allows users to specify when the installed OS does not
>-    /// support CPUID functions greater than 2. Before setting this bit, BIOS
>-    /// must execute the CPUID.0H and examine the maximum value returned
>in
>-    /// EAX[7:0]. If the maximum value is greater than 2, this bit is
>-    /// supported. Otherwise, this bit is not supported. Setting this bit when
>-    /// the maximum value is not greater than 2 may generate a #GP exception.
>-    /// Setting this bit may cause unexpected behavior in software that
>-    /// depends on the availability of CPUID leaves greater than 2. Introduced
>-    /// at Display Family / Display Model 0F_03H.
>-    ///
>-    UINT32  LimitCpuidMaxval:1;
>-    ///
>-    /// [Bit 23] xTPR Message Disable (R/W) When set to 1, xTPR messages are
>-    /// disabled. xTPR messages are optional messages that allow the
>processor
>-    /// to inform the chipset of its priority. if CPUID.01H:ECX[14] = 1.
>-    ///
>-    UINT32  xTPR_Message_Disable:1;
>-    UINT32  Reserved7:8;
>-    UINT32  Reserved8:2;
>-    ///
>-    /// [Bit 34] XD Bit Disable (R/W) When set to 1, the Execute Disable Bit
>-    /// feature (XD Bit) is disabled and the XD Bit extended feature flag will
>-    /// be clear (CPUID.80000001H: EDX[20]=0). When set to a 0 (default), the
>-    /// Execute Disable Bit feature (if available) allows the OS to enable PAE
>-    /// paging and take advantage of data only pages. BIOS must not alter the
>-    /// contents of this bit location, if XD bit is not supported. Writing
>-    /// this bit to 1 when the XD Bit extended feature flag is set to 0 may
>-    /// generate a #GP exception. if CPUID.80000001H:EDX[2 0] = 1.
>-    ///
>-    UINT32  XD:1;
>-    UINT32  Reserved9:29;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MISC_ENABLE_REGISTER;
>-
>-
>-/**
>-  Performance Energy Bias Hint (R/W). if CPUID.6H:ECX[3] = 1.
>-
>-  @param  ECX  MSR_IA32_ENERGY_PERF_BIAS (0x000001B0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_ENERGY_PERF_BIAS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_ENERGY_PERF_BIAS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_ENERGY_PERF_BIAS);
>-  AsmWriteMsr64 (MSR_IA32_ENERGY_PERF_BIAS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_ENERGY_PERF_BIAS is defined as
>IA32_ENERGY_PERF_BIAS in SDM.
>-**/
>-#define MSR_IA32_ENERGY_PERF_BIAS                0x000001B0
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_ENERGY_PERF_BIAS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 3:0] Power Policy Preference: 0 indicates preference to highest
>-    /// performance. 15 indicates preference to maximize energy saving.
>-    ///
>-    UINT32  PowerPolicyPreference:4;
>-    UINT32  Reserved1:28;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_ENERGY_PERF_BIAS_REGISTER;
>-
>-
>-/**
>-  Package Thermal Status Information (RO) Contains status information about
>-  the package's thermal sensor. See Section 14.8, "Package Level Thermal
>-  Management.". If CPUID.06H: EAX[6] = 1.
>-
>-  @param  ECX  MSR_IA32_PACKAGE_THERM_STATUS (0x000001B1)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PACKAGE_THERM_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PACKAGE_THERM_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_STATUS);
>-  @endcode
>-  @note MSR_IA32_PACKAGE_THERM_STATUS is defined as
>IA32_PACKAGE_THERM_STATUS in SDM.
>-**/
>-#define MSR_IA32_PACKAGE_THERM_STATUS            0x000001B1
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PACKAGE_THERM_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Pkg Thermal Status (RO):.
>-    ///
>-    UINT32  ThermalStatus:1;
>-    ///
>-    /// [Bit 1] Pkg Thermal Status Log (R/W):.
>-    ///
>-    UINT32  ThermalStatusLog:1;
>-    ///
>-    /// [Bit 2] Pkg PROCHOT # event (RO).
>-    ///
>-    UINT32  PROCHOT_Event:1;
>-    ///
>-    /// [Bit 3] Pkg PROCHOT # log (R/WC0).
>-    ///
>-    UINT32  PROCHOT_Log:1;
>-    ///
>-    /// [Bit 4] Pkg Critical Temperature Status (RO).
>-    ///
>-    UINT32  CriticalTempStatus:1;
>-    ///
>-    /// [Bit 5] Pkg Critical Temperature Status log (R/WC0).
>-    ///
>-    UINT32  CriticalTempStatusLog:1;
>-    ///
>-    /// [Bit 6] Pkg Thermal Threshold #1 Status (RO).
>-    ///
>-    UINT32  ThermalThreshold1Status:1;
>-    ///
>-    /// [Bit 7] Pkg Thermal Threshold #1 log (R/WC0).
>-    ///
>-    UINT32  ThermalThreshold1Log:1;
>-    ///
>-    /// [Bit 8] Pkg Thermal Threshold #2 Status (RO).
>-    ///
>-    UINT32  ThermalThreshold2Status:1;
>-    ///
>-    /// [Bit 9] Pkg Thermal Threshold #1 log (R/WC0).
>-    ///
>-    UINT32  ThermalThreshold2Log:1;
>-    ///
>-    /// [Bit 10] Pkg Power Limitation Status (RO).
>-    ///
>-    UINT32  PowerLimitStatus:1;
>-    ///
>-    /// [Bit 11] Pkg Power Limitation log (R/WC0).
>-    ///
>-    UINT32  PowerLimitLog:1;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bits 22:16] Pkg Digital Readout (RO).
>-    ///
>-    UINT32  DigitalReadout:7;
>-    UINT32  Reserved2:9;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PACKAGE_THERM_STATUS_REGISTER;
>-
>-
>-/**
>-  Pkg Thermal Interrupt Control (R/W) Enables and disables the generation of
>-  an interrupt on temperature transitions detected with the package's
>thermal
>-  sensor. See Section 14.8, "Package Level Thermal Management.". If
>CPUID.06H:
>-  EAX[6] = 1.
>-
>-  @param  ECX  MSR_IA32_PACKAGE_THERM_INTERRUPT (0x000001B2)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT);
>-  AsmWriteMsr64 (MSR_IA32_PACKAGE_THERM_INTERRUPT, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PACKAGE_THERM_INTERRUPT is defined as
>IA32_PACKAGE_THERM_INTERRUPT in SDM.
>-**/
>-#define MSR_IA32_PACKAGE_THERM_INTERRUPT         0x000001B2
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PACKAGE_THERM_INTERRUPT
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Pkg High-Temperature Interrupt Enable.
>-    ///
>-    UINT32  HighTempEnable:1;
>-    ///
>-    /// [Bit 1] Pkg Low-Temperature Interrupt Enable.
>-    ///
>-    UINT32  LowTempEnable:1;
>-    ///
>-    /// [Bit 2] Pkg PROCHOT# Interrupt Enable.
>-    ///
>-    UINT32  PROCHOT_Enable:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 4] Pkg Overheat Interrupt Enable.
>-    ///
>-    UINT32  OverheatEnable:1;
>-    UINT32  Reserved2:3;
>-    ///
>-    /// [Bits 14:8] Pkg Threshold #1 Value.
>-    ///
>-    UINT32  Threshold1:7;
>-    ///
>-    /// [Bit 15] Pkg Threshold #1 Interrupt Enable.
>-    ///
>-    UINT32  Threshold1Enable:1;
>-    ///
>-    /// [Bits 22:16] Pkg Threshold #2 Value.
>-    ///
>-    UINT32  Threshold2:7;
>-    ///
>-    /// [Bit 23] Pkg Threshold #2 Interrupt Enable.
>-    ///
>-    UINT32  Threshold2Enable:1;
>-    ///
>-    /// [Bit 24] Pkg Power Limit Notification Enable.
>-    ///
>-    UINT32  PowerLimitNotificationEnable:1;
>-    UINT32  Reserved3:7;
>-    UINT32  Reserved4:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PACKAGE_THERM_INTERRUPT_REGISTER;
>-
>-
>-/**
>-  Trace/Profile Resource Control (R/W). Introduced at Display Family / Display
>-  Model 06_0EH.
>-
>-  @param  ECX  MSR_IA32_DEBUGCTL (0x000001D9)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_DEBUGCTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_DEBUGCTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL);
>-  AsmWriteMsr64 (MSR_IA32_DEBUGCTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_DEBUGCTL is defined as IA32_DEBUGCTL in SDM.
>-**/
>-#define MSR_IA32_DEBUGCTL                        0x000001D9
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_DEBUGCTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] LBR: Setting this bit to 1 enables the processor to record a
>-    /// running trace of the most recent branches taken by the processor in
>-    /// the LBR stack. Introduced at Display Family / Display Model 06_01H.
>-    ///
>-    UINT32  LBR:1;
>-    ///
>-    /// [Bit 1] BTF: Setting this bit to 1 enables the processor to treat
>-    /// EFLAGS.TF as single-step on branches instead of single-step on
>-    /// instructions. Introduced at Display Family / Display Model 06_01H.
>-    ///
>-    UINT32  BTF:1;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bit 6] TR: Setting this bit to 1 enables branch trace messages to be
>-    /// sent. Introduced at Display Family / Display Model 06_0EH.
>-    ///
>-    UINT32  TR:1;
>-    ///
>-    /// [Bit 7] BTS: Setting this bit enables branch trace messages (BTMs) to
>-    /// be logged in a BTS buffer. Introduced at Display Family / Display
>-    /// Model 06_0EH.
>-    ///
>-    UINT32  BTS:1;
>-    ///
>-    /// [Bit 8] BTINT: When clear, BTMs are logged in a BTS buffer in circular
>-    /// fashion. When this bit is set, an interrupt is generated by the BTS
>-    /// facility when the BTS buffer is full. Introduced at Display Family /
>-    /// Display Model 06_0EH.
>-    ///
>-    UINT32  BTINT:1;
>-    ///
>-    /// [Bit 9] BTS_OFF_OS: When set, BTS or BTM is skipped if CPL = 0.
>-    /// Introduced at Display Family / Display Model 06_0FH.
>-    ///
>-    UINT32  BTS_OFF_OS:1;
>-    ///
>-    /// [Bit 10] BTS_OFF_USR: When set, BTS or BTM is skipped if CPL > 0.
>-    /// Introduced at Display Family / Display Model 06_0FH.
>-    ///
>-    UINT32  BTS_OFF_USR:1;
>-    ///
>-    /// [Bit 11] FREEZE_LBRS_ON_PMI: When set, the LBR stack is frozen on a
>-    /// PMI request. If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
>-    ///
>-    UINT32  FREEZE_LBRS_ON_PMI:1;
>-    ///
>-    /// [Bit 12] FREEZE_PERFMON_ON_PMI: When set, each ENABLE bit of the
>-    /// global counter control MSR are frozen (address 38FH) on a PMI request.
>-    /// If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1.
>-    ///
>-    UINT32  FREEZE_PERFMON_ON_PMI:1;
>-    ///
>-    /// [Bit 13] ENABLE_UNCORE_PMI: When set, enables the logical processor
>to
>-    /// receive and generate PMI on behalf of the uncore. Introduced at
>-    /// Display Family / Display Model 06_1AH.
>-    ///
>-    UINT32  ENABLE_UNCORE_PMI:1;
>-    ///
>-    /// [Bit 14] FREEZE_WHILE_SMM: When set, freezes perfmon and trace
>-    /// messages while in SMM. If IA32_PERF_CAPABILITIES[ 12] = 1.
>-    ///
>-    UINT32  FREEZE_WHILE_SMM:1;
>-    ///
>-    /// [Bit 15] RTM_DEBUG: When set, enables DR7 debug bit on XBEGIN. If
>-    /// (CPUID.(EAX=07H, ECX=0):EBX[11] = 1).
>-    ///
>-    UINT32  RTM_DEBUG:1;
>-    UINT32  Reserved2:16;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_DEBUGCTL_REGISTER;
>-
>-
>-/**
>-  SMRR Base Address (Writeable only in SMM)  Base address of SMM
>memory range.
>-  If IA32_MTRRCAP.SMRR[11] = 1.
>-
>-  @param  ECX  MSR_IA32_SMRR_PHYSBASE (0x000001F2)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMRR_PHYSBASE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_SMRR_PHYSBASE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSBASE);
>-  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSBASE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_SMRR_PHYSBASE is defined as IA32_SMRR_PHYSBASE in
>SDM.
>-**/
>-#define MSR_IA32_SMRR_PHYSBASE                   0x000001F2
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSBASE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Type. Specifies memory type of the range.
>-    ///
>-    UINT32  Type:8;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bits 31:12] PhysBase.  SMRR physical Base Address.
>-    ///
>-    UINT32  PhysBase:20;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_SMRR_PHYSBASE_REGISTER;
>-
>-
>-/**
>-  SMRR Range Mask (Writeable only in SMM) Range Mask of SMM memory
>range. If
>-  IA32_MTRRCAP[SMRR] = 1.
>-
>-  @param  ECX  MSR_IA32_SMRR_PHYSMASK (0x000001F3)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_SMRR_PHYSMASK_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_SMRR_PHYSMASK_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SMRR_PHYSMASK);
>-  AsmWriteMsr64 (MSR_IA32_SMRR_PHYSMASK, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_SMRR_PHYSMASK is defined as IA32_SMRR_PHYSMASK
>in SDM.
>-**/
>-#define MSR_IA32_SMRR_PHYSMASK                   0x000001F3
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_SMRR_PHYSMASK
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved1:11;
>-    ///
>-    /// [Bit 11] Valid Enable range mask.
>-    ///
>-    UINT32  Valid:1;
>-    ///
>-    /// [Bits 31:12] PhysMask SMRR address range mask.
>-    ///
>-    UINT32  PhysMask:20;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_SMRR_PHYSMASK_REGISTER;
>-
>-
>-/**
>-  DCA Capability (R). If CPUID.01H: ECX[18] = 1.
>-
>-  @param  ECX  MSR_IA32_PLATFORM_DCA_CAP (0x000001F8)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_PLATFORM_DCA_CAP);
>-  @endcode
>-  @note MSR_IA32_PLATFORM_DCA_CAP is defined as
>IA32_PLATFORM_DCA_CAP in SDM.
>-**/
>-#define MSR_IA32_PLATFORM_DCA_CAP                0x000001F8
>-
>-
>-/**
>-  If set, CPU supports Prefetch-Hint type. If CPUID.01H: ECX[18] = 1.
>-
>-  @param  ECX  MSR_IA32_CPU_DCA_CAP (0x000001F9)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_CPU_DCA_CAP);
>-  AsmWriteMsr64 (MSR_IA32_CPU_DCA_CAP, Msr);
>-  @endcode
>-  @note MSR_IA32_CPU_DCA_CAP is defined as IA32_CPU_DCA_CAP in SDM.
>-**/
>-#define MSR_IA32_CPU_DCA_CAP                     0x000001F9
>-
>-
>-/**
>-  DCA type 0 Status and Control register. If CPUID.01H: ECX[18] = 1.
>-
>-  @param  ECX  MSR_IA32_DCA_0_CAP (0x000001FA)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_DCA_0_CAP_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_DCA_0_CAP_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DCA_0_CAP);
>-  AsmWriteMsr64 (MSR_IA32_DCA_0_CAP, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_DCA_0_CAP is defined as IA32_DCA_0_CAP in SDM.
>-**/
>-#define MSR_IA32_DCA_0_CAP                       0x000001FA
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_DCA_0_CAP
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] DCA_ACTIVE: Set by HW when DCA is fuseenabled and no
>-    /// defeatures are set.
>-    ///
>-    UINT32  DCA_ACTIVE:1;
>-    ///
>-    /// [Bits 2:1] TRANSACTION.
>-    ///
>-    UINT32  TRANSACTION:2;
>-    ///
>-    /// [Bits 6:3] DCA_TYPE.
>-    ///
>-    UINT32  DCA_TYPE:4;
>-    ///
>-    /// [Bits 10:7] DCA_QUEUE_SIZE.
>-    ///
>-    UINT32  DCA_QUEUE_SIZE:4;
>-    UINT32  Reserved1:2;
>-    ///
>-    /// [Bits 16:13] DCA_DELAY: Writes will update the register but have no HW
>-    /// side-effect.
>-    ///
>-    UINT32  DCA_DELAY:4;
>-    UINT32  Reserved2:7;
>-    ///
>-    /// [Bit 24] SW_BLOCK: SW can request DCA block by setting this bit.
>-    ///
>-    UINT32  SW_BLOCK:1;
>-    UINT32  Reserved3:1;
>-    ///
>-    /// [Bit 26] HW_BLOCK: Set when DCA is blocked by HW (e.g. CR0.CD = 1).
>-    ///
>-    UINT32  HW_BLOCK:1;
>-    UINT32  Reserved4:5;
>-    UINT32  Reserved5:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_DCA_0_CAP_REGISTER;
>-
>-
>-/**
>-  MTRRphysBasen.  See Section 11.11.2.3, "Variable Range MTRRs".
>-  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
>-
>-  @param  ECX  MSR_IA32_MTRR_PHYSBASEn
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_PHYSBASE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MTRR_PHYSBASE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSBASE0);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSBASE0, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MTRR_PHYSBASE0 is defined as IA32_MTRR_PHYSBASE0
>in SDM.
>-        MSR_IA32_MTRR_PHYSBASE1 is defined as IA32_MTRR_PHYSBASE1 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE2 is defined as IA32_MTRR_PHYSBASE2 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE3 is defined as IA32_MTRR_PHYSBASE3 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE4 is defined as IA32_MTRR_PHYSBASE4 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE5 is defined as IA32_MTRR_PHYSBASE5 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE6 is defined as IA32_MTRR_PHYSBASE6 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE7 is defined as IA32_MTRR_PHYSBASE7 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE8 is defined as IA32_MTRR_PHYSBASE8 in
>SDM.
>-        MSR_IA32_MTRR_PHYSBASE9 is defined as IA32_MTRR_PHYSBASE9 in
>SDM.
>-  @{
>-**/
>-#define MSR_IA32_MTRR_PHYSBASE0                  0x00000200
>-#define MSR_IA32_MTRR_PHYSBASE1                  0x00000202
>-#define MSR_IA32_MTRR_PHYSBASE2                  0x00000204
>-#define MSR_IA32_MTRR_PHYSBASE3                  0x00000206
>-#define MSR_IA32_MTRR_PHYSBASE4                  0x00000208
>-#define MSR_IA32_MTRR_PHYSBASE5                  0x0000020A
>-#define MSR_IA32_MTRR_PHYSBASE6                  0x0000020C
>-#define MSR_IA32_MTRR_PHYSBASE7                  0x0000020E
>-#define MSR_IA32_MTRR_PHYSBASE8                  0x00000210
>-#define MSR_IA32_MTRR_PHYSBASE9                  0x00000212
>-/// @}
>-
>-/**
>-  MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0
>to
>-  #MSR_IA32_MTRR_PHYSBASE9
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Type. Specifies memory type of the range.
>-    ///
>-    UINT32  Type:8;
>-    UINT32  Reserved1:4;
>-    ///
>-    /// [Bits 31:12] PhysBase.  MTRR physical Base Address.
>-    ///
>-    UINT32  PhysBase:20;
>-    ///
>-    /// [Bits MAXPHYSADDR:32] PhysBase.  Upper bits of MTRR physical Base
>Address.
>-    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on
>the
>-    /// maximum physical address range supported by the processor. It is
>-    /// reported by CPUID leaf function 80000008H. If CPUID does not support
>-    /// leaf 80000008H, the processor supports 36-bit physical address size,
>-    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
>-    ///
>-    UINT32  PhysBaseHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MTRR_PHYSBASE_REGISTER;
>-
>-
>-/**
>-  MTRRphysMaskn.  See Section 11.11.2.3, "Variable Range MTRRs".
>-  If CPUID.01H: EDX.MTRR[12] = 1 and IA32_MTRRCAP[7:0] > n.
>-
>-  @param  ECX  MSR_IA32_MTRR_PHYSMASKn
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_PHYSMASK_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MTRR_PHYSMASK_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_PHYSMASK0);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_PHYSMASK0, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MTRR_PHYSMASK0 is defined as
>IA32_MTRR_PHYSMASK0 in SDM.
>-        MSR_IA32_MTRR_PHYSMASK1 is defined as IA32_MTRR_PHYSMASK1 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK2 is defined as IA32_MTRR_PHYSMASK2 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK3 is defined as IA32_MTRR_PHYSMASK3 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK4 is defined as IA32_MTRR_PHYSMASK4 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK5 is defined as IA32_MTRR_PHYSMASK5 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK6 is defined as IA32_MTRR_PHYSMASK6 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK7 is defined as IA32_MTRR_PHYSMASK7 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK8 is defined as IA32_MTRR_PHYSMASK8 in
>SDM.
>-        MSR_IA32_MTRR_PHYSMASK9 is defined as IA32_MTRR_PHYSMASK9 in
>SDM.
>-  @{
>-**/
>-#define MSR_IA32_MTRR_PHYSMASK0                  0x00000201
>-#define MSR_IA32_MTRR_PHYSMASK1                  0x00000203
>-#define MSR_IA32_MTRR_PHYSMASK2                  0x00000205
>-#define MSR_IA32_MTRR_PHYSMASK3                  0x00000207
>-#define MSR_IA32_MTRR_PHYSMASK4                  0x00000209
>-#define MSR_IA32_MTRR_PHYSMASK5                  0x0000020B
>-#define MSR_IA32_MTRR_PHYSMASK6                  0x0000020D
>-#define MSR_IA32_MTRR_PHYSMASK7                  0x0000020F
>-#define MSR_IA32_MTRR_PHYSMASK8                  0x00000211
>-#define MSR_IA32_MTRR_PHYSMASK9                  0x00000213
>-/// @}
>-
>-/**
>-  MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSMASK0
>to
>-  #MSR_IA32_MTRR_PHYSMASK9
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved1:11;
>-    ///
>-    /// [Bit 11] Valid Enable range mask.
>-    ///
>-    UINT32  V:1;
>-    ///
>-    /// [Bits 31:12] PhysMask.  MTRR address range mask.
>-    ///
>-    UINT32  PhysMask:20;
>-    ///
>-    /// [Bits MAXPHYSADDR:32] PhysMask.  Upper bits of MTRR address range
>mask.
>-    /// MAXPHYADDR: The bit position indicated by MAXPHYADDR depends on
>the
>-    /// maximum physical address range supported by the processor. It is
>-    /// reported by CPUID leaf function 80000008H. If CPUID does not support
>-    /// leaf 80000008H, the processor supports 36-bit physical address size,
>-    /// then bit PhysMask consists of bits 35:12, and bits 63:36 are reserved.
>-    ///
>-    UINT32  PhysMaskHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MTRR_PHYSMASK_REGISTER;
>-
>-
>-/**
>-  MTRRfix64K_00000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX64K_00000 (0x00000250)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX64K_00000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX64K_00000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX64K_00000 is defined as
>IA32_MTRR_FIX64K_00000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX64K_00000               0x00000250
>-
>-
>-/**
>-  MTRRfix16K_80000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX16K_80000 (0x00000258)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_80000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_80000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX16K_80000 is defined as
>IA32_MTRR_FIX16K_80000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX16K_80000               0x00000258
>-
>-
>-/**
>-  MTRRfix16K_A0000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX16K_A0000 (0x00000259)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX16K_A0000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX16K_A0000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX16K_A0000 is defined as
>IA32_MTRR_FIX16K_A0000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX16K_A0000               0x00000259
>-
>-
>-/**
>-  See Section 11.11.2.2, "Fixed Range MTRRs.". If CPUID.01H: EDX.MTRR[12]
>=1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_C0000 (0x00000268)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C0000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C0000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_C0000 is defined as
>IA32_MTRR_FIX4K_C0000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_C0000                0x00000268
>-
>-
>-/**
>-  MTRRfix4K_C8000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_C8000 (0x00000269)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_C8000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_C8000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_C8000 is defined as
>IA32_MTRR_FIX4K_C8000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_C8000                0x00000269
>-
>-
>-/**
>-  MTRRfix4K_D0000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_D0000 (0x0000026A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D0000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D0000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_D0000 is defined as
>IA32_MTRR_FIX4K_D0000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_D0000                0x0000026A
>-
>-
>-/**
>-  MTRRfix4K_D8000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_D8000 (0x0000026B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_D8000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_D8000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_D8000 is defined as
>IA32_MTRR_FIX4K_D8000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_D8000                0x0000026B
>-
>-
>-/**
>-  MTRRfix4K_E0000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_E0000 (0x0000026C)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E0000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E0000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_E0000 is defined as
>IA32_MTRR_FIX4K_E0000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_E0000                0x0000026C
>-
>-
>-/**
>-  MTRRfix4K_E8000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_E8000 (0x0000026D)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_E8000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_E8000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_E8000 is defined as
>IA32_MTRR_FIX4K_E8000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_E8000                0x0000026D
>-
>-
>-/**
>-  MTRRfix4K_F0000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_F0000 (0x0000026E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F0000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F0000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_F0000 is defined as
>IA32_MTRR_FIX4K_F0000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_F0000                0x0000026E
>-
>-
>-/**
>-  MTRRfix4K_F8000. If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_FIX4K_F8000 (0x0000026F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MTRR_FIX4K_F8000);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_FIX4K_F8000, Msr);
>-  @endcode
>-  @note MSR_IA32_MTRR_FIX4K_F8000 is defined as
>IA32_MTRR_FIX4K_F8000 in SDM.
>-**/
>-#define MSR_IA32_MTRR_FIX4K_F8000                0x0000026F
>-
>-
>-/**
>-  IA32_PAT (R/W). If CPUID.01H: EDX.MTRR[16] =1.
>-
>-  @param  ECX  MSR_IA32_PAT (0x00000277)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PAT_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PAT_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PAT_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PAT);
>-  AsmWriteMsr64 (MSR_IA32_PAT, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PAT is defined as IA32_PAT in SDM.
>-**/
>-#define MSR_IA32_PAT                             0x00000277
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PAT
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 2:0] PA0.
>-    ///
>-    UINT32  PA0:3;
>-    UINT32  Reserved1:5;
>-    ///
>-    /// [Bits 10:8] PA1.
>-    ///
>-    UINT32  PA1:3;
>-    UINT32  Reserved2:5;
>-    ///
>-    /// [Bits 18:16] PA2.
>-    ///
>-    UINT32  PA2:3;
>-    UINT32  Reserved3:5;
>-    ///
>-    /// [Bits 26:24] PA3.
>-    ///
>-    UINT32  PA3:3;
>-    UINT32  Reserved4:5;
>-    ///
>-    /// [Bits 34:32] PA4.
>-    ///
>-    UINT32  PA4:3;
>-    UINT32  Reserved5:5;
>-    ///
>-    /// [Bits 42:40] PA5.
>-    ///
>-    UINT32  PA5:3;
>-    UINT32  Reserved6:5;
>-    ///
>-    /// [Bits 50:48] PA6.
>-    ///
>-    UINT32  PA6:3;
>-    UINT32  Reserved7:5;
>-    ///
>-    /// [Bits 58:56] PA7.
>-    ///
>-    UINT32  PA7:3;
>-    UINT32  Reserved8:5;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PAT_REGISTER;
>-
>-
>-/**
>-  Provides the programming interface to use corrected MC error signaling
>-  capability (R/W). If IA32_MCG_CAP[10] = 1 && IA32_MCG_CAP[7:0] > n.
>-
>-  @param  ECX  MSR_IA32_MCn_CTL2
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MC_CTL2_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MC_CTL2_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MC_CTL2_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MC0_CTL2);
>-  AsmWriteMsr64 (MSR_IA32_MC0_CTL2, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MC0_CTL2  is defined as IA32_MC0_CTL2  in SDM.
>-        MSR_IA32_MC1_CTL2  is defined as IA32_MC1_CTL2  in SDM.
>-        MSR_IA32_MC2_CTL2  is defined as IA32_MC2_CTL2  in SDM.
>-        MSR_IA32_MC3_CTL2  is defined as IA32_MC3_CTL2  in SDM.
>-        MSR_IA32_MC4_CTL2  is defined as IA32_MC4_CTL2  in SDM.
>-        MSR_IA32_MC5_CTL2  is defined as IA32_MC5_CTL2  in SDM.
>-        MSR_IA32_MC6_CTL2  is defined as IA32_MC6_CTL2  in SDM.
>-        MSR_IA32_MC7_CTL2  is defined as IA32_MC7_CTL2  in SDM.
>-        MSR_IA32_MC8_CTL2  is defined as IA32_MC8_CTL2  in SDM.
>-        MSR_IA32_MC9_CTL2  is defined as IA32_MC9_CTL2  in SDM.
>-        MSR_IA32_MC10_CTL2 is defined as IA32_MC10_CTL2 in SDM.
>-        MSR_IA32_MC11_CTL2 is defined as IA32_MC11_CTL2 in SDM.
>-        MSR_IA32_MC12_CTL2 is defined as IA32_MC12_CTL2 in SDM.
>-        MSR_IA32_MC13_CTL2 is defined as IA32_MC13_CTL2 in SDM.
>-        MSR_IA32_MC14_CTL2 is defined as IA32_MC14_CTL2 in SDM.
>-        MSR_IA32_MC15_CTL2 is defined as IA32_MC15_CTL2 in SDM.
>-        MSR_IA32_MC16_CTL2 is defined as IA32_MC16_CTL2 in SDM.
>-        MSR_IA32_MC17_CTL2 is defined as IA32_MC17_CTL2 in SDM.
>-        MSR_IA32_MC18_CTL2 is defined as IA32_MC18_CTL2 in SDM.
>-        MSR_IA32_MC19_CTL2 is defined as IA32_MC19_CTL2 in SDM.
>-        MSR_IA32_MC20_CTL2 is defined as IA32_MC20_CTL2 in SDM.
>-        MSR_IA32_MC21_CTL2 is defined as IA32_MC21_CTL2 in SDM.
>-        MSR_IA32_MC22_CTL2 is defined as IA32_MC22_CTL2 in SDM.
>-        MSR_IA32_MC23_CTL2 is defined as IA32_MC23_CTL2 in SDM.
>-        MSR_IA32_MC24_CTL2 is defined as IA32_MC24_CTL2 in SDM.
>-        MSR_IA32_MC25_CTL2 is defined as IA32_MC25_CTL2 in SDM.
>-        MSR_IA32_MC26_CTL2 is defined as IA32_MC26_CTL2 in SDM.
>-        MSR_IA32_MC27_CTL2 is defined as IA32_MC27_CTL2 in SDM.
>-        MSR_IA32_MC28_CTL2 is defined as IA32_MC28_CTL2 in SDM.
>-        MSR_IA32_MC29_CTL2 is defined as IA32_MC29_CTL2 in SDM.
>-        MSR_IA32_MC30_CTL2 is defined as IA32_MC30_CTL2 in SDM.
>-        MSR_IA32_MC31_CTL2 is defined as IA32_MC31_CTL2 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_MC0_CTL2                        0x00000280
>-#define MSR_IA32_MC1_CTL2                        0x00000281
>-#define MSR_IA32_MC2_CTL2                        0x00000282
>-#define MSR_IA32_MC3_CTL2                        0x00000283
>-#define MSR_IA32_MC4_CTL2                        0x00000284
>-#define MSR_IA32_MC5_CTL2                        0x00000285
>-#define MSR_IA32_MC6_CTL2                        0x00000286
>-#define MSR_IA32_MC7_CTL2                        0x00000287
>-#define MSR_IA32_MC8_CTL2                        0x00000288
>-#define MSR_IA32_MC9_CTL2                        0x00000289
>-#define MSR_IA32_MC10_CTL2                       0x0000028A
>-#define MSR_IA32_MC11_CTL2                       0x0000028B
>-#define MSR_IA32_MC12_CTL2                       0x0000028C
>-#define MSR_IA32_MC13_CTL2                       0x0000028D
>-#define MSR_IA32_MC14_CTL2                       0x0000028E
>-#define MSR_IA32_MC15_CTL2                       0x0000028F
>-#define MSR_IA32_MC16_CTL2                       0x00000290
>-#define MSR_IA32_MC17_CTL2                       0x00000291
>-#define MSR_IA32_MC18_CTL2                       0x00000292
>-#define MSR_IA32_MC19_CTL2                       0x00000293
>-#define MSR_IA32_MC20_CTL2                       0x00000294
>-#define MSR_IA32_MC21_CTL2                       0x00000295
>-#define MSR_IA32_MC22_CTL2                       0x00000296
>-#define MSR_IA32_MC23_CTL2                       0x00000297
>-#define MSR_IA32_MC24_CTL2                       0x00000298
>-#define MSR_IA32_MC25_CTL2                       0x00000299
>-#define MSR_IA32_MC26_CTL2                       0x0000029A
>-#define MSR_IA32_MC27_CTL2                       0x0000029B
>-#define MSR_IA32_MC28_CTL2                       0x0000029C
>-#define MSR_IA32_MC29_CTL2                       0x0000029D
>-#define MSR_IA32_MC30_CTL2                       0x0000029E
>-#define MSR_IA32_MC31_CTL2                       0x0000029F
>-/// @}
>-
>-/**
>-  MSR information returned for MSR indexes #MSR_IA32_MC0_CTL2
>-  to #MSR_IA32_MC31_CTL2
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 14:0] Corrected error count threshold.
>-    ///
>-    UINT32  CorrectedErrorCountThreshold:15;
>-    UINT32  Reserved1:15;
>-    ///
>-    /// [Bit 30] CMCI_EN.
>-    ///
>-    UINT32  CMCI_EN:1;
>-    UINT32  Reserved2:1;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MC_CTL2_REGISTER;
>-
>-
>-/**
>-  MTRRdefType (R/W). If CPUID.01H: EDX.MTRR[12] =1.
>-
>-  @param  ECX  MSR_IA32_MTRR_DEF_TYPE (0x000002FF)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MTRR_DEF_TYPE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MTRR_DEF_TYPE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
>-  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MTRR_DEF_TYPE is defined as IA32_MTRR_DEF_TYPE in
>SDM.
>-**/
>-#define MSR_IA32_MTRR_DEF_TYPE                   0x000002FF
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MTRR_DEF_TYPE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 2:0] Default Memory Type.
>-    ///
>-    UINT32  Type:3;
>-    UINT32  Reserved1:7;
>-    ///
>-    /// [Bit 10] Fixed Range MTRR Enable.
>-    ///
>-    UINT32  FE:1;
>-    ///
>-    /// [Bit 11] MTRR Enable.
>-    ///
>-    UINT32  E:1;
>-    UINT32  Reserved2:20;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MTRR_DEF_TYPE_REGISTER;
>-
>-
>-/**
>-  Fixed-Function Performance Counter 0 (R/W): Counts Instr_Retired.Any. If
>-  CPUID.0AH: EDX[4:0] > 0.
>-
>-  @param  ECX  MSR_IA32_FIXED_CTR0 (0x00000309)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR0);
>-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR0, Msr);
>-  @endcode
>-  @note MSR_IA32_FIXED_CTR0 is defined as IA32_FIXED_CTR0 in SDM.
>-**/
>-#define MSR_IA32_FIXED_CTR0                      0x00000309
>-
>-
>-/**
>-  Fixed-Function Performance Counter 1 (R/W): Counts
>CPU_CLK_Unhalted.Core. If
>-  CPUID.0AH: EDX[4:0] > 1.
>-
>-  @param  ECX  MSR_IA32_FIXED_CTR1 (0x0000030A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR1);
>-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR1, Msr);
>-  @endcode
>-  @note MSR_IA32_FIXED_CTR1 is defined as IA32_FIXED_CTR1 in SDM.
>-**/
>-#define MSR_IA32_FIXED_CTR1                      0x0000030A
>-
>-
>-/**
>-  Fixed-Function Performance Counter 2 (R/W): Counts
>CPU_CLK_Unhalted.Ref. If
>-  CPUID.0AH: EDX[4:0] > 2.
>-
>-  @param  ECX  MSR_IA32_FIXED_CTR2 (0x0000030B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_FIXED_CTR2);
>-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR2, Msr);
>-  @endcode
>-  @note MSR_IA32_FIXED_CTR2 is defined as IA32_FIXED_CTR2 in SDM.
>-**/
>-#define MSR_IA32_FIXED_CTR2                      0x0000030B
>-
>-
>-/**
>-  RO. If CPUID.01H: ECX[15] = 1.
>-
>-  @param  ECX  MSR_IA32_PERF_CAPABILITIES (0x00000345)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_CAPABILITIES_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_CAPABILITIES_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_CAPABILITIES);
>-  AsmWriteMsr64 (MSR_IA32_PERF_CAPABILITIES, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_CAPABILITIES is defined as
>IA32_PERF_CAPABILITIES in SDM.
>-**/
>-#define MSR_IA32_PERF_CAPABILITIES               0x00000345
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PERF_CAPABILITIES
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 5:0] LBR format.
>-    ///
>-    UINT32  LBR_FMT:6;
>-    ///
>-    /// [Bit 6] PEBS Trap.
>-    ///
>-    UINT32  PEBS_TRAP:1;
>-    ///
>-    /// [Bit 7] PEBSSaveArchRegs.
>-    ///
>-    UINT32  PEBS_ARCH_REG:1;
>-    ///
>-    /// [Bits 11:8] PEBS Record Format.
>-    ///
>-    UINT32  PEBS_REC_FMT:4;
>-    ///
>-    /// [Bit 12] 1: Freeze while SMM is supported.
>-    ///
>-    UINT32  SMM_FREEZE:1;
>-    ///
>-    /// [Bit 13] 1: Full width of counter writable via IA32_A_PMCx.
>-    ///
>-    UINT32  FW_WRITE:1;
>-    UINT32  Reserved1:18;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_CAPABILITIES_REGISTER;
>-
>-
>-/**
>-  Fixed-Function Performance Counter Control (R/W) Counter increments
>while
>-  the results of ANDing respective enable bit in IA32_PERF_GLOBAL_CTRL
>with
>-  the corresponding OS or USR bits in this MSR is true. If CPUID.0AH: EAX[7:0]
>-  > 1.
>-
>-  @param  ECX  MSR_IA32_FIXED_CTR_CTRL (0x0000038D)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_FIXED_CTR_CTRL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_FIXED_CTR_CTRL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_FIXED_CTR_CTRL);
>-  AsmWriteMsr64 (MSR_IA32_FIXED_CTR_CTRL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_FIXED_CTR_CTRL is defined as IA32_FIXED_CTR_CTRL in
>SDM.
>-**/
>-#define MSR_IA32_FIXED_CTR_CTRL                  0x0000038D
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_FIXED_CTR_CTRL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] EN0_OS: Enable Fixed Counter 0 to count while CPL = 0.
>-    ///
>-    UINT32  EN0_OS:1;
>-    ///
>-    /// [Bit 1] EN0_Usr: Enable Fixed Counter 0 to count while CPL > 0.
>-    ///
>-    UINT32  EN0_Usr:1;
>-    ///
>-    /// [Bit 2] AnyThread: When set to 1, it enables counting the associated
>-    /// event conditions occurring across all logical processors sharing a
>-    /// processor core. When set to 0, the counter only increments the
>-    /// associated event conditions occurring in the logical processor which
>-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
>-    ///
>-    UINT32  AnyThread0:1;
>-    ///
>-    /// [Bit 3] EN0_PMI: Enable PMI when fixed counter 0 overflows.
>-    ///
>-    UINT32  EN0_PMI:1;
>-    ///
>-    /// [Bit 4] EN1_OS: Enable Fixed Counter 1 to count while CPL = 0.
>-    ///
>-    UINT32  EN1_OS:1;
>-    ///
>-    /// [Bit 5] EN1_Usr: Enable Fixed Counter 1 to count while CPL > 0.
>-    ///
>-    UINT32  EN1_Usr:1;
>-    ///
>-    /// [Bit 6] AnyThread: When set to 1, it enables counting the associated
>-    /// event conditions occurring across all logical processors sharing a
>-    /// processor core. When set to 0, the counter only increments the
>-    /// associated event conditions occurring in the logical processor which
>-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
>-    ///
>-    UINT32  AnyThread1:1;
>-    ///
>-    /// [Bit 7] EN1_PMI: Enable PMI when fixed counter 1 overflows.
>-    ///
>-    UINT32  EN1_PMI:1;
>-    ///
>-    /// [Bit 8] EN2_OS: Enable Fixed Counter 2 to count while CPL = 0.
>-    ///
>-    UINT32  EN2_OS:1;
>-    ///
>-    /// [Bit 9] EN2_Usr: Enable Fixed Counter 2 to count while CPL > 0.
>-    ///
>-    UINT32  EN2_Usr:1;
>-    ///
>-    /// [Bit 10] AnyThread: When set to 1, it enables counting the associated
>-    /// event conditions occurring across all logical processors sharing a
>-    /// processor core. When set to 0, the counter only increments the
>-    /// associated event conditions occurring in the logical processor which
>-    /// programmed the MSR. If CPUID.0AH: EAX[7:0] > 2.
>-    ///
>-    UINT32  AnyThread2:1;
>-    ///
>-    /// [Bit 11] EN2_PMI: Enable PMI when fixed counter 2 overflows.
>-    ///
>-    UINT32  EN2_PMI:1;
>-    UINT32  Reserved1:20;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_FIXED_CTR_CTRL_REGISTER;
>-
>-
>-/**
>-  Global Performance Counter Status (RO). If CPUID.0AH: EAX[7:0] > 0.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS (0x0000038E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_STATUS is defined as
>IA32_PERF_GLOBAL_STATUS in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_STATUS              0x0000038E
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PERF_GLOBAL_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Ovf_PMC0: Overflow status of IA32_PMC0. If CPUID.0AH:
>-    /// EAX[15:8] > 0.
>-    ///
>-    UINT32  Ovf_PMC0:1;
>-    ///
>-    /// [Bit 1] Ovf_PMC1: Overflow status of IA32_PMC1. If CPUID.0AH:
>-    /// EAX[15:8] > 1.
>-    ///
>-    UINT32  Ovf_PMC1:1;
>-    ///
>-    /// [Bit 2] Ovf_PMC2: Overflow status of IA32_PMC2. If CPUID.0AH:
>-    /// EAX[15:8] > 2.
>-    ///
>-    UINT32  Ovf_PMC2:1;
>-    ///
>-    /// [Bit 3] Ovf_PMC3: Overflow status of IA32_PMC3. If CPUID.0AH:
>-    /// EAX[15:8] > 3.
>-    ///
>-    UINT32  Ovf_PMC3:1;
>-    UINT32  Reserved1:28;
>-    ///
>-    /// [Bit 32] Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0. If
>-    /// CPUID.0AH: EAX[7:0] > 1.
>-    ///
>-    UINT32  Ovf_FixedCtr0:1;
>-    ///
>-    /// [Bit 33] Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1. If
>-    /// CPUID.0AH: EAX[7:0] > 1.
>-    ///
>-    UINT32  Ovf_FixedCtr1:1;
>-    ///
>-    /// [Bit 34] Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2. If
>-    /// CPUID.0AH: EAX[7:0] > 1.
>-    ///
>-    UINT32  Ovf_FixedCtr2:1;
>-    UINT32  Reserved2:20;
>-    ///
>-    /// [Bit 55] Trace_ToPA_PMI: A PMI occurred due to a ToPA entry memory
>-    /// buffer was completely filled. If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
>-    /// && IA32_RTIT_CTL.ToPA = 1.
>-    ///
>-    UINT32  Trace_ToPA_PMI:1;
>-    UINT32  Reserved3:2;
>-    ///
>-    /// [Bit 58] LBR_Frz: LBRs are frozen due to -
>-    /// IA32_DEBUGCTL.FREEZE_LBR_ON_PMI=1, -  The LBR stack overflowed.
>If
>-    /// CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  LBR_Frz:1;
>-    ///
>-    /// [Bit 59] CTR_Frz: Performance counters in the core PMU are frozen due
>-    /// to -  IA32_DEBUGCTL.FREEZE_PERFMON_ON_ PMI=1, -  one or more
>core PMU
>-    /// counters overflowed. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  CTR_Frz:1;
>-    ///
>-    /// [Bit 60] ASCI: Data in the performance counters in the core PMU may
>-    /// include contributions from the direct or indirect operation intel SGX
>-    /// to protect an enclave. If CPUID.(EAX=07H, ECX=0):EBX[2] = 1.
>-    ///
>-    UINT32  ASCI:1;
>-    ///
>-    /// [Bit 61] Ovf_Uncore: Uncore counter overflow status. If CPUID.0AH:
>-    /// EAX[7:0] > 2.
>-    ///
>-    UINT32  Ovf_Uncore:1;
>-    ///
>-    /// [Bit 62] OvfBuf: DS SAVE area Buffer overflow status. If CPUID.0AH:
>-    /// EAX[7:0] > 0.
>-    ///
>-    UINT32  OvfBuf:1;
>-    ///
>-    /// [Bit 63] CondChgd: status bits of this register has changed. If
>-    /// CPUID.0AH: EAX[7:0] > 0.
>-    ///
>-    UINT32  CondChgd:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_STATUS_REGISTER;
>-
>-
>-/**
>-  Global Performance Counter Control (R/W) Counter increments while the
>result
>-  of ANDing respective enable bit in this MSR with the corresponding OS or
>USR
>-  bits in the general-purpose or fixed counter control MSR is true. If
>-  CPUID.0AH: EAX[7:0] > 0.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_CTRL (0x0000038F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_CTRL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_CTRL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_CTRL);
>-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_CTRL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_CTRL is defined as
>IA32_PERF_GLOBAL_CTRL in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_CTRL                0x0000038F
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_CTRL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-///
>-  struct {
>-    ///
>-    /// [Bits 31:0] EN_PMCn. If CPUID.0AH: EAX[15:8] > n.
>-    /// Enable bitmask.  Only the first n-1 bits are valid.
>-    /// Bits n..31 are reserved.
>-    ///
>-    UINT32  EN_PMCn:32;
>-    ///
>-    /// [Bits 63:32] EN_FIXED_CTRn. If CPUID.0AH: EDX[4:0] > n.
>-    /// Enable bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 31:n are reserved.
>-    ///
>-    UINT32  EN_FIXED_CTRn:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_CTRL_REGISTER;
>-
>-
>-/**
>-  Global Performance Counter Overflow Control (R/W). If CPUID.0AH:
>EAX[7:0] >
>-  0 && CPUID.0AH: EAX[7:0] <= 3.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_OVF_CTRL (0x00000390)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL);
>-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_OVF_CTRL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_OVF_CTRL is defined as
>IA32_PERF_GLOBAL_OVF_CTRL in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_OVF_CTRL            0x00000390
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PERF_GLOBAL_OVF_CTRL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
>-    /// Clear bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 31:n are reserved.
>-    ///
>-    UINT32  Ovf_PMCn:32;
>-    ///
>-    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
>-    /// If CPUID.0AH: EDX[4:0] > n.
>-    /// Clear bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 22:n are reserved.
>-    ///
>-    UINT32  Ovf_FIXED_CTRn:23;
>-    ///
>-    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
>-    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1.
>-    ///
>-    UINT32  Trace_ToPA_PMI:1;
>-    UINT32  Reserved2:5;
>-    ///
>-    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
>-    /// Display Model 06_2EH.
>-    ///
>-    UINT32  Ovf_Uncore:1;
>-    ///
>-    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
>-    ///
>-    UINT32  OvfBuf:1;
>-    ///
>-    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
>-    ///
>-    UINT32  CondChgd:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_OVF_CTRL_REGISTER;
>-
>-
>-/**
>-  Global Performance Counter Overflow Reset Control (R/W). If CPUID.0AH:
>-  EAX[7:0] > 3.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_RESET (0x00000390)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET);
>-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_RESET, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_STATUS_RESET is defined as
>IA32_PERF_GLOBAL_STATUS_RESET in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_STATUS_RESET        0x00000390
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PERF_GLOBAL_STATUS_RESET
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Set 1 to Clear Ovf_PMC0 bit. If CPUID.0AH: EAX[15:8] > n.
>-    /// Clear bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 31:n are reserved.
>-    ///
>-    UINT32  Ovf_PMCn:32;
>-    ///
>-    /// [Bits 54:32] Set 1 to Clear Ovf_FIXED_CTR0 bit.
>-    /// If CPUID.0AH: EDX[4:0] > n.
>-    /// Clear bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 22:n are reserved.
>-    ///
>-    UINT32  Ovf_FIXED_CTRn:23;
>-    ///
>-    /// [Bit 55] Set 1 to Clear Trace_ToPA_PMI bit. If (CPUID.(EAX=07H,
>-    /// ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA[8] = 1.
>-    ///
>-    UINT32  Trace_ToPA_PMI:1;
>-    UINT32  Reserved2:2;
>-    ///
>-    /// [Bit 58] Set 1 to Clear LBR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  LBR_Frz:1;
>-    ///
>-    /// [Bit 59] Set 1 to Clear CTR_Frz bit. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  CTR_Frz:1;
>-    ///
>-    /// [Bit 60] Set 1 to Clear ASCI bit. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  ASCI:1;
>-    ///
>-    /// [Bit 61] Set 1 to Clear Ovf_Uncore bit. Introduced at Display Family /
>-    /// Display Model 06_2EH.
>-    ///
>-    UINT32  Ovf_Uncore:1;
>-    ///
>-    /// [Bit 62] Set 1 to Clear OvfBuf: bit. If CPUID.0AH: EAX[7:0] > 0.
>-    ///
>-    UINT32  OvfBuf:1;
>-    ///
>-    /// [Bit 63] Set to 1to clear CondChgd: bit. If CPUID.0AH: EAX[7:0] > 0.
>-    ///
>-    UINT32  CondChgd:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_STATUS_RESET_REGISTER;
>-
>-
>-/**
>-  Global Performance Counter Overflow Set Control (R/W). If CPUID.0AH:
>-  EAX[7:0] > 3.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_STATUS_SET (0x00000391)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET);
>-  AsmWriteMsr64 (MSR_IA32_PERF_GLOBAL_STATUS_SET, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_STATUS_SET is defined as
>IA32_PERF_GLOBAL_STATUS_SET in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_STATUS_SET          0x00000391
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_PERF_GLOBAL_STATUS_SET
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Set 1 to cause Ovf_PMCn = 1. If CPUID.0AH: EAX[7:0] > n.
>-    /// Set bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 31:n are reserved.
>-    ///
>-    UINT32  Ovf_PMCn:32;
>-    ///
>-    /// [Bits 54:32] Set 1 to cause Ovf_FIXED_CTRn = 1.
>-    /// If CPUID.0AH: EAX[7:0] > n.
>-    /// Set bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 22:n are reserved.
>-    ///
>-    UINT32  Ovf_FIXED_CTRn:23;
>-    ///
>-    /// [Bit 55] Set 1 to cause Trace_ToPA_PMI = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  Trace_ToPA_PMI:1;
>-    UINT32  Reserved2:2;
>-    ///
>-    /// [Bit 58] Set 1 to cause LBR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  LBR_Frz:1;
>-    ///
>-    /// [Bit 59] Set 1 to cause CTR_Frz = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  CTR_Frz:1;
>-    ///
>-    /// [Bit 60] Set 1 to cause ASCI = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  ASCI:1;
>-    ///
>-    /// [Bit 61] Set 1 to cause Ovf_Uncore = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  Ovf_Uncore:1;
>-    ///
>-    /// [Bit 62] Set 1 to cause OvfBuf = 1. If CPUID.0AH: EAX[7:0] > 3.
>-    ///
>-    UINT32  OvfBuf:1;
>-    UINT32  Reserved3:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_STATUS_SET_REGISTER;
>-
>-
>-/**
>-  Indicator of core perfmon interface is in use (RO). If CPUID.0AH: EAX[7:0] >
>-  3.
>-
>-  @param  ECX  MSR_IA32_PERF_GLOBAL_INUSE (0x00000392)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PERF_GLOBAL_INUSE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PERF_GLOBAL_INUSE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PERF_GLOBAL_INUSE);
>-  @endcode
>-  @note MSR_IA32_PERF_GLOBAL_INUSE is defined as
>IA32_PERF_GLOBAL_INUSE in SDM.
>-**/
>-#define MSR_IA32_PERF_GLOBAL_INUSE               0x00000392
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PERF_GLOBAL_INUSE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] IA32_PERFEVTSELn in use.  If CPUID.0AH: EAX[7:0] > n.
>-    /// Status bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 31:n are reserved.
>-    ///
>-    UINT32  IA32_PERFEVTSELn:32;
>-    ///
>-    /// [Bits 62:32] IA32_FIXED_CTRn in use.
>-    /// If CPUID.0AH: EAX[7:0] > n.
>-    /// Status bitmask.  Only the first n-1 bits are valid.
>-    /// Bits 30:n are reserved.
>-    ///
>-    UINT32  IA32_FIXED_CTRn:31;
>-    ///
>-    /// [Bit 63] PMI in use.
>-    ///
>-    UINT32  PMI:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PERF_GLOBAL_INUSE_REGISTER;
>-
>-
>-/**
>-  PEBS Control (R/W).
>-
>-  @param  ECX  MSR_IA32_PEBS_ENABLE (0x000003F1)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PEBS_ENABLE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PEBS_ENABLE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PEBS_ENABLE);
>-  AsmWriteMsr64 (MSR_IA32_PEBS_ENABLE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PEBS_ENABLE is defined as IA32_PEBS_ENABLE in SDM.
>-**/
>-#define MSR_IA32_PEBS_ENABLE                     0x000003F1
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PEBS_ENABLE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Enable PEBS on IA32_PMC0. Introduced at Display Family /
>-    /// Display Model 06_0FH.
>-    ///
>-    UINT32  Enable:1;
>-    ///
>-    /// [Bits 3:1] Reserved or Model specific.
>-    ///
>-    UINT32  Reserved1:3;
>-    UINT32  Reserved2:28;
>-    ///
>-    /// [Bits 35:32] Reserved or Model specific.
>-    ///
>-    UINT32  Reserved3:4;
>-    UINT32  Reserved4:28;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PEBS_ENABLE_REGISTER;
>-
>-
>-/**
>-  MCn_CTL. If IA32_MCG_CAP.CNT > n.
>-
>-  @param  ECX  MSR_IA32_MCn_CTL
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MC0_CTL);
>-  AsmWriteMsr64 (MSR_IA32_MC0_CTL, Msr);
>-  @endcode
>-  @note MSR_IA32_MC0_CTL  is defined as IA32_MC0_CTL  in SDM.
>-        MSR_IA32_MC1_CTL  is defined as IA32_MC1_CTL  in SDM.
>-        MSR_IA32_MC2_CTL  is defined as IA32_MC2_CTL  in SDM.
>-        MSR_IA32_MC3_CTL  is defined as IA32_MC3_CTL  in SDM.
>-        MSR_IA32_MC4_CTL  is defined as IA32_MC4_CTL  in SDM.
>-        MSR_IA32_MC5_CTL  is defined as IA32_MC5_CTL  in SDM.
>-        MSR_IA32_MC6_CTL  is defined as IA32_MC6_CTL  in SDM.
>-        MSR_IA32_MC7_CTL  is defined as IA32_MC7_CTL  in SDM.
>-        MSR_IA32_MC8_CTL  is defined as IA32_MC8_CTL  in SDM.
>-        MSR_IA32_MC9_CTL  is defined as IA32_MC9_CTL  in SDM.
>-        MSR_IA32_MC10_CTL is defined as IA32_MC10_CTL in SDM.
>-        MSR_IA32_MC11_CTL is defined as IA32_MC11_CTL in SDM.
>-        MSR_IA32_MC12_CTL is defined as IA32_MC12_CTL in SDM.
>-        MSR_IA32_MC13_CTL is defined as IA32_MC13_CTL in SDM.
>-        MSR_IA32_MC14_CTL is defined as IA32_MC14_CTL in SDM.
>-        MSR_IA32_MC15_CTL is defined as IA32_MC15_CTL in SDM.
>-        MSR_IA32_MC16_CTL is defined as IA32_MC16_CTL in SDM.
>-        MSR_IA32_MC17_CTL is defined as IA32_MC17_CTL in SDM.
>-        MSR_IA32_MC18_CTL is defined as IA32_MC18_CTL in SDM.
>-        MSR_IA32_MC19_CTL is defined as IA32_MC19_CTL in SDM.
>-        MSR_IA32_MC20_CTL is defined as IA32_MC20_CTL in SDM.
>-        MSR_IA32_MC21_CTL is defined as IA32_MC21_CTL in SDM.
>-        MSR_IA32_MC22_CTL is defined as IA32_MC22_CTL in SDM.
>-        MSR_IA32_MC23_CTL is defined as IA32_MC23_CTL in SDM.
>-        MSR_IA32_MC24_CTL is defined as IA32_MC24_CTL in SDM.
>-        MSR_IA32_MC25_CTL is defined as IA32_MC25_CTL in SDM.
>-        MSR_IA32_MC26_CTL is defined as IA32_MC26_CTL in SDM.
>-        MSR_IA32_MC27_CTL is defined as IA32_MC27_CTL in SDM.
>-        MSR_IA32_MC28_CTL is defined as IA32_MC28_CTL in SDM.
>-  @{
>-**/
>-#define MSR_IA32_MC0_CTL                         0x00000400
>-#define MSR_IA32_MC1_CTL                         0x00000404
>-#define MSR_IA32_MC2_CTL                         0x00000408
>-#define MSR_IA32_MC3_CTL                         0x0000040C
>-#define MSR_IA32_MC4_CTL                         0x00000410
>-#define MSR_IA32_MC5_CTL                         0x00000414
>-#define MSR_IA32_MC6_CTL                         0x00000418
>-#define MSR_IA32_MC7_CTL                         0x0000041C
>-#define MSR_IA32_MC8_CTL                         0x00000420
>-#define MSR_IA32_MC9_CTL                         0x00000424
>-#define MSR_IA32_MC10_CTL                        0x00000428
>-#define MSR_IA32_MC11_CTL                        0x0000042C
>-#define MSR_IA32_MC12_CTL                        0x00000430
>-#define MSR_IA32_MC13_CTL                        0x00000434
>-#define MSR_IA32_MC14_CTL                        0x00000438
>-#define MSR_IA32_MC15_CTL                        0x0000043C
>-#define MSR_IA32_MC16_CTL                        0x00000440
>-#define MSR_IA32_MC17_CTL                        0x00000444
>-#define MSR_IA32_MC18_CTL                        0x00000448
>-#define MSR_IA32_MC19_CTL                        0x0000044C
>-#define MSR_IA32_MC20_CTL                        0x00000450
>-#define MSR_IA32_MC21_CTL                        0x00000454
>-#define MSR_IA32_MC22_CTL                        0x00000458
>-#define MSR_IA32_MC23_CTL                        0x0000045C
>-#define MSR_IA32_MC24_CTL                        0x00000460
>-#define MSR_IA32_MC25_CTL                        0x00000464
>-#define MSR_IA32_MC26_CTL                        0x00000468
>-#define MSR_IA32_MC27_CTL                        0x0000046C
>-#define MSR_IA32_MC28_CTL                        0x00000470
>-/// @}
>-
>-
>-/**
>-  MCn_STATUS. If IA32_MCG_CAP.CNT > n.
>-
>-  @param  ECX  MSR_IA32_MCn_STATUS
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MC0_STATUS);
>-  AsmWriteMsr64 (MSR_IA32_MC0_STATUS, Msr);
>-  @endcode
>-  @note MSR_IA32_MC0_STATUS  is defined as IA32_MC0_STATUS  in SDM.
>-        MSR_IA32_MC1_STATUS  is defined as IA32_MC1_STATUS  in SDM.
>-        MSR_IA32_MC2_STATUS  is defined as IA32_MC2_STATUS  in SDM.
>-        MSR_IA32_MC3_STATUS  is defined as IA32_MC3_STATUS  in SDM.
>-        MSR_IA32_MC4_STATUS  is defined as IA32_MC4_STATUS  in SDM.
>-        MSR_IA32_MC5_STATUS  is defined as IA32_MC5_STATUS  in SDM.
>-        MSR_IA32_MC6_STATUS  is defined as IA32_MC6_STATUS  in SDM.
>-        MSR_IA32_MC7_STATUS  is defined as IA32_MC7_STATUS  in SDM.
>-        MSR_IA32_MC8_STATUS  is defined as IA32_MC8_STATUS  in SDM.
>-        MSR_IA32_MC9_STATUS  is defined as IA32_MC9_STATUS  in SDM.
>-        MSR_IA32_MC10_STATUS is defined as IA32_MC10_STATUS in SDM.
>-        MSR_IA32_MC11_STATUS is defined as IA32_MC11_STATUS in SDM.
>-        MSR_IA32_MC12_STATUS is defined as IA32_MC12_STATUS in SDM.
>-        MSR_IA32_MC13_STATUS is defined as IA32_MC13_STATUS in SDM.
>-        MSR_IA32_MC14_STATUS is defined as IA32_MC14_STATUS in SDM.
>-        MSR_IA32_MC15_STATUS is defined as IA32_MC15_STATUS in SDM.
>-        MSR_IA32_MC16_STATUS is defined as IA32_MC16_STATUS in SDM.
>-        MSR_IA32_MC17_STATUS is defined as IA32_MC17_STATUS in SDM.
>-        MSR_IA32_MC18_STATUS is defined as IA32_MC18_STATUS in SDM.
>-        MSR_IA32_MC19_STATUS is defined as IA32_MC19_STATUS in SDM.
>-        MSR_IA32_MC20_STATUS is defined as IA32_MC20_STATUS in SDM.
>-        MSR_IA32_MC21_STATUS is defined as IA32_MC21_STATUS in SDM.
>-        MSR_IA32_MC22_STATUS is defined as IA32_MC22_STATUS in SDM.
>-        MSR_IA32_MC23_STATUS is defined as IA32_MC23_STATUS in SDM.
>-        MSR_IA32_MC24_STATUS is defined as IA32_MC24_STATUS in SDM.
>-        MSR_IA32_MC25_STATUS is defined as IA32_MC25_STATUS in SDM.
>-        MSR_IA32_MC26_STATUS is defined as IA32_MC26_STATUS in SDM.
>-        MSR_IA32_MC27_STATUS is defined as IA32_MC27_STATUS in SDM.
>-        MSR_IA32_MC28_STATUS is defined as IA32_MC28_STATUS in SDM.
>-  @{
>-**/
>-#define MSR_IA32_MC0_STATUS                      0x00000401
>-#define MSR_IA32_MC1_STATUS                      0x00000405
>-#define MSR_IA32_MC2_STATUS                      0x00000409
>-#define MSR_IA32_MC3_STATUS                      0x0000040D
>-#define MSR_IA32_MC4_STATUS                      0x00000411
>-#define MSR_IA32_MC5_STATUS                      0x00000415
>-#define MSR_IA32_MC6_STATUS                      0x00000419
>-#define MSR_IA32_MC7_STATUS                      0x0000041D
>-#define MSR_IA32_MC8_STATUS                      0x00000421
>-#define MSR_IA32_MC9_STATUS                      0x00000425
>-#define MSR_IA32_MC10_STATUS                     0x00000429
>-#define MSR_IA32_MC11_STATUS                     0x0000042D
>-#define MSR_IA32_MC12_STATUS                     0x00000431
>-#define MSR_IA32_MC13_STATUS                     0x00000435
>-#define MSR_IA32_MC14_STATUS                     0x00000439
>-#define MSR_IA32_MC15_STATUS                     0x0000043D
>-#define MSR_IA32_MC16_STATUS                     0x00000441
>-#define MSR_IA32_MC17_STATUS                     0x00000445
>-#define MSR_IA32_MC18_STATUS                     0x00000449
>-#define MSR_IA32_MC19_STATUS                     0x0000044D
>-#define MSR_IA32_MC20_STATUS                     0x00000451
>-#define MSR_IA32_MC21_STATUS                     0x00000455
>-#define MSR_IA32_MC22_STATUS                     0x00000459
>-#define MSR_IA32_MC23_STATUS                     0x0000045D
>-#define MSR_IA32_MC24_STATUS                     0x00000461
>-#define MSR_IA32_MC25_STATUS                     0x00000465
>-#define MSR_IA32_MC26_STATUS                     0x00000469
>-#define MSR_IA32_MC27_STATUS                     0x0000046D
>-#define MSR_IA32_MC28_STATUS                     0x00000471
>-/// @}
>-
>-
>-/**
>-  MCn_ADDR. If IA32_MCG_CAP.CNT > n.
>-
>-  @param  ECX  MSR_IA32_MCn_ADDR
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MC0_ADDR);
>-  AsmWriteMsr64 (MSR_IA32_MC0_ADDR, Msr);
>-  @endcode
>-  @note MSR_IA32_MC0_ADDR  is defined as IA32_MC0_ADDR  in SDM.
>-        MSR_IA32_MC1_ADDR  is defined as IA32_MC1_ADDR  in SDM.
>-        MSR_IA32_MC2_ADDR  is defined as IA32_MC2_ADDR  in SDM.
>-        MSR_IA32_MC3_ADDR  is defined as IA32_MC3_ADDR  in SDM.
>-        MSR_IA32_MC4_ADDR  is defined as IA32_MC4_ADDR  in SDM.
>-        MSR_IA32_MC5_ADDR  is defined as IA32_MC5_ADDR  in SDM.
>-        MSR_IA32_MC6_ADDR  is defined as IA32_MC6_ADDR  in SDM.
>-        MSR_IA32_MC7_ADDR  is defined as IA32_MC7_ADDR  in SDM.
>-        MSR_IA32_MC8_ADDR  is defined as IA32_MC8_ADDR  in SDM.
>-        MSR_IA32_MC9_ADDR  is defined as IA32_MC9_ADDR  in SDM.
>-        MSR_IA32_MC10_ADDR is defined as IA32_MC10_ADDR in SDM.
>-        MSR_IA32_MC11_ADDR is defined as IA32_MC11_ADDR in SDM.
>-        MSR_IA32_MC12_ADDR is defined as IA32_MC12_ADDR in SDM.
>-        MSR_IA32_MC13_ADDR is defined as IA32_MC13_ADDR in SDM.
>-        MSR_IA32_MC14_ADDR is defined as IA32_MC14_ADDR in SDM.
>-        MSR_IA32_MC15_ADDR is defined as IA32_MC15_ADDR in SDM.
>-        MSR_IA32_MC16_ADDR is defined as IA32_MC16_ADDR in SDM.
>-        MSR_IA32_MC17_ADDR is defined as IA32_MC17_ADDR in SDM.
>-        MSR_IA32_MC18_ADDR is defined as IA32_MC18_ADDR in SDM.
>-        MSR_IA32_MC19_ADDR is defined as IA32_MC19_ADDR in SDM.
>-        MSR_IA32_MC20_ADDR is defined as IA32_MC20_ADDR in SDM.
>-        MSR_IA32_MC21_ADDR is defined as IA32_MC21_ADDR in SDM.
>-        MSR_IA32_MC22_ADDR is defined as IA32_MC22_ADDR in SDM.
>-        MSR_IA32_MC23_ADDR is defined as IA32_MC23_ADDR in SDM.
>-        MSR_IA32_MC24_ADDR is defined as IA32_MC24_ADDR in SDM.
>-        MSR_IA32_MC25_ADDR is defined as IA32_MC25_ADDR in SDM.
>-        MSR_IA32_MC26_ADDR is defined as IA32_MC26_ADDR in SDM.
>-        MSR_IA32_MC27_ADDR is defined as IA32_MC27_ADDR in SDM.
>-        MSR_IA32_MC28_ADDR is defined as IA32_MC28_ADDR in SDM.
>-  @{
>-**/
>-#define MSR_IA32_MC0_ADDR                        0x00000402
>-#define MSR_IA32_MC1_ADDR                        0x00000406
>-#define MSR_IA32_MC2_ADDR                        0x0000040A
>-#define MSR_IA32_MC3_ADDR                        0x0000040E
>-#define MSR_IA32_MC4_ADDR                        0x00000412
>-#define MSR_IA32_MC5_ADDR                        0x00000416
>-#define MSR_IA32_MC6_ADDR                        0x0000041A
>-#define MSR_IA32_MC7_ADDR                        0x0000041E
>-#define MSR_IA32_MC8_ADDR                        0x00000422
>-#define MSR_IA32_MC9_ADDR                        0x00000426
>-#define MSR_IA32_MC10_ADDR                       0x0000042A
>-#define MSR_IA32_MC11_ADDR                       0x0000042E
>-#define MSR_IA32_MC12_ADDR                       0x00000432
>-#define MSR_IA32_MC13_ADDR                       0x00000436
>-#define MSR_IA32_MC14_ADDR                       0x0000043A
>-#define MSR_IA32_MC15_ADDR                       0x0000043E
>-#define MSR_IA32_MC16_ADDR                       0x00000442
>-#define MSR_IA32_MC17_ADDR                       0x00000446
>-#define MSR_IA32_MC18_ADDR                       0x0000044A
>-#define MSR_IA32_MC19_ADDR                       0x0000044E
>-#define MSR_IA32_MC20_ADDR                       0x00000452
>-#define MSR_IA32_MC21_ADDR                       0x00000456
>-#define MSR_IA32_MC22_ADDR                       0x0000045A
>-#define MSR_IA32_MC23_ADDR                       0x0000045E
>-#define MSR_IA32_MC24_ADDR                       0x00000462
>-#define MSR_IA32_MC25_ADDR                       0x00000466
>-#define MSR_IA32_MC26_ADDR                       0x0000046A
>-#define MSR_IA32_MC27_ADDR                       0x0000046E
>-#define MSR_IA32_MC28_ADDR                       0x00000472
>-/// @}
>-
>-
>-/**
>-  MCn_MISC. If IA32_MCG_CAP.CNT > n.
>-
>-  @param  ECX  MSR_IA32_MCn_MISC
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_MC0_MISC);
>-  AsmWriteMsr64 (MSR_IA32_MC0_MISC, Msr);
>-  @endcode
>-  @note MSR_IA32_MC0_MISC  is defined as IA32_MC0_MISC  in SDM.
>-        MSR_IA32_MC1_MISC  is defined as IA32_MC1_MISC  in SDM.
>-        MSR_IA32_MC2_MISC  is defined as IA32_MC2_MISC  in SDM.
>-        MSR_IA32_MC3_MISC  is defined as IA32_MC3_MISC  in SDM.
>-        MSR_IA32_MC4_MISC  is defined as IA32_MC4_MISC  in SDM.
>-        MSR_IA32_MC5_MISC  is defined as IA32_MC5_MISC  in SDM.
>-        MSR_IA32_MC6_MISC  is defined as IA32_MC6_MISC  in SDM.
>-        MSR_IA32_MC7_MISC  is defined as IA32_MC7_MISC  in SDM.
>-        MSR_IA32_MC8_MISC  is defined as IA32_MC8_MISC  in SDM.
>-        MSR_IA32_MC9_MISC  is defined as IA32_MC9_MISC  in SDM.
>-        MSR_IA32_MC10_MISC is defined as IA32_MC10_MISC in SDM.
>-        MSR_IA32_MC11_MISC is defined as IA32_MC11_MISC in SDM.
>-        MSR_IA32_MC12_MISC is defined as IA32_MC12_MISC in SDM.
>-        MSR_IA32_MC13_MISC is defined as IA32_MC13_MISC in SDM.
>-        MSR_IA32_MC14_MISC is defined as IA32_MC14_MISC in SDM.
>-        MSR_IA32_MC15_MISC is defined as IA32_MC15_MISC in SDM.
>-        MSR_IA32_MC16_MISC is defined as IA32_MC16_MISC in SDM.
>-        MSR_IA32_MC17_MISC is defined as IA32_MC17_MISC in SDM.
>-        MSR_IA32_MC18_MISC is defined as IA32_MC18_MISC in SDM.
>-        MSR_IA32_MC19_MISC is defined as IA32_MC19_MISC in SDM.
>-        MSR_IA32_MC20_MISC is defined as IA32_MC20_MISC in SDM.
>-        MSR_IA32_MC21_MISC is defined as IA32_MC21_MISC in SDM.
>-        MSR_IA32_MC22_MISC is defined as IA32_MC22_MISC in SDM.
>-        MSR_IA32_MC23_MISC is defined as IA32_MC23_MISC in SDM.
>-        MSR_IA32_MC24_MISC is defined as IA32_MC24_MISC in SDM.
>-        MSR_IA32_MC25_MISC is defined as IA32_MC25_MISC in SDM.
>-        MSR_IA32_MC26_MISC is defined as IA32_MC26_MISC in SDM.
>-        MSR_IA32_MC27_MISC is defined as IA32_MC27_MISC in SDM.
>-        MSR_IA32_MC28_MISC is defined as IA32_MC28_MISC in SDM.
>-  @{
>-**/
>-#define MSR_IA32_MC0_MISC                        0x00000403
>-#define MSR_IA32_MC1_MISC                        0x00000407
>-#define MSR_IA32_MC2_MISC                        0x0000040B
>-#define MSR_IA32_MC3_MISC                        0x0000040F
>-#define MSR_IA32_MC4_MISC                        0x00000413
>-#define MSR_IA32_MC5_MISC                        0x00000417
>-#define MSR_IA32_MC6_MISC                        0x0000041B
>-#define MSR_IA32_MC7_MISC                        0x0000041F
>-#define MSR_IA32_MC8_MISC                        0x00000423
>-#define MSR_IA32_MC9_MISC                        0x00000427
>-#define MSR_IA32_MC10_MISC                       0x0000042B
>-#define MSR_IA32_MC11_MISC                       0x0000042F
>-#define MSR_IA32_MC12_MISC                       0x00000433
>-#define MSR_IA32_MC13_MISC                       0x00000437
>-#define MSR_IA32_MC14_MISC                       0x0000043B
>-#define MSR_IA32_MC15_MISC                       0x0000043F
>-#define MSR_IA32_MC16_MISC                       0x00000443
>-#define MSR_IA32_MC17_MISC                       0x00000447
>-#define MSR_IA32_MC18_MISC                       0x0000044B
>-#define MSR_IA32_MC19_MISC                       0x0000044F
>-#define MSR_IA32_MC20_MISC                       0x00000453
>-#define MSR_IA32_MC21_MISC                       0x00000457
>-#define MSR_IA32_MC22_MISC                       0x0000045B
>-#define MSR_IA32_MC23_MISC                       0x0000045F
>-#define MSR_IA32_MC24_MISC                       0x00000463
>-#define MSR_IA32_MC25_MISC                       0x00000467
>-#define MSR_IA32_MC26_MISC                       0x0000046B
>-#define MSR_IA32_MC27_MISC                       0x0000046F
>-#define MSR_IA32_MC28_MISC                       0x00000473
>-/// @}
>-
>-
>-/**
>-  Reporting Register of Basic VMX  Capabilities (R/O) See Appendix A.1, "Basic
>-  VMX Information.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_BASIC (0x00000480)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_VMX_BASIC_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_BASIC);
>-  @endcode
>-  @note MSR_IA32_VMX_BASIC is defined as IA32_VMX_BASIC in SDM.
>-**/
>-#define MSR_IA32_VMX_BASIC                       0x00000480
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_VMX_BASIC
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 30:0] VMCS revision identifier used by the processor.  Processors
>-    /// that use the same VMCS revision identifier use the same size for VMCS
>-    /// regions (see subsequent item on bits 44:32).
>-    ///
>-    /// @note Earlier versions of this manual specified that the VMCS revision
>-    /// identifier was a 32-bit field in bits 31:0 of this MSR. For all
>-    /// processors produced prior to this change, bit 31 of this MSR was read
>-    /// as 0.
>-    ///
>-    UINT32  VmcsRevisonId:31;
>-    UINT32  MustBeZero:1;
>-    ///
>-    /// [Bit 44:32] Reports the number of bytes that software should allocate
>-    /// for the VMXON region and any VMCS region.  It is a value greater than
>-    /// 0 and at most 4096(bit 44 is set if and only if bits 43:32 are clear).
>-    ///
>-    UINT32  VmcsSize:13;
>-    UINT32  Reserved1:3;
>-    ///
>-    /// [Bit 48] Indicates the width of the physical addresses that may be used
>-    /// for the VMXON region, each VMCS, and data structures referenced by
>-    /// pointers in a VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX
>-    /// transitions).  If the bit is 0, these addresses are limited to the
>-    /// processor's physical-address width.  If the bit is 1, these addresses
>-    /// are limited to 32 bits. This bit is always 0 for processors that
>-    /// support Intel 64 architecture.
>-    ///
>-    /// @note On processors that support Intel 64 architecture, the pointer
>-    /// must not set bits beyond the processor's physical address width.
>-    ///
>-    UINT32  VmcsAddressWidth:1;
>-    ///
>-    /// [Bit 49] If bit 49 is read as 1, the logical processor supports the
>-    /// dual-monitor treatment of system-management interrupts and
>-    /// system-management mode. See Section 34.15 for details of this
>treatment.
>-    ///
>-    UINT32  DualMonitor:1;
>-    ///
>-    /// [Bit 53:50] report the memory type that should be used for the VMCS,
>-    /// for data structures referenced by pointers in the VMCS (I/O bitmaps,
>-    /// virtual-APIC page, MSR areas for VMX transitions), and for the MSEG
>-    /// header. If software needs to access these data structures (e.g., to
>-    /// modify the contents of the MSR bitmaps), it can configure the paging
>-    /// structures to map them into the linear-address space. If it does so,
>-    /// it should establish mappings that use the memory type reported bits
>-    /// 53:50 in this MSR.
>-    ///
>-    /// As of this writing, all processors that support VMX operation indicate
>-    /// the write-back type.
>-    ///
>-    /// If software needs to access these data structures (e.g., to modify
>-    /// the contents of the MSR bitmaps), it can configure the paging
>-    /// structures to map them into the linear-address space. If it does so,
>-    /// it should establish mappings that use the memory type reported in this
>-    /// MSR.
>-    ///
>-    /// @note Alternatively, software may map any of these regions or
>-    /// structures with the UC memory type. (This may be necessary for the
>MSEG
>-    /// header.) Doing so is discouraged unless necessary as it will cause the
>-    /// performance of software accesses to those structures to suffer.
>-    ///
>-    ///
>-    UINT32  MemoryType:4;
>-    ///
>-    /// [Bit 54] If bit 54 is read as 1, the processor reports information in
>-    /// the VM-exit instruction-information field on VM exitsdue to execution
>-    /// of the INS and OUTS instructions (see Section 27.2.4). This reporting
>-    /// is done only if this bit is read as 1.
>-    ///
>-    UINT32  InsOutsReporting:1;
>-    ///
>-    /// [Bit 55] Bit 55 is read as 1 if any VMX controls that default to 1 may
>-    /// be cleared to 0. See Appendix A.2 for details. It also reports support
>-    /// for the VMX capability MSRs IA32_VMX_TRUE_PINBASED_CTLS,
>-    /// IA32_VMX_TRUE_PROCBASED_CTLS, IA32_VMX_TRUE_EXIT_CTLS, and
>-    /// IA32_VMX_TRUE_ENTRY_CTLS. See Appendix A.3.1, Appendix A.3.2,
>-    /// Appendix A.4, and Appendix A.5 for details.
>-    ///
>-    UINT32  VmxControls:1;
>-    UINT32  Reserved2:8;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_VMX_BASIC_REGISTER;
>-
>-///
>-/// @{ Define value for bit field
>MSR_IA32_VMX_BASIC_REGISTER.MemoryType
>-///
>-#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_UNCACHEABLE
>0x00
>-#define MSR_IA32_VMX_BASIC_REGISTER_MEMORY_TYPE_WRITE_BACK
>0x06
>-///
>-/// @}
>-///
>-
>-
>-/**
>-  Capability Reporting Register of Pinbased VM-execution Controls (R/O) See
>-  Appendix A.3.1, "Pin-Based VMExecution Controls.". If CPUID.01H:ECX.[5] =
>1.
>-
>-  @param  ECX  MSR_IA32_VMX_PINBASED_CTLS (0x00000481)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PINBASED_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_PINBASED_CTLS is defined as
>IA32_VMX_PINBASED_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_PINBASED_CTLS               0x00000481
>-
>-
>-/**
>-  Capability Reporting Register of Primary  Processor-based VM-execution
>-  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-
>Execution
>-  Controls.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS (0x00000482)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_PROCBASED_CTLS is defined as
>IA32_VMX_PROCBASED_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_PROCBASED_CTLS              0x00000482
>-
>-
>-/**
>-  Capability Reporting Register of VM-exit  Controls (R/O) See Appendix A.4,
>-  "VM-Exit Controls.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_EXIT_CTLS (0x00000483)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_EXIT_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_EXIT_CTLS is defined as IA32_VMX_EXIT_CTLS in
>SDM.
>-**/
>-#define MSR_IA32_VMX_EXIT_CTLS                   0x00000483
>-
>-
>-/**
>-  Capability Reporting Register of VMentry Controls (R/O) See Appendix A.5,
>-  "VM-Entry Controls.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_ENTRY_CTLS (0x00000484)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_ENTRY_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_ENTRY_CTLS is defined as IA32_VMX_ENTRY_CTLS
>in SDM.
>-**/
>-#define MSR_IA32_VMX_ENTRY_CTLS                  0x00000484
>-
>-
>-/**
>-  Reporting Register of Miscellaneous VMX Capabilities (R/O) See Appendix
>A.6,
>-  "Miscellaneous Data.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_MISC (0x00000485)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  IA32_VMX_MISC_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_VMX_MISC);
>-  @endcode
>-  @note MSR_IA32_VMX_MISC is defined as IA32_VMX_MISC in SDM.
>-**/
>-#define MSR_IA32_VMX_MISC                        0x00000485
>-
>-/**
>-  MSR information returned for MSR index #IA32_VMX_MISC
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 4:0] Reports a value X that specifies the relationship between the
>-    /// rate of the VMX-preemption timer and that of the timestamp counter
>(TSC).
>-    /// Specifically, the VMX-preemption timer (if it is active) counts down by
>-    /// 1 every time bit X in the TSC changes due to a TSC increment.
>-    ///
>-    UINT32  VmxTimerRatio:5;
>-    ///
>-    /// [Bit 5] If bit 5 is read as 1, VM exits store the value of IA32_EFER.LMA
>-    /// into the "IA-32e mode guest" VM-entry control;see Section 27.2 for
>more
>-    /// details. This bit is read as 1 on any logical processor that supports
>-    /// the 1-setting of the "unrestricted guest" VM-execution control.
>-    ///
>-    UINT32  VmExitEferLma:1;
>-    ///
>-    /// [Bit 6] reports (if set) the support for activity state 1 (HLT).
>-    ///
>-    UINT32  HltActivityStateSupported:1;
>-    ///
>-    /// [Bit 7] reports (if set) the support for activity state 2 (shutdown).
>-    ///
>-    UINT32  ShutdownActivityStateSupported:1;
>-    ///
>-    /// [Bit 8] reports (if set) the support for activity state 3 (wait-for-SIPI).
>-    ///
>-    UINT32  WaitForSipiActivityStateSupported:1;
>-    UINT32  Reserved1:5;
>-    ///
>-    /// [Bit 14] If read as 1, Intel(R) Processor Trace (Intel PT) can be used
>-    /// in VMX operation. If the processor supports Intel PT but does not allow
>-    /// it to be used in VMX operation, execution of VMXON clears
>-    /// IA32_RTIT_CTL.TraceEn (see "VMXON-Enter VMX Operation" in
>Chapter 30);
>-    /// any attempt to set that bit while in VMX operation (including VMX root
>-    /// operation) using the WRMSR instruction causes a general-protection
>-    /// exception.
>-    ///
>-    UINT32  ProcessorTraceSupported:1;
>-    ///
>-    /// [Bit 15] If read as 1, the RDMSR instruction can be used in system-
>-    /// management mode (SMM) to read the IA32_SMBASE MSR (MSR
>address 9EH).
>-    /// See Section 34.15.6.3.
>-    ///
>-    UINT32  SmBaseMsrSupported:1;
>-    ///
>-    /// [Bits 24:16] Indicate the number of CR3-target values supported by the
>-    /// processor. This number is a value between 0 and 256, inclusive (bit 24
>-    /// is set if and only if bits 23:16 are clear).
>-    ///
>-    UINT32  NumberOfCr3TargetValues:9;
>-    ///
>-    /// [Bit 27:25] Bits 27:25 is used to compute the recommended maximum
>-    /// number of MSRs that should appear in the VM-exit MSR-store list, the
>-    /// VM-exit MSR-load list, or the VM-entry MSR-load list. Specifically, if
>-    /// the value bits 27:25 of IA32_VMX_MISC is N, then 512 * (N + 1) is the
>-    /// recommended maximum number of MSRs to be included in each list. If
>the
>-    /// limit is exceeded, undefined processor behavior may result (including a
>-    /// machine check during the VMX transition).
>-    ///
>-    UINT32  MsrStoreListMaximum:3;
>-    ///
>-    /// [Bit 28] If read as 1, bit 2 of the IA32_SMM_MONITOR_CTL can be set
>-    /// to 1. VMXOFF unblocks SMIs unless IA32_SMM_MONITOR_CTL[bit 2] is
>1
>-    /// (see Section 34.14.4).
>-    ///
>-    UINT32  BlockSmiSupported:1;
>-    ///
>-    /// [Bit 29] read as 1, software can use VMWRITE to write to any supported
>-    /// field in the VMCS; otherwise, VMWRITE cannot be used to modify VM-
>exit
>-    /// information fields.
>-    ///
>-    UINT32  VmWriteSupported:1;
>-    ///
>-    /// [Bit 30] If read as 1, VM entry allows injection of a software
>-    /// interrupt, software exception, or privileged software exception with an
>-    /// instruction length of 0.
>-    ///
>-    UINT32  VmInjectSupported:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bits 63:32] Reports the 32-bit MSEG revision identifier used by the
>-    /// processor.
>-    ///
>-    UINT32  MsegRevisionIdentifier:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} IA32_VMX_MISC_REGISTER;
>-
>-
>-/**
>-  Capability Reporting Register of CR0 Bits Fixed to 0 (R/O) See Appendix A.7,
>-  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_CR0_FIXED0 (0x00000486)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED0);
>-  @endcode
>-  @note MSR_IA32_VMX_CR0_FIXED0 is defined as IA32_VMX_CR0_FIXED0
>in SDM.
>-**/
>-#define MSR_IA32_VMX_CR0_FIXED0                  0x00000486
>-
>-
>-/**
>-  Capability Reporting Register of CR0 Bits Fixed to 1 (R/O) See Appendix A.7,
>-  "VMX-Fixed Bits in CR0.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_CR0_FIXED1 (0x00000487)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR0_FIXED1);
>-  @endcode
>-  @note MSR_IA32_VMX_CR0_FIXED1 is defined as IA32_VMX_CR0_FIXED1
>in SDM.
>-**/
>-#define MSR_IA32_VMX_CR0_FIXED1                  0x00000487
>-
>-
>-/**
>-  Capability Reporting Register of CR4 Bits Fixed to 0 (R/O) See Appendix A.8,
>-  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_CR4_FIXED0 (0x00000488)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED0);
>-  @endcode
>-  @note MSR_IA32_VMX_CR4_FIXED0 is defined as IA32_VMX_CR4_FIXED0
>in SDM.
>-**/
>-#define MSR_IA32_VMX_CR4_FIXED0                  0x00000488
>-
>-
>-/**
>-  Capability Reporting Register of CR4 Bits Fixed to 1 (R/O) See Appendix A.8,
>-  "VMX-Fixed Bits in CR4.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_CR4_FIXED1 (0x00000489)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_CR4_FIXED1);
>-  @endcode
>-  @note MSR_IA32_VMX_CR4_FIXED1 is defined as IA32_VMX_CR4_FIXED1
>in SDM.
>-**/
>-#define MSR_IA32_VMX_CR4_FIXED1                  0x00000489
>-
>-
>-/**
>-  Capability Reporting Register of VMCS Field Enumeration (R/O) See
>Appendix
>-  A.9, "VMCS Enumeration.". If CPUID.01H:ECX.[5] = 1.
>-
>-  @param  ECX  MSR_IA32_VMX_VMCS_ENUM (0x0000048A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMCS_ENUM);
>-  @endcode
>-  @note MSR_IA32_VMX_VMCS_ENUM is defined as
>IA32_VMX_VMCS_ENUM in SDM.
>-**/
>-#define MSR_IA32_VMX_VMCS_ENUM                   0x0000048A
>-
>-
>-/**
>-  Capability Reporting Register of  Secondary Processor-based  VM-execution
>-  Controls (R/O) See Appendix A.3.3, "Secondary Processor- Based VM-
>Execution
>-  Controls.". If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_C TLS[63]).
>-
>-  @param  ECX  MSR_IA32_VMX_PROCBASED_CTLS2 (0x0000048B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_PROCBASED_CTLS2);
>-  @endcode
>-  @note MSR_IA32_VMX_PROCBASED_CTLS2 is defined as
>IA32_VMX_PROCBASED_CTLS2 in SDM.
>-**/
>-#define MSR_IA32_VMX_PROCBASED_CTLS2             0x0000048B
>-
>-
>-/**
>-  Capability Reporting Register of EPT and  VPID (R/O) See Appendix A.10,
>-  "VPID and EPT Capabilities.". If ( CPUID.01H:ECX.[5] &&
>IA32_VMX_PROCBASED_C
>-  TLS[63] && ( IA32_VMX_PROCBASED_C TLS2[33] IA32_VMX_PROCBASED_C
>TLS2[37]) ).
>-
>-  @param  ECX  MSR_IA32_VMX_EPT_VPID_CAP (0x0000048C)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_EPT_VPID_CAP);
>-  @endcode
>-  @note MSR_IA32_VMX_EPT_VPID_CAP is defined as
>IA32_VMX_EPT_VPID_CAP in SDM.
>-**/
>-#define MSR_IA32_VMX_EPT_VPID_CAP                0x0000048C
>-
>-
>-/**
>-  Capability Reporting Register of Pinbased VM-execution Flex Controls (R/O)
>-  See Appendix A.3.1, "Pin-Based VMExecution Controls.". If (
>-  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
>-
>-  @param  ECX  MSR_IA32_VMX_TRUE_PINBASED_CTLS (0x0000048D)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PINBASED_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_TRUE_PINBASED_CTLS is defined as
>IA32_VMX_TRUE_PINBASED_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_TRUE_PINBASED_CTLS          0x0000048D
>-
>-
>-/**
>-  Capability Reporting Register of Primary  Processor-based VM-execution
>Flex
>-  Controls (R/O) See Appendix A.3.2, "Primary Processor- Based VM-
>Execution
>-  Controls.". If( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
>-
>-  @param  ECX  MSR_IA32_VMX_TRUE_PROCBASED_CTLS (0x0000048E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_PROCBASED_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_TRUE_PROCBASED_CTLS is defined as
>IA32_VMX_TRUE_PROCBASED_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS         0x0000048E
>-
>-
>-/**
>-  Capability Reporting Register of VM-exit  Flex Controls (R/O) See Appendix
>-  A.4, "VM-Exit Controls.". If( CPUID.01H:ECX.[5] = 1 &&
>IA32_VMX_BASIC[55] ).
>-
>-  @param  ECX  MSR_IA32_VMX_TRUE_EXIT_CTLS (0x0000048F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_EXIT_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_TRUE_EXIT_CTLS is defined as
>IA32_VMX_TRUE_EXIT_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_TRUE_EXIT_CTLS              0x0000048F
>-
>-
>-/**
>-  Capability Reporting Register of VMentry Flex Controls (R/O) See Appendix
>-  A.5, "VM-Entry Controls.". If( CPUID.01H:ECX.[5] = 1 &&
>IA32_VMX_BASIC[55] ).
>-
>-  @param  ECX  MSR_IA32_VMX_TRUE_ENTRY_CTLS (0x00000490)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_TRUE_ENTRY_CTLS);
>-  @endcode
>-  @note MSR_IA32_VMX_TRUE_ENTRY_CTLS is defined as
>IA32_VMX_TRUE_ENTRY_CTLS in SDM.
>-**/
>-#define MSR_IA32_VMX_TRUE_ENTRY_CTLS             0x00000490
>-
>-
>-/**
>-  Capability Reporting Register of VMfunction Controls (R/O). If(
>-  CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ).
>-
>-  @param  ECX  MSR_IA32_VMX_VMFUNC (0x00000491)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_VMX_VMFUNC);
>-  @endcode
>-  @note MSR_IA32_VMX_VMFUNC is defined as IA32_VMX_VMFUNC in
>SDM.
>-**/
>-#define MSR_IA32_VMX_VMFUNC                      0x00000491
>-
>-
>-/**
>-  Full Width Writable IA32_PMCn Alias (R/W). (If CPUID.0AH: EAX[15:8] > n)
>&&
>-  IA32_PERF_CAPABILITIES[ 13] = 1.
>-
>-  @param  ECX  MSR_IA32_A_PMCn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_A_PMC0);
>-  AsmWriteMsr64 (MSR_IA32_A_PMC0, Msr);
>-  @endcode
>-  @note MSR_IA32_A_PMC0 is defined as IA32_A_PMC0 in SDM.
>-        MSR_IA32_A_PMC1 is defined as IA32_A_PMC1 in SDM.
>-        MSR_IA32_A_PMC2 is defined as IA32_A_PMC2 in SDM.
>-        MSR_IA32_A_PMC3 is defined as IA32_A_PMC3 in SDM.
>-        MSR_IA32_A_PMC4 is defined as IA32_A_PMC4 in SDM.
>-        MSR_IA32_A_PMC5 is defined as IA32_A_PMC5 in SDM.
>-        MSR_IA32_A_PMC6 is defined as IA32_A_PMC6 in SDM.
>-        MSR_IA32_A_PMC7 is defined as IA32_A_PMC7 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_A_PMC0                          0x000004C1
>-#define MSR_IA32_A_PMC1                          0x000004C2
>-#define MSR_IA32_A_PMC2                          0x000004C3
>-#define MSR_IA32_A_PMC3                          0x000004C4
>-#define MSR_IA32_A_PMC4                          0x000004C5
>-#define MSR_IA32_A_PMC5                          0x000004C6
>-#define MSR_IA32_A_PMC6                          0x000004C7
>-#define MSR_IA32_A_PMC7                          0x000004C8
>-/// @}
>-
>-
>-/**
>-  (R/W). If IA32_MCG_CAP.LMCE_P =1.
>-
>-  @param  ECX  MSR_IA32_MCG_EXT_CTL (0x000004D0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_MCG_EXT_CTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_MCG_EXT_CTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_MCG_EXT_CTL);
>-  AsmWriteMsr64 (MSR_IA32_MCG_EXT_CTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_MCG_EXT_CTL is defined as IA32_MCG_EXT_CTL in SDM.
>-**/
>-#define MSR_IA32_MCG_EXT_CTL                     0x000004D0
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_MCG_EXT_CTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] LMCE_EN.
>-    ///
>-    UINT32  LMCE_EN:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_MCG_EXT_CTL_REGISTER;
>-
>-
>-/**
>-  Status and SVN Threshold of SGX Support for ACM (RO). If CPUID.(EAX=07H,
>-  ECX=0H): EBX[2] = 1.
>-
>-  @param  ECX  MSR_IA32_SGX_SVN_STATUS (0x00000500)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_SGX_SVN_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_SGX_SVN_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_SGX_SVN_STATUS);
>-  @endcode
>-  @note MSR_IA32_SGX_SVN_STATUS is defined as IA32_SGX_SVN_STATUS
>in SDM.
>-**/
>-#define MSR_IA32_SGX_SVN_STATUS                  0x00000500
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_SGX_SVN_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Lock. See Section 41.11.3, "Interactions with Authenticated
>-    /// Code Modules (ACMs)".
>-    ///
>-    UINT32  Lock:1;
>-    UINT32  Reserved1:15;
>-    ///
>-    /// [Bits 23:16] SGX_SVN_SINIT. See Section 41.11.3, "Interactions with
>-    /// Authenticated Code Modules (ACMs)".
>-    ///
>-    UINT32  SGX_SVN_SINIT:8;
>-    UINT32  Reserved2:8;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_SGX_SVN_STATUS_REGISTER;
>-
>-
>-/**
>-  Trace Output Base Register (R/W). If ((CPUID.(EAX=07H, ECX=0):EBX[25] = 1)
>-  && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1) (CPUID.(EAX=14H,ECX=0): ECX[2]
>= 1)
>-  ) ).
>-
>-  @param  ECX  MSR_IA32_RTIT_OUTPUT_BASE (0x00000560)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_OUTPUT_BASE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_OUTPUT_BASE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_BASE);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_BASE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_OUTPUT_BASE is defined as
>IA32_RTIT_OUTPUT_BASE in SDM.
>-**/
>-#define MSR_IA32_RTIT_OUTPUT_BASE                0x00000560
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_RTIT_OUTPUT_BASE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved:7;
>-    ///
>-    /// [Bits 31:7] Base physical address.
>-    ///
>-    UINT32  Base:25;
>-    ///
>-    /// [Bits 63:32] Base physical address.
>-    ///
>-    UINT32  BaseHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_OUTPUT_BASE_REGISTER;
>-
>-
>-/**
>-  Trace Output Mask Pointers Register (R/W). If ((CPUID.(EAX=07H,
>-  ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1)
>-  (CPUID.(EAX=14H,ECX=0): ECX[2] = 1) ) ).
>-
>-  @param  ECX  MSR_IA32_RTIT_OUTPUT_MASK_PTRS (0x00000561)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type
>MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_OUTPUT_MASK_PTRS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_OUTPUT_MASK_PTRS is defined as
>IA32_RTIT_OUTPUT_MASK_PTRS in SDM.
>-**/
>-#define MSR_IA32_RTIT_OUTPUT_MASK_PTRS           0x00000561
>-
>-/**
>-  MSR information returned for MSR index
>#MSR_IA32_RTIT_OUTPUT_MASK_PTRS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved:7;
>-    ///
>-    /// [Bits 31:7] MaskOrTableOffset.
>-    ///
>-    UINT32  MaskOrTableOffset:25;
>-    ///
>-    /// [Bits 63:32] Output Offset.
>-    ///
>-    UINT32  OutputOffset:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_OUTPUT_MASK_PTRS_REGISTER;
>-
>-/**
>-  Format of ToPA table entries.
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] END. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  END:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 2] INT. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  INT:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bit 4] STOP. See Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  STOP:1;
>-    UINT32  Reserved3:1;
>-    ///
>-    /// [Bit 6:9] Indicates the size of the associated output region. See Section
>-    /// 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  Size:4;
>-    UINT32  Reserved4:2;
>-    ///
>-    /// [Bit 12:31] Output Region Base Physical Address low part.
>-    /// [Bit 12:31] Output Region Base Physical Address [12:63] value to match.
>-    /// ATTENTION: The size of the address field is determined by the
>processor's
>-    /// physical-address width (MAXPHYADDR) in bits, as reported in
>-    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
>-    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is
>reserved part.
>-    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  Base:20;
>-    ///
>-    /// [Bit 32:63] Output Region Base Physical Address high part.
>-    /// [Bit 32:63] Output Region Base Physical Address [12:63] value to match.
>-    /// ATTENTION: The size of the address field is determined by the
>processor's
>-    /// physical-address width (MAXPHYADDR) in bits, as reported in
>-    /// CPUID.80000008H:EAX[7:0]. the above part of address reserved.
>-    /// True address field is [12:MAXPHYADDR-1], [MAXPHYADDR:63] is
>reserved part.
>-    /// Detail see Section 35.2.6.2, "Table of Physical Addresses (ToPA)".
>-    ///
>-    UINT32  BaseHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} RTIT_TOPA_TABLE_ENTRY;
>-
>-///
>-/// The size of the associated output region usd by Topa.
>-///
>-typedef enum {
>-  RtitTopaMemorySize4K = 0,
>-  RtitTopaMemorySize8K,
>-  RtitTopaMemorySize16K,
>-  RtitTopaMemorySize32K,
>-  RtitTopaMemorySize64K,
>-  RtitTopaMemorySize128K,
>-  RtitTopaMemorySize256K,
>-  RtitTopaMemorySize512K,
>-  RtitTopaMemorySize1M,
>-  RtitTopaMemorySize2M,
>-  RtitTopaMemorySize4M,
>-  RtitTopaMemorySize8M,
>-  RtitTopaMemorySize16M,
>-  RtitTopaMemorySize32M,
>-  RtitTopaMemorySize64M,
>-  RtitTopaMemorySize128M
>-} RTIT_TOPA_MEMORY_SIZE;
>-
>-/**
>-  Trace Control Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
>-
>-  @param  ECX  MSR_IA32_RTIT_CTL (0x00000570)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_CTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_CTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CTL);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_CTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_CTL is defined as IA32_RTIT_CTL in SDM.
>-**/
>-#define MSR_IA32_RTIT_CTL                        0x00000570
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_RTIT_CTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] TraceEn.
>-    ///
>-    UINT32  TraceEn:1;
>-    ///
>-    /// [Bit 1] CYCEn. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
>-    ///
>-    UINT32  CYCEn:1;
>-    ///
>-    /// [Bit 2] OS.
>-    ///
>-    UINT32  OS:1;
>-    ///
>-    /// [Bit 3] User.
>-    ///
>-    UINT32  User:1;
>-    ///
>-    /// [Bit 4] PwrEvtEn.
>-    ///
>-    UINT32  PwrEvtEn:1;
>-    ///
>-    /// [Bit 5] FUPonPTW.
>-    ///
>-    UINT32  FUPonPTW:1;
>-    ///
>-    /// [Bit 6] FabricEn. If (CPUID.(EAX=07H, ECX=0):ECX[3] = 1).
>-    ///
>-    UINT32  FabricEn:1;
>-    ///
>-    /// [Bit 7] CR3 filter.
>-    ///
>-    UINT32  CR3:1;
>-    ///
>-    /// [Bit 8] ToPA.
>-    ///
>-    UINT32  ToPA:1;
>-    ///
>-    /// [Bit 9] MTCEn. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
>-    ///
>-    UINT32  MTCEn:1;
>-    ///
>-    /// [Bit 10] TSCEn.
>-    ///
>-    UINT32  TSCEn:1;
>-    ///
>-    /// [Bit 11] DisRETC.
>-    ///
>-    UINT32  DisRETC:1;
>-    ///
>-    /// [Bit 12] PTWEn.
>-    ///
>-    UINT32  PTWEn:1;
>-    ///
>-    /// [Bit 13] BranchEn.
>-    ///
>-    UINT32  BranchEn:1;
>-    ///
>-    /// [Bits 17:14] MTCFreq. If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1).
>-    ///
>-    UINT32  MTCFreq:4;
>-    UINT32  Reserved3:1;
>-    ///
>-    /// [Bits 22:19] CYCThresh. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
>-    ///
>-    UINT32  CYCThresh:4;
>-    UINT32  Reserved4:1;
>-    ///
>-    /// [Bits 27:24] PSBFreq. If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1).
>-    ///
>-    UINT32  PSBFreq:4;
>-    UINT32  Reserved5:4;
>-    ///
>-    /// [Bits 35:32] ADDR0_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 0).
>-    ///
>-    UINT32  ADDR0_CFG:4;
>-    ///
>-    /// [Bits 39:36] ADDR1_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 1).
>-    ///
>-    UINT32  ADDR1_CFG:4;
>-    ///
>-    /// [Bits 43:40] ADDR2_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 2).
>-    ///
>-    UINT32  ADDR2_CFG:4;
>-    ///
>-    /// [Bits 47:44] ADDR3_CFG. If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 3).
>-    ///
>-    UINT32  ADDR3_CFG:4;
>-    UINT32  Reserved6:16;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_CTL_REGISTER;
>-
>-
>-/**
>-  Tracing Status Register (R/W). If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
>-
>-  @param  ECX  MSR_IA32_RTIT_STATUS (0x00000571)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_STATUS);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_STATUS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_STATUS is defined as IA32_RTIT_STATUS in SDM.
>-**/
>-#define MSR_IA32_RTIT_STATUS                     0x00000571
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_RTIT_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] FilterEn, (writes ignored).
>-    /// If (CPUID.(EAX=07H, ECX=0):EBX[2] = 1).
>-    ///
>-    UINT32  FilterEn:1;
>-    ///
>-    /// [Bit 1] ContexEn, (writes ignored).
>-    ///
>-    UINT32  ContexEn:1;
>-    ///
>-    /// [Bit 2] TriggerEn, (writes ignored).
>-    ///
>-    UINT32  TriggerEn:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 4] Error.
>-    ///
>-    UINT32  Error:1;
>-    ///
>-    /// [Bit 5] Stopped.
>-    ///
>-    UINT32  Stopped:1;
>-    UINT32  Reserved2:26;
>-    ///
>-    /// [Bits 48:32] PacketByteCnt. If (CPUID.(EAX=07H, ECX=0):EBX[1] > 3).
>-    ///
>-    UINT32  PacketByteCnt:17;
>-    UINT32  Reserved3:15;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_STATUS_REGISTER;
>-
>-
>-/**
>-  Trace Filter CR3 Match Register (R/W).
>-  If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1).
>-
>-  @param  ECX  MSR_IA32_RTIT_CR3_MATCH (0x00000572)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_CR3_MATCH_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_CR3_MATCH_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_CR3_MATCH);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_CR3_MATCH, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_CR3_MATCH is defined as IA32_RTIT_CR3_MATCH
>in SDM.
>-**/
>-#define MSR_IA32_RTIT_CR3_MATCH                  0x00000572
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_RTIT_CR3_MATCH
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved:5;
>-    ///
>-    /// [Bits 31:5] CR3[63:5] value to match.
>-    ///
>-    UINT32  Cr3:27;
>-    ///
>-    /// [Bits 63:32] CR3[63:5] value to match.
>-    ///
>-    UINT32  Cr3Hi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_CR3_MATCH_REGISTER;
>-
>-
>-/**
>-  Region n Start Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
>-
>-  @param  ECX  MSR_IA32_RTIT_ADDRn_A
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_A);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_A, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_ADDR0_A is defined as IA32_RTIT_ADDR0_A in SDM.
>-        MSR_IA32_RTIT_ADDR1_A is defined as IA32_RTIT_ADDR1_A in SDM.
>-        MSR_IA32_RTIT_ADDR2_A is defined as IA32_RTIT_ADDR2_A in SDM.
>-        MSR_IA32_RTIT_ADDR3_A is defined as IA32_RTIT_ADDR3_A in SDM.
>-  @{
>-**/
>-#define MSR_IA32_RTIT_ADDR0_A                    0x00000580
>-#define MSR_IA32_RTIT_ADDR1_A                    0x00000582
>-#define MSR_IA32_RTIT_ADDR2_A                    0x00000584
>-#define MSR_IA32_RTIT_ADDR3_A                    0x00000586
>-/// @}
>-
>-
>-/**
>-  Region n End Address (R/W). If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n).
>-
>-  @param  ECX  MSR_IA32_RTIT_ADDRn_B
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_RTIT_ADDR_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_RTIT_ADDR_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_RTIT_ADDR0_B);
>-  AsmWriteMsr64 (MSR_IA32_RTIT_ADDR0_B, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_RTIT_ADDR0_B is defined as IA32_RTIT_ADDR0_B in SDM.
>-        MSR_IA32_RTIT_ADDR1_B is defined as IA32_RTIT_ADDR1_B in SDM.
>-        MSR_IA32_RTIT_ADDR2_B is defined as IA32_RTIT_ADDR2_B in SDM.
>-        MSR_IA32_RTIT_ADDR3_B is defined as IA32_RTIT_ADDR3_B in SDM.
>-  @{
>-**/
>-#define MSR_IA32_RTIT_ADDR0_B                    0x00000581
>-#define MSR_IA32_RTIT_ADDR1_B                    0x00000583
>-#define MSR_IA32_RTIT_ADDR2_B                    0x00000585
>-#define MSR_IA32_RTIT_ADDR3_B                    0x00000587
>-/// @}
>-
>-
>-/**
>-  MSR information returned for MSR indexes
>-  #MSR_IA32_RTIT_ADDR0_A to #MSR_IA32_RTIT_ADDR3_A and
>-  #MSR_IA32_RTIT_ADDR0_B to #MSR_IA32_RTIT_ADDR3_B
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Virtual Address.
>-    ///
>-    UINT32  VirtualAddress:32;
>-    ///
>-    /// [Bits 47:32] Virtual Address.
>-    ///
>-    UINT32  VirtualAddressHi:16;
>-    ///
>-    /// [Bits 63:48] SignExt_VA.
>-    ///
>-    UINT32  SignExt_VA:16;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_RTIT_ADDR_REGISTER;
>-
>-
>-/**
>-  DS Save Area (R/W) Points to the linear address of the first byte of the DS
>-  buffer management area, which is used to manage the BTS and PEBS
>buffers.
>-  See Section 18.6.3.4, "Debug Store (DS) Mechanism.". If(
>-  CPUID.01H:EDX.DS[21] = 1. The linear address of the first byte of the DS
>-  buffer management area, if IA-32e mode is active.
>-
>-  @param  ECX  MSR_IA32_DS_AREA (0x00000600)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_DS_AREA_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_DS_AREA_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_DS_AREA);
>-  AsmWriteMsr64 (MSR_IA32_DS_AREA, Msr);
>-  @endcode
>-  @note MSR_IA32_DS_AREA is defined as IA32_DS_AREA in SDM.
>-**/
>-#define MSR_IA32_DS_AREA                         0x00000600
>-
>-
>-/**
>-  TSC Target of Local APIC's TSC Deadline Mode (R/W). If CPUID.01H:ECX.[24]
>=
>-  1.
>-
>-  @param  ECX  MSR_IA32_TSC_DEADLINE (0x000006E0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_TSC_DEADLINE);
>-  AsmWriteMsr64 (MSR_IA32_TSC_DEADLINE, Msr);
>-  @endcode
>-  @note MSR_IA32_TSC_DEADLINE is defined as IA32_TSC_DEADLINE in SDM.
>-**/
>-#define MSR_IA32_TSC_DEADLINE                    0x000006E0
>-
>-
>-/**
>-  Enable/disable HWP (R/W). If CPUID.06H:EAX.[7] = 1.
>-
>-  @param  ECX  MSR_IA32_PM_ENABLE (0x00000770)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PM_ENABLE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PM_ENABLE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_ENABLE);
>-  AsmWriteMsr64 (MSR_IA32_PM_ENABLE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PM_ENABLE is defined as IA32_PM_ENABLE in SDM.
>-**/
>-#define MSR_IA32_PM_ENABLE                       0x00000770
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PM_ENABLE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] HWP_ENABLE (R/W1-Once). See Section 14.4.2, "Enabling HWP".
>If
>-    /// CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  HWP_ENABLE:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PM_ENABLE_REGISTER;
>-
>-
>-/**
>-  HWP Performance Range Enumeration (RO). If CPUID.06H:EAX.[7] = 1.
>-
>-  @param  ECX  MSR_IA32_HWP_CAPABILITIES (0x00000771)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_CAPABILITIES_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_HWP_CAPABILITIES_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_CAPABILITIES);
>-  @endcode
>-  @note MSR_IA32_HWP_CAPABILITIES is defined as
>IA32_HWP_CAPABILITIES in SDM.
>-**/
>-#define MSR_IA32_HWP_CAPABILITIES                0x00000771
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_HWP_CAPABILITIES
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Highest_Performance See Section 14.4.3, "HWP Performance
>-    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Highest_Performance:8;
>-    ///
>-    /// [Bits 15:8] Guaranteed_Performance See Section 14.4.3, "HWP
>-    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Guaranteed_Performance:8;
>-    ///
>-    /// [Bits 23:16] Most_Efficient_Performance See Section 14.4.3, "HWP
>-    /// Performance Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Most_Efficient_Performance:8;
>-    ///
>-    /// [Bits 31:24] Lowest_Performance See Section 14.4.3, "HWP
>Performance
>-    /// Range and Dynamic Capabilities". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Lowest_Performance:8;
>-    UINT32  Reserved:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_HWP_CAPABILITIES_REGISTER;
>-
>-
>-/**
>-  Power Management Control Hints for All Logical Processors in a Package
>-  (R/W). If CPUID.06H:EAX.[11] = 1.
>-
>-  @param  ECX  MSR_IA32_HWP_REQUEST_PKG (0x00000772)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_REQUEST_PKG_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_HWP_REQUEST_PKG_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST_PKG);
>-  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST_PKG, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_HWP_REQUEST_PKG is defined as
>IA32_HWP_REQUEST_PKG in SDM.
>-**/
>-#define MSR_IA32_HWP_REQUEST_PKG                 0x00000772
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_HWP_REQUEST_PKG
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP".
>If
>-    /// CPUID.06H:EAX.[11] = 1.
>-    ///
>-    UINT32  Minimum_Performance:8;
>-    ///
>-    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP".
>If
>-    /// CPUID.06H:EAX.[11] = 1.
>-    ///
>-    UINT32  Maximum_Performance:8;
>-    ///
>-    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
>-    /// If CPUID.06H:EAX.[11] = 1.
>-    ///
>-    UINT32  Desired_Performance:8;
>-    ///
>-    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
>-    /// "Managing HWP". If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[10] = 1.
>-    ///
>-    UINT32  Energy_Performance_Preference:8;
>-    ///
>-    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
>-    /// CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[9] = 1.
>-    ///
>-    UINT32  Activity_Window:10;
>-    UINT32  Reserved:22;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_HWP_REQUEST_PKG_REGISTER;
>-
>-
>-/**
>-  Control HWP Native Interrupts (R/W). If CPUID.06H:EAX.[8] = 1.
>-
>-  @param  ECX  MSR_IA32_HWP_INTERRUPT (0x00000773)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_INTERRUPT_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_HWP_INTERRUPT_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_INTERRUPT);
>-  AsmWriteMsr64 (MSR_IA32_HWP_INTERRUPT, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_HWP_INTERRUPT is defined as IA32_HWP_INTERRUPT in
>SDM.
>-**/
>-#define MSR_IA32_HWP_INTERRUPT                   0x00000773
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_HWP_INTERRUPT
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] EN_Guaranteed_Performance_Change. See Section 14.4.6,
>"HWP
>-    /// Notifications". If CPUID.06H:EAX.[8] = 1.
>-    ///
>-    UINT32  EN_Guaranteed_Performance_Change:1;
>-    ///
>-    /// [Bit 1] EN_Excursion_Minimum. See Section 14.4.6, "HWP Notifications".
>-    /// If CPUID.06H:EAX.[8] = 1.
>-    ///
>-    UINT32  EN_Excursion_Minimum:1;
>-    UINT32  Reserved1:30;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_HWP_INTERRUPT_REGISTER;
>-
>-
>-/**
>-  Power Management Control Hints to a Logical Processor (R/W). If
>-  CPUID.06H:EAX.[7] = 1.
>-
>-  @param  ECX  MSR_IA32_HWP_REQUEST (0x00000774)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_REQUEST_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_HWP_REQUEST_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_REQUEST);
>-  AsmWriteMsr64 (MSR_IA32_HWP_REQUEST, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_HWP_REQUEST is defined as IA32_HWP_REQUEST in
>SDM.
>-**/
>-#define MSR_IA32_HWP_REQUEST                     0x00000774
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_HWP_REQUEST
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Minimum_Performance See Section 14.4.4, "Managing HWP".
>If
>-    /// CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Minimum_Performance:8;
>-    ///
>-    /// [Bits 15:8] Maximum_Performance See Section 14.4.4, "Managing HWP".
>If
>-    /// CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Maximum_Performance:8;
>-    ///
>-    /// [Bits 23:16] Desired_Performance See Section 14.4.4, "Managing HWP".
>-    /// If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Desired_Performance:8;
>-    ///
>-    /// [Bits 31:24] Energy_Performance_Preference See Section 14.4.4,
>-    /// "Managing HWP". If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[10] = 1.
>-    ///
>-    UINT32  Energy_Performance_Preference:8;
>-    ///
>-    /// [Bits 41:32] Activity_Window See Section 14.4.4, "Managing HWP". If
>-    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[9] = 1.
>-    ///
>-    UINT32  Activity_Window:10;
>-    ///
>-    /// [Bit 42] Package_Control See Section 14.4.4, "Managing HWP". If
>-    /// CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[11] = 1.
>-    ///
>-    UINT32  Package_Control:1;
>-    UINT32  Reserved:21;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_HWP_REQUEST_REGISTER;
>-
>-
>-/**
>-  Log bits indicating changes to  Guaranteed & excursions to Minimum (R/W).
>If
>-  CPUID.06H:EAX.[7] = 1.
>-
>-  @param  ECX  MSR_IA32_HWP_STATUS (0x00000777)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_HWP_STATUS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_HWP_STATUS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_HWP_STATUS);
>-  AsmWriteMsr64 (MSR_IA32_HWP_STATUS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_HWP_STATUS is defined as IA32_HWP_STATUS in SDM.
>-**/
>-#define MSR_IA32_HWP_STATUS                      0x00000777
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_HWP_STATUS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Guaranteed_Performance_Change (R/WC0). See Section 14.4.5,
>-    /// "HWP Feedback". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Guaranteed_Performance_Change:1;
>-    UINT32  Reserved1:1;
>-    ///
>-    /// [Bit 2] Excursion_To_Minimum (R/WC0). See Section 14.4.5, "HWP
>-    /// Feedback". If CPUID.06H:EAX.[7] = 1.
>-    ///
>-    UINT32  Excursion_To_Minimum:1;
>-    UINT32  Reserved2:29;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_HWP_STATUS_REGISTER;
>-
>-
>-/**
>-  x2APIC ID Register (R/O) See x2APIC Specification. If CPUID.01H:ECX[21] = 1
>-  && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_APICID (0x00000802)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_APICID);
>-  @endcode
>-  @note MSR_IA32_X2APIC_APICID is defined as IA32_X2APIC_APICID in
>SDM.
>-**/
>-#define MSR_IA32_X2APIC_APICID                   0x00000802
>-
>-
>-/**
>-  x2APIC Version Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_VERSION (0x00000803)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_VERSION);
>-  @endcode
>-  @note MSR_IA32_X2APIC_VERSION is defined as IA32_X2APIC_VERSION in
>SDM.
>-**/
>-#define MSR_IA32_X2APIC_VERSION                  0x00000803
>-
>-
>-/**
>-  x2APIC Task Priority Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_TPR (0x00000808)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TPR);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_TPR, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_TPR is defined as IA32_X2APIC_TPR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_TPR                      0x00000808
>-
>-
>-/**
>-  x2APIC Processor Priority Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_PPR (0x0000080A)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_PPR);
>-  @endcode
>-  @note MSR_IA32_X2APIC_PPR is defined as IA32_X2APIC_PPR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_PPR                      0x0000080A
>-
>-
>-/**
>-  x2APIC EOI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
>IA32_APIC_BASE.[10]
>-  = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_EOI (0x0000080B)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = 0;
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_EOI, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_EOI is defined as IA32_X2APIC_EOI in SDM.
>-**/
>-#define MSR_IA32_X2APIC_EOI                      0x0000080B
>-
>-
>-/**
>-  x2APIC Logical Destination Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LDR (0x0000080D)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LDR);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LDR is defined as IA32_X2APIC_LDR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LDR                      0x0000080D
>-
>-
>-/**
>-  x2APIC Spurious Interrupt Vector Register (R/W). If CPUID.01H:ECX.[21] = 1
>-  && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_SIVR (0x0000080F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_SIVR);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_SIVR, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_SIVR is defined as IA32_X2APIC_SIVR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_SIVR                     0x0000080F
>-
>-
>-/**
>-  x2APIC In-Service Register Bits (n * 32 + 31):(n * 32) (R/O).
>-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_ISRn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ISR0);
>-  @endcode
>-  @note MSR_IA32_X2APIC_ISR0 is defined as IA32_X2APIC_ISR0 in SDM.
>-        MSR_IA32_X2APIC_ISR1 is defined as IA32_X2APIC_ISR1 in SDM.
>-        MSR_IA32_X2APIC_ISR2 is defined as IA32_X2APIC_ISR2 in SDM.
>-        MSR_IA32_X2APIC_ISR3 is defined as IA32_X2APIC_ISR3 in SDM.
>-        MSR_IA32_X2APIC_ISR4 is defined as IA32_X2APIC_ISR4 in SDM.
>-        MSR_IA32_X2APIC_ISR5 is defined as IA32_X2APIC_ISR5 in SDM.
>-        MSR_IA32_X2APIC_ISR6 is defined as IA32_X2APIC_ISR6 in SDM.
>-        MSR_IA32_X2APIC_ISR7 is defined as IA32_X2APIC_ISR7 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_X2APIC_ISR0                     0x00000810
>-#define MSR_IA32_X2APIC_ISR1                     0x00000811
>-#define MSR_IA32_X2APIC_ISR2                     0x00000812
>-#define MSR_IA32_X2APIC_ISR3                     0x00000813
>-#define MSR_IA32_X2APIC_ISR4                     0x00000814
>-#define MSR_IA32_X2APIC_ISR5                     0x00000815
>-#define MSR_IA32_X2APIC_ISR6                     0x00000816
>-#define MSR_IA32_X2APIC_ISR7                     0x00000817
>-/// @}
>-
>-
>-/**
>-  x2APIC Trigger Mode Register Bits (n * 32 + ):(n * 32) (R/O).
>-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_TMRn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_TMR0);
>-  @endcode
>-  @note MSR_IA32_X2APIC_TMR0 is defined as IA32_X2APIC_TMR0 in SDM.
>-        MSR_IA32_X2APIC_TMR1 is defined as IA32_X2APIC_TMR1 in SDM.
>-        MSR_IA32_X2APIC_TMR2 is defined as IA32_X2APIC_TMR2 in SDM.
>-        MSR_IA32_X2APIC_TMR3 is defined as IA32_X2APIC_TMR3 in SDM.
>-        MSR_IA32_X2APIC_TMR4 is defined as IA32_X2APIC_TMR4 in SDM.
>-        MSR_IA32_X2APIC_TMR5 is defined as IA32_X2APIC_TMR5 in SDM.
>-        MSR_IA32_X2APIC_TMR6 is defined as IA32_X2APIC_TMR6 in SDM.
>-        MSR_IA32_X2APIC_TMR7 is defined as IA32_X2APIC_TMR7 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_X2APIC_TMR0                     0x00000818
>-#define MSR_IA32_X2APIC_TMR1                     0x00000819
>-#define MSR_IA32_X2APIC_TMR2                     0x0000081A
>-#define MSR_IA32_X2APIC_TMR3                     0x0000081B
>-#define MSR_IA32_X2APIC_TMR4                     0x0000081C
>-#define MSR_IA32_X2APIC_TMR5                     0x0000081D
>-#define MSR_IA32_X2APIC_TMR6                     0x0000081E
>-#define MSR_IA32_X2APIC_TMR7                     0x0000081F
>-/// @}
>-
>-
>-/**
>-  x2APIC Interrupt Request Register Bits (n* 32 + 31):(n * 32) (R/O).
>-  If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_IRRn
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_IRR0);
>-  @endcode
>-  @note MSR_IA32_X2APIC_IRR0 is defined as IA32_X2APIC_IRR0 in SDM.
>-        MSR_IA32_X2APIC_IRR1 is defined as IA32_X2APIC_IRR1 in SDM.
>-        MSR_IA32_X2APIC_IRR2 is defined as IA32_X2APIC_IRR2 in SDM.
>-        MSR_IA32_X2APIC_IRR3 is defined as IA32_X2APIC_IRR3 in SDM.
>-        MSR_IA32_X2APIC_IRR4 is defined as IA32_X2APIC_IRR4 in SDM.
>-        MSR_IA32_X2APIC_IRR5 is defined as IA32_X2APIC_IRR5 in SDM.
>-        MSR_IA32_X2APIC_IRR6 is defined as IA32_X2APIC_IRR6 in SDM.
>-        MSR_IA32_X2APIC_IRR7 is defined as IA32_X2APIC_IRR7 in SDM.
>-  @{
>-**/
>-#define MSR_IA32_X2APIC_IRR0                     0x00000820
>-#define MSR_IA32_X2APIC_IRR1                     0x00000821
>-#define MSR_IA32_X2APIC_IRR2                     0x00000822
>-#define MSR_IA32_X2APIC_IRR3                     0x00000823
>-#define MSR_IA32_X2APIC_IRR4                     0x00000824
>-#define MSR_IA32_X2APIC_IRR5                     0x00000825
>-#define MSR_IA32_X2APIC_IRR6                     0x00000826
>-#define MSR_IA32_X2APIC_IRR7                     0x00000827
>-/// @}
>-
>-
>-/**
>-  x2APIC Error Status Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_ESR (0x00000828)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ESR);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_ESR, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_ESR is defined as IA32_X2APIC_ESR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_ESR                      0x00000828
>-
>-
>-/**
>-  x2APIC LVT Corrected Machine Check Interrupt Register (R/W). If
>-  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_CMCI (0x0000082F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_CMCI);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_CMCI, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_CMCI is defined as IA32_X2APIC_LVT_CMCI
>in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_CMCI                 0x0000082F
>-
>-
>-/**
>-  x2APIC Interrupt Command Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_ICR (0x00000830)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_ICR);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_ICR, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_ICR is defined as IA32_X2APIC_ICR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_ICR                      0x00000830
>-
>-
>-/**
>-  x2APIC LVT Timer Interrupt Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_TIMER (0x00000832)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_TIMER);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_TIMER, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_TIMER is defined as
>IA32_X2APIC_LVT_TIMER in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_TIMER                0x00000832
>-
>-
>-/**
>-  x2APIC LVT Thermal Sensor Interrupt Register (R/W). If CPUID.01H:ECX.[21]
>=
>-  1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_THERMAL (0x00000833)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_THERMAL);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_THERMAL, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_THERMAL is defined as
>IA32_X2APIC_LVT_THERMAL in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_THERMAL              0x00000833
>-
>-
>-/**
>-  x2APIC LVT Performance Monitor Interrupt Register (R/W). If
>-  CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_PMI (0x00000834)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_PMI);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_PMI, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_PMI is defined as IA32_X2APIC_LVT_PMI in
>SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_PMI                  0x00000834
>-
>-
>-/**
>-  x2APIC LVT LINT0 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_LINT0 (0x00000835)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT0);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT0, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_LINT0 is defined as IA32_X2APIC_LVT_LINT0
>in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_LINT0                0x00000835
>-
>-
>-/**
>-  x2APIC LVT LINT1 Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_LINT1 (0x00000836)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_LINT1);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_LINT1, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_LINT1 is defined as IA32_X2APIC_LVT_LINT1
>in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_LINT1                0x00000836
>-
>-
>-/**
>-  x2APIC LVT Error Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_LVT_ERROR (0x00000837)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_LVT_ERROR);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_LVT_ERROR, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_LVT_ERROR is defined as
>IA32_X2APIC_LVT_ERROR in SDM.
>-**/
>-#define MSR_IA32_X2APIC_LVT_ERROR                0x00000837
>-
>-
>-/**
>-  x2APIC Initial Count Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_INIT_COUNT (0x00000838)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_INIT_COUNT);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_INIT_COUNT, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_INIT_COUNT is defined as
>IA32_X2APIC_INIT_COUNT in SDM.
>-**/
>-#define MSR_IA32_X2APIC_INIT_COUNT               0x00000838
>-
>-
>-/**
>-  x2APIC Current Count Register (R/O). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_CUR_COUNT (0x00000839)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_CUR_COUNT);
>-  @endcode
>-  @note MSR_IA32_X2APIC_CUR_COUNT is defined as
>IA32_X2APIC_CUR_COUNT in SDM.
>-**/
>-#define MSR_IA32_X2APIC_CUR_COUNT                0x00000839
>-
>-
>-/**
>-  x2APIC Divide Configuration Register (R/W). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_DIV_CONF (0x0000083E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_X2APIC_DIV_CONF);
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_DIV_CONF, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_DIV_CONF is defined as
>IA32_X2APIC_DIV_CONF in SDM.
>-**/
>-#define MSR_IA32_X2APIC_DIV_CONF                 0x0000083E
>-
>-
>-/**
>-  x2APIC Self IPI Register (W/O). If CPUID.01H:ECX.[21] = 1 &&
>-  IA32_APIC_BASE.[10] = 1.
>-
>-  @param  ECX  MSR_IA32_X2APIC_SELF_IPI (0x0000083F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = 0;
>-  AsmWriteMsr64 (MSR_IA32_X2APIC_SELF_IPI, Msr);
>-  @endcode
>-  @note MSR_IA32_X2APIC_SELF_IPI is defined as IA32_X2APIC_SELF_IPI in
>SDM.
>-**/
>-#define MSR_IA32_X2APIC_SELF_IPI                 0x0000083F
>-
>-
>-/**
>-  Silicon Debug Feature Control (R/W). If CPUID.01H:ECX.[11] = 1.
>-
>-  @param  ECX  MSR_IA32_DEBUG_INTERFACE (0x00000C80)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_DEBUG_INTERFACE_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_DEBUG_INTERFACE_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_DEBUG_INTERFACE);
>-  AsmWriteMsr64 (MSR_IA32_DEBUG_INTERFACE, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_DEBUG_INTERFACE is defined as
>IA32_DEBUG_INTERFACE in SDM.
>-**/
>-#define MSR_IA32_DEBUG_INTERFACE                 0x00000C80
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_DEBUG_INTERFACE
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Enable (R/W) BIOS set 1 to enable Silicon debug features.
>-    /// Default is 0. If CPUID.01H:ECX.[11] = 1.
>-    ///
>-    UINT32  Enable:1;
>-    UINT32  Reserved1:29;
>-    ///
>-    /// [Bit 30] Lock (R/W): If 1, locks any further change to the MSR. The
>-    /// lock bit is set automatically on the first SMI assertion even if not
>-    /// explicitly set by BIOS. Default is 0. If CPUID.01H:ECX.[11] = 1.
>-    ///
>-    UINT32  Lock:1;
>-    ///
>-    /// [Bit 31] Debug Occurred (R/O): This "sticky bit" is set by hardware to
>-    /// indicate the status of bit 0. Default is 0. If CPUID.01H:ECX.[11] = 1.
>-    ///
>-    UINT32  DebugOccurred:1;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_DEBUG_INTERFACE_REGISTER;
>-
>-
>-/**
>-  L3 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=1):ECX.[2] = 1 ).
>-
>-  @param  ECX  MSR_IA32_L3_QOS_CFG (0x00000C81)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_L3_QOS_CFG_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_L3_QOS_CFG_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L3_QOS_CFG);
>-  AsmWriteMsr64 (MSR_IA32_L3_QOS_CFG, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_L3_QOS_CFG is defined as IA32_L3_QOS_CFG in SDM.
>-**/
>-#define MSR_IA32_L3_QOS_CFG                      0x00000C81
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_L3_QOS_CFG
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Enable (R/W) Set 1 to enable L3 CAT masks and COS to operate
>-    /// in Code and Data Prioritization (CDP) mode.
>-    ///
>-    UINT32  Enable:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_L3_QOS_CFG_REGISTER;
>-
>-/**
>-  L2 QOS Configuration (R/W). If ( CPUID.(EAX=10H, ECX=2):ECX.[2] = 1 ).
>-
>-  @param  ECX  MSR_IA32_L2_QOS_CFG (0x00000C82)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_L2_QOS_CFG_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_L2_QOS_CFG_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_L2_QOS_CFG);
>-  AsmWriteMsr64 (MSR_IA32_L2_QOS_CFG, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_L2_QOS_CFG is defined as IA32_L2_QOS_CFG in SDM.
>-**/
>-#define MSR_IA32_L2_QOS_CFG                      0x00000C82
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_L2_QOS_CFG
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] Enable (R/W) Set 1 to enable L2 CAT masks and COS to operate
>-    /// in Code and Data Prioritization (CDP) mode.
>-    ///
>-    UINT32  Enable:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_L2_QOS_CFG_REGISTER;
>-
>-/**
>-  Monitoring Event Select Register (R/W). If ( CPUID.(EAX=07H,
>ECX=0):EBX.[12]
>-  = 1 ).
>-
>-  @param  ECX  MSR_IA32_QM_EVTSEL (0x00000C8D)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_QM_EVTSEL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_QM_EVTSEL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_EVTSEL);
>-  AsmWriteMsr64 (MSR_IA32_QM_EVTSEL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_QM_EVTSEL is defined as IA32_QM_EVTSEL in SDM.
>-**/
>-#define MSR_IA32_QM_EVTSEL                       0x00000C8D
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_QM_EVTSEL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 7:0] Event ID: ID of a supported monitoring event to report via
>-    /// IA32_QM_CTR.
>-    ///
>-    UINT32  EventID:8;
>-    UINT32  Reserved:24;
>-    ///
>-    /// [Bits 63:32] Resource Monitoring ID: ID for monitoring hardware to
>-    /// report monitored data via IA32_QM_CTR. N = Ceil (Log:sub:`2` (
>-    /// CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
>-    ///
>-    UINT32  ResourceMonitoringID:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_QM_EVTSEL_REGISTER;
>-
>-
>-/**
>-  Monitoring Counter Register (R/O). If ( CPUID.(EAX=07H, ECX=0):EBX.[12] =
>1
>-  ).
>-
>-  @param  ECX  MSR_IA32_QM_CTR (0x00000C8E)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_QM_CTR_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_QM_CTR_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_QM_CTR_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_QM_CTR);
>-  @endcode
>-  @note MSR_IA32_QM_CTR is defined as IA32_QM_CTR in SDM.
>-**/
>-#define MSR_IA32_QM_CTR                          0x00000C8E
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_QM_CTR
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Resource Monitored Data.
>-    ///
>-    UINT32  ResourceMonitoredData:32;
>-    ///
>-    /// [Bits 61:32] Resource Monitored Data.
>-    ///
>-    UINT32  ResourceMonitoredDataHi:30;
>-    ///
>-    /// [Bit 62] Unavailable: If 1, indicates data for this RMID is not
>-    /// available or not monitored for this resource or RMID.
>-    ///
>-    UINT32  Unavailable:1;
>-    ///
>-    /// [Bit 63] Error: If 1, indicates and unsupported RMID or event type was
>-    /// written to IA32_PQR_QM_EVTSEL.
>-    ///
>-    UINT32  Error:1;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_QM_CTR_REGISTER;
>-
>-
>-/**
>-  Resource Association Register (R/W). If ( (CPUID.(EAX=07H, ECX=0):EBX[12]
>-  =1) or (CPUID.(EAX=07H, ECX=0):EBX[15] =1 ) ).
>-
>-  @param  ECX  MSR_IA32_PQR_ASSOC (0x00000C8F)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PQR_ASSOC_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PQR_ASSOC_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PQR_ASSOC);
>-  AsmWriteMsr64 (MSR_IA32_PQR_ASSOC, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PQR_ASSOC is defined as IA32_PQR_ASSOC in SDM.
>-**/
>-#define MSR_IA32_PQR_ASSOC                       0x00000C8F
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PQR_ASSOC
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] Resource Monitoring ID (R/W): ID for monitoring hardware
>-    /// to track internal operation, e.g. memory access. N = Ceil (Log:sub:`2`
>-    /// ( CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)).
>-    ///
>-    UINT32  ResourceMonitoringID:32;
>-    ///
>-    /// [Bits 63:32] COS (R/W). The class of service (COS) to enforce (on
>-    /// writes); returns the current COS when read. If ( CPUID.(EAX=07H,
>-    /// ECX=0):EBX.[15] = 1 ).
>-    ///
>-    UINT32  COS:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PQR_ASSOC_REGISTER;
>-
>-
>-/**
>-  Supervisor State of MPX Configuration. (R/W). If (CPUID.(EAX=07H,
>-  ECX=0H):EBX[14] = 1).
>-
>-  @param  ECX  MSR_IA32_BNDCFGS (0x00000D90)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_BNDCFGS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_BNDCFGS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_BNDCFGS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_BNDCFGS);
>-  AsmWriteMsr64 (MSR_IA32_BNDCFGS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_BNDCFGS is defined as IA32_BNDCFGS in SDM.
>-**/
>-#define MSR_IA32_BNDCFGS                         0x00000D90
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_BNDCFGS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] EN: Enable Intel MPX in supervisor mode.
>-    ///
>-    UINT32  EN:1;
>-    ///
>-    /// [Bit 1] BNDPRESERVE: Preserve the bounds registers for near branch
>-    /// instructions in the absence of the BND prefix.
>-    ///
>-    UINT32  BNDPRESERVE:1;
>-    UINT32  Reserved:10;
>-    ///
>-    /// [Bits 31:12] Base Address of Bound Directory.
>-    ///
>-    UINT32  Base:20;
>-    ///
>-    /// [Bits 63:32] Base Address of Bound Directory.
>-    ///
>-    UINT32  BaseHi:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_BNDCFGS_REGISTER;
>-
>-
>-/**
>-  Extended Supervisor State Mask (R/W). If( CPUID.(0DH, 1):EAX.[3] = 1.
>-
>-  @param  ECX  MSR_IA32_XSS (0x00000DA0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_XSS_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_XSS_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_XSS_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_XSS);
>-  AsmWriteMsr64 (MSR_IA32_XSS, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_XSS is defined as IA32_XSS in SDM.
>-**/
>-#define MSR_IA32_XSS                             0x00000DA0
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_XSS
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    UINT32  Reserved1:8;
>-    ///
>-    /// [Bit 8] Trace Packet Configuration State (R/W).
>-    ///
>-    UINT32  TracePacketConfigurationState:1;
>-    UINT32  Reserved2:23;
>-    UINT32  Reserved3:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_XSS_REGISTER;
>-
>-
>-/**
>-  Package Level Enable/disable HDC (R/W). If CPUID.06H:EAX.[13] = 1.
>-
>-  @param  ECX  MSR_IA32_PKG_HDC_CTL (0x00000DB0)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PKG_HDC_CTL_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PKG_HDC_CTL_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PKG_HDC_CTL);
>-  AsmWriteMsr64 (MSR_IA32_PKG_HDC_CTL, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PKG_HDC_CTL is defined as IA32_PKG_HDC_CTL in SDM.
>-**/
>-#define MSR_IA32_PKG_HDC_CTL                     0x00000DB0
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PKG_HDC_CTL
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] HDC_Pkg_Enable (R/W) Force HDC idling or wake up HDC-idled
>-    /// logical processors in the package. See Section 14.5.2, "Package level
>-    /// Enabling HDC". If CPUID.06H:EAX.[13] = 1.
>-    ///
>-    UINT32  HDC_Pkg_Enable:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PKG_HDC_CTL_REGISTER;
>-
>-
>-/**
>-  Enable/disable HWP (R/W). If CPUID.06H:EAX.[13] = 1.
>-
>-  @param  ECX  MSR_IA32_PM_CTL1 (0x00000DB1)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_PM_CTL1_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_PM_CTL1_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_PM_CTL1_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_PM_CTL1);
>-  AsmWriteMsr64 (MSR_IA32_PM_CTL1, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_PM_CTL1 is defined as IA32_PM_CTL1 in SDM.
>-**/
>-#define MSR_IA32_PM_CTL1                         0x00000DB1
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_PM_CTL1
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] HDC_Allow_Block (R/W) Allow/Block this logical processor for
>-    /// package level HDC control. See Section 14.5.3.
>-    /// If CPUID.06H:EAX.[13] = 1.
>-    ///
>-    UINT32  HDC_Allow_Block:1;
>-    UINT32  Reserved1:31;
>-    UINT32  Reserved2:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_PM_CTL1_REGISTER;
>-
>-
>-/**
>-  Per-Logical_Processor HDC Idle Residency (R/0). If CPUID.06H:EAX.[13] = 1.
>-  Stall_Cycle_Cnt (R/W) Stalled cycles due to HDC forced idle on this logical
>-  processor. See Section 14.5.4.1. If CPUID.06H:EAX.[13] = 1.
>-
>-  @param  ECX  MSR_IA32_THREAD_STALL (0x00000DB2)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_THREAD_STALL);
>-  @endcode
>-  @note MSR_IA32_THREAD_STALL is defined as IA32_THREAD_STALL in SDM.
>-**/
>-#define MSR_IA32_THREAD_STALL                    0x00000DB2
>-
>-
>-/**
>-  Extended Feature Enables. If ( CPUID.80000001H:EDX.[2 0]
>-  CPUID.80000001H:EDX.[2 9]).
>-
>-  @param  ECX  MSR_IA32_EFER (0xC0000080)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_EFER_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_EFER_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_EFER_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_EFER);
>-  AsmWriteMsr64 (MSR_IA32_EFER, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_EFER is defined as IA32_EFER in SDM.
>-**/
>-#define MSR_IA32_EFER                            0xC0000080
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_EFER
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bit 0] SYSCALL Enable: IA32_EFER.SCE (R/W) Enables SYSCALL/SYSRET
>-    /// instructions in 64-bit mode.
>-    ///
>-    UINT32  SCE:1;
>-    UINT32  Reserved1:7;
>-    ///
>-    /// [Bit 8] IA-32e Mode Enable: IA32_EFER.LME (R/W) Enables IA-32e mode
>-    /// operation.
>-    ///
>-    UINT32  LME:1;
>-    UINT32  Reserved2:1;
>-    ///
>-    /// [Bit 10] IA-32e Mode Active: IA32_EFER.LMA (R) Indicates IA-32e mode
>-    /// is active when set.
>-    ///
>-    UINT32  LMA:1;
>-    ///
>-    /// [Bit 11] Execute Disable Bit Enable: IA32_EFER.NXE (R/W).
>-    ///
>-    UINT32  NXE:1;
>-    UINT32  Reserved3:20;
>-    UINT32  Reserved4:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_EFER_REGISTER;
>-
>-
>-/**
>-  System Call Target Address (R/W). If CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_STAR (0xC0000081)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_STAR);
>-  AsmWriteMsr64 (MSR_IA32_STAR, Msr);
>-  @endcode
>-  @note MSR_IA32_STAR is defined as IA32_STAR in SDM.
>-**/
>-#define MSR_IA32_STAR                            0xC0000081
>-
>-
>-/**
>-  IA-32e Mode System Call Target Address (R/W). If CPUID.80000001:EDX.[29]
>= 1.
>-
>-  @param  ECX  MSR_IA32_LSTAR (0xC0000082)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_LSTAR);
>-  AsmWriteMsr64 (MSR_IA32_LSTAR, Msr);
>-  @endcode
>-  @note MSR_IA32_LSTAR is defined as IA32_LSTAR in SDM.
>-**/
>-#define MSR_IA32_LSTAR                           0xC0000082
>-
>-/**
>-  IA-32e Mode System Call Target Address (R/W) Not used, as the SYSCALL
>-  instruction is not recognized in compatibility mode. If
>-  CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_CSTAR (0xC0000083)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_CSTAR);
>-  AsmWriteMsr64 (MSR_IA32_CSTAR, Msr);
>-  @endcode
>-  @note MSR_IA32_CSTAR is defined as IA32_CSTAR in SDM.
>-**/
>-#define MSR_IA32_CSTAR                           0xC0000083
>-
>-/**
>-  System Call Flag Mask (R/W). If CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_FMASK (0xC0000084)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_FMASK);
>-  AsmWriteMsr64 (MSR_IA32_FMASK, Msr);
>-  @endcode
>-  @note MSR_IA32_FMASK is defined as IA32_FMASK in SDM.
>-**/
>-#define MSR_IA32_FMASK                           0xC0000084
>-
>-
>-/**
>-  Map of BASE Address of FS (R/W). If CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_FS_BASE (0xC0000100)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_FS_BASE);
>-  AsmWriteMsr64 (MSR_IA32_FS_BASE, Msr);
>-  @endcode
>-  @note MSR_IA32_FS_BASE is defined as IA32_FS_BASE in SDM.
>-**/
>-#define MSR_IA32_FS_BASE                         0xC0000100
>-
>-
>-/**
>-  Map of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_GS_BASE (0xC0000101)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_GS_BASE);
>-  AsmWriteMsr64 (MSR_IA32_GS_BASE, Msr);
>-  @endcode
>-  @note MSR_IA32_GS_BASE is defined as IA32_GS_BASE in SDM.
>-**/
>-#define MSR_IA32_GS_BASE                         0xC0000101
>-
>-
>-/**
>-  Swap Target of BASE Address of GS (R/W). If CPUID.80000001:EDX.[29] = 1.
>-
>-  @param  ECX  MSR_IA32_KERNEL_GS_BASE (0xC0000102)
>-  @param  EAX  Lower 32-bits of MSR value.
>-  @param  EDX  Upper 32-bits of MSR value.
>-
>-  <b>Example usage</b>
>-  @code
>-  UINT64  Msr;
>-
>-  Msr = AsmReadMsr64 (MSR_IA32_KERNEL_GS_BASE);
>-  AsmWriteMsr64 (MSR_IA32_KERNEL_GS_BASE, Msr);
>-  @endcode
>-  @note MSR_IA32_KERNEL_GS_BASE is defined as IA32_KERNEL_GS_BASE
>in SDM.
>-**/
>-#define MSR_IA32_KERNEL_GS_BASE                  0xC0000102
>-
>-
>-/**
>-  Auxiliary TSC (RW). If CPUID.80000001H: EDX[27] = 1.
>-
>-  @param  ECX  MSR_IA32_TSC_AUX (0xC0000103)
>-  @param  EAX  Lower 32-bits of MSR value.
>-               Described by the type MSR_IA32_TSC_AUX_REGISTER.
>-  @param  EDX  Upper 32-bits of MSR value.
>-               Described by the type MSR_IA32_TSC_AUX_REGISTER.
>-
>-  <b>Example usage</b>
>-  @code
>-  MSR_IA32_TSC_AUX_REGISTER  Msr;
>-
>-  Msr.Uint64 = AsmReadMsr64 (MSR_IA32_TSC_AUX);
>-  AsmWriteMsr64 (MSR_IA32_TSC_AUX, Msr.Uint64);
>-  @endcode
>-  @note MSR_IA32_TSC_AUX is defined as IA32_TSC_AUX in SDM.
>-**/
>-#define MSR_IA32_TSC_AUX                         0xC0000103
>-
>-/**
>-  MSR information returned for MSR index #MSR_IA32_TSC_AUX
>-**/
>-typedef union {
>-  ///
>-  /// Individual bit fields
>-  ///
>-  struct {
>-    ///
>-    /// [Bits 31:0] AUX: Auxiliary signature of TSC.
>-    ///
>-    UINT32  AUX:32;
>-    UINT32  Reserved:32;
>-  } Bits;
>-  ///
>-  /// All bit fields as a 32-bit value
>-  ///
>-  UINT32  Uint32;
>-  ///
>-  /// All bit fields as a 64-bit value
>-  ///
>-  UINT64  Uint64;
>-} MSR_IA32_TSC_AUX_REGISTER;
>+#include <Register/Intel/ArchitecturalMsr.h>
>
> #endif
>diff --git a/UefiCpuPkg/Include/Register/Cpuid.h
>b/UefiCpuPkg/Include/Register/Cpuid.h
>index ac7b8f927f..fda8b2342e 100644
>--- a/UefiCpuPkg/Include/Register/Cpuid.h
>+++ b/UefiCpuPkg/Include/Register/Cpuid.h
>@@ -3,11 +3,6 @@
>
>   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>-
>-  @par Specification Reference:
>-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume
>2A,
>-  November 2018, CPUID instruction.
>-
> **/
>
> #ifndef __CPUID_H__
>diff --git a/UefiCpuPkg/Include/Register/LocalApic.h
>b/UefiCpuPkg/Include/Register/LocalApic.h
>index 369ba96af8..1cc2b312db 100644
>--- a/UefiCpuPkg/Include/Register/LocalApic.h
>+++ b/UefiCpuPkg/Include/Register/LocalApic.h
>@@ -1,183 +1,14 @@
> /** @file
>-  IA32 Local APIC Definitions.
>+  Wrapper header file to include <Register/Intel/LocalApic.h> in MdePkg.
>
>-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>-
> **/
>
> #ifndef __LOCAL_APIC_H__
> #define __LOCAL_APIC_H__
>
>-//
>-// Definition for Local APIC registers and related values
>-//
>-#define XAPIC_ID_OFFSET                         0x20
>-#define XAPIC_VERSION_OFFSET                    0x30
>-#define XAPIC_EOI_OFFSET                        0x0b0
>-#define XAPIC_ICR_DFR_OFFSET                    0x0e0
>-#define XAPIC_SPURIOUS_VECTOR_OFFSET            0x0f0
>-#define XAPIC_ICR_LOW_OFFSET                    0x300
>-#define XAPIC_ICR_HIGH_OFFSET                   0x310
>-#define XAPIC_LVT_TIMER_OFFSET                  0x320
>-#define XAPIC_LVT_LINT0_OFFSET                  0x350
>-#define XAPIC_LVT_LINT1_OFFSET                  0x360
>-#define XAPIC_TIMER_INIT_COUNT_OFFSET           0x380
>-#define XAPIC_TIMER_CURRENT_COUNT_OFFSET        0x390
>-#define XAPIC_TIMER_DIVIDE_CONFIGURATION_OFFSET 0x3E0
>-
>-#define X2APIC_MSR_BASE_ADDRESS                 0x800
>-#define X2APIC_MSR_ICR_ADDRESS                  0x830
>-
>-#define LOCAL_APIC_DELIVERY_MODE_FIXED           0
>-#define LOCAL_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1
>-#define LOCAL_APIC_DELIVERY_MODE_SMI             2
>-#define LOCAL_APIC_DELIVERY_MODE_NMI             4
>-#define LOCAL_APIC_DELIVERY_MODE_INIT            5
>-#define LOCAL_APIC_DELIVERY_MODE_STARTUP         6
>-#define LOCAL_APIC_DELIVERY_MODE_EXTINT          7
>-
>-#define LOCAL_APIC_DESTINATION_SHORTHAND_NO_SHORTHAND       0
>-#define LOCAL_APIC_DESTINATION_SHORTHAND_SELF               1
>-#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_INCLUDING_SELF 2
>-#define LOCAL_APIC_DESTINATION_SHORTHAND_ALL_EXCLUDING_SELF 3
>-
>-//
>-// Local APIC Version Register.
>-//
>-typedef union {
>-  struct {
>-    UINT32  Version:8;                  ///< The version numbers of the local APIC.
>-    UINT32  Reserved0:8;                ///< Reserved.
>-    UINT32  MaxLvtEntry:8;              ///< Number of LVT entries minus 1.
>-    UINT32  EoiBroadcastSuppression:1;  ///< 1 if EOI-broadcast suppression
>supported.
>-    UINT32  Reserved1:7;                ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_VERSION;
>-
>-//
>-// Low half of Interrupt Command Register (ICR).
>-//
>-typedef union {
>-  struct {
>-    UINT32  Vector:8;                ///< The vector number of the interrupt being
>sent.
>-    UINT32  DeliveryMode:3;          ///< Specifies the type of IPI to be sent.
>-    UINT32  DestinationMode:1;       ///< 0: physical destination mode, 1: logical
>destination mode.
>-    UINT32  DeliveryStatus:1;        ///< Indicates the IPI delivery status. This field
>is reserved in x2APIC mode.
>-    UINT32  Reserved0:1;             ///< Reserved.
>-    UINT32  Level:1;                 ///< 0 for the INIT level de-assert delivery mode.
>Otherwise 1.
>-    UINT32  TriggerMode:1;           ///< 0: edge, 1: level when using the INIT level
>de-assert delivery mode.
>-    UINT32  Reserved1:2;             ///< Reserved.
>-    UINT32  DestinationShorthand:2;  ///< A shorthand notation to specify the
>destination of the interrupt.
>-    UINT32  Reserved2:12;            ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_ICR_LOW;
>-
>-//
>-// High half of Interrupt Command Register (ICR)
>-//
>-typedef union {
>-  struct {
>-    UINT32  Reserved0:24;   ///< Reserved.
>-    UINT32  Destination:8;  ///< Specifies the target processor or processors in
>xAPIC mode.
>-  } Bits;
>-  UINT32    Uint32;         ///< Destination field expanded to 32-bit in x2APIC
>mode.
>-} LOCAL_APIC_ICR_HIGH;
>-
>-//
>-// Spurious-Interrupt Vector Register (SVR)
>-//
>-typedef union {
>-  struct {
>-    UINT32  SpuriousVector:8;           ///< Spurious Vector.
>-    UINT32  SoftwareEnable:1;           ///< APIC Software Enable/Disable.
>-    UINT32  FocusProcessorChecking:1;   ///< Focus Processor Checking.
>-    UINT32  Reserved0:2;                ///< Reserved.
>-    UINT32  EoiBroadcastSuppression:1;  ///< EOI-Broadcast Suppression.
>-    UINT32  Reserved1:19;               ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_SVR;
>-
>-//
>-// Divide Configuration Register (DCR)
>-//
>-typedef union {
>-  struct {
>-    UINT32  DivideValue1:2;  ///< Low 2 bits of the divide value.
>-    UINT32  Reserved0:1;     ///< Always 0.
>-    UINT32  DivideValue2:1;  ///< Highest 1 bit of the divide value.
>-    UINT32  Reserved1:28;    ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_DCR;
>-
>-//
>-// LVT Timer Register
>-//
>-typedef union {
>-  struct {
>-    UINT32  Vector:8;          ///< The vector number of the interrupt being sent.
>-    UINT32  Reserved0:4;       ///< Reserved.
>-    UINT32  DeliveryStatus:1;  ///< 0: Idle, 1: send pending.
>-    UINT32  Reserved1:3;       ///< Reserved.
>-    UINT32  Mask:1;            ///< 0: Not masked, 1: Masked.
>-    UINT32  TimerMode:1;       ///< 0: One-shot, 1: Periodic.
>-    UINT32  Reserved2:14;      ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_LVT_TIMER;
>-
>-//
>-// LVT LINT0/LINT1 Register
>-//
>-typedef union {
>-  struct {
>-    UINT32  Vector:8;            ///< The vector number of the interrupt being sent.
>-    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
>-    UINT32  Reserved0:1;         ///< Reserved.
>-    UINT32  DeliveryStatus:1;    ///< 0: Idle, 1: send pending.
>-    UINT32  InputPinPolarity:1;  ///< Interrupt Input Pin Polarity.
>-    UINT32  RemoteIrr:1;         ///< RO. Set when the local APIC accepts the
>interrupt and reset when an EOI is received.
>-    UINT32  TriggerMode:1;       ///< 0:edge, 1:level.
>-    UINT32  Mask:1;              ///< 0: Not masked, 1: Masked.
>-    UINT32  Reserved1:15;        ///< Reserved.
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_LVT_LINT;
>-
>-//
>-// MSI Address Register
>-//
>-typedef union {
>-  struct {
>-    UINT32  Reserved0:2;         ///< Reserved
>-    UINT32  DestinationMode:1;   ///< Specifies the Destination Mode.
>-    UINT32  RedirectionHint:1;   ///< Specifies the Redirection Hint.
>-    UINT32  Reserved1:8;         ///< Reserved.
>-    UINT32  DestinationId:8;     ///< Specifies the Destination ID.
>-    UINT32  BaseAddress:12;      ///< Must be 0FEEH
>-  } Bits;
>-  UINT32    Uint32;
>-} LOCAL_APIC_MSI_ADDRESS;
>-
>-//
>-// MSI Address Register
>-//
>-typedef union {
>-  struct {
>-    UINT32  Vector:8;            ///< Interrupt vector in range 010h..0FEH
>-    UINT32  DeliveryMode:3;      ///< Specifies the type of interrupt to be sent.
>-    UINT32  Reserved0:3;         ///< Reserved.
>-    UINT32  Level:1;             ///< 0:Deassert, 1:Assert.  Ignored for Edge triggered
>interrupts.
>-    UINT32  TriggerMode:1;       ///< 0:Edge,     1:Level.
>-    UINT32  Reserved1:16;        ///< Reserved.
>-    UINT32  Reserved2:32;        ///< Reserved.
>-  } Bits;
>-  UINT64    Uint64;
>-} LOCAL_APIC_MSI_DATA;
>+#include <Register/Intel/LocalApic.h>
>
> #endif
>
>diff --git a/UefiCpuPkg/Include/Register/Microcode.h
>b/UefiCpuPkg/Include/Register/Microcode.h
>index e85c0cc640..df0670bd46 100644
>--- a/UefiCpuPkg/Include/Register/Microcode.h
>+++ b/UefiCpuPkg/Include/Register/Microcode.h
>@@ -1,194 +1,13 @@
> /** @file
>-  Microcode Definitions.
>+  Wrapper header file to include <Register/Intel/Microcode.h> in MdePkg.
>
>-  Microcode Definitions based on contents of the
>-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual
>-    Volume 3A, Section 9.11  Microcode Definitions
>-
>-  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>-
>-  @par Specification Reference:
>-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume
>3A,
>-  June 2016, Chapter 9 Processor Management and Initialization, Section 9-11.
>-
> **/
>
> #ifndef __MICROCODE_H__
> #define __MICROCODE_H__
>
>-///
>-/// CPU Microcode Date in BCD format
>-///
>-typedef union {
>-  struct {
>-    UINT32   Year:16;
>-    UINT32   Day:8;
>-    UINT32   Month:8;
>-  } Bits;
>-  UINT32     Uint32;
>-} CPU_MICROCODE_DATE;
>-
>-///
>-/// CPU Microcode Processor Signature format
>-///
>-typedef union {
>-  struct {
>-    UINT32   Stepping:4;
>-    UINT32   Model:4;
>-    UINT32   Family:4;
>-    UINT32   Type:2;
>-    UINT32   Reserved1:2;
>-    UINT32   ExtendedModel:4;
>-    UINT32   ExtendedFamily:8;
>-    UINT32   Reserved2:4;
>-  } Bits;
>-  UINT32     Uint32;
>-} CPU_MICROCODE_PROCESSOR_SIGNATURE;
>-
>-#pragma pack (1)
>-
>-///
>-/// Microcode Update Format definition
>-///
>-typedef struct {
>-  ///
>-  /// Version number of the update header
>-  ///
>-  UINT32                            HeaderVersion;
>-  ///
>-  /// Unique version number for the update, the basis for the update
>-  /// signature provided by the processor to indicate the current update
>-  /// functioning within the processor. Used by the BIOS to authenticate
>-  /// the update and verify that the processor loads successfully. The
>-  /// value in this field cannot be used for processor stepping identification
>-  /// alone. This is a signed 32-bit number.
>-  ///
>-  UINT32                            UpdateRevision;
>-  ///
>-  /// Date of the update creation in binary format: mmddyyyy (e.g.
>-  /// 07/18/98 is 07181998H).
>-  ///
>-  CPU_MICROCODE_DATE                Date;
>-  ///
>-  /// Extended family, extended model, type, family, model, and stepping
>-  /// of processor that requires this particular update revision (e.g.,
>-  /// 00000650H). Each microcode update is designed specifically for a
>-  /// given extended family, extended model, type, family, model, and
>-  /// stepping of the processor.
>-  /// The BIOS uses the processor signature field in conjunction with the
>-  /// CPUID instruction to determine whether or not an update is
>-  /// appropriate to load on a processor. The information encoded within
>-  /// this field exactly corresponds to the bit representations returned by
>-  /// the CPUID instruction.
>-  ///
>-  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
>-  ///
>-  /// Checksum of Update Data and Header. Used to verify the integrity of
>-  /// the update header and data. Checksum is correct when the
>-  /// summation of all the DWORDs (including the extended Processor
>-  /// Signature Table) that comprise the microcode update result in
>-  /// 00000000H.
>-  ///
>-  UINT32                            Checksum;
>-  ///
>-  /// Version number of the loader program needed to correctly load this
>-  /// update. The initial version is 00000001H
>-  ///
>-  UINT32                            LoaderRevision;
>-  ///
>-  /// Platform type information is encoded in the lower 8 bits of this 4-
>-  /// byte field. Each bit represents a particular platform type for a given
>-  /// CPUID. The BIOS uses the processor flags field in conjunction with
>-  /// the platform Id bits in MSR (17H) to determine whether or not an
>-  /// update is appropriate to load on a processor. Multiple bits may be set
>-  /// representing support for multiple platform IDs.
>-  ///
>-  UINT32                            ProcessorFlags;
>-  ///
>-  /// Specifies the size of the encrypted data in bytes, and must be a
>-  /// multiple of DWORDs. If this value is 00000000H, then the microcode
>-  /// update encrypted data is 2000 bytes (or 500 DWORDs).
>-  ///
>-  UINT32                            DataSize;
>-  ///
>-  /// Specifies the total size of the microcode update in bytes. It is the
>-  /// summation of the header size, the encrypted data size and the size of
>-  /// the optional extended signature table. This value is always a multiple
>-  /// of 1024.
>-  ///
>-  UINT32                            TotalSize;
>-  ///
>-  /// Reserved fields for future expansion.
>-  ///
>-  UINT8                             Reserved[12];
>-} CPU_MICROCODE_HEADER;
>-
>-///
>-/// Extended Signature Table Header Field Definitions
>-///
>-typedef struct {
>-  ///
>-  /// Specifies the number of extended signature structures (Processor
>-  /// Signature[n], processor flags[n] and checksum[n]) that exist in this
>-  /// microcode update
>-  ///
>-  UINT32                            ExtendedSignatureCount;
>-  ///
>-  /// Checksum of update extended processor signature table. Used to
>-  /// verify the integrity of the extended processor signature table.
>-  /// Checksum is correct when the summation of the DWORDs that
>-  /// comprise the extended processor signature table results in
>-  /// 00000000H.
>-  ///
>-  UINT32                            ExtendedChecksum;
>-  ///
>-  /// Reserved fields.
>-  ///
>-  UINT8                             Reserved[12];
>-} CPU_MICROCODE_EXTENDED_TABLE_HEADER;
>-
>-///
>-/// Extended Signature Table Field Definitions
>-///
>-typedef struct {
>-  ///
>-  /// Extended family, extended model, type, family, model, and stepping
>-  /// of processor that requires this particular update revision (e.g.,
>-  /// 00000650H). Each microcode update is designed specifically for a
>-  /// given extended family, extended model, type, family, model, and
>-  /// stepping of the processor.
>-  /// The BIOS uses the processor signature field in conjunction with the
>-  /// CPUID instruction to determine whether or not an update is
>-  /// appropriate to load on a processor. The information encoded within
>-  /// this field exactly corresponds to the bit representations returned by
>-  /// the CPUID instruction.
>-  ///
>-  CPU_MICROCODE_PROCESSOR_SIGNATURE ProcessorSignature;
>-  ///
>-  /// Platform type information is encoded in the lower 8 bits of this 4-
>-  /// byte field. Each bit represents a particular platform type for a given
>-  /// CPUID. The BIOS uses the processor flags field in conjunction with
>-  /// the platform Id bits in MSR (17H) to determine whether or not an
>-  /// update is appropriate to load on a processor. Multiple bits may be set
>-  /// representing support for multiple platform IDs.
>-  ///
>-  UINT32                             ProcessorFlag;
>-  ///
>-  /// Used by utility software to decompose a microcode update into
>-  /// multiple microcode updates where each of the new updates is
>-  /// constructed without the optional Extended Processor Signature
>-  /// Table.
>-  /// To calculate the Checksum, substitute the Primary Processor
>-  /// Signature entry and the Processor Flags entry with the
>-  /// corresponding Extended Patch entry. Delete the Extended Processor
>-  /// Signature Table entries. The Checksum is correct when the
>-  /// summation of all DWORDs that comprise the created Extended
>-  /// Processor Patch results in 00000000H.
>-  ///
>-  UINT32                             Checksum;
>-} CPU_MICROCODE_EXTENDED_TABLE;
>-
>-#pragma pack ()
>+#include <Register/Intel/Microcode.h>
>
> #endif
>diff --git a/UefiCpuPkg/Include/Register/Msr.h
>b/UefiCpuPkg/Include/Register/Msr.h
>index c9be042983..38e3cd85ab 100644
>--- a/UefiCpuPkg/Include/Register/Msr.h
>+++ b/UefiCpuPkg/Include/Register/Msr.h
>@@ -1,44 +1,14 @@
> /** @file
>-  MSR Definitions.
>+  Wrapper header file to include <Register/Intel/Msr.h> in MdePkg.
>
>-  Provides defines for Machine Specific Registers(MSR) indexes. Data
>structures
>-  are provided for MSRs that contain one or more bit fields.  If the MSR value
>-  returned is a single 32-bit or 64-bit value, then a data structure is not
>-  provided for that MSR.
>-
>-  Copyright (c) 2016 ~ 2018, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>
>-  @par Specification Reference:
>-  Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 4,
>-  May 2018, Volume 4: Model-Specific-Registers (MSR)
>-
> **/
>
> #ifndef __MSR_H__
> #define __MSR_H__
>
>-#include <Register/ArchitecturalMsr.h>
>-#include <Register/Msr/Core2Msr.h>
>-#include <Register/Msr/AtomMsr.h>
>-#include <Register/Msr/SilvermontMsr.h>
>-#include <Register/Msr/GoldmontMsr.h>
>-#include <Register/Msr/GoldmontPlusMsr.h>
>-#include <Register/Msr/NehalemMsr.h>
>-#include <Register/Msr/Xeon5600Msr.h>
>-#include <Register/Msr/XeonE7Msr.h>
>-#include <Register/Msr/SandyBridgeMsr.h>
>-#include <Register/Msr/IvyBridgeMsr.h>
>-#include <Register/Msr/HaswellMsr.h>
>-#include <Register/Msr/HaswellEMsr.h>
>-#include <Register/Msr/BroadwellMsr.h>
>-#include <Register/Msr/XeonDMsr.h>
>-#include <Register/Msr/SkylakeMsr.h>
>-#include <Register/Msr/XeonPhiMsr.h>
>-#include <Register/Msr/Pentium4Msr.h>
>-#include <Register/Msr/CoreMsr.h>
>-#include <Register/Msr/PentiumMMsr.h>
>-#include <Register/Msr/P6Msr.h>
>-#include <Register/Msr/PentiumMsr.h>
>+#include <Register/Intel/Msr.h>
>
> #endif
>diff --git a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>index 6473e51a55..1ab69f09e9 100644
>--- a/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>+++ b/UefiCpuPkg/Include/Register/SmramSaveStateMap.h
>@@ -1,184 +1,13 @@
> /** @file
>-SMRAM Save State Map Definitions.
>-
>-SMRAM Save State Map definitions based on contents of the
>-Intel(R) 64 and IA-32 Architectures Software Developer's Manual
>-  Volume 3C, Section 34.4 SMRAM
>-  Volume 3C, Section 34.5 SMI Handler Execution Environment
>-  Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
>-
>-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
>-SPDX-License-Identifier: BSD-2-Clause-Patent
>+  Wrapper header file to include <Register/Intel/SmramSaveStateMap.h> in
>MdePkg.
>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>+  SPDX-License-Identifier: BSD-2-Clause-Patent
> **/
>
> #ifndef __SMRAM_SAVE_STATE_MAP_H__
> #define __SMRAM_SAVE_STATE_MAP_H__
>
>-///
>-/// Default SMBASE address
>-///
>-#define SMM_DEFAULT_SMBASE           0x30000
>-
>-///
>-/// Offset of SMM handler from SMBASE
>-///
>-#define SMM_HANDLER_OFFSET           0x8000
>-
>-///
>-/// Offset of SMRAM Save State Map from SMBASE
>-///
>-#define SMRAM_SAVE_STATE_MAP_OFFSET  0xfc00
>-
>-#pragma pack (1)
>-
>-///
>-/// 32-bit SMRAM Save State Map
>-///
>-typedef struct {
>-  UINT8   Reserved[0x200];  // 7c00h
>-                            // Padded an extra 0x200 bytes so 32-bit and 64-bit
>-                            // SMRAM Save State Maps are the same size
>-  UINT8   Reserved1[0xf8];  // 7e00h
>-  UINT32  SMBASE;           // 7ef8h
>-  UINT32  SMMRevId;         // 7efch
>-  UINT16  IORestart;        // 7f00h
>-  UINT16  AutoHALTRestart;  // 7f02h
>-  UINT8   Reserved2[0x9C];  // 7f08h
>-  UINT32  IOMemAddr;        // 7fa0h
>-  UINT32  IOMisc;           // 7fa4h
>-  UINT32  _ES;              // 7fa8h
>-  UINT32  _CS;              // 7fach
>-  UINT32  _SS;              // 7fb0h
>-  UINT32  _DS;              // 7fb4h
>-  UINT32  _FS;              // 7fb8h
>-  UINT32  _GS;              // 7fbch
>-  UINT32  Reserved3;        // 7fc0h
>-  UINT32  _TR;              // 7fc4h
>-  UINT32  _DR7;             // 7fc8h
>-  UINT32  _DR6;             // 7fcch
>-  UINT32  _EAX;             // 7fd0h
>-  UINT32  _ECX;             // 7fd4h
>-  UINT32  _EDX;             // 7fd8h
>-  UINT32  _EBX;             // 7fdch
>-  UINT32  _ESP;             // 7fe0h
>-  UINT32  _EBP;             // 7fe4h
>-  UINT32  _ESI;             // 7fe8h
>-  UINT32  _EDI;             // 7fech
>-  UINT32  _EIP;             // 7ff0h
>-  UINT32  _EFLAGS;          // 7ff4h
>-  UINT32  _CR3;             // 7ff8h
>-  UINT32  _CR0;             // 7ffch
>-} SMRAM_SAVE_STATE_MAP32;
>-
>-///
>-/// 64-bit SMRAM Save State Map
>-///
>-typedef struct {
>-  UINT8   Reserved1[0x1d0];  // 7c00h
>-  UINT32  GdtBaseHiDword;    // 7dd0h
>-  UINT32  LdtBaseHiDword;    // 7dd4h
>-  UINT32  IdtBaseHiDword;    // 7dd8h
>-  UINT8   Reserved2[0xc];    // 7ddch
>-  UINT64  IO_EIP;            // 7de8h
>-  UINT8   Reserved3[0x50];   // 7df0h
>-  UINT32  _CR4;              // 7e40h
>-  UINT8   Reserved4[0x48];   // 7e44h
>-  UINT32  GdtBaseLoDword;    // 7e8ch
>-  UINT32  Reserved5;         // 7e90h
>-  UINT32  IdtBaseLoDword;    // 7e94h
>-  UINT32  Reserved6;         // 7e98h
>-  UINT32  LdtBaseLoDword;    // 7e9ch
>-  UINT8   Reserved7[0x38];   // 7ea0h
>-  UINT64  EptVmxControl;     // 7ed8h
>-  UINT32  EnEptVmxControl;   // 7ee0h
>-  UINT8   Reserved8[0x14];   // 7ee4h
>-  UINT32  SMBASE;            // 7ef8h
>-  UINT32  SMMRevId;          // 7efch
>-  UINT16  IORestart;         // 7f00h
>-  UINT16  AutoHALTRestart;   // 7f02h
>-  UINT8   Reserved9[0x18];   // 7f04h
>-  UINT64  _R15;              // 7f1ch
>-  UINT64  _R14;
>-  UINT64  _R13;
>-  UINT64  _R12;
>-  UINT64  _R11;
>-  UINT64  _R10;
>-  UINT64  _R9;
>-  UINT64  _R8;
>-  UINT64  _RAX;              // 7f5ch
>-  UINT64  _RCX;
>-  UINT64  _RDX;
>-  UINT64  _RBX;
>-  UINT64  _RSP;
>-  UINT64  _RBP;
>-  UINT64  _RSI;
>-  UINT64  _RDI;
>-  UINT64  IOMemAddr;         // 7f9ch
>-  UINT32  IOMisc;            // 7fa4h
>-  UINT32  _ES;               // 7fa8h
>-  UINT32  _CS;
>-  UINT32  _SS;
>-  UINT32  _DS;
>-  UINT32  _FS;
>-  UINT32  _GS;
>-  UINT32  _LDTR;             // 7fc0h
>-  UINT32  _TR;
>-  UINT64  _DR7;              // 7fc8h
>-  UINT64  _DR6;
>-  UINT64  _RIP;              // 7fd8h
>-  UINT64  IA32_EFER;         // 7fe0h
>-  UINT64  _RFLAGS;           // 7fe8h
>-  UINT64  _CR3;              // 7ff0h
>-  UINT64  _CR0;              // 7ff8h
>-} SMRAM_SAVE_STATE_MAP64;
>-
>-///
>-/// Union of 32-bit and 64-bit SMRAM Save State Maps
>-///
>-typedef union  {
>-  SMRAM_SAVE_STATE_MAP32  x86;
>-  SMRAM_SAVE_STATE_MAP64  x64;
>-} SMRAM_SAVE_STATE_MAP;
>-
>-///
>-/// Minimum SMM Revision ID that supports IOMisc field in SMRAM Save
>State Map
>-///
>-#define SMRAM_SAVE_STATE_MIN_REV_ID_IOMISC  0x30004
>-
>-///
>-/// SMRAM Save State Map IOMisc I/O Length Values
>-///
>-#define  SMM_IO_LENGTH_BYTE             0x01
>-#define  SMM_IO_LENGTH_WORD             0x02
>-#define  SMM_IO_LENGTH_DWORD            0x04
>-
>-///
>-/// SMRAM Save State Map IOMisc I/O Instruction Type Values
>-///
>-#define  SMM_IO_TYPE_IN_IMMEDIATE       0x9
>-#define  SMM_IO_TYPE_IN_DX              0x1
>-#define  SMM_IO_TYPE_OUT_IMMEDIATE      0x8
>-#define  SMM_IO_TYPE_OUT_DX             0x0
>-#define  SMM_IO_TYPE_INS                0x3
>-#define  SMM_IO_TYPE_OUTS               0x2
>-#define  SMM_IO_TYPE_REP_INS            0x7
>-#define  SMM_IO_TYPE_REP_OUTS           0x6
>-
>-///
>-/// SMRAM Save State Map IOMisc structure
>-///
>-typedef union {
>-  struct {
>-    UINT32  SmiFlag:1;
>-    UINT32  Length:3;
>-    UINT32  Type:4;
>-    UINT32  Reserved1:8;
>-    UINT32  Port:16;
>-  } Bits;
>-  UINT32  Uint32;
>-} SMRAM_SAVE_STATE_IOMISC;
>-
>-#pragma pack ()
>+#include <Register/Intel/SmramSaveStateMap.h>
>
> #endif
>diff --git a/UefiCpuPkg/Include/Register/StmApi.h
>b/UefiCpuPkg/Include/Register/StmApi.h
>index 0ecc0b86d5..4526155405 100644
>--- a/UefiCpuPkg/Include/Register/StmApi.h
>+++ b/UefiCpuPkg/Include/Register/StmApi.h
>@@ -1,948 +1,13 @@
> /** @file
>-  STM API definition
>+  Wrapper header file to include <Register/Intel/StmApi.h> in MdePkg.
>
>-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
>+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
>   SPDX-License-Identifier: BSD-2-Clause-Patent
>-
>-  @par Specification Reference:
>-  SMI Transfer Monitor (STM) User Guide Revision 1.00
>-
> **/
>
> #ifndef _STM_API_H_
> #define _STM_API_H_
>
>-#include <Register/StmStatusCode.h>
>-#include <Register/StmResourceDescriptor.h>
>-#include <Register/ArchitecturalMsr.h>
>-
>-#pragma pack (1)
>-
>-/**
>-  STM Header Structures
>-**/
>-
>-typedef struct {
>-  UINT32  Intel64ModeSupported :1;  ///> bitfield
>-  UINT32  EptSupported         :1;  ///> bitfield
>-  UINT32  Reserved             :30; ///> must be 0
>-} STM_FEAT;
>-
>-#define STM_SPEC_VERSION_MAJOR  1
>-#define STM_SPEC_VERSION_MINOR  0
>-
>-typedef struct {
>-  UINT8     StmSpecVerMajor;
>-  UINT8     StmSpecVerMinor;
>-  ///
>-  /// Must be zero
>-  ///
>-  UINT16    Reserved;
>-  UINT32    StaticImageSize;
>-  UINT32    PerProcDynamicMemorySize;
>-  UINT32    AdditionalDynamicMemorySize;
>-  STM_FEAT  StmFeatures;
>-  UINT32    NumberOfRevIDs;
>-  UINT32    StmSmmRevID[1];
>-  ///
>-  /// The total STM_HEADER should be 4K.
>-  ///
>-} SOFTWARE_STM_HEADER;
>-
>-typedef struct {
>-  MSEG_HEADER          HwStmHdr;
>-  SOFTWARE_STM_HEADER  SwStmHdr;
>-} STM_HEADER;
>-
>-
>-/**
>-  VMCALL API Numbers
>-  API number convention: BIOS facing VMCALL interfaces have bit 16 clear
>-**/
>-
>-/**
>-  StmMapAddressRange enables a SMM guest to create a non-1:1 virtual to
>-  physical mapping of an address range into the SMM guest's virtual
>-  memory space.
>-
>-  @param  EAX  #STM_API_MAP_ADDRESS_RANGE (0x00000001)
>-  @param  EBX  Low 32 bits of physical address of caller allocated
>-               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure.
>-  @param  ECX  High 32 bits of physical address of caller allocated
>-               STM_MAP_ADDRESS_RANGE_DESCRIPTOR structure. If Intel64Mode
>is
>-               clear (0), ECX must be 0.
>-
>-  @note  All fields of STM_MAP_ADDRESS_RANGE_DESCRIPTOR are inputs
>only. They
>-         are not modified by StmMapAddressRange.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS.
>-                The memory range was mapped as requested.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
>-                The requested mapping contains a protected resource.
>-  @retval  EAX  #ERROR_STM_CACHE_TYPE_NOT_SUPPORTED
>-                The requested cache type could not be satisfied.
>-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
>-                Page count must not be zero.
>-  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
>-                STM supports EPT and has not implemented StmMapAddressRange().
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_MAP_ADDRESS_RANGE                  0x00000001
>-
>-/**
>-  STM Map Address Range Descriptor for #STM_API_MAP_ADDRESS_RANGE
>VMCALL
>-**/
>-typedef struct {
>-  UINT64  PhysicalAddress;
>-  UINT64  VirtualAddress;
>-  UINT32  PageCount;
>-  UINT32  PatCacheType;
>-} STM_MAP_ADDRESS_RANGE_DESCRIPTOR;
>-
>-/**
>-  Define values for PatCacheType field of
>#STM_MAP_ADDRESS_RANGE_DESCRIPTOR
>-  @{
>-**/
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_ST_UC        0x00
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WC           0x01
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WT           0x04
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WP           0x05
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WB           0x06
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_UC           0x07
>-#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_FOLLOW_MTRR
>0xFFFFFFFF
>-/// @}
>-
>-/**
>-  StmUnmapAddressRange enables a SMM guest to remove mappings from
>its page
>-  table.
>-
>-  If TXT_PROCESSOR_SMM_DESCRIPTOR.EptEnabled bit is set by the STM,
>BIOS can
>-  control its own page tables. In this case, the STM implementation may
>-  optionally return ERROR_STM_FUNCTION_NOT_SUPPORTED.
>-
>-  @param  EAX  #STM_API_UNMAP_ADDRESS_RANGE (0x00000002)
>-  @param  EBX  Low 32 bits of virtual address of caller allocated
>-               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure.
>-  @param  ECX  High 32 bits of virtual address of caller allocated
>-               STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR structure. If
>Intel64Mode is
>-               clear (0), ECX must be zero.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The memory range was
>unmapped
>-                as requested.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_FUNCTION_NOT_SUPPORTED
>-                STM supports EPT and has not implemented
>StmUnmapAddressRange().
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_UNMAP_ADDRESS_RANGE                0x00000002
>-
>-/**
>-  STM Unmap Address Range Descriptor for
>#STM_API_UNMAP_ADDRESS_RANGE VMCALL
>-**/
>-typedef struct {
>-  UINT64  VirtualAddress;
>-  UINT32  Length;
>-} STM_UNMAP_ADDRESS_RANGE_DESCRIPTOR;
>-
>-
>-/**
>-  Since the normal OS environment runs with a different set of page tables
>than
>-  the SMM guest, virtual mappings will certainly be different. In order to do a
>-  guest virtual to host physical translation of an address from the normal OS
>-  code (EIP for example), it is necessary to walk the page tables governing the
>-  OS page mappings. Since the SMM guest has no direct access to the page
>tables,
>-  it must ask the STM to do this page table walk. This is supported via the
>-  StmAddressLookup VMCALL. All OS page table formats need to be
>supported,
>-  (e.g. PAE, PSE, Intel64, EPT, etc.)
>-
>-  StmAddressLookup takes a CR3 value and a virtual address from the
>interrupted
>-  code as input and returns the corresponding physical address. It also
>-  optionally maps the physical address into the SMM guest's virtual address
>-  space. This new mapping persists ONLY for the duration of the SMI and if
>-  needed in subsequent SMIs it must be remapped. PAT cache types follow
>the
>-  interrupted environment's page table.
>-
>-  If EPT is enabled, OS CR3 only provides guest physical address information,
>-  but the SMM guest might also need to know the host physical address.
>Since
>-  SMM does not have direct access rights to EPT (it is protected by the STM),
>-  SMM can input InterruptedEptp to let STM help to walk through it, and
>output
>-  the host physical address.
>-
>-  @param  EAX  #STM_API_ADDRESS_LOOKUP (0x00000003)
>-  @param  EBX  Low 32 bits of virtual address of caller allocated
>-               STM_ADDRESS_LOOKUP_DESCRIPTOR structure.
>-  @param  ECX  High 32 bits of virtual address of caller allocated
>-               STM_ADDRESS_LOOKUP_DESCRIPTOR structure. If Intel64Mode is
>-               clear (0), ECX must be zero.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS.  PhysicalAddress contains the
>-                host physical address determined by walking the interrupted SMM
>-                guest's page tables.  SmmGuestVirtualAddress contains the SMM
>-                guest's virtual mapping of the requested address.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_SECURITY_VIOLATION
>-                The requested page was a protected page.
>-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
>-                The requested virtual address did not exist in the page given
>-                page table.
>-  @retval  EAX  #ERROR_STM_BAD_CR3
>-                The CR3 input was invalid. CR3 values must be from one of the
>-                interrupted guest, or from the interrupted guest of another
>-                processor.
>-  @retval  EAX  #ERROR_STM_PHYSICAL_OVER_4G
>-                The resulting physical address is greater than 4G and no virtual
>-                address was supplied. The STM could not determine what address
>-                within the SMM guest's virtual address space to do the mapping.
>-                STM_ADDRESS_LOOKUP_DESCRIPTOR field PhysicalAddress contains
>the
>-                physical address determined by walking the interrupted
>-                environment's page tables.
>-  @retval  EAX  #ERROR_STM_VIRTUAL_SPACE_TOO_SMALL
>-                A specific virtual mapping was requested, but
>-                SmmGuestVirtualAddress + Length exceeds 4G and the SMI handler
>-                is running in 32 bit mode.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_ADDRESS_LOOKUP                     0x00000003
>-
>-/**
>-  STM Lookup Address Range Descriptor for #STM_API_ADDRESS_LOOKUP
>VMCALL
>-**/
>-typedef struct {
>-  UINT64  InterruptedGuestVirtualAddress;
>-  UINT32  Length;
>-  UINT64  InterruptedCr3;
>-  UINT64  InterruptedEptp;
>-  UINT32  MapToSmmGuest:2;
>-  UINT32  InterruptedCr4Pae:1;
>-  UINT32  InterruptedCr4Pse:1;
>-  UINT32  InterruptedIa32eMode:1;
>-  UINT32  Reserved1:27;
>-  UINT32  Reserved2;
>-  UINT64  PhysicalAddress;
>-  UINT64  SmmGuestVirtualAddress;
>-} STM_ADDRESS_LOOKUP_DESCRIPTOR;
>-
>-/**
>-  Define values for the MapToSmmGuest field of
>#STM_ADDRESS_LOOKUP_DESCRIPTOR
>-  @{
>-**/
>-#define STM_ADDRESS_LOOKUP_DESCRIPTOR_DO_NOT_MAP                 0
>-#define STM_ADDRESS_LOOKUP_DESCRIPTOR_ONE_TO_ONE                 1
>-#define
>STM_ADDRESS_LOOKUP_DESCRIPTOR_VIRTUAL_ADDRESS_SPECIFIED  3
>-/// @}
>-
>-
>-/**
>-  When returning from a protection exception (see section 6.2), the SMM
>guest
>-  can instruct the STM to take one of two paths. It can either request a value
>-  be logged to the TXT.ERRORCODE register and subsequently reset the
>machine
>-  (indicating it couldn't resolve the problem), or it can request that the STM
>-  resume the SMM guest again with the specified register state.
>-
>-  Unlike other VMCALL interfaces, StmReturnFromProtectionException
>behaves more
>-  like a jump or an IRET instruction than a "call". It does not return directly
>-  to the caller, but indirectly to a different location specified on the
>-  caller's stack (see section 6.2) or not at all.
>-
>-  If the SMM guest STM protection exception handler itself causes a
>protection
>-  exception (e.g. a single nested exception), or more than 100 un-nested
>-  exceptions occur within the scope of a single SMI event, the STM must write
>-  STM_CRASH_PROTECTION_EXCEPTION_FAILURE to the TXT.ERRORCODE
>register and
>-  assert TXT.CMD.SYS_RESET. The reason for these restrictions is to simplify
>-  the code requirements while still enabling a reasonable debugging capability.
>-
>-  @param  EAX  #STM_API_RETURN_FROM_PROTECTION_EXCEPTION
>(0x00000004)
>-  @param  EBX  If 0, resume SMM guest using register state found on
>exception
>-               stack.  If in range 0x01..0x0F, EBX contains a BIOS error code
>-               which the STM must record in the TXT.ERRORCODE register and
>-               subsequently reset the system via TXT.CMD.SYS_RESET. The value
>-               of the TXT.ERRORCODE register is calculated as follows:
>-
>-                 TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC
>-
>-               Values 0x10..0xFFFFFFFF are reserved, do not use.
>-
>-**/
>-#define STM_API_RETURN_FROM_PROTECTION_EXCEPTION   0x00000004
>-
>-
>-/**
>-  VMCALL API Numbers
>-  API number convention: MLE facing VMCALL interfaces have bit 16 set.
>-
>-  The STM configuration lifecycle is as follows:
>-    1. SENTER->SINIT->MLE: MLE begins execution with SMI disabled (masked).
>-    2. MLE invokes #STM_API_INITIALIZE_PROTECTION VMCALL to prepare
>STM for
>-       setup of initial protection profile. This is done on a single CPU and
>-       has global effect.
>-    3. MLE invokes #STM_API_PROTECT_RESOURCE VMCALL to define the
>initial
>-       protection profile. The protection profile is global across all CPUs.
>-    4. MLE invokes #STM_API_START VMCALL to enable the STM to begin
>receiving
>-       SMI events. This must be done on every logical CPU.
>-    5. MLE may invoke #STM_API_PROTECT_RESOURCE VMCALL or
>-       #STM_API_UNPROTECT_RESOURCE VMCALL during runtime as many
>times as
>-       necessary.
>-    6. MLE invokes #STM_API_STOP VMCALL to disable the STM. SMI is again
>masked
>-       following #STM_API_STOP VMCALL.
>-**/
>-
>-/**
>-  StartStmVmcall() is used to configure an STM that is present in MSEG. SMIs
>-  should remain disabled from the invocation of GETSEC[SENTER] until they
>are
>-  re-enabled by StartStmVMCALL(). When StartStmVMCALL() returns, SMI is
>-  enabled and the STM has been started and is active. Prior to invoking
>-  StartStmVMCALL(), the MLE root should first invoke
>-  InitializeProtectionVMCALL() followed by as many iterations of
>-  ProtectResourceVMCALL() as necessary to establish the initial protection
>-  profile.  StartStmVmcall() must be invoked on all processor threads.
>-
>-  @param  EAX  #STM_API_START (0x00010001)
>-  @param  EDX  STM configuration options. These provide the MLE with the
>-               ability to pass configuration parameters to the STM.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The STM has been configured
>-                and is now active and the guarding all requested resources.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_ALREADY_STARTED
>-                The STM is already configured and active. STM remains active and
>-                guarding previously enabled resource list.
>-  @retval  EAX  #ERROR_STM_WITHOUT_SMX_UNSUPPORTED
>-                The StartStmVMCALL() was invoked from VMX root mode, but
>outside
>-                of SMX. This error code indicates the STM or platform does not
>-                support the STM outside of SMX. The SMI handler remains active
>-                and operates in legacy mode. See Appendix C
>-  @retval  EAX  #ERROR_STM_UNSUPPORTED_MSR_BIT
>-                The CPU doesn't support the MSR bit. The STM is not active.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_START                              (BIT16 | 1)
>-
>-/**
>-  Bit values for EDX input parameter to #STM_API_START VMCALL
>-  @{
>-**/
>-#define STM_CONFIG_SMI_UNBLOCKING_BY_VMX_OFF  BIT0
>-/// @}
>-
>-
>-/**
>-  The StopStmVMCALL() is invoked by the MLE to teardown an active STM.
>This is
>-  normally done as part of a full teardown of the SMX environment when the
>-  system is being shut down. At the time the call is invoked, SMI is enabled
>-  and the STM is active.  When the call returns, the STM has been stopped
>and
>-  all STM context is discarded and SMI is disabled.
>-
>-  @param  EAX  #STM_API_STOP (0x00010002)
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The STM has been stopped and
>-                is no longer processing SMI events. SMI is blocked.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_STOPPED
>-                The STM was not active.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_STOP                               (BIT16 | 2)
>-
>-
>-/**
>-  The ProtectResourceVMCALL() is invoked by the MLE root to request
>protection
>-  of specific resources. The request is defined by a STM_RESOURCE_LIST,
>which
>-  may contain more than one resource descriptor. Each resource descriptor is
>-  processed separately by the STM. Whether or not protection for any specific
>-  resource is granted is returned by the STM via the ReturnStatus bit in the
>-  associated STM_RSC_DESC_HEADER.
>-
>-  @param  EAX  #STM_API_PROTECT_RESOURCE (0x00010003)
>-  @param  EBX  Low 32 bits of physical address of caller allocated
>-               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
>-               making the buffer 4K aligned.
>-  @param  ECX  High 32 bits of physical address of caller allocated
>-               STM_RESOURCE_LIST.
>-
>-  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
>-         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
>-         return, the ReturnStatus bit is set for each resource request granted,
>-         and clear for each resource request denied. There are no other fields
>-         modified by ProtectResourceVMCALL(). The STM_RESOURCE_LIST must
>be
>-         contained entirely within a single 4K page.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The STM has successfully
>-                merged the entire protection request into the active protection
>-                profile.  There is therefore no need to check the ReturnStatus
>-                bits in the STM_RESOURCE_LIST.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_UNPROTECTABLE_RESOURCE
>-                At least one of the requested resource protections intersects a
>-                BIOS required resource. Therefore, the caller must walk through
>-                the STM_RESOURCE_LIST to determine which of the requested
>-                resources was not granted protection. The entire list must be
>-                traversed since there may be multiple failures.
>-  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
>-                The resource list could not be parsed correctly, or did not
>-                terminate before crossing a 4K page boundary. The caller must
>-                walk through the STM_RESOURCE_LIST to determine which of the
>-                requested resources was not granted protection. The entire list
>-                must be traversed since there may be multiple failures.
>-  @retval  EAX  #ERROR_STM_OUT_OF_RESOURCES
>-                The STM has encountered an internal error and cannot complete
>-                the request.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_PROTECT_RESOURCE                   (BIT16 | 3)
>-
>-
>-/**
>-  The UnProtectResourceVMCALL() is invoked by the MLE root to request
>that the
>-  STM allow the SMI handler access to the specified resources.
>-
>-  @param  EAX  #STM_API_UNPROTECT_RESOURCE (0x00010004)
>-  @param  EBX  Low 32 bits of physical address of caller allocated
>-               STM_RESOURCE_LIST. Bits 11:0 are ignored and assumed to be zero,
>-               making the buffer 4K aligned.
>-  @param  ECX  High 32 bits of physical address of caller allocated
>-               STM_RESOURCE_LIST.
>-
>-  @note  All fields of STM_RESOURCE_LIST are inputs only, except for the
>-         ReturnStatus bit. On input, the ReturnStatus bit must be clear. On
>-         return, the ReturnStatus bit is set for each resource processed. For
>-         a properly formed STM_RESOURCE_LIST, this should be all resources
>-         listed. There are no other fields modified by
>-         UnProtectResourceVMCALL(). The STM_RESOURCE_LIST must be
>contained
>-         entirely within a single 4K page.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The requested resources are
>-                not being guarded by the STM.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_MALFORMED_RESOURCE_LIST
>-                The resource list could not be parsed correctly, or did not
>-                terminate before crossing a 4K page boundary. The caller must
>-                walk through the STM_RESOURCE_LIST to determine which of the
>-                requested resources were not able to be unprotected. The entire
>-                list must be traversed since there may be multiple failures.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_UNPROTECT_RESOURCE                 (BIT16 | 4)
>-
>-
>-/**
>-  The GetBiosResourcesVMCALL() is invoked by the MLE root to request the
>list
>-  of BIOS required resources from the STM.
>-
>-  @param  EAX  #STM_API_GET_BIOS_RESOURCES (0x00010005)
>-  @param  EBX  Low 32 bits of physical address of caller allocated destination
>-               buffer. Bits 11:0 are ignored and assumed to be zero, making the
>-               buffer 4K aligned.
>-  @param  ECX  High 32 bits of physical address of caller allocated destination
>-               buffer.
>-  @param  EDX  Indicates which page of the BIOS resource list to copy into the
>-               destination buffer. The first page is indicated by 0, the second
>-               page by 1, etc.
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS. The destination buffer
>-                contains the BIOS required resources. If the page retrieved is
>-                the last page, EDX will be cleared to 0. If there are more pages
>-                to retrieve, EDX is incremented to the next page index. Calling
>-                software should iterate on GetBiosResourcesVMCALL() until EDX is
>-                returned cleared to 0.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_PAGE_NOT_FOUND
>-                The page index supplied in EDX input was out of range.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-  @retval  EDX  Page index of next page to read. A return of EDX=0 signifies
>-                that the entire list has been read.
>-                @note  EDX is both an input and an output register.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_GET_BIOS_RESOURCES                 (BIT16 | 5)
>-
>-
>-/**
>-  The ManageVmcsDatabaseVMCALL() is invoked by the MLE root to add or
>remove an
>-  MLE guest (including the MLE root) from the list of protected domains.
>-
>-  @param  EAX  #STM_API_MANAGE_VMCS_DATABASE (0x00010006)
>-  @param  EBX  Low 32 bits of physical address of caller allocated
>-               STM_VMCS_DATABASE_REQUEST. Bits 11:0 are ignored and assumed
>to
>-               be zero, making the buffer 4K aligned.
>-  @param  ECX  High 32 bits of physical address of caller allocated
>-               STM_VMCS_DATABASE_REQUEST.
>-
>-  @note  All fields of STM_VMCS_DATABASE_REQUEST are inputs only.  They
>are not
>-         modified by ManageVmcsDatabaseVMCALL().
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_INVALID_VMCS
>-                Indicates a request to remove a VMCS from the database was made,
>-                but the referenced VMCS was not found in the database.
>-  @retval  EAX  #ERROR_STM_VMCS_PRESENT
>-                Indicates a request to add a VMCS to the database was made, but
>-                the referenced VMCS was already present in the database.
>-  @retval  EAX  #ERROR_INVALID_PARAMETER
>-                Indicates non-zero reserved field.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_MANAGE_VMCS_DATABASE               (BIT16 | 6)
>-
>-/**
>-  STM VMCS Database Request for #STM_API_MANAGE_VMCS_DATABASE
>VMCALL
>-**/
>-typedef struct {
>-  ///
>-  /// bits 11:0 are reserved and must be 0
>-  ///
>-  UINT64  VmcsPhysPointer;
>-  UINT32  DomainType :4;
>-  UINT32  XStatePolicy :2;
>-  UINT32  DegradationPolicy :4;
>-  ///
>-  /// Must be 0
>-  ///
>-  UINT32  Reserved1 :22;
>-  UINT32  AddOrRemove;
>-} STM_VMCS_DATABASE_REQUEST;
>-
>-/**
>-  Values for the DomainType field of #STM_VMCS_DATABASE_REQUEST
>-  @{
>-**/
>-#define DOMAIN_UNPROTECTED            0
>-#define DOMAIN_DISALLOWED_IO_OUT      BIT0
>-#define DOMAIN_DISALLOWED_IO_IN       BIT1
>-#define DOMAIN_INTEGRITY              BIT2
>-#define DOMAIN_CONFIDENTIALITY        BIT3
>-#define DOMAIN_INTEGRITY_PROT_OUT_IN  (DOMAIN_INTEGRITY)
>-#define DOMAIN_FULLY_PROT_OUT_IN      (DOMAIN_CONFIDENTIALITY |
>DOMAIN_INTEGRITY)
>-#define DOMAIN_FULLY_PROT             (DOMAIN_FULLY_PROT_OUT_IN |
>DOMAIN_DISALLOWED_IO_IN | DOMAIN_DISALLOWED_IO_OUT)
>-/// @}
>-
>-/**
>-  Values for the XStatePolicy field of #STM_VMCS_DATABASE_REQUEST
>-  @{
>-**/
>-#define XSTATE_READWRITE  0x00
>-#define XSTATE_READONLY   0x01
>-#define XSTATE_SCRUB      0x03
>-/// @}
>-
>-/**
>-  Values for the AddOrRemove field of #STM_VMCS_DATABASE_REQUEST
>-  @{
>-**/
>-#define STM_VMCS_DATABASE_REQUEST_ADD     1
>-#define STM_VMCS_DATABASE_REQUEST_REMOVE  0
>-/// @}
>-
>-
>-/**
>-  InitializeProtectionVMCALL() prepares the STM for setup of the initial
>-  protection profile which is subsequently communicated via one or more
>-  invocations of ProtectResourceVMCALL(), prior to invoking
>StartStmVMCALL().
>-  It is only necessary to invoke InitializeProtectionVMCALL() on one processor
>-  thread.  InitializeProtectionVMCALL() does not alter whether SMIs are
>masked
>-  or unmasked. The STM should return back to the MLE with "Blocking by
>SMI" set
>-  to 1 in the GUEST_INTERRUPTIBILITY field for the VMCS the STM created for
>the
>-  MLE guest.
>-
>-  @param  EAX  #STM_API_INITIALIZE_PROTECTION (0x00010007)
>-
>-  @retval  CF   0
>-                No error, EAX set to STM_SUCCESS, EBX bits set to indicate STM
>-                capabilities as defined below. The STM has set up an empty
>-                protection profile, except for the resources that it sets up to
>-                protect itself. The STM must not allow the SMI handler to map
>-                any pages from the MSEG Base to the top of TSEG. The STM must
>-                also not allow SMI handler access to those MSRs which the STM
>-                requires for its own protection.
>-  @retval  CF   1
>-                An error occurred, EAX holds relevant error value.
>-  @retval  EAX  #ERROR_STM_ALREADY_STARTED
>-                The STM is already configured and active. The STM remains active
>-                and guarding the previously enabled resource list.
>-  @retval  EAX  #ERROR_STM_UNPROTECTABLE
>-                The STM determines that based on the platform configuration, the
>-                STM is unable to protect itself. For example, the BIOS required
>-                resource list contains memory pages in MSEG.
>-  @retval  EAX  #ERROR_STM_UNSPECIFIED
>-                An unspecified error occurred.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_INITIALIZE_PROTECTION              (BIT16 | 7)
>-
>-/**
>-  Byte granular support bits returned in EBX from
>#STM_API_INITIALIZE_PROTECTION
>-  @{
>-**/
>-#define STM_RSC_BGI  BIT1
>-#define STM_RSC_BGM  BIT2
>-#define STM_RSC_MSR  BIT3
>-/// @}
>-
>-
>-/**
>-  The ManageEventLogVMCALL() is invoked by the MLE root to control the
>logging
>-  feature. It consists of several sub-functions to facilitate establishment of
>-  the log itself, configuring what events will be logged, and functions to
>-  start, stop, and clear the log.
>-
>-  @param  EAX  #STM_API_MANAGE_EVENT_LOG (0x00010008)
>-  @param  EBX  Low 32 bits of physical address of caller allocated
>-               STM_EVENT_LOG_MANAGEMENT_REQUEST. Bits 11:0 are ignored
>and
>-               assumed to be zero, making the buffer 4K aligned.
>-  @param  ECX  High 32 bits of physical address of caller allocated
>-               STM_EVENT_LOG_MANAGEMENT_REQUEST.
>-
>-  @retval  CF=0
>-           No error, EAX set to STM_SUCCESS.
>-  @retval  CF=1
>-           An error occurred, EAX holds relevant error value. See subfunction
>-           descriptions below for details.
>-
>-  @note  All other registers unmodified.
>-**/
>-#define STM_API_MANAGE_EVENT_LOG                   (BIT16 | 8)
>-
>-///
>-/// STM Event Log Management Request for
>#STM_API_MANAGE_EVENT_LOG VMCALL
>-///
>-typedef struct {
>-  UINT32      SubFunctionIndex;
>-  union {
>-    struct {
>-      UINT32  PageCount;
>-      //
>-      // number of elements is PageCount
>-      //
>-      UINT64  Pages[];
>-    } LogBuffer;
>-    //
>-    // bitmap of EVENT_TYPE
>-    //
>-    UINT32    EventEnableBitmap;
>-  } Data;
>-} STM_EVENT_LOG_MANAGEMENT_REQUEST;
>-
>-/**
>-  Defines values for the SubFunctionIndex field of
>-  #STM_EVENT_LOG_MANAGEMENT_REQUEST
>-  @{
>-**/
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_NEW_LOG        1
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CONFIGURE_LOG  2
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_START_LOG      3
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_STOP_LOG       4
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CLEAR_LOG      5
>-#define STM_EVENT_LOG_MANAGEMENT_REQUEST_DELETE_LOG     6
>-/// @}
>-
>-/**
>-  Log Entry Header
>-**/
>-typedef struct {
>-  UINT32  EventSerialNumber;
>-  UINT16  Type;
>-  UINT16  Lock :1;
>-  UINT16  Valid :1;
>-  UINT16  ReadByMle :1;
>-  UINT16  Wrapped :1;
>-  UINT16  Reserved :12;
>-} LOG_ENTRY_HEADER;
>-
>-/**
>-  Enum values for the Type field of #LOG_ENTRY_HEADER
>-**/
>-typedef enum {
>-  EvtLogStarted,
>-  EvtLogStopped,
>-  EvtLogInvalidParameterDetected,
>-  EvtHandledProtectionException,
>-  ///
>-  /// unhandled protection exceptions result in reset & cannot be logged
>-  ///
>-  EvtBiosAccessToUnclaimedResource,
>-  EvtMleResourceProtectionGranted,
>-  EvtMleResourceProtectionDenied,
>-  EvtMleResourceUnprotect,
>-  EvtMleResourceUnprotectError,
>-  EvtMleDomainTypeDegraded,
>-  ///
>-  /// add more here
>-  ///
>-  EvtMleMax,
>-  ///
>-  /// Not used
>-  ///
>-  EvtInvalid = 0xFFFFFFFF,
>-} EVENT_TYPE;
>-
>-typedef struct {
>-  UINT32  Reserved;
>-} ENTRY_EVT_LOG_STARTED;
>-
>-typedef struct {
>-  UINT32  Reserved;
>-} ENTRY_EVT_LOG_STOPPED;
>-
>-typedef struct {
>-  UINT32  VmcallApiNumber;
>-} ENTRY_EVT_LOG_INVALID_PARAM;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_MLE_RSC_PROT_GRANTED;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_MLE_RSC_PROT_DENIED;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_MLE_RSC_UNPROT;
>-
>-typedef struct {
>-  STM_RSC  Resource;
>-} ENTRY_EVT_MLE_RSC_UNPROT_ERROR;
>-
>-typedef struct {
>-  UINT64  VmcsPhysPointer;
>-  UINT8   ExpectedDomainType;
>-  UINT8   DegradedDomainType;
>-} ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED;
>-
>-typedef union {
>-  ENTRY_EVT_LOG_STARTED                       Started;
>-  ENTRY_EVT_LOG_STOPPED                       Stopped;
>-  ENTRY_EVT_LOG_INVALID_PARAM                 InvalidParam;
>-  ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION
>HandledProtectionException;
>-  ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC         BiosUnclaimedRsc;
>-  ENTRY_EVT_MLE_RSC_PROT_GRANTED              MleRscProtGranted;
>-  ENTRY_EVT_MLE_RSC_PROT_DENIED               MleRscProtDenied;
>-  ENTRY_EVT_MLE_RSC_UNPROT                    MleRscUnprot;
>-  ENTRY_EVT_MLE_RSC_UNPROT_ERROR              MleRscUnprotError;
>-  ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED
>MleDomainTypeDegraded;
>-} LOG_ENTRY_DATA;
>-
>-typedef struct {
>-  LOG_ENTRY_HEADER  Hdr;
>-  LOG_ENTRY_DATA    Data;
>-} STM_LOG_ENTRY;
>-
>-/**
>-  Maximum STM Log Entry Size
>-**/
>-#define STM_LOG_ENTRY_SIZE  256
>-
>-
>-/**
>-  STM Protection Exception Stack Frame Structures
>-**/
>-
>-typedef struct {
>-  UINT32  Rdi;
>-  UINT32  Rsi;
>-  UINT32  Rbp;
>-  UINT32  Rdx;
>-  UINT32  Rcx;
>-  UINT32  Rbx;
>-  UINT32  Rax;
>-  UINT32  Cr3;
>-  UINT32  Cr2;
>-  UINT32  Cr0;
>-  UINT32  VmcsExitInstructionInfo;
>-  UINT32  VmcsExitInstructionLength;
>-  UINT64  VmcsExitQualification;
>-  ///
>-  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
>-  ///
>-  UINT32  ErrorCode;
>-  UINT32  Rip;
>-  UINT32  Cs;
>-  UINT32  Rflags;
>-  UINT32  Rsp;
>-  UINT32  Ss;
>-} STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32;
>-
>-typedef struct {
>-  UINT64  R15;
>-  UINT64  R14;
>-  UINT64  R13;
>-  UINT64  R12;
>-  UINT64  R11;
>-  UINT64  R10;
>-  UINT64  R9;
>-  UINT64  R8;
>-  UINT64  Rdi;
>-  UINT64  Rsi;
>-  UINT64  Rbp;
>-  UINT64  Rdx;
>-  UINT64  Rcx;
>-  UINT64  Rbx;
>-  UINT64  Rax;
>-  UINT64  Cr8;
>-  UINT64  Cr3;
>-  UINT64  Cr2;
>-  UINT64  Cr0;
>-  UINT64  VmcsExitInstructionInfo;
>-  UINT64  VmcsExitInstructionLength;
>-  UINT64  VmcsExitQualification;
>-  ///
>-  /// An TXT_SMM_PROTECTION_EXCEPTION_TYPE num value
>-  ///
>-  UINT64  ErrorCode;
>-  UINT64  Rip;
>-  UINT64  Cs;
>-  UINT64  Rflags;
>-  UINT64  Rsp;
>-  UINT64  Ss;
>-} STM_PROTECTION_EXCEPTION_STACK_FRAME_X64;
>-
>-typedef union {
>-  STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32  *Ia32StackFrame;
>-  STM_PROTECTION_EXCEPTION_STACK_FRAME_X64   *X64StackFrame;
>-} STM_PROTECTION_EXCEPTION_STACK_FRAME;
>-
>-/**
>-  Enum values for the ErrorCode field in
>-  #STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32 and
>-  #STM_PROTECTION_EXCEPTION_STACK_FRAME_X64
>-**/
>-typedef enum {
>-  TxtSmmPageViolation = 1,
>-  TxtSmmMsrViolation,
>-  TxtSmmRegisterViolation,
>-  TxtSmmIoViolation,
>-  TxtSmmPciViolation
>-} TXT_SMM_PROTECTION_EXCEPTION_TYPE;
>-
>-/**
>-  TXT Pocessor SMM Descriptor (PSD) structures
>-**/
>-
>-typedef struct {
>-  UINT64  SpeRip;
>-  UINT64  SpeRsp;
>-  UINT16  SpeSs;
>-  UINT16  PageViolationException:1;
>-  UINT16  MsrViolationException:1;
>-  UINT16  RegisterViolationException:1;
>-  UINT16  IoViolationException:1;
>-  UINT16  PciViolationException:1;
>-  UINT16  Reserved1:11;
>-  UINT32  Reserved2;
>-} STM_PROTECTION_EXCEPTION_HANDLER;
>-
>-typedef struct {
>-  UINT8  ExecutionDisableOutsideSmrr:1;
>-  UINT8  Intel64Mode:1;
>-  UINT8  Cr4Pae : 1;
>-  UINT8  Cr4Pse : 1;
>-  UINT8  Reserved1 : 4;
>-} STM_SMM_ENTRY_STATE;
>-
>-typedef struct {
>-  UINT8  SmramToVmcsRestoreRequired : 1; ///> BIOS restore hint
>-  UINT8  ReinitializeVmcsRequired : 1;   ///> BIOS request
>-  UINT8  Reserved2 : 6;
>-} STM_SMM_RESUME_STATE;
>-
>-typedef struct {
>-  UINT8  DomainType : 4;   ///> STM input to BIOS on each SMI
>-  UINT8  XStatePolicy : 2; ///> STM input to BIOS on each SMI
>-  UINT8  EptEnabled : 1;
>-  UINT8  Reserved3 : 1;
>-} STM_SMM_STATE;
>-
>-#define TXT_SMM_PSD_OFFSET                          0xfb00
>-#define TXT_PROCESSOR_SMM_DESCRIPTOR_SIGNATURE
>SIGNATURE_64('T', 'X', 'T', 'P', 'S', 'S', 'I', 'G')
>-#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MAJOR  1
>-#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MINOR  0
>-
>-typedef struct {
>-  UINT64                            Signature;
>-  UINT16                            Size;
>-  UINT8                             SmmDescriptorVerMajor;
>-  UINT8                             SmmDescriptorVerMinor;
>-  UINT32                            LocalApicId;
>-  STM_SMM_ENTRY_STATE               SmmEntryState;
>-  STM_SMM_RESUME_STATE              SmmResumeState;
>-  STM_SMM_STATE                     StmSmmState;
>-  UINT8                             Reserved4;
>-  UINT16                            SmmCs;
>-  UINT16                            SmmDs;
>-  UINT16                            SmmSs;
>-  UINT16                            SmmOtherSegment;
>-  UINT16                            SmmTr;
>-  UINT16                            Reserved5;
>-  UINT64                            SmmCr3;
>-  UINT64                            SmmStmSetupRip;
>-  UINT64                            SmmStmTeardownRip;
>-  UINT64                            SmmSmiHandlerRip;
>-  UINT64                            SmmSmiHandlerRsp;
>-  UINT64                            SmmGdtPtr;
>-  UINT32                            SmmGdtSize;
>-  UINT32                            RequiredStmSmmRevId;
>-  STM_PROTECTION_EXCEPTION_HANDLER  StmProtectionExceptionHandler;
>-  UINT64                            Reserved6;
>-  UINT64                            BiosHwResourceRequirementsPtr;
>-  // extend area
>-  UINT64                            AcpiRsdp;
>-  UINT8                             PhysicalAddressBits;
>-} TXT_PROCESSOR_SMM_DESCRIPTOR;
>-
>-#pragma pack ()
>+#include <Register/Intel/StmApi.h>
>
> #endif
>--
>2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#45112): https://edk2.groups.io/g/devel/message/45112
Mute This Topic: https://groups.io/mt/32677233/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-