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] 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); ++ } + } + +