diff --git a/Xcode/CloverX64TestNewParser/CloverX64TestNewParser.xcodeproj/project.pbxproj b/Xcode/CloverX64TestNewParser/CloverX64TestNewParser.xcodeproj/project.pbxproj index 1d6e5c992..a9925eadb 100644 --- a/Xcode/CloverX64TestNewParser/CloverX64TestNewParser.xcodeproj/project.pbxproj +++ b/Xcode/CloverX64TestNewParser/CloverX64TestNewParser.xcodeproj/project.pbxproj @@ -5438,13 +5438,13 @@ 9A358B3625CF117A00A3850D /* cpp_lib */ = { isa = PBXGroup; children = ( + 9A4147662604F82900440186 /* undefinable.h */, + 9A358B3925CF117A00A3850D /* XmlLiteCompositeTypes.cpp */, + 9A358B3C25CF117A00A3850D /* XmlLiteCompositeTypes.h */, + 9A358B3A25CF117A00A3850D /* XmlLiteParser.cpp */, + 9A358B3725CF117A00A3850D /* XmlLiteParser.h */, 9AD0EB22260A497500093F23 /* XmlLiteSimpleTypes.cpp */, 9AD0EB23260A497500093F23 /* XmlLiteSimpleTypes.h */, - 9A4147662604F82900440186 /* undefinable.h */, - 9A358B3725CF117A00A3850D /* XmlLiteParser.h */, - 9A358B3925CF117A00A3850D /* XmlLiteCompositeTypes.cpp */, - 9A358B3A25CF117A00A3850D /* XmlLiteParser.cpp */, - 9A358B3C25CF117A00A3850D /* XmlLiteCompositeTypes.h */, ); path = cpp_lib; sourceTree = ""; @@ -15793,8 +15793,6 @@ 9AFDD05825CE730F00EEAF06 /* cpp_unit_test */ = { isa = PBXGroup; children = ( - 9A0D113625FF583F0040555F /* strcasecmp_test.cpp */, - 9A0D113725FF58400040555F /* strcasecmp_test.h */, 9AFDD07125CE730F00EEAF06 /* all_tests.cpp */, 9AFDD07A25CE730F00EEAF06 /* all_tests.h */, 9A9037E425CFE7D000F14179 /* config-test.cpp */, @@ -15815,6 +15813,8 @@ 9AFDD07625CE730F00EEAF06 /* printf_lite-test.h */, 9AFDD06B25CE730F00EEAF06 /* printlib-test.cpp */, 9AFDD07225CE730F00EEAF06 /* printlib-test.h */, + 9A0D113625FF583F0040555F /* strcasecmp_test.cpp */, + 9A0D113725FF58400040555F /* strcasecmp_test.h */, 9AFDD06A25CE730F00EEAF06 /* strcmp_test.cpp */, 9AFDD05F25CE730F00EEAF06 /* strcmp_test.h */, 9AFDD07B25CE730F00EEAF06 /* strlen_test.cpp */, @@ -15826,6 +15826,7 @@ 9AFDD06025CE730F00EEAF06 /* XBuffer_tests.cpp */, 9AFDD05E25CE730F00EEAF06 /* XBuffer_tests.h */, 9A9037E325CFE7CD00F14179 /* xml_lite-test.cpp */, + 9A9037E525CFE7D000F14179 /* xml_lite-test.h */, 9AFDD07325CE730F00EEAF06 /* XObjArray_tests.cpp */, 9AFDD06D25CE730F00EEAF06 /* XObjArray_tests.h */, 9AFDD07725CE730F00EEAF06 /* XString_test.cpp */, @@ -15833,7 +15834,6 @@ 9AFDD06C25CE730F00EEAF06 /* XStringArray_test.cpp */, 9AFDD06725CE730F00EEAF06 /* XStringArray_test.h */, 9AFDD07925CE730F00EEAF06 /* XToolsCommon_test.cpp */, - 9A9037E525CFE7D000F14179 /* xml_lite-test.h */, 9AFDD05925CE730F00EEAF06 /* XToolsCommon_test.h */, ); path = cpp_unit_test; diff --git a/Xcode/CloverX64TestNewParser/config-test1.plist b/Xcode/CloverX64TestNewParser/config-test1.plist index ec44c6aba..84670c53a 100644 --- a/Xcode/CloverX64TestNewParser/config-test1.plist +++ b/Xcode/CloverX64TestNewParser/config-test1.plist @@ -812,21 +812,105 @@ KernelToPatch - Comment - c2 + #Comment + Disable panic kext logging on 10.14 Release kernel Disabled Find - ISI= + igKEwHRC + + MaskFind + + //////// + + MaskReplace + + AAAAAP8A + + MatchOS + 10.14 + Replace + + igKEwOtC + + + + Comment + Disable panic kext logging on 10.13 Release kernel + Disabled + + Find + + igKEwHRE - MatchBuild - 10.13.6 MatchOS 10.13 Replace - IyQ= + igKEwOtE + + + + Comment + Lapic panic patch example + Disabled + + Find + + 6AAA//+DAAAAAAAA + + MaskFind + + /wAA////AAAAAP// + + MaskReplace + + /wAA//////////// + + MaskStart + + /////wA= + + MatchOS + All + RangeFind + 200 + Replace + + 6AAA//8xwJCQkJCQ + + StartPattern + + ACnHeAAx241H+oM= + + + + Comment + Symbolic patch example got lapic panic + Disabled + + Find + + 6AAA//+DAAAAAAAA + + MaskFind + + /wAA////AAAAAP// + + MaskReplace + + /wAA//////////// + + MatchOS + All + Procedure + _lapic_interrupt + RangeFind + 200 + Replace + + 6AAA//8xwJCQkJCQ @@ -836,24 +920,134 @@ Comment - c1 + Enable TRIM for SSD + Disabled + + Find + + AEFQUExFIFNTRAA= + + InfoPlistPatch + + Name + com.apple.iokit.IOAHCIBlockStorage + Replace + + AAAAAAAAAAAAAAA= + + + + Comment + External icons patch + Disabled + + Find + + RXh0ZXJuYWw= + + InfoPlistPatch + + MatchOS + 10.11.x,10.12.x,10.13.x,10.14.x,10.15.x + Name + com.apple.driver.AppleAHCIPort + Replace + + SW50ZXJuYWw= + + + + Comment + framebuffer4K Disabled Find - AQ== + AwAiDQADAwMAAAACAAAwAQ== InfoPlistPatch - - MatchBuild - 10.14.6 - MatchOS - 10.14 + Name - k1 + AppleIntelFramebufferAzul Replace - Ag== + AwAiDQADAwMAAAAEAAAAAw== + + + + Comment + Disable NVDARequiredOS + Disabled + + Find + + TlZEQVJlcXVpcmVkT1MA + + InfoPlistPatch + + Name + NVDAStartupWeb + Replace + + AAAAAAAAAAAAAAAAAAAA + + + + Comment + Disable board-id check to prevent no signal + Disabled + + Find + + SI01qjQ= + + InfoPlistPatch + + Name + com.apple.driver.AppleGraphicsDevicePolicy + Replace + + Dx+AAAA= + + + + Comment + Prevent AGDP from loading + Disabled + + Find + + ugUAAAA= + + InfoPlistPatch + + MatchOS + 10.15.x + Name + com.apple.driver.AppleGraphicsDevicePolicy + Replace + + ugAAAAA= + + + + Comment + Atheros Locale Fix + Disabled + + Find + + g/g3 + + InfoPlistPatch + + MatchOS + 10.12.x + Name + AirPortAtheros40 + Replace + + g/gh @@ -867,6 +1061,8 @@ InfoPlistPatch + MatchOS + 10.12.x Name IONVMeFamily Replace @@ -874,6 +1070,408 @@ PHN0cmluZz5wY2kxNDRkLGE4MDI8L3N0cmluZz4= + + Comment + IONVMeFamily Pike R. Alpha Patch#1 (Sierra) + Disabled + + Find + + ibPoAgAAweAMBQAQAACJgw== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + ibPoAgAAweAJBQAQAACJgw== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#2 (Sierra) + Disabled + + Find + + D7aMiIIAAACD+QwPhTIBAA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + D7aMiIIAAACD+QkPhTIBAA== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#3 (Sierra) + Disabled + + Find + + AMeDpAAAAAAQAABIi0gISA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + AMeDpAAAAAACAABIi0gISA== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#4 (Sierra) + Disabled + + Find + + SYnGTYX2dGFBwecMSWP/vg== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + SYnGTYX2dGFBwecJSWP/vg== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#5 (Sierra) + Disabled + + Find + + hv8PAABIwegMD7cPgeH/Dw== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + hv8PAABIwegJD7cPgeH/Dw== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#6_7 (Sierra) + Disabled + + Find + + icGB4f8PAABIAdFIgfn/DwAAdzs= + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + icGB4f8BAABIAdFIgfn/AQAAdzs= + + + + Comment + IONVMeFamily Pike R. Alpha Patch#8 (Sierra) + Disabled + + Find + + SYHF/w8AAEnB7QxJiwQkSA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + SYHF/w8AAEnB7QlJiwQkSA== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#9_10 (Sierra) + Disabled + + Find + + BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIB + AABBvAAQAABJKfQ= + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIB + AABBvAACAABJKfQ= + + + + Comment + IONVMeFamily Pike R. Alpha Patch#11 (Sierra) + Disabled + + Find + + AABJiY4iAQAAugAQAABIKQ== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + AABJiY4iAQAAugACAABIKQ== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#12 (Sierra) + Disabled + + Find + + yAAAAEkp17gAEAAATYskJA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + yAAAAEkp17gAAgAATYskJA== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#13 (Sierra) + Disabled + + Find + + 4b+AQBUGTYnWugAQAABFMQ== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + 4b+AQBUGTYnWugACAABFMQ== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#14 (Sierra) + Disabled + + Find + + iWTY+EmBxAAQAABJgccA8A== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + iWTY+EmBxAACAABJgccA8A== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#15 (Sierra) + Disabled + + Find + + Bf8PAABIwegMZvfB/w8PlQ== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + Bf8PAABIwegJZvfB/w8PlQ== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#16 (Sierra) + Disabled + + Find + + weIIQQ+2wcHgDEQJ0EQJwA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + weIIQQ+2wcHgCUQJ0EQJwA== + + + + Comment + IONVMeFamily Pike R. Alpha Patch#17 (Sierra) + Disabled + + Find + + RYTJD5XAD7bAweAMRAnYRA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + IONVMeFamily + Replace + + RYTJD5XAD7bAweAJRAnYRA== + + + + Comment + change 15 port limit to 26 in XHCI kext (100-series) + Disabled + + Find + + g32MEA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + AppleUSBXHCIPCI + Replace + + g32MGw== + + + + Comment + change 15 port limit to 26 in XHCI kext (100-series) + Disabled + + Find + + g710////EA== + + InfoPlistPatch + + MatchOS + 10.12.x + Name + AppleUSBXHCISPT + Replace + + g710////Gw== + + + + Comment + 15 to 20 port limit (9-series) + Disabled + + Find + + g710////EA== + + InfoPlistPatch + + MatchOS + 10.12.6 + Name + AppleUSBXHCIPCI + Replace + + g710////FQ== + + + + Comment + 15 to 26 port limit (100-series) + Disabled + + Find + + g710////EA== + + InfoPlistPatch + + MatchOS + 10.12.6 + Name + AppleUSBXHCIPCI + Replace + + g710////Gw== + + + + Comment + USB 10.13.6 by PMHeart + Disabled + + Find + + g32IDw+DpwQAAA== + + InfoPlistPatch + + MatchOS + 10.13.6 + Name + com.apple.driver.usb.AppleUSBXHCI + Replace + + g32ID5CQkJCQkA== + + RtVariables diff --git a/Xcode/CloverX64TestNewParser/src/main.cpp b/Xcode/CloverX64TestNewParser/src/main.cpp index a404aa73e..aaec86430 100755 --- a/Xcode/CloverX64TestNewParser/src/main.cpp +++ b/Xcode/CloverX64TestNewParser/src/main.cpp @@ -112,6 +112,12 @@ extern "C" int main(int argc, const char * argv[]) (void)argv; setlocale(LC_ALL, "en_US"); // to allow printf unicode char + +char buf[] = { 'a', '\xef', '\xbb', '\xbf', 'b', 0}; +XString8 s5 = S8Printf("01234567890123456789"); +s5.S8Printf("%s", buf); +//const char* buf2 = s5.c_str(); + xcode_utf_fixed_tests(); diff --git a/rEFIt_UEFI/Platform/DataHubCpu.cpp b/rEFIt_UEFI/Platform/DataHubCpu.cpp index 5f63fcb59..9b4423102 100644 --- a/rEFIt_UEFI/Platform/DataHubCpu.cpp +++ b/rEFIt_UEFI/Platform/DataHubCpu.cpp @@ -333,10 +333,10 @@ SetVariablesForOSX(LOADER_ENTRY *Entry) // Download-Fritz: Do not mess with BacklightLevel; it's OS X's business if (gMobile) { - if (gSettings.BacklightLevelConfig) { - SetNvramVariable(L"backlight-level", &gEfiAppleBootGuid, Attributes, sizeof(gSettings.BacklightLevel), &gSettings.BacklightLevel); + if (gSettings.SystemParameters.BacklightLevelConfig) { + SetNvramVariable(L"backlight-level", &gEfiAppleBootGuid, Attributes, sizeof(gSettings.SystemParameters.BacklightLevel), &gSettings.SystemParameters.BacklightLevel); } else { - AddNvramVariable(L"backlight-level", &gEfiAppleBootGuid, Attributes, sizeof(gSettings.BacklightLevel), &gSettings.BacklightLevel); + AddNvramVariable(L"backlight-level", &gEfiAppleBootGuid, Attributes, sizeof(gSettings.SystemParameters.BacklightLevel), &gSettings.SystemParameters.BacklightLevel); } } @@ -388,7 +388,7 @@ SetVariablesForOSX(LOADER_ENTRY *Entry) } else { DeleteNvramVariable(L"bootercfg", &gEfiAppleBootGuid); } - if (gSettings.NvidiaWeb) { + if (gSettings.SystemParameters.NvidiaWeb) { NvidiaWebValue = "1"; SetNvramVariable(L"nvda_drv", &gEfiAppleBootGuid, Attributes, 2, (void*)NvidiaWebValue); } else { diff --git a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp index 8dfecaa45..dcce83509 100644 --- a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp +++ b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.cpp @@ -8,7 +8,7 @@ #include "KERNEL_AND_KEXT_PATCHES.h" #include "MacOsVersion.h" -bool KEXT_PATCH::IsPatchEnabledByBuildNumber(const XString8& Build) +bool ABSTRACT_PATCH::IsPatchEnabledByBuildNumber(const XString8& Build) { BOOLEAN ret = FALSE; @@ -35,7 +35,7 @@ bool KEXT_PATCH::IsPatchEnabledByBuildNumber(const XString8& Build) } -bool KEXT_PATCH::IsPatchEnabled(const MacOsVersion& CurrOS) +bool ABSTRACT_PATCH::IsPatchEnabled(const MacOsVersion& CurrOS) { BOOLEAN ret = FALSE; diff --git a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h index a1e1a1b2f..cf60e58a6 100644 --- a/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h +++ b/rEFIt_UEFI/Platform/KERNEL_AND_KEXT_PATCHES.h @@ -17,32 +17,26 @@ extern "C" { } -class KEXT_PATCH +class ABSTRACT_PATCH { public: - XString8 Name; - XString8 Label; - BOOLEAN IsPlistPatch; - XBuffer Data; - XBuffer Patch; - XBuffer MaskFind; - XBuffer MaskReplace; - XBuffer StartPattern; - XBuffer StartMask; - INTN SearchLen; - XString8 ProcedureName; //procedure len will be StartPatternLen - INTN Count; - INTN Skip; - XString8 MatchOS; - XString8 MatchBuild; - INPUT_ITEM MenuItem = INPUT_ITEM(); + bool Disabled = bool(); +// XString8 Comment = XString8(); + XBuffer Data = XBuffer (); + XBuffer Patch = XBuffer (); + XBuffer MaskFind = XBuffer (); + XBuffer MaskReplace = XBuffer (); + XBuffer StartPattern = XBuffer (); + XBuffer StartMask = XBuffer (); + INTN SearchLen = INTN(); + INTN Count = INTN(); + INTN Skip = INTN(); + XString8 MatchOS = XString8(); + XString8 MatchBuild = XString8(); - KEXT_PATCH() : Name(), Label(), IsPlistPatch(0), Data(), Patch(), MaskFind(), MaskReplace(), - StartPattern(), StartMask(), SearchLen(0), ProcedureName(), Count(-1), Skip(0), MatchOS(), MatchBuild() - { } - KEXT_PATCH(const KEXT_PATCH& other) = default; // default is fine if there is only native type and objects that have copy ctor - KEXT_PATCH& operator = ( const KEXT_PATCH & ) = default; // default is fine if there is only native type and objects that have copy ctor - ~KEXT_PATCH() {} + // Computed + XString8 Name = XString8(); + XString8 Label = XString8(); // TODO : it's a calculated value from comment field. /** Returns a boolean and then enable disable the patch if MachOSEntry have a match for the booted OS. */ bool IsPatchEnabledByBuildNumber(const XString8& Build); @@ -50,74 +44,55 @@ public: }; +class ABSTRACT_KEXT_OR_KERNEL_PATCH : public ABSTRACT_PATCH +{ +public: + bool IsPlistPatch = BOOLEAN(); + XString8 ProcedureName = XString8(); //procedure len will be StartPatternLen + INPUT_ITEM MenuItem = INPUT_ITEM(); +}; + + + +class KEXT_PATCH : public ABSTRACT_KEXT_OR_KERNEL_PATCH +{ +public: + bool IsPlistPatch = BOOLEAN(); + INPUT_ITEM MenuItem = INPUT_ITEM(); +}; + +class KERNEL_PATCH : public ABSTRACT_KEXT_OR_KERNEL_PATCH +{ +public: + INPUT_ITEM MenuItem = INPUT_ITEM(); +}; + +class BOOT_PATCH : public ABSTRACT_PATCH +{ +public: + INPUT_ITEM MenuItem = INPUT_ITEM(); +}; + class KERNEL_AND_KEXT_PATCHES { public: - BOOLEAN FuzzyMatch; - XString8 OcKernelCache; - OC_KERNEL_QUIRKS OcKernelQuirks; - BOOLEAN KPDebug; -// BOOLEAN KPKernelCpu; - BOOLEAN KPKernelLapic; - BOOLEAN KPKernelXCPM; - BOOLEAN KPKernelPm; - BOOLEAN KPAppleIntelCPUPM; - BOOLEAN KPAppleRTC; - BOOLEAN KPDELLSMBIOS; // Dell SMBIOS patch - BOOLEAN KPPanicNoKextDump; - BOOLEAN EightApple; - UINT8 pad[7]; - UINT32 FakeCPUID; - // UINT32 align0; - XString8 KPATIConnectorsController; -#if defined(MDE_CPU_IA32) - UINT32 align1; -#endif - - XBuffer KPATIConnectorsData; -#if defined(MDE_CPU_IA32) - UINT32 align2; -#endif - -#if defined(MDE_CPU_IA32) - UINT32 align3; -#endif - XBuffer KPATIConnectorsPatch; -#if defined(MDE_CPU_IA32) - UINT32 align4; -#endif - -// INT32 NrKexts; - UINT32 align40; - XObjArray KextPatches; -#if defined(MDE_CPU_IA32) - UINT32 align5; -#endif - -// INT32 NrForceKexts; - UINT32 align50; -// CHAR16 **ForceKexts; - XStringWArray ForceKexts; -#if defined(MDE_CPU_IA32) - UINT32 align6; -#endif -// INT32 NrKernels; - XObjArray KernelPatches; -// INT32 NrBoots; - XObjArray BootPatches; - - KERNEL_AND_KEXT_PATCHES() : FuzzyMatch(0), OcKernelCache(), OcKernelQuirks{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, KPDebug(0), KPKernelLapic(0), KPKernelXCPM(0), KPKernelPm(0), KPAppleIntelCPUPM(0), KPAppleRTC(0), KPDELLSMBIOS(0), KPPanicNoKextDump(0), - EightApple(0), pad{0}, FakeCPUID(0), KPATIConnectorsController(0), KPATIConnectorsData(), - KPATIConnectorsPatch(), align40(0), KextPatches(), align50(0), ForceKexts(), - KernelPatches(), BootPatches() - { } - KERNEL_AND_KEXT_PATCHES(const KERNEL_AND_KEXT_PATCHES& other) = default; // Can be defined if needed - KERNEL_AND_KEXT_PATCHES& operator = ( const KERNEL_AND_KEXT_PATCHES & ) = default; // Can be defined if needed - ~KERNEL_AND_KEXT_PATCHES() {} - -// /** Returns a boolean and then enable disable the patch if MachOSEntry have a match for the booted OS. */ -// bool IsPatchEnabledByBuildNumber(const XString8& Build); - + bool KPDebug = bool(); + bool KPKernelLapic = bool(); + bool KPKernelXCPM = bool(); + bool _KPKernelPm = bool(); + bool KPPanicNoKextDump = bool(); + bool _KPAppleIntelCPUPM = bool(); + bool KPAppleRTC = bool(); + bool EightApple = bool(); + bool KPDELLSMBIOS = bool(); // Dell SMBIOS patch + UINT32 FakeCPUID = UINT32(); + XString8 KPATIConnectorsController = XString8(); + XBuffer KPATIConnectorsData = XBuffer(); + XBuffer KPATIConnectorsPatch = XBuffer(); + XStringWArray ForceKextsToLoad = XStringWArray(); + XObjArray KextPatches = XObjArray(); + XObjArray KernelPatches = XObjArray(); + XObjArray BootPatches = XObjArray(); } ; diff --git a/rEFIt_UEFI/Platform/Settings.cpp b/rEFIt_UEFI/Platform/Settings.cpp index a8db93466..2162191cb 100755 --- a/rEFIt_UEFI/Platform/Settings.cpp +++ b/rEFIt_UEFI/Platform/Settings.cpp @@ -103,7 +103,7 @@ UINT16 gBacklightLevel; BOOLEAN GetLegacyLanAddress; BOOLEAN ResumeFromCoreStorage; -BOOLEAN gRemapSmBiosIsRequire; +//BOOLEAN gRemapSmBiosIsRequire; // QPI //BOOLEAN SetTable132 = FALSE; @@ -586,7 +586,7 @@ static UINT8 // assume data in hex encoded string property UINT32 Len = (UINT32)Prop->getString()->stringValue().length() >> 1; // number of hex digits Data = (__typeof__(Data))AllocateZeroPool(Len); // 2 chars per byte, one more byte for odd number - Len = hex2bin(Prop->getString()->stringValue().c_str(), Data, Len); + Len = hex2bin(Prop->getString()->stringValue(), Data, Len); if (DataLen != NULL) *DataLen = Len; /* @@ -879,7 +879,7 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, Prop = DictPointer->propertyForKey("KernelPm"); if (Prop != NULL || GlobalConfig.gBootChanged) { - Patches->KPKernelPm = IsPropertyNotNullAndTrue(Prop); + Patches->_KPKernelPm = IsPropertyNotNullAndTrue(Prop); } Prop = DictPointer->propertyForKey("PanicNoKextDump"); @@ -889,13 +889,13 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, Prop = DictPointer->propertyForKey("AppleIntelCPUPM"); if (Prop != NULL || GlobalConfig.gBootChanged) { - Patches->KPAppleIntelCPUPM = IsPropertyNotNullAndTrue(Prop); - } - //anyway - if (GlobalConfig.NeedPMfix) { - Patches->KPKernelPm = TRUE; - Patches->KPAppleIntelCPUPM = TRUE; + Patches->_KPAppleIntelCPUPM = IsPropertyNotNullAndTrue(Prop); } +// //anyway +// if (GlobalConfig.NeedPMfix) { +// Patches->KPKernelPm = TRUE; +// Patches->KPAppleIntelCPUPM = TRUE; +// } Prop = DictPointer->propertyForKey("AppleRTC"); if (Prop != NULL || GlobalConfig.gBootChanged) { @@ -915,7 +915,7 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, // but the major target is to make code clean Prop = DictPointer->propertyForKey("DellSMBIOSPatch"); Patches->KPDELLSMBIOS = IsPropertyNotNullAndTrue(Prop); // default == FALSE - gRemapSmBiosIsRequire = Patches->KPDELLSMBIOS; +// gRemapSmBiosIsRequire = Patches->KPDELLSMBIOS; Prop = DictPointer->propertyForKey("FakeCPUID"); if (Prop != NULL || GlobalConfig.gBootChanged) { @@ -937,15 +937,13 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, if (Patches->KPATIConnectorsData.isEmpty() || Patches->KPATIConnectorsPatch.isEmpty() - || Patches->KPATIConnectorsData.size() == 0 - || Patches->KPATIConnectorsData.size() != i) { + || Patches->KPATIConnectorsData.size() != Patches->KPATIConnectorsPatch.size()) { // invalid params - no patching DBG("ATIConnectors patch: invalid parameters!\n"); Patches->KPATIConnectorsController.setEmpty(); Patches->KPATIConnectorsData.setEmpty(); Patches->KPATIConnectorsPatch.setEmpty(); - Patches->KPATIConnectorsController.setEmpty(); } } @@ -975,8 +973,8 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, } if (strlen(p) > 1) { - Patches->ForceKexts.Add(p); - DBG(" - [%zu]: %ls\n", Patches->ForceKexts.size(), Patches->ForceKexts[Patches->ForceKexts.size()-1].wc_str()); + Patches->ForceKextsToLoad.Add(p); + DBG(" - [%zu]: %ls\n", Patches->ForceKextsToLoad.size(), Patches->ForceKextsToLoad[Patches->ForceKextsToLoad.size()-1].wc_str()); } } } @@ -1013,26 +1011,27 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, continue; } - KEXT_PATCH* newPatchPtr = new KEXT_PATCH(); - KEXT_PATCH& newPatch = *newPatchPtr; + KEXT_PATCH* newKextPatchPtr = new KEXT_PATCH(); + KEXT_PATCH& newKextPatch = *newKextPatchPtr; - newPatch.Name = Dict->getString()->stringValue(); - newPatch.Label.takeValueFrom(newPatch.Name); + newKextPatch.Name = Dict->getString()->stringValue(); + newKextPatch.Label.takeValueFrom(newKextPatch.Name); Dict = Prop2->propertyForKey("Comment"); if (Dict != NULL) { - newPatch.Label += " ("; - newPatch.Label += Dict->getString()->stringValue(); - newPatch.Label += ")"; + newKextPatch.Label += " ("; + newKextPatch.Label += Dict->getString()->stringValue(); + newKextPatch.Label += ")"; } else { - newPatch.Label += " (NoLabel)"; + newKextPatch.Label += " (NoLabel)"; } - DBG(" %s", newPatch.Label.c_str()); + DBG(" %s", newKextPatch.Label.c_str()); // newPatch.MenuItem.BValue = TRUE; Dict = Prop2->propertyForKey("Disabled"); - newPatch.MenuItem.BValue = !IsPropertyNotNullAndTrue(Dict); //if absent then false, BValue = !Disabled + newKextPatch.Disabled = IsPropertyNotNullAndTrue(Dict); //if absent then false, BValue = !Disabled + newKextPatch.MenuItem.BValue = !IsPropertyNotNullAndTrue(Dict); //if absent then false, BValue = !Disabled // if ((Dict != NULL) && IsPropertyNotNullAndTrue(Dict)) { // newPatch.MenuItem.BValue = FALSE; @@ -1040,22 +1039,22 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, Dict = Prop2->propertyForKey("RangeFind"); - newPatch.SearchLen = GetPropertyAsInteger(Dict, 0); //default 0 will be calculated later + newKextPatch.SearchLen = GetPropertyAsInteger(Dict, 0); //default 0 will be calculated later Dict = Prop2->propertyForKey("Skip"); - newPatch.Skip = GetPropertyAsInteger(Dict, 0); //default 0 will be calculated later + newKextPatch.Skip = GetPropertyAsInteger(Dict, 0); //default 0 will be calculated later UINT8* TmpData = GetDataSetting(Prop2, "StartPattern", &FindLen); if (TmpData != NULL) { - newPatch.StartPattern.stealValueFrom(TmpData, FindLen); + newKextPatch.StartPattern.stealValueFrom(TmpData, FindLen); } TmpData = GetDataSetting (Prop2, "MaskStart", &ReplaceLen); ReplaceLen = MIN(ReplaceLen, FindLen); if (FindLen != 0) { - newPatch.StartMask.memset(0xFF, FindLen); + newKextPatch.StartMask.memset(0xFF, FindLen); if (TmpData != NULL) { - newPatch.StartMask.ncpy(TmpData, ReplaceLen); + newKextPatch.StartMask.ncpy(TmpData, ReplaceLen); } } if (TmpData != NULL) { @@ -1073,28 +1072,28 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, Dict = Prop2->propertyForKey("Procedure"); if ( Dict != NULL ) { if ( Dict->isString() ) { - newPatch.ProcedureName = Dict->getString()->stringValue(); + newKextPatch.ProcedureName = Dict->getString()->stringValue(); }else{ MsgLog("ATTENTION : Procedure property not string in KextsToPatch\n"); } } - newPatch.Data.stealValueFrom(TmpData, FindLen); + newKextPatch.Data.stealValueFrom(TmpData, FindLen); TmpData = GetDataSetting (Prop2, "MaskFind", &MaskLen); MaskLen = (MaskLen > FindLen)? FindLen : MaskLen; if (TmpData == NULL || MaskLen == 0) { } else { - newPatch.MaskFind.memset(0xFF, FindLen); - newPatch.MaskFind.ncpy(TmpData, MaskLen); + newKextPatch.MaskFind.memset(0xFF, FindLen); + newKextPatch.MaskFind.ncpy(TmpData, MaskLen); } FreePool(TmpData); // take into account a possibility to set ReplaceLen < FindLen. In this case assumes MaskReplace = 0 for the rest of bytes - newPatch.Patch.memset(0, FindLen); + newKextPatch.Patch.memset(0, FindLen); ReplaceLen = MIN(ReplaceLen, FindLen); - newPatch.Patch.ncpy(TmpPatch, ReplaceLen); + newKextPatch.Patch.ncpy(TmpPatch, ReplaceLen); FreePool(TmpPatch); MaskLen = 0; @@ -1102,45 +1101,45 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, MaskLen = MIN(ReplaceLen, MaskLen); if (TmpData == NULL || MaskLen == 0) { } else { - newPatch.MaskReplace.memset(0, FindLen); - newPatch.MaskReplace.ncpy(TmpData, MaskLen); //other bytes are zeros, means no replace + newKextPatch.MaskReplace.memset(0, FindLen); + newKextPatch.MaskReplace.ncpy(TmpData, MaskLen); //other bytes are zeros, means no replace } FreePool(TmpData); - newPatch.Count = 1; + newKextPatch.Count = 1; Dict = Prop2->propertyForKey("Count"); if (Dict != NULL) { - newPatch.Count = GetPropertyAsInteger(Dict, 1); + newKextPatch.Count = GetPropertyAsInteger(Dict, 1); } // check enable/disabled patch (OS based) by Micky1979 Dict = Prop2->propertyForKey("MatchOS"); if ((Dict != NULL) && (Dict->isString())) { - newPatch.MatchOS = Dict->getString()->stringValue(); - DBG(" :: MatchOS: %s", newPatch.MatchOS.c_str()); + newKextPatch.MatchOS = Dict->getString()->stringValue(); + DBG(" :: MatchOS: %s", newKextPatch.MatchOS.c_str()); } Dict = Prop2->propertyForKey("MatchBuild"); if ((Dict != NULL) && (Dict->isString())) { - newPatch.MatchBuild = Dict->getString()->stringValue(); - DBG(" :: MatchBuild: %s", newPatch.MatchBuild.c_str()); + newKextPatch.MatchBuild = Dict->getString()->stringValue(); + DBG(" :: MatchBuild: %s", newKextPatch.MatchBuild.c_str()); } // check if this is Info.plist patch or kext binary patch Dict = Prop2->propertyForKey("InfoPlistPatch"); - newPatch.IsPlistPatch = IsPropertyNotNullAndTrue(Dict); + newKextPatch.IsPlistPatch = IsPropertyNotNullAndTrue(Dict); - if (newPatch.IsPlistPatch) { + if (newKextPatch.IsPlistPatch) { DBG(" :: PlistPatch"); } else { DBG(" :: BinPatch"); } - DBG(" :: data len: %zu\n", newPatch.Data.size()); - if (!newPatch.MenuItem.BValue) { - DBG(" - patch disabled at config\n"); + DBG(" :: data len: %zu\n", newKextPatch.Data.size()); + if (!newKextPatch.MenuItem.BValue) { + DBG(" patch disabled at config\n"); } - Patches->KextPatches.AddReference(newPatchPtr, true); + Patches->KextPatches.AddReference(newKextPatchPtr, true); } } @@ -1171,8 +1170,8 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, DBG(" - [%02lld]:", i); - KEXT_PATCH* newKernelPatchPtr = new KEXT_PATCH; - KEXT_PATCH& newKernelPatch = *newKernelPatchPtr; + KERNEL_PATCH* newKernelPatchPtr = new KERNEL_PATCH; + KERNEL_PATCH& newKernelPatch = *newKernelPatchPtr; newKernelPatch.Label = "NoLabel"_XS8; prop3 = Prop2->propertyForKey("Comment"); @@ -1188,6 +1187,7 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, newKernelPatch.Name = "kernel"_XS8; prop3 = Prop2->propertyForKey("Disabled"); + newKernelPatch.Disabled = IsPropertyNotNullAndTrue(prop3); newKernelPatch.MenuItem.BValue = !IsPropertyNotNullAndTrue(prop3); prop3 = Prop2->propertyForKey("RangeFind"); @@ -1303,8 +1303,8 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, DBG(" - [%02lld]:", i); - KEXT_PATCH* newBootPatchPtr = new KEXT_PATCH; - KEXT_PATCH& newBootPatch = *newBootPatchPtr; + BOOT_PATCH* newBootPatchPtr = new BOOT_PATCH; + BOOT_PATCH& newBootPatch = *newBootPatchPtr; newBootPatch.Label = "NoLabel"_XS8; prop3 = Prop2->propertyForKey("Comment"); @@ -1320,6 +1320,7 @@ FillinKextPatches (IN OUT KERNEL_AND_KEXT_PATCHES *Patches, newBootPatch.Name = "boot.efi"_XS8; prop3 = Prop2->propertyForKey("Disabled"); + newBootPatch.Disabled = IsPropertyNotNullAndTrue(prop3); newBootPatch.MenuItem.BValue = !IsPropertyNotNullAndTrue(prop3); newBootPatch.MenuItem.ItemType = BoolValue; @@ -1763,7 +1764,7 @@ FillinCustomSubEntry ( Entry->m_NoCaches = true; } else { // Use global settings - if (gSettings.NoCaches) { + if (gSettings.SystemParameters.NoCaches) { // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_NOCACHES); Entry->m_NoCaches = false; } @@ -2094,10 +2095,10 @@ FillinCustomEntry ( } else { Entry->InjectKexts = -1; // Use global settings - if (gSettings.WithKexts) { + if (gSettings.SystemParameters.WithKexts) { // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_WITHKEXTS); } - if (gSettings.WithKextsIfNoFakeSMC) { + if (gSettings.SystemParameters.WithKextsIfNoFakeSMC) { // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_CHECKFAKESMC); // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_WITHKEXTS); } @@ -2113,7 +2114,7 @@ FillinCustomEntry ( Entry->NoCaches = true; } else { // Use global settings - if (gSettings.NoCaches) { + if (gSettings.SystemParameters.NoCaches) { // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_NOCACHES); } } @@ -2759,25 +2760,25 @@ EFI_STATUS GetEarlyUserSettings ( } //*** SYSTEM *** - gSettings.WithKexts = TRUE; //default + gSettings.SystemParameters.WithKexts = TRUE; //default const TagDict* SystemParametersDict = CfgDict->dictPropertyForKey("SystemParameters"); if (SystemParametersDict != NULL) { // Inject kexts const TagStruct* Prop = SystemParametersDict->propertyForKey("InjectKexts"); if (Prop != NULL) { if (IsPropertyNotNullAndTrue(Prop)) { - gSettings.WithKexts = TRUE; + gSettings.SystemParameters.WithKexts = TRUE; } else if ((Prop->isString()) && (Prop->getString()->stringValue().equalIC("Detect"))) { // settingsData.WithKexts = TRUE; - gSettings.WithKextsIfNoFakeSMC = TRUE; + gSettings.SystemParameters.WithKextsIfNoFakeSMC = TRUE; } } // No caches - obsolete Prop = SystemParametersDict->propertyForKey("NoCaches"); if (IsPropertyNotNullAndTrue(Prop)) { - gSettings.NoCaches = TRUE; + gSettings.SystemParameters.NoCaches = TRUE; } //test float - success // Prop = SystemParametersDict->propertyForKey("BlueValue"); @@ -3088,6 +3089,14 @@ EFI_STATUS GetEarlyUserSettings ( } } } + + + + //done until here + + + + const TagDict* GraphicsDict = CfgDict->dictPropertyForKey("Graphics"); if (GraphicsDict != NULL) { @@ -3299,20 +3308,20 @@ EFI_STATUS GetEarlyUserSettings ( Prop = OcQuirksDict->propertyForKey("FuzzyMatch"); if (Prop != NULL || GlobalConfig.gBootChanged) { - gSettings.KernelAndKextPatches.FuzzyMatch = !IsPropertyNotNullAndFalse(Prop); + gSettings.Quirks.FuzzyMatch = !IsPropertyNotNullAndFalse(Prop); } Prop = OcQuirksDict->propertyForKey("KernelCache"); if (Prop != NULL || GlobalConfig.gBootChanged) { if ( Prop->isString() ) { if ( Prop->getString()->stringValue().notEmpty() ) { - gSettings.KernelAndKextPatches.OcKernelCache = Prop->getString()->stringValue(); + gSettings.Quirks.OcKernelCache = Prop->getString()->stringValue(); }else{ - gSettings.KernelAndKextPatches.OcKernelCache = "Auto"_XS8; + gSettings.Quirks.OcKernelCache = "Auto"_XS8; } }else{ MsgLog("MALFORMED PLIST : Quirks/KernelCache must be a string"); - gSettings.KernelAndKextPatches.OcKernelCache = "Auto"_XS8; + gSettings.Quirks.OcKernelCache = "Auto"_XS8; } } @@ -3320,17 +3329,17 @@ EFI_STATUS GetEarlyUserSettings ( // Booter Quirks // Prop = OcQuirksDict->propertyForKey("AppleCpuPmCfgLock"); // settingsData.KernelAndKextPatches.OcKernelQuirks.AppleCpuPmCfgLock = IsPropertyNotNullAndTrue(Prop); - gSettings.KernelAndKextPatches.OcKernelQuirks.AppleCpuPmCfgLock = gSettings.KernelAndKextPatches.KPAppleIntelCPUPM; +// gSettings.Quirks.OcKernelQuirks.AppleCpuPmCfgLock = gSettings.KernelAndKextPatches.KPAppleIntelCPUPM || GlobalConfig.NeedPMfix; // Prop = OcQuirksDict->propertyForKey("AppleXcpmCfgLock"); // // settingsData.KernelAndKextPatches.OcKernelQuirks.AppleXcpmCfgLock = IsPropertyNotNullAndTrue(Prop); - gSettings.KernelAndKextPatches.OcKernelQuirks.AppleXcpmCfgLock = gSettings.KernelAndKextPatches.KPKernelPm; +// gSettings.Quirks.OcKernelQuirks.AppleXcpmCfgLock = GlobalConfig.KPKernelPm || GlobalConfig.NeedPMfix; Prop = OcQuirksDict->propertyForKey("AppleXcpmExtraMsrs"); - gSettings.KernelAndKextPatches.OcKernelQuirks.AppleXcpmExtraMsrs = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.AppleXcpmExtraMsrs = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("AppleXcpmForceBoost"); - gSettings.KernelAndKextPatches.OcKernelQuirks.AppleXcpmForceBoost = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.AppleXcpmForceBoost = IsPropertyNotNullAndTrue(Prop); // We can't use that Quirks because we don't delegate SMBios to OC. // Prop = OcQuirksDict->propertyForKey("CustomSMBIOSGuid"); @@ -3338,40 +3347,40 @@ EFI_STATUS GetEarlyUserSettings ( Prop = OcQuirksDict->propertyForKey("DisableIoMapper"); //if ( !Prop ) panic("Cannot find DisableIoMapper in config.plist/Quirks. You forgot to merge your quirks into one section. Update your config.plist"); - gSettings.KernelAndKextPatches.OcKernelQuirks.DisableIoMapper = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.DisableIoMapper = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("DisableLinkeditJettison"); - gSettings.KernelAndKextPatches.OcKernelQuirks.DisableLinkeditJettison = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.DisableLinkeditJettison = IsPropertyNotNullAndTrue(Prop); // Prop = OcQuirksDict->propertyForKey("DisableRtcChecksum"); // settingsData.KernelAndKextPatches.OcKernelQuirks.DisableRtcChecksum = IsPropertyNotNullAndTrue(Prop); - gSettings.KernelAndKextPatches.OcKernelQuirks.DisableRtcChecksum = gSettings.KernelAndKextPatches.KPAppleRTC; + gSettings.Quirks.OcKernelQuirks.DisableRtcChecksum = gSettings.KernelAndKextPatches.KPAppleRTC; Prop = OcQuirksDict->propertyForKey("DummyPowerManagement"); - gSettings.KernelAndKextPatches.OcKernelQuirks.DummyPowerManagement = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.DummyPowerManagement = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("ExternalDiskIcons"); - gSettings.KernelAndKextPatches.OcKernelQuirks.ExternalDiskIcons = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.ExternalDiskIcons = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("IncreasePciBarSize"); - gSettings.KernelAndKextPatches.OcKernelQuirks.IncreasePciBarSize = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.IncreasePciBarSize = IsPropertyNotNullAndTrue(Prop); // Prop = OcQuirksDict->propertyForKey("LapicKernelPanic"); // settingsData.KernelAndKextPatches.OcKernelQuirks.LapicKernelPanic = IsPropertyNotNullAndTrue(Prop); - gSettings.KernelAndKextPatches.OcKernelQuirks.LapicKernelPanic = gSettings.KernelAndKextPatches.KPKernelLapic; + gSettings.Quirks.OcKernelQuirks.LapicKernelPanic = gSettings.KernelAndKextPatches.KPKernelLapic; // Prop = OcQuirksDict->propertyForKey("PanicNoKextDump"); // settingsData.KernelAndKextPatches.OcKernelQuirks.PanicNoKextDump = IsPropertyNotNullAndTrue(Prop); //KPPanicNoKextDump - gSettings.KernelAndKextPatches.OcKernelQuirks.PanicNoKextDump = gSettings.KernelAndKextPatches.KPPanicNoKextDump; + gSettings.Quirks.OcKernelQuirks.PanicNoKextDump = gSettings.KernelAndKextPatches.KPPanicNoKextDump; Prop = OcQuirksDict->propertyForKey("PowerTimeoutKernelPanic"); - gSettings.KernelAndKextPatches.OcKernelQuirks.PowerTimeoutKernelPanic = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.PowerTimeoutKernelPanic = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("ThirdPartyDrives"); - gSettings.KernelAndKextPatches.OcKernelQuirks.ThirdPartyDrives = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.ThirdPartyDrives = IsPropertyNotNullAndTrue(Prop); Prop = OcQuirksDict->propertyForKey("XhciPortLimit"); - gSettings.KernelAndKextPatches.OcKernelQuirks.XhciPortLimit = IsPropertyNotNullAndTrue(Prop); + gSettings.Quirks.OcKernelQuirks.XhciPortLimit = IsPropertyNotNullAndTrue(Prop); } } @@ -4476,7 +4485,7 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) if ( !Prop->isString() ) { MsgLog("ATTENTION : property not string in NVCAP\n"); }else{ - hex2bin (Prop->getString()->stringValue().c_str(), (UINT8*)&gSettings.NVCAP[0], 20); + hex2bin (Prop->getString()->stringValue(), (UINT8*)&gSettings.NVCAP[0], sizeof(gSettings.NVCAP)); DBG("Read NVCAP:"); for (i = 0; i<20; i++) { @@ -4493,7 +4502,7 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) if ( !Prop->isString() ) { MsgLog("ATTENTION : property not string in display-cfg\n"); }else{ - hex2bin (Prop->getString()->stringValue().c_str(), (UINT8*)&gSettings.Dcfg[0], 8); + hex2bin (Prop->getString()->stringValue(), (UINT8*)&gSettings.Dcfg[0], sizeof(gSettings.Dcfg)); } } @@ -4558,7 +4567,7 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) if (!EFI_ERROR(Status)) { cProperties = (UINT8*)(UINTN)BufferPtr; cPropSize = (UINT32)(cDeviceProperties.length() >> 1); - cPropSize = hex2bin(cDeviceProperties.c_str(), cProperties, cPropSize); + cPropSize = hex2bin(cDeviceProperties, cProperties, EFI_PAGES_TO_SIZE(EFI_SIZE_TO_PAGES (cDeviceProperties.sizeInBytes()) + 1)); DBG("Injected EFIString of length %d\n", cPropSize); } //--------- @@ -5395,8 +5404,8 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) RT_VARIABLES* RtVariablePtr = new RT_VARIABLES(); RT_VARIABLES& RtVariable = *RtVariablePtr; for (i = 0; i < Count; i++) { - CfgDict = BlockArray->dictElementAt(i, "Block"_XS8); - const TagStruct* Prop2 = CfgDict->propertyForKey("Comment"); + const TagDict* BlockDict = BlockArray->dictElementAt(i, "Block"_XS8); + const TagStruct* Prop2 = BlockDict->propertyForKey("Comment"); if ( Prop2 != NULL ) { if ( !Prop2->isString() ) { MsgLog("ATTENTION : property not string in Block/Comment\n"); @@ -5406,11 +5415,11 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) } } } - Prop2 = CfgDict->propertyForKey("Disabled"); + Prop2 = BlockDict->propertyForKey("Disabled"); if (IsPropertyNotNullAndFalse(Prop2)) { continue; } - Prop2 = CfgDict->propertyForKey("Guid"); + Prop2 = BlockDict->propertyForKey("Guid"); if ( Prop2 != NULL ) { if ( !Prop2->isString() ) { MsgLog("ATTENTION : property not string in Block/Guid\n"); @@ -5425,7 +5434,7 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) } } - Prop2 = CfgDict->propertyForKey("Name"); + Prop2 = BlockDict->propertyForKey("Name"); RtVariable.Name.setEmpty(); if ( Prop2 != NULL ) { if ( !Prop2->isString() ) { @@ -5462,8 +5471,8 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) //BacklightLevel const TagStruct* Prop = SystemParametersDict->propertyForKey("BacklightLevel"); if (Prop != NULL) { - gSettings.BacklightLevel = (UINT16)GetPropertyAsInteger(Prop, gSettings.BacklightLevel); - gSettings.BacklightLevelConfig = TRUE; + gSettings.SystemParameters.BacklightLevel = (UINT16)GetPropertyAsInteger(Prop, gSettings.SystemParameters.BacklightLevel); + gSettings.SystemParameters.BacklightLevelConfig = TRUE; } Prop = SystemParametersDict->propertyForKey("CustomUUID"); @@ -5472,31 +5481,31 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) MsgLog("ATTENTION : property not string in SystemParameters/CustomUUID\n"); }else{ if (IsValidGuidString(Prop->getString()->stringValue())) { - gSettings.CustomUuid = Prop->getString()->stringValue(); + gSettings.SystemParameters.CustomUuid = Prop->getString()->stringValue(); // if CustomUUID specified, then default for InjectSystemID=FALSE // to stay compatibile with previous Clover behaviour DBG("The UUID is valid\n"); }else{ DBG("Error: invalid CustomUUID '%s' - should be in the format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n", Prop->getString()->stringValue().c_str()); - gSettings.CustomUuid = {0}; + gSettings.SystemParameters.CustomUuid = {0}; } } } //else gUuid value from SMBIOS // DBG("Finally use %s\n", strguid(&gUuid)); - gSettings.InjectSystemID_ = 2; + gSettings.SystemParameters.InjectSystemID = 2; Prop = SystemParametersDict->propertyForKey("InjectSystemID"); if ( Prop ) { - if ( Prop->isBool() ) gSettings.InjectSystemID_ = Prop->getBool()->boolValue(); + if ( Prop->isBool() ) gSettings.SystemParameters.InjectSystemID = Prop->getBool()->boolValue(); else if ( Prop->isString() ) { // TODO a function that takes a string and return if it's true or false - if ( Prop->getString()->stringValue().equalIC("true") ) gSettings.InjectSystemID_ = 1; - else if ( Prop->getString()->stringValue()[0] == 'y' ) gSettings.InjectSystemID_ = 1; - else if ( Prop->getString()->stringValue()[0] == 'Y' ) gSettings.InjectSystemID_ = 1; - else if ( Prop->getString()->stringValue().equalIC("false") ) gSettings.InjectSystemID_ = 0; - else if ( Prop->getString()->stringValue().equalIC("n") ) gSettings.InjectSystemID_ = 0; - else if ( Prop->getString()->stringValue().equalIC("N") ) gSettings.InjectSystemID_ = 0; + if ( Prop->getString()->stringValue().equalIC("true") ) gSettings.SystemParameters.InjectSystemID = 1; + else if ( Prop->getString()->stringValue()[0] == 'y' ) gSettings.SystemParameters.InjectSystemID = 1; + else if ( Prop->getString()->stringValue()[0] == 'Y' ) gSettings.SystemParameters.InjectSystemID = 1; + else if ( Prop->getString()->stringValue().equalIC("false") ) gSettings.SystemParameters.InjectSystemID = 0; + else if ( Prop->getString()->stringValue().equalIC("n") ) gSettings.SystemParameters.InjectSystemID = 0; + else if ( Prop->getString()->stringValue().equalIC("N") ) gSettings.SystemParameters.InjectSystemID = 0; else { DBG("MALFORMED PLIST : SMBIOS/InjectSystemID must be true, yes, false, no, or non existant"); } @@ -5506,7 +5515,7 @@ EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings) } Prop = SystemParametersDict->propertyForKey("NvidiaWeb"); - gSettings.NvidiaWeb = IsPropertyNotNullAndTrue(Prop); + gSettings.SystemParameters.NvidiaWeb = IsPropertyNotNullAndTrue(Prop); } @@ -7423,10 +7432,11 @@ SetDevices (LOADER_ENTRY *Entry) DBG("stringlength = %d\n", device_inject_stringlength); // gDeviceProperties = (__typeof__(gDeviceProperties))AllocateAlignedPages EFI_SIZE_TO_PAGES (device_inject_stringlength + 1), 64); + UINTN nbPages = EFI_SIZE_TO_PAGES (device_inject_stringlength + 1); Status = gBS->AllocatePages ( AllocateMaxAddress, EfiACPIReclaimMemory, - EFI_SIZE_TO_PAGES ((UINTN)device_inject_stringlength + 1), + nbPages, &BufferPtr ); @@ -7440,7 +7450,7 @@ SetDevices (LOADER_ENTRY *Entry) //------- mPropSize = (UINT32)AsciiStrLen(gDeviceProperties) / 2; // DBG("Preliminary size of mProperties=%d\n", mPropSize); - mPropSize = hex2bin (gDeviceProperties, mProperties, mPropSize); + mPropSize = hex2bin (gDeviceProperties, AsciiStrLen(gDeviceProperties), mProperties, EFI_PAGES_TO_SIZE(nbPages)); // DBG("Final size of mProperties=%d\n", mPropSize); //--------- // Status = egSaveFile(&self.getSelfRootDir(), SWPrintf("%ls\\misc\\devprop.bin", self.getCloverDirFullPath().wc_str()).wc_str() , (UINT8*)mProperties, mPropSize); @@ -7761,23 +7771,24 @@ EFI_GUID nullUUID = {0,0,0,{0}}; const XString8& SETTINGS_DATA::getUUID() { - if ( CustomUuid.notEmpty() ) return CustomUuid; + if ( SystemParameters.CustomUuid.notEmpty() ) return SystemParameters.CustomUuid; return SmUUID; } const XString8& SETTINGS_DATA::getUUID(EFI_GUID *uuid) { - if ( CustomUuid.notEmpty() ) { - EFI_STATUS Status = StrToGuidLE(CustomUuid, uuid); + if ( SystemParameters.CustomUuid.notEmpty() ) { + EFI_STATUS Status = StrToGuidLE(SystemParameters.CustomUuid, uuid); #ifdef DEBUG - if ( EFI_ERROR(Status) ) panic("CustomUuid(%s) is not valid", CustomUuid.c_str()); // we panic, because it's a bug. Validity is checked when imported from settings + if ( EFI_ERROR(Status) ) panic("CustomUuid(%s) is not valid", SystemParameters.CustomUuid.c_str()); // we panic, because it's a bug. Validity is checked when imported from settings #else if ( EFI_ERROR(Status) ) { DBG("CustomUuid(%s) is not valid\n", CustomUuid.c_str()); + memset(uuid, 0, sizeof(uuid)); return nullUUID; } #endif - return CustomUuid; + return SystemParameters.CustomUuid; } EFI_STATUS Status = StrToGuidLE(SmUUID, uuid); #ifdef DEBUG @@ -7785,6 +7796,7 @@ const XString8& SETTINGS_DATA::getUUID(EFI_GUID *uuid) #else if ( EFI_ERROR(Status) ) { DBG("SmUUID(%s) is not valid\n", SmUUID.c_str()); + memset(uuid, 0, sizeof(uuid)); return nullUUID; } #endif diff --git a/rEFIt_UEFI/Platform/Settings.h b/rEFIt_UEFI/Platform/Settings.h index e1cd64448..9b8168ae3 100644 --- a/rEFIt_UEFI/Platform/Settings.h +++ b/rEFIt_UEFI/Platform/Settings.h @@ -442,6 +442,12 @@ public : MMIOWhiteList& operator=(const MMIOWhiteList&) = delete; }; +class SETTINGS_DATA; +class ConfigPlist; +class TagDict; +bool CompareEarlyUserSettingsWithConfigPlist(const SETTINGS_DATA& olDSettings, const ConfigPlist& configPlist); +EFI_STATUS GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings); + class SETTINGS_DATA { public: @@ -609,6 +615,32 @@ public: undefinable_uint16 _C3Latency = undefinable_uint16(); } CPU = CPUClass(); + class SystemParametersClass { + public: + bool WithKexts = true; + bool WithKextsIfNoFakeSMC = 0; + bool NoCaches = 0; + uint16_t BacklightLevel = 0xFFFF; + bool BacklightLevelConfig = false; + XString8 CustomUuid = XString8(); + protected: + UINT8 InjectSystemID = 2; // 0=false, 1=true, other value = default. + public: + bool NvidiaWeb = 0; + + friend class ::SETTINGS_DATA; + friend bool ::CompareEarlyUserSettingsWithConfigPlist(const SETTINGS_DATA& olDSettings, const ConfigPlist& configPlist); + friend unsigned long long ::GetUserSettings(const TagDict* CfgDict, SETTINGS_DATA& gSettings); + + } SystemParameters = SystemParametersClass(); + + class QuirksClass { + public: + bool FuzzyMatch = bool(); + XString8 OcKernelCache = XString8(); + OC_KERNEL_QUIRKS OcKernelQuirks = OC_KERNEL_QUIRKS(); + } Quirks = QuirksClass(); + bool getEnableC6() const { if ( CPU._EnableC6.isDefined() ) return CPU._EnableC6; return ACPI.SSDT._EnableC6; @@ -683,7 +715,6 @@ public: INT8 pad181[7]; XString8 Language; INT8 pad19[2]; - XString8 CustomUuid; INT8 pad20[6]; @@ -692,15 +723,10 @@ public: UINT8 pad21[1]; UINT16 VendorEDID; UINT16 ProductEDID; - UINT16 BacklightLevel; - BOOLEAN BacklightLevelConfig; BOOLEAN IntelBacklight; //Boot options BOOLEAN MemoryFix; - BOOLEAN WithKexts; - BOOLEAN WithKextsIfNoFakeSMC; BOOLEAN FakeSMCFound; - BOOLEAN NoCaches; // GUI parameters BOOLEAN Debug; @@ -715,7 +741,6 @@ public: //Injections BOOLEAN StringInjector; - UINT8 InjectSystemID_; // 0=false, 1=true, other value = default. BOOLEAN NoDefaultProperties; @@ -761,7 +786,6 @@ public: UINT8 Dcfg[8]; UINT8 NVCAP[20]; INT8 BootDisplay; - BOOLEAN NvidiaWeb; UINT8 pad41[2]; UINT32 DualLink; UINT32 IgPlatform; @@ -902,13 +926,13 @@ public: BoardVersion(), OEMBoard(), BoardType(0), pad1(0), Mobile(0), ChassisType(0), ChassisManufacturer(), ChassisAssetTag(), EnabledCores(0), SmbiosVersion(0), Attribute(0), pad17{0}, MemoryManufacturer(), MemorySerialNumber(), MemoryPartNumber(), MemorySpeed(), InjectMemoryTables(0), - PlatformFeature(0), NoRomInfo(0), Language(), CustomUuid(), - IntelMaxBacklight(0), VendorEDID(0), ProductEDID(0), BacklightLevel(0), BacklightLevelConfig(0), IntelBacklight(0), MemoryFix(0), WithKexts(0), - WithKextsIfNoFakeSMC(0), FakeSMCFound(0), NoCaches(0), Debug(0), pad22{0}, DefaultBackgroundColor(0), StringInjector(0), InjectSystemID_(0), NoDefaultProperties(0), + PlatformFeature(0), NoRomInfo(0), Language(), + IntelMaxBacklight(0), VendorEDID(0), ProductEDID(0), IntelBacklight(0), MemoryFix(0), + FakeSMCFound(0), Debug(0), pad22{0}, DefaultBackgroundColor(0), StringInjector(0), NoDefaultProperties(0), FakeATI(0), FakeNVidia(0), FakeIntel(0), FakeLAN(0), FakeWIFI(0), FakeSATA(0), FakeXHCI(0), FakeIMEI(0), GraphicsInjector(0), InjectIntel(0), InjectATI(0), InjectNVidia(0), DeInit(0), LoadVBios(0), PatchVBios(0), PatchVBiosBytes(0), PatchVBiosBytesCount(0), InjectEDID(0), LpcTune(0), DropOEM_DSM(0), CustomEDID(0), CustomEDIDsize(0), EdidFixHorizontalSyncPulseWidth(0), EdidFixVideoInputSignal(0), FBName(), VideoPorts(0), NvidiaGeneric(0), - NvidiaNoEFI(0), NvidiaSingle(0), VRAM(0), Dcfg{0}, NVCAP{0}, BootDisplay(0), NvidiaWeb(0), pad41{0}, DualLink(0), + NvidiaNoEFI(0), NvidiaSingle(0), VRAM(0), Dcfg{0}, NVCAP{0}, BootDisplay(0), pad41{0}, DualLink(0), IgPlatform(0), HDAInjection(0), HDALayoutId(0), USBInjection(0), USBFixOwnership(0), InjectClockID(0), HighCurrent(0), NameEH00(0), NameXH00(0), LANInjection(0), HDMIInjection(0), KernelAndKextPatches(), KextPatchesAllowed(0), @@ -931,13 +955,13 @@ public: // If CustomUuid is defined, return false by default // If SmUUID is defined, return true by default. bool ShouldInjectSystemID() { - if ( CustomUuid.notEmpty() && CustomUuid != nullGuid ) { - if ( InjectSystemID_ == 2 ) return false; - else return InjectSystemID_; + if ( SystemParameters.CustomUuid.notEmpty() && SystemParameters.CustomUuid != nullGuid ) { + if ( SystemParameters.InjectSystemID == 2 ) return false; + else return SystemParameters.InjectSystemID; } if ( SmUUID.isEmpty() || SmUUID == nullGuid ) return false; - if ( InjectSystemID_ == 2 ) return true; - return InjectSystemID_; + if ( SystemParameters.InjectSystemID == 2 ) return true; + return SystemParameters.InjectSystemID; } }; @@ -1075,7 +1099,7 @@ extern const LString8 gBuildIdGrepTag; extern BOOLEAN ResumeFromCoreStorage; -extern BOOLEAN gRemapSmBiosIsRequire; // syscl: pass argument for Dell SMBIOS here +//extern BOOLEAN gRemapSmBiosIsRequire; // syscl: pass argument for Dell SMBIOS here extern EMU_VARIABLE_CONTROL_PROTOCOL *gEmuVariableControl; @@ -1119,6 +1143,9 @@ public: INTN Codepage = 0xC0; INTN CodepageSize = 0xC0; + bool KPKernelPm = bool(); + bool KPAppleIntelCPUPM = bool(); + REFIT_CONFIG() {}; REFIT_CONFIG(const REFIT_CONFIG& other) = delete; // Can be defined if needed diff --git a/rEFIt_UEFI/Platform/Utils.cpp b/rEFIt_UEFI/Platform/Utils.cpp index 6163775c1..bd6845996 100644 --- a/rEFIt_UEFI/Platform/Utils.cpp +++ b/rEFIt_UEFI/Platform/Utils.cpp @@ -59,41 +59,56 @@ BOOLEAN IsHexDigit (CHAR8 c) { //out value is a number of byte. out = len -UINT32 hex2bin(IN const CHAR8 *hex, OUT UINT8 *bin, UINT32 len) //assume len = number of UINT8 values +// get rid of this one +//UINT32 hex2bin(IN const CHAR8 *hex, OUT UINT8 *bin, UINT32 len) //assume len = number of UINT8 values +//{ +// CHAR8 *p; +// UINT32 i, outlen = 0; +// CHAR8 buf[3]; +// +// if (hex == NULL || bin == NULL || len <= 0 || AsciiStrLen(hex) < len * 2) { +// // DBG("[ERROR] bin2hex input error\n"); //this is not error, this is empty value +// return FALSE; +// } +// +// buf[2] = '\0'; +// p = (CHAR8 *) hex; +// +// for (i = 0; i < len; i++) +// { +// while ( *p == 0x20 || *p == ',' || *p == '\n' || *p == '\r' ) { +// p++; //skip spaces and commas +// } +// if (*p == 0) { +// break; +// } +// if (!IsHexDigit(p[0]) || !IsHexDigit(p[1])) { +// MsgLog("[ERROR] bin2hex '%s' syntax error\n", hex); +// return 0; +// } +// buf[0] = *p++; +// buf[1] = *p++; +// bin[i] = hexstrtouint8(buf); +// outlen++; +// } +// //bin[outlen] = 0; +// return outlen; +//} + +#ifdef __cplusplus + + +size_t hex2bin(const XString8& s, uint8_t *out, size_t outlen) { - CHAR8 *p; - UINT32 i, outlen = 0; - CHAR8 buf[3]; - - if (hex == NULL || bin == NULL || len <= 0 || AsciiStrLen(hex) < len * 2) { - // DBG("[ERROR] bin2hex input error\n"); //this is not error, this is empty value - return FALSE; - } - - buf[2] = '\0'; - p = (CHAR8 *) hex; - - for (i = 0; i < len; i++) - { - while ( *p == 0x20 || *p == ',' || *p == '\n' || *p == '\r' ) { - p++; //skip spaces and commas - } - if (*p == 0) { - break; - } - if (!IsHexDigit(p[0]) || !IsHexDigit(p[1])) { - MsgLog("[ERROR] bin2hex '%s' syntax error\n", hex); - return 0; - } - buf[0] = *p++; - buf[1] = *p++; - bin[i] = hexstrtouint8(buf); - outlen++; - } - //bin[outlen] = 0; - return outlen; + return hex2bin(s.c_str(), s.length(), out, outlen); } +size_t hex2bin(const XStringW& s, uint8_t *out, size_t outlen) +{ + return hex2bin(s.wc_str(), s.length(), out, outlen); +} +#endif + XString8 Bytes2HexStr(UINT8 *data, UINTN len) { UINTN i, j, b = 0; diff --git a/rEFIt_UEFI/Platform/Utils.h b/rEFIt_UEFI/Platform/Utils.h index 4ace159d2..7d9de1efc 100644 --- a/rEFIt_UEFI/Platform/Utils.h +++ b/rEFIt_UEFI/Platform/Utils.h @@ -38,7 +38,7 @@ inline bool isPathSeparator(char32_t c) { return c == '/' || c == '\\'; } ////void LowCase (IN OUT CHAR8 *Str); -UINT32 hex2bin(IN const CHAR8 *hex, OUT UINT8 *bin, UINT32 len); +//UINT32 hex2bin(IN const CHAR8 *hex, OUT UINT8 *bin, UINT32 len); BOOLEAN IsHexDigit (CHAR8 c); UINT8 hexstrtouint8 (CONST CHAR8* buf); //one or two hex letters to one byte @@ -47,6 +47,49 @@ UINT8 hexstrtouint8 (CONST CHAR8* buf); //one or two hex letters to one by #include "../cpp_foundation/XString.h" +template +size_t hex2bin(const T hex, size_t hexlen, uint8_t *out, size_t outlen) +{ + size_t outidx = 0; + char buf[3] = {0,0,0}; + + if ( hex == NULL || out == NULL || hexlen <= 0 || outlen <= 0 ) { + // DBG("[ERROR] bin2hex input error\n"); //this is not error, this is empty value + return FALSE; + } + + for (size_t hexidx = 0; hexidx < hexlen ; ) + { + while ( hex[hexidx] == 0x20 || hex[hexidx] == ',' || hex[hexidx] == '\n' || hex[hexidx] == '\r' ) { + if ( hexidx == hexlen ) { + return outidx; + } + hexidx++; //skip spaces and commas + } + if ( hexidx == hexlen-1 ) { + printf("[ERROR] bin2hex '%.*s' uneven char nuber\n", (int)hexlen, XString8().takeValueFrom(hex).c_str()); + return 0; + } + if (!IsHexDigit(hex[hexidx]) || !IsHexDigit(hex[hexidx+1])) { + if ( hexlen > 200 ) hexlen = 200; // Do not print more than 200 chars. + printf("[ERROR] bin2hex '%.*s' syntax error\n", (int)hexlen, XString8().takeValueFrom(hex).c_str()); + return 0; + } + buf[0] = hex[hexidx++]; + buf[1] = hex[hexidx++]; + if ( outidx == outlen ) { + printf("[ERROR] bin2hex '%.*s' outbuffer not big enough\n", (int)hexlen, XString8().takeValueFrom(hex).c_str()); + return 0; + } + out[outidx++] = hexstrtouint8(buf); + } + //bin[outlen] = 0; + return outidx; +} + +size_t hex2bin(const XString8& s, uint8_t *out, size_t outlen); +size_t hex2bin(const XStringW& s, uint8_t *out, size_t outlen); + XString8 Bytes2HexStr(UINT8 *data, UINTN len); diff --git a/rEFIt_UEFI/Platform/kernel_patcher.cpp b/rEFIt_UEFI/Platform/kernel_patcher.cpp index 152b24c7f..6382160af 100644 --- a/rEFIt_UEFI/Platform/kernel_patcher.cpp +++ b/rEFIt_UEFI/Platform/kernel_patcher.cpp @@ -2476,10 +2476,9 @@ LOADER_ENTRY::BooterPatch(IN UINT8 *BooterData, IN UINT64 BooterSize) j++; curs++; } } -// if (KernelAndKextPatches.KPDebug) { -// gBS->Stall(2000000); -// } - Stall(2000000); + if (KernelAndKextPatches.KPDebug) { + gBS->Stall(2000000); + } return (y != 0); } @@ -2610,7 +2609,7 @@ LOADER_ENTRY::BooterPatch(IN UINT8 *BooterData, IN UINT64 BooterSize) // KernelAndKextPatcherInit(); // // KextPatchesNeeded = ( -// KernelAndKextPatches.KPAppleIntelCPUPM || +// KernelAndKextPatches.KPAppleIntelCPUPM || GlobalConfig.NeedPMfix || // KernelAndKextPatches.KPAppleRTC || // KernelAndKextPatches.EightApple || // KernelAndKextPatches.KPDELLSMBIOS || @@ -2669,7 +2668,7 @@ LOADER_ENTRY::BooterPatch(IN UINT8 *BooterData, IN UINT64 BooterSize) // // // CPU power management patch for CPU with locked msr // DBG_RT( "\nKernelPm patch: "); -// if (KernelAndKextPatches.KPKernelPm || KernelAndKextPatches.KPKernelXCPM) { +// if (KernelAndKextPatches.KPKernelPm||GlobalConfig.NeedPMfix || KernelAndKextPatches.KPKernelXCPM) { // DBG_RT( "Enabled: \n"); // DBG( "KernelPm patch: Enabled\n"); //// KernelAndKextPatcherInit(); diff --git a/rEFIt_UEFI/Platform/kext_inject.cpp b/rEFIt_UEFI/Platform/kext_inject.cpp index 9f59e70d5..f8fe9bbb3 100644 --- a/rEFIt_UEFI/Platform/kext_inject.cpp +++ b/rEFIt_UEFI/Platform/kext_inject.cpp @@ -486,17 +486,17 @@ void LOADER_ENTRY::AddKextsInArray(XObjArray* kextArray) } // Force kexts to load - if ( KernelAndKextPatches.ForceKexts.notEmpty() ) { - for (size_t i = 0; i < KernelAndKextPatches.ForceKexts.size(); ++i) { - MsgLog(" Force kext: %ls\n", KernelAndKextPatches.ForceKexts[i].wc_str()); + if ( KernelAndKextPatches.ForceKextsToLoad.notEmpty() ) { + for (size_t i = 0; i < KernelAndKextPatches.ForceKextsToLoad.size(); ++i) { + MsgLog(" Force kext: %ls\n", KernelAndKextPatches.ForceKextsToLoad[i].wc_str()); if (Volume && Volume->RootDir) { // Check if the entry is a directory - if (StrStr(KernelAndKextPatches.ForceKexts[i].wc_str(), L".kext") == NULL) { - DirIterOpen(Volume->RootDir, KernelAndKextPatches.ForceKexts[i].wc_str(), &PlugInIter); + if (StrStr(KernelAndKextPatches.ForceKextsToLoad[i].wc_str(), L".kext") == NULL) { + DirIterOpen(Volume->RootDir, KernelAndKextPatches.ForceKextsToLoad[i].wc_str(), &PlugInIter); while (DirIterNext(&PlugInIter, 1, L"*.kext", &PlugInFile)) { if (PlugInFile->FileName[0] == '.' || StrStr(PlugInFile->FileName, L".kext") == NULL) continue; // skip this - FileName = SWPrintf("%ls\\%ls", KernelAndKextPatches.ForceKexts[i].wc_str(), PlugInFile->FileName); + FileName = SWPrintf("%ls\\%ls", KernelAndKextPatches.ForceKextsToLoad[i].wc_str(), PlugInFile->FileName); // snwprintf(FileName, 512, "%s\\%s", KernelAndKextPatches.ForceKexts[i], PlugInFile->FileName); MsgLog(" Force kext: %s\n", FileName.c_str()); AddKext( Volume->RootDir, FileName, archCpuType); @@ -506,8 +506,8 @@ void LOADER_ENTRY::AddKextsInArray(XObjArray* kextArray) } DirIterClose(&PlugInIter); } else { - AddKext( Volume->RootDir, KernelAndKextPatches.ForceKexts[i], archCpuType); - PlugIns = SWPrintf("%ls\\Contents\\PlugIns", KernelAndKextPatches.ForceKexts[i].wc_str()); + AddKext( Volume->RootDir, KernelAndKextPatches.ForceKextsToLoad[i], archCpuType); + PlugIns = SWPrintf("%ls\\Contents\\PlugIns", KernelAndKextPatches.ForceKextsToLoad[i].wc_str()); // snwprintf(PlugIns, 512, "%s\\Contents\\PlugIns", KernelAndKextPatches.ForceKexts[i]); LoadPlugInKexts(Volume->RootDir, PlugIns, archCpuType, TRUE); } diff --git a/rEFIt_UEFI/Platform/kext_patcher.cpp b/rEFIt_UEFI/Platform/kext_patcher.cpp index da4c736f7..3ff8221ea 100644 --- a/rEFIt_UEFI/Platform/kext_patcher.cpp +++ b/rEFIt_UEFI/Platform/kext_patcher.cpp @@ -18,6 +18,7 @@ extern "C" { #include #include // Only use angled for Platform, else, xcode project won't compile +#include "Settings.h" #include "kernel_patcher.h" #include "kext_inject.h" #include "../gui/menu_items/menu_items.h" @@ -1069,7 +1070,7 @@ void LOADER_ENTRY::PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, ExtractKextBundleIdentifier(InfoPlist); - if (KernelAndKextPatches.KPAppleIntelCPUPM && + if ( (GlobalConfig.KPAppleIntelCPUPM) && (AsciiStrStr(InfoPlist, "com.apple.driver.AppleIntelCPUPowerManagement") != NULL)) { // diff --git a/rEFIt_UEFI/Platform/platformdata.cpp b/rEFIt_UEFI/Platform/platformdata.cpp index fbecaccc6..ae9d0b977 100644 --- a/rEFIt_UEFI/Platform/platformdata.cpp +++ b/rEFIt_UEFI/Platform/platformdata.cpp @@ -1418,8 +1418,8 @@ void GetDefaultSettings() //gSettings.HDALayoutId = 0; gSettings.USBInjection = TRUE; // enabled by default to have the same behavior as before gSettings.ACPI.DSDT.DsdtName = L"DSDT.aml"_XSW; - gSettings.BacklightLevel = 0xFFFF; //0x0503; -- the value from MBA52 - gSettings.BacklightLevelConfig = FALSE; + gSettings.SystemParameters.BacklightLevel = 0xFFFF; //0x0503; -- the value from MBA52 + gSettings.SystemParameters.BacklightLevelConfig = FALSE; gSettings.TrustSMBIOS = TRUE; gSettings.SmUUID = nullGuid; diff --git a/rEFIt_UEFI/Platform/plist/xml.cpp b/rEFIt_UEFI/Platform/plist/xml.cpp index f92a20060..87033e4dd 100755 --- a/rEFIt_UEFI/Platform/plist/xml.cpp +++ b/rEFIt_UEFI/Platform/plist/xml.cpp @@ -69,54 +69,46 @@ const XMLEntity ents[] = { {"amp;"_XS8, '&'} }; -/* Replace XML entities by their value */ -CHAR8* -XMLDecode(CHAR8* src) +/* + * Replace XML entities by their value + * out can be src + */ + +size_t XMLDecode(const char* src, size_t srclen, char* out, size_t outlen) { - UINTN len; - CONST CHAR8 *s; - CHAR8 *out, *o; + const char* s; + char* o; if (!src) { return 0; } - len = strlen(src); - -#if 0 - out = (__typeof__(out))AllocateZeroPool(len+1); - if (!out) - return 0; -#else // unsafe // out is always <= src, let's overwrite src - out = src; -#endif - - - o = out; s = src; - while (s <= src+len) /* Make sure the terminator is also copied */ + o = out; + while (s < src+srclen) /* Make sure the terminator is also copied */ { if ( *s == '&' ) { - BOOLEAN entFound = FALSE; UINTN i; s++; for (i = 0; i < sizeof(ents)/sizeof(ents[0]); i++) { if ( ents[i].name.strncmp(s, ents[i].nameLen) == 0 ) { - entFound = TRUE; + if ( uintptr_t(o)-uintptr_t(out) >= outlen ) return uintptr_t(o)-uintptr_t(out); + *o++ = ents[i].value; + s += ents[i].nameLen; break; } } - if ( entFound ) { - *o++ = ents[i].value; - s += ents[i].nameLen; - continue; - } } - + if ( uintptr_t(o)-uintptr_t(out) >= outlen ) return uintptr_t(o)-uintptr_t(out); *o++ = *s++; } - - return out; + if ( uintptr_t(o)-uintptr_t(out) < outlen ) *o = 0; + return uintptr_t(o)-uintptr_t(out); } +char* XMLDecode(char* src) +{ + XMLDecode(src, strlen(src), src, strlen(src)+1); + return src; +} diff --git a/rEFIt_UEFI/Platform/plist/xml.h b/rEFIt_UEFI/Platform/plist/xml.h index 2040d2c8c..4b1520445 100644 --- a/rEFIt_UEFI/Platform/plist/xml.h +++ b/rEFIt_UEFI/Platform/plist/xml.h @@ -25,9 +25,7 @@ #define kXMLTagFloat "real" -CHAR8* -XMLDecode ( - CHAR8 *src - ); +size_t XMLDecode (const char* src, size_t srclen, char* out, size_t outlen); +char* XMLDecode (char* src); #endif /* __xml_h__ */ diff --git a/rEFIt_UEFI/Platform/smbios.cpp b/rEFIt_UEFI/Platform/smbios.cpp index cb0af1670..73edeaec7 100644 --- a/rEFIt_UEFI/Platform/smbios.cpp +++ b/rEFIt_UEFI/Platform/smbios.cpp @@ -2198,7 +2198,7 @@ void FinalizeSmbios() //continue // // to fix Dell's SMBIOS truncate credit David Passmore // - if (gRemapSmBiosIsRequire) + if (gSettings.KernelAndKextPatches.KPDELLSMBIOS) { // // syscl: remap smbios table 1 guid diff --git a/rEFIt_UEFI/cpp_foundation/XBuffer.h b/rEFIt_UEFI/cpp_foundation/XBuffer.h index a7def3a33..82c4b8b17 100755 --- a/rEFIt_UEFI/cpp_foundation/XBuffer.h +++ b/rEFIt_UEFI/cpp_foundation/XBuffer.h @@ -35,7 +35,7 @@ protected: const XBuffer &operator =(const XBuffer &aBuffer); template - void stealValueFrom(T* p, IntegralType count) { + void stealValueFrom(T* p, IntegralType count) { if ( count < 0 ) { #ifdef DEBUG panic("XBuffer::stealValueFrom : count < 0. System halted\n"); @@ -44,7 +44,25 @@ protected: #endif } if( _WData ) free(_WData); - Initialize(p, count, 0); + m_allocatedSize = count; + XRBuffer::_RData = _WData = p; + XRBuffer::m_size = count; + XRBuffer::_Index = 0; + } + + template + void stealValueFrom(T* p, IntegralType count, IntegralType allocatedSize) { + if ( count < 0 ) { + panic("XBuffer::stealValueFrom : count < 0. System halted\n"); + } + if ( allocatedSize < count ) { + panic("XBuffer::stealValueFrom : allocatedSize < count. System halted\n"); + } + if( _WData ) free(_WData); + m_allocatedSize = allocatedSize; + XRBuffer::_RData = _WData = p; + XRBuffer::m_size = count; + XRBuffer::_Index = 0; } ~XBuffer(); @@ -113,26 +131,27 @@ public: template T& operator [](IntegralType i) { -#ifdef DEBUG +//#ifdef DEBUG if (i < 0) panic("XBuffer::[] : i < 0. System halted\n"); if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n"); -#else - if (i < 0) return 0; - if ( (unsigned_type(IntegralType))i >= size() ) return 0; - -#endif +//#else +// // Cannot return 0, return value type is T, unknown at this stage. +// if (i < 0) return 0; +// if ( (unsigned_type(IntegralType))i >= size() ) return 0; +//#endif return _WData[(unsigned_type(IntegralType))i]; } template const T& operator [](IntegralType i) const { -#ifdef DEBUG +//#ifdef DEBUG if (i < 0) panic("XBuffer::[] : i < 0. System halted\n"); if ( (unsigned_type(IntegralType))i >= size() ) panic("XBuffer::[] : i > _Len. System halted\n"); -#else - if (i < 0) return 0; - if ( (unsigned_type(IntegralType))i >= size() ) return 0; -#endif +//#else +// // Cannot return 0, return value type is T, unknown at this stage. +// if (i < 0) return 0; +// if ( (unsigned_type(IntegralType))i >= size() ) return 0; +//#endif return _WData[(unsigned_type(IntegralType))i]; } diff --git a/rEFIt_UEFI/cpp_foundation/XString.h b/rEFIt_UEFI/cpp_foundation/XString.h index bb22e7c3d..ec6217614 100755 --- a/rEFIt_UEFI/cpp_foundation/XString.h +++ b/rEFIt_UEFI/cpp_foundation/XString.h @@ -57,7 +57,7 @@ class XString8 : public XStringAbstract protected: static void transmitS8Printf(const char* buf, unsigned int nbchar, void* context) { - ((XString8*)(context))->strncat(buf, nbchar); + ((XString8*)(context))->strsicat(buf, nbchar); } public: void vS8Printf(const char* format, XTOOLS_VA_LIST va) @@ -174,7 +174,7 @@ public: protected: static void transmitSWPrintf(const wchar_t* buf, unsigned int nbchar, void* context) { - ((XStringW*)(context))->strncat(buf, nbchar); + ((XStringW*)(context))->strsicat(buf, nbchar); } public: void vSWPrintf(const char* format, XTOOLS_VA_LIST va) diff --git a/rEFIt_UEFI/cpp_foundation/XStringAbstract.h b/rEFIt_UEFI/cpp_foundation/XStringAbstract.h index 83a364eca..4054650d0 100755 --- a/rEFIt_UEFI/cpp_foundation/XStringAbstract.h +++ b/rEFIt_UEFI/cpp_foundation/XStringAbstract.h @@ -352,7 +352,7 @@ public: //// template //// ThisXStringClass& operator =(const O* S) { strcpy(S); return *this; } - //--------------------------------------------------------------------- indexOf, rindexOf, contains, subString + //--------------------------------------------------------------------- indexOf, rindexOf, contains, subString, startWith /* indexOf */ size_t indexOf(char32_t char32Searched, size_t Pos = 0) const @@ -501,7 +501,7 @@ public: // return true; //} - //--------------------------------------------------------------------- + //--------------------------------------------------------------------- strcmp, equal, comparison operator template int strcmp(const O* S) const { return XStringAbstract__compare(m_data, S, false); } @@ -997,7 +997,8 @@ public: { if ( other && *other && other_len > 0 ) { size_t currentSize = size_of_utf_string(m_data); - size_t newSize = currentSize + utf_size_of_utf_string_len(m_data, other, other_len); + size_t other_size = utf_size_of_utf_string_len(m_data, other, other_len); + size_t newSize = currentSize + other_size; CheckSize(newSize, 0); utf_string_from_utf_string_len(m_data+currentSize, m_allocatedSize, other, other_len); m_data[newSize] = 0; @@ -1005,7 +1006,21 @@ public: // nothing to do } } - + /* strsicat */ + template + void strsicat(const O* other, size_t other_size) + { + if ( other && *other && other_size > 0 ) { + size_t currentSize = size_of_utf_string(m_data); + size_t newSize = currentSize + other_size; + CheckSize(newSize, 0); + utf_string_from_utf_string_len(m_data+currentSize, m_allocatedSize, other, other_size); + m_data[newSize] = 0; + }else{ + // nothing to do + } + } + /* insert char* */ template ThisXStringClass& insertAtPos(const O* other, size_t other_len, size_t pos) @@ -1188,6 +1203,13 @@ public: } } + /* size is in number of technical chars, NOT in bytes */ + ThisXStringClass& stealValueFrom(T* S, size_t size) { + if ( m_allocatedSize > 0 ) free((void*)m_data); + m_data = S; + m_allocatedSize = size; + return *((ThisXStringClass*)this); + } ThisXStringClass& stealValueFrom(T* S) { if ( m_allocatedSize > 0 ) free((void*)m_data); diff --git a/rEFIt_UEFI/entry_scan/loader.cpp b/rEFIt_UEFI/entry_scan/loader.cpp index 9d76be1ff..650640153 100644 --- a/rEFIt_UEFI/entry_scan/loader.cpp +++ b/rEFIt_UEFI/entry_scan/loader.cpp @@ -515,7 +515,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST XStringW& LoaderPath, CUSTOM_LOADER_ENTRY& Custom = GlobalConfig.CustomEntries[CustomIndex]; if ( Custom.settings.Disabled ) continue; // before, disabled entries settings weren't loaded. // Check if the custom entry is hidden or disabled - if ( OSFLAG_ISSET(Custom.getFlags(gSettings.NoCaches), OSFLAG_DISABLED) || Custom.settings.Hidden ) { + if ( OSFLAG_ISSET(Custom.getFlags(gSettings.SystemParameters.NoCaches), OSFLAG_DISABLED) || Custom.settings.Hidden ) { INTN volume_match=0; INTN volume_type_match=0; @@ -1055,7 +1055,7 @@ LOADER_ENTRY* AddLoaderEntry(IN CONST XStringW& LoaderPath, IN CONST XString8Arr // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_CHECKFAKESMC); // Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_WITHKEXTS); // } - if (gSettings.NoCaches) { + if (gSettings.SystemParameters.NoCaches) { Entry->Flags = OSFLAG_SET(Entry->Flags, OSFLAG_NOCACHES); } } @@ -1894,7 +1894,7 @@ STATIC void AddCustomSubEntry(REFIT_VOLUME *Volume, // do { // when not scanning for kernels, this loop will execute only once XString8Array CustomOptions = Custom.getLoadOptions(); - UINT8 newCustomFlags = Custom.getFlags(gSettings.NoCaches); + UINT8 newCustomFlags = Custom.getFlags(gSettings.SystemParameters.NoCaches); // Create an entry for this volume Entry = CreateLoaderEntry(CustomPath, CustomOptions, Custom.getFullTitle(), Custom.getTitle(), Volume, @@ -1975,7 +1975,7 @@ STATIC void AddCustomEntry(IN UINTN CustomIndex, return; } - if (OSFLAG_ISSET(Custom.getFlags(gSettings.NoCaches), OSFLAG_DISABLED)) { + if (OSFLAG_ISSET(Custom.getFlags(gSettings.SystemParameters.NoCaches), OSFLAG_DISABLED)) { // DBG("Custom %lsentry %llu skipped because it is disabled.\n", IsSubEntry ? L"sub " : L"", CustomIndex); return; } @@ -2151,13 +2151,13 @@ STATIC void AddCustomEntry(IN UINTN CustomIndex, break; } - UINT8 newCustomFlags = Custom.getFlags(gSettings.NoCaches); + UINT8 newCustomFlags = Custom.getFlags(gSettings.SystemParameters.NoCaches); // Check to make sure if we should update linux custom options or not - if (FindCustomPath && Custom.settings.Type == OSTYPE_LINEFI && OSFLAG_ISUNSET(Custom.getFlags(gSettings.NoCaches), OSFLAG_NODEFAULTARGS)) { + if (FindCustomPath && Custom.settings.Type == OSTYPE_LINEFI && OSFLAG_ISUNSET(Custom.getFlags(gSettings.SystemParameters.NoCaches), OSFLAG_NODEFAULTARGS)) { // Find the init ram image and select root CustomOptions = LinuxKernelOptions(Iter->DirHandle, Basename(CustomPath.wc_str()) + LINUX_LOADER_PATH.length(), PartUUID, Custom.getLoadOptions()); - newCustomFlags = OSFLAG_SET(Custom.getFlags(gSettings.NoCaches), OSFLAG_NODEFAULTARGS); + newCustomFlags = OSFLAG_SET(Custom.getFlags(gSettings.SystemParameters.NoCaches), OSFLAG_NODEFAULTARGS); } // Check to make sure that this entry is not hidden or disabled by another custom entry diff --git a/rEFIt_UEFI/gui/shared_with_menu.cpp b/rEFIt_UEFI/gui/shared_with_menu.cpp index d039b81f1..fdd00cf05 100644 --- a/rEFIt_UEFI/gui/shared_with_menu.cpp +++ b/rEFIt_UEFI/gui/shared_with_menu.cpp @@ -113,7 +113,7 @@ void DecodeOptions(REFIT_MENU_ITEM_BOOTNUM *Entry) // Only for non-legacy entries, as LEGACY_ENTRY doesn't have OSVersion if (gSettings.OptionsBits & OPT_NVWEBON) { if ( loaderEntry->macOSVersion >= MacOsVersion("10.12"_XS8) ) { - gSettings.NvidiaWeb = TRUE; + gSettings.SystemParameters.NvidiaWeb = TRUE; } else { //Entry->LoadOptions = loaderEntry->LoadOptions; // Entry->LoadOptions = Split(loaderEntry->LoadOptions.ConcatAll(" "_XS8).wc_str(), " "); @@ -122,7 +122,7 @@ void DecodeOptions(REFIT_MENU_ITEM_BOOTNUM *Entry) } if ((gSettings.OptionsBits & OPT_NVWEBON) == 0) { if ( loaderEntry->macOSVersion >= MacOsVersion("10.12"_XS8)) { - gSettings.NvidiaWeb = FALSE; + gSettings.SystemParameters.NvidiaWeb = FALSE; } else { //Entry->LoadOptions = loaderEntry->LoadOptions; // Entry->LoadOptions = Split(loaderEntry->LoadOptions.ConcatAll(" "_XS8).wc_str(), " "); diff --git a/rEFIt_UEFI/libeg/nanosvg.cpp b/rEFIt_UEFI/libeg/nanosvg.cpp index 63002bf5f..0a6e27e7c 100644 --- a/rEFIt_UEFI/libeg/nanosvg.cpp +++ b/rEFIt_UEFI/libeg/nanosvg.cpp @@ -1295,7 +1295,7 @@ static unsigned int nsvg__parseColorHex(const char* str) while(str[n] && IsHexDigit(str[n])) n++; if (n == 6) { - n = hex2bin((CHAR8*)str, (UINT8*)&c, 3); //big endian + n = hex2bin((CHAR8*)str, 6, (UINT8*)&c, 3); //big endian b = (c >> 16) & 0xff; g = (c >> 8) & 0xff; r = c & 0xff; diff --git a/rEFIt_UEFI/refit/main.cpp b/rEFIt_UEFI/refit/main.cpp index 2510f668f..39e1479c1 100644 --- a/rEFIt_UEFI/refit/main.cpp +++ b/rEFIt_UEFI/refit/main.cpp @@ -399,11 +399,11 @@ void DumpKernelAndKextPatches(KERNEL_AND_KEXT_PATCHES *Patches) DBG("\tFakeCPUID: 0x%X\n", Patches->FakeCPUID); DBG("\tATIController: %s\n", Patches->KPATIConnectorsController.isEmpty() ? "(null)": Patches->KPATIConnectorsController.c_str()); DBG("\tATIDataLength: %zu\n", Patches->KPATIConnectorsData.size()); - DBG("\t%zu Kexts to load\n", Patches->ForceKexts.size()); - if (Patches->ForceKexts.size()) { + DBG("\t%zu Kexts to load\n", Patches->ForceKextsToLoad.size()); + if (Patches->ForceKextsToLoad.size()) { size_t i = 0; - for (; i < Patches->ForceKexts.size(); ++i) { - DBG("\t KextToLoad[%zu]: %ls\n", i, Patches->ForceKexts[i].wc_str()); + for (; i < Patches->ForceKextsToLoad.size(); ++i) { + DBG("\t KextToLoad[%zu]: %ls\n", i, Patches->ForceKextsToLoad[i].wc_str()); } } DBG("\t%zu Kexts to patch\n", Patches->KextPatches.size()); @@ -687,7 +687,7 @@ MsgLog("debugStartImageWithOC\n"); #endif void LOADER_ENTRY::DelegateKernelPatches() { - XObjArray selectedPathArray; + XObjArray selectedPathArray; for (size_t kextPatchIdx = 0 ; kextPatchIdx < KernelAndKextPatches.KextPatches.size() ; kextPatchIdx++ ) { if ( KernelAndKextPatches.KextPatches[kextPatchIdx].MenuItem.BValue ) @@ -706,7 +706,7 @@ void LOADER_ENTRY::DelegateKernelPatches() for (size_t kextPatchIdx = 0 ; kextPatchIdx < selectedPathArray.size() ; kextPatchIdx++ ) { - const KEXT_PATCH& kextPatch = selectedPathArray[kextPatchIdx]; //as well as kernel patches + const ABSTRACT_KEXT_OR_KERNEL_PATCH& kextPatch = selectedPathArray[kextPatchIdx]; //as well as kernel patches DBG("Bridge %s patch to OC : %s\n", kextPatch.Name.c_str(), kextPatch.Label.c_str()); mOpenCoreConfiguration.Kernel.Patch.Values[kextPatchIdx] = (__typeof_am__(*mOpenCoreConfiguration.Kernel.Patch.Values))AllocateZeroPool(mOpenCoreConfiguration.Kernel.Patch.ValueSize); // sizeof(OC_KERNEL_ADD_ENTRY) == 680 OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Patch.Values[kextPatchIdx]->Arch, OC_BLOB_GET(&mOpenCoreConfiguration.Kernel.Scheme.KernelArch)); @@ -1014,9 +1014,11 @@ void LOADER_ENTRY::StartLoader() OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Scheme.KernelArch, "x86_64"); - OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Scheme.KernelCache, gSettings.KernelAndKextPatches.OcKernelCache.c_str()); - mOpenCoreConfiguration.Kernel.Scheme.FuzzyMatch = gSettings.KernelAndKextPatches.FuzzyMatch; - memcpy(&mOpenCoreConfiguration.Kernel.Quirks, &gSettings.KernelAndKextPatches.OcKernelQuirks, sizeof(mOpenCoreConfiguration.Kernel.Quirks)); + OC_STRING_ASSIGN(mOpenCoreConfiguration.Kernel.Scheme.KernelCache, gSettings.Quirks.OcKernelCache.c_str()); + mOpenCoreConfiguration.Kernel.Scheme.FuzzyMatch = gSettings.Quirks.FuzzyMatch; + memcpy(&mOpenCoreConfiguration.Kernel.Quirks, &gSettings.Quirks.OcKernelQuirks, sizeof(mOpenCoreConfiguration.Kernel.Quirks)); + gSettings.Quirks.OcKernelQuirks.AppleXcpmCfgLock = GlobalConfig.KPKernelPm; + gSettings.Quirks.OcKernelQuirks.AppleCpuPmCfgLock = GlobalConfig.KPAppleIntelCPUPM; mOpenCoreConfiguration.Kernel.Add.Count = (UINT32)kextArray.size(); mOpenCoreConfiguration.Kernel.Add.AllocCount = mOpenCoreConfiguration.Kernel.Add.Count; @@ -1118,9 +1120,9 @@ void LOADER_ENTRY::StartLoader() //DelegateKernelPatches(); - for (size_t forceKextIdx = 0 ; forceKextIdx < KernelAndKextPatches.ForceKexts.size() ; forceKextIdx++ ) + for (size_t forceKextIdx = 0 ; forceKextIdx < KernelAndKextPatches.ForceKextsToLoad.size() ; forceKextIdx++ ) { - const XStringW& forceKext = KernelAndKextPatches.ForceKexts[forceKextIdx]; + const XStringW& forceKext = KernelAndKextPatches.ForceKextsToLoad[forceKextIdx]; DBG("TODO !!!!!!!! Bridge force kext to OC : %ls\n", forceKext.wc_str()); } #endif @@ -2323,7 +2325,7 @@ void SetVariablesFromNvram() tmpString = (__typeof__(tmpString))GetNvramVariable(L"nvda_drv", &gEfiAppleBootGuid, NULL, NULL); if (tmpString && AsciiStrCmp(tmpString, "1") == 0) { - gSettings.NvidiaWeb = TRUE; + gSettings.SystemParameters.NvidiaWeb = TRUE; } if (tmpString) { FreePool(tmpString); @@ -2691,6 +2693,9 @@ void afterGetUserSettings(const SETTINGS_DATA& gSettings) } } + GlobalConfig.KPKernelPm = gSettings.KernelAndKextPatches._KPKernelPm || GlobalConfig.NeedPMfix; + GlobalConfig.KPAppleIntelCPUPM = gSettings.KernelAndKextPatches._KPAppleIntelCPUPM || GlobalConfig.NeedPMfix; + } #pragma GCC diagnostic pop diff --git a/rEFIt_UEFI/refit/menu.cpp b/rEFIt_UEFI/refit/menu.cpp index e1a92dfd0..189d87530 100644 --- a/rEFIt_UEFI/refit/menu.cpp +++ b/rEFIt_UEFI/refit/menu.cpp @@ -181,7 +181,7 @@ void FillInputs(BOOLEAN New) InputItems[InputItemsCount].ItemType = Decimal; //17 InputItems[InputItemsCount++].SValue.SWPrintf("0x%llX", gPlatformFeature); InputItems[InputItemsCount].ItemType = Hex; //18 - InputItems[InputItemsCount++].SValue.SWPrintf("0x%hX", gSettings.BacklightLevel); + InputItems[InputItemsCount++].SValue.SWPrintf("0x%hX", gSettings.SystemParameters.BacklightLevel); InputItems[InputItemsCount].ItemType = Decimal; //19 if (gSettings.CPU.BusSpeed > 20000) { InputItems[InputItemsCount++].SValue.SWPrintf("%06d", gSettings.CPU.BusSpeed); @@ -250,11 +250,11 @@ void FillInputs(BOOLEAN New) InputItems[InputItemsCount].ItemType = BoolValue; //45 InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.EightApple; InputItems[InputItemsCount].ItemType = BoolValue; //46 - InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.KPAppleIntelCPUPM; + InputItems[InputItemsCount++].BValue = GlobalConfig.KPAppleIntelCPUPM; InputItems[InputItemsCount].ItemType = BoolValue; //47 InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.KPAppleRTC; InputItems[InputItemsCount].ItemType = BoolValue; //48 - InputItems[InputItemsCount++].BValue = gSettings.KernelAndKextPatches.KPKernelPm; + InputItems[InputItemsCount++].BValue = GlobalConfig.KPKernelPm; InputItems[InputItemsCount].ItemType = BoolValue; //49 InputItems[InputItemsCount++].BValue = gSettings.ACPI.FixMCFG; @@ -277,7 +277,7 @@ void FillInputs(BOOLEAN New) InputItems[InputItemsCount].ItemType = BoolValue; //55 InputItems[InputItemsCount++].BValue = gSettings.NvidiaGeneric; InputItems[InputItemsCount].ItemType = BoolValue; //56 - InputItems[InputItemsCount++].BValue = gSettings.NvidiaWeb; + InputItems[InputItemsCount++].BValue = gSettings.SystemParameters.NvidiaWeb; InputItems[InputItemsCount].ItemType = BoolValue; //57 InputItems[InputItemsCount++].BValue = gSettings.ResetHDA; InputItems[InputItemsCount].ItemType = BoolValue; //58 @@ -425,7 +425,7 @@ void FillInputs(BOOLEAN New) InputItems[InputItemsCount].ItemType = BoolValue; //114 InputItems[InputItemsCount++].BValue = gSettings.DeInit; InputItems[InputItemsCount].ItemType = BoolValue; //115 - InputItems[InputItemsCount++].BValue = gSettings.NoCaches; + InputItems[InputItemsCount++].BValue = gSettings.SystemParameters.NoCaches; InputItems[InputItemsCount].ItemType = RadioSwitch; //116 - DSDT chooser InputItems[InputItemsCount++].IValue = 116; @@ -471,7 +471,6 @@ void ApplyInputs(void) BOOLEAN NeedSave = TRUE; INTN i = 0; UINTN j; - CHAR8 AString[256]; // DBG("ApplyInputs\n"); if (InputItems[i].Valid) { @@ -561,8 +560,8 @@ void ApplyInputs(void) } i++; //18 | Download-Fritz: There is no GUI element for BacklightLevel; please revise if (InputItems[i].Valid) { - gSettings.BacklightLevel = (UINT16)StrHexToUint64(InputItems[i].SValue.wc_str()); - gSettings.BacklightLevelConfig = TRUE; + gSettings.SystemParameters.BacklightLevel = (UINT16)StrHexToUint64(InputItems[i].SValue.wc_str()); + gSettings.SystemParameters.BacklightLevelConfig = TRUE; } i++; //19 if (InputItems[i].Valid) { @@ -591,9 +590,7 @@ void ApplyInputs(void) if (gGraphics[j].Vendor == Ati) { gSettings.FBName = InputItems[i].SValue; } else if (gGraphics[j].Vendor == Nvidia) { - ZeroMem(AString, 256); - snprintf(AString, 255, "%ls", InputItems[i].SValue.wc_str()); - hex2bin(AString, (UINT8*)&gSettings.Dcfg[0], 8); + hex2bin(InputItems[i].SValue, (UINT8*)&gSettings.Dcfg[0], sizeof(gSettings.Dcfg)); } else if (gGraphics[j].Vendor == Intel) { //ig-platform-id for Ivy+ and snb-platform-id for Sandy gSettings.IgPlatform = (UINT32)StrHexToUint64(InputItems[i].SValue.wc_str()); @@ -613,10 +610,8 @@ void ApplyInputs(void) i++; //24 if (InputItems[i].Valid) { if (gGraphics[j].Vendor == Nvidia) { - ZeroMem(AString, 256); if ( InputItems[i].SValue.notEmpty() ) { - snprintf(AString, 255, "%ls", InputItems[i].SValue.wc_str()); - hex2bin(AString, (UINT8*)&gSettings.NVCAP[0], 20); + hex2bin(InputItems[i].SValue, (UINT8*)&gSettings.NVCAP[0], sizeof(gSettings.NVCAP)); } } else { gGraphics[j].Connectors = (UINT32)StrHexToUint64(InputItems[i].SValue.wc_str()); @@ -642,7 +637,7 @@ void ApplyInputs(void) } i++; //46 if (InputItems[i].Valid) { - gSettings.KernelAndKextPatches.KPAppleIntelCPUPM = InputItems[i].BValue; + GlobalConfig.KPAppleIntelCPUPM = InputItems[i].BValue; GlobalConfig.gBootChanged = TRUE; } i++; //47 @@ -652,7 +647,7 @@ void ApplyInputs(void) } i++; //48 if (InputItems[i].Valid) { - gSettings.KernelAndKextPatches.KPKernelPm = InputItems[i].BValue; + GlobalConfig.KPKernelPm = InputItems[i].BValue; GlobalConfig.gBootChanged = TRUE; } i++; //49 @@ -689,7 +684,7 @@ void ApplyInputs(void) } i++; //56 if (InputItems[i].Valid) { - gSettings.NvidiaWeb = InputItems[i].BValue; + gSettings.SystemParameters.NvidiaWeb = InputItems[i].BValue; } i++; //57 if (InputItems[i].Valid) { @@ -710,8 +705,8 @@ void ApplyInputs(void) i++; //61 if (InputItems[i].Valid) { gSettings.KernelAndKextPatches.KPDELLSMBIOS = InputItems[i].BValue; - // yes, we do need to change gRemapSmBiosIsRequire here as well - gRemapSmBiosIsRequire = InputItems[i].BValue; +// // yes, we do need to change gRemapSmBiosIsRequire here as well +// gRemapSmBiosIsRequire = InputItems[i].BValue; GlobalConfig.gBootChanged = TRUE; } i++; //62 @@ -999,7 +994,7 @@ void ApplyInputs(void) } i++; //115 if (InputItems[i].Valid) { - gSettings.NoCaches = InputItems[i].BValue; + gSettings.SystemParameters.NoCaches = InputItems[i].BValue; } i++; //116 if (InputItems[i].Valid) {