• Become a Premium Member for $25/year with no ads to improve your community experience.

How to Enable Broadcom WiFi and Bluetooth on macOS [Clover/OpenCore]

This guide describes how to enable Broadcom WiFi and Bluetooth on macOS using Clover and OpenCore. By following this guide, you'll be able to enable Broadcom WiFi and Bluetooth on your non-Apple computer running macOS using Clover or OpenCore bootloader.

Overview


Apple has been using Broadcom WiFi/BT Cards on their Macs for a long time which works out of the box i.e. requires no additional driver or any sort of configuration. As always, Apple uses specific models so that the hardware is supported natively with the provided kexts in macOS/OS X. However, when it comes to non-Apple computers, most of the systems are equipped with Intel and/or Realtek WiFi/BT module which isn't supported by Apple drivers yet and Broadcom stands as one of the top choice if you want to experience a full-featured WiFi/BT functionality under macOS. Although these Broadcoms are usually natively supported, there are some models which require an additional configuration (like firmware upload) to enable the WiFi/BT function and fix potential issues on non-Apple computers.

With the newer releases of Mac models, Apple has also dropped support for some of the Broadcom WiFi/BT modules under macOS. This guide will cover a workaround for such outdated models as well.


Compatibility


Not all Broadcom WiFi/BT is compatible with macOS. Refer to the thread linked below for more information on Broadcom WiFi compatibility.

Requirements


Following are the requirements for enabling Broadcom Bluetooth on macOS. Please ensure you meet the requirements before proceeding with this guide.

WiFi/ BT Hardware
  • macOS Compatible Broadcom WiFi/BT.
macOS
  • OS X Mountain Lion and Later (Pre-installed).
Bootloader
  • Clover or OpenCore. Please ensure to use the latest version to avoid issues.
Kexts
  • Vanilla Network kexts in S/L/E

In addition, this guide assumes that you have already mapped your USB Ports and have set the Bluetooth as Internal (255). See Mapping USB Ports for more information.

STEP 1: Setup BIOS

The very first step is to set up BIOS to have the Broadcom WiFi/BT enabled on your system. This is because there are a few systems that have the option to Enable WiFi/BT in BIOS which affects the functionality under macOS/OS X.

1. On your target computer, boot to BIOS. Refer to your user manual for the BIOS Key
2. Enable WiFi/BT function.
3. Save & Exit Setup.

STEP 2: Verify the WiFi/BT Detection

The next step is to verify whether the installed card is being detected under macOS or not. This step is required in order to ensure you're on the right track and you're having the right card as per the compatibility list. If the Card is not detected, even following the guide correctly will not help to get it recognized. In addition, not all WWN slot is not M.2. There are a few systems with cNVi slots, where even if you replace the card with a compatible one, the card will not be detected at all. This is because of the proprietary connectivity interface by Intel. This means the particular CNVi slot on the motherboard will accept only Intel-based WiFi/BT Cards therefore if you replace the card, you must verify the detection of the WiFi/BT module. To verify the WiFi/BT detection, follow the steps below.

1. Download Hackintool from the Download section.
2. Open Hackintool.
3. Locate your WiFi module under the PCIe section in Hackintool. The WiFi module is usually listed as Network Controller under the Class and Subclass column.
4. The BT can be verified in the Hackintool>USB section. In case, if you're unable to verify the BT using Hackintool, you can verify it from the System Report>Hardware>USB section.

STEP 3: Add Required Kexts


The next step is to install the required kexts in order to enable WiFi and Bluetooth support.

I. WiFi


To enable the WiFi support, you'll need to add AirportBrcmFixup.kext. AirportBrcmFixup doesn't work standalone. AirportBrcmFixup and Lilu are needed together to work in conjunction in order to enable WiFi. To install the kexts, follow the steps below.

1. Download AirportBrcmFixup and Lilu from the downloads section of this forum.
2. Mount your ESP.
3. Depending on your bootloader,

For Clover:
If you're using Clover, copy AirportBrcmFixup.kext to EFI/Clover/Kext/Others directory.

For OpenCore:
If you're using OpenCore, copy AirportBrcmFixup.kext to EFI/OC/Kexts directory. You'll also need to add the kext entry in the Kernel section of your config.plist.

NOTES:
  • Download the latest version for better support.
  • Download only the RELEASE.zip file.
  • If the kext is already present in the directory, replace them with a new version
  • Do not use AirportBrcmFixup.kext.dSYM


