AirportBrcmFixup
An open source kernel extension providing a set of patches required for non-native Airport Broadcom Wi-Fi cards.Changelog v2.1.8
- Added constants for macOS 14 support for use with OCLP
Notes
This repository should be compiled with Lilu v1.2.4 or greater, otherwise the compilation will fail! Currently requires macOS 10.10 or newer.Note: Debug version of Lilu.kext should be put in the same folder as BrcmWLFixup! And they should be also used together!
Features
- Supports AirPort_Brcm4360, AirPort_BrcmNIC and AirPort_BrcmNIC_MFG
- Implements patch for chip identificator checking (0xaa52), in <=10.12 it's required for successful driver starting
- Implements patch for "Failed PCIe configuration patch", required for some cards
- Implements patch for "Third Party Device" (returns vendor name "Apple")
- Implements patch for removing of white-list check
- Implements 5Ghz and country code patch (US by default)
- Implements WOWL (WoWLAN) disabler (turned on by default) - no low speed after wake
- Implements patch to disable LPO panic in AirPortBrcmNIC
Installation types
- Clover Airport Fix + AirportBrcmFixup
- Clover Airport Fix + AddProperties(fake device-id) + AirportBrcmFixup (preferable)
- Clover Airport Fix + AirportBrcmFixup + FakePCIID + FakePCIID_Broadcom_WiFi.kext
- AirportBrcmFixup + FakePCIID + FakePCIID_Broadcom_WiFi.kext
Boot-args
- -brcmfxdbg turns on debugging output
- -brcmfxbeta enables loading on unsupported osx
- -brcmfxoff disables kext loading
- -brcmfxwowl enables WOWL (WoWLAN) - it is disabled by default
- -brcmfx-alldrv allows patching for all supported drivers, disregarding current system version (see Matching device-id and kext name in different macOS versions)
Specific boot-args and ioreg properties
- brcmfx-country=XX changes the country code to XX (US, CN, #a, ...), also can be injected via DSDT or Properties → DeviceProperties in bootloader
- brcmfx-aspm overrides value used for pci-aspm-default
- brcmfx-wowl enables/disables WoWLAN patch
- brcmfx-delay delays start of native broadcom driver for specified amount of milliseconds. It can solve panics or missing wi-fi device in Monterey. You can start with 15 seconds (brcmfx-delay=15000) and successively reduce this value until you notice instability in boot.
- brcmfx-alldrv allows patching for all supported drivers, disregarding current system version (see Matching device-id and kext name in different macOS versions)
- brcmfx-driver=0|1|2|3 enables only one kext for loading, 0 - AirPortBrcmNIC-MFG, 1 - AirPortBrcm4360, 2 - AirPortBrcmNIC, 3 - AirPortBrcm4331, also can be injected via DSDT or Properties → DeviceProperties in bootloader
- 0 disables ASPM
- kIOPCIExpressASPML0s = 0x00000001,
- kIOPCIExpressASPML1 = 0x00000002,
- kIOPCIExpressCommonClk = 0x00000040,
- kIOPCIExpressClkReq = 0x00000100
Credits
- Apple for macOS
- vit9696 for Lilu.kext and great help in implementing some features
- PMheart for the initial idea and implementation
- darkvoid & RehabMan for FakePCIID implementation (partly used in AirportBrcmFixup)
- al3xtjames for disabling LPO panic in AirPortBrcmNIC
- lvs1974 for writing the software and maintaining it
Matching device-id and kext name in different macOS versions
[10.8]- AirPortBrcm4360: 43a0, IOProbeScore = 641
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 615
- AirPortBrcm4360: 43a0, IOProbeScore = 842
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 700
- AirPortBrcm4360: 43ba, 43a3, 43a0, 4331, 4353, IOProbeScore = 930
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 900
- AirPortBrcm4360: 43ba, 43a3, 43a0, 4331, 4353, IOProbeScore = 1040
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 800
- AirPortBrcm4360: 43ba, 43a3, 43a0, 4331, 4353, IOProbeScore = 1152
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 800
- AirPortBrcm4360: 4331, 4353, IOProbeScore = 1240
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 800
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1241
- AirPortBrcmNIC-MFG: 43ba, 43a3, 43a0, IOProbeScore = -1000
- AirPortBrcm4360: 4331, 4353, IOProbeScore = 1400
- AirPortBrcm4331: 4331, 4353, 432b, IOProbeScore = 800
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1400
- AirPortBrcmNIC-MFG: 43ba, 43a3, 43a0, IOProbeScore = -1000
- AirPortBrcm4360: 4331, 4353, IOProbeScore = 1400
- AirPortBrcm4331: removed
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1400
- AirPortBrcmNIC-MFG: removed
- AirPortBrcm4360: removed
- AirPortBrcm4331: removed
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1400
- AirPortBrcmNIC-MFG: removed
- AirPortBrcm4360: removed
- AirPortBrcm4331: removed
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1400, kext is moved to the new location - IO80211FamilyLegacy.kext/Contents/PlugIns
- AirPortBrcmNIC-MFG: removed
- AirPortBrcm4360: removed
- AirPortBrcm4331: removed
- AirPortBrcmNIC: 43ba, 43a3, 43a0, IOProbeScore = 1400, kext is moved to the new location - IO80211FamilyLegacy.kext/Contents/PlugIns
- AirPortBrcmNIC-MFG: removed
Until version [10.13] there were only two kexts and for the most cases FakeID = 43a0 was enough to get working Wi-Fi. In [10.13] (and later) one family was separated into AirPortBrcm4360 (probably will be removed in 10.15), AirPortBrcmNIC and AirPortBrcmNIC-MFG. A proper fake-id has to be considered to load appropriate kext. Some device-id have limitations in one kext (like 5 Ghz range), but do not have it another.