#
# Wireless LAN device configuration
#

menuconfig WLAN
	bool "Wireless LAN"
	depends on !S390
	depends on NET
	select WIRELESS
	default y
	---help---
	  This section contains all the pre 802.11 and 802.11 wireless
	  device drivers. For a complete list of drivers and documentation
	  on them refer to the wireless wiki:

	  http://wireless.kernel.org/en/users/Drivers

if WLAN

config WIRELESS_WDS
	bool "mac80211-based legacy WDS support" if EXPERT
	help
	  This option enables the deprecated WDS support, the newer
	  mac80211-based 4-addr AP/client support supersedes it with
	  a much better feature set (HT, VHT, ...)

	  We plan to remove this option and code, so if you find
	  that you have to enable it, please let us know on the
	  linux-wireless@vger.kernel.org mailing list, so we can
	  help you migrate to 4-addr AP/client (or, if it's really
	  necessary, give up on our plan of removing it).

#source "drivers/net/wireless/admtek/Kconfig"
#source "drivers/net/wireless/ath/Kconfig"
#source "drivers/net/wireless/atmel/Kconfig"
source "drivers/net/wireless/broadcom/Kconfig"
#source "drivers/net/wireless/cisco/Kconfig"
#source "drivers/net/wireless/intel/Kconfig"
#source "drivers/net/wireless/intersil/Kconfig"
#source "drivers/net/wireless/marvell/Kconfig"
#source "drivers/net/wireless/mediatek/Kconfig"
#source "drivers/net/wireless/ralink/Kconfig"
#source "drivers/net/wireless/realtek/Kconfig"
#source "drivers/net/wireless/rsi/Kconfig"
#source "drivers/net/wireless/st/Kconfig"
#source "drivers/net/wireless/ti/Kconfig"
#source "drivers/net/wireless/zydas/Kconfig"

config PCMCIA_RAYCS
	depends on n
	tristate "Aviator/Raytheon 2.4GHz wireless support"
	depends on m
	depends on PCMCIA
	depends on WIRELESS_EXT
	depends on WEXT_SPY
	depends on WEXT_PRIV
	---help---
	  Say Y here if you intend to attach an Aviator/Raytheon PCMCIA
	  (PC-card) wireless Ethernet networking card to your computer.
	  Please read the file <file:Documentation/networking/ray_cs.txt> for
	  details.

	  To compile this driver as a module, choose M here: the module will be
	  called ray_cs.  If unsure, say N.

config PCMCIA_WL3501
	depends on n
	tristate "Planet WL3501 PCMCIA cards"
	depends on m
	depends on CFG80211 && PCMCIA
	depends on WIRELESS_EXT
	depends on WEXT_SPY
	help
	  A driver for WL3501 PCMCIA 802.11 wireless cards made by Planet.
	  It has basic support for Linux wireless extensions and initial
	  micro support for ethtool.

config MAC80211_HWSIM
	depends on n
	tristate "Simulated radio testing tool for mac80211"
	depends on m
	depends on MAC80211
	---help---
	  This driver is a developer testing tool that can be used to test
	  IEEE 802.11 networking stack (mac80211) functionality. This is not
	  needed for normal wireless LAN usage and is only for testing. See
	  Documentation/networking/mac80211_hwsim for more information on how
	  to use this tool.

	  To compile this driver as a module, choose M here: the module will be
	  called mac80211_hwsim.  If unsure, say N.

config USB_NET_RNDIS_WLAN
	depends on n
	tristate "Wireless RNDIS USB support"
	depends on m
	depends on USB
	depends on CFG80211
	depends on USB_NET_DRIVERS
	depends on USB_USBNET
	depends on USB_NET_CDCETHER
	depends on USB_NET_RNDIS_HOST
	---help---
	  This is a driver for wireless RNDIS devices.
	  These are USB based adapters found in devices such as:

	  Buffalo WLI-U2-KG125S
	  U.S. Robotics USR5421
	  Belkin F5D7051
	  Linksys WUSB54GSv2
	  Linksys WUSB54GSC
	  Asus WL169gE
	  Eminent EM4045
	  BT Voyager 1055
	  Linksys WUSB54GSv1
	  U.S. Robotics USR5420
	  BUFFALO WLI-USB-G54

	  All of these devices are based on Broadcom 4320 chip which is the
	  only wireless RNDIS chip known to date.

	  If you choose to build a module, it'll be called rndis_wlan.

endif # WLAN
