freebsd-dev/sys/dev/bwn
Landon J. Fuller 8d14ca9c99 Introduce bwn(4) support for the bhnd(4) bus.
Currently, bwn(4) relies on the siba_bwn(4) bus driver to provide support
for the on-chip SSB interconnect found in Broadcom's older PCI(e) Wi-Fi
adapters. Non-PCI Wi-Fi adapters, as well as the newer BCMA interconnect
found in post-2009 Broadcom Wi-Fi hardware, are not supported by
siba_bwn(4).

The bhnd(4) bus driver (also used by the FreeBSD/MIPS Broadcom port)
provides a unified kernel interface to a superset of the hardware supported
by siba_bwn; by attaching bwn(4) via bhnd(4), we can support both modern
PCI(e) Wi-Fi devices based on the BCMA backplane interconnect, as well as
Broadcom MIPS WiSoCs that include a D11 MAC core directly attached to their
SSB or BCMA backplane.

This diff introduces opt-in bwn(4) support for bhnd(4) by providing:

 - A small bwn(4) driver subclass, if_bwn_bhnd, that attaches via
   bhnd(4) instead of siba_bwn(4).
 - A bhndb(4)-based PCI host bridge driver, if_bwn_pci, that optionally
   probes at a higher priority than the siba_bwn(4) PCI driver.
 - A set of compatibility shims that perform translation of bwn(4)'s
   siba_bwn function calls into their bhnd(9) API equivalents when bwn(4)
   is attached via a bhnd(4) bus parent. When bwn(4) is attached via
   siba_bwn(4), all siba_bwn function calls are simply passed through to
   their original implementations.

To test bwn(4) with bhnd(4), place the following lines in loader.conf(5):

  hw.bwn_pci.preferred="1"

  if_bwn_pci_load="YES
  bwn_v4_ucode_load="YES"
  bwn_v4_lp_ucode_load="YES"

To verify that bwn(4) is using bhnd(4), you can check dmesg:

  bwn0: <Broadcom 802.11 MAC/PHY/Radio, rev 15> ... on bhnd0

... or devinfo(8):

pcib2
  pci2
    bwn_pci0
      bhndb0
        bhnd0
          bwn0
          ...

bwn(4)/bhnd(4) has been tested for regressions with most chipsets currently
supported by bwn(4), including:

  - BCM4312
  - BCM4318
  - BCM4321

With minimal changes to the DMA code (not included in this commit), I was
also able to test support for newer BCMA devices by bringing up basic
working Wi-Fi on two previously unsupported, BCMA-based N-PHY chipsets:

  - BCM43224
  - BCM43225

Approved by:	adrian (mentor, implicit)
Sponsored by:	The FreeBSD Foundation & Plausible Labs
Differential Revision:	https://reviews.freebsd.org/D13041
2017-12-02 02:21:27 +00:00
..
if_bwn_bhnd.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_chipid.h [bwn] add BCMA chip identifiers. 2016-05-14 20:03:24 +00:00
if_bwn_cordic.h [bwn] add an implementation of "cordic" and imaginary math. 2016-05-14 23:33:13 +00:00
if_bwn_debug.h [bwn] add opt_wlan.h and opt_bwn.h so we can enable bwn debugging as appropriate. 2016-05-16 22:56:45 +00:00
if_bwn_misc.h [bwn] implement reset improvements in preparation for PHY-N support 2016-05-14 23:20:46 +00:00
if_bwn_pci.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_pcivar.h Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_phy_common.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_phy_common.h [bwn] begin migrating PHY common routines into if_bwn_phy_common.[ch]. 2016-05-14 20:11:48 +00:00
if_bwn_phy_g.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_phy_g.h [bwn] add new types, prepare for PHY-N; prepare for rev 5xx firmware. 2016-05-14 23:38:21 +00:00
if_bwn_phy_lp.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_phy_lp.h [bwn] break out the LP PHY code into a separate file. 2016-05-02 21:06:02 +00:00
if_bwn_phy_n.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_phy_n.h [bwn] add PHY-N glue. 2016-05-17 07:11:12 +00:00
if_bwn_siba_compat.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_siba_compat.h Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_siba.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_siba.h Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_util.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwn_util.h [bwn] add Q52 macros. 2016-05-14 20:09:37 +00:00
if_bwn.c Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
if_bwnreg.h sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
if_bwnvar.h Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00