diff --git a/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist b/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist index 2e18ab461e..4e235da547 100755 --- a/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist +++ b/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist @@ -1104,6 +1104,8 @@ 0x8FE001403 ExtendedFirmwareFeaturesMask? 0xFFFFFFFFFF + FakeCPUID + 0x0406E1 Family? iMac FirmwareFeatures? @@ -1285,6 +1287,8 @@ 0xE00DE137 FirmwareFeaturesMask 0xFF1FFF3F + FakeCPUID + 0x0406E1 LocationInChassis Part Component Manufacturer diff --git a/rEFIt_UEFI/Platform/Settings.cpp b/rEFIt_UEFI/Platform/Settings.cpp index 98e8d41a0c..5a601cf90d 100755 --- a/rEFIt_UEFI/Platform/Settings.cpp +++ b/rEFIt_UEFI/Platform/Settings.cpp @@ -69,6 +69,7 @@ XObjArray ACPIPatchedAML; CHAR16 *IconFormat = NULL; SETTINGS_DATA gSettings; +UINT32 gFakeCPUID; EFI_EDID_DISCOVERED_PROTOCOL *EdidDiscovered; diff --git a/rEFIt_UEFI/Platform/Settings.h b/rEFIt_UEFI/Platform/Settings.h index afcd4e6f6b..32a99cb991 100755 --- a/rEFIt_UEFI/Platform/Settings.h +++ b/rEFIt_UEFI/Platform/Settings.h @@ -2248,11 +2248,10 @@ printf("%s", ""); }; - class SmbiosClass { + class SmbiosClass + { public: - - class SlotDeviceClass { public: @@ -2386,7 +2385,7 @@ printf("%s", ""); XString8 ProductName = XString8(); XString8 SystemVersion = XString8(); XString8 SerialNr = XString8(); - EFI_GUID SmUUID = EFI_GUID(); + EFI_GUID SmUUID = EFI_GUID(); XString8 FamilyName = XString8(); // SMBIOS TYPE2 XString8 BoardManufactureName = XString8(); @@ -2401,6 +2400,7 @@ printf("%s", ""); XString8 ChassisManufacturer = XString8(); XString8 ChassisAssetTag = XString8(); // SMBIOS TYPE4 + UINT32 SFakeCPU = UINT32(); // SMBIOS TYPE17 UINT16 SmbiosVersion = UINT16(); INT8 Attribute = INT8(); @@ -2456,6 +2456,8 @@ printf("%s", ""); if ( !(ChassisType == other.ChassisType) ) return false; if ( !(ChassisManufacturer == other.ChassisManufacturer) ) return false; if ( !(ChassisAssetTag == other.ChassisAssetTag) ) return false; + // SMBIOS TYPE4 + if ( !(SFakeCPU == other.SFakeCPU) ) return false; // SMBIOS TYPE17 if ( !(SmbiosVersion == other.SmbiosVersion) ) return false; if ( !(Attribute == other.Attribute) ) return false; @@ -2506,6 +2508,8 @@ printf("%s", ""); ChassisType = other.dgetChassisType(); ChassisManufacturer = other.dgetChassisManufacturer(); ChassisAssetTag = other.dgetChassisAssetTag(); + // SMBIOS TYPE4 + SFakeCPU = other.dgetFakeCPUID(); // SMBIOS TYPE17 SmbiosVersion = other.dgetSmbiosVersion(); Attribute = other.dgetAttribute(); @@ -2523,6 +2527,7 @@ printf("%s", ""); ExtendedFirmwareFeaturesMask = other.dgetExtendedFirmwareFeaturesMask(); RamSlotInfoArray.takeValueFrom(other.Memory); SlotDevices.takeValueFrom(other.Slots); + } }; @@ -2573,10 +2578,6 @@ printf("%s", ""); BootGraphicsClass BootGraphics = BootGraphicsClass(); -//other -// UINT16 DropOEM_DSM; // not used anymore. -// XBool LpcTune; // never set to true. - SETTINGS_DATA() {} // SETTINGS_DATA(const SETTINGS_DATA& other) = delete; // Can be defined if needed // const SETTINGS_DATA& operator = ( const SETTINGS_DATA & ) = delete; // Can be defined if needed @@ -2825,12 +2826,6 @@ SetBootCurrent(REFIT_MENU_ITEM_BOOTNUM *LoadedEntry); - -//void -//GetDevices(void); - - - void afterGetUserSettings(SETTINGS_DATA& gSettings); XStringW diff --git a/rEFIt_UEFI/Settings/ConfigManager.cpp b/rEFIt_UEFI/Settings/ConfigManager.cpp index 617d40059f..a12535ff38 100644 --- a/rEFIt_UEFI/Settings/ConfigManager.cpp +++ b/rEFIt_UEFI/Settings/ConfigManager.cpp @@ -885,12 +885,6 @@ EFI_STATUS ConfigManager::LoadConfig(const XStringW& ConfName) } } -// DBG("made entries SMBIOS:\n"); -// for (size_t i=0; i 0 : false; }; @@ -441,6 +442,7 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass XmlBool Trust = XmlBool(); XmlUInt64 PlatformFeature = XmlUInt64(); XmlBool NoRomInfo = XmlBool(); + XmlUInt32 FakeCPUID = XmlUInt32(); XmlUInt32 FirmwareFeatures = XmlUInt32(); // gFwFeatures XmlUInt32 FirmwareFeaturesMask = XmlUInt32(); @@ -452,7 +454,7 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass MemoryDictClass Memory = MemoryDictClass(); SlotDeviceArrayClass Slots = SlotDeviceArrayClass(); - XmlDictField m_fields[31] = { //31 + XmlDictField m_fields[32] = { //32 up to FakeCPUID {"Trust", Trust}, {"MemoryRank", MemoryRank}, {"Memory", Memory}, @@ -484,6 +486,7 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass {"ChassisAssetTag", ChassisAssetTag}, {"ChassisType", ChassisType}, {"NoRomInfo", NoRomInfo}, + {"FakeCPUID", FakeCPUID}, }; virtual void getFields(XmlDictField** fields, size_t* nb) override { *fields = m_fields; *nb = sizeof(m_fields)/sizeof(m_fields[0]); }; @@ -580,23 +583,9 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass const decltype(ChassisAssetTag)& getChassisAssetTag() const { return ChassisAssetTag; } const decltype(ChassisType)& getChassisType() const { return ChassisType; } const decltype(NoRomInfo)& getNoRomInfo() const { return NoRomInfo; } +// const decltype(FakeCPUID)& getFakeCPUID() const { return FakeCPUID.isDefined() ? FakeCPUID.value() : gSettings.KernelAndKextPatches.FakeCPUID; }; -// /* -// * DO NOT call this if !ProductName.isDefined() -// */ -// MacModel getModel() const -// { -// if ( !ProductName.isDefined() ) { -// // This must not happen in Clover because Clover set a defaultMacModel -// // This must not happen in ccpv because ccpv doesn't call dget... methods -// log_technical_bug("%s : !ProductName.isDefined()", __PRETTY_FUNCTION__); -// return iMac132; // cannot return GetDefaultModel() because we don't want to link runtime configuration to the xml reading layer. -// } -// return GetModelFromString(ProductName.value()); // ProductName has been validated, so Model CANNOT be MaxMacModel -// } -// XBool hasModel() const { return ProductName.isDefined(); } - MacModel dgetModel() const { if ( ProductName.isDefined() ) return GetModelFromString(ProductName.value()); @@ -742,6 +731,7 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass return GetPlatformFeature(dgetModel()); }; const decltype(NoRomInfo)::ValueType& dgetNoRomInfo() const { return NoRomInfo.isDefined() ? NoRomInfo.value() : NoRomInfo.nullValue; }; + const decltype(FakeCPUID)::ValueType& dgetFakeCPUID() const { return FakeCPUID.isDefined() ? FakeCPUID.value() : gFakeCPUID; }; decltype(FirmwareFeatures)::ValueType dgetFirmwareFeatures() const { if ( FirmwareFeatures.isDefined() ) return FirmwareFeatures.value(); return GetFwFeatures(dgetModel()); @@ -757,7 +747,12 @@ class SmbiosPlistClass : public ConfigPlistAbstractClass decltype(ExtendedFirmwareFeaturesMask)::ValueType dgetExtendedFirmwareFeaturesMask() const { if ( ExtendedFirmwareFeaturesMask.isDefined() ) return ExtendedFirmwareFeaturesMask.value(); return GetExtFwFeaturesMask(dgetModel()); - } + }; +// decltype(FirmwareFeatures)::ValueType dgetFirmwareFeatures() const { +// if ( FirmwareFeatures.isDefined() ) return FirmwareFeatures.value(); +// return GetFwFeatures(dgetModel()); +// }; + }; diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp index 2e7383927c..611713b432 100644 --- a/rEFIt_UEFI/refit/main.cpp +++ b/rEFIt_UEFI/refit/main.cpp @@ -124,27 +124,17 @@ XBool gThemeNeedInit = true; XBool DoHibernateWake = false; UINT32 mCurrentColor; -//EFI_HANDLE ConsoleInHandle; -//EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL* SimpleTextEx; -//EFI_KEY_DATA KeyData; +extern UINT32 gFakeCPUID; + EFI_HANDLE AudioDriverHandle; XStringW OpenRuntimeEfiName; extern void HelpRefit(void); extern void AboutRefit(void); -//extern XBool BooterPatch(IN UINT8 *BooterData, IN UINT64 BooterSize, LOADER_ENTRY *Entry); - extern EFI_AUDIO_IO_PROTOCOL *AudioIo; - extern EFI_DXE_SERVICES *gDS; -//#ifdef _cplusplus -//void FreePool(const wchar_t * A) -//{ -// FreePool((void*)A); -//} -//#endif static EFI_STATUS LoadEFIImageList(IN EFI_DEVICE_PATH **DevicePaths, IN CONST XStringW& ImageTitle, @@ -154,7 +144,6 @@ static EFI_STATUS LoadEFIImageList(IN EFI_DEVICE_PATH **DevicePaths, EFI_STATUS Status, ReturnStatus; EFI_HANDLE ChildImageHandle = 0; UINTN DevicePathIndex; -// CHAR16 ErrorInfo[256]; DBG("Loading %ls", ImageTitle.wc_str()); if (ErrorInStep != NULL) { @@ -340,47 +329,7 @@ static EFI_STATUS StartEFIImage(IN EFI_DEVICE_PATH *DevicePath, return Status; } -/* -static EFI_STATUS StartEFIImageList(IN EFI_DEVICE_PATH **DevicePaths, - IN CHAR16 *LoadOptions, IN CHAR16 *LoadOptionsPrefix, - IN CHAR16 *ImageTitle, - OUT UINTN *ErrorInStep, - OUT EFI_HANDLE *NewImageHandle) -{ - EFI_STATUS Status; - EFI_HANDLE ChildImageHandle = NULL; - Status = LoadEFIImageList(DevicePaths, ImageTitle, ErrorInStep, &ChildImageHandle); - if (!EFI_ERROR(Status)) { - Status = StartEFILoadedImage(ChildImageHandle, LoadOptions, LoadOptionsPrefix, ImageTitle, ErrorInStep); - } - - if (NewImageHandle != NULL) { - *NewImageHandle = ChildImageHandle; - } - return Status; -} -*/ -/* -static CONST CHAR8 *SearchString( - IN CONST CHAR8 *Source, - IN UINT64 SourceSize, - IN CONST CHAR8 *Search, - IN UINTN SearchSize - ) -{ - CONST CHAR8 *End = Source + SourceSize; - - while (Source < End) { - if (CompareMem(Source, Search, SearchSize) == 0) { - return Source; - } else { - Source++; - } - } - return NULL; -} - */ #ifdef DUMP_KERNEL_KEXT_PATCHES void DumpKernelAndKextPatches(KERNEL_AND_KEXT_PATCHES *Patches) { @@ -512,40 +461,7 @@ void LOADER_ENTRY::FilterBootPatches() } } } -/* -void ReadSIPCfg() -{ - UINT32 csrCfg = gSettings.RtVariables.CsrActiveConfig & CSR_VALID_FLAGS; - CHAR16 *csrLog = (__typeof__(csrLog))AllocateZeroPool(SVALUE_MAX_SIZE); - - if (csrCfg & CSR_ALLOW_UNTRUSTED_KEXTS) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, L"CSR_ALLOW_UNTRUSTED_KEXTS"); - if (csrCfg & CSR_ALLOW_UNRESTRICTED_FS) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_UNRESTRICTED_FS")); - if (csrCfg & CSR_ALLOW_TASK_FOR_PID) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_TASK_FOR_PID")); - if (csrCfg & CSR_ALLOW_KERNEL_DEBUGGER) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_KERNEL_DEBUGGER")); - if (csrCfg & CSR_ALLOW_APPLE_INTERNAL) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_APPLE_INTERNAL")); - if (csrCfg & CSR_ALLOW_UNRESTRICTED_DTRACE) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_UNRESTRICTED_DTRACE")); - if (csrCfg & CSR_ALLOW_UNRESTRICTED_NVRAM) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_UNRESTRICTED_NVRAM")); - if (csrCfg & CSR_ALLOW_DEVICE_CONFIGURATION) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_DEVICE_CONFIGURATION")); - if (csrCfg & CSR_ALLOW_ANY_RECOVERY_OS) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_ANY_RECOVERY_OS")); - if (csrCfg & CSR_ALLOW_UNAPPROVED_KEXTS) - StrCatS(csrLog, SVALUE_MAX_SIZE/2, P__oolPrint(L"%a%a", StrLen(csrLog) ? " | " : "", "CSR_ALLOW_UNAPPROVED_KEXTS")); - - if (StrLen(csrLog)) { - DBG("CSR_CFG: %ls\n", csrLog); - } - FreePool(csrLog); -} -*/ // // Null ConOut OutputString() implementation - for blocking // text output from boot.efi when booting in graphics mode @@ -717,7 +633,9 @@ void LOADER_ENTRY::DelegateKernelPatches() mOpenCoreConfiguration.Kernel.Patch.Values = (__typeof_am__(*mOpenCoreConfiguration.Kernel.Patch.Values)*)malloc(mOpenCoreConfiguration.Kernel.Patch.AllocCount*sizeof(__typeof_am__(*mOpenCoreConfiguration.Kernel.Patch.Values))); memset(mOpenCoreConfiguration.Kernel.Patch.Values, 0, mOpenCoreConfiguration.Kernel.Patch.AllocCount*sizeof(*mOpenCoreConfiguration.Kernel.Patch.Values)); - UINT32 FakeCPU = gSettings.KernelAndKextPatches.FakeCPUID; + UINT32 FakeCPUID = gSettings.Smbios.SFakeCPU; + if (FakeCPUID != 0) gFakeCPUID = FakeCPUID; + DBG("Set FakeCPUID: 0x%X\n", gFakeCPUID); // for (size_t Idx = 0; Idx < 4; Idx++) { // mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Data[Idx] = FakeCPU & 0xFF; // mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Mask[Idx] = 0xFF; @@ -725,7 +643,7 @@ void LOADER_ENTRY::DelegateKernelPatches() // } memset(mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Data, 0, sizeof(mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Data)); memset(mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Mask, 0, sizeof(mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Mask)); - mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Data[0] = FakeCPU; + mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Data[0] = gFakeCPUID; mOpenCoreConfiguration.Kernel.Emulate.Cpuid1Mask[0] = 0xFFFFFFFF; for (size_t kextPatchIdx = 0 ; kextPatchIdx < selectedPathArray.size() ; kextPatchIdx++ ) @@ -1499,7 +1417,7 @@ void LOADER_ENTRY::StartLoader() if (LoadedImage && !BooterPatch((UINT8*)LoadedImage->ImageBase, LoadedImage->ImageSize)) { DBG("Will not patch boot.efi\n"); } - + gConf.ReloadSmbios(OSName); DelegateKernelPatches(); // Set boot argument for kernel if no caches, this should force kernel loading @@ -1518,7 +1436,8 @@ void LOADER_ENTRY::StartLoader() // first patchACPI and find PCIROOT and RTC // but before ACPI patch we need smbios patch CheckEmptyFB(); - gConf.ReloadSmbios(OSName); + + SmbiosFillPatchingValues(GlobalConfig.SetTable132, GlobalConfig.EnabledCores, g_SmbiosDiscoveredSettings.RamSlotCount, gConf.SlotDeviceArray, gSettings, gCPUStructure, &g_SmbiosInjectedSettings); PatchSmbios(g_SmbiosInjectedSettings); // DBG("PatchACPI\n"); @@ -1532,25 +1451,12 @@ void LOADER_ENTRY::StartLoader() //SaveOemTables(); #endif // -// // If KPDebug is true boot in verbose mode to see the debug messages -// if (KernelAndKextPatches.KPDebug) { -// LoadOptions.AddID("-v"_XS8); -// } -// + DbgHeader("RestSetup macOS"); -// -// DBG("SetDevices\n"); SetDevices(this); -// DBG("SetFSInjection\n"); - // Jief : do we need that ? - //SetFSInjection(); - //PauseForKey(L"SetFSInjection"); -// DBG("SetVariablesForOSX\n"); SetVariablesForOSX(this); -// DBG("SetVariablesForOSX\n"); // Jief : if we want to use our FixUSBOwnership, we need our OnExitBootServices EventsInitialize(this); -// DBG("FinalizeSmbios\n"); FinalizeSmbios(g_SmbiosInjectedSettings); SetCPUProperties(); //very special procedure @@ -3015,14 +2921,6 @@ RefitMain (IN EFI_HANDLE ImageHandle, MainMenu.TimeoutSeconds = gSettings.Boot.Timeout >= 0 ? gSettings.Boot.Timeout : 0; //DBG("LoadDrivers() start\n"); LoadDrivers(); - //DBG("LoadDrivers() end\n"); - -//debugStartImageWithOC(); // ok - -/* if (!gFirmwareClover && - !gDriversFlags.EmuVariableLoaded) { - GetSmcKeys(false); // later we can get here SMC information - } */ Status = gBS->LocateProtocol(gEmuVariableControlProtocolGuid, NULL, (void**)&gEmuVariableControl); if (EFI_ERROR(Status)) { @@ -3086,6 +2984,8 @@ RefitMain (IN EFI_HANDLE ImageHandle, } afterGetUserSettings(gSettings); + gFakeCPUID = gSettings.KernelAndKextPatches.FakeCPUID; + DBG("Set FakeCPUID: 0x%X\n", gFakeCPUID); HaveDefaultVolume = gSettings.Boot.DefaultVolume.notEmpty(); if (!gFirmwareClover && @@ -3155,7 +3055,6 @@ RefitMain (IN EFI_HANDLE ImageHandle, DBG("Chosen theme %ls\n", ThemeX.Theme.wc_str()); } -// DBG("initial boot-args=%s\n", gSettings.Boot.BootArgs); //now it is a time to set RtVariables SetVariablesFromNvram(); @@ -3242,11 +3141,6 @@ RefitMain (IN EFI_HANDLE ImageHandle, DefaultEntry = NULL; } -// DBG("found entries SMBIOS:\n"); -// for (size_t i=0; iAddMenuItemInput(78, "Product Name:", true); SubScreen->AddMenuItemInput(79, "Product Version:", true); SubScreen->AddMenuItemInput(80, "Product SN:", true); + SubScreen->AddMenuItemInput(131, "Fake CPUID:", true); SubScreen->AddMenuItemInput(81, "Board ID:", true); SubScreen->AddMenuItemInput(82, "Board SN:", true); SubScreen->AddMenuItemInput(83, "Board Type:", true); @@ -2048,7 +2057,8 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuChooseSmbios() REFIT_MENU_SCREEN *SubScreen; REFIT_MENU_SWITCH *InputBootArgs; - Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_CHOOSE_SMBIOS, "SMBIOS->"_XS8); + Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_CHOOSE_SMBIOS, NullXString8); + Entry->Title.SWPrintf("SMBIOS->"); SubScreen->AddMenuInfoLine_f("Select SMBIOS:");