2 This library registers CPU features defined in Intel(R) 64 and IA-32
3 Architectures Software Developer's Manual.
5 Copyright (c) 2017, 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
);
36 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT
)) {
37 Status
= RegisterCpuFeature (
41 MonitorMwaitInitialize
,
45 ASSERT_EFI_ERROR (Status
);
47 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI
)) {
48 Status
= RegisterCpuFeature (
51 ClockModulationSupport
,
52 ClockModulationInitialize
,
56 ASSERT_EFI_ERROR (Status
);
58 if (IsCpuFeatureSupported (CPU_FEATURE_EIST
)) {
59 Status
= RegisterCpuFeature (
67 ASSERT_EFI_ERROR (Status
);
69 if (IsCpuFeatureSupported (CPU_FEATURE_XD
)) {
70 Status
= RegisterCpuFeature (
73 ExecuteDisableSupport
,
74 ExecuteDisableInitialize
,
78 ASSERT_EFI_ERROR (Status
);
80 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS
)) {
81 Status
= RegisterCpuFeature (
85 FastStringsInitialize
,
86 CPU_FEATURE_FASTSTRINGS
,
89 ASSERT_EFI_ERROR (Status
);
91 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
)) {
92 Status
= RegisterCpuFeature (
93 "Lock Feature Control Register",
94 FeatureControlGetConfigData
,
95 LockFeatureControlRegisterSupport
,
96 LockFeatureControlRegisterInitialize
,
97 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
,
100 ASSERT_EFI_ERROR (Status
);
102 if (IsCpuFeatureSupported (CPU_FEATURE_SMX
)) {
103 Status
= RegisterCpuFeature (
105 FeatureControlGetConfigData
,
109 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
112 ASSERT_EFI_ERROR (Status
);
114 if (IsCpuFeatureSupported (CPU_FEATURE_VMX
)) {
115 Status
= RegisterCpuFeature (
117 FeatureControlGetConfigData
,
121 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
124 ASSERT_EFI_ERROR (Status
);
126 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL
)) {
127 Status
= RegisterCpuFeature (
128 "Limit CpuId Maximum Value",
130 LimitCpuidMaxvalSupport
,
131 LimitCpuidMaxvalInitialize
,
132 CPU_FEATURE_LIMIT_CPUID_MAX_VAL
,
135 ASSERT_EFI_ERROR (Status
);
137 if (IsCpuFeatureSupported (CPU_FEATURE_MCE
)) {
138 Status
= RegisterCpuFeature (
139 "Machine Check Enable",
146 ASSERT_EFI_ERROR (Status
);
148 if (IsCpuFeatureSupported (CPU_FEATURE_MCA
)) {
149 Status
= RegisterCpuFeature (
150 "Machine Check Architect",
157 ASSERT_EFI_ERROR (Status
);
159 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL
)) {
160 Status
= RegisterCpuFeature (
168 ASSERT_EFI_ERROR (Status
);
170 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK
)) {
171 Status
= RegisterCpuFeature (
175 PendingBreakInitialize
,
176 CPU_FEATURE_PENDING_BREAK
,
179 ASSERT_EFI_ERROR (Status
);
181 if (IsCpuFeatureSupported (CPU_FEATURE_C1E
)) {
182 Status
= RegisterCpuFeature (
190 ASSERT_EFI_ERROR (Status
);
192 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC
)) {
193 Status
= RegisterCpuFeature (
201 ASSERT_EFI_ERROR (Status
);
203 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN
)) {
204 Status
= RegisterCpuFeature (
212 ASSERT_EFI_ERROR (Status
);
214 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE
)) {
215 Status
= RegisterCpuFeature (
217 FeatureControlGetConfigData
,
221 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
224 ASSERT_EFI_ERROR (Status
);
226 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE
)) {
227 Status
= RegisterCpuFeature (
229 ProcTraceGetConfigData
,
232 CPU_FEATURE_PROC_TRACE
,
235 ASSERT_EFI_ERROR (Status
);
238 return RETURN_SUCCESS
;