rendered paste bodyvoid AppleSMBIOS::
processSMBIOSStructure( const SMBProcessorInformation * cpu,
SMBPackedStrings * strings )
{
if (cpu->header.length < 26)
return;
if (fVerbose)
{
IOLog("--- SMBIOS Processor Information --\n");
IOLog("socketDesignation = %s\n",
strings->stringAtIndex(cpu->socketDesignation));
IOLog("processorType = 0x%x\n", cpu->processorType);
IOLog("processorFamily = 0x%x\n", cpu->processorFamily);
IOLog("manufacturer = %s\n",
strings->stringAtIndex(cpu->manufacturer));
IOLog("processorID = 0x%lx%08lx\n",
(UInt32)(cpu->processorID >> 32),
(UInt32)cpu->processorID);
IOLog("processorVersion = %s\n",
strings->stringAtIndex(cpu->processorVersion));
IOLog("voltage = 0x%x\n", cpu->voltage);
IOLog("externalClock = 0x%x\n", cpu->externalClock);
IOLog("maximumClock = 0x%x\n", cpu->maximumClock);
IOLog("currentClock = 0x%x\n", cpu->currentClock);
IOLog("status = 0x%x\n", cpu->status);
IOLog("processorUpgrade = 0x%x\n", cpu->processorUpgrade);
}
UInt32 busClockRateMHz = cpu->externalClock;
UInt32 maxClockRateMHz = cpu->maximumClock;
if (busClockRateMHz > 0) {
i386_cpu_info_t * cpuinfo = cpuid_info();
IOService * platform = getPlatform();
if (!strncmp(cpuinfo->cpuid_vendor, CPUID_VID_INTEL,
sizeof(CPUID_VID_INTEL)) &&
(cpuinfo->cpuid_features & CPUID_FEATURE_SSE2))
{
// convert from FSB to quad-pumped bus speed
busClockRateMHz *= 4;
} else {
busClockRateMHz *= 2;
}
platform->callPlatformFunction(
"SetBusClockRateMHz", /* function */
false, /* waitForFunction */
(void *) busClockRateMHz, /* speed in MHz */
(void *) maxClockRateMHz,
0,
0);
} else {
busClockRateMHz = 200ULL; // default fake speed to correct reported bus speeds 0--
platform->callPlatformFunction(
"SetBusClockRateMHz", /* function */
false, /* waitForFunction */
(void *) busClockRateMHz, /* speed in MHz */
(void *) maxClockRateMHz,
0,
0);
}
}