X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FLibrary%2FCpuCommonFeaturesLib%2FCpuCommonFeaturesLib.c;h=bbaffc538d8b507b89e6e2a24b033e254b07aac8;hp=65ed756cc578fcda55f0fab415a5d981a1f04b0b;hb=147fd35c3e389ecd025dbfd243312bf5b22da7c9;hpb=0a70d1c3042956c418c89a703d40d3262e4d6c87
diff --git a/UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c b/UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
index 65ed756cc5..bbaffc538d 100644
--- a/UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
+++ b/UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
@@ -1,227 +1,248 @@
-/** @file
- This library registers CPU features defined in Intel(R) 64 and IA-32
- Architectures Software Developer's Manual.
-
- Copyright (c) 2017, Intel Corporation. All rights reserved.
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
- Register CPU features.
-
- @retval RETURN_SUCCESS Register successfully
-**/
-RETURN_STATUS
-EFIAPI
-CpuCommonFeaturesLibConstructor (
- VOID
- )
-{
- RETURN_STATUS Status;
-
- if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {
- Status = RegisterCpuFeature (
- "AESNI",
- AesniGetConfigData,
- AesniSupport,
- AesniInitialize,
- CPU_FEATURE_AESNI,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {
- Status = RegisterCpuFeature (
- "MWAIT",
- NULL,
- MonitorMwaitSupport,
- MonitorMwaitInitialize,
- CPU_FEATURE_MWAIT,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {
- Status = RegisterCpuFeature (
- "ACPI",
- NULL,
- ClockModulationSupport,
- ClockModulationInitialize,
- CPU_FEATURE_ACPI,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {
- Status = RegisterCpuFeature (
- "EIST",
- NULL,
- EistSupport,
- EistInitialize,
- CPU_FEATURE_EIST,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {
- Status = RegisterCpuFeature (
- "Execute Disable",
- NULL,
- ExecuteDisableSupport,
- ExecuteDisableInitialize,
- CPU_FEATURE_XD,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {
- Status = RegisterCpuFeature (
- "FastStrings",
- NULL,
- NULL,
- FastStringsInitialize,
- CPU_FEATURE_FASTSTRINGS,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {
- Status = RegisterCpuFeature (
- "Lock Feature Control Register",
- FeatureControlGetConfigData,
- LockFeatureControlRegisterSupport,
- LockFeatureControlRegisterInitialize,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {
- Status = RegisterCpuFeature (
- "SENTER",
- FeatureControlGetConfigData,
- VmxSupport,
- SenterInitialize,
- CPU_FEATURE_SENTER,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_SMX | CPU_FEATURE_AFTER,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {
- Status = RegisterCpuFeature (
- "SMX",
- FeatureControlGetConfigData,
- SmxSupport,
- VmxInsideSmxInitialize,
- CPU_FEATURE_SMX,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {
- Status = RegisterCpuFeature (
- "VMX",
- FeatureControlGetConfigData,
- SmxSupport,
- VmxOutsideSmxInitialize,
- CPU_FEATURE_VMX,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {
- Status = RegisterCpuFeature (
- "Limit CpuId Maximum Value",
- NULL,
- LimitCpuidMaxvalSupport,
- LimitCpuidMaxvalInitialize,
- CPU_FEATURE_LIMIT_CPUID_MAX_VAL,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {
- Status = RegisterCpuFeature (
- "Machine Check Enable",
- NULL,
- MceSupport,
- MceInitialize,
- CPU_FEATURE_MCE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {
- Status = RegisterCpuFeature (
- "Machine Check Architect",
- NULL,
- McaSupport,
- McaInitialize,
- CPU_FEATURE_MCA,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {
- Status = RegisterCpuFeature (
- "MCG_CTL",
- NULL,
- McgCtlSupport,
- McgCtlInitialize,
- CPU_FEATURE_MCG_CTL,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {
- Status = RegisterCpuFeature (
- "Pending Break",
- NULL,
- PendingBreakSupport,
- PendingBreakInitialize,
- CPU_FEATURE_PENDING_BREAK,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {
- Status = RegisterCpuFeature (
- "C1E",
- NULL,
- C1eSupport,
- C1eInitialize,
- CPU_FEATURE_C1E,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {
- Status = RegisterCpuFeature (
- "X2Apic",
- NULL,
- X2ApicSupport,
- X2ApicInitialize,
- CPU_FEATURE_X2APIC,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- return RETURN_SUCCESS;
-}
-
-
-
+/** @file
+ This library registers CPU features defined in Intel(R) 64 and IA-32
+ Architectures Software Developer's Manual.
+
+ Copyright (c) 2017, Intel Corporation. All rights reserved.
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include "CpuCommonFeatures.h"
+
+/**
+ Register CPU features.
+
+ @retval RETURN_SUCCESS Register successfully
+**/
+RETURN_STATUS
+EFIAPI
+CpuCommonFeaturesLibConstructor (
+ VOID
+ )
+{
+ RETURN_STATUS Status;
+
+ if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {
+ Status = RegisterCpuFeature (
+ "AESNI",
+ AesniGetConfigData,
+ AesniSupport,
+ AesniInitialize,
+ CPU_FEATURE_AESNI,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {
+ Status = RegisterCpuFeature (
+ "MWAIT",
+ NULL,
+ MonitorMwaitSupport,
+ MonitorMwaitInitialize,
+ CPU_FEATURE_MWAIT,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {
+ Status = RegisterCpuFeature (
+ "ACPI",
+ NULL,
+ ClockModulationSupport,
+ ClockModulationInitialize,
+ CPU_FEATURE_ACPI,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {
+ Status = RegisterCpuFeature (
+ "EIST",
+ NULL,
+ EistSupport,
+ EistInitialize,
+ CPU_FEATURE_EIST,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {
+ Status = RegisterCpuFeature (
+ "Execute Disable",
+ NULL,
+ ExecuteDisableSupport,
+ ExecuteDisableInitialize,
+ CPU_FEATURE_XD,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {
+ Status = RegisterCpuFeature (
+ "FastStrings",
+ NULL,
+ NULL,
+ FastStringsInitialize,
+ CPU_FEATURE_FASTSTRINGS,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {
+ Status = RegisterCpuFeature (
+ "Lock Feature Control Register",
+ FeatureControlGetConfigData,
+ LockFeatureControlRegisterSupport,
+ LockFeatureControlRegisterInitialize,
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {
+ Status = RegisterCpuFeature (
+ "SMX",
+ FeatureControlGetConfigData,
+ SmxSupport,
+ SmxInitialize,
+ CPU_FEATURE_SMX,
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {
+ Status = RegisterCpuFeature (
+ "VMX",
+ FeatureControlGetConfigData,
+ VmxSupport,
+ VmxInitialize,
+ CPU_FEATURE_VMX,
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {
+ Status = RegisterCpuFeature (
+ "Limit CpuId Maximum Value",
+ NULL,
+ LimitCpuidMaxvalSupport,
+ LimitCpuidMaxvalInitialize,
+ CPU_FEATURE_LIMIT_CPUID_MAX_VAL,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {
+ Status = RegisterCpuFeature (
+ "Machine Check Enable",
+ NULL,
+ MceSupport,
+ MceInitialize,
+ CPU_FEATURE_MCE,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {
+ Status = RegisterCpuFeature (
+ "Machine Check Architect",
+ NULL,
+ McaSupport,
+ McaInitialize,
+ CPU_FEATURE_MCA,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {
+ Status = RegisterCpuFeature (
+ "MCG_CTL",
+ NULL,
+ McgCtlSupport,
+ McgCtlInitialize,
+ CPU_FEATURE_MCG_CTL,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {
+ Status = RegisterCpuFeature (
+ "Pending Break",
+ NULL,
+ PendingBreakSupport,
+ PendingBreakInitialize,
+ CPU_FEATURE_PENDING_BREAK,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {
+ Status = RegisterCpuFeature (
+ "C1E",
+ NULL,
+ C1eSupport,
+ C1eInitialize,
+ CPU_FEATURE_C1E,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {
+ Status = RegisterCpuFeature (
+ "X2Apic",
+ X2ApicGetConfigData,
+ X2ApicSupport,
+ X2ApicInitialize,
+ CPU_FEATURE_X2APIC,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_PPIN)) {
+ Status = RegisterCpuFeature (
+ "PPIN",
+ NULL,
+ PpinSupport,
+ PpinInitialize,
+ CPU_FEATURE_PPIN,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_LMCE)) {
+ Status = RegisterCpuFeature (
+ "LMCE",
+ NULL,
+ LmceSupport,
+ LmceInitialize,
+ CPU_FEATURE_LMCE,
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE)) {
+ Status = RegisterCpuFeature (
+ "Proc Trace",
+ ProcTraceGetConfigData,
+ ProcTraceSupport,
+ ProcTraceInitialize,
+ CPU_FEATURE_PROC_TRACE,
+ CPU_FEATURE_END
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ return RETURN_SUCCESS;
+}
+
+
+