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