diff --git a/Scripts/compatibility_checker.py b/Scripts/compatibility_checker.py index f38d2d7..40c7827 100644 --- a/Scripts/compatibility_checker.py +++ b/Scripts/compatibility_checker.py @@ -243,8 +243,10 @@ class CompatibilityChecker: ocl_patched_min_version = "23.0.0" elif device_index < 12: max_version = "17.99.99" - elif device_id in pci_data.AtherosWiFiIDs: + elif device_id in pci_data.AtherosWiFiIDs[:8]: max_version = "17.99.99" + elif device_id in pci_data.AtherosWiFiIDs[8:]: + max_version = "20.99.99" elif device_id in pci_data.IntelI22XIDs: min_version = "19.0.0" elif device_id in pci_data.AquantiaAqtionIDs: @@ -252,7 +254,7 @@ class CompatibilityChecker: if device_id in pci_data.WirelessCardIDs: if device_id == primary_wifi_device: - if not device_id in pci_data.IntelWiFiIDs: + if not device_id in pci_data.IntelWiFiIDs and not device_id in pci_data.AtherosWiFiIDs[8:]: device_props["OCLP Compatibility"] = (ocl_patched_max_version, ocl_patched_min_version) self.ocl_patched_macos_version = (ocl_patched_max_version, self.ocl_patched_macos_version[-1] if self.ocl_patched_macos_version and self.utils.parse_darwin_version(self.ocl_patched_macos_version[-1]) < self.utils.parse_darwin_version(device_props.get("OCLP Compatibility")[-1]) else device_props.get("OCLP Compatibility")[-1]) device_props["Compatibility"] = (max_version, min_version) @@ -290,6 +292,23 @@ class CompatibilityChecker: if all(controller_props.get("Compatibility") == (None, None) for controller_name, controller_props in self.hardware_report.get("Storage Controllers", {}).items()): self.utils.request_input("\n\nNo compatible storage for macOS was found!") self.utils.exit_program() + + def check_bluetooth_compatibility(self): + for bluetooth_name, bluetooth_props in self.hardware_report.get("Bluetooth", {}).items(): + device_id = bluetooth_props.get("Device ID") + + max_version = os_data.get_latest_darwin_version() + min_version = os_data.get_lowest_darwin_version() + + if device_id in pci_data.BroadcomBluetoothIDs + pci_data.IntelBluetoothIDs + pci_data.BluetoothDongleIDs: + pass + elif device_id in pci_data.AtherosBluetoothIDs: + max_version = "20.99.99" + else: + max_version = min_version = None + + bluetooth_props["Compatibility"] = (max_version, min_version) + print("{}- {}: {}".format(" "*3, bluetooth_name, self.show_macos_compatibility(bluetooth_props.get("Compatibility")))) def check_sd_controller_compatibility(self): for controller_name, controller_props in self.hardware_report.get("SD Controller", {}).items(): @@ -305,7 +324,7 @@ class CompatibilityChecker: needs_oclp = False for device_type, devices in self.hardware_report.items(): - if device_type in ("Motherboard", "BIOS", "CPU", "USB Controllers", "Input", "Bluetooth", "System Devices"): + if device_type in ("Motherboard", "BIOS", "CPU", "USB Controllers", "Input", "System Devices"): new_hardware_report[device_type] = devices continue @@ -350,6 +369,7 @@ class CompatibilityChecker: ('Biometric', self.check_biometric_compatibility), ('Network', self.check_network_compatibility), ('Storage Controllers', self.check_storage_compatibility), + ('Bluetooth', self.check_bluetooth_compatibility), ('SD Controller', self.check_sd_controller_compatibility) ] diff --git a/Scripts/config_prodigy.py b/Scripts/config_prodigy.py index 2101853..7df547e 100644 --- a/Scripts/config_prodigy.py +++ b/Scripts/config_prodigy.py @@ -308,7 +308,12 @@ class ConfigProdigy: for network_name, network_props in network_items: device_id = network_props.get("Device ID") - if device_id in pci_data.BroadcomWiFiIDs[:18]: + if device_id in pci_data.AtherosWiFiIDs[6:8]: + add_device_property(network_props.get("PCI Path"), { + "IOName": "pci168c,2a", + "device-id": self.utils.hex_to_bytes("2A000000") + }) + elif device_id in pci_data.BroadcomWiFiIDs[:18]: add_device_property(network_props.get("PCI Path"), { "IOName": "pci14e4,43a0" }) diff --git a/Scripts/datasets/kext_data.py b/Scripts/datasets/kext_data.py index 0fbc0dd..d7cae6e 100644 --- a/Scripts/datasets/kext_data.py +++ b/Scripts/datasets/kext_data.py @@ -156,9 +156,31 @@ kexts = [ "repo": "itlwm" } ), + KextInfo( + name = "corecaptureElCap", + description = "Enable legacy Qualcomm Atheros Wireless cards", + category = "Wi-Fi", + min_darwin_version = "18.0.0", + requires_kexts = ["IO80211ElCap"], + download_info = { + "id": 348147192, + "url": "https://github.com/dortania/OpenCore-Legacy-Patcher/raw/refs/heads/main/payloads/Kexts/Wifi/corecaptureElCap-v1.0.2.zip" + } + ), + KextInfo( + name = "IO80211ElCap", + description = "Enable legacy Qualcomm Atheros Wireless cards", + category = "Wi-Fi", + min_darwin_version = "18.0.0", + requires_kexts = ["corecaptureElCap"], + download_info = { + "id": 128321732, + "url": "https://github.com/dortania/OpenCore-Legacy-Patcher/raw/refs/heads/main/payloads/Kexts/Wifi/IO80211ElCap-v2.0.1.zip" + } + ), KextInfo( name = "IO80211FamilyLegacy", - description = "Enable legacy native Apple Wireless adapters", + description = "Enable legacy Apple Wireless adapters", category = "Wi-Fi", min_darwin_version = "23.0.0", requires_kexts = ["AMFIPass", "IOSkywalkFamily"], @@ -169,7 +191,7 @@ kexts = [ ), KextInfo( name = "IOSkywalkFamily", - description = "Enable legacy native Apple Wireless adapters", + description = "Enable legacy Apple Wireless adapters", category = "Wi-Fi", min_darwin_version = "23.0.0", requires_kexts = ["AMFIPass", "IO80211FamilyLegacy"], @@ -188,6 +210,28 @@ kexts = [ "repo": "itlwm" } ), + KextInfo( + name = "Ath3kBT", + description = "Uploads firmware to enable Atheros Bluetooth support", + category = "Bluetooth", + max_darwin_version = "20.99.99", + requires_kexts = ["Ath3kBTInjector"], + github_repo = { + "owner": "zxystd", + "repo": "AthBluetoothFirmware" + } + ), + KextInfo( + name = "Ath3kBTInjector", + description = "Uploads firmware to enable Atheros Bluetooth support", + category = "Bluetooth", + max_darwin_version = "20.99.99", + requires_kexts = ["Ath3kBT"], + github_repo = { + "owner": "zxystd", + "repo": "AthBluetoothFirmware" + } + ), KextInfo( name = "BlueToolFixup", description = "Patches Bluetooth stack to support third-party cards", diff --git a/Scripts/datasets/pci_data.py b/Scripts/datasets/pci_data.py index 9837e25..02837b1 100644 --- a/Scripts/datasets/pci_data.py +++ b/Scripts/datasets/pci_data.py @@ -1,4 +1,59 @@ -BluetoothIDs = [ +AtherosBluetoothIDs = [ + "0489-E036", + "0489-E03C", + "0489-E04D", + "0489-E04E", + "0489-E056", + "0489-E057", + "0489-E05F", + "0489-E076", + "0489-E078", + "0489-E095", + "04C5-1330", + "04CA-3004", + "04CA-3005", + "04CA-3006", + "04CA-3007", + "04CA-3008", + "04CA-300B", + "04CA-300D", + "04CA-300F", + "04CA-3010", + "04CA-3014", + "04CA-3018", + "0930-0219", + "0930-021C", + "0930-0220", + "0930-0227", + "0B05-17D0", + "0CF3-0036", + "0CF3-3004", + "0CF3-3008", + "0CF3-311D", + "0CF3-311E", + "0CF3-311F", + "0CF3-3121", + "0CF3-817A", + "0CF3-817B", + "0CF3-E003", + "0CF3-E004", + "0CF3-E005", + "0CF3-E006", + "13D3-3362", + "13D3-3375", + "13D3-3393", + "13D3-3395", + "13D3-3402", + "13D3-3408", + "13D3-3423", + "13D3-3432", + "13D3-3472", + "13D3-3474", + "13D3-3487", + "13D3-3490" +] + +BroadcomBluetoothIDs = [ # BrcmPatchRAM Plugins "0489-E032", "0489-E042", @@ -98,7 +153,10 @@ BluetoothIDs = [ "185F-2167", "19FF-0239", "413C-8143", - "413C-8197", + "413C-8197" +] + +IntelBluetoothIDs = [ # IntelBluetoothFirmware.kext "8087-0025", "8087-0026", @@ -113,7 +171,10 @@ BluetoothIDs = [ "8087-0A2A", "8087-0A2B", "8087-0AA7", - "8087-0AAA", + "8087-0AAA" +] + +BluetoothDongleIDs = [ "0A12-0001" ] @@ -475,13 +536,13 @@ BroadcomBCM57XXIDs = [ IntelI22XIDs = [ # AppleIGC.kext + "8086-3102", "8086-125B", "8086-125C", "8086-125D", "8086-15F2", "8086-15F3", - "8086-15F8", - "8086-3102" + "8086-15F8" ] IntelMausiIDs = [ diff --git a/Scripts/kext_maestro.py b/Scripts/kext_maestro.py index 1ed6630..981d697 100644 --- a/Scripts/kext_maestro.py +++ b/Scripts/kext_maestro.py @@ -167,6 +167,10 @@ class KextMaestro: selected_kexts.append("AirportBrcmFixup") elif device_id in pci_data.IntelWiFiIDs: selected_kexts.append("AirportItlwm" if self.utils.parse_darwin_version(macos_version) < self.utils.parse_darwin_version("23.0.0") else "itlwm") + elif device_id in pci_data.AtherosWiFiIDs[:8]: + selected_kexts.append("corecaptureElCap") + if self.utils.parse_darwin_version(macos_version) > self.utils.parse_darwin_version("20.99.99"): + selected_kexts.append("AMFIPass") elif device_id in pci_data.IntelI22XIDs: selected_kexts.append("AppleIGC") elif device_id in pci_data.AtherosE2200IDs: @@ -192,13 +196,14 @@ class KextMaestro: for bluetooth_name, bluetooth_props in hardware_report.get("Bluetooth", {}).items(): usb_id = bluetooth_props.get("Device ID") - if usb_id in pci_data.BluetoothIDs: - if pci_data.BluetoothIDs.index(usb_id) < 99: - selected_kexts.append("BrcmFirmwareData") - if pci_data.BluetoothIDs[-1] == usb_id: - selected_kexts.append("BlueToolFixup") - else: - selected_kexts.append("IntelBluetoothFirmware") + if usb_id in pci_data.AtherosBluetoothIDs: + selected_kexts.extend(("Ath3kBT", "Ath3kBTInjector")) + elif usb_id in pci_data.BroadcomBluetoothIDs: + selected_kexts.append("BrcmFirmwareData") + elif usb_id in pci_data.IntelBluetoothIDs: + selected_kexts.append("IntelBluetoothFirmware") + elif usb_id in pci_data.BluetoothDongleIDs: + selected_kexts.append("BlueToolFixup") if "Laptop" in hardware_report.get("Motherboard").get("Platform"): if "SURFACE" in hardware_report.get("Motherboard").get("Name"): @@ -347,7 +352,12 @@ class KextMaestro: kernel_add = [] unload_kext = [] - if self.kexts[self.get_kext_index("VoodooSMBus")].checked: + if self.kexts[self.get_kext_index("IO80211ElCap")].checked: + unload_kext.extend(( + "AirPortBrcm4331", + "AppleAirPortBrcm43224" + )) + elif self.kexts[self.get_kext_index("VoodooSMBus")].checked: unload_kext.append("VoodooPS2Mouse") elif self.kexts[self.get_kext_index("VoodooRMI")].checked: if not self.kexts[self.get_kext_index("VoodooI2C")].checked: