config B43LEGACY
	tristate "Broadcom 43xx-legacy wireless support (mac80211 stack)"
	depends on SSB_POSSIBLE && MAC80211 && WLAN_80211
	select SSB
	select FW_LOADER
	select HW_RANDOM
	---help---
	  b43legacy is a driver for 802.11b devices from Broadcom (BCM4301 and
	  BCM4303) and early model 802.11g chips (BCM4306 Ver. 2) used in the
	  Linksys WPC54G V1 PCMCIA devices.

	  Newer 802.11g and 802.11a devices need b43.

	  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 V3 firmware, which must be installed separately using
	  b43-fwcutter.

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

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

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

# LED support
# This config option automatically enables b43legacy LEDS support,
# if it's possible.
config B43LEGACY_LEDS
	bool
	depends on B43LEGACY && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = B43LEGACY)
	default y

# RFKILL support
# This config option automatically enables b43legacy RFKILL support,
# if it's possible.
config B43LEGACY_RFKILL
	bool
	depends on B43LEGACY && (RFKILL = y || RFKILL = B43LEGACY) && RFKILL_INPUT && (INPUT_POLLDEV = y || INPUT_POLLDEV = B43LEGACY)
	default y

config B43LEGACY_DEBUG
	bool "Broadcom 43xx-legacy debugging"
	depends on B43LEGACY
	default y
	---help---
	  Say Y, because this information will help you get the driver running.
	  This option generates a minimum of log output.

config B43LEGACY_DMA
	bool
	depends on B43LEGACY

config B43LEGACY_PIO
	bool
	depends on B43LEGACY

choice
	prompt "Broadcom 43xx-legacy data transfer mode"
	depends on B43LEGACY
	default B43LEGACY_DMA_AND_PIO_MODE

config B43LEGACY_DMA_AND_PIO_MODE
	bool "DMA + PIO"
	select B43LEGACY_DMA
	select B43LEGACY_PIO
	---help---
	  Include both, Direct Memory Access (DMA) and Programmed I/O (PIO)
	  data transfer modes. The mode actually used is selectable through
	  the module parameter "pio". With pio=0 as a module parameter, the
	  default DMA is used, otherwise PIO is used.

	  If unsure, choose this option.

config B43LEGACY_DMA_MODE
	bool "DMA (Direct Memory Access) only"
	select B43LEGACY_DMA
	---help---
	  Only include Direct Memory Access (DMA).
	  This reduces the size of the driver module, by omitting the PIO code.

config B43LEGACY_PIO_MODE
	bool "PIO (Programmed I/O) only"
	select B43LEGACY_PIO
	---help---
	  Only include Programmed I/O (PIO).
	  This reduces the size of the driver module, by omitting the DMA code.
	  Please note that PIO transfers are slow (compared to DMA).

	  Also note that not all devices of the b43legacy series support PIO.

	  You should use PIO only if DMA does not work for you.

endchoice
