#
# Wireless LAN device configuration
#

menuconfig WLAN
	bool "Wireless LAN"
	depends on !S390
	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

menuconfig WLAN_PRE80211
	bool "Wireless LAN (pre-802.11)"
	depends on NETDEVICES
	---help---
	  Say Y if you have any pre-802.11 wireless LAN hardware.

	  This option does not affect the kernel build, it only
	  lets you choose drivers.

config STRIP
	tristate "STRIP (Metricom starmode radio IP)"
	depends on INET && WLAN_PRE80211
	select WIRELESS_EXT
	---help---
	  Say Y if you have a Metricom radio and intend to use Starmode Radio
	  IP. STRIP is a radio protocol developed for the MosquitoNet project
	  to send Internet traffic using Metricom radios.  Metricom radios are
	  small, battery powered, 100kbit/sec packet radio transceivers, about
	  the size and weight of a cellular telephone. (You may also have heard
	  them called "Metricom modems" but we avoid the term "modem" because
	  it misleads many people into thinking that you can plug a Metricom
	  modem into a phone line and use it as a modem.)

	  You can use STRIP on any Linux machine with a serial port, although
	  it is obviously most useful for people with laptop computers. If you
	  think you might get a Metricom radio in the future, there is no harm
	  in saying Y to STRIP now, except that it makes the kernel a bit
	  bigger.

	  To compile this as a module, choose M here: the module will be
	  called strip.

config ARLAN
	tristate "Aironet Arlan 655 & IC2200 DS support"
	depends on ISA && !64BIT && WLAN_PRE80211
	select WIRELESS_EXT
	---help---
	  Aironet makes Arlan, a class of wireless LAN adapters. These use the
	  www.Telxon.com chip, which is also used on several similar cards.
	  This driver is tested on the 655 and IC2200 series cards. Look at
	  <http://www.ylenurme.ee/~elmer/655/> for the latest information.

	  The driver is built as two modules, arlan and arlan-proc. The latter
	  is the /proc interface and is not needed most of time.

	  On some computers the card ends up in non-valid state after some
	  time. Use a ping-reset script to clear it.

config WAVELAN
	tristate "AT&T/Lucent old WaveLAN & DEC RoamAbout DS ISA support"
	depends on ISA && WLAN_PRE80211
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV
	---help---
	  The Lucent WaveLAN (formerly NCR and AT&T; or DEC RoamAbout DS) is
	  a Radio LAN (wireless Ethernet-like Local Area Network) using the
	  radio frequencies 900 MHz and 2.4 GHz.

	  If you want to use an ISA WaveLAN card under Linux, say Y and read
	  the Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. Some more specific
	  information is contained in
	  <file:Documentation/networking/wavelan.txt> and in the source code
	  <file:drivers/net/wireless/wavelan.p.h>.

	  You will also need the wireless tools package available from
	  <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
	  Please read the man pages contained therein.

	  To compile this driver as a module, choose M here: the module will be
	  called wavelan.

config PCMCIA_WAVELAN
	tristate "AT&T/Lucent old WaveLAN Pcmcia wireless support"
	depends on PCMCIA && WLAN_PRE80211
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV
	help
	  Say Y here if you intend to attach an AT&T/Lucent Wavelan PCMCIA
	  (PC-card) wireless Ethernet networking card to your computer.  This
	  driver is for the non-IEEE-802.11 Wavelan cards.

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

config PCMCIA_NETWAVE
	tristate "Xircom Netwave AirSurfer Pcmcia wireless support"
	depends on PCMCIA && WLAN_PRE80211
	select WIRELESS_EXT
	select WEXT_PRIV
	help
	  Say Y here if you intend to attach this type of PCMCIA (PC-card)
	  wireless Ethernet networking card to your computer.

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


menuconfig WLAN_80211
	bool "Wireless LAN (IEEE 802.11)"
	depends on NETDEVICES
	---help---
	  Say Y if you have any 802.11 wireless LAN hardware.

	  This option does not affect the kernel build, it only
	  lets you choose drivers.

config PCMCIA_RAYCS
	tristate "Aviator/Raytheon 2.4GHz wireless support"
	depends on PCMCIA && WLAN_80211
	select WIRELESS_EXT
	select WEXT_SPY
	select 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 LIBERTAS_THINFIRM
	tristate "Marvell 8xxx Libertas WLAN driver support with thin firmware"
	depends on WLAN_80211 && MAC80211
	select FW_LOADER
	---help---
	  A library for Marvell Libertas 8xxx devices using thinfirm.

config LIBERTAS_THINFIRM_USB
	tristate "Marvell Libertas 8388 USB 802.11b/g cards with thin firmware"
	depends on LIBERTAS_THINFIRM && USB
	---help---
	  A driver for Marvell Libertas 8388 USB devices using thinfirm.

