diff --git a/Resources/Build.py b/Resources/Build.py index 06446da71..d1628dd74 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -588,22 +588,14 @@ class BuildOpenCore: # Bluetooth Detection 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" + if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]: + print("- Fixing Legacy Bluetooth for macOS Monterey") self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) - 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) - elif self.model in ModelArray.Bluetooth_BRCM2070: - 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.model in ModelArray.Bluetooth_BRCM2046: - print("- Enabling Bluetooth BRCM2046 for macOS Monterey") - self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -brcm2046_patch" + self.enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path) + elif self.model in ModelArray.Bluetooth_BRCM2070 or self.model in ModelArray.Bluetooth_BRCM2046: + print("- Fixing Legacy Bluetooth for macOS Monterey") self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) + self.enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_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 77616b9bd..0bb8c00e4 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -34,7 +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 + self.bluetool_version = "2.6.0" # BlueToolFixup ## Apple ## https://www.apple.com @@ -56,6 +56,7 @@ class Constants: self.backlight_injector_version = "1.0.0" # BacklightInjector self.smcspoof_version = "1.0.0" # SMC-Spoof self.mce_version = "1.0.0" # AppleMCEReporterDisabler + self.btspoof_version = "1.0.0" # Bluetooth-Spoof ## Syncretic ## https://forums.macrumors.com/members/syncretic.1173816/ @@ -314,6 +315,10 @@ class Constants: def smcspoof_path(self): return self.payload_kexts_path / Path(f"Misc/SMC-Spoof-v{self.smcspoof_version}.zip") + @property + def btspoof_path(self): + return self.payload_kexts_path / Path(f"Misc/Bluetooth-Spoof-v{self.btspoof_version}.zip") + @property def nvmefix_path(self): return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}.zip") diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist index d4b92bec8..403430e35 100644 --- a/payloads/Config/config.plist +++ b/payloads/Config/config.plist @@ -610,6 +610,24 @@ PlistPath Contents/Info.plist + + Arch + x86_64 + Comment + Bluetooth Patch for BRCM2046 and BRCM2070 + Enabled + + MaxKernel + + MinKernel + 21.0.0 + BundlePath + Bluetooth-Spoof.kext + ExecutablePath + + PlistPath + Contents/Info.plist + Arch x86_64 diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip b/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip new file mode 100644 index 000000000..d56c4bf30 Binary files /dev/null and b/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip differ diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip b/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip deleted file mode 100644 index efd4f8842..000000000 Binary files a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip and /dev/null differ diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup.patch b/payloads/Kexts/Acidanthera/BlueToolFixup.patch deleted file mode 100644 index 28c807cad..000000000 --- a/payloads/Kexts/Acidanthera/BlueToolFixup.patch +++ /dev/null @@ -1,42 +0,0 @@ -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/Misc/Bluetooth-Spoof-v1.0.0.zip b/payloads/Kexts/Misc/Bluetooth-Spoof-v1.0.0.zip new file mode 100644 index 000000000..539c52e55 Binary files /dev/null and b/payloads/Kexts/Misc/Bluetooth-Spoof-v1.0.0.zip differ