Jump to content
ErmaC

Clover problems report & features request

846 posts in this topic

Recommended Posts

On 5/8/2018 at 10:47 AM, apianti said:

 

The text is based on the EFI console mode, so the reason it's so small is because that's the size your firmware sets. Usually there's only one or two modes and they don't really change the size of the text, they just draw in differently sized rectangles to allow more characters to be drawn. So changing your resolution to something smaller will make the text bigger, there's no other way to  change the size of the text.

 

 

You can inject properties into the _DSM of the device's ACPI with Devices/AddProperties (or you can create your own SSDT that does this and inject it), although not sure that it can do that for those. Also, there is no support for those graphics so you won't be getting it working without another kext to support it. You are confusing the Vega 8 and 11 in those CPUs with the Vega M in the Intels, they are not the same.

 

I am pretty clear on the Intel vs. AMD Vega chips, not confused .   I am testing both and unfortunately both have only 7mb support so far.  

 

The Intel  i7 8705G has HBM2 and HD 630 but it doesn't have native AMD graphics support.   The closest Vega IDs are 0x69A0, and 0x69AF but neither works to activate the graphics.   These Intel chips have 630 graphics but they are not dsesigned to get acceleration only quick synch so accelerators won't load for these Kaby Lake graphics.

 

The AMD 2200g and 2400g vega chips are using DDR4 memory much like Intel chipsets and cost about 1/5 the price.   However I have been able to edit the info.plist of the Kaby Lake graphics kexts and get KBL CRB listing and Intel frame buffers loaded, but again only 7mb support.   I tested all the AMD kexts edits and Intel as well only the Kaby Lake registers.   Having a ig platform for ATI graphics in Clover would be a nice "trick" tool for testing and may get these chips to achieve acceleration.    ig ID 0x59E30003 may link the accelerators and get these working but I have no option for this.    Could you provide an example on how to do this in Add properties using clover?

 

***Look at the device IDs and Vendor info in the DCPIManager it has both AMD and intel codes.

 

 

Screen Shot 2018-05-10 at 9.27.21 AM.png

Screen Shot 2018-05-11 at 12.07.55 AM.png

Edited by Gigamaxx

Share this post


Link to post
Share on other sites
Advertisement

