]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / UefiCpuPkg / Library / CpuCommonFeaturesLib / CpuCommonFeaturesLib.c
1 /** @file
2 This library registers CPU features defined in Intel(R) 64 and IA-32
3 Architectures Software Developer's Manual.
4
5 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #include "CpuCommonFeatures.h"
11
12 /**
13 Register CPU features.
14
15 @retval RETURN_SUCCESS Register successfully
16 **/
17 RETURN_STATUS
18 EFIAPI
19 CpuCommonFeaturesLibConstructor (
20 VOID
21 )
22 {
23 RETURN_STATUS Status;
24
25 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {
26 Status = RegisterCpuFeature (
27 "AESNI",
28 AesniGetConfigData,
29 AesniSupport,
30 AesniInitialize,
31 CPU_FEATURE_AESNI,
32 CPU_FEATURE_END
33 );
34 ASSERT_EFI_ERROR (Status);
35 }
36 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {
37 Status = RegisterCpuFeature (
38 "MWAIT",
39 NULL,
40 MonitorMwaitSupport,
41 MonitorMwaitInitialize,
42 CPU_FEATURE_MWAIT,
43 CPU_FEATURE_END
44 );
45 ASSERT_EFI_ERROR (Status);
46 }
47 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {
48 Status = RegisterCpuFeature (
49 "ACPI",
50 NULL,
51 ClockModulationSupport,
52 ClockModulationInitialize,
53 CPU_FEATURE_ACPI,
54 CPU_FEATURE_END
55 );
56 ASSERT_EFI_ERROR (Status);
57 }
58 if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {
59 Status = RegisterCpuFeature (
60 "EIST",
61 NULL,
62 EistSupport,
63 EistInitialize,
64 CPU_FEATURE_EIST,
65 CPU_FEATURE_END
66 );
67 ASSERT_EFI_ERROR (Status);
68 }
69 if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {
70 Status = RegisterCpuFeature (
71 "Execute Disable",
72 NULL,
73 ExecuteDisableSupport,
74 ExecuteDisableInitialize,
75 CPU_FEATURE_XD,
76 CPU_FEATURE_END
77 );
78 ASSERT_EFI_ERROR (Status);
79 }
80 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {
81 Status = RegisterCpuFeature (
82 "FastStrings",
83 NULL,
84 NULL,
85 FastStringsInitialize,
86 CPU_FEATURE_FASTSTRINGS,
87 CPU_FEATURE_END
88 );
89 ASSERT_EFI_ERROR (Status);
90 }
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,
98 CPU_FEATURE_END
99 );
100 ASSERT_EFI_ERROR (Status);
101 }
102 if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {
103 Status = RegisterCpuFeature (
104 "SMX",
105 FeatureControlGetConfigData,
106 SmxSupport,
107 SmxInitialize,
108 CPU_FEATURE_SMX,
109 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
110 CPU_FEATURE_END
111 );
112 ASSERT_EFI_ERROR (Status);
113 }
114 if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {
115 Status = RegisterCpuFeature (
116 "VMX",
117 FeatureControlGetConfigData,
118 VmxSupport,
119 VmxInitialize,
120 CPU_FEATURE_VMX,
121 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
122 CPU_FEATURE_END
123 );
124 ASSERT_EFI_ERROR (Status);
125 }
126 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {
127 Status = RegisterCpuFeature (
128 "Limit CpuId Maximum Value",
129 NULL,
130 LimitCpuidMaxvalSupport,
131 LimitCpuidMaxvalInitialize,
132 CPU_FEATURE_LIMIT_CPUID_MAX_VAL,
133 CPU_FEATURE_END
134 );
135 ASSERT_EFI_ERROR (Status);
136 }
137 if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {
138 Status = RegisterCpuFeature (
139 "Machine Check Enable",
140 NULL,
141 MceSupport,
142 MceInitialize,
143 CPU_FEATURE_MCE,
144 CPU_FEATURE_END
145 );
146 ASSERT_EFI_ERROR (Status);
147 }
148 if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {
149 Status = RegisterCpuFeature (
150 "Machine Check Architect",
151 NULL,
152 McaSupport,
153 McaInitialize,
154 CPU_FEATURE_MCA,
155 CPU_FEATURE_END
156 );
157 ASSERT_EFI_ERROR (Status);
158 }
159 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {
160 Status = RegisterCpuFeature (
161 "MCG_CTL",
162 NULL,
163 McgCtlSupport,
164 McgCtlInitialize,
165 CPU_FEATURE_MCG_CTL,
166 CPU_FEATURE_END
167 );
168 ASSERT_EFI_ERROR (Status);
169 }
170 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {
171 Status = RegisterCpuFeature (
172 "Pending Break",
173 NULL,
174 PendingBreakSupport,
175 PendingBreakInitialize,
176 CPU_FEATURE_PENDING_BREAK,
177 CPU_FEATURE_END
178 );
179 ASSERT_EFI_ERROR (Status);
180 }
181 if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {
182 Status = RegisterCpuFeature (
183 "C1E",
184 NULL,
185 C1eSupport,
186 C1eInitialize,
187 CPU_FEATURE_C1E,
188 CPU_FEATURE_END
189 );
190 ASSERT_EFI_ERROR (Status);
191 }
192 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {
193 Status = RegisterCpuFeature (
194 "X2Apic",
195 X2ApicGetConfigData,
196 X2ApicSupport,
197 X2ApicInitialize,
198 CPU_FEATURE_X2APIC,
199 CPU_FEATURE_END
200 );
201 ASSERT_EFI_ERROR (Status);
202 }
203 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN)) {
204 Status = RegisterCpuFeature (
205 "PPIN",
206 NULL,
207 PpinSupport,
208 PpinInitialize,
209 CPU_FEATURE_PPIN,
210 CPU_FEATURE_END
211 );
212 ASSERT_EFI_ERROR (Status);
213 }
214 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE)) {
215 Status = RegisterCpuFeature (
216 "LMCE",
217 NULL,
218 LmceSupport,
219 LmceInitialize,
220 CPU_FEATURE_LMCE,
221 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
222 CPU_FEATURE_END
223 );
224 ASSERT_EFI_ERROR (Status);
225 }
226 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE)) {
227 Status = RegisterCpuFeature (
228 "Proc Trace",
229 ProcTraceGetConfigData,
230 ProcTraceSupport,
231 ProcTraceInitialize,
232 CPU_FEATURE_PROC_TRACE,
233 CPU_FEATURE_END
234 );
235 ASSERT_EFI_ERROR (Status);
236 }
237
238 return RETURN_SUCCESS;
239 }
240
241
242