II. Bluetooth


To enable Bluetooth support, you'll need to add BrcmPatchRAM kexts.


KextsNotes
BlueToolFixup
  • Required for Broadcom and Intel Bluetooth
  • For macOS 12 (Monterey) and Later
  • Do not use it with BrcmBluetoothInjector.kext and IntelBluetoothInjector.kext
  • This kext requires Lilu.kext to function.
BrcmBluetoothInjector
  • Bluetooth Injector for Broadcom
  • For OS X El Capitan to Big Sur
  • This kext requires BrcmFirmwareData.kext and BrcmPatchRAM3 to function.
  • Do not use BrcmPatchRAM.kext or BrcmPatchRAM2.kext with this kext.
BrcmFirmwareData
  • Enables Firmware Upload to Bluetooth Device.
  • Required for all non-Apple and non-Fenvi Cards
  • This kext can be injected via Bootloader and is the preferred configuration.
  • This kext requires BrcmBluetoothInjector.kext and BrcmPatchRAM3 to function.
BrcmPatchRAM2
  • For OS X El Capitan to macOS Mojave
  • This kext requires BrcmBluetoothInjectorLegacy and BrcmFirmwareRepo.kext to function.
BrcmPatchRAM3
  • For macOS Catalina and Later
  • This kext requires BrcmBluetoothInjector.kext or BlueToolFixup.kext and BrcmFirmwareData.kext to function.

1. Download the kexts according to your macOS version from the downloads section of this forum.
2. Mount your ESP.

For Clover:
If you're using Clover, copy the kexts to EFI/Clover/Kext/Others

For OpenCore:
If you're using OpenCore, copy the kexts to EFI/OC/Kexts. You'll also need to add the kext entries in the Kernel section of your config.plist.

NOTES:
  • Download the latest version for better support.
  • Download only the RELEASE.zip file.
  • If the kext is already present in the directory, replace them with a new version

STEP 4: Configure Quirks

The next step is to enable ExtendBTFeatureFlags which will enable the full functionality of Bluetooth including Continuity. To enable ExtendBTFeatureFlags, follow the steps below.

1. Assuming the ESP is still mounted,

For OpenCore:
If you're using OpenCore, enable ExtendBTFeatureFlags Quirk in the Kernel>Quirks section of your config.plist

2. Save your config.plist.

STEP 5: Restart your System


After performing all the above steps, restart your system for the applied changes to take effect. It is recommended to reset NVRAM twice at least.
You can see a WiFi icon in the menu bar now. If not, you can enable it from System Preferences>Network>WiFi>Show Wi-Fi status in the menu bar.

NOTE: See AirPortBrcmFixup Boot Arguments for a list of supported boot arguments.


Verifying the WiFi and BT


The next step is to verify whether the WiFi and BT are working or not. Follow the steps to verify the


Recommended Configuration


The following configurations are the only valid configurations. Anything else is likely wrong and should not be used.

WiFi

Target OSKext ConfigurationKext Install Location
OS X Mountain Lion (10.10) - macOS Catalina (10.15.x)
  • AirPortBrcm4360_Injector.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts
macOS Big Sur (11.x) - macOS Ventura (13.x)
  • AirPortBrcmNIC_Injector.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts

NOTES:
  • Choose one of the configurations depending on the macOS version, never both.
  • You have to block or remove AirPortBrcm4360_Injector.kext for macOS Big Sur and later. This can be achieved either by removing the kext entry or using the boot arg to load only one specific driver or via Device Properties or DSDT/SSDT patch or through specifying the MinKernel and MaxKernel for OpenCore. For Clover, you can either remove the AirPortBrcm4360_Injector.kext from AirportBrcmFixup.kext/Contents/Plugins directory or can use the boot arg to load only one specific driver or via Device Properties or DSDT/SSDT patch.
Bluetooth

Target OSKext Configuration¹Kext Configuration²Kext Location
OS X Yosemite (10.10) and Prior
  • BrcmBluetoothInjectorLegacy.kext
  • BrcmFirmwareData.kext
  • BrcmPatchRAM.kext
  • BrcmBluetoothInjectorLegacy.kext
  • BrcmFirmwareRepo.kext
  • BrcmPatchRAM.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts¹
  • /System/Library/Extensions²
