void 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); } }