Fix for 32-bit builds with CLANG38 (stock EDK2, no patches; same as vit's fix for kernel_patcher.c):

 

Spoiler

diff --git a/rEFIt_UEFI/Platform/kext_patcher.c b/rEFIt_UEFI/Platform/kext_patcher.c
index c1b46e82..ddcbf182 100755
--- a/rEFIt_UEFI/Platform/kext_patcher.c
+++ b/rEFIt_UEFI/Platform/kext_patcher.c
@@ -28,7 +28,7 @@ UINTN SearchAndCount(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN Sear
 {
   UINTN     NumFounds = 0;
   UINT8     *End = Source + SourceSize;
-  
+
   while (Source < End) {
     if (CompareMem(Source, Search, SearchSize) == 0) {
       NumFounds++;
@@ -55,7 +55,7 @@ UINTN SearchAndReplace(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN Se
   if (!Source || !Search || !Replace || !SearchSize) {
     return 0;
   }
-  
+
   while ((Source < End) && (NoReplacesRestriction || (MaxReplaces > 0))) {
     if (CompareMem(Source, Search, SearchSize) == 0) {
       CopyMem(Source, Replace, SearchSize);
@@ -81,7 +81,7 @@ UINTN SearchAndReplaceTxt(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN
   if (!Source || !Search || !Replace || !SearchSize) {
     return 0;
   }
-  
+
   while (((Source + SearchSize) <= End) &&
          (NoReplacesRestriction || (MaxReplaces > 0))) { // num replaces
     while (*Source != '\0') {  //comparison
@@ -101,19 +101,19 @@ UINTN SearchAndReplaceTxt(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN
         Source++;
         Pos++;
       }
-      
+
       if (Pos == SearchEnd) { // pattern found
         Pos = FirstMatch;
         break;
       }
       else
         Pos = NULL;
-      
+
       Source = FirstMatch + 1;
 /*      if (Pos != Search) {
         AsciiPrint("\n");
       } */
-      
+
     }
 
     if (!Pos) {
@@ -138,10 +138,10 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
   CHAR8     *BIStart;
   CHAR8     *BIEnd;
   INTN      DictLevel = 0;
-  
-  
+
+
   gKextBundleIdentifier[0] = '\0';
-  
+
   // start with first <dict>
   Tag = AsciiStrStr(Plist, "<dict>");
   if (Tag == NULL) {
@@ -149,19 +149,19 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
   }
   Tag += 6;
   DictLevel++;
-  
+
   while (*Tag != '\0') {
-    
+
     if (AsciiStrnCmp(Tag, "<dict>", 6) == 0) {
       // opening dict
       DictLevel++;
       Tag += 6;
-      
+
     } else if (AsciiStrnCmp(Tag, "</dict>", 7) == 0) {
       // closing dict
       DictLevel--;
       Tag += 7;
-      
+
     } else if (DictLevel == 1 && AsciiStrnCmp(Tag, "<key>CFBundleIdentifier</key>", 29) == 0) {
       // BundleIdentifier is next <string>...</string>
       BIStart = AsciiStrStr(Tag + 29, "<string>");
@@ -178,7 +178,7 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
     } else {
       Tag++;
     }
-    
+
     // advance to next tag
     while (*Tag != '<' && *Tag != '\0') {
       Tag++;
@@ -221,7 +221,7 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
   //
   // prepar boundle ids
   //
-  
+
   // Lion, SnowLeo 10.6.7 2011 MBP
   AsciiSPrint(ATIKextBundleId[0],
               sizeof(ATIKextBundleId[0]),
@@ -234,9 +234,9 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
               "com.apple.kext.AMD%sController",
               Entry->KernelAndKextPatches->KPATIConnectorsController
               );
-  
+
   ATIConnectorsPatchInited = TRUE;
-  
+
   //DBG(L"Bundle1: %a\n", ATIKextBundleId[0]);
   //DBG(L"Bundle2: %a\n", ATIKextBundleId[1]);
   //gBS->Stall(10000000);
@@ -247,7 +247,7 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
 //
 VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *ForceLoadKexts, LOADER_ENTRY *Entry)
 {
-  
+
   // for future?
   FSInject->AddStringToList(ForceLoadKexts,
                             PoolPrint(L"\\AMD%sController.kext\\Contents\\Info.plist", Entry->KernelAndKextPatches->KPATIConnectorsController)
@@ -259,7 +259,7 @@ VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_
   // SnowLeo
   FSInject->AddStringToList(ForceLoadKexts, L"\\ATIFramebuffer.kext\\Contents\\Info.plist");
   FSInject->AddStringToList(ForceLoadKexts, L"\\AMDFramebuffer.kext\\Contents\\Info.plist");
-  
+
   // dependencies
   FSInject->AddStringToList(ForceLoadKexts, L"\\IOGraphicsFamily.kext\\Info.plist");
   FSInject->AddStringToList(ForceLoadKexts, L"\\ATISupport.kext\\Contents\\Info.plist");
@@ -274,14 +274,14 @@ VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_
 //
 VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
-  
+
   UINTN   Num = 0;
-  
+
   DBG_RT(Entry, "\nATIConnectorsPatch: driverAddr = %x, driverSize = %x\nController = %s\n",
          Driver, DriverSize, Entry->KernelAndKextPatches->KPATIConnectorsController);
   ExtractKextBundleIdentifier(InfoPlist);
   DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-  
+
   // number of occurences od Data should be 1
   Num = SearchAndCount(Driver, DriverSize, Entry->KernelAndKextPatches->KPATIConnectorsData, Entry->KernelAndKextPatches->KPATIConnectorsDataLen);
   if (Num > 1) {
@@ -290,7 +290,7 @@ VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT
     gBS->Stall(5*1000000);
     return;
   }
-  
+
   // patch
   Num = SearchAndReplace(Driver,
                          DriverSize,
@@ -322,9 +322,9 @@ VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT
 // Rehabman corrections 2014
 //
 
-UINT8   MovlE2ToEcx[] = { 0xB9, 0xE2, 0x00, 0x00, 0x00 };
-UINT8   MovE2ToCx[]   = { 0x66, 0xB9, 0xE2, 0x00 };
-UINT8   Wrmsr[]       = { 0x0F, 0x30 };
+STATIC UINT8   MovlE2ToEcx[] = { 0xB9, 0xE2, 0x00, 0x00, 0x00 };
+STATIC UINT8   MovE2ToCx[]   = { 0x66, 0xB9, 0xE2, 0x00 };
+STATIC UINT8   Wrmsr[]       = { 0x0F, 0x30 };
 
 VOID AppleIntelCPUPMPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
@@ -397,18 +397,18 @@ VOID AppleIntelCPUPMPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UI
 // http://www.insanelymac.com/forum/index.php?showtopic=276066
 //
 
-UINT8   LionSearch_X64[]  = { 0x75, 0x30, 0x44, 0x89, 0xf8 };
-UINT8   LionReplace_X64[] = { 0xeb, 0x30, 0x44, 0x89, 0xf8 };
+STATIC UINT8   LionSearch_X64[]  = { 0x75, 0x30, 0x44, 0x89, 0xf8 };
+STATIC UINT8   LionReplace_X64[] = { 0xeb, 0x30, 0x44, 0x89, 0xf8 };
 
-UINT8   LionSearch_i386[]  = { 0x75, 0x3d, 0x8b, 0x75, 0x08 };
-UINT8   LionReplace_i386[] = { 0xeb, 0x3d, 0x8b, 0x75, 0x08 };
+STATIC UINT8   LionSearch_i386[]  = { 0x75, 0x3d, 0x8b, 0x75, 0x08 };
+STATIC UINT8   LionReplace_i386[] = { 0xeb, 0x3d, 0x8b, 0x75, 0x08 };
 
-UINT8   MLSearch[]  = { 0x75, 0x30, 0x89, 0xd8 };
-UINT8   MLReplace[] = { 0xeb, 0x30, 0x89, 0xd8 };
+STATIC UINT8   MLSearch[]  = { 0x75, 0x30, 0x89, 0xd8 };
+STATIC UINT8   MLReplace[] = { 0xeb, 0x30, 0x89, 0xd8 };
 
 //SunKi
-UINT8   MavSearch[]  = { 0x75, 0x2e, 0x0f, 0xb6 };
-UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
+STATIC UINT8   MavSearch[]  = { 0x75, 0x2e, 0x0f, 0xb6 };
+STATIC UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
 
 //
 // We can not rely on OSVersion global variable for OS version detection,
@@ -420,19 +420,19 @@ UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
 
 VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
-  
+
   UINTN   Num = 0;
   UINTN   NumLion_X64 = 0;
   UINTN   NumLion_i386 = 0;
   UINTN   NumML = 0;
   UINTN   NumMav = 0;
-  
+
   DBG_RT(Entry, "\nAppleRTCPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
   if (Entry->KernelAndKextPatches->KPDebug) {
     ExtractKextBundleIdentifier(InfoPlist);
   }
   DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-  
+
   if (is64BitKernel) {
     NumLion_X64 = SearchAndCount(Driver, DriverSize, LionSearch_X64, sizeof(LionSearch_X64));
     NumML  = SearchAndCount(Driver, DriverSize, MLSearch,  sizeof(MLSearch));
@@ -440,7 +440,7 @@ VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 In
   } else {
     NumLion_i386 = SearchAndCount(Driver, DriverSize, LionSearch_i386, sizeof(LionSearch_i386));
   }
-  
+
   if (NumLion_X64 + NumLion_i386 + NumML + NumMav > 1) {
     // more then one pattern found - we do not know what to do with it
     // and we'll skipp it
@@ -449,7 +449,7 @@ VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 In
     gBS->Stall(5000000);
     return;
   }
-  
+
   if (NumLion_X64 == 1) {
     Num = SearchAndReplace(Driver, DriverSize, LionSearch_X64, sizeof(LionSearch_X64), LionReplace_X64, 1);
     DBG_RT(Entry, "==> Lion X64: %d replaces done.\n", Num);
@@ -508,8 +508,8 @@ VOID CheckForFakeSMC(CHAR8 *InfoPlist, LOADER_ENTRY *Entry)
 //
 // EB9D2D31-2D88-11D3-9A16-0090273F -> EB9D2D35-2D88-11D3-9A16-0090273F
 //
-UINT8   DELL_SMBIOS_GUID_Search[]  = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x31 };
-UINT8   DELL_SMBIOS_GUID_Replace[] = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x35 };
+STATIC STATIC UINT8   DELL_SMBIOS_GUID_Search[]  = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x31 };
+STATIC STATIC UINT8   DELL_SMBIOS_GUID_Replace[] = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x35 };
 
 //
 // EB9D2D31-2D88-11D3-9A16-0090273F is the standard SMBIOS Table Type 1 for
@@ -525,19 +525,19 @@ VOID DellSMBIOSPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
     // than Yosemite, they are all pure 64bit platforms
     //
     UINTN gPatchCount = 0;
-    
+
     DBG_RT(Entry, "\nDellSMBIOSPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug)
     {
         ExtractKextBundleIdentifier(InfoPlist);
     }
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-    
+
     //
     // now, let's patch it!
     //
     gPatchCount = SearchAndReplace(Driver, DriverSize, DELL_SMBIOS_GUID_Search, sizeof(DELL_SMBIOS_GUID_Search), DELL_SMBIOS_GUID_Replace, 1);
-    
+
     if (gPatchCount == 1)
     {
         DBG_RT(Entry, "==> AppleSMBIOS: %d replaces done.\n", gPatchCount);
@@ -564,24 +564,24 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
 {
     UINT32 i;
     UINT64 os_ver = AsciiOSVersionToUint64(Entry->OSVersion);
-    
+
     DBG_RT(Entry, "\nSNBE_AICPUPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug) {
         ExtractKextBundleIdentifier(InfoPlist);
     }
-    
+
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-    
+
     // now let's patch it
     if (os_ver < AsciiOSVersionToUint64("10.9") || os_ver >= AsciiOSVersionToUint64("10.14")) {
         DBG("Unsupported macOS.\nSandyBridge-E requires macOS 10.9 - 10.13.x, aborted\n");
         DBG("SNBE_AICPUPatch() <===FALSE\n");
         return;
     }
-    
+
     if (os_ver < AsciiOSVersionToUint64("10.10")) {
         // 10.9.x
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x84, 0x2F, 0x01 },
             { 0x3E, 0x75, 0x3A },
             { 0x84, 0x5F, 0x01 },
@@ -590,7 +590,7 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
             { 0xFC, 0x02, 0x74 },
             { 0x01, 0x74, 0x58 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x85, 0x2F, 0x01 },
             { 0x3E, 0x90, 0x90 },
             { 0x85, 0x5F, 0x01 },
@@ -599,7 +599,7 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
             { 0xFC, 0x02, 0xEB },
             { 0x01, 0xEB, 0x58 }
         };
-        
+
         for (i = 0; i < 7; i++) {
             if (SearchAndReplace(Driver, DriverSize, find[i], sizeof(find[i]), repl[i], 0)) {
                 DBG("SNBE_AICPUPatch (%d/7) applied\n", i);
@@ -609,12 +609,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.11")) {
         // 10.10.x
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x3E, 0x75, 0x39 },
             { 0x74, 0x11, 0xB9 },
             { 0x01, 0x74, 0x56 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 },
             { 0x01, 0xEB, 0x56 }
@@ -626,34 +626,34 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0x02, 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
-        UINT8 repl_3[] = { 0x02, 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
+
+        STATIC UINT8 find_3[] = { 0x02, 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
+        STATIC UINT8 repl_3[] = { 0x02, 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
-        UINT8 repl_4[] = { 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
+
+        STATIC UINT8 find_4[] = { 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
+        STATIC UINT8 repl_4[] = { 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -661,12 +661,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.12")) {
         // 10.11
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x3E, 0x75, 0x39 },
             { 0x75, 0x11, 0xB9 },
             { 0x01, 0x74, 0x5F }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 },
             { 0x01, 0xEB, 0x5F }
@@ -678,33 +678,33 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -712,12 +712,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.13")) {
         // 10.12
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x01, 0x74, 0x61 },
             { 0x3E, 0x75, 0x38 },
             { 0x75, 0x11, 0xB9 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x01, 0xEB, 0x61 },
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 }
@@ -729,33 +729,33 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
 
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
 
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -763,12 +763,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.14")) {
         // 10.13
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x01, 0x74, 0x61 },
             { 0x3E, 0x75, 0x38 },
             { 0x75, 0x11, 0xB9 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x01, 0xEB, 0x61 },
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 }
@@ -780,40 +780,40 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0xD3 };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0xD3 };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0xD3 };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0xD3 };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B};
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B};
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (7/7) not apply\n");
         }
     }
-    
+
     if (Entry->KernelAndKextPatches->KPDebug) {
         gBS->Stall(5000000);
     }
@@ -828,31 +828,31 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
 // find: 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40
 // repl: 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80
 //
-UINT8 BroadwellE_IOPCI_Find[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40 };
-UINT8 BroadwellE_IOPCI_Repl[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80 };
+STATIC UINT8 BroadwellE_IOPCI_Find[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40 };
+STATIC UINT8 BroadwellE_IOPCI_Repl[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80 };
 
 VOID BDWE_IOPCIPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
     UINTN count = 0;
-    
+
     DBG_RT(Entry, "\nBDWE_IOPCIPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug) {
         ExtractKextBundleIdentifier(InfoPlist);
     }
-    
+
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
     //
     // now, let's patch it!
     //
     count = SearchAndReplace(Driver, DriverSize, BroadwellE_IOPCI_Find, sizeof(BroadwellE_IOPCI_Find), BroadwellE_IOPCI_Repl, 0);
-    
+
     if (count) {
         DBG_RT(Entry, "==> IOPCIFamily: %d replaces done.\n", count);
     }
     else {
         DBG_RT(Entry, "==> Patterns not found - patching NOT done.\n");
     }
-    
+
     if (Entry->KernelAndKextPatches->KPDebug) {
         gBS->Stall(5000000);
     }
@@ -878,7 +878,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
 {
   UINTN   Num = 0;
   INTN    Ind;
-  
+
   DBG_RT(Entry, "\nAnyKextPatch %d: driverAddr = %x, driverSize = %x\nAnyKext = %a\n",
          N, Driver, DriverSize, Entry->KernelAndKextPatches->KextPatches[N].Label);
 
@@ -914,7 +914,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
       DBG_RT(Entry, "%c", Entry->KernelAndKextPatches->KextPatches[N].Patch[Ind]);
     }
     DBG_RT(Entry, "' \n");
-    
+
     Num = SearchAndReplaceTxt((UINT8*)InfoPlist,
                            InfoPlistSize,
                            Entry->KernelAndKextPatches->KextPatches[N].Data,
@@ -922,7 +922,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
                            Entry->KernelAndKextPatches->KextPatches[N].Patch,
                            -1);
   }
-  
+
   if (Entry->KernelAndKextPatches->KPDebug) {
     if (Num > 0) {
       DBG_RT(Entry, "==> patched %d times!\n", Num);
@@ -940,17 +940,17 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
 VOID KextPatcherRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *ForceLoadKexts, LOADER_ENTRY *Entry)
 {
   INTN i;
-  
+
   if (Entry->KernelAndKextPatches->KPATIConnectorsController != NULL) {
     ATIConnectorsPatchRegisterKexts(FSInject, ForceLoadKexts, Entry);
   }
-  
+
   for (i = 0; i < Entry->KernelAndKextPatches->NrKexts; i++) {
     FSInject->AddStringToList(ForceLoadKexts,
                               PoolPrint(L"\\%a.kext\\Contents\\Info.plist",
                                         Entry->KernelAndKextPatches->KextPatches[i].Name) );
   }
-  
+
 }
 
 //
@@ -960,7 +960,7 @@ VOID KextPatcherRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *F
 VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
   INT32 i;
-  
+
   if (Entry->KernelAndKextPatches->KPATIConnectorsController != NULL) {
     //
     // ATIConnectors
@@ -977,9 +977,9 @@ VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPl
       return;
     }
   }
-  
+
   ExtractKextBundleIdentifier(InfoPlist);
-  
+
   if (Entry->KernelAndKextPatches->KPAppleIntelCPUPM &&
       (AsciiStrStr(InfoPlist,
                    "<string>com.apple.driver.AppleIntelCPUPowerManagement</string>") != NULL)) {
@@ -1034,7 +1034,7 @@ VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPl
       }
     }
 //  }
-  
+
   //
   // Check for FakeSMC (InjectKexts if no FakeSMC)
   //
@@ -1071,43 +1071,43 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
   UINTN     IDLen;
   CHAR8     Buffer[48];
   //static INTN   DbgCount = 0;
-  
+
   // search for Key
   Value = AsciiStrStr(Plist, Key);
   if (Value == NULL) {
     //DBG(L"\nNo key: %a\n", Key);
     return 0;
   }
-  
+
   // search for <integer
   IntTag = AsciiStrStr(Value, "<integer");
   if (IntTag == NULL) {
     DBG(L"\nNo integer\n");
     return 0;
   }
-  
+
   // find <integer end
   Value = AsciiStrStr(IntTag, ">");
   if (Value == NULL) {
     DBG(L"\nNo <integer end\n");
     return 0;
   }
-  
+
   if (Value[-1] != '/') {
-    
+
     // normal case: value is here
     NumValue = AsciiStrHexToUint64(Value + 1);
     return NumValue;
-    
+
   }
-  
+
   // it might be a reference: IDREF="173"/>
   Value = AsciiStrStr(IntTag, "<integer IDREF=\"");
   if (Value != IntTag) {
     DBG(L"\nNo <integer IDREF=\"\n");
     return 0;
   }
-  
+
   // compose <integer ID="xxx" in the Buffer
   IDStart = AsciiStrStr(IntTag, "\"") + 1;
   IDEnd = AsciiStrStr(IDStart, "\"");
@@ -1130,14 +1130,14 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
    DBG(L"Searching: '%a'\n", Buffer);
    }
    */
-  
+
   // and search whole plist for ID
   IntTag = AsciiStrStr(WholePlist, Buffer);
   if (IntTag == NULL) {
     DBG(L"\nNo %a\n", Buffer);
     return 0;
   }
-  
+
   // got it. find closing >
   /*
    if (DbgCount < 3) {
@@ -1154,10 +1154,10 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
     DBG(L"\nInvalid <integer IDREF end\n");
     return 0;
   }
-  
+
   // we should have value now
   NumValue = AsciiStrHexToUint64(Value + 1);
-  
+
   /*
    if (DbgCount < 3) {
    AsciiStrnCpy(Buffer, IntTag, sizeof(Buffer) - 1);
@@ -1166,7 +1166,7 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
    }
    DbgCount++;
    */
-  
+
   return NumValue;
 }
 
@@ -1208,10 +1208,10 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
   //INTN      DbgCount = 0;
   UINT32    KextAddr;
   UINT32    KextSize;
-  
-  
+
+
   WholePlist = (CHAR8*)(UINTN)PrelinkInfoAddr;
-  
+
   //
   // Detect FakeSMC and if present then
   // disable kext injection InjectKexts().
@@ -1222,12 +1222,12 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
   // But searching through the whole prelink info
   // works and that's the reason why it is here.
   //
-  
+
   //Slice
   // I see no reason to disable kext injection if FakeSMC found in cache
   //since rev4240 we have manual kext inject disable
   CheckForFakeSMC(WholePlist, Entry);
-  
+
   DictPtr = WholePlist;
   while ((DictPtr = AsciiStrStr(DictPtr, "dict>")) != NULL) {
     if (DictPtr[-1] == '<') {
@@ -1238,16 +1238,16 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
         InfoPlistStart = DictPtr - 1;
       }
     } else if (DictPtr[-2] == '<' && DictPtr[-1] == '/') {
-      
+
       // closing dict
       if (DictLevel == 2 && InfoPlistStart != NULL) {
         // kext end
         InfoPlistEnd = DictPtr + 5 /* "dict>" */;
-        
+
         // terminate Info.plist with 0
         SavedValue = *InfoPlistEnd;
         *InfoPlistEnd = '\0';
-        
+
         // get kext address from _PrelinkExecutableSourceAddr
         // truncate to 32 bit to get physical addr
         KextAddr = (UINT32)GetPlistHexValue(InfoPlistStart, kPrelinkExecutableSourceKey, WholePlist);
@@ -1256,9 +1256,9 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
         KextAddr += KernelSlide;
         // and adjust for AptioFixDrv's KernelRelocBase
         KextAddr += (UINT32)KernelRelocBase;
-        
+
         KextSize = (UINT32)GetPlistHexValue(InfoPlistStart, kPrelinkExecutableSizeKey, WholePlist);
-        
+
         /*if (DbgCount < 3
          || DbgCount == 100 || DbgCount == 101 || DbgCount == 102
          ) {
@@ -1267,7 +1267,7 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
          gBS->Stall(20000000);
          }
          */
-        
+
         // patch it
         PatchKext(
                   (UINT8*)(UINTN)KextAddr,
@@ -1276,7 +1276,7 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
                   (UINT32)(InfoPlistEnd - InfoPlistStart),
                   Entry
                   );
-        
+
         // return saved char
         *InfoPlistEnd = SavedValue;
         //DbgCount++;
@@ -1302,16 +1302,16 @@ VOID PatchLoadedKexts(LOADER_ENTRY *Entry)
 	struct OpaqueDTPropertyIterator OPropIter;
 	DTPropertyIterator	PropIter = &OPropIter;
 	//UINTN               DbgCount = 0;
-  
-  
+
+
   DBG(L"\nPatchLoadedKexts ... dtRoot = %p\n", dtRoot);
-  
+
   if (!dtRoot) {
     return;
   }
-  
+
   DTInit(dtRoot);
-  
+
   if (DTLookupEntry(NULL,"/chosen/memory-map", &MMEntry) == kSuccess) {
     if (DTCreatePropertyIteratorNoAlloc(MMEntry, PropIter) == kSuccess) {
       while (DTIterateProperties(PropIter, &PropName) == kSuccess) {
@@ -1320,15 +1320,15 @@ VOID PatchLoadedKexts(LOADER_ENTRY *Entry)
           // PropEntry _DeviceTreeBuffer is the value of Driver-XXXXXX property
           PropEntry = (_DeviceTreeBuffer*)(((UINT8*)PropIter->currentProperty) + sizeof(DeviceTreeNodeProperty));
           //if (DbgCount < 3) DBG(L"%a: paddr = %x, length = %x\n", PropName, PropEntry->paddr, PropEntry->length);
-          
+
           // PropEntry->paddr points to _BooterKextFileInfo
           KextFileInfo = (_BooterKextFileInfo *)(UINTN)PropEntry->paddr;
-          
+
           // Info.plist should be terminated with 0, but will also do it just in case
           InfoPlist = (CHAR8*)(UINTN)KextFileInfo->infoDictPhysAddr;
           SavedValue = InfoPlist[KextFileInfo->infoDictLength];
           InfoPlist[KextFileInfo->infoDictLength] = '\0';
-          
+
           PatchKext(
                     (UINT8*)(UINTN)KextFileInfo->executablePhysAddr,
                     KextFileInfo->executableLength,

 

 

Edited by TheRacerMaster

Share this post


Link to post
Share on other sites

Clover 4482 has broken kext injection of my ApplePS2SmartTouchPad.kext so i have no touchpad. External mouse works fine but trackpad is no longer detected. Was working fine with 4480 not sure about 4481 as i don't have it.

Edited by SavageAUS

Share this post


Link to post
Share on other sites

32-bit builds appear to be broken with GCC 8:

Clover/rEFIt_UEFI/Platform/AcpiPatcher.c:222:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
       gBS->FreePages((EFI_PHYSICAL_ADDRESS)XsdtEntryFromIndex(Index), XsdtReplaceSizes[Index]);
                      ^
#define XsdtEntryFromIndex(index) (EFI_ACPI_DESCRIPTION_HEADER*)(UINTN)ReadUnaligned64(XsdtEntryPtrFromIndex(index))

EFI_PHYSICAL_ADDRESS is 64-bit, so this is casting from a 32-bit pointer to a 64-bit integer.

 

Also, r4482's plist.c changes (specifically, the "end of cache" freeing) appear to cause memory corruption. Removing this fixes kext injection issues (plist.c memory corruption causes some kext versions to display <null string> in bdmesg).

Edited by TheRacerMaster

Share this post


Link to post
Share on other sites
1 hour ago, TheRacerMaster said:

32-bit builds appear to be broken with GCC 8:


Clover/rEFIt_UEFI/Platform/AcpiPatcher.c:222:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
       gBS->FreePages((EFI_PHYSICAL_ADDRESS)XsdtEntryFromIndex(Index), XsdtReplaceSizes[Index]);
                      ^

#define XsdtEntryFromIndex(index) (EFI_ACPI_DESCRIPTION_HEADER*)(UINTN)ReadUnaligned64(XsdtEntryPtrFromIndex(index))

EFI_PHYSICAL_ADDRESS is 64-bit, so this is casting from a 32-bit pointer to a 64-bit integer.

 

Also, r4482's plist.c changes (specifically, the "end of cache" freeing) appear to cause memory corruption. Removing this fixes kext injection issues (plist.c memory corruption causes some kext versions to display <null string> in bdmesg).

Thanks,

STATIC arrays accepted in 4484,

plist.c fixed in 4483.

EFI_PHYSICAL_ADDRESS will be fixed.  EDITED: 4485

Share this post


Link to post
Share on other sites

Hi,

it appears that 

        <key>FakeID</key>
        <dict>
            <key>LAN</key>
            <string>0x435411ab</string>
        </dict>

is broken since rev 4497

OK with 4495.

Is it a bug in new injection method ?

 

Share this post


Link to post
Share on other sites

Zenith432, why did you change architecture 32+64 to 64 in clover utilities? This breaks 32-bit compilation I still use. 10.14 has nothing to do to fat binaries, please revert the change back.

Share this post


Link to post
Share on other sites
9 hours ago, vit9696 said:

Zenith432, why did you change architecture 32+64 to 64 in clover utilities? This breaks 32-bit compilation I still use. 10.14 has nothing to do to fat binaries, please revert the change back.

Explained here

Which compilation did it break?

 

FWIW: I know why 32-bit build of clover-genconfig defines MDE_CPU_X64.  It's because in project.pbxproj, HEADER_SEARCH_PATHS is always MdePkg/Include/X64, so ProcessorBind.h is taken from there and code always uses 64 EDK2 defs.  In particular, the lines

Quote
#if defined(MDE_CPU_IA32)
printf("32 bit generator\n");
#elif defined(MDE_CPU_X64)
printf("64 bit generator\n");

in clover-genconfig.c are a joke.

 

PS: So it seems even 32-bit build of clover-genconfig wants to parse binary format of SETTINGS_DATA used by 64-bit Clover.  Is this right?  Are we looking for version to parse SETTINGS_DATA for 32-bit Clover?  Should 32-bit support be fully discontinued?  I need to know what the intention was to decide on resolution.

 

PPS: Including X64 version of ProcessorBind.h is 32-bit build of clover-genconfig cannot work anyway.  The struct SETTINGS_DATA has pointers in it, which are a different size, so 32-bit build will not end up with correct structure for 64-bit Clover.

 

@Slice: did you bother to test new code in r4501?  I see in main() in clover-genconfig.c call to GetOFVariable("device-properties", ...) which uses global gPlatform before it's been initialized.

Edited by Zenith432

Share this post


Link to post
Share on other sites

@Zenith432, the obvious issue here is that you enforced clover-genconfig being 64-bit, and thus it does not run on a 32-bit only CPU (and yes, that is my case, which I still rarely use for testing some really old legacy projects). So it is very clear how and why this is broken :).

 

Sure, nobody did request you to support a 32-bit only binary (which I agree is inadequate), yet a fat binary should successfully be able to generate a 32-bit config on a 32-bit only system, and a 64-bit config on a 64-bit system. For hybrid ones there have always been an arch util (man arch).

 

To fix the actual header paths bug you need to change the Xcode project header inclusion paths. If you click on + in Xcode project prefs it would let you define different header paths depending on the architecture. This should have been done right previously, yet some crazy attempts to make it "64-bit only" must have borked it.

 

Thanks~

Share this post


Link to post
Share on other sites

The 32-bit build of clover-genconfig didn't work before.  It was built, but it didn't do anything. It used arch i386 and X64/ProcessorBind.h which gives a different sizeof(SETTINGS_DATA) than compiling with arch x86_64.  In clover-genconfig.c there is a sanity check for sizeof(SETTINGS_DATA) being the same as the size of the data being parsed and it exited with an error message.

The reason for removal of 32-bit build was that after reversion of MdePke/Include/Base.h, it needs MDE_CPU_IA32 for arch i386 or it generates a compile error.  Right now, both xcodeproj and Makefile for clover-genconfig do not result in any errors, but do not build 32-bitnary either.

I'll only have access to macos on Monday, but when I do I'll change xcodeproj to use IA32/ProcessorBind.h for arch i386, return 32-bit into fat binary.  It is the only workable solution, because hybrid option does not yield a usable program.

Share this post


Link to post
Share on other sites
On 5/26/2018 at 8:19 AM, Zenith432 said:

 

@Slice: did you bother to test new code in r4501?  I see in main() in clover-genconfig.c call to GetOFVariable("device-properties", ...) which uses global gPlatform before it's been initialized.

4501 is not working version. I commit it to have an ability get my draft from other place.

I want to seriously advance clover-genconfig.

Share this post


Link to post
Share on other sites
On 5/26/2018 at 2:28 AM, Mr MagOO said:

Hi,

it appears that 

        <key>FakeID</key>
        <dict>
            <key>LAN</key>
            <string>0x435411ab</string>
        </dict>

is broken since rev 4497

OK with 4495.

Is it a bug in new injection method ?

 

@Slice : is there a chance the FakeID injection is broken or do I need to change syntax or something to make it work post rev 4496 ?

Share this post


Link to post
Share on other sites
6 hours ago, Mr MagOO said:

@Slice : is there a chance the FakeID injection is broken or do I need to change syntax or something to make it work post rev 4496 ?

Yes, you have to add

Quote

    <key>Devices</key>
    <dict>

        <key>LANInject</key>
        <true/>

 

Sorry for the back incompatibility.

I have to disable automatic injection to not mix with new method of Properties injection.

Share this post


Link to post
Share on other sites

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

Also, the file was previously sorted.  It makes it hard to merge changes when each commit is randomly sorted from previous one.

Share this post


Link to post
Share on other sites
15 hours ago, Slice said:

Yes, you have to add

Sorry for the back incompatibility.

I have to disable automatic injection to not mix with new method of Properties injection.

 

Well, something is really happening with LANInjection=true ...

but I don't know what because I lost my video with a black screen boot :)

I've got this in Devices and Graphics :

	<key>Devices</key>
	<dict>
		<key>Audio</key>
		<dict>
			<key>Inject</key>
			<string>no</string>
		</dict>
        <key>LANInjection</key>
		<true/>
		<key>FakeID</key>
		<dict>
			<key>LAN</key>
			<string>0x435411ab</string>
		</dict>
		<key>USB</key>
		<dict>
			<key>AddClockID</key>
			<true/>
			<key>FixOwnership</key>
			<true/>
			<key>HighCurrent</key>
			<true/>
			<key>Inject</key>
			<true/>
		</dict>
	</dict>

	<key>Graphics</key>
	<dict>
		<key>Inject</key>
		<dict>
			<key>ATI</key>
			<false/>
			<key>Intel</key>
			<false/>
			<key>NVidia</key>
			<true/>
		</dict>
		<key>NvidiaGeneric</key>
		<true/>
		<key>VideoPorts</key>
		<integer>3</integer>
	</dict>

Is there any change for video injection ?

edit : {censored}, my fault, all is OK now with rev 4507.

Thank you Slice!

 

Edited by Mr MagOO

Share this post


Link to post
Share on other sites
3 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

Also, the file was previously sorted.  It makes it hard to merge changes when each commit is randomly sorted from previous one.

It is PlistEditPro mischief. I corrected this in 4507. I will no more use this strange application.

Share this post


Link to post
Share on other sites
5 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

 

It looks like nulls are known problem

Quote

  CopyMem(configBuffer, buffer, bufferSize);
  for (i=0; i<bufferSize; i++) {
    if (configBuffer == 0) {
      configBuffer = 0x20;  //replace random zero bytes to spaces
    }
  }

 

But I am not sure if this is good solution. Anyway we live with this workaround some years.

Share this post


Link to post
Share on other sites
13 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

 

clover-genconfig corrected to not produce nulls. rev 4508.

 

Sorry about 32 bits, Xcode 9.3.1 don't like it.

Share this post


Link to post
Share on other sites
On 5/29/2018 at 7:29 AM, Slice said:

Sorry about 32 bits, Xcode 9.3.1 don't like it.

-arch i386 builds fine with Xcode 9.4, but after removed 10.11 sdk which I don't have.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Simon's InsaneMac
      Hi, I'm kind of lost when scrolling to Clover Configurator, so I decided to use an EFI from the web and just configure the most basic stuff. But that sadly didn't work, im always getting the attached screen IMG_0054.HEIC (and I don't know whether all the errors are listed, as I can't scroll). 
      Anyways I thought it'd be better to do a custom setup. Can anyone give me some help with what to choose in the settings? Here's my rig:
      i7 8700k
      Asus z370-G (Rog Strix)
      gtx 1060 6gb
      samsung ssd (SATA)
      WD hard drive
       
      Your help would be much appreciated!
    • By kylon
      A big thanks to wegface for teaching me a lot of things.
       
       
      Tested on Catalina 10.15.4 and Clover EFI 5104 (Catalina Patcher)
       
      Not Working:
      - realtek sd card reader (pm me if you have a fix)
       
      Notes:
      **CPU patches are disabled, if you are using a locked BIOS you must enable them**
       
      Clover EFI:
      - Install it in UEFI Mode and change your hdd partition table to GPT.
      - You will be able to install ANY OS in EFI mode, even if this pc does not support EFI at all! (No guide available for this)
       
      You will need:
      My unlocked BIOS (OPTIONAL) (here) Latest Clover config from CCE Bank (here) (asus k53sj-kylon) Rehabman Voodoo PS2 Controller (here) acidanthera AppleALC (here) acidanthera Lilu (here) acidanthera VirtualSMC (here) acidanthera SMCBatteryManager (here) acidanthera SMCLightSensor (here) acidanthera WhateverGreen (here) Mieze Realtek RTL8111 (here)
    • By Rohan20
      Opencore is running really really slow on Catalina 10.15.4. So It was running perfectly before I put the ssdt-pnlf for enabling Brightness control. it is running really slow and I verified my config with the sanity checker and its all correct. can someone please help. I am attaching my oc folder.

       
      https://www.dropbox.com/s/drkek0eaz19ina5/OC.zip?dl=0
       
    • By y010204025
      Disclaimer: All files of this article are from itpwd.com and rehabman ’s github.com

       
      After Testing:
       
      Graphics card: NVIDIA K1000M / K2000M / K2100M / K3000M / K3100M / K4000M / M1000M (ordinary TN1600x900 or 1920x1080), AMD W5170M / W7170M (DC2 or 4K), Intel HD4000 (ordinary TN1600x900 or 1920x1080) can be driven normally, but NVIDIA graphics card Brightness adjustment is disabled. AMD W5170m and w7170m are the best choices on 8570W and 8770W. The brightness can be adjusted normally and the graphics performance is very good. For WX7100m and WX4170m, the graphics card fans cannot be controlled, and other methods are required to control the fans. CPU: 3rd generation Intel Core i3, i5 and i7 (Ivy Bridge architecture, including all dual-core and quad-core. Celeron and Pentium are not supported), frequency conversion is normal. In general: If you have 8570W, 8770W, and hope you can get the best Hackintosh experience, it is recommended to replace the CPU with i7-3840QM / i7-3940XM, 8570W is recommended to choose W5170M, 8770W, and it is recommended to choose W7170M. In addition: If you want to have a 4K experience or perfect HIDPI, W5170m / W7170M supports 4K output, you can choose a suitable 4K screen to replace, but because 4K screens are mostly edp interface, and 8570W / 8770W motherboard is lvds interface, This requires a custom screen cable, which seems to be a difficult choice, but you can choose to do it yourself or buy it separately. In China, taobao.com is almighty and may be more suitable for you than eBay.
       
      EFI features:
      out of the box, the relevant hardware can be driven after the OS is installed, and it is easy to use without code operation.
      Supported models: HP EliteBook 8470p, 8570p, 8570w, 8770w (click the model for official specifications)
      Wireless network card: Recommended: BCM94360cd (requires ipex4 to ipex1,3 antenna 1300mbps), BCM94352HMB / DW1550 (2 antennas, 867mbps)
      Wireless characteristics: no white list, wireless network card with Bluetooth does not support the Bluetooth function of the wireless network card (also does not need to shield the pins), but the wireless normal use, you need the Bluetooth function to use this machine comes with Bluetooth:
      Clover version: 5103, keyboard mapping has been added Command key = Alt key, Option key = Win key
      Supported systems: macOS Mojave 10.14.6 (18G103)-macOS Catalina 10.15.x,
       
      Notes on known issues:
      1. The touchpad and the left and right keys under the touchpad are normal, the pointing stick and the left and right keys above the touchpad are temporarily unavailable (recommended to use the second generation of Apple Magic Trackpad)
      2. Indicator display problem (can be ignored, function is normal): Caps light is sometimes not switched in time, mute / wireless key may be yellow
      3.AMD graphics card / Intel nuclear display has supported sleep and 15 levels of brightness adjustment, NVIDIA has no
      4. If the AMD graphics card enters Huaping, refer to editing the Clover startup parameters, and add the Boot parameter radpg = 15 (the EFI file that has been configured with this parameter has been uploaded, refer to the following EFI-guided download link)
      5. Using the above NVIDIA graphics card with a normal TN screen 1600x900 or 1920x1080 can not enter the installation interface, please check whether the VBiOS of the graphics card is exclusively for HP, thank you for your test face K1000M
      6. Due to product design defects, the MSata positions of 8570w and 8770w cannot be used as boot disks, so EFI boot can only be placed on the main hard disk (turn the machine over and open the hard disk in the lower left corner of the cover, which is the main hard disk). Put on msata plate
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      Hardware requirements:
      Model: 8470p, 8570p, 8570W, 8770W 1 or more, it is recommended to use another notebook for emergency Hard disk: It is recommended to choose an SSD hard disk of 240g or more. Samsung or Intel SATA hard disk is a good choice. Wireless card: BCM94352HMB, DW1550, BCM94360CD, miniPCIe slot U disk: 1 for 16g and above, another winPE emergency USB disk is recommended If you use a rescue USB flash drive, it means that you read this post carefully
       
      Make and install a USB flash drive:
      Get the mirror: please do it your way Making and installing a USB flash drive: macOS command line production is recommended, whether it is a real macOS model or a virtual machine (although this is not allowed to be discussed in many forums)Or you can choose to use TransMac or ether under Windows. This is not recommended, but it is simple enough for those new to Hackintosh. Make boot U disk: If you know how to put the boot into the installation U disk, unzip the EFI file and put it in the EFI partition, or you can choose a fat32 format U disk to store the EFI file separately Note: EFI is an unzipped folder, not a zip or ISO suffix file.
       
      BIOS settings From RehabMan
      To start, set BIOS to defaults.
      Then insure:
      UEFI boot is enabled (hybrid/with CSM for best result) secure boot is disabled disable fast boot IGPU graphics memory set to 64mb, if available disable the serial port via BIOS option, if available disable "LAN/WLAN switching", if available disable "Extended Idle Power States" if you find it under "Power Management Options" disable "Wake on LAN" and "Wake on USB" disable Firewire/IEEE 1394, if your laptop has it for Skylake and KabyLake laptop, enable "Launch Hotkeys without Fn keypress" Note: If you have a laptop with switchable graphics, leave it enabled. You can still use it on Windows, although the discrete card will be disabled when running OS X by the ACPI patches provided here. If you want to also disable it in Windows (via BIOS option), make sure you read about the DGPU option in your model specific SSDT (source is in SSDT-HACK.dsl), as in the scenario where the DGPU is disabled by BIOS, DGPU should be set to zero.
       
      Install:
      Please modify according to the above BIOS settings: Press F9 after booting, select the boot efi to file option, which is generally the last item. Enter your boot USB disk to find the location of cloverx64.efi, select cloverx64.efi, press Enter, and enter the clover boot interface. Select the location of the install entry and press Enter. Enter the macOS interface, use the disk tool to format the partition you need to install to hfs + or apfs format, do not choose the encryption option, this will make your efforts in vain. Note: The disk must be in gpt format, and the remaining EFI space is greater than 200M, 300mb + is recommended. If it is not, please try to modify it in WindowsPE environment. This may cause you to lose the Windows system boot and disk data. Please prepare for backup.
      After formatting the partition successfully, close the disk tool and select install, you will find the partition you installed, and follow the interface prompts. When the installation reaches a certain progress, it will restart. When restarting, select F9, enter from the boot U disk, select the disk partition where you installed macOS (no longer the U disk installation), the installation will continue, and it may restart 2 ~ 3 times Every time, you need F9 to select the boot. After entering the installation interface, except for the first installation, select the U disk, and then select the disk installation partition. Eventually you will enter the settings interface. After following the interface prompts, you will enter the macOS system interface. Remember the system password and turn off the Find my mac option.  
      Post install:
       
      After the installation is complete, you need to hang the EFI partition of the disk, copy the EFI file of the U disk to the EFI partition of the disk, so that you can directly use the disk to boot, otherwise you need to select the U disk to boot each time. The mount tool can choose cloverconfigurator. If after copying the EFI file to the disk, the computer cannot recognize your clover boot, you can use the custom boot option of bios: set the custom boot path to \efi\clover\cloverx64.efi, and set it as the first boot, Use bootice or easyUEFI to increase the clover boot option under Windows and set it as the first boot. If you do not have a wireless network card available temporarily, you can use the USB binding function of your Android phone to share the network. This may require the HoRndis driver. It is not recommended to use a US wireless network card. If you need Windows or Linux, you can install it normally. Be careful not to let Windows overwrite your boot files.  
      For other uses of macOS and brew, please pay attention to forums and other communities. Hackintosh is just the beginning.
       
      Finally, I would like to thank rehabman, vit9696 and others who contributed to Hackintosh. I also thank Cwen for his efforts to modify files and hardware tests. I hope that Hackintosh will be eternal.
       
      Please comply with the laws and regulations of your country or region. My description may not be clear or professional, but I think it is necessary. I think the existence of Hackintosh is everyone's technical hobby and experience macOS, not as a substitute for macOS cheap hardware.

      EFI_8x70_5103_W7170m_20200116 .zip
    • By StarFighter_77
      I built this hack years ago now. Started with Lion, now on El Cap. I want to update now to High Sierra.

      I think I messed up my Clover when I downloaded the update .pkg and just installed it without taking my time or customizing the install. Was on Clover r3423, now I think I'm on r5104

      I've been searching and reading this site and others for a few days before making this thread, but I need help compiling what I've learned to get my system running correctly again and ready to update to High Sierra. Then, eventually, I want to update my graphics card, switch to UEFI (if necessary) and update to Mojave.

      I couldn't get system to boot. Could get to Clover and all the options, except the Shell... I hit enter on the Shell and I get black screen and nothing.

      The only way I got it to boot was to add -v to boot args, and change smbios from 14,2 to 13,2. Not sure why that worked still. Also I'm running two monitors, but I can only now run one of them off the Intel 3000 Graphics and the second one off my GFX Card.

      So now I'm afraid to shut down or reboot.... I could really use some help with Clover.

      I'm pretty sure my config file in Clover is not right. Also, some of the files in my Clover backups are not in the new Clover install. (2.5k 5104)

      If someone could please take a look at the files I've attached and help me sort this out, I would be grateful. Thank you, Thank you, Thank you.

      I've attached
      - The last boot log
      - The current Clover folder from the EFI partition after performing Clover update. (.zip)
      - The Clover backup that was working before Clover update (.zip)
      - Library/Extensions Folder (screen shot)
      - System/Library/Extensions Folder (.zip)

      Here is my current hardware:

      Mobo: GIGABYTE GA-Z68MX-UD2H-B3

      CPU: Intel Core i7-2600K

      GPU: GIGABYTE ATI Radeon HD6870 1GB DDR5 2DVI/HDMI/2x

      RAM: Corsair Vengeance Blue 16 GB DDR3 SDRAM Dual Channel Memory Kit CMZ16GX3M4A1600?C9B

      HD0 (for OS and Apps): OCZ Technology 120 GB Vertex Series SATA II Solid State Drive

      HD1 (file storage, Adobe scratch disk): Samsung 1 TB Spinpoint 7200 RPM 32MB Cache SATA

      BURNER: LG CD/DVD Burner Model GH22NS50

      CPU COOLER: Corsair Cooling Hydro Series H50 All in One High-performanc?e CPU Cooler CWCH50-1

      P/S: Antec CP-850 850 Watt CPX Power Supply Unit

      CASE: Antec Performance One P183 V3 Case
      CLOVER.zip
      CloverBackup.zip
      bootlog.txt

      S_L_E.zip
×