mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-24 16:27:42 +01:00
Created ABSTRACT_PATCH.
Renamed ForceKexts to ForceKextsToLoad. Create a copy KPKernelPm, KPAppleIntelCPUPM as they can be modified by NeedPMfix. Delete gRemapSmBiosIsRequire, duplicate of Patches->KPDELLSMBIOS Slight refactor of hex2bin and XMLDecode. Memory leak in XBuffer.stealValueFrom(). Create XString.strsicat() and stealValueFrom with a size parameter.
This commit is contained in:
parent
4b0ddf4dee
commit
65f8cc122d
@ -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 = "<group>";
|
||||
@ -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;
|
||||
|
@ -812,21 +812,105 @@
|
||||
<key>KernelToPatch</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>c2</string>
|
||||
<key>#Comment</key>
|
||||
<string>Disable panic kext logging on 10.14 Release kernel</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
ISI=
|
||||
igKEwHRC
|
||||
</data>
|
||||
<key>MaskFind</key>
|
||||
<data>
|
||||
////////
|
||||
</data>
|
||||
<key>MaskReplace</key>
|
||||
<data>
|
||||
AAAAAP8A
|
||||
</data>
|
||||
<key>MatchOS</key>
|
||||
<string>10.14</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
igKEwOtC
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Disable panic kext logging on 10.13 Release kernel</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
igKEwHRE
|
||||
</data>
|
||||
<key>MatchBuild</key>
|
||||
<string>10.13.6</string>
|
||||
<key>MatchOS</key>
|
||||
<string>10.13</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
IyQ=
|
||||
igKEwOtE
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Lapic panic patch example</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
6AAA//+DAAAAAAAA
|
||||
</data>
|
||||
<key>MaskFind</key>
|
||||
<data>
|
||||
/wAA////AAAAAP//
|
||||
</data>
|
||||
<key>MaskReplace</key>
|
||||
<data>
|
||||
/wAA////////////
|
||||
</data>
|
||||
<key>MaskStart</key>
|
||||
<data>
|
||||
/////wA=
|
||||
</data>
|
||||
<key>MatchOS</key>
|
||||
<string>All</string>
|
||||
<key>RangeFind</key>
|
||||
<integer>200</integer>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
6AAA//8xwJCQkJCQ
|
||||
</data>
|
||||
<key>StartPattern</key>
|
||||
<data>
|
||||
ACnHeAAx241H+oM=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Symbolic patch example got lapic panic</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
6AAA//+DAAAAAAAA
|
||||
</data>
|
||||
<key>MaskFind</key>
|
||||
<data>
|
||||
/wAA////AAAAAP//
|
||||
</data>
|
||||
<key>MaskReplace</key>
|
||||
<data>
|
||||
/wAA////////////
|
||||
</data>
|
||||
<key>MatchOS</key>
|
||||
<string>All</string>
|
||||
<key>Procedure</key>
|
||||
<string>_lapic_interrupt</string>
|
||||
<key>RangeFind</key>
|
||||
<integer>200</integer>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
6AAA//8xwJCQkJCQ
|
||||
</data>
|
||||
</dict>
|
||||
</array>
|
||||
@ -836,24 +920,134 @@
|
||||
<array>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>c1</string>
|
||||
<string>Enable TRIM for SSD</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
AEFQUExFIFNTRAA=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>Name</key>
|
||||
<string>com.apple.iokit.IOAHCIBlockStorage</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
AAAAAAAAAAAAAAA=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>External icons patch</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
RXh0ZXJuYWw=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.11.x,10.12.x,10.13.x,10.14.x,10.15.x</string>
|
||||
<key>Name</key>
|
||||
<string>com.apple.driver.AppleAHCIPort</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
SW50ZXJuYWw=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>framebuffer4K</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
AQ==
|
||||
AwAiDQADAwMAAAACAAAwAQ==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<true/>
|
||||
<key>MatchBuild</key>
|
||||
<string>10.14.6</string>
|
||||
<key>MatchOS</key>
|
||||
<string>10.14</string>
|
||||
<false/>
|
||||
<key>Name</key>
|
||||
<string>k1</string>
|
||||
<string>AppleIntelFramebufferAzul</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
Ag==
|
||||
AwAiDQADAwMAAAAEAAAAAw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Disable NVDARequiredOS</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
TlZEQVJlcXVpcmVkT1MA
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>Name</key>
|
||||
<string>NVDAStartupWeb</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
AAAAAAAAAAAAAAAAAAAA
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Disable board-id check to prevent no signal</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
SI01qjQ=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>Name</key>
|
||||
<string>com.apple.driver.AppleGraphicsDevicePolicy</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
Dx+AAAA=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Prevent AGDP from loading</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
ugUAAAA=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.15.x</string>
|
||||
<key>Name</key>
|
||||
<string>com.apple.driver.AppleGraphicsDevicePolicy</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
ugAAAAA=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>Atheros Locale Fix</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g/g3
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>AirPortAtheros40</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g/gh
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
@ -867,6 +1061,8 @@
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<true/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
@ -874,6 +1070,408 @@
|
||||
PHN0cmluZz5wY2kxNDRkLGE4MDI8L3N0cmluZz4=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#1 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
ibPoAgAAweAMBQAQAACJgw==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
ibPoAgAAweAJBQAQAACJgw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#2 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
D7aMiIIAAACD+QwPhTIBAA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
D7aMiIIAAACD+QkPhTIBAA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#3 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
AMeDpAAAAAAQAABIi0gISA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
AMeDpAAAAAACAABIi0gISA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#4 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
SYnGTYX2dGFBwecMSWP/vg==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
SYnGTYX2dGFBwecJSWP/vg==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#5 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
hv8PAABIwegMD7cPgeH/Dw==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
hv8PAABIwegJD7cPgeH/Dw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#6_7 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
icGB4f8PAABIAdFIgfn/DwAAdzs=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
icGB4f8BAABIAdFIgfn/AQAAdzs=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#8 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
SYHF/w8AAEnB7QxJiwQkSA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
SYHF/w8AAEnB7QlJiwQkSA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#9_10 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIB
|
||||
AABBvAAQAABJKfQ=
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIB
|
||||
AABBvAACAABJKfQ=
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#11 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
AABJiY4iAQAAugAQAABIKQ==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
AABJiY4iAQAAugACAABIKQ==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#12 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
yAAAAEkp17gAEAAATYskJA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
yAAAAEkp17gAAgAATYskJA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#13 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
4b+AQBUGTYnWugAQAABFMQ==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
4b+AQBUGTYnWugACAABFMQ==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#14 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
iWTY+EmBxAAQAABJgccA8A==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
iWTY+EmBxAACAABJgccA8A==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#15 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
Bf8PAABIwegMZvfB/w8PlQ==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
Bf8PAABIwegJZvfB/w8PlQ==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#16 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
weIIQQ+2wcHgDEQJ0EQJwA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
weIIQQ+2wcHgCUQJ0EQJwA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>IONVMeFamily Pike R. Alpha Patch#17 (Sierra)</string>
|
||||
<key>Disabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
RYTJD5XAD7bAweAMRAnYRA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>IONVMeFamily</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
RYTJD5XAD7bAweAJRAnYRA==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>change 15 port limit to 26 in XHCI kext (100-series)</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g32MEA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>AppleUSBXHCIPCI</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g32MGw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>change 15 port limit to 26 in XHCI kext (100-series)</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g710////EA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.x</string>
|
||||
<key>Name</key>
|
||||
<string>AppleUSBXHCISPT</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g710////Gw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>15 to 20 port limit (9-series)</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g710////EA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.6</string>
|
||||
<key>Name</key>
|
||||
<string>AppleUSBXHCIPCI</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g710////FQ==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>15 to 26 port limit (100-series)</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g710////EA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.12.6</string>
|
||||
<key>Name</key>
|
||||
<string>AppleUSBXHCIPCI</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g710////Gw==
|
||||
</data>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string>USB 10.13.6 by PMHeart</string>
|
||||
<key>Disabled</key>
|
||||
<true/>
|
||||
<key>Find</key>
|
||||
<data>
|
||||
g32IDw+DpwQAAA==
|
||||
</data>
|
||||
<key>InfoPlistPatch</key>
|
||||
<false/>
|
||||
<key>MatchOS</key>
|
||||
<string>10.13.6</string>
|
||||
<key>Name</key>
|
||||
<string>com.apple.driver.usb.AppleUSBXHCI</string>
|
||||
<key>Replace</key>
|
||||
<data>
|
||||
g32ID5CQkJCQkA==
|
||||
</data>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<key>RtVariables</key>
|
||||
|
@ -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();
|
||||
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -17,32 +17,26 @@ extern "C" {
|
||||
}
|
||||
|
||||
|
||||
class KEXT_PATCH
|
||||
class ABSTRACT_PATCH
|
||||
{
|
||||
public:
|
||||
XString8 Name;
|
||||
XString8 Label;
|
||||
BOOLEAN IsPlistPatch;
|
||||
XBuffer<UINT8> Data;
|
||||
XBuffer<UINT8> Patch;
|
||||
XBuffer<UINT8> MaskFind;
|
||||
XBuffer<UINT8> MaskReplace;
|
||||
XBuffer<UINT8> StartPattern;
|
||||
XBuffer<UINT8> 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<UINT8> Data = XBuffer<UINT8> ();
|
||||
XBuffer<UINT8> Patch = XBuffer<UINT8> ();
|
||||
XBuffer<UINT8> MaskFind = XBuffer<UINT8> ();
|
||||
XBuffer<UINT8> MaskReplace = XBuffer<UINT8> ();
|
||||
XBuffer<UINT8> StartPattern = XBuffer<UINT8> ();
|
||||
XBuffer<UINT8> StartMask = XBuffer<UINT8> ();
|
||||
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<UINT8> KPATIConnectorsData;
|
||||
#if defined(MDE_CPU_IA32)
|
||||
UINT32 align2;
|
||||
#endif
|
||||
|
||||
#if defined(MDE_CPU_IA32)
|
||||
UINT32 align3;
|
||||
#endif
|
||||
XBuffer<UINT8> KPATIConnectorsPatch;
|
||||
#if defined(MDE_CPU_IA32)
|
||||
UINT32 align4;
|
||||
#endif
|
||||
|
||||
// INT32 NrKexts;
|
||||
UINT32 align40;
|
||||
XObjArray<KEXT_PATCH> 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<KEXT_PATCH> KernelPatches;
|
||||
// INT32 NrBoots;
|
||||
XObjArray<KEXT_PATCH> 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<UINT8> KPATIConnectorsData = XBuffer<UINT8>();
|
||||
XBuffer<UINT8> KPATIConnectorsPatch = XBuffer<UINT8>();
|
||||
XStringWArray ForceKextsToLoad = XStringWArray();
|
||||
XObjArray<KEXT_PATCH> KextPatches = XObjArray<KEXT_PATCH>();
|
||||
XObjArray<KERNEL_PATCH> KernelPatches = XObjArray<KERNEL_PATCH>();
|
||||
XObjArray<BOOT_PATCH> BootPatches = XObjArray<BOOT_PATCH>();
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 <typename T, enable_if( is_char_ptr(T) || is___String(T) )>
|
||||
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);
|
||||
|
||||
|
@ -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();
|
||||
|
@ -486,17 +486,17 @@ void LOADER_ENTRY::AddKextsInArray(XObjArray<SIDELOAD_KEXT>* 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<SIDELOAD_KEXT>* 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);
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ extern "C" {
|
||||
|
||||
#include <UefiLoader.h>
|
||||
#include <Platform.h> // 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,
|
||||
"<string>com.apple.driver.AppleIntelCPUPowerManagement</string>") != NULL)) {
|
||||
//
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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__ */
|
||||
|
@ -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
|
||||
|
@ -35,7 +35,7 @@ protected:
|
||||
const XBuffer &operator =(const XBuffer &aBuffer);
|
||||
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
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<T>::_RData = _WData = p;
|
||||
XRBuffer<T>::m_size = count;
|
||||
XRBuffer<T>::_Index = 0;
|
||||
}
|
||||
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
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<T>::_RData = _WData = p;
|
||||
XRBuffer<T>::m_size = count;
|
||||
XRBuffer<T>::_Index = 0;
|
||||
}
|
||||
~XBuffer();
|
||||
|
||||
@ -113,26 +131,27 @@ public:
|
||||
template<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
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<typename IntegralType, enable_if(is_integral(IntegralType))>
|
||||
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];
|
||||
}
|
||||
|
||||
|
@ -57,7 +57,7 @@ class XString8 : public XStringAbstract<char, XString8>
|
||||
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)
|
||||
|
@ -352,7 +352,7 @@ public:
|
||||
//// template<class O>
|
||||
//// 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<typename O>
|
||||
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<typename O>
|
||||
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<typename O>
|
||||
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);
|
||||
|
@ -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
|
||||
|
@ -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<XString8Array>(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<XString8Array>(loaderEntry->LoadOptions.ConcatAll(" "_XS8).wc_str(), " ");
|
||||
|
@ -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;
|
||||
|
@ -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<KEXT_PATCH> selectedPathArray;
|
||||
XObjArray<ABSTRACT_KEXT_OR_KERNEL_PATCH> 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
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user