diff --git a/CHANGELOG.md b/CHANGELOG.md index b5a2c047d..963d26f23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ - Resolve TeraScale 2 HDCP kernel panic - Resolve specific Wallpaper locking up on non-Metal GPUs running macOS Sequoia - Removes unsupported Metal-based wallpaper (Macintosh Wallpaper) +- Resolve firmware upload incompatibilities on pre-2012 Macs with 2012+ Airport cards + - Thanks @ausdauersportler for the catch! - Increment binaries: - PatcherSupportPkg 1.8.3 - release diff --git a/opencore_legacy_patcher/efi_builder/bluetooth.py b/opencore_legacy_patcher/efi_builder/bluetooth.py index 41c92a360..172e3eacf 100644 --- a/opencore_legacy_patcher/efi_builder/bluetooth.py +++ b/opencore_legacy_patcher/efi_builder/bluetooth.py @@ -12,6 +12,7 @@ from .. import constants from ..detections import device_probe from ..datasets import ( + cpu_data, smbios_data, bluetooth_data ) @@ -44,19 +45,26 @@ class BuildBluetooth: self._prebuilt_assumption() + def _bluetooth_firmware_incompatibility_workaround(self) -> None: + """ + For Mac firmwares that are unable to perform firmware uploads. + Namely Macs with BCM2070 and BCM2046 chipsets, as well as pre-2012 Macs with upgraded chipsets. + """ + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000") + self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00") + self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"] + + def _on_model(self) -> None: """ On-Model Hardware Detection Handling """ - if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]: logging.info("- Fixing Legacy Bluetooth for macOS Monterey") support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path) self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr" - self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000") - self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00") - self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"] + self._bluetooth_firmware_incompatibility_workaround() elif self.computer.bluetooth_chipset == "BRCM20702 Hub": # BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets # Note Monterey only natively supports BRCM20702 v2 (found with BCM94360) @@ -65,6 +73,13 @@ class BuildBluetooth: if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360: logging.info("- Fixing Legacy Bluetooth for macOS Monterey") support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) + + # Older Mac firmwares (pre-2012) don't support the new chipsets correctly (regardless of WiFi card) + if self.model in smbios_data.smbios_dictionary: + if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.ivy_bridge.value: + logging.info("- Fixing Legacy Bluetooth for macOS Monterey") + support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) + self._bluetooth_firmware_incompatibility_workaround() elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub": logging.info("- Detected 3rd Party Bluetooth Chipset") support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) @@ -87,7 +102,5 @@ class BuildBluetooth: support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path) if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value: self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr" - self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000") - self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00") - self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"] + self._bluetooth_firmware_incompatibility_workaround() support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path) \ No newline at end of file