freebsd kernel with SKQ
Go to file
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
bin Add "vmaddr" ps(1) keyword. 2017-12-01 11:32:05 +00:00
cddl Add basic tests for ctfconvert(1), fold(1) and rs(1) 2017-11-27 20:01:58 +00:00
contrib Import lua 5.3.4 to contrib 2017-11-29 00:46:36 +00:00
crypto Merge OpenSSL 1.0.2m. 2017-11-02 18:04:29 +00:00
etc Fix fetching ntp leapfile after 325256 2017-11-28 20:44:10 +00:00
gnu build-tools: De-special-case the gcc tools build. 2017-10-31 19:02:05 +00:00
include netconfig.h: sync with upstream. 2017-11-27 17:18:31 +00:00
kerberos5 various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
lib Fix missing .Dd bump 2017-12-01 22:52:45 +00:00
libexec libexec: adoption of SPDX licensing ID tags. 2017-11-27 15:25:02 +00:00
release Fix port build flags passed to make(1) after r326315, where 2017-11-30 20:53:57 +00:00
rescue Avoid referencing private lib names directly. 2017-11-10 07:53:02 +00:00
sbin Document gmirror sysctls. 2017-11-30 20:37:12 +00:00
secure secure: chase removal of pkg_install 2017-11-11 07:21:49 +00:00
share Add an mlink for cloudabi32(4). 2017-12-01 05:57:05 +00:00
stand Fix all warnings related to geli and ZFS support on x86. 2017-12-02 00:07:37 +00:00
sys Introduce bwn(4) support for the bhnd(4) bus. 2017-12-02 02:21:27 +00:00
targets Merge ^/head r325842 through r325998. 2017-11-19 12:36:03 +00:00
tests vfs_lookup: Allow PATH_MAX-1 symlinks 2017-11-17 19:25:39 +00:00
tools SPDX: use the Beerware identifier. 2017-11-30 20:33:45 +00:00
usr.bin vmstat: fix style(9) violations and bump WARNS. 2017-12-01 22:38:28 +00:00
usr.sbin SPDX: use the Beerware identifier. 2017-11-30 20:33:45 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint
COPYRIGHT Bump copyright year. 2016-12-31 12:41:42 +00:00
LOCKS
MAINTAINERS Move sys/boot to stand. Fix all references to new location 2017-11-14 23:02:19 +00:00
Makefile Import Lua 3.5.4 2017-11-28 22:55:31 +00:00
Makefile.inc1 Fix for multi-threaded lib32 compat build on amd64. 2017-11-24 14:29:32 +00:00
Makefile.libcompat Fix nested MAKEOBJDIRPREFIX breaking various release/buildworld/toolchain targets. 2017-11-05 00:11:51 +00:00
Makefile.sys.inc Fix top-level targets with read-only OBJDIR. 2017-11-18 20:01:15 +00:00
ObsoleteFiles.inc Fix another typo 2017-11-27 04:24:48 +00:00
README Import Lua 3.5.4 2017-11-28 22:55:31 +00:00
README.md Correct the URLs for both READMEs for tracking src 2017-10-29 20:29:31 +00:00
UPDATING Fill in date. 2017-11-26 04:55:23 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

For copyright information, please see the file COPYRIGHT in this directory (additional copyright information also exists for some sources in this tree - please see the specific source directories for more information).

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7) and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html for more information, including setting make(1) variables.

The buildkernel and installkernel targets build and install the kernel and the modules (see below). Please see the top of the Makefile in this directory for more information on the standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process. See build(7), config(8), and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information.

Note: If you want to build and install the kernel with the buildkernel and installkernel targets, you might need to build world before. More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf sub-directory. GENERIC is the default configuration used in release builds. NOTES contains entries and documentation for all possible devices, not just those commonly used.

Source Roadmap:

bin				System/user commands.

cddl			Various commands and libraries under the Common Development  
				and Distribution License.

contrib			Packages contributed by 3rd parties.

crypto			Cryptography stuff (see crypto/README).

etc				Template files for /etc.

gnu				Various commands and libraries under the GNU Public License.  
				Please see gnu/COPYING* for more information.

include			System include files.

kerberos5		Kerberos5 (Heimdal) package.

lib				System libraries.

libexec			System daemons.

release			Release building Makefile & associated tools.

rescue			Build system for statically linked /rescue utilities.

sbin			System commands.

secure			Cryptographic libraries and commands.

share			Shared resources.

sys				Kernel sources.

tests			Regression tests which can be run by Kyua.  See tests/README
				for additional information.

tools			Utilities for regression testing and miscellaneous tasks.

usr.bin			User commands.

usr.sbin		System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html