OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
OcCpuLib.h
Go to the documentation of this file.
1
15#ifndef OC_CPU_LIB_H
16#define OC_CPU_LIB_H
17
18#include <Uefi.h>
22#include <Protocol/MpService.h>
23
28#ifndef OC_FALLBACK_CPU_FREQUENCY
29#define OC_FALLBACK_CPU_FREQUENCY 1000000000
30#endif
31
63
64typedef struct {
65 //
66 // Note, Vendor and BrandString are reordered for proper alignment.
67 //
68 UINT32 Vendor[4];
69 CHAR8 BrandString[48];
70
71 CPUID_VERSION_INFO_EAX CpuidVerEax;
72 CPUID_VERSION_INFO_EBX CpuidVerEbx;
73 CPUID_VERSION_INFO_ECX CpuidVerEcx;
74 CPUID_VERSION_INFO_EDX CpuidVerEdx;
75
76 CPUID_EXTENDED_CPU_SIG_ECX CpuidExtSigEcx;
77 CPUID_EXTENDED_CPU_SIG_EDX CpuidExtSigEdx;
78
80 BOOLEAN Hypervisor;
81
82 UINT8 Type;
83 UINT8 Family;
84 UINT8 Model;
85 UINT8 ExtModel;
86 UINT8 ExtFamily;
87 UINT8 Stepping;
88 UINT64 Features;
90 UINT32 Signature;
91 UINT8 Brand;
94
96
97 UINT32 MaxId;
98 UINT32 MaxExtId;
99
101 UINT16 CoreCount;
103
104 //
105 // External clock for SMBIOS Type4 table.
106 //
108
109 //
110 // Platform-dependent frequency for the Always Running Timer (ART), normally
111 // 24Mhz. The firmware may choose to override this. Some CPUs like Xeon Scalable
112 // use a different frequency. CPUs report the frequency through CPUID.15H.ECX.
113 // If unreported, the frequency is looked up based on the model and family.
114 //
115 // Nominal Core Crystal Clock Frequency for known processor families:
116 // Intel Xeon Scalable with CPUID signature 0x0655: 25 Mhz (server segment)
117 // 6th and 7th generation Intel Core & Xeon W: 24 Mhz (client segment)
118 // Nex Generation Intel Atom with CPUID 0x065C: 19.2 Mhz (atom segment)
119 //
121
122 //
123 // The CPU frequency derived from either CPUFrequencyFromTSC (legacy) or
124 // CPUFrequencyFromART (preferred for Skylake and presumably newer processors
125 // that have an Always Running Timer).
126 //
127 // CPUFrequencyFromTSC should approximate equal CPUFrequencyFromART. If not,
128 // there is likely a bug or miscalculation.
129 //
131
132 //
133 // The CPU frequency as reported by the Time Stamp Counter (TSC).
134 //
136
137 //
138 // The CPU frequency derived from the Always Running Timer (ART) frequency:
139 // TSC Freq = (ART Freq * CPUID.15H:EBX[31:0]) / CPUID.15H:EAX[31:0]
140 //
141 // 0 if ART is not present.
142 //
144
145 //
146 // TSC adjustment value read from MSR_IA32_TSC_ADJUST if present.
147 //
148 UINT64 TscAdjust;
149
150 //
151 // The CPU frequency derived from Apple Platform Info.
152 // 0 if Apple Platform Info is not present.
153 //
155
156 //
157 // The CPU frequency derived from the CPUID VMWare Timing leaf.
158 // 0 if VMWare Timing leaf is not present.
159 //
161
162 //
163 // The Front Side Bus (FSB) frequency calculated from dividing the CPU
164 // frequency by the Max Ratio.
165 //
168
169typedef struct {
170 //
171 // MSR_PLATFORM_INFO
172 //
175
176 //
177 // MSR_TURBO_RATIO_LIMIT
178 //
181
182 //
183 // MSR_PKG_POWER_INFO (TODO: To be confirmed)
184 //
187
188 //
189 // IA32_MISC_ENABLE
190 //
193
194 //
195 // MSR_IA32_EXT_CONFIG
196 //
199
200 //
201 // MSR_FSB_FREQ
202 //
205
206 //
207 // MSR_IA32_PERF_STATUS
208 //
211
212 //
213 // MSR_BROADWELL_PKG_CST_CONFIG_CONTROL_REGISTER (0xE2)
214 //
215 BOOLEAN CpuHasMsrE2;
218
219//
220// Wrapped structure to be passed as ProcedureArgument to MpServices->StartupAllAPs ().
221//
222typedef struct {
223 //
224 // Pointer to MP Services.
225 //
226 EFI_MP_SERVICES_PROTOCOL *MpServices;
227 //
228 // Pointer to CPU MSR report list.
229 //
231 //
232 // Pointer to the CPU Info.
233 //
236
242VOID
244 IN OUT OC_CPU_INFO *Cpu
245 );
246
253VOID
255 IN OC_CPU_INFO *CpuInfo,
256 OUT OC_CPU_MSR_REPORT *Report
257 );
258
264VOID
265EFIAPI
267 IN OUT VOID *Buffer
268 );
269
280 IN OC_CPU_INFO *CpuInfo,
281 OUT UINTN *EntryCount
282 );
283
290VOID
292 IN OC_CPU_INFO *Cpu
293 );
294
303EFI_STATUS
305 VOID
306 );
307
321EFI_STATUS
323 IN OC_CPU_INFO *Cpu,
324 IN UINTN Timeout
325 );
326
336UINT32
338 IN CPUID_VERSION_INFO_EAX VersionEax
339 );
340
349UINT16
351 IN UINT64 Frequency
352 );
353
359UINT64
361 VOID
362 );
363
364#endif // OC_CPU_LIB_H_
UINT8 Vendor[11]
This is always 0x43f and can be used to identify an Apple Remote.
Definition AppleNec.h:64
UINT64 OcGetTSCFrequency(VOID)
OC_CPU_GENERATION
Definition OcCpuLib.h:35
@ OcCpuGenerationPenryn
Definition OcCpuLib.h:40
@ OcCpuGenerationBroadwell
Definition OcCpuLib.h:49
@ OcCpuGenerationNehalem
Definition OcCpuLib.h:42
@ OcCpuGenerationRaptorLake
Definition OcCpuLib.h:59
@ OcCpuGenerationHaswell
Definition OcCpuLib.h:48
@ OcCpuGenerationWestmere
Definition OcCpuLib.h:43
@ OcCpuGenerationIceLake
Definition OcCpuLib.h:56
@ OcCpuGenerationCoffeeLake
Definition OcCpuLib.h:52
@ OcCpuGenerationMaxGeneration
Definition OcCpuLib.h:61
@ OcCpuGenerationUnknown
Definition OcCpuLib.h:36
@ OcCpuGenerationArrowLake
Definition OcCpuLib.h:60
@ OcCpuGenerationBonnell
Definition OcCpuLib.h:41
@ OcCpuGenerationSilvermont
Definition OcCpuLib.h:44
@ OcCpuGenerationIvyBridge
Definition OcCpuLib.h:47
@ OcCpuGenerationTigerLake
Definition OcCpuLib.h:57
@ OcCpuGenerationKabyLake
Definition OcCpuLib.h:51
@ OcCpuGenerationSandyBridge
Definition OcCpuLib.h:45
@ OcCpuGenerationRocketLake
Definition OcCpuLib.h:54
@ OcCpuGenerationAlderLake
Definition OcCpuLib.h:58
@ OcCpuGenerationCometLake
Definition OcCpuLib.h:53
@ OcCpuGenerationYonahMerom
Definition OcCpuLib.h:39
@ OcCpuGenerationPostSandyBridge
Definition OcCpuLib.h:46
@ OcCpuGenerationCannonLake
Definition OcCpuLib.h:55
@ OcCpuGenerationBanias
Definition OcCpuLib.h:37
@ OcCpuGenerationSkylake
Definition OcCpuLib.h:50
@ OcCpuGenerationPreYonah
Definition OcCpuLib.h:38
EFI_STATUS OcCpuEnableVmx(VOID)
Definition OcCpuLib.c:1256
EFI_STATUS OcCpuCorrectTscSync(IN OC_CPU_INFO *Cpu, IN UINTN Timeout)
Definition OcCpuLib.c:1324
VOID OcCpuScanProcessor(IN OUT OC_CPU_INFO *Cpu)
Definition OcCpuLib.c:832
UINT32 OcCpuModelToAppleFamily(IN CPUID_VERSION_INFO_EAX VersionEax)
VOID OcCpuCorrectFlexRatio(IN OC_CPU_INFO *Cpu)
Definition OcCpuLib.c:1231
VOID OcCpuGetMsrReport(IN OC_CPU_INFO *CpuInfo, OUT OC_CPU_MSR_REPORT *Report)
Definition OcCpuLib.c:1049
VOID EFIAPI OcCpuGetMsrReportPerCore(IN OUT VOID *Buffer)
Definition OcCpuLib.c:1131
OC_CPU_MSR_REPORT * OcCpuGetMsrReports(IN OC_CPU_INFO *CpuInfo, OUT UINTN *EntryCount)
Definition OcCpuLib.c:1153
UINT16 OcCpuFrequencyToDisplayFrequency(IN UINT64 Frequency)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
UINT8 Model
Definition OcCpuLib.h:84
UINT8 ExtFamily
Definition OcCpuLib.h:86
CPUID_VERSION_INFO_EBX CpuidVerEbx
Definition OcCpuLib.h:72
UINT16 ExternalClock
Definition OcCpuLib.h:107
UINT8 Family
Definition OcCpuLib.h:83
UINT32 Signature
Definition OcCpuLib.h:90
UINT8 Type
Definition OcCpuLib.h:82
CPUID_VERSION_INFO_EDX CpuidVerEdx
Definition OcCpuLib.h:74
UINT8 Stepping
Definition OcCpuLib.h:87
OC_CPU_GENERATION CpuGeneration
Definition OcCpuLib.h:95
UINT64 ExtFeatures
Definition OcCpuLib.h:89
UINT16 PackageCount
Definition OcCpuLib.h:100
CPUID_VERSION_INFO_ECX CpuidVerEcx
Definition OcCpuLib.h:73
UINT8 ExtModel
Definition OcCpuLib.h:85
UINT64 TscAdjust
Definition OcCpuLib.h:148
UINT64 ARTFrequency
Definition OcCpuLib.h:120
UINT32 MaxId
Definition OcCpuLib.h:97
UINT64 CPUFrequencyFromART
Definition OcCpuLib.h:143
UINT64 CPUFrequencyFromTSC
Definition OcCpuLib.h:135
UINT64 CPUFrequencyFromApple
Definition OcCpuLib.h:154
BOOLEAN CstConfigLock
Definition OcCpuLib.h:93
UINT32 MicrocodeRevision
Definition OcCpuLib.h:79
UINT64 CPUFrequencyFromVMT
Definition OcCpuLib.h:160
CPUID_EXTENDED_CPU_SIG_EDX CpuidExtSigEdx
Definition OcCpuLib.h:77
UINT64 CPUFrequency
Definition OcCpuLib.h:130
UINT64 Features
Definition OcCpuLib.h:88
BOOLEAN Hypervisor
indicate whether we are under virtualization
Definition OcCpuLib.h:80
CPUID_VERSION_INFO_EAX CpuidVerEax
Definition OcCpuLib.h:71
UINT64 FSBFrequency
Definition OcCpuLib.h:166
UINT16 ThreadCount
Definition OcCpuLib.h:102
CPUID_EXTENDED_CPU_SIG_ECX CpuidExtSigEcx
Definition OcCpuLib.h:76
UINT16 AppleProcessorType
Definition OcCpuLib.h:92
UINT16 CoreCount
Definition OcCpuLib.h:101
UINT8 Brand
Definition OcCpuLib.h:91
UINT32 MaxExtId
Definition OcCpuLib.h:98
EFI_MP_SERVICES_PROTOCOL * MpServices
Definition OcCpuLib.h:226
BOOLEAN CpuHasMsrE2
Definition OcCpuLib.h:215
BOOLEAN CpuHasMsrIa32MiscEnable
Definition OcCpuLib.h:191
BOOLEAN CpuHasMsrIa32PerfStatus
Definition OcCpuLib.h:209
UINT64 CpuMsrPlatformInfoValue
Definition OcCpuLib.h:174
BOOLEAN CpuHasMsrTurboRatioLimit
Definition OcCpuLib.h:179
UINT64 CpuMsrIa32ExtConfigValue
Definition OcCpuLib.h:198
UINT64 CpuMsrTurboRatioLimitValue
Definition OcCpuLib.h:180
BOOLEAN CpuHasMsrPlatformInfo
Definition OcCpuLib.h:173
BOOLEAN CpuHasMsrFsbFreq
Definition OcCpuLib.h:203
UINT64 CpuMsrFsbFreqValue
Definition OcCpuLib.h:204
UINT64 CpuMsrIa32PerfStatusValue
Definition OcCpuLib.h:210
UINT64 CpuMsrE2Value
Definition OcCpuLib.h:216
BOOLEAN CpuHasMsrIa32ExtConfig
Definition OcCpuLib.h:197
UINT64 CpuMsrIa32MiscEnableValue
Definition OcCpuLib.h:192
UINT64 CpuMsrPkgPowerInfoValue
Definition OcCpuLib.h:186
BOOLEAN CpuHasMsrPkgPowerInfo
Definition OcCpuLib.h:185