From: "Liming Gao" <liming.gao@intel.com>
To: "Ni, Ray" <ray.ni@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Dong, Eric" <eric.dong@intel.com>,
Laszlo Ersek <lersek@redhat.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
Leo Duran <leo.duran@amd.com>,
Brijesh Singh <brijesh.singh@amd.com>
Subject: Re: [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/
Date: Thu, 8 Aug 2019 03:06:03 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E4CC6FA@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190801095831.274356-8-ray.ni@intel.com>
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
next prev parent reply other threads:[~2019-08-08 3:06 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-01 9:58 [PATCH v4 0/8] Support 5-level paging in DXE long mode Ni, Ray
2019-08-01 9:58 ` [PATCH v4 1/8] UefiCpuPkg/MpInitLib: Enable 5-level paging for AP when BSP's enabled Ni, Ray
2019-08-02 1:08 ` Dong, Eric
2019-08-01 9:58 ` [PATCH v4 2/8] UefiCpuPkg/CpuDxe: Remove unnecessary macros Ni, Ray
2019-08-02 1:13 ` Dong, Eric
2019-08-01 9:58 ` [PATCH v4 3/8] UefiCpuPkg/CpuDxe: Support parsing 5-level page table Ni, Ray
2019-08-02 1:20 ` Dong, Eric
2019-08-01 9:58 ` [PATCH v4 4/8] MdeModulePkg/DxeIpl: Introduce PCD PcdUse5LevelPageTable Ni, Ray
2019-08-02 1:22 ` Dong, Eric
2019-08-08 5:30 ` Wu, Hao A
2019-08-08 5:46 ` [edk2-devel] " Liming Gao
2019-08-01 9:58 ` [PATCH v4 5/8] MdePkg/Cpuid.h: Move Cpuid.h from UefiCpuPkg to MdePkg Ni, Ray
2019-08-02 1:28 ` Dong, Eric
2019-08-08 3:03 ` Liming Gao
2019-08-01 9:58 ` [PATCH v4 6/8] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Ni, Ray
2019-08-02 2:23 ` Dong, Eric
2019-08-08 5:34 ` Wu, Hao A
2019-08-01 9:58 ` [PATCH v4 7/8] UefiCpuPkg|MdePkg: Move Register/ folder to MdePkg/Include/ Ni, Ray
2019-08-02 2:25 ` Dong, Eric
2019-08-08 3:06 ` Liming Gao [this message]
2019-08-01 9:58 ` [PATCH v4 8/8] UefiCpuPkg: Update code to include register definitions from MdePkg Ni, Ray
2019-08-02 2:29 ` Dong, Eric
2019-08-07 20:18 ` [edk2-devel] [PATCH v4 0/8] Support 5-level paging in DXE long mode Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14E4CC6FA@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox