2 This library registers CPU features defined in Intel(R) 64 and IA-32
3 Architectures Software Developer's Manual.
5 Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include "CpuCommonFeatures.h"
13 Register CPU features.
15 @retval RETURN_SUCCESS Register successfully
19 CpuCommonFeaturesLibConstructor (
25 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI
)) {
26 Status
= RegisterCpuFeature (
34 ASSERT_EFI_ERROR (Status
);
37 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT
)) {
38 Status
= RegisterCpuFeature (
42 MonitorMwaitInitialize
,
46 ASSERT_EFI_ERROR (Status
);
49 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI
)) {
50 Status
= RegisterCpuFeature (
52 ClockModulationGetConfigData
,
53 ClockModulationSupport
,
54 ClockModulationInitialize
,
58 ASSERT_EFI_ERROR (Status
);
61 if (IsCpuFeatureSupported (CPU_FEATURE_EIST
)) {
62 Status
= RegisterCpuFeature (
70 ASSERT_EFI_ERROR (Status
);
73 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS
)) {
74 Status
= RegisterCpuFeature (
78 FastStringsInitialize
,
79 CPU_FEATURE_FASTSTRINGS
,
82 ASSERT_EFI_ERROR (Status
);
85 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
)) {
86 Status
= RegisterCpuFeature (
87 "Lock Feature Control Register",
89 LockFeatureControlRegisterSupport
,
90 LockFeatureControlRegisterInitialize
,
91 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
,
94 ASSERT_EFI_ERROR (Status
);
97 if (IsCpuFeatureSupported (CPU_FEATURE_SMX
)) {
98 Status
= RegisterCpuFeature (
104 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
107 ASSERT_EFI_ERROR (Status
);
110 if (IsCpuFeatureSupported (CPU_FEATURE_VMX
)) {
111 Status
= RegisterCpuFeature (
117 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
120 ASSERT_EFI_ERROR (Status
);
123 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL
)) {
124 Status
= RegisterCpuFeature (
125 "Limit CpuId Maximum Value",
127 LimitCpuidMaxvalSupport
,
128 LimitCpuidMaxvalInitialize
,
129 CPU_FEATURE_LIMIT_CPUID_MAX_VAL
,
132 ASSERT_EFI_ERROR (Status
);
135 if (IsCpuFeatureSupported (CPU_FEATURE_MCE
)) {
136 Status
= RegisterCpuFeature (
137 "Machine Check Enable",
144 ASSERT_EFI_ERROR (Status
);
147 if (IsCpuFeatureSupported (CPU_FEATURE_MCA
)) {
148 Status
= RegisterCpuFeature (
149 "Machine Check Architect",
156 ASSERT_EFI_ERROR (Status
);
159 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL
)) {
160 Status
= RegisterCpuFeature (
168 ASSERT_EFI_ERROR (Status
);
171 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK
)) {
172 Status
= RegisterCpuFeature (
176 PendingBreakInitialize
,
177 CPU_FEATURE_PENDING_BREAK
,
180 ASSERT_EFI_ERROR (Status
);
183 if (IsCpuFeatureSupported (CPU_FEATURE_C1E
)) {
184 Status
= RegisterCpuFeature (
192 ASSERT_EFI_ERROR (Status
);
195 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC
)) {
196 Status
= RegisterCpuFeature (
204 ASSERT_EFI_ERROR (Status
);
207 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN
)) {
208 Status
= RegisterCpuFeature (
216 ASSERT_EFI_ERROR (Status
);
219 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE
)) {
220 Status
= RegisterCpuFeature (
226 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
229 ASSERT_EFI_ERROR (Status
);
232 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE
)) {
233 Status
= RegisterCpuFeature (
235 ProcTraceGetConfigData
,
238 CPU_FEATURE_PROC_TRACE
,
241 ASSERT_EFI_ERROR (Status
);
244 return RETURN_SUCCESS
;