config AIRO
	tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
	depends on ISA_DMA_API && WLAN_80211 && (PCI || BROKEN)
	select WIRELESS_EXT
	select CRYPTO
	select WEXT_SPY
	select WEXT_PRIV
	---help---
	  This is the standard Linux driver to support Cisco/Aironet ISA and
	  PCI 802.11 wireless cards.
	  It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
	  - with or without encryption) as well as card before the Cisco
	  acquisition (Aironet 4500, Aironet 4800, Aironet 4800B).

	  This driver support both the standard Linux Wireless Extensions
	  and Cisco proprietary API, so both the Linux Wireless Tools and the
	  Cisco Linux utilities can be used to configure the card.

	  The driver can be compiled as a module and will be named "airo".

config ATMEL
      tristate "Atmel at76c50x chipset  802.11b support"
      depends on (PCI || PCMCIA) && WLAN_80211
      select WIRELESS_EXT
      select WEXT_PRIV
      select FW_LOADER
      select CRC32
       ---help---
        A driver 802.11b wireless cards based on the Atmel fast-vnet
        chips. This driver supports standard Linux wireless extensions.

        Many  cards based on this chipset do not have flash memory
        and need their firmware loaded at start-up. If yours is
        one of these, you will need to provide a firmware image
        to be loaded into the card by the driver. The Atmel
        firmware package can be downloaded from
        <http://www.thekelleys.org.uk/atmel>

config PCI_ATMEL
      tristate "Atmel at76c506 PCI cards"
      depends on ATMEL && PCI
       ---help---
        Enable support for PCI and mini-PCI cards containing the
        Atmel at76c506 chip.

config PCMCIA_ATMEL
	tristate "Atmel at76c502/at76c504 PCMCIA cards"
	depends on ATMEL && PCMCIA
	select WIRELESS_EXT
	select FW_LOADER
	select CRC32
	---help---
	  Enable support for PCMCIA cards containing the
	  Atmel at76c502 and at76c504 chips.

config AT76C50X_USB
        tristate "Atmel at76c503/at76c505/at76c505a USB cards"
        depends on MAC80211 && WLAN_80211 && USB
        select FW_LOADER
        ---help---
          Enable support for USB Wireless devices using Atmel at76c503,
          at76c505 or at76c505a chips.

config AIRO_CS
	tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
	depends on PCMCIA && (BROKEN || !M32R) && WLAN_80211
	select WIRELESS_EXT
	select CRYPTO
	select CRYPTO_AES
	---help---
	  This is the standard Linux driver to support Cisco/Aironet PCMCIA
	  802.11 wireless cards.  This driver is the same as the Aironet
	  driver part of the Linux Pcmcia package.
	  It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
	  - with or without encryption) as well as card before the Cisco
	  acquisition (Aironet 4500, Aironet 4800, Aironet 4800B). It also
	  supports OEM of Cisco such as the DELL TrueMobile 4800 and Xircom
	  802.11b cards.

	  This driver support both the standard Linux Wireless Extensions
	  and Cisco proprietary API, so both the Linux Wireless Tools and the
	  Cisco Linux utilities can be used to configure the card.

config PCMCIA_WL3501
	tristate "Planet WL3501 PCMCIA cards"
	depends on EXPERIMENTAL && PCMCIA && WLAN_80211
	select WIRELESS_EXT
	select 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 PRISM54
	tristate 'Intersil Prism GT/Duette/Indigo PCI/Cardbus (DEPRECATED)'
	depends on PCI && EXPERIMENTAL && WLAN_80211
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV
	select FW_LOADER
	---help---
	  This enables support for FullMAC PCI/Cardbus prism54 devices. This
	  driver is now deprecated in favor for the SoftMAC driver, p54pci.
	  p54pci supports FullMAC PCI/Cardbus devices as well. For details on
	  the scheduled removal of this driver on the kernel see the feature
	  removal schedule:

	  Documentation/feature-removal-schedule.txt

	  For more information refer to the p54 wiki:

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

	  Note: You need a motherboard with DMA support to use any of these cards

	  When built as module you get the module prism54

config USB_ZD1201
	tristate "USB ZD1201 based Wireless device support"
	depends on USB && WLAN_80211
	select WIRELESS_EXT
	select WEXT_PRIV
	select FW_LOADER
	---help---
	  Say Y if you want to use wireless LAN adapters based on the ZyDAS
	  ZD1201 chip.

	  This driver makes the adapter appear as a normal Ethernet interface,
	  typically on wlan0.

	  The zd1201 device requires external firmware to be loaded.
	  This can be found at http://linux-lc100020.sourceforge.net/

	  To compile this driver as a module, choose M here: the
	  module will be called zd1201.

config USB_NET_RNDIS_WLAN
	tristate "Wireless RNDIS USB support"
	depends on USB && WLAN_80211 && EXPERIMENTAL
	depends on CFG80211
	select USB_USBNET
	select USB_NET_CDCETHER
	select 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.

