brcmsmac is a mac80211-based SoftMAC driver, and brcmfmac is a FullMAC driver.

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

BCM4350

14e4:43a3

Queued for 4.4+

BCM4354

14e4:43df

Unreleased hw, support dropped in 4.1

BCM4356

14e4:43ec

Supported in 3.17+

BCM43567

14e4:43d3

BCM43570

14e4:43d9

BCM4358

14e4:43e9

Supported in 4.2+

BCM4359

14e4:43ef

Queued for 4.5+

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

BCM4365

14e4:43ca

Supported in 4.4+

BCM4365

14e4:43cb

Supported in 4.4+, 2 GHz device

BCM4365

14e4:43cc

Supported in 4.4+, 5 GHz device

BCM4366

14e4:4365

Queued for 4.6+

BCM4366

14e4:43c3

Supported in 4.4+

BCM4366

14e4:43c4

Supported in 4.4+, 2 GHz device

BCM4366

14e4:43c5

Supported in 4.4+, 5 GHz device

SDIO devices

Name

Device ID

Notes

BCM4329

0x4329

BCM4330

0x4330

Supported in 3.3+

BCM4334

0x4334

Supported in 3.6+

BCM43340

0xa94c

Supported in 4.0+

BCM43341

0xa94d

Supported in 4.0+

BCM43241

0x4324

Supported in 3.7+

BCM4335

0x4335

Supported in 3.10+

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+

BCM43143

0xA887

Supported in 3.10+

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:

Unsupported Chips

Chip

Rev

Marketing name

USB ID

0x4322

1

?

0846:9011

0x4322

1

BCM43231

0846:9020

43236

2

BCM43236

0a5c:bd17

43526

2

BCM43526

0a5c:bd1d

0x4322

1

BCM4323

1eda:2410

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

Firmware installation

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.

NVRAM from EFI

Some new devices are storing the nvram which is needed in addition to the firmware by the driver in an EFI variable and the Windows driver can access it (this file should be optional in the case of PCIe devices). Currently brcmfmac does not support this automatically.
First mount the efi vars into sysfs:

To be done for fullmac driver

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 1-11 (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.