Broadcom brcmsmac(PCIe) and brcmfmac(SDIO/USB) drivers
- Completely open source host drivers, no binary object files.
- Framework for supporting new chips, including mac80211-aware embedded chips.
Does not support older PCI/PCIe chips with SSB backplane (see b43).
brcmsmac is a mac80211-based SoftMAC driver, and brcmfmac is a FullMAC driver.
Contents
Supported Chips
brcmsmac (PCIe/AXI) driver:
Name
PCI Device ID
BCM4313
0x4727
BCM43224
0x0576
BCM43224
0x4353
BCM43225
0x4357
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:
Name
BCM4716
BCM4717
BCM4718
brcmfmac
PCIe devices
Chipset
PCI Device ID
Notes
BCM4354
14e4:43df
Supported in 3.17+
BCM4356
14e4:43ec
BCM43567
14e4:43d3
BCM43570
14e4:43d9
BCM43602
14e4:43ba
BCM43602
14e4:43bb
Supported in 3.19+, 2 GHz device
BCM43602
14e4:43bc
Supported in 3.19+, 5 GHz device
SDIO devices
Name
Device ID
BCM4329
0x4329
BCM4330
0x4330
BCM4334
0x4334
BCM43241
0x4324
BCM4335
0x4335
BCM43362
0xA962
BCM4354
0x4354
BCM43143
0xA887
USB devices
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+
BCM43569
Both brcmsmac and brcmfmac drivers require firmware files that need to be separately downloaded. Firmware is available from the Linux firmware repository at:
- git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git
https://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git
Unsupported Chips
Chip
Rev
Marketing name
USB ID
0x4322
1
?
0846:9011
0x4322
1
BCM43231
0846:9020
43236
2
BCM43236
0a5c:bd17
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.
Broadcom brcmsmac driver
- Support for both 32 and 64 bit Linux kernels
Firmware installation
Copy brcm/bcm43xx-0.fw and brcm/bcm43xx_hdr-0.fw to /lib/firmware/brcm (or wherever firmware is normally installed on your system).
Broadcom brcmfmac driver
- Support for both 32 and 64 bit Linux kernels
Firmware installation
Current
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.
SDIO chip on older kernels (before 3.13)
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:
firmware files: bcmdhd/firmware/bcm4329/fw_bcm4329.bin bcmdhd/firmware/bcm4330/fw_bcm4330_b2.bin
Contact Info
For driver issues and/or bug reports, please use:
brcm80211-dev-list@broadcom.com
For any other questions feel free to contact the developers listed below:
Arend van Spriel arend@broadcom.com
Franky Lin frankyl@broadcom.com
Hante Meuleman meuleman@broadcom.com
Brett Rudley brudley@broadcom.com
Developer information
Overview
- On-chip firmware loaded using standard request_firmware()
- Infrastructure for future chips in place.
- AMPDU support
- tracepoint support
softmac driver specifics
- Integrated with mac80211
- Using BCMA bus driver
- Uses minstrel_ht rate algorithm
- HW based encryption not enabled yet
- monitor mode
fullmac driver specifics
- Integrated with cfg80211
- Most of Mac functionality is performed on chip
- support for SDIO and USB
- SoftAP
- P2P
- TDLS
Get the code
The driver is available in linux mainline and development is done on the wireless-testing tree, available at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
The driver is also available in the 3.2 and newer kernels. When using 'make menuconfig' it can be accessed:
Location: -> Device Drivers
-> Network device support
-> Wireless LAN
-> < > Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
-> < > Broadcom IEEE802.11n embedded FullMAC WLAN driver
-> [ ] SDIO bus interface support for FullMAC driver
-> [ ] USB bus interface support for FullMAC driver
For the PCIe SoftMAC WLAN driver (brcmsmac) you need to enable select the BCMA bus driver as well:
Location: -> Device Drivers
-> Broadcom specific AMBA
-> <M> BCMA support
-> [*] Support for BCMA on PCI-host bus
tracepoint support
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
To be done for softmac driver
- Add support for
- 40MHz channels
- powersave
- debugfs (for accessing counters and other diagnostic info)
- IBSS
- AP
- LED support
- HW-based encryption
- Add support for more chips, including (near term) BCM43227, BCM43228, and BCM4331. Support for additional new chips to follow.
To be done for fullmac driver
- Add support for
- debugfs (for accessing counters and other diagnostic info)
- monitor mode
- Add support for more chips.
Regulatory Implementation for brcmsmac
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.