config RTL8180
	tristate "Realtek 8180/8185 PCI support"
	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
	select EEPROM_93CX6
	---help---
	  This is a driver for RTL8180 and RTL8185 based cards.
	  These are PCI based chips found in cards such as:

	  (RTL8185 802.11g)
	  A-Link WL54PC

	  (RTL8180 802.11b)
	  Belkin F5D6020 v3
	  Belkin F5D6020 v3
	  Dlink DWL-610
	  Dlink DWL-510
	  Netgear MA521
	  Level-One WPC-0101
	  Acer Aspire 1357 LMi
	  VCTnet PC-11B1
	  Ovislink AirLive WL-1120PCM
	  Mentor WL-PCI
	  Linksys WPC11 v4
	  TrendNET TEW-288PI
	  D-Link DWL-520 Rev D
	  Repotec RP-WP7126
	  TP-Link TL-WN250/251
	  Zonet ZEW1000
	  Longshine LCS-8031-R
	  HomeLine HLW-PCC200
	  GigaFast WF721-AEX
	  Planet WL-3553
	  Encore ENLWI-PCI1-NT
	  TrendNET TEW-266PC
	  Gigabyte GN-WLMR101
	  Siemens-fujitsu Amilo D1840W
	  Edimax EW-7126
	  PheeNet WL-11PCIR
	  Tonze PC-2100T
	  Planet WL-8303
	  Dlink DWL-650 v M1
	  Edimax EW-7106
	  Q-Tec 770WC
	  Topcom Skyr@cer 4011b
	  Roper FreeLan 802.11b (edition 2004)
	  Wistron Neweb Corp CB-200B
	  Pentagram HorNET
	  QTec 775WC
	  TwinMOS Booming B Series
	  Micronet SP906BB
	  Sweex LC700010
	  Surecom EP-9428
	  Safecom SWLCR-1100

	  Thanks to Realtek for their support!

config RTL8187
	tristate "Realtek 8187 and 8187B USB support"
	depends on MAC80211 && USB && WLAN_80211
	select EEPROM_93CX6
	---help---
	  This is a driver for RTL8187 and RTL8187B based cards.
	  These are USB based chips found in devices such as:

	  Netgear WG111v2
	  Level 1 WNC-0301USB
	  Micronet SP907GK V5
	  Encore ENUWI-G2
	  Trendnet TEW-424UB
	  ASUS P5B Deluxe/P5K Premium motherboards
	  Toshiba Satellite Pro series of laptops
	  Asus Wireless Link
	  Linksys WUSB54GC-EU v2
	    (v1 = rt73usb; v3 is rt2070-based,
	     use staging/rt3070 or try rt2800usb)

	  Thanks to Realtek for their support!

# If possible, automatically enable LEDs for RTL8187.

config RTL8187_LEDS
	bool
	depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187)
	default y

config ADM8211
	tristate "ADMtek ADM8211 support"
	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
	select CRC32
	select EEPROM_93CX6
	---help---
	  This driver is for ADM8211A, ADM8211B, and ADM8211C based cards.
	  These are PCI/mini-PCI/Cardbus 802.11b chips found in cards such as:

	  Xterasys Cardbus XN-2411b
	  Blitz NetWave Point PC
	  TrendNet 221pc
	  Belkin F5D6001
	  SMC 2635W
	  Linksys WPC11 v1
	  Fiberline FL-WL-200X
	  3com Office Connect (3CRSHPW796)
	  Corega WLPCIB-11
	  SMC 2602W V2 EU
	  D-Link DWL-520 Revision C

	  However, some of these cards have been replaced with other chips
	  like the RTL8180L (Xterasys Cardbus XN-2411b, Belkin F5D6001) or
	  the Ralink RT2400 (SMC2635W) without a model number change.

	  Thanks to Infineon-ADMtek for their support of this driver.

config MAC80211_HWSIM
	tristate "Simulated radio testing tool for mac80211"
	depends on MAC80211 && WLAN_80211
	---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 MWL8K
	tristate "Marvell 88W8xxx PCI/PCIe Wireless support"
	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
	---help---
	  This driver supports Marvell TOPDOG 802.11 wireless cards.

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

source "drivers/net/wireless/ath/Kconfig"
source "drivers/net/wireless/b43/Kconfig"
source "drivers/net/wireless/b43legacy/Kconfig"
source "drivers/net/wireless/hostap/Kconfig"
source "drivers/net/wireless/ipw2x00/Kconfig"
source "drivers/net/wireless/iwlwifi/Kconfig"
source "drivers/net/wireless/iwmc3200wifi/Kconfig"
source "drivers/net/wireless/libertas/Kconfig"
source "drivers/net/wireless/orinoco/Kconfig"
source "drivers/net/wireless/p54/Kconfig"
source "drivers/net/wireless/rt2x00/Kconfig"
source "drivers/net/wireless/wl12xx/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"

endif # WLAN
