From 1da93b1ca0d2238bbc698370bb3ef5e6b1b04f5f Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 10:06:59 -0600 Subject: [PATCH 1/7] Fix Monterey Bluetooth --- Resources/Build.py | 8 +++ Resources/Constants.py | 15 +++++- Resources/ModelArray.py | 47 ++++++++++++++++++ Resources/Utilities.py | 8 +-- payloads/Config/config.plist | 20 +++++++- .../Bluetooth/BlueToolFixup-2046-v2.6.1.zip | Bin 0 -> 10702 bytes .../Kexts/Bluetooth/BlueToolFixup-2046.patch | 26 ++++++++++ .../Bluetooth/BlueToolFixup-2070-v2.6.1.zip | Bin 0 -> 10698 bytes .../Kexts/Bluetooth/BlueToolFixup-2070.patch | 26 ++++++++++ 9 files changed, 145 insertions(+), 5 deletions(-) create mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip create mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2046.patch create mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2070-v2.6.1.zip create mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch diff --git a/Resources/Build.py b/Resources/Build.py index f61a45564..d8daed90b 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -692,6 +692,14 @@ class BuildOpenCore: # Note this function was added in 11.3 (20E232, 20.4), older builds do not support this (ie. 11.2.3) print("- Allowing FileVault on Root Patched systems") self.get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.filesystems.apfs")["Enabled"] = True + + if self.model in ModelArray.Bluetooth_BRCM2070: + print("- Enabling Bluetooth BRCM2070 for macOS Monterey") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) + elif self.model in ModelArray.Bluetooth_BRCM2046: + print("- Enabling Bluetooth BRCM2046 for macOS Monterey") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) + def set_smbios(self): diff --git a/Resources/Constants.py b/Resources/Constants.py index a45f8f6a2..4a21e5cea 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -34,6 +34,7 @@ class Constants: self.featureunlock_version = "1.0.3" # FeatureUnlock self.debugenhancer_version = "1.0.4" # DebugEnhancer self.cpufriend_version = "1.2.4" # CPUFriend + self.bluetool_version = "2.6.1" # BlueToolFixup ## Apple ## https://www.apple.com @@ -341,6 +342,18 @@ class Constants: def plist_folder_path(self): return self.payload_kexts_path / Path("Plists") + @property + def bluetooth_folder_path(self): + return self.payload_kexts_path / Path("Bluetooth") + + @property + def brcm2046_path(self): + return self.bluetooth_folder_path / Path(f"BlueToolFixup-2046-v{self.bluetool_version}.zip") + + @property + def brcm2070_path(self): + return self.bluetooth_folder_path / Path(f"BlueToolFixup-2070-v{self.bluetool_version}.zip") + @property def platform_plugin_plist_path(self): return self.plist_folder_path / Path("PlatformPlugin") @@ -633,7 +646,7 @@ class Constants: "j215ap", # MacBookPro16,4 "j185ap", # iMac20,1 "j185fap", # iMac20,2 - #"x86legacy", # non-T2 Macs/VMs, Monterey's boot.efi enforces this on all Macs + # "x86legacy", # non-T2 Macs/VMs, Monterey's boot.efi enforces this on all Macs ] sandy_board_id = [ diff --git a/Resources/ModelArray.py b/Resources/ModelArray.py index 688990bd1..4c1c0be42 100644 --- a/Resources/ModelArray.py +++ b/Resources/ModelArray.py @@ -1165,3 +1165,50 @@ dGPU_switch = [ "MacBookPro16,1", "MacBookPro16,4", ] + +Bluetooth_BRCM2046 = [ + "MacBook4,1", + "MacBook5,1", + "MacBook5,2", + "MacBookAir2,1", + "MacBookAir3,1", + "MacBookAir3,2", + "MacBookPro4,1", + "MacBookPro5,1", + "MacBookPro5,2", + "MacBookPro5,3", + "MacBookPro5,4", + "MacBookPro5,5", + "MacBookPro7,1", + "Macmini3,1", + "iMac7,1", + "iMac8,1", + "iMac9,1", + "iMac10,1", + "iMac11,1", + "iMac11,2", + "iMac11,3", + "iMac12,1", + "iMac12,2", + "MacPro3,1", + "MacPro4,1", + "MacPro5,1", + "XServer2,1", + "XServer3,1", +] + +Bluetooth_BRCM2070 = [ + "MacBook6,1", + "MacBook7,1", + "MacBookAir4,1", + "MacBookAir4,2", + "MacBookPro6,1", + "MacBookPro6,2", + "MacBookPro8,1", + "MacBookPro8,2", + "MacBookPro8,3", + "Macmini4,1", + "Macmini5,1", + "Macmini5,2", + "Macmini5,3", +] diff --git a/Resources/Utilities.py b/Resources/Utilities.py index ab5776fe1..6b15e0b9d 100644 --- a/Resources/Utilities.py +++ b/Resources/Utilities.py @@ -135,6 +135,7 @@ def amfi_status(): return False return True + def check_oclp_boot(): if get_nvram("OCLP-Version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=False): return True @@ -244,10 +245,11 @@ def download_file(link, location): chunk = file.read(1024 * 1024 * 16) return checksum -def enable_apfs(fw_feature, fw_mask): - fw_feature |= 2**19 - fw_mask |= 2**19 +def enable_apfs(fw_feature, fw_mask): + fw_feature |= 2 ** 19 + fw_mask |= 2 ** 19 + return fw_feature, fw_mask # def menu(title, prompt, menu_options, add_quit=True, auto_number=False, in_between=[], top_level=False): diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist index 3c03d2685..1a29c5a78 100644 --- a/payloads/Config/config.plist +++ b/payloads/Config/config.plist @@ -948,7 +948,25 @@ MaxKernel MinKernel - 20.4.0 + 16.0.0 + PlistPath + Contents/Info.plist + + + Arch + x86_64 + BundlePath + BlueToolFixup.kext + Comment + Fix Monterey Bluetooth + Enabled + + ExecutablePath + Contents/MacOS/BlueToolFixup + MaxKernel + + MinKernel + 21.0.0 PlistPath Contents/Info.plist diff --git a/payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip b/payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..355f0c70af3e4876554174cee90ee7d64bd8090d GIT binary patch literal 10702 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 literal 0 HcmV?d00001 diff --git a/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch b/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch new file mode 100644 index 000000000..cd0dd1970 --- /dev/null +++ b/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch @@ -0,0 +1,26 @@ +diff --git a/BrcmPatchRAM/BlueToolFixup.cpp b/BrcmPatchRAM/BlueToolFixup.cpp +index 0fa891a..6a9d2f3 100644 +--- a/BrcmPatchRAM/BlueToolFixup.cpp ++++ b/BrcmPatchRAM/BlueToolFixup.cpp +@@ -50,7 +50,11 @@ bool BlueToolFixup::start(IOService *provider) { + static const uint8_t kSkipUpdateFilePathOriginal[] = "/etc/bluetool/SkipBluetoothAutomaticFirmwareUpdate"; + static const uint8_t kSkipUpdateFilePathPatched[] = "/System/Library/CoreServices/boot.efi"; + ++static const uint8_t kBluetoothUSBNameOriginal[] = "Bluetooth USB Host Controller"; ++static const uint8_t kBluetoothUSBNamePatched[] = "BRCM2070 Hub Host Controller"; ++ + static const char *blueToolPath = "/usr/sbin/BlueTool"; ++static const char *bluetoothdPath = "/usr/sbin/bluetoothd"; + + static mach_vm_address_t orig_cs_validate {}; + +@@ -74,6 +78,9 @@ static void patched_cs_validate_page(vnode_t vp, memory_object_t pager, memory_o + if (vn_getpath(vp, path, &pathlen) == 0 && UNLIKELY(strcmp(path, blueToolPath) == 0)) { + searchAndPatch(data, PAGE_SIZE, path, kSkipUpdateFilePathOriginal, kSkipUpdateFilePathPatched); + } ++ if (vn_getpath(vp, path, &pathlen) == 0 && UNLIKELY(strcmp(path, bluetoothdPath) == 0)) { ++ searchAndPatch(data, PAGE_SIZE, path, kBluetoothUSBNameOriginal, kBluetoothUSBNamePatched); ++ } + } + + From 986878055ffb17732a29974201e52cc71fbefa04 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 12:21:14 -0600 Subject: [PATCH 2/7] Add basic hardware detection --- Resources/Build.py | 25 +++++++++++++++---------- Resources/device_probe.py | 11 +++++++++++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Resources/Build.py b/Resources/Build.py index d8daed90b..28f75576f 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -582,6 +582,21 @@ class BuildOpenCore: self.config["DeviceProperties"]["Add"][tb_device_path] = {"class-code": binascii.unhexlify("FFFFFFFF"), "device-id": binascii.unhexlify("FFFF0000")} + # Bluetooth Detection + if not self.constants.custom_model and self.computer.bluetooth: + if self.computer.bluetooth == "BRCM2070 Hub": + print("- Enabling Bluetooth BRCM2070 for macOS Monterey") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) + elif self.computer.bluetooth == "BRCM2046 Hub": + print("- Enabling Bluetooth BRCM2046 for macOS Mojave") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) + elif self.model in ModelArray.Bluetooth_BRCM2070: + print("- Enabling Bluetooth BRCM2070 for macOS Monterey") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) + elif self.model in ModelArray.Bluetooth_BRCM2046: + print("- Enabling Bluetooth BRCM2046 for macOS Monterey") + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) + # Add XhciDxe if firmware doesn't have XHCI controller support and XCHI controller detected # TODO: Fix XhciDxe to work on pre UEFI 2.0 Macs # Ref: https://github.com/acidanthera/bugtracker/issues/1663 @@ -692,15 +707,6 @@ class BuildOpenCore: # Note this function was added in 11.3 (20E232, 20.4), older builds do not support this (ie. 11.2.3) print("- Allowing FileVault on Root Patched systems") self.get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.filesystems.apfs")["Enabled"] = True - - if self.model in ModelArray.Bluetooth_BRCM2070: - print("- Enabling Bluetooth BRCM2070 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) - elif self.model in ModelArray.Bluetooth_BRCM2046: - print("- Enabling Bluetooth BRCM2046 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) - - def set_smbios(self): spoofed_model = self.model @@ -851,7 +857,6 @@ class BuildOpenCore: print(f"- Could not find {efi_type}: {bundle_path}!") raise IndexError return efi_binary - def enable_kext(self, kext_name, kext_version, kext_path, check=False): kext = self.get_kext_by_bundle_path(kext_name) diff --git a/Resources/device_probe.py b/Resources/device_probe.py index 54f98dcf2..73d49e477 100644 --- a/Resources/device_probe.py +++ b/Resources/device_probe.py @@ -313,6 +313,7 @@ class Computer: cpu: Optional[CPU] = None oclp_version: Optional[str] = None opencore_version: Optional[str] = None + bluetooth_chipset: Optional[str] = None @staticmethod def probe(): @@ -324,6 +325,7 @@ class Computer: computer.storage_probe() computer.smbios_probe() computer.cpu_probe() + computer.bluetooth() return computer def gpu_probe(self): @@ -437,3 +439,12 @@ class Computer: subprocess.run("sysctl machdep.cpu.brand_string".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip(), subprocess.run("sysctl machdep.cpu.features".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip().split(" "), ) + + def bluetooth(self): + usb_data: str = subprocess.run("system_profiler SPUSBDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode() + if "BRCM2070 Hub" in usb_data: + self.bluetooth_chipset = "BRCM2070 Hub" + elif "BRCM2046 Hub" in usb_data: + self.bluetooth_chipset = "BRCM2046 Hub" + elif "Bluetooth": + self.bluetooth_chipset = "Generic" \ No newline at end of file From f78e8edf4ea742c619d6093968f6a28963300cec Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 12:21:52 -0600 Subject: [PATCH 3/7] Fix typo --- Resources/Build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Build.py b/Resources/Build.py index 28f75576f..ebbdffa63 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -588,7 +588,7 @@ class BuildOpenCore: print("- Enabling Bluetooth BRCM2070 for macOS Monterey") self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) elif self.computer.bluetooth == "BRCM2046 Hub": - print("- Enabling Bluetooth BRCM2046 for macOS Mojave") + print("- Enabling Bluetooth BRCM2046 for macOS Monterey") self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) elif self.model in ModelArray.Bluetooth_BRCM2070: print("- Enabling Bluetooth BRCM2070 for macOS Monterey") From 0e22a9fb00332c69a348a1187d061b68978efd9a Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 14:33:55 -0600 Subject: [PATCH 4/7] Fix ModelArray --- Resources/ModelArray.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Resources/ModelArray.py b/Resources/ModelArray.py index 4c1c0be42..32e4de0be 100644 --- a/Resources/ModelArray.py +++ b/Resources/ModelArray.py @@ -1146,8 +1146,8 @@ Missing_USB_Map = [ "iMac12,2", "MacPro3,1", "MacPro4,1", - "XServer2,1", - "XServer3,1", + "XServe2,1", + "XServe3,1", ] dGPU_switch = [ @@ -1181,7 +1181,6 @@ Bluetooth_BRCM2046 = [ "MacBookPro5,5", "MacBookPro7,1", "Macmini3,1", - "iMac7,1", "iMac8,1", "iMac9,1", "iMac10,1", @@ -1190,11 +1189,8 @@ Bluetooth_BRCM2046 = [ "iMac11,3", "iMac12,1", "iMac12,2", - "MacPro3,1", "MacPro4,1", "MacPro5,1", - "XServer2,1", - "XServer3,1", ] Bluetooth_BRCM2070 = [ From 438ae23ee7b45812cec3fbd236dee246fb49b678 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 15:43:04 -0600 Subject: [PATCH 5/7] Rework BlueToolFixup patch --- Resources/Build.py | 12 +++-- Resources/Constants.py | 16 ++----- .../Acidanthera/BlueToolFixup-v2.6.1.zip | Bin 0 -> 10722 bytes .../Kexts/Acidanthera/BlueToolFixup.patch | 42 ++++++++++++++++++ .../Bluetooth/BlueToolFixup-2046-v2.6.1.zip | Bin 10702 -> 0 bytes .../Kexts/Bluetooth/BlueToolFixup-2046.patch | 26 ----------- .../Bluetooth/BlueToolFixup-2070-v2.6.1.zip | Bin 10698 -> 0 bytes .../Kexts/Bluetooth/BlueToolFixup-2070.patch | 26 ----------- 8 files changed, 54 insertions(+), 68 deletions(-) create mode 100644 payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip create mode 100644 payloads/Kexts/Acidanthera/BlueToolFixup.patch delete mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip delete mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2046.patch delete mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2070-v2.6.1.zip delete mode 100644 payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch diff --git a/Resources/Build.py b/Resources/Build.py index ebbdffa63..97e647166 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -586,16 +586,20 @@ class BuildOpenCore: if not self.constants.custom_model and self.computer.bluetooth: if self.computer.bluetooth == "BRCM2070 Hub": print("- Enabling Bluetooth BRCM2070 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2070_patch" + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) elif self.computer.bluetooth == "BRCM2046 Hub": print("- Enabling Bluetooth BRCM2046 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2046_patch" + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) elif self.model in ModelArray.Bluetooth_BRCM2070: print("- Enabling Bluetooth BRCM2070 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2070_path) + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2070_patch" + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) elif self.model in ModelArray.Bluetooth_BRCM2046: print("- Enabling Bluetooth BRCM2046 for macOS Monterey") - self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.brcm2046_path) + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2046_patch" + self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) # Add XhciDxe if firmware doesn't have XHCI controller support and XCHI controller detected # TODO: Fix XhciDxe to work on pre UEFI 2.0 Macs diff --git a/Resources/Constants.py b/Resources/Constants.py index 4a21e5cea..4702d3942 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -326,6 +326,10 @@ class Constants: def debugenhancer_path(self): return self.payload_kexts_path / Path(f"Acidanthera/DebugEnhancer-v{self.debugenhancer_version}.zip") + @property + def bluetool_path(self): + return self.payload_kexts_path / Path(f"Acidanthera/BlueToolFixup-v{self.bluetool_version}.zip") + @property def innie_path(self): return self.payload_kexts_path / Path(f"Misc/Innie-v{self.innie_version}.zip") @@ -342,18 +346,6 @@ class Constants: def plist_folder_path(self): return self.payload_kexts_path / Path("Plists") - @property - def bluetooth_folder_path(self): - return self.payload_kexts_path / Path("Bluetooth") - - @property - def brcm2046_path(self): - return self.bluetooth_folder_path / Path(f"BlueToolFixup-2046-v{self.bluetool_version}.zip") - - @property - def brcm2070_path(self): - return self.bluetooth_folder_path / Path(f"BlueToolFixup-2070-v{self.bluetool_version}.zip") - @property def platform_plugin_plist_path(self): return self.plist_folder_path / Path("PlatformPlugin") diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip b/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..efd4f8842109432041edc7bd0976b5c8b6b01efd GIT binary patch literal 10722 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
  • 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 literal 0 HcmV?d00001 diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup.patch b/payloads/Kexts/Acidanthera/BlueToolFixup.patch new file mode 100644 index 000000000..28c807cad --- /dev/null +++ b/payloads/Kexts/Acidanthera/BlueToolFixup.patch @@ -0,0 +1,42 @@ +diff --git a/BrcmPatchRAM/BlueToolFixup.cpp b/BrcmPatchRAM/BlueToolFixup.cpp +index 0fa891a..819eb3f 100644 +--- a/BrcmPatchRAM/BlueToolFixup.cpp ++++ b/BrcmPatchRAM/BlueToolFixup.cpp +@@ -50,7 +50,15 @@ bool BlueToolFixup::start(IOService *provider) { + static const uint8_t kSkipUpdateFilePathOriginal[] = "/etc/bluetool/SkipBluetoothAutomaticFirmwareUpdate"; + static const uint8_t kSkipUpdateFilePathPatched[] = "/System/Library/CoreServices/boot.efi"; + ++static const uint8_t kBluetoothUSBNameOriginal[] = "Bluetooth USB Host Controller"; ++static const uint8_t kBluetoothUSBNamePatched2070[] = "BRCM2070 Hub Host Controller"; ++static const uint8_t kBluetoothUSBNamePatched2046[] = "BRCM2046 Hub Host Controller"; ++ + static const char *blueToolPath = "/usr/sbin/BlueTool"; ++static const char *bluetoothdPath = "/usr/sbin/bluetoothd"; ++ ++static const char brcm2046_patch = checkKernelArgument("-brcm2046_patch"); ++static const char brcm2070_patch = checkKernelArgument("-brcm2070_patch"); + + static mach_vm_address_t orig_cs_validate {}; + +@@ -71,8 +79,19 @@ static void patched_cs_validate_page(vnode_t vp, memory_object_t pager, memory_o + char path[PATH_MAX]; + int pathlen = PATH_MAX; + FunctionCast(patched_cs_validate_page, orig_cs_validate)(vp, pager, page_offset, data, validated_p, tainted_p, nx_p); +- if (vn_getpath(vp, path, &pathlen) == 0 && UNLIKELY(strcmp(path, blueToolPath) == 0)) { +- searchAndPatch(data, PAGE_SIZE, path, kSkipUpdateFilePathOriginal, kSkipUpdateFilePathPatched); ++ if (vn_getpath(vp, path, &pathlen) == 0) { ++ if (UNLIKELY(strcmp(path, blueToolPath) == 0)) { ++ searchAndPatch(data, PAGE_SIZE, path, kSkipUpdateFilePathOriginal, kSkipUpdateFilePathPatched); ++ } ++ if (UNLIKELY(strcmp(path, bluetoothdPath) == 0)) { ++ if (brcm2046_patch) { ++ DBGLOG(MODULE_SHORT, "Patching BRCM2046 Hub into bluetoothd"); ++ searchAndPatch(data, PAGE_SIZE, path, kBluetoothUSBNameOriginal, kBluetoothUSBNamePatched2046); ++ } else if (brcm2070_patch) { ++ DBGLOG(MODULE_SHORT, "Patching BRCM2070 Hub into bluetoothd"); ++ searchAndPatch(data, PAGE_SIZE, path, kBluetoothUSBNameOriginal, kBluetoothUSBNamePatched2070); ++ } ++ } + } + } + diff --git a/payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip b/payloads/Kexts/Bluetooth/BlueToolFixup-2046-v2.6.1.zip deleted file mode 100644 index 355f0c70af3e4876554174cee90ee7d64bd8090d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10702 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 diff --git a/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch b/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch deleted file mode 100644 index cd0dd1970..000000000 --- a/payloads/Kexts/Bluetooth/BlueToolFixup-2070.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/BrcmPatchRAM/BlueToolFixup.cpp b/BrcmPatchRAM/BlueToolFixup.cpp -index 0fa891a..6a9d2f3 100644 ---- a/BrcmPatchRAM/BlueToolFixup.cpp -+++ b/BrcmPatchRAM/BlueToolFixup.cpp -@@ -50,7 +50,11 @@ bool BlueToolFixup::start(IOService *provider) { - static const uint8_t kSkipUpdateFilePathOriginal[] = "/etc/bluetool/SkipBluetoothAutomaticFirmwareUpdate"; - static const uint8_t kSkipUpdateFilePathPatched[] = "/System/Library/CoreServices/boot.efi"; - -+static const uint8_t kBluetoothUSBNameOriginal[] = "Bluetooth USB Host Controller"; -+static const uint8_t kBluetoothUSBNamePatched[] = "BRCM2070 Hub Host Controller"; -+ - static const char *blueToolPath = "/usr/sbin/BlueTool"; -+static const char *bluetoothdPath = "/usr/sbin/bluetoothd"; - - static mach_vm_address_t orig_cs_validate {}; - -@@ -74,6 +78,9 @@ static void patched_cs_validate_page(vnode_t vp, memory_object_t pager, memory_o - if (vn_getpath(vp, path, &pathlen) == 0 && UNLIKELY(strcmp(path, blueToolPath) == 0)) { - searchAndPatch(data, PAGE_SIZE, path, kSkipUpdateFilePathOriginal, kSkipUpdateFilePathPatched); - } -+ if (vn_getpath(vp, path, &pathlen) == 0 && UNLIKELY(strcmp(path, bluetoothdPath) == 0)) { -+ searchAndPatch(data, PAGE_SIZE, path, kBluetoothUSBNameOriginal, kBluetoothUSBNamePatched); -+ } - } - - From 98b78246198dd9f55ff0a045d6e8a9ea43a61b78 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 19:14:06 -0600 Subject: [PATCH 6/7] Fix typo --- Resources/device_probe.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/device_probe.py b/Resources/device_probe.py index 73d49e477..aff61baa8 100644 --- a/Resources/device_probe.py +++ b/Resources/device_probe.py @@ -325,7 +325,7 @@ class Computer: computer.storage_probe() computer.smbios_probe() computer.cpu_probe() - computer.bluetooth() + computer.bluetooth_probe() return computer def gpu_probe(self): @@ -440,11 +440,11 @@ class Computer: subprocess.run("sysctl machdep.cpu.features".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip().split(" "), ) - def bluetooth(self): + def bluetooth_probe(self): usb_data: str = subprocess.run("system_profiler SPUSBDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode() if "BRCM2070 Hub" in usb_data: self.bluetooth_chipset = "BRCM2070 Hub" elif "BRCM2046 Hub" in usb_data: self.bluetooth_chipset = "BRCM2046 Hub" elif "Bluetooth": - self.bluetooth_chipset = "Generic" \ No newline at end of file + self.bluetooth_chipset = "Generic" From 18805c8e7869ad1c1be7990cbfc99109ed920580 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk <48863253+khronokernel@users.noreply.github.com> Date: Thu, 16 Sep 2021 19:25:42 -0600 Subject: [PATCH 7/7] Fix typo --- Resources/Build.py | 6 +++--- Resources/device_probe.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Build.py b/Resources/Build.py index 97e647166..a860bfee0 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -583,12 +583,12 @@ class BuildOpenCore: self.config["DeviceProperties"]["Add"][tb_device_path] = {"class-code": binascii.unhexlify("FFFFFFFF"), "device-id": binascii.unhexlify("FFFF0000")} # Bluetooth Detection - if not self.constants.custom_model and self.computer.bluetooth: - if self.computer.bluetooth == "BRCM2070 Hub": + if not self.constants.custom_model and self.computer.bluetooth_chipset: + if self.computer.bluetooth_chipset == "BRCM2070 Hub": print("- Enabling Bluetooth BRCM2070 for macOS Monterey") self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2070_patch" self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) - elif self.computer.bluetooth == "BRCM2046 Hub": + elif self.computer.bluetooth_chipset == "BRCM2046 Hub": print("- Enabling Bluetooth BRCM2046 for macOS Monterey") self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2046_patch" self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) diff --git a/Resources/device_probe.py b/Resources/device_probe.py index 73d49e477..aff61baa8 100644 --- a/Resources/device_probe.py +++ b/Resources/device_probe.py @@ -325,7 +325,7 @@ class Computer: computer.storage_probe() computer.smbios_probe() computer.cpu_probe() - computer.bluetooth() + computer.bluetooth_probe() return computer def gpu_probe(self): @@ -440,11 +440,11 @@ class Computer: subprocess.run("sysctl machdep.cpu.features".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip().split(" "), ) - def bluetooth(self): + def bluetooth_probe(self): usb_data: str = subprocess.run("system_profiler SPUSBDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode() if "BRCM2070 Hub" in usb_data: self.bluetooth_chipset = "BRCM2070 Hub" elif "BRCM2046 Hub" in usb_data: self.bluetooth_chipset = "BRCM2046 Hub" elif "Bluetooth": - self.bluetooth_chipset = "Generic" \ No newline at end of file + self.bluetooth_chipset = "Generic"