# SPDX-License-Identifier: GPL-2.0-only
config B43
	tristate "Broadcom 43xx wireless support (mac80211 stack)"
	depends on (BCMA_POSSIBLE || SSB_POSSIBLE) && MAC80211 && HAS_DMA
	select BCMA if B43_BCMA
	select SSB if B43_SSB
	select FW_LOADER
	select CORDIC
	help
	  b43 is a driver for the Broadcom 43xx series wireless devices.

	  Check "lspci" for something like
	  "Broadcom Corporation BCM43XX 802.11 Wireless LAN Controller"
	  to determine whether you own such a device.

	  This driver supports the new BCM43xx IEEE 802.11G devices, but not
	  the old IEEE 802.11B devices. Old devices are supported by
	  the b43legacy driver.
	  Note that this has nothing to do with the standard that your AccessPoint
	  supports (A, B, G or a combination).
	  IEEE 802.11G devices can talk to IEEE 802.11B AccessPoints.

	  It is safe to include both b43 and b43legacy as the underlying glue
	  layer will automatically load the correct version for your device.

	  This driver uses V4 firmware, which must be installed separately using
	  b43-fwcutter.

	  This driver can be built as a module (recommended) that will be called "b43".
	  If unsure, say M.

config B43_BCMA
	bool

config B43_SSB
	bool

choice
	prompt "Supported bus types"
	depends on B43
	default B43_BUSES_BCMA_AND_SSB

config B43_BUSES_BCMA_AND_SSB
	bool "BCMA and SSB"
	depends on BCMA_POSSIBLE && SSB_POSSIBLE
	select B43_BCMA
	select B43_SSB

config B43_BUSES_BCMA
	bool "BCMA only"
	depends on BCMA_POSSIBLE
	select B43_BCMA

config B43_BUSES_SSB
	bool "SSB only"
	depends on SSB_POSSIBLE
	select B43_SSB

endchoice

# Auto-select SSB PCI-HOST support, if possible
config B43_PCI_AUTOSELECT
	bool
	depends on B43 && SSB_PCIHOST_POSSIBLE
	select SSB_PCIHOST
	select SSB_B43_PCI_BRIDGE
	default y

# Auto-select SSB PCICORE driver, if possible
config B43_PCICORE_AUTOSELECT
	bool
	depends on B43 && SSB_DRIVER_PCICORE_POSSIBLE
	select SSB_DRIVER_PCICORE
	default y

config B43_SDIO
	bool "Broadcom 43xx SDIO device support"
	depends on B43 && B43_SSB && SSB_SDIOHOST_POSSIBLE
	select SSB_SDIOHOST
	help
	  Broadcom 43xx device support for Soft-MAC SDIO devices.

	  With this config option you can drive Soft-MAC b43 cards with a
	  Secure Digital I/O interface.
	  This includes the WLAN daughter card found on the Nintendo Wii
	  video game console.
	  Note that this does not support Broadcom 43xx Full-MAC devices.

	  It's safe to select Y here, even if you don't have a B43 SDIO device.

	  If unsure, say N.

#Data transfers to the device via PIO. We want it as a fallback even
# if we can do DMA.
config B43_BCMA_PIO
	bool
	depends on B43 && B43_BCMA
	select BCMA_BLOCKIO
	default y

config B43_PIO
	bool
	depends on B43 && B43_SSB
	select SSB_BLOCKIO
	default y

config B43_PHY_G
	bool "Support for G-PHY (802.11g) devices"
	depends on B43 && B43_SSB
	default y
	help
	  This PHY type can be found in the following chipsets:
	  PCI: BCM4306, BCM4311, BCM4318
	  SoC: BCM4712, BCM5352E

config B43_PHY_N
	bool "Support for N-PHY (the main 802.11n series) devices"
	depends on B43
	default y
	help
	  This PHY type can be found in the following chipsets:
	  PCI: BCM4321, BCM4322,
	       BCM43222, BCM43224, BCM43225,
	       BCM43131, BCM43217, BCM43227, BCM43228
	  SoC: BCM4716, BCM4717, BCM4718, BCM5356, BCM5357, BCM5358

config B43_PHY_LP
	bool "Support for LP-PHY (low-power 802.11g) devices"
	depends on B43 && B43_SSB
	default y
	help
	  The LP-PHY is a low-power PHY built into some notebooks
	  and embedded devices. It supports 802.11a/b/g
	  (802.11a support is optional, and currently disabled).

config B43_PHY_HT
	bool "Support for HT-PHY (high throughput 802.11n) devices"
	depends on B43 && B43_BCMA
	default y
	help
	  This PHY type with 3x3:3 MIMO can be found in the BCM4331 PCI chipset.

config B43_PHY_LCN
	bool "Support for LCN-PHY devices (BROKEN)"
	depends on B43 && BROKEN
	help
	  Support for the LCN-PHY.

	  Say N, this is BROKEN and crashes driver.

config B43_PHY_AC
	bool "Support for AC-PHY (802.11ac) devices (BROKEN)"
	depends on B43 && B43_BCMA && BROKEN
	help
	  This PHY type can be found in the following chipsets:
	  PCI: BCM4352, BCM4360

	  Say N, this is BROKEN and crashes driver.

# This config option automatically enables b43 LEDS support,
# if it's possible.
config B43_LEDS
	bool
	depends on B43 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = B43)
	default y

# This config option automatically enables b43 HW-RNG support,
# if the HW-RNG core is enabled.
config B43_HWRNG
	bool
	depends on B43 && (HW_RANDOM = y || HW_RANDOM = B43)
	default y

config B43_DEBUG
	bool "Broadcom 43xx debugging"
	depends on B43
	help
	  Broadcom 43xx debugging.

	  This adds additional runtime sanity checks and statistics to the driver.
	  These checks and statistics might be expensive and hurt the runtime
	  performance of your system.
	  This also adds the b43 debugfs interface.

	  Do not enable this, unless you are debugging the driver.

	  Say N, if you are a distributor or user building a release kernel
	  for production use.
	  Only say Y, if you are debugging a problem in the b43 driver sourcecode.
