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:");