diff --git a/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist b/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist
index aa310c3999..28c5e7ec05 100644
--- a/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist
+++ b/CloverPackage/CloverV2/EFI/CLOVER/config-sample.plist
@@ -751,8 +751,6 @@
AppleRTC
- BlockSkywalk
-
BootPatches
@@ -785,6 +783,29 @@
KernelPm
+ KextsToBlock
+
+
+ Comment
+ Allow IOSkywalk Downgrade
+ Disabled
+
+ MatchOS
+ 14.x,15.x,26.x
+ Name
+ com.apple.iokit.IOSkywalkFamily
+
+
+ Comment
+ Allow Block AppleEthernetRL
+ Disabled
+
+ MatchOS
+ 25.x,26.x
+ Name
+ com.apple.driver.AppleEthernetRL
+
+
KernelToPatch
diff --git a/rEFIt_UEFI/Platform/AcpiPatcher.cpp b/rEFIt_UEFI/Platform/AcpiPatcher.cpp
index ab37b58f63..c9b6aeb3fd 100644
--- a/rEFIt_UEFI/Platform/AcpiPatcher.cpp
+++ b/rEFIt_UEFI/Platform/AcpiPatcher.cpp
@@ -687,9 +687,7 @@ void PreCleanupRSDT()
}
//REVIEW: really?
- // Если адрес RSDT < адреса XSDT и хвост RSDT наползает на XSDT, то подрезаем хвост RSDT до начала XSDT
- // English: If the RSDT address of the XSDT address and the tail of the RSDT crawls onto the XSDT, then we
- // trim the RSDT tail before the XSDT starts
+ // If RSDT address < XSDT address and RSDT tail overlaps with XSDT, then trim RSDT tail to the start of XSDT
if ((UINTN)Rsdt < (UINTN)Xsdt && (UINTN)Rsdt + Rsdt->Header.Length > (UINTN)Xsdt) {
UINTN v = ((UINTN)Xsdt - (UINTN)Rsdt) & ~3;
Rsdt->Header.Length = (UINT32)v;
diff --git a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp
index 88c8f0f7ce..62da7c3be8 100644
--- a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp
+++ b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp
@@ -63,6 +63,46 @@ XBool ABSTRACT_PATCH::IsPatchEnabled(const MacOsVersion& CurrOS)
return ret;
}
+XBool KEXT_TO_BLOCK::ShouldBlock(const MacOsVersion& CurrOS) const
+{
+ if (Disabled || !MenuItem.BValue || Name.isEmpty()) {
+ return false;
+ }
+
+ XString8 matchOS = MatchOS;
+ matchOS.trim();
+ if (matchOS.isEmpty()) {
+ return true;
+ }
+
+ XString8 matchOSLower = matchOS;
+ matchOSLower.lowerAscii();
+ if (matchOSLower == "all"_XS8) {
+ return true;
+ }
+
+ if (CurrOS.isEmpty()) {
+ return false;
+ }
+
+ XString8Array mos = Split(matchOS, ","_XS8).trimEachString();
+ for (size_t i = 0; i < mos.size(); ++i) {
+ if (mos[i].isEmpty()) {
+ continue;
+ }
+ XString8 entryLower = mos[i];
+ entryLower.lowerAscii();
+ if (entryLower == "all"_XS8) {
+ return true;
+ }
+ if (CurrOS.match(mos[i])) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
//
//XBool KERNEL_AND_KEXT_PATCHES::IsPatchEnabledByBuildNumber(const XString8& Build)
diff --git a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h
index 2656ba2b45..1256c1fe7a 100644
--- a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h
+++ b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h
@@ -184,6 +184,42 @@ class BOOT_PATCH : public ABSTRACT_PATCH
}
};
+class KEXT_TO_BLOCK
+{
+public:
+ XString8 Comment = XString8();
+ XBool Disabled = XBool();
+ XString8 MatchOS = XString8();
+ XString8 Name = XString8();
+ INPUT_ITEM MenuItem = INPUT_ITEM();
+ XString8 Label = XString8();
+
+ #if __cplusplus > 201703L
+ XBool operator == (const KEXT_TO_BLOCK&) const = default;
+ #endif
+ XBool isEqual(const KEXT_TO_BLOCK& other) const
+ {
+ if ( !(Comment == other.Comment ) ) return false;
+ if ( !(Disabled == other.Disabled ) ) return false;
+ if ( !(MatchOS == other.MatchOS ) ) return false;
+ if ( !(Name == other.Name ) ) return false;
+ if ( MenuItem != other.MenuItem ) return false;
+ if ( !(Label == other.Label ) ) return false;
+ return true;
+ }
+ void takeValueFrom(const ConfigPlistClass::KernelAndKextPatches_Class::KernelAndKextPatches_KextsToBlock_Class& other)
+ {
+ Comment = other.dgetComment();
+ Disabled = other.dgetDisabled();
+ MatchOS = other.dgetMatchOS();
+ Name = other.dgetName();
+ MenuItem.BValue = !other.dgetDisabled();
+ Label = Comment.notEmpty() ? Comment : Name;
+ }
+
+ XBool ShouldBlock(const MacOsVersion& CurrOS) const;
+};
+
class KERNEL_AND_KEXT_PATCHES
{
public:
@@ -194,7 +230,6 @@ class KERNEL_AND_KEXT_PATCHES
XBool KPPanicNoKextDump = XBool();
XBool _KPAppleIntelCPUPM = XBool();
XBool KPAppleRTC = XBool();
- XBool BlockSkywalk = XBool();
XBool EightApple = XBool();
XBool KPDELLSMBIOS = XBool(); // Dell SMBIOS patch
UINT32 FakeCPUID = UINT32();
@@ -202,11 +237,12 @@ class KERNEL_AND_KEXT_PATCHES
XBuffer KPATIConnectorsData = XBuffer();
XBuffer KPATIConnectorsPatch = XBuffer();
XStringWArray ForceKextsToLoad/* = XStringWArray()*/;
+ XObjArrayWithTakeValueFromXmlArray KextsToBlock/* = XObjArrayWithTakeValueFromXmlArray()*/;
XObjArrayWithTakeValueFromXmlArray KextPatches/* = XObjArrayWithTakeValueFromXmlArray()*/;
XObjArrayWithTakeValueFromXmlArray KernelPatches/* = XObjArrayWithTakeValueFromXmlArray()*/;
XObjArrayWithTakeValueFromXmlArray BootPatches/* = XObjArrayWithTakeValueFromXmlArray()*/;
- KERNEL_AND_KEXT_PATCHES() : ForceKextsToLoad(), KextPatches(), KernelPatches(), BootPatches() {}
+ KERNEL_AND_KEXT_PATCHES() : ForceKextsToLoad(), KextsToBlock(), KextPatches(), KernelPatches(), BootPatches() {}
#if __cplusplus > 201703L
XBool operator == (const KERNEL_AND_KEXT_PATCHES&) const = default;
@@ -221,13 +257,13 @@ class KERNEL_AND_KEXT_PATCHES
if ( !(_KPAppleIntelCPUPM == other._KPAppleIntelCPUPM ) ) return false;
if ( !(KPAppleRTC == other.KPAppleRTC ) ) return false;
if ( !(EightApple == other.EightApple ) ) return false;
- if ( !(BlockSkywalk == other.BlockSkywalk ) ) return false;
if ( !(KPDELLSMBIOS == other.KPDELLSMBIOS ) ) return false;
if ( !(FakeCPUID == other.FakeCPUID ) ) return false;
if ( !(KPATIConnectorsController == other.KPATIConnectorsController ) ) return false;
if ( !(KPATIConnectorsData == other.KPATIConnectorsData ) ) return false;
if ( !(KPATIConnectorsPatch == other.KPATIConnectorsPatch ) ) return false;
if ( !(ForceKextsToLoad == other.ForceKextsToLoad ) ) return false;
+ if ( !KextsToBlock.isEqual(other.KextsToBlock) ) return false;
if ( !KextPatches.isEqual(other.KextPatches) ) return false;
if ( !KernelPatches.isEqual(other.KernelPatches) ) return false;
if ( !BootPatches.isEqual(other.BootPatches) ) return false;
@@ -242,7 +278,6 @@ class KERNEL_AND_KEXT_PATCHES
KPPanicNoKextDump = other.dgetKPPanicNoKextDump();
_KPAppleIntelCPUPM = other.dget_KPAppleIntelCPUPM();
KPAppleRTC = other.dgetKPAppleRTC();
- BlockSkywalk = other.dgetBlockSkywalk();
EightApple = other.dgetEightApple();
KPDELLSMBIOS = other.dgetKPDELLSMBIOS();
FakeCPUID = other.dgetFakeCPUID();
@@ -250,6 +285,7 @@ class KERNEL_AND_KEXT_PATCHES
KPATIConnectorsData = other.dgetKPATIConnectorsData();
KPATIConnectorsPatch = other.dgetKPATIConnectorsPatch();
ForceKextsToLoad = other.dgetForceKextsToLoad();
+ KextsToBlock.takeValueFrom(other.KextsToBlock);
KextPatches.takeValueFrom(other.KextsToPatch);
KernelPatches.takeValueFrom(other.KernelToPatch);
BootPatches.takeValueFrom(other.BootPatches);
diff --git a/rEFIt_UEFI/Platform/cpu.cpp b/rEFIt_UEFI/Platform/cpu.cpp
index 35cd41a54b..6e0718e910 100644
--- a/rEFIt_UEFI/Platform/cpu.cpp
+++ b/rEFIt_UEFI/Platform/cpu.cpp
@@ -1159,12 +1159,13 @@ void GetCPUProperties (void)
tmpU = gCPUStructure.FSBFrequency;
DBG("Corrected FSBFrequency = %llu MHz\n", DivU64x32(tmpU, Mega));
- if ((gCPUStructure.Vendor == CPU_VENDOR_INTEL) && (gCPUStructure.Model == CPU_MODEL_NEHALEM)) {
+ if ((gCPUStructure.Vendor == CPU_VENDOR_INTEL) &&
+ ((gCPUStructure.Model == CPU_MODEL_NEHALEM) || (gCPUStructure.Model == CPU_MODEL_NEHALEM_EX) ||
+ (gCPUStructure.Model == CPU_MODEL_WESTMERE) || (gCPUStructure.Model == CPU_MODEL_WESTMERE_EX))) {
//Slice - for Nehalem we can do more calculation as in Cham
// but this algo almost always wrong
//
// thanks to dgobe for i3/i5/i7 bus speed detection
- // TODO: consider more Nehalem based CPU(?) ex. CPU_MODEL_NEHALEM_EX, CPU_MODEL_WESTMERE, CPU_MODEL_WESTMERE_EX
// info: https://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors#Nehalem-based_Xeons
qpimult = 2; //init
/* Scan PCI BUS For QPI Frequency */
@@ -1612,7 +1613,11 @@ MacModel GetDefaultModel()
case CPU_MODEL_ICELAKE_A:
case CPU_MODEL_ICELAKE_C:
case CPU_MODEL_ICELAKE_D:
- case CPU_MODEL_ALDERLAKE_ULT: //???
+ case CPU_MODEL_TIGERLAKE_C:
+ case CPU_MODEL_TIGERLAKE_D:
+ case CPU_MODEL_ALDERLAKE_ULT:
+ case CPU_MODEL_RAPTORLAKE_B:
+ case CPU_MODEL_METEORLAKE:
case CPU_MODEL_ARROWLAKE_U:
DefaultType = MacBookPro161;
break;
@@ -1725,16 +1730,22 @@ MacModel GetDefaultModel()
case CPU_MODEL_BROADWELL_E5:
DefaultType = MacPro61;
break;
- case CPU_MODEL_ALDERLAKE:
-
- case CPU_MODEL_RAPTORLAKE_B:
case CPU_MODEL_COMETLAKE_S:
+ if ( gCPUStructure.BrandString.contains("i9") ) {
+ DefaultType = iMac202;
+ break;
+ }
+ DefaultType = iMac201;
+ break;
case CPU_MODEL_ROCKETLAKE:
+ DefaultType = iMac201;
+ break;
+ case CPU_MODEL_ALDERLAKE:
case CPU_MODEL_RAPTORLAKE:
case CPU_MODEL_METEORLAKE:
case CPU_MODEL_ARROWLAKE:
case CPU_MODEL_ARROWLAKE_X:
-
+ case CPU_MODEL_RAPTORLAKE_B:
DefaultType = MacPro71;
break;
default:
diff --git a/rEFIt_UEFI/Platform/device_inject.cpp b/rEFIt_UEFI/Platform/device_inject.cpp
index 005ca5cd93..e88667fb00 100644
--- a/rEFIt_UEFI/Platform/device_inject.cpp
+++ b/rEFIt_UEFI/Platform/device_inject.cpp
@@ -148,7 +148,7 @@ DevPropDevice *devprop_add_device_pci(DevPropString *StringBuf, pci_dt_t *PciDt,
return NULL;
}
- //просмотреть StringBuf->entries[] в поисках такого же девайса
+ // scan StringBuf->entries[] for the same device
//SameDevice(DevPropDevice* D1, DevPropDevice* D2)
if (!DevicePath && (PciDt != 0)) {
diff --git a/rEFIt_UEFI/Platform/platformdata.cpp b/rEFIt_UEFI/Platform/platformdata.cpp
index b2b19c87b5..a819ca2cf1 100644
--- a/rEFIt_UEFI/Platform/platformdata.cpp
+++ b/rEFIt_UEFI/Platform/platformdata.cpp
@@ -559,7 +559,7 @@ UINT64 GetPlatformFeature(MacModel Model)
case MacBookAir82:
case MacBookAir91:
return 0x1A; //3A;
- // It is nonsense, ASCII code сharacter "2" = 0x32 != 0x02. Don't use ioreg, so that not to be confused. Use dmidecode dump.
+ // It is nonsense, ASCII code character "2" = 0x32 != 0x02. Don't use ioreg, so that not to be confused. Use dmidecode dump.
default:
return 0xFFFF; // disabled
}
diff --git a/rEFIt_UEFI/Platform/smbios.cpp b/rEFIt_UEFI/Platform/smbios.cpp
index bee893454e..597e68c0ef 100644
--- a/rEFIt_UEFI/Platform/smbios.cpp
+++ b/rEFIt_UEFI/Platform/smbios.cpp
@@ -922,6 +922,10 @@ void PatchTableType4(const SmbiosInjectedSettings& smbiosSettings)
newSmbiosTable.Type4->ProcessorFamily = ProcessorFamilyIntelCoreI5;
if ( smbiosSettings.BrandString.contains("i7") )
newSmbiosTable.Type4->ProcessorFamily = ProcessorFamilyIntelCoreI7;
+ if ( smbiosSettings.BrandString.contains("i9") )
+ newSmbiosTable.Type4->ProcessorFamily = ProcessorFamilyIntelCoreI9;
+ if ( smbiosSettings.BrandString.contains("Xeon") )
+ newSmbiosTable.Type4->ProcessorFamily = ProcessorFamilyIntelXeon;
}
//spec 2.7 page 48 note 3
if ((newSmbiosTable.Type4->ProcessorFamily == ProcessorFamilyIntelCore2)
@@ -1278,14 +1282,24 @@ void PatchTableType16(const SmbiosInjectedSettings& smbiosSettings)
ZeroMem((void*)newSmbiosTable.Type16, MAX_TABLE_SIZE);
CopyMem((void*)newSmbiosTable.Type16, (void*)SmbiosTable.Type16, TableSize);
newSmbiosTable.Type16->Hdr.Handle = mHandle16;
+ MacModel Model = GetModelFromString(smbiosSettings.ProductName);
+
+ if (Model == MacPro71) {
+ newSmbiosTable.Type16->MemoryErrorCorrection = MemoryErrorCorrectionMultiBitEcc;
+ newSmbiosTable.Type16->MaximumCapacity = 0x60000000; // 1.5 TB in KB
+ newSmbiosTable.Type16->ExtendedMaximumCapacity = 0;
+ }
+
// Slice - I am not sure if I want these values
// newSmbiosTable.Type16->Location = MemoryArrayLocationProprietaryAddonCard;
// newSmbiosTable.Type16->Use = MemoryArrayUseSystemMemory;
// newSmbiosTable.Type16->MemoryErrorCorrection = MemoryErrorCorrectionMultiBitEcc;
// MemoryErrorInformationHandle
newSmbiosTable.Type16->MemoryErrorInformationHandle = 0xFFFF;
- newSmbiosTable.Type16->NumberOfMemoryDevices = smbiosSettings.RamSlotCount; // RamSlotCount is <= MAX_RAM_SLOTS), see GetTableType16()
- DBG("NumberOfMemoryDevices = %d\n", smbiosSettings.RamSlotCount);
+ UINT16 DeviceCount = smbiosSettings.RamSlotCount; // RamSlotCount is <= MAX_RAM_SLOTS), see GetTableType16()
+ if (Model == MacPro71)
+ newSmbiosTable.Type16->NumberOfMemoryDevices = DeviceCount;
+ DBG("NumberOfMemoryDevices = %d\n", DeviceCount);
LogSmbiosTable(newSmbiosTable);
}
@@ -1392,6 +1406,7 @@ void GetTableType17(SmbiosDiscoveredSettings* smbiosSettings)
if (SmbiosTable.Type17->Size == 0x7FFF) {
rsi.ModuleSize = SmbiosTable.Type17->ExtendedSize;
}
+ rsi.Type = SmbiosTable.Type17->MemoryType;
}
// Determine if module frequency is sane value
if ((SmbiosTable.Type17->Speed > 0) && (SmbiosTable.Type17->Speed <= MAX_RAM_FREQUENCY)) {
@@ -1464,12 +1479,8 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArray= 2) {
+ if (channels >= 2 && Model != MacPro71) {
UINT8 doubleChannels = (UINT8)UserChannels << 1;
for (size_t Index = 0; Index < mMemory17.size(); ++Index) {
channelMap[Index] = (UINT8)(((Index / doubleChannels) * doubleChannels) +
@@ -1535,8 +1546,14 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArrayTypeDetail.Synchronous = true;
newSmbiosTable.Type17->DeviceSet = bank + 1;
newSmbiosTable.Type17->MemoryArrayHandle = mHandle16;
- if (isMacPro) {
+ if (isOldMacPro) {
deviceLocator.S8Printf("DIMM%zd", Index + 1);
+ } else if (Model == MacPro71) {
+ newSmbiosTable.Type17->TotalWidth = 72;
+ newSmbiosTable.Type17->DataWidth = 64;
+ deviceLocator.S8Printf("DIMM%zu", Index + 1);
+ bankLocator.S8Printf("BANK %d", bank);
+ UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->BankLocator, bankLocator);
} else {
deviceLocator.S8Printf("DIMM%d", bank);
bankLocator.S8Printf("BANK %zu", Index % channels);
@@ -1672,7 +1689,7 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArray= 2) {
+ if (channels >= 2 && Model != MacPro71) {
wrongSMBIOSBanks = ((gRAM.SMBIOS.doesSlotForIndexExist(1) != gRAM.SPD.doesSlotForIndexExist(1)) ||
(gRAM.SMBIOS.getSlotInfoForSlotIndex(1).ModuleSize != gRAM.SPD.getSlotInfoForSlotIndex(1).ModuleSize));
}
@@ -1749,7 +1766,7 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArray= 2) {
+ if (channels >= 2 && Model != MacPro71) {
UINT8 doubleChannels = (UINT8)channels << 1;
for (size_t Index = 0; Index < mMemory17.size(); ++Index) {
channelMap[Index] = (UINT8)(((Index / doubleChannels) * doubleChannels) +
@@ -1886,7 +1903,22 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArrayDeviceLocator);
+ bankLocator = GetSmbiosString(SmbiosTable, SmbiosTable.Type17->BankLocator);
+ }
+ newSmbiosTable.Type17->TotalWidth = 72;
+ newSmbiosTable.Type17->DataWidth = 64;
+ if (deviceLocator.isEmpty()) {
+ deviceLocator.S8Printf("DIMM%zu", Index + 1);
+ }
+ if (bankLocator.isEmpty()) {
+ bankLocator.S8Printf("BANK %d", bank);
+ }
+ } else if (isOldMacPro) {
deviceLocator.S8Printf("DIMM%zd", Index + 1);
bankLocator.setEmpty();
} else {
@@ -1894,7 +1926,7 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArrayDeviceLocator, deviceLocator);
- if (isMacPro) {
+ if (isOldMacPro) {
newSmbiosTable.Type17->BankLocator = 0; //like in MacPro5,1
} else {
UpdateSmbiosString(newSmbiosTable, &newSmbiosTable.Type17->BankLocator, bankLocator);
@@ -1902,7 +1934,11 @@ void PatchTableType17(const SmbiosInjectedSettings& smbiosSettings, XArray SMBIOSIndex=%zu SPDIndex=%zu:\n", Index, SMBIOSIndex, SPDIndex);
if (newSmbiosTable.Type17->Size == 0) {
DBG("%s %s EMPTY\n", bankLocator.c_str(), deviceLocator.c_str());
- newSmbiosTable.Type17->MemoryType = 0; //MemoryTypeUnknown;
+ if (Model == MacPro71) {
+ newSmbiosTable.Type17->MemoryType = MemoryTypeDdr4;
+ } else {
+ newSmbiosTable.Type17->MemoryType = 0; //MemoryTypeUnknown;
+ }
} else {
insertingEmpty = false;
DBG("%s %s %dMHz %dMB(Ext:%dMB)\n", bankLocator.c_str(), deviceLocator.c_str(), newSmbiosTable.Type17->Speed,
@@ -2416,5 +2452,3 @@ void FinalizeSmbios(const SmbiosInjectedSettings& smbiosSettings) //continue
// egSaveFile(NULL, SWPrintf("%ls\\misc\\smbios.bin", self.getCloverDirFullPath().wc_str()).wc_str(), (UINT8*)(UINTN)SmbiosEpsNew, SmbiosEpsNew->TableLength);
return;
}
-
-
diff --git a/rEFIt_UEFI/Platform/usbfix.cpp b/rEFIt_UEFI/Platform/usbfix.cpp
index d9d3c5805d..2c78e72dd9 100644
--- a/rEFIt_UEFI/Platform/usbfix.cpp
+++ b/rEFIt_UEFI/Platform/usbfix.cpp
@@ -307,7 +307,7 @@ DBG("FixOwnership() -> begin\n");
//
DBG("USB XHCI reset for device %04hX\n", Pci.Hdr.DeviceId);
if (Pci.Hdr.VendorId != 0x8086) {
- //ну ее нах эту ВИА, да и прочих, кроме Интел
+ // forget about VIA and others, except Intel
DBG("skip XHCI controller Vendor=%04X\n", Pci.Hdr.VendorId);
break;
}
diff --git a/rEFIt_UEFI/Settings/ConfigManager.cpp b/rEFIt_UEFI/Settings/ConfigManager.cpp
index 33366a86bb..77e6c24b33 100644
--- a/rEFIt_UEFI/Settings/ConfigManager.cpp
+++ b/rEFIt_UEFI/Settings/ConfigManager.cpp
@@ -596,7 +596,7 @@ EFI_STATUS ConfigManager::LoadSMBIOSPlist(const XStringW& ConfName)
return Status;
}
-void ConfigManager::ReloadSmbios(XStringW& str) // ищет смбиос по имени системы
+void ConfigManager::ReloadSmbios(XStringW& str) // searches for SMBIOS by system name
{
size_t N = SmbiosList.size();
if (OldChosenSmbios == 0) { // this is auto fill by OSName
@@ -669,21 +669,33 @@ void ConfigManager::applySettings() const
{
if ( !configPlist.Graphics.Inject.isInjectIntelDefined() )
{
- gSettings.Graphics.InjectAsDict.InjectIntel =
- (gConf.GfxPropertiesArray.size() > 0 && gConf.GfxPropertiesArray[0].Vendor == Intel) ||
- (gConf.GfxPropertiesArray.size() > 1 && gConf.GfxPropertiesArray[1].Vendor == Intel);
+ gSettings.Graphics.InjectAsDict.InjectIntel = false;
+ for (size_t i = 0; i < gConf.GfxPropertiesArray.size(); i++) {
+ if (gConf.GfxPropertiesArray[i].Vendor == Intel) {
+ gSettings.Graphics.InjectAsDict.InjectIntel = true;
+ break;
+ }
+ }
}
if ( !configPlist.Graphics.Inject.isInjectATIDefined() )
{
- gSettings.Graphics.InjectAsDict.InjectATI =
- (gConf.GfxPropertiesArray.size() > 0 && gConf.GfxPropertiesArray[0].Vendor == Ati && (gConf.GfxPropertiesArray[0].DeviceID & 0xF000) != 0x6000 ) ||
- (gConf.GfxPropertiesArray.size() > 1 && gConf.GfxPropertiesArray[1].Vendor == Ati && (gConf.GfxPropertiesArray[1].DeviceID & 0xF000) != 0x6000 );
+ gSettings.Graphics.InjectAsDict.InjectATI = false;
+ for (size_t i = 0; i < gConf.GfxPropertiesArray.size(); i++) {
+ if (gConf.GfxPropertiesArray[i].Vendor == Ati && (gConf.GfxPropertiesArray[i].DeviceID & 0xF000) != 0x6000) {
+ gSettings.Graphics.InjectAsDict.InjectATI = true;
+ break;
+ }
+ }
}
if ( !configPlist.Graphics.Inject.isInjectNVidiaDefined() )
{
- gSettings.Graphics.InjectAsDict.InjectNVidia =
- ( gConf.GfxPropertiesArray.isCardAtPosNvidia(0) && gConf.GfxPropertiesArray[0].Family < 0xE0) ||
- ( gConf.GfxPropertiesArray.isCardAtPosNvidia(1) && gConf.GfxPropertiesArray[1].Family < 0xE0);
+ gSettings.Graphics.InjectAsDict.InjectNVidia = false;
+ for (size_t i = 0; i < gConf.GfxPropertiesArray.size(); i++) {
+ if (gConf.GfxPropertiesArray.isCardAtPosNvidia(i) && gConf.GfxPropertiesArray[i].Family < 0xE0) {
+ gSettings.Graphics.InjectAsDict.InjectNVidia = true;
+ break;
+ }
+ }
}
if ( configPlist.RtVariables.dgetBooterCfgStr().isEmpty() )
{
diff --git a/rEFIt_UEFI/Settings/ConfigPlist/Config_KernelAndKextPatches.h b/rEFIt_UEFI/Settings/ConfigPlist/Config_KernelAndKextPatches.h
index 8efb7682e6..a6cef8e351 100644
--- a/rEFIt_UEFI/Settings/ConfigPlist/Config_KernelAndKextPatches.h
+++ b/rEFIt_UEFI/Settings/ConfigPlist/Config_KernelAndKextPatches.h
@@ -223,6 +223,40 @@ class KernelAndKextPatches_Class : public XmlDict
XString8 dgetLabel() const override { return Comment.isDefined() ? Comment.value() : "NoLabel"_XS8; };
};
+ class KernelAndKextPatches_KextsToBlock_Class : public XmlDict
+ {
+ using super = XmlDict;
+ public:
+ XmlString8AllowEmpty Comment = XmlString8AllowEmpty();
+ XmlBool Disabled = XmlBool();
+ XmlString8AllowEmpty MatchOS = XmlString8AllowEmpty();
+ XmlString8AllowEmpty Name = XmlString8AllowEmpty();
+
+ XmlDictField m_fields[4] = {
+ {"Comment", Comment},
+ {"Disabled", Disabled},
+ {"MatchOS", MatchOS},
+ {"Name", Name},
+ };
+
+ public:
+ virtual void getFields(XmlDictField** fields, size_t* nb) override { *fields = m_fields; *nb = sizeof(m_fields)/sizeof(m_fields[0]); };
+
+ virtual XBool validate(XmlLiteParser* xmlLiteParser, const XString8& xmlPath, const XmlParserPosition& keyPos, XBool generateErrors) override {
+ XBool b = true;
+ b = super::validate(xmlLiteParser, xmlPath, keyPos, generateErrors);
+ if ( !Name.isDefined() || Name.value().isEmpty() ) {
+ b = xmlLiteParser->addWarning(generateErrors, S8Printf("Kext block entry is ignored because 'Name' is not defined in dict '%s:%d'.", xmlPath.c_str(), keyPos.getLine()));
+ }
+ return b;
+ }
+
+ const XString8& dgetComment() const { return Comment.isDefined() ? Comment.value() : NullXString8; };
+ XBool dgetDisabled() const { return Disabled.isDefined() ? Disabled.value() : XBool(false); };
+ const XString8& dgetMatchOS() const { return MatchOS.isDefined() ? MatchOS.value() : NullXString8; };
+ const XString8& dgetName() const { return Name.isDefined() ? Name.value() : NullXString8; };
+ };
+
class ForceKextsToLoadClass : public XmlStringWArray
@@ -244,7 +278,6 @@ class KernelAndKextPatches_Class : public XmlDict
XmlBool PanicNoKextDump = XmlBool();
XmlBool AppleIntelCPUPM = XmlBool();
XmlBool AppleRTC = XmlBool();
- XmlBool BlockSkywalk = XmlBool();
XmlBool EightApple = XmlBool();
XmlBool DellSMBIOSPatch = XmlBool();
XmlUInt32 FakeCPUID = XmlUInt32();
@@ -252,6 +285,7 @@ class KernelAndKextPatches_Class : public XmlDict
XmlData ATIConnectorsData = XmlData();
XmlData ATIConnectorsPatch = XmlData();
ForceKextsToLoadClass ForceKextsToLoad = ForceKextsToLoadClass();
+ XmlArray KextsToBlock = XmlArray();
XmlArray KextsToPatch = XmlArray();
XmlArray KernelToPatch = XmlArray();
XmlArray BootPatches = XmlArray();
@@ -264,7 +298,6 @@ class KernelAndKextPatches_Class : public XmlDict
{"PanicNoKextDump", PanicNoKextDump},
{"AppleIntelCPUPM", AppleIntelCPUPM},
{"AppleRTC", AppleRTC},
- {"BlockSkywalk", BlockSkywalk},
{"EightApple", EightApple},
{"DellSMBIOSPatch", DellSMBIOSPatch},
{"FakeCPUID", FakeCPUID},
@@ -272,6 +305,7 @@ class KernelAndKextPatches_Class : public XmlDict
{"ATIConnectorsData", ATIConnectorsData},
{"ATIConnectorsPatch", ATIConnectorsPatch},
{"ForceKextsToLoad", ForceKextsToLoad},
+ {"KextsToBlock", KextsToBlock},
{"KextsToPatch", KextsToPatch},
{"KernelToPatch", KernelToPatch},
{"BootPatches", BootPatches},
@@ -316,7 +350,6 @@ class KernelAndKextPatches_Class : public XmlDict
XBool dgetKPPanicNoKextDump() const { return PanicNoKextDump.isDefined() ? PanicNoKextDump.value() : XBool(false); };
XBool dget_KPAppleIntelCPUPM() const { return AppleIntelCPUPM.isDefined() ? AppleIntelCPUPM.value() : XBool(false); };
XBool dgetKPAppleRTC() const { return AppleRTC.isDefined() ? AppleRTC.value() : XBool(true); };
- XBool dgetBlockSkywalk() const { return BlockSkywalk.isDefined() ? BlockSkywalk.value() : XBool(false); };
XBool dgetEightApple() const { return EightApple.isDefined() ? EightApple.value() : XBool(false); };
XBool dgetKPDELLSMBIOS() const { return DellSMBIOSPatch.isDefined() ? DellSMBIOSPatch.value() : XBool(false); };
uint32_t dgetFakeCPUID() const { return FakeCPUID.isDefined() ? FakeCPUID.value() : 0; };
diff --git a/rEFIt_UEFI/gui/menu_items/menu_items.h b/rEFIt_UEFI/gui/menu_items/menu_items.h
index 6c492b16ca..df1a678735 100644
--- a/rEFIt_UEFI/gui/menu_items/menu_items.h
+++ b/rEFIt_UEFI/gui/menu_items/menu_items.h
@@ -443,6 +443,7 @@ class REFIT_ABSTRACT_MENU_ENTRY
void FilterKernelPatches();
void FilterKextPatches();
void FilterBootPatches();
+ void FilterKextsToBlock();
void applyKernPatch(const UINT8 *find, UINTN size, const UINT8 *repl, const CHAR8 *comment);
EFI_STATUS SetFSInjection();
diff --git a/rEFIt_UEFI/libeg/load_bmp.cpp b/rEFIt_UEFI/libeg/load_bmp.cpp
index dca621fe73..ac5dc4e211 100644
--- a/rEFIt_UEFI/libeg/load_bmp.cpp
+++ b/rEFIt_UEFI/libeg/load_bmp.cpp
@@ -202,7 +202,7 @@ EFI_STATUS XImage::FromBMP(UINT8 *FileData, IN UINTN FileDataLength)
PixelPtr->Reserved = AlphaValue;
PixelPtr++;
}
- if ((RealPixelWidth & 1) == 1) { // для нечетных
+ if ((RealPixelWidth & 1) == 1) { // for odd numbers
ImageValue = *ImagePtr++;
Index = ImageValue >> 4;
@@ -247,7 +247,7 @@ EFI_STATUS XImage::FromBMP(UINT8 *FileData, IN UINTN FileDataLength)
}
}
- DBG("sucсess\n");
+ DBG("success\n");
return EFI_SUCCESS;
}
diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp
index ac167cef00..f089367641 100644
--- a/rEFIt_UEFI/refit/main.cpp
+++ b/rEFIt_UEFI/refit/main.cpp
@@ -733,6 +733,21 @@ void LOADER_ENTRY::FilterBootPatches() {
}
}
+void LOADER_ENTRY::FilterKextsToBlock() {
+ if (KernelAndKextPatches.KextsToBlock.isEmpty()) {
+ return;
+ }
+
+ size_t settingsCount = gSettings.KernelAndKextPatches.KextsToBlock.size();
+ size_t entryCount = KernelAndKextPatches.KextsToBlock.size();
+ size_t count = (settingsCount < entryCount) ? settingsCount : entryCount;
+
+ for (size_t i = 0; i < count; ++i) {
+ KernelAndKextPatches.KextsToBlock[i].MenuItem.BValue =
+ gSettings.KernelAndKextPatches.KextsToBlock[i].MenuItem.BValue;
+ }
+}
+
//
// Null ConOut OutputString() implementation - for blocking
// text output from boot.efi when booting in graphics mode
@@ -1633,9 +1648,19 @@ void LOADER_ENTRY::StartLoader() {
mOpenCoreConfiguration.Kernel.Force.Values[kextIdx]
->ExecutablePath.Value);
}
- if (gSettings.KernelAndKextPatches.BlockSkywalk) {
- mOpenCoreConfiguration.Kernel.Block.Count = 1;
- mOpenCoreConfiguration.Kernel.Block.AllocCount = 1;
+ FilterKextsToBlock();
+ size_t blockCount = 0;
+ for (size_t blockIdx = 0;
+ blockIdx < KernelAndKextPatches.KextsToBlock.size(); blockIdx++) {
+ if (KernelAndKextPatches.KextsToBlock[blockIdx].ShouldBlock(macOSVersion)) {
+ blockCount++;
+ }
+ }
+
+ if (blockCount > 0) {
+ mOpenCoreConfiguration.Kernel.Block.Count = (UINT32)blockCount;
+ mOpenCoreConfiguration.Kernel.Block.AllocCount =
+ mOpenCoreConfiguration.Kernel.Block.Count;
mOpenCoreConfiguration.Kernel.Block.ValueSize =
sizeof(__typeof_am__(**mOpenCoreConfiguration.Kernel.Block.Values));
valuesSize = mOpenCoreConfiguration.Kernel.Block.AllocCount *
@@ -1645,44 +1670,41 @@ void LOADER_ENTRY::StartLoader() {
memset(mOpenCoreConfiguration.Kernel.Block.Values, 0, valuesSize);
- mOpenCoreConfiguration.Kernel.Block.Values[0] =
- (__typeof_am__(*mOpenCoreConfiguration.Kernel.Block.Values))malloc(
- mOpenCoreConfiguration.Kernel.Block.ValueSize);
- memset(mOpenCoreConfiguration.Kernel.Block.Values[0], 0,
- mOpenCoreConfiguration.Kernel.Block.ValueSize);
- mOpenCoreConfiguration.Kernel.Block.Values[0]->Enabled = 1;
- OC_STRING_ASSIGN(
- mOpenCoreConfiguration.Kernel.Block.Values[0]->Arch,
- OC_BLOB_GET(&mOpenCoreConfiguration.Kernel.Scheme.KernelArch));
- OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[0]->Comment,
- "Allow IOSkywalk Downgrade");
- OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[0]->MaxKernel,
- "");
- OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[0]->MinKernel,
- "23");
- OC_STRING_ASSIGN(
- mOpenCoreConfiguration.Kernel.Block.Values[0]->Identifier,
- "com.apple.iokit.IOSkywalkFamily");
- OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[0]->Strategy,
- "Exclude");
-
- // mOpenCoreConfiguration.Kernel.Block.Values[1] =
- // (__typeof_am__(*mOpenCoreConfiguration.Kernel.Block.Values))malloc(mOpenCoreConfiguration.Kernel.Block.ValueSize);
- // memset(mOpenCoreConfiguration.Kernel.Block.Values[1], 0,
- // mOpenCoreConfiguration.Kernel.Block.ValueSize);
- // mOpenCoreConfiguration.Kernel.Block.Values[1]->Enabled = 1;
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->Arch,
- // OC_BLOB_GET(&mOpenCoreConfiguration.Kernel.Scheme.KernelArch));
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->Comment,
- // "");
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->MaxKernel,
- // "");
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->MinKernel,
- // "23");
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->Identifier,
- // "com.apple.driver.mDNSOffloadUserClient");
- // OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Block.Values[1]->Strategy,
- // "Exclude");
+ size_t blockValueIdx = 0;
+ for (size_t blockIdx = 0;
+ blockIdx < KernelAndKextPatches.KextsToBlock.size(); blockIdx++) {
+ const auto& blockEntry = KernelAndKextPatches.KextsToBlock[blockIdx];
+ if (!blockEntry.ShouldBlock(macOSVersion)) {
+ continue;
+ }
+
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx] =
+ (__typeof_am__(*mOpenCoreConfiguration.Kernel.Block.Values))malloc(
+ mOpenCoreConfiguration.Kernel.Block.ValueSize);
+ memset(mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx], 0,
+ mOpenCoreConfiguration.Kernel.Block.ValueSize);
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->Enabled = 1;
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->Arch,
+ OC_BLOB_GET(&mOpenCoreConfiguration.Kernel.Scheme.KernelArch));
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->Comment,
+ blockEntry.Comment.c_str());
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->MaxKernel,
+ "");
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->MinKernel,
+ "");
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]
+ ->Identifier,
+ blockEntry.Name.c_str());
+ OC_STRING_ASSIGN(
+ mOpenCoreConfiguration.Kernel.Block.Values[blockValueIdx]->Strategy,
+ "Exclude");
+ blockValueIdx++;
+ }
}
#endif
diff --git a/rEFIt_UEFI/refit/menu.cpp b/rEFIt_UEFI/refit/menu.cpp
index 1dea8cc608..ec2c325e78 100644
--- a/rEFIt_UEFI/refit/menu.cpp
+++ b/rEFIt_UEFI/refit/menu.cpp
@@ -393,49 +393,47 @@ void FillInputs(XBool New)
InputItems[InputItemsCount++].BValue = gSettings.ACPI.AutoMerge;
InputItems[InputItemsCount].ItemType = BoolValue; //114
InputItems[InputItemsCount++].BValue = gSettings.Graphics.RadeonDeInit;
- InputItems[InputItemsCount].ItemType = BoolValue; //115
- InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.BlockSkywalk;
- InputItems[InputItemsCount].ItemType = RadioSwitch; //116 - DSDT chooser
- InputItems[InputItemsCount++].IValue = 116;
+ InputItems[InputItemsCount].ItemType = RadioSwitch; //115 - DSDT chooser
+ InputItems[InputItemsCount++].IValue = 115;
- InputItems[InputItemsCount].ItemType = ASString; //117
+ InputItems[InputItemsCount].ItemType = ASString; //116
InputItems[InputItemsCount++].SValue.SWPrintf("%s", gSettings.Smbios.EfiVersion.c_str());
- InputItems[InputItemsCount].ItemType = ASString; //118
+ InputItems[InputItemsCount].ItemType = ASString; //117
InputItems[InputItemsCount++].SValue.SWPrintf("%s", gSettings.RtVariables.BooterCfgStr.c_str());
- InputItems[InputItemsCount].ItemType = RadioSwitch; //119 - Audio chooser
- InputItems[InputItemsCount++].IValue = 119;
- InputItems[InputItemsCount].ItemType = Decimal; //120
+ InputItems[InputItemsCount].ItemType = RadioSwitch; //118 - Audio chooser
+ InputItems[InputItemsCount++].IValue = 118;
+ InputItems[InputItemsCount].ItemType = Decimal; //119
InputItems[InputItemsCount++].SValue.SWPrintf("%04d", DefaultAudioVolume);
- InputItems[InputItemsCount].ItemType = BoolValue; //121
+ InputItems[InputItemsCount].ItemType = BoolValue; //120
InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.KPPanicNoKextDump;
- InputItems[InputItemsCount].ItemType = Decimal; //122
+ InputItems[InputItemsCount].ItemType = Decimal; //121
InputItems[InputItemsCount++].SValue.SWPrintf("%04hhu", gSettings.Quirks.OcBooterQuirks.ProvideMaxSlide);
- InputItems[InputItemsCount].ItemType = BoolValue; //123
+ InputItems[InputItemsCount].ItemType = BoolValue; //122
InputItems[InputItemsCount++].BValue = gSettings.GUI.ProvideConsoleGop;
- InputItems[InputItemsCount].ItemType = BoolValue; //124
+ InputItems[InputItemsCount].ItemType = BoolValue; //123
InputItems[InputItemsCount++].BValue = gSettings.ACPI.FixHeaders;
- InputItems[InputItemsCount].ItemType = Hex; //125
+ InputItems[InputItemsCount].ItemType = Hex; //124
InputItems[InputItemsCount++].SValue.SWPrintf("0x%016llX", gSettings.Smbios.ExtendedFirmwareFeatures);
- InputItems[InputItemsCount].ItemType = Hex; //126
+ InputItems[InputItemsCount].ItemType = Hex; //125
InputItems[InputItemsCount++].SValue.SWPrintf("0x%016llX", gSettings.Smbios.ExtendedFirmwareFeaturesMask);
- InputItems[InputItemsCount].ItemType = Decimal; //127
+ InputItems[InputItemsCount].ItemType = Decimal; //126
InputItems[InputItemsCount++].SValue.SWPrintf("%04d", gSettings.Quirks.OcBooterQuirks.ResizeAppleGpuBars);
- InputItems[InputItemsCount].ItemType = BoolValue; //128
+ InputItems[InputItemsCount].ItemType = BoolValue; //127
InputItems[InputItemsCount++].BValue = gSettings.Quirks.OcKernelQuirks.ProvideCurrentCpuInfo;
- InputItems[InputItemsCount].ItemType = BoolValue; //129
+ InputItems[InputItemsCount].ItemType = BoolValue; //128
InputItems[InputItemsCount++].BValue = gResetSMC;
- InputItems[InputItemsCount].ItemType = Decimal; //130
+ InputItems[InputItemsCount].ItemType = Decimal; //129
InputItems[InputItemsCount++].SValue.SWPrintf("%08d", gSettings.Quirks.OcBooterQuirks.TscSyncTimeout);
- InputItems[InputItemsCount].ItemType = Hex; //131
+ InputItems[InputItemsCount].ItemType = Hex; //130
InputItems[InputItemsCount++].SValue.SWPrintf("0x%08X", gSettings.Smbios.SFakeCPU);
- InputItems[InputItemsCount].ItemType = BoolValue; //132
+ InputItems[InputItemsCount].ItemType = BoolValue; //131
InputItems[InputItemsCount++].BValue = gSettings.Quirks.OcKernelQuirks.XhciPortLimit;
//menu for drop table
@@ -983,10 +981,6 @@ void ApplyInputs(void)
gSettings.Graphics.RadeonDeInit = InputItems[i].BValue != 0;
}
i++; //115
- if (InputItems[i].Valid) {
- gSettings.KernelAndKextPatches.BlockSkywalk = InputItems[i].BValue != 0;
- }
- i++; //116
if (InputItems[i].Valid) {
if (OldChosenDsdt == 0xFFFF) {
gSettings.ACPI.DSDT.DsdtName = L"BIOS.aml"_XSW;
@@ -994,15 +988,15 @@ void ApplyInputs(void)
gSettings.ACPI.DSDT.DsdtName = DsdtsList[OldChosenDsdt];
}
}
- i++; //117
+ i++; //116
if (InputItems[i].Valid) {
gSettings.Smbios.EfiVersion = InputItems[i].SValue;
}
- i++; //118
+ i++; //117
if (InputItems[i].Valid) {
gSettings.RtVariables.BooterCfgStr = InputItems[i].SValue;
}
- i++; //119
+ i++; //118
if (InputItems[i].Valid) {
EFI_DEVICE_PATH_PROTOCOL* DevicePath = NULL;
int TmpIndex;
@@ -1026,7 +1020,7 @@ void ApplyInputs(void)
// DBG(" sound written to nvram variables\n");
}
}
- i++; //120
+ i++; //119
if (InputItems[i].Valid) {
DefaultAudioVolume = (UINT8)StrDecimalToUintn(InputItems[i].SValue.wc_str());
// DBG(" set output volume to %d\n", DefaultAudioVolume);
@@ -1039,37 +1033,37 @@ void ApplyInputs(void)
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
1, &DefaultAudioVolume);
}
- i++; //121
+ i++; //120
if (InputItems[i].Valid) {
gSettings.KernelAndKextPatches.KPPanicNoKextDump = InputItems[i].BValue != 0;
GlobalConfig.gBootChanged = true;
}
- i++; //122
+ i++; //121
if (InputItems[i].Valid) {
gSettings.Quirks.OcBooterQuirks.ProvideMaxSlide = (uint8_t)StrDecimalToUintn(InputItems[i].SValue.wc_str());
DBG(" set MaxSlide = %hhu\n", gSettings.Quirks.OcBooterQuirks.ProvideMaxSlide);
}
- i++; //123
+ i++; //122
if (InputItems[i].Valid) {
gSettings.GUI.ProvideConsoleGop = InputItems[i].BValue != 0;
DBG("applied ConsoleGopEnable=%s\n", gSettings.GUI.ProvideConsoleGop ? "Y" : "N" );
}
- i++; //124
+ i++; //123
if (InputItems[i].Valid) {
gSettings.ACPI.FixHeaders = InputItems[i].BValue != 0;
DBG("applied gSettings.ACPI.FixHeaders=%s\n", gSettings.ACPI.FixHeaders ? "Y" : "N" );
}
- i++; //125
+ i++; //124
if (InputItems[i].Valid) {
gSettings.Smbios.ExtendedFirmwareFeatures = StrHexToUint64(InputItems[i].SValue.wc_str());
DBG("applied ExtendedFirmwareFeatures=0x%llX\n", gSettings.Smbios.ExtendedFirmwareFeatures);
}
- i++; //126
+ i++; //125
if (InputItems[i].Valid) {
gSettings.Smbios.ExtendedFirmwareFeaturesMask = StrHexToUint64(InputItems[i].SValue.wc_str());
DBG("applied ExtendedFirmwareFeaturesMask=0x%llX\n", gSettings.Smbios.ExtendedFirmwareFeaturesMask);
}
- i++; //127
+ i++; //126
if (InputItems[i].Valid) {
INTN Minus = 0;
if (InputItems[i].SValue[0] == '-') {
@@ -1081,12 +1075,12 @@ void ApplyInputs(void)
}
DBG(" set GpuBar = %d\n", gSettings.Quirks.OcBooterQuirks.ResizeAppleGpuBars);
}
- i++; //128
+ i++; //127
if (InputItems[i].Valid) {
gSettings.Quirks.OcKernelQuirks.ProvideCurrentCpuInfo = InputItems[i].BValue != 0;
DBG("applied ProvideCurrentCpuInfo=%s\n", gSettings.Quirks.OcKernelQuirks.ProvideCurrentCpuInfo ? "Y" : "N" );
}
- i++; //129
+ i++; //128
if (InputItems[i].Valid) {
gResetSMC = InputItems[i].BValue != 0;
if (gResetSMC) {
@@ -1100,19 +1094,19 @@ void ApplyInputs(void)
gResetSMC = false;
}
}
- i++; //130
+ i++; //129
if (InputItems[i].Valid) {
INTN Minus = 0;
gSettings.Quirks.OcBooterQuirks.TscSyncTimeout = (decltype(gSettings.Quirks.OcBooterQuirks.TscSyncTimeout))StrDecimalToUintn(InputItems[i].SValue.data(Minus));
DBG("set TscSyncTimeout=%d\n", gSettings.Quirks.OcBooterQuirks.TscSyncTimeout);
}
//gSettings.Smbios.SFakeCPU
- i++; //131
+ i++; //130
if (InputItems[i].Valid) {
gSettings.Smbios.SFakeCPU = (UINT32)StrHexToUint64(InputItems[i].SValue.wc_str());
DBG("set FakeCPUID=%X\n", gSettings.Smbios.SFakeCPU);
}
- i++; //132
+ i++; //131
if (InputItems[i].Valid) {
gSettings.Quirks.OcKernelQuirks.XhciPortLimit = InputItems[i].BValue != 0;
DBG("applied XhciPortLimit=%s\n", gSettings.Quirks.OcKernelQuirks.XhciPortLimit ? "Y" : "N" );
@@ -1792,6 +1786,33 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuKextPatches()
return Entry;
}
+REFIT_ABSTRACT_MENU_ENTRY* SubMenuKextsToBlock()
+{
+ REFIT_MENU_ITEM_OPTIONS *Entry;
+ REFIT_MENU_SCREEN *SubScreen;
+ REFIT_INPUT_DIALOG *InputBootArgs;
+
+ Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_KEXTS, "Kexts to block->"_XS8);
+
+ if (gSettings.KernelAndKextPatches.KextsToBlock.isEmpty()) {
+ SubScreen->AddMenuInfoLine_f("No KextsToBlock entries.");
+ } else {
+ for (size_t Index = 0; Index < gSettings.KernelAndKextPatches.KextsToBlock.size(); Index++) {
+ const auto& entry = gSettings.KernelAndKextPatches.KextsToBlock[Index];
+ InputBootArgs = new REFIT_INPUT_DIALOG;
+ InputBootArgs->Title.SWPrintf("%90s", entry.Label.c_str());
+ InputBootArgs->Row = 0xFFFF; //cursor
+ InputBootArgs->Item = &(gSettings.KernelAndKextPatches.KextsToBlock[Index].MenuItem);
+ InputBootArgs->AtClick = ActionEnter;
+ InputBootArgs->AtRightClick = ActionDetails;
+ SubScreen->AddMenuEntry(InputBootArgs, true);
+ }
+ }
+
+ SubScreen->AddMenuEntry(&MenuEntryReturn, false);
+ return Entry;
+}
+
REFIT_ABSTRACT_MENU_ENTRY* SubMenuKextBlockInjection(const XString8& UniSysVer)
{
REFIT_MENU_ITEM_OPTIONS *Entry = NULL;
@@ -1959,16 +1980,16 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuBinaries()
SubScreen->AddMenuItemInput(91, "Kernel Lapic", false);
SubScreen->AddMenuItemInput(105, "Kernel XCPM", false);
SubScreen->AddMenuItemInput(48, "Kernel PM", false);
- SubScreen->AddMenuItemInput(121, "Panic No Kext Dump", false);
- SubScreen->AddMenuItemInput(128, "Provide CPU Info", false);
+ SubScreen->AddMenuItemInput(120, "Panic No Kext Dump", false);
+ SubScreen->AddMenuItemInput(127, "Provide CPU Info", false);
SubScreen->AddMenuEntry(SubMenuKernelPatches(), true);
SubScreen->AddMenuInfo_f("----------------------");
SubScreen->AddMenuItemInput(46, "AppleIntelCPUPM Patch", false);
SubScreen->AddMenuItemInput(47, "AppleRTC Patch", false);
// SubScreen->AddMenuItemInput(45, "No 8 Apples Patch", false);
SubScreen->AddMenuItemInput(61, "Dell SMBIOS Patch", false);
- SubScreen->AddMenuItemInput(115, "Block SkywalkFamily", false);
- SubScreen->AddMenuItemInput(132, "Unlimit Xhci Ports", false);
+ SubScreen->AddMenuEntry(SubMenuKextsToBlock(), true);
+ SubScreen->AddMenuItemInput(131, "Unlimit Xhci Ports", false);
// SubScreen->AddMenuItemInput(115, "No Caches", false);
// SubScreen->AddMenuItemInput(44, "Kext patching allowed", false);
SubScreen->AddMenuEntry(SubMenuKextPatches(), true);
@@ -2042,7 +2063,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuSmbios()
SubScreen->AddMenuItemInput(78, "Product Name:", true);
SubScreen->AddMenuItemInput(79, "Product Version:", true);
SubScreen->AddMenuItemInput(80, "Product SN:", true);
- SubScreen->AddMenuItemInput(131, "Fake CPUID:", true);
+ SubScreen->AddMenuItemInput(130, "Fake CPUID:", true);
SubScreen->AddMenuItemInput(81, "Board ID:", true);
SubScreen->AddMenuItemInput(82, "Board SN:", true);
SubScreen->AddMenuItemInput(83, "Board Type:", true);
@@ -2052,10 +2073,10 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuSmbios()
SubScreen->AddMenuItemInput(87, "ROM Release Date:", true);
SubScreen->AddMenuItemInput(62, "FirmwareFeatures:", true);
SubScreen->AddMenuItemInput(63, "FirmwareFeaturesMask:", true);
- SubScreen->AddMenuItemInput(125, "ExtendedFirmwareFeatures:", true);
- SubScreen->AddMenuItemInput(126, "ExtendedFirmwareFeaturesMask:", true);
+ SubScreen->AddMenuItemInput(124, "ExtendedFirmwareFeatures:", true);
+ SubScreen->AddMenuItemInput(125, "ExtendedFirmwareFeaturesMask:", true);
SubScreen->AddMenuItemInput(17, "PlatformFeature:", true);
- SubScreen->AddMenuItemInput(117, "EFI Version:", true);
+ SubScreen->AddMenuItemInput(116, "EFI Version:", true);
SubScreen->AddMenuEntry(&MenuEntryReturn, false);
return Entry;
@@ -2166,13 +2187,13 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuDsdts()
Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_ACPI, "Dsdt name->"_XS8);
SubScreen->AddMenuInfoLine_f("Select a DSDT file:");
- SubScreen->AddMenuItemSwitch(116, "BIOS.aml", false);
+ SubScreen->AddMenuItemSwitch(115, "BIOS.aml", false);
for (i = 0; i < DsdtsList.size(); i++) {
InputBootArgs = new REFIT_MENU_SWITCH;
InputBootArgs->Title.takeValueFrom(DsdtsList[i]);
InputBootArgs->Row = i + 1;
- InputBootArgs->Item = &InputItems[116];
+ InputBootArgs->Item = &InputItems[115];
InputBootArgs->AtClick = ActionEnter;
InputBootArgs->AtRightClick = ActionDetails;
SubScreen->AddMenuEntry(InputBootArgs, true);
@@ -2201,7 +2222,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuACPI()
SubScreen->AddMenuEntry(SubMenuDsdtFix(), true);
SubScreen->AddMenuEntry(SubMenuDSDTPatches(), true);
SubScreen->AddMenuItemInput(49, "Fix MCFG", false);
- SubScreen->AddMenuItemInput(124, "Fix Headers", gSettings.ACPI.FixHeaders);
+ SubScreen->AddMenuItemInput(123, "Fix Headers", gSettings.ACPI.FixHeaders);
SubScreen->AddMenuEntry(&MenuEntryReturn, false);
return Entry;
@@ -2217,7 +2238,7 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuAudioPort()
Entry = newREFIT_MENU_ITEM_OPTIONS(&SubScreen, ActionEnter, SCREEN_AUDIOPORTS, "Startup sound output->"_XS8);
SubScreen->AddMenuInfoLine_f("Select an audio output, press F7 to test");
- SubScreen->AddMenuItemInput(120, "Volume:", true);
+ SubScreen->AddMenuItemInput(119, "Volume:", true);
for (i = 0; i < AudioList.size(); i++) {
InputBootArgs = new REFIT_MENU_SWITCH;
@@ -2441,8 +2462,8 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuSystem()
SubScreen->AddMenuItemInput(2, "Block kext:", true);
SubScreen->AddMenuItemInput(51, "Set OS version if not detected:", true);
- SubScreen->AddMenuItemInput(118, "Booter Cfg Command:", true);
- SubScreen->AddMenuItemInput(129, "Reset SMC", false);
+ SubScreen->AddMenuItemInput(117, "Booter Cfg Command:", true);
+ SubScreen->AddMenuItemInput(128, "Reset SMC", false);
SubScreen->AddMenuEntry(SubMenuCSR(), true);
// SubScreen->AddMenuEntry(SubMenuBLC(), true);
@@ -2501,13 +2522,13 @@ REFIT_ABSTRACT_MENU_ENTRY* SubMenuQuirks()
SubScreen->AddMenuCheck("ProtectUefiServices", QUIRK_UEFI, 101);
SubScreen->AddMenuCheck("ProvideCustomSlide", QUIRK_CUSTOM, 101);
//decimal
- SubScreen->AddMenuItemInput(122, "ProvideMaxSlide:", true);
+ SubScreen->AddMenuItemInput(121, "ProvideMaxSlide:", true);
SubScreen->AddMenuCheck("RebuildAppleMemoryMap", QUIRK_MAP, 101);
- SubScreen->AddMenuItemInput(127, "ResizeAppleGpuBars:", true);
+ SubScreen->AddMenuItemInput(126, "ResizeAppleGpuBars:", true);
SubScreen->AddMenuCheck("SetupVirtualMap", QUIRK_VIRT, 101);
SubScreen->AddMenuCheck("SyncRuntimePermissions", QUIRK_PERM, 101);
- SubScreen->AddMenuItemInput(130, "TscSyncTimeout:", true);
+ SubScreen->AddMenuItemInput(129, "TscSyncTimeout:", true);
SubScreen->AddMenuEntry(&MenuEntryReturn, false);
ModifyTitles(Entry);