This is an old revision of the document!
brcmsmac (PCIe/AXI) driver:
|Name||PCI Device ID|
Please note: at least BCM4313 is not fully supported. Some models appears to work (users reported success), but some don't, and there's no indication that this is going to change. For example: http://marc.info/?t=138817851800006&r=1&w=2
brcmsmac (SoC/AXI) driver:
|Chipset||PCI Device ID||Notes|
|BCM4354||14e4:43df||Unreleased hw, support dropped in 4.1|
|BCM4356||14e4:43ec||Supported in 3.17+|
|BCM4358||14e4:43e9||Supported in 4.2+|
|BCM43602||14e4:43ba||Supported in 3.17+|
|BCM43602||14e4:43bb||Supported in 3.19+, 2 GHz device|
|BCM43602||14e4:43bc||Supported in 3.19+, 5 GHz device|
|BCM43602||14e4:aa52||Supported in 4.2+, “raw” device|
|BCM43340||0xa94c||Supported in 4.0+|
|BCM43341||0xa94d||Supported in 4.0+|
|BCM4339||0x4335||Supported in 3.13+|
|BCM43362||0xA962||Supported in 3.14+|
|BCM43430||0xa9a6||Supported in 4.1+|
|BCM43455||0x4345||Supported in 4.1+|
|BCM4354||0x4354||Supported in 3.15+|
|Name||USB Device ID||Notes|
|BCM43235 (rev == 3)||?|
|BCM43236 (rev == 3)||0a5c:bd17|
|BCM43238 (rev == 3)||?|
|BCM43143||0a5c:bd1e||Supported in 3.7+|
|BCM43242||0a5c:bd1f||Supported in 3.7+|
|BCM43566||0a5c:bd27||Supported in 3.17+|
Both brcmsmac and brcmfmac drivers require firmware files that need to be separately downloaded. Firmware is available from the Linux firmware repository at:
|Chip||Rev||Marketing name||USB ID|
BCM43231 and BCM43236 (rev ⇐ 2) have another architecture and can't be easily supported by brcmfmac. They have less memory on the chip and can't run full MAC firmware, so they require implementing some extra code in the Linux driver. On the other hand they are not standard soft MAC devices, so they can't be supported by brcmsmac or b43.
|BCM4345||02d0:4345||Older version of BCM43455|
Copy brcm/bcm43xx-0.fw and brcm/bcm43xx_hdr-0.fw to /lib/firmware/brcm (or wherever firmware is normally installed on your system).
For SDIO driver you need to copy the nvram for your system and place it in /lib/firmware/brcm. The nvram file name depends on the chip you have. The kernel log will tell you the exact file name. For the USB driver no nvram file is needed.
The firmware files are located in the linux-firmware repository and can be copied as is to /lib/firmware/brcm.
In kernel priors to v3.13 the SDIO driver used generic firmware names. Below are the instruction Use the nvram file installed in your system and copy it to /lib/firmware/brcm/brcmfmac-sdio.txt The firmware can be found in the linux-firmware repository.
|For 4329: cp brcm/brcmfmac4329.bin /lib/firmware/brcm/brcmfmac-sdio.bin|
|For 4330: cp brcm/brcmfmac4330.bin /lib/firmware/brcm/brcmfmac-sdio.bin|
Alternatively, when not available the Android version can be used as well:
|git clone https://android.googlesource.com/platform/hardware/broadcom/wlan|
|firmware files: bcmdhd/firmware/bcm4329/fw_bcm4329.bin bcmdhd/firmware/bcm4330/fw_bcm4330_b2.bin|
For driver issues and/or bug reports, please use:
For any other questions feel free to contact the developers listed below:
Arend van Spriel firstname.lastname@example.org
Franky Lin email@example.com
Hante Meuleman firstname.lastname@example.org
Brett Rudley email@example.com
The driver is available in linux mainline and development is done on the wireless-testing tree, available at:
The driver is also available in the 3.2 and newer kernels. When using 'make menuconfig' it can be accessed:
Location: → Device Drivers
For the PCIe SoftMAC WLAN driver (brcmsmac) you need to enable select the BCMA bus driver as well:
Location: → Device Drivers
Both brcmsmac and brcmfmac have several tracepoints defined that can be traced using kernel Ftrace. Python-based plugins are available on Github: https://github.com/arend/brcm80211-trace-cmd
This generation of chips contain additional regulatory support independent of the driver. The devices use a single worldwide regulatory domain, with channels 12-14 (2.4 GHz band) and channels 52-64 and 100-140 (5 GHz band) restricted to passive operation. Transmission on those channels is suppressed until appropriate other traffic is observed on those channels. Within the driver, we use the ficticious country code “X2” to represent this worldwide regulatory domain. There is currently no interface to configure a different domain. The driver reads the SROM country code from the chip and hands it up to mac80211 as the regulatory hint, however this information is otherwise unused with the driver.