Add support for Atheros Wi-Fi/Bluetooth cards

This commit is contained in:
Hoang Hong Quan
2025-02-21 11:39:36 +07:00
parent a8abc0c704
commit cfdb6d8ed2
5 changed files with 159 additions and 19 deletions

View File

@@ -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)
]

View File

@@ -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"
})

View File

@@ -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",

View File

@@ -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 = [

View File

@@ -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: