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
);
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 (
50 ClockModulationGetConfigData
,
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_FASTSTRINGS
)) {
70 Status
= RegisterCpuFeature (
74 FastStringsInitialize
,
75 CPU_FEATURE_FASTSTRINGS
,
78 ASSERT_EFI_ERROR (Status
);
80 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
)) {
81 Status
= RegisterCpuFeature (
82 "Lock Feature Control Register",
84 LockFeatureControlRegisterSupport
,
85 LockFeatureControlRegisterInitialize
,
86 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
,
89 ASSERT_EFI_ERROR (Status
);
91 if (IsCpuFeatureSupported (CPU_FEATURE_SMX
)) {
92 Status
= RegisterCpuFeature (
98 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
101 ASSERT_EFI_ERROR (Status
);
103 if (IsCpuFeatureSupported (CPU_FEATURE_VMX
)) {
104 Status
= RegisterCpuFeature (
110 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
113 ASSERT_EFI_ERROR (Status
);
115 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL
)) {
116 Status
= RegisterCpuFeature (
117 "Limit CpuId Maximum Value",
119 LimitCpuidMaxvalSupport
,
120 LimitCpuidMaxvalInitialize
,
121 CPU_FEATURE_LIMIT_CPUID_MAX_VAL
,
124 ASSERT_EFI_ERROR (Status
);
126 if (IsCpuFeatureSupported (CPU_FEATURE_MCE
)) {
127 Status
= RegisterCpuFeature (
128 "Machine Check Enable",
135 ASSERT_EFI_ERROR (Status
);
137 if (IsCpuFeatureSupported (CPU_FEATURE_MCA
)) {
138 Status
= RegisterCpuFeature (
139 "Machine Check Architect",
146 ASSERT_EFI_ERROR (Status
);
148 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL
)) {
149 Status
= RegisterCpuFeature (
157 ASSERT_EFI_ERROR (Status
);
159 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK
)) {
160 Status
= RegisterCpuFeature (
164 PendingBreakInitialize
,
165 CPU_FEATURE_PENDING_BREAK
,
168 ASSERT_EFI_ERROR (Status
);
170 if (IsCpuFeatureSupported (CPU_FEATURE_C1E
)) {
171 Status
= RegisterCpuFeature (
179 ASSERT_EFI_ERROR (Status
);
181 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC
)) {
182 Status
= RegisterCpuFeature (
190 ASSERT_EFI_ERROR (Status
);
192 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN
)) {
193 Status
= RegisterCpuFeature (
201 ASSERT_EFI_ERROR (Status
);
203 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE
)) {
204 Status
= RegisterCpuFeature (
210 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_THREAD_BEFORE
,
213 ASSERT_EFI_ERROR (Status
);
215 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE
)) {
216 Status
= RegisterCpuFeature (
218 ProcTraceGetConfigData
,
221 CPU_FEATURE_PROC_TRACE
,
224 ASSERT_EFI_ERROR (Status
);
227 return RETURN_SUCCESS
;