25 IN EFI_FILE_PROTOCOL *Root
35 CHAR16 TmpFileName[32];
40 FileBufferSize = SIZE_1KB;
41 FileBuffer = AllocateZeroPool (FileBufferSize);
42 if (FileBuffer == NULL) {
43 return EFI_OUT_OF_RESOURCES;
52 "CPU BrandString: %a\nMicrocodeRevision: 0x%08X\nVirtualization %d\n",
54 CpuInfo->MicrocodeRevision,
60 "CPUID %08X %08X %08X %08X\nExtSigEcx %08X\nExtSigEdx %08X\n",
61 CpuInfo->CpuidVerEax.Uint32,
62 CpuInfo->CpuidVerEbx.Uint32,
63 CpuInfo->CpuidVerEcx.Uint32,
64 CpuInfo->CpuidVerEdx.Uint32,
65 CpuInfo->CpuidExtSigEcx.Uint32,
66 CpuInfo->CpuidExtSigEdx.Uint32
71 "Type 0x%02X\nFamily 0x%02X\nModel 0x%02X\nExtModel 0x%02X\nExtFamily 0x%02X\nStepping 0x%02X\n",
82 "Features 0x%16LX\nExtFeatures 0x%16LX\nSignature 0x%08X\n",
90 "Brand 0x%02X\nAppleProcessorType 0x%04X\nCstConfigLock %d\nCpuGeneration %d\n",
92 CpuInfo->AppleProcessorType,
93 CpuInfo->CstConfigLock,
94 CpuInfo->CpuGeneration
99 "MaxId 0x%08X\nMaxExtId 0x%08X\n",
106 "PackageCount %u\nCoreCount %u\nThreadCount %u\n",
107 CpuInfo->PackageCount,
114 "ExternalClock %u\n",
115 CpuInfo->ExternalClock
120 "ARTFrequency %Lu\nCPUFrequency %Lu\nCPUFrequencyFromTSC %Lu\nCPUFrequencyFromART %Lu\nTscAdjust %Lu\nCPUFrequencyFromApple %Lu\nCPUFrequencyFromVMT %Lu\nFSBFrequency %Lu\n\n",
121 CpuInfo->ARTFrequency,
122 CpuInfo->CPUFrequency,
123 CpuInfo->CPUFrequencyFromTSC,
124 CpuInfo->CPUFrequencyFromART,
126 CpuInfo->CPUFrequencyFromApple,
127 CpuInfo->CPUFrequencyFromVMT,
128 CpuInfo->FSBFrequency
135 if (Reports == NULL) {
136 return EFI_UNSUPPORTED;
139 for (Index = 0; Index < EntryCount; ++Index) {
145 if (Reports[Index].CpuHasMsrPlatformInfo) {
146 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_PLATFORM_INFO: 0x%llX\n", Reports[Index].CpuMsrPlatformInfoValue);
152 if (Reports[Index].CpuHasMsrTurboRatioLimit) {
153 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_TURBO_RATIO_LIMIT: 0x%llX\n", Reports[Index].CpuMsrTurboRatioLimitValue);
159 if (Reports[Index].CpuHasMsrPkgPowerInfo) {
160 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_PKG_POWER_INFO: 0x%llX\n", Reports[Index].CpuMsrPkgPowerInfoValue);
166 if (Reports[Index].CpuHasMsrE2) {
167 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_BROADWELL_PKG_CST_CONFIG_CONTROL_REGISTER (0xE2): 0x%llX\n", Reports[Index].CpuMsrPkgPowerInfoValue);
173 if (Reports[Index].CpuHasMsrIa32MiscEnable) {
174 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_IA32_MISC_ENABLE: 0x%llX\n", Reports[Index].CpuMsrIa32MiscEnableValue);
180 if (Reports[Index].CpuHasMsrIa32ExtConfig) {
181 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_IA32_EXT_CONFIG: 0x%llX\n", Reports[Index].CpuMsrIa32ExtConfigValue);
187 if (Reports[Index].CpuHasMsrFsbFreq) {
188 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_FSB_FREQ: 0x%llX\n", Reports[Index].CpuMsrFsbFreqValue);
194 if (Reports[Index].CpuHasMsrIa32PerfStatus) {
195 OcAsciiPrintBuffer (&FileBuffer, &FileBufferSize,
"MSR_IA32_PERF_STATUS: 0x%llX\n", Reports[Index].CpuMsrIa32PerfStatusValue);
204 if (FileBuffer != NULL) {
205 UnicodeSPrint (TmpFileName,
sizeof (TmpFileName), L
"CPUInfo.txt");
206 Status =
OcSetFileData (Root, TmpFileName, FileBuffer, (UINT32)AsciiStrLen (FileBuffer));
207 DEBUG ((DEBUG_INFO,
"OCDM: Dumped CPU info - %r\n", Status));
209 FreePool (FileBuffer);