]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg/CpuFeatures: Change files format to DOS
[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
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "CpuCommonFeatures.h"\r
17\r
18/**\r
19 Register CPU features.\r
20\r
21 @retval RETURN_SUCCESS Register successfully\r
22**/\r
23RETURN_STATUS\r
24EFIAPI\r
25CpuCommonFeaturesLibConstructor (\r
26 VOID\r
27 )\r
28{\r
29 RETURN_STATUS Status;\r
30\r
31 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {\r
32 Status = RegisterCpuFeature (\r
33 "AESNI",\r
34 AesniGetConfigData,\r
35 AesniSupport,\r
36 AesniInitialize,\r
37 CPU_FEATURE_AESNI,\r
38 CPU_FEATURE_END\r
39 );\r
40 ASSERT_EFI_ERROR (Status);\r
41 }\r
42 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
43 Status = RegisterCpuFeature (\r
44 "MWAIT",\r
45 NULL,\r
46 MonitorMwaitSupport,\r
47 MonitorMwaitInitialize,\r
48 CPU_FEATURE_MWAIT,\r
49 CPU_FEATURE_END\r
50 );\r
51 ASSERT_EFI_ERROR (Status);\r
52 }\r
53 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
54 Status = RegisterCpuFeature (\r
55 "ACPI",\r
56 NULL,\r
57 ClockModulationSupport,\r
58 ClockModulationInitialize,\r
59 CPU_FEATURE_ACPI,\r
60 CPU_FEATURE_END\r
61 );\r
62 ASSERT_EFI_ERROR (Status);\r
63 }\r
64 if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
65 Status = RegisterCpuFeature (\r
66 "EIST",\r
67 NULL,\r
68 EistSupport,\r
69 EistInitialize,\r
70 CPU_FEATURE_EIST,\r
71 CPU_FEATURE_END\r
72 );\r
73 ASSERT_EFI_ERROR (Status);\r
74 }\r
75 if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {\r
76 Status = RegisterCpuFeature (\r
77 "Execute Disable",\r
78 NULL,\r
79 ExecuteDisableSupport,\r
80 ExecuteDisableInitialize,\r
81 CPU_FEATURE_XD,\r
82 CPU_FEATURE_END\r
83 );\r
84 ASSERT_EFI_ERROR (Status);\r
85 }\r
86 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
87 Status = RegisterCpuFeature (\r
88 "FastStrings",\r
89 NULL,\r
90 NULL,\r
91 FastStringsInitialize,\r
92 CPU_FEATURE_FASTSTRINGS,\r
93 CPU_FEATURE_END\r
94 );\r
95 ASSERT_EFI_ERROR (Status);\r
96 }\r
97 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
98 Status = RegisterCpuFeature (\r
99 "Lock Feature Control Register",\r
100 FeatureControlGetConfigData,\r
101 LockFeatureControlRegisterSupport,\r
102 LockFeatureControlRegisterInitialize,\r
103 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
104 CPU_FEATURE_END\r
105 );\r
106 ASSERT_EFI_ERROR (Status);\r
107 }\r
108 if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {\r
109 Status = RegisterCpuFeature (\r
110 "SENTER",\r
111 FeatureControlGetConfigData,\r
112 VmxSupport,\r
113 SenterInitialize,\r
114 CPU_FEATURE_SENTER,\r
115 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
116 CPU_FEATURE_SMX | CPU_FEATURE_AFTER,\r
117 CPU_FEATURE_END\r
118 );\r
119 ASSERT_EFI_ERROR (Status);\r
120 }\r
121 if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
122 Status = RegisterCpuFeature (\r
123 "SMX",\r
124 FeatureControlGetConfigData,\r
125 SmxSupport,\r
126 VmxInsideSmxInitialize,\r
127 CPU_FEATURE_SMX,\r
128 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
129 CPU_FEATURE_END\r
130 );\r
131 ASSERT_EFI_ERROR (Status);\r
132 }\r
133 if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
134 Status = RegisterCpuFeature (\r
135 "VMX",\r
136 FeatureControlGetConfigData,\r
137 SmxSupport,\r
138 VmxOutsideSmxInitialize,\r
139 CPU_FEATURE_VMX,\r
140 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
141 CPU_FEATURE_END\r
142 );\r
143 ASSERT_EFI_ERROR (Status);\r
144 }\r
145 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
146 Status = RegisterCpuFeature (\r
147 "Limit CpuId Maximum Value",\r
148 NULL,\r
149 LimitCpuidMaxvalSupport,\r
150 LimitCpuidMaxvalInitialize,\r
151 CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
152 CPU_FEATURE_END\r
153 );\r
154 ASSERT_EFI_ERROR (Status);\r
155 }\r
156 if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
157 Status = RegisterCpuFeature (\r
158 "Machine Check Enable",\r
159 NULL,\r
160 MceSupport,\r
161 MceInitialize,\r
162 CPU_FEATURE_MCE,\r
163 CPU_FEATURE_END\r
164 );\r
165 ASSERT_EFI_ERROR (Status);\r
166 }\r
167 if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
168 Status = RegisterCpuFeature (\r
169 "Machine Check Architect",\r
170 NULL,\r
171 McaSupport,\r
172 McaInitialize,\r
173 CPU_FEATURE_MCA,\r
174 CPU_FEATURE_END\r
175 );\r
176 ASSERT_EFI_ERROR (Status);\r
177 }\r
178 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
179 Status = RegisterCpuFeature (\r
180 "MCG_CTL",\r
181 NULL,\r
182 McgCtlSupport,\r
183 McgCtlInitialize,\r
184 CPU_FEATURE_MCG_CTL,\r
185 CPU_FEATURE_END\r
186 );\r
187 ASSERT_EFI_ERROR (Status);\r
188 }\r
189 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
190 Status = RegisterCpuFeature (\r
191 "Pending Break",\r
192 NULL,\r
193 PendingBreakSupport,\r
194 PendingBreakInitialize,\r
195 CPU_FEATURE_PENDING_BREAK,\r
196 CPU_FEATURE_END\r
197 );\r
198 ASSERT_EFI_ERROR (Status);\r
199 }\r
200 if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
201 Status = RegisterCpuFeature (\r
202 "C1E",\r
203 NULL,\r
204 C1eSupport,\r
205 C1eInitialize,\r
206 CPU_FEATURE_C1E,\r
207 CPU_FEATURE_END\r
208 );\r
209 ASSERT_EFI_ERROR (Status);\r
210 }\r
211 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
212 Status = RegisterCpuFeature (\r
213 "X2Apic",\r
214 NULL,\r
215 X2ApicSupport,\r
216 X2ApicInitialize,\r
217 CPU_FEATURE_X2APIC,\r
218 CPU_FEATURE_END\r
219 );\r
220 ASSERT_EFI_ERROR (Status);\r
221 }\r
222\r
223 return RETURN_SUCCESS;\r
224}\r
225\r
226\r
227\r