bool FakeSMCKeyStore::start(IOService *provider) { if (!super::start(provider)) return false; // Try to obtain OEM info from Clover EFI if (IORegistryEntry* platformNode = fromPath("/efi/platform", gIODTPlane)) { if (OSData *data = OSDynamicCast(OSData, platformNode->getProperty("OEMVendor"))) { if (OSString *vendor = OSString::withCString((char*)data->getBytesNoCopy())) { if (OSString *manufacturer = getManufacturerNameFromOEMName(vendor)) { this->setProperty(kOEMInfoManufacturer, manufacturer); OSSafeReleaseNULL(manufacturer); } //OSSafeReleaseNULL(vendor); } //OSSafeReleaseNULL(data); } if (OSData *data = OSDynamicCast(OSData, platformNode->getProperty("OEMBoard"))) { if (OSString *product = OSString::withCString((char*)data->getBytesNoCopy())) { this->setProperty(kOEMInfoProduct, product); //OSSafeReleaseNULL(product); } //OSSafeReleaseNULL(data); } } if ((!getProperty(kOEMInfoProduct) || !getProperty(kOEMInfoManufacturer)) && !setOemProperties(this)) { HWSensorsErrorLog("failed to get OEM info from Chameleon/Chimera or Clover EFI, platform profiles will be unavailable"); } if (OSString *manufacturer = OSDynamicCast(OSString, getProperty(kOEMInfoManufacturer)) ) { this->addKeyWithValue("HWS0", TYPE_CH8, manufacturer->getLength(), manufacturer->getCStringNoCopy()); } if (OSString *product = OSDynamicCast(OSString, getProperty(kOEMInfoProduct)) ) { this->addKeyWithValue("HWS1", TYPE_CH8, product->getLength(), product->getCStringNoCopy()); } IOService::publishResource(kFakeSMCKeyStoreService, this); registerService(); HWSensorsInfoLog("started"); return true; }
static void processSMBIOSStructureType2(IOService *provider, const SMBBaseBoard *baseBoard, SMBPackedStrings *strings) { if (baseBoard->header.length < 8) return; OSString *manufacturer = NULL; if (OSString *name = OSString::withCString(strings->stringAtIndex(baseBoard->manufacturer))) { manufacturer = getManufacturerNameFromOEMName(name); OSSafeRelease(name); } if (manufacturer) { provider->setProperty(kOEMInfoManufacturer, manufacturer); OSSafeRelease(manufacturer); } else strings->setStringProperty(provider, kOEMInfoManufacturer, baseBoard->manufacturer); strings->setStringProperty(provider, kOEMInfoProduct, baseBoard->product); }
bool FakeSMC::init(OSDictionary *dictionary) { if (!super::init(dictionary)) return false; IOLog("HWSensors v%s Copyright %d netkas, slice, usr-sse2, kozlek, navi, THe KiNG, RehabMan. All rights reserved.\n", HWSENSORS_VERSION_STRING, HWSENSORS_LASTYEAR); //HWSensorsInfoLog("Opensource SMC device emulator. Copyright 2009 netkas. All rights reserved."); if (!(smcDevice = new FakeSMCDevice)) { HWSensorsInfoLog("failed to create SMC device"); return false; } if (!setOemProperties(this)) { // Another try after 200 ms spin IOSleep(200); setOemProperties(this); } if (!getProperty(kOEMInfoProduct) || !getProperty(kOEMInfoManufacturer)) { HWSensorsErrorLog("failed to obtain OEM vendor & product information from DMI"); // Try to obtain OEM info from Clover EFI if (IORegistryEntry* platformNode = fromPath("/efi/platform", gIODTPlane)) { if (OSData *data = OSDynamicCast(OSData, platformNode->getProperty("OEMVendor"))) { if (OSString *vendor = OSString::withCString((char*)data->getBytesNoCopy())) { if (OSString *manufacturer = getManufacturerNameFromOEMName(vendor)) { this->setProperty(kOEMInfoManufacturer, manufacturer); //OSSafeReleaseNULL(manufacturer); } //OSSafeReleaseNULL(vendor); } //OSSafeReleaseNULL(data); } if (OSData *data = OSDynamicCast(OSData, platformNode->getProperty("OEMBoard"))) { if (OSString *product = OSString::withCString((char*)data->getBytesNoCopy())) { this->setProperty(kOEMInfoProduct, product); //OSSafeReleaseNULL(product); } //OSSafeReleaseNULL(data); } } else { HWSensorsErrorLog("failed to get OEM info from Clover EFI, specific platform profiles will be unavailable"); } } if (IORegistryEntry *efi = IORegistryEntry::fromPath("/efi", gIODTPlane)) { if (OSData *vendor = OSDynamicCast(OSData, efi->getProperty("firmware-vendor"))) { // firmware-vendor is in EFI node OSData *buffer = OSData::withCapacity(128); const unsigned char* data = static_cast<const unsigned char*>(vendor->getBytesNoCopy()); for (unsigned int index = 0; index < vendor->getLength(); index += 2) { buffer->appendByte(data[index], 1); } OSString *name = OSString::withCString(static_cast<const char *>(buffer->getBytesNoCopy())); setProperty(kFakeSMCFirmwareVendor, name); //OSSafeRelease(vendor); //OSSafeRelease(name); OSSafeRelease(buffer); } OSSafeRelease(efi); } return true; }