OS X El Capitan (10.11) - macOS Mojave (10.14)
  • BrcmBluetoothInjector.kext
  • BrcmFirmwareData.kext
  • BrcmPatchRAM2.kext
  • BrcmBluetoothInjector.kext
  • BrcmFirmwareRepo.kext
  • BrcmPatchRAM2.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts¹
  • /Library/Extensions²
macOS Catalina (10.15) - macOS Big Sur (11.x)
  • BrcmBluetoothInjector.kext
  • BrcmFirmwareData.kext
  • BrcmPatchRAM3.kext
  • BrcmBluetoothInjector.kext
  • BrcmFirmwareRepo.kext
  • BrcmPatchRAM3.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts¹
  • /Library/Extensions²
macOS Monterey (12.x) - macOS Ventura (13.x)
  • BrcmFirmwareData.kext
  • BrcmPatchRAM3.kext
  • BlueToolFixup.kext
  • BrcmFirmwareRepo.kext
  • BrcmPatchRAM3.kext
  • BlueToolFixup.kext
  • EFI/CLOVER/Kexts/Others or EFI/OC/Kexts¹
  • /Library/Extensions²

NOTES:
  • Choose one of the configurations, never both.
  • Configuration¹ is the preferred configuration and highly recommended.

Power Management

With a few Broadcom BCM94350 Chipsets (commonly known as DW1820A), some users may experience a Kernel Panic when booting the macOS installer, before reaching the installation stage. Although there could be several underlying causes for a Kernel Panic, this panic is related to the particular DW1820A used in the target system. This can also be seen using the verbose mode:


These WiFi Cards are known to cause random Kernel Panics and it is not even possible to boot the macOS installer when installed in the target system. The system throws an immediate Kernel Panic before you can reach the macOS installer. If you're attempting a clean installation of macOS, you'll either need to disable the Wireless completely in BIOS or remove the hardware itself in order to complete the installation. Once installed, you can either enable the Wireless back in the BIOS or install the hardware back. However, this would cause severe lags and performance degradation (as seen previously) once you reach the desktop as if the card just clogged up CPU resources. This is because cards based on these chipsets don't support power management correctly under macOS and therefore needs to be disabled using one of the methods described below.

The steps mentioned below are only valid if your system has a Kernel Panic relating to the ASPM and will not work if your system has a Kernel Panic due to some other cause. Please check the verbose log to ensure you're in the right direction.

Method #1: Using Device Properties
Using Device Properties, you can disable the ASPM without the need of extra coding. This method is a lot easier and more friendly and recommended for newbie users. To disable the ASPM using the Device Properties method, follow the steps below.

STEP 1: Finding the Device Path of the WiFi
The very step is to find the Device's Path. Without the correct path, the device properties injection will never work.

STEP 2: Injecting Properties
Once you have obtained the Device's Path, you're ready to inject the device properties. To inject the device properties, follow the steps below.

1. Mount your ESP.
2. Depending on your bootloader,

For Clover:
1. Open your config.plist using any XML editor from the EFI/Clover directory.
2. Add the Device path which you obtained in STEP #1 of this guide under Devices>Properties section of your config.plist. In our case, the Device path would be PciRoot (0x0)/Pci(0x1C,0x02)/Pci(0x0,0x0).
3. Add the following Properties under Properties in the Devices section of your config.plist.

Key* = pci-aspm-default
Value = 00000000
Type = DATA

For OpenCore:
1. Open your config.plist using any XML editor from the EFI/OC directory.
2. Add the Device path which you obtained in STEP #1 of this guide under the DeviceProperties section of your config.plist. In our case, the Device path would be PciRoot (0x0)/Pci(0x1C,0x02)/Pci(0x0,0x0).
3. Add the following Properties under the DeviceProperties section of your config.plist.

Key* = pci-aspm-default
Value = 00000000
Type = DATA

4. Save your config.plist.

STEP 3: Restarting your System

After performing all the above steps, restart your system for the applied changes to take effect. It is recommended to reset NVRAM twice at least.


Method #2: Using Hotpatch
Using the Hotpatch method, you can also disable the ASPM. However, beginner users may find this method a bit difficult and therefore new users are advised to use Method #1. To disable the ASPM using the Hotpatch method, follow the steps below.

STEP 1: Determining the ACPI Path of your WiFi/BT Card
The very step is to find the ACPI Path. This is the most important step and is the root therefore the ACPI Path must be accurate in order for the guide to work. Without the correct ACPI path, the guide simply won't work.

STEP 2: Modifying the SSDT
Once you have obtained the ACPI path, you're ready to disable the ASPM by modifying the sample SSDT. Typically, the modification consists of changing the ACPI path only. The rest of the values in the SSDT does not need to be changed. To modify the SSDT, follow the steps below.

1. Based on Rehabman's class-code technique, download SSDT-NVME-DISABLE.aml.
2. Download the MaciASL of your choice.
3. Extract the MaciASL and move it to the Applications folder.
4. Open the downloaded SSDT-NVME-DISABLE.aml using MaciASL.
5. Now you need to change the ACPI Path in the SSDT to match yours. You can either manually replace these values or you can also use Find and Replace option in MaciASL using Command+F or using the menu Edit>Find and Replace option.

To ReplaceOriginal ValueNote
ACPI PathPCXX.XXXX.XXXXDepending on your ACPI path, change the ACPI Path with the value obtained in STEP #1. In our case, the ACPI path would be PCI0.GPP1.DEV0

Before changing:

After changing:


6. Click on Compile and look for errors in the Compiler Summary. If there's an error, fix it and again click on Compile.

Screen Shot 2022-12-04 at 9.50.24 PM-min.png


7. Save the changes to the SSDT using the File>Save option.

Screen Shot 2022-12-04 at 10.06.59 PM-min.png


STEP 4: Installing the SSDT

Now you can install the SSDT-NVME-DISABLE.aml file such that Clover or OpenCore can load it. If you're preparing your USB, you'll place it on the EFI of your Bootable USB, otherwise it will be on the EFI of your boot drive. Follow the steps below to install the SSDT.

1. Mount your ESP.
2. Depending on your bootloader,

For Clover:
If you're using Clover, copy the SSDT-NVME-DISABLE.aml and SSDT-DTGP.aml to EFI/Clover/ACPI/patched directory.

For OpenCore:
If you're using OpenCore, copy SSDT-NVME-DISABLE.aml and SSDT-DTGP.aml to EFI/OC/ACPI directory. You'll also need to add the ACPI entries in ACPI>Add section of your config.plist.

3. Save your config.plist.

STEP 5: Restarting your System

After performing all the above steps, restart your system for the applied changes to take effect. It is recommended to reset NVRAM twice at least.


Verifying the work

The next step is to verify whether the aspm is disabled or not.


IOReg
























5GHz and Country Code

Using the default Country Code, most of the cards work at full speed (5GHz/80MHz). However, a few cards may not work at full speed but with a significantly reduced speed. To fix this issue, you'll need to use brcmfx-country=XX property on WiFi for full 5GHz/80MHz operation. Where XX is the target value, e.g.: US, FR, #a, etc. Please note that this fix requires AirportBrcmFixup.kext. To add the Country Code property, follow the steps below.

1. Mount your ESP.
2. Depending on your bootloader,

For Clover:
1. Open your config.plist using any XML editor from the EFI/Clover directory.
2. Add the Device path of your WiFi Card under Devices>Properties section of your config.plist. In our case, the Device path would be PciRoot (0x0)/Pci(0x1C,0x02)/Pci(0x0,0x0).
3. Add the following Properties under Properties in the Devices section of your config.plist.

Key* = pci-aspm-default
Value = 00000000
Type = DATA

For OpenCore:
1. Open your config.plist using any XML editor from the EFI/OC directory.
2. Add the Device path of your WiFi Card under the DeviceProperties section of your config.plist. In our case, the Device path would be PciRoot (0x0)/Pci(0x1C,0x02)/Pci(0x0,0x0).
3. Add the following Properties under the DeviceProperties section of your config.plist.

Key* = brcmfx-country
Value = XX
Type = DATA

4. If you don't want to inject the property using Device Properties, you can use the same patch using brcmfx-country=XX as a boot-arg in your config.plist. See How to Add Boot Args for more information.
5. Once added, save your config.plist.

On a side note, please note that AirportBrcmFixup.kext implements US Country Code by default, and using any Country Code other than the default US setting of the card can make an impact on the wireless performance i.e. fluctuating and reduced RX/TX rate).

6. After performing all the above steps, restart your system for the applied changes to take effect. It is recommended to reset NVRAM twice at least.

macOS Monterey and Later

Since macOS Monterey, a lot has been changed in the Bluetooth stack. If you have followed the guide properly and still having issues regarding Bluetooth, we've created a separate thread covering such issues. You can find the link to the thread linked below.

 
Last edited:

Forum statistics

Threads
1,483
Messages
14,104
Members
21,280
Latest member
mustali