#
# Wireless LAN device configuration
#

menu "Wireless LAN"
	depends on !S390

config 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
	  (on the WWW at <http://mosquitonet.stanford.edu/>) 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
	---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
	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
	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.


config 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.4MHz wireless support"
	depends on PCMCIA && WLAN_80211
	select WIRELESS_EXT
	---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 IPW2100
	tristate "Intel PRO/Wireless 2100 Network Connection"
	depends on PCI && WLAN_80211
	select WIRELESS_EXT
	select FW_LOADER
	select IEEE80211
	---help---
          A driver for the Intel PRO/Wireless 2100 Network 
	  Connection 802.11b wireless network adapter.

          See <file:Documentation/networking/README.ipw2100> for information on
          the capabilities currently enabled in this driver and for tips
          for debugging issues and problems.

	  In order to use this driver, you will need a firmware image for it.
          You can obtain the firmware from
	  <http://ipw2100.sf.net/>.  Once you have the firmware image, you 
	  will need to place it in /lib/firmware.

          You will also very likely need the Wireless Tools in order to
          configure your card:

          <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.

          It is recommended that you compile this driver as a module (M)
          rather than built-in (Y). This driver requires firmware at device
          initialization time, and when built-in this typically happens
          before the filesystem is accessible (hence firmware will be
          unavailable and initialization will fail). If you do choose to build
          this driver into your kernel image, you can avoid this problem by
          including the firmware and a firmware loader in an initramfs.
 
config IPW2100_MONITOR
        bool "Enable promiscuous mode"
        depends on IPW2100
        ---help---
	  Enables promiscuous/monitor mode support for the ipw2100 driver.
	  With this feature compiled into the driver, you can switch to 
	  promiscuous mode via the Wireless Tool's Monitor mode.  While in this
	  mode, no packets can be sent.

config IPW2100_DEBUG
	bool "Enable full debugging output in IPW2100 module."
	depends on IPW2100
	---help---
	  This option will enable debug tracing output for the IPW2100.  

	  This will result in the kernel module being ~60k larger.  You can 
	  control which debug output is sent to the kernel log by setting the 
	  value in 

	  /sys/bus/pci/drivers/ipw2100/debug_level

	  This entry will only exist if this option is enabled.

	  If you are not trying to debug or develop the IPW2100 driver, you 
	  most likely want to say N here.

config IPW2200
	tristate "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
	depends on PCI && WLAN_80211
	select WIRELESS_EXT
	select FW_LOADER
	select IEEE80211
	---help---
          A driver for the Intel PRO/Wireless 2200BG and 2915ABG Network
	  Connection adapters. 

          See <file:Documentation/networking/README.ipw2200> for 
	  information on the capabilities currently enabled in this 
	  driver and for tips for debugging issues and problems.

	  In order to use this driver, you will need a firmware image for it.
          You can obtain the firmware from
	  <http://ipw2200.sf.net/>.  See the above referenced README.ipw2200 
	  for information on where to install the firmware images.

          You will also very likely need the Wireless Tools in order to
          configure your card:

          <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.

          It is recommended that you compile this driver as a module (M)
          rather than built-in (Y). This driver requires firmware at device
          initialization time, and when built-in this typically happens
          before the filesystem is accessible (hence firmware will be
          unavailable and initialization will fail). If you do choose to build
          this driver into your kernel image, you can avoid this problem by
          including the firmware and a firmware loader in an initramfs.

config IPW2200_MONITOR
        bool "Enable promiscuous mode"
        depends on IPW2200
        ---help---
	  Enables promiscuous/monitor mode support for the ipw2200 driver.
	  With this feature compiled into the driver, you can switch to 
	  promiscuous mode via the Wireless Tool's Monitor mode.  While in this
	  mode, no packets can be sent.

config IPW2200_RADIOTAP
	bool "Enable radiotap format 802.11 raw packet support"
	depends on IPW2200_MONITOR

config IPW2200_PROMISCUOUS
	bool "Enable creation of a RF radiotap promiscuous interface"
	depends on IPW2200_MONITOR
	select IPW2200_RADIOTAP
	---help---
          Enables the creation of a second interface prefixed 'rtap'. 
          This second interface will provide every received in radiotap
	  format.

          This is useful for performing wireless network analysis while
          maintaining an active association.

          Example usage:

            % modprobe ipw2200 rtap_iface=1
            % ifconfig rtap0 up
            % tethereal -i rtap0

          If you do not specify 'rtap_iface=1' as a module parameter then 
          the rtap interface will not be created and you will need to turn 
          it on via sysfs:
	
            % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface

config IPW2200_QOS
        bool "Enable QoS support"
        depends on IPW2200 && EXPERIMENTAL

config IPW2200_DEBUG
	bool "Enable full debugging output in IPW2200 module."
	depends on IPW2200
	---help---
	  This option will enable low level debug tracing output for IPW2200.

	  Note, normal debug code is already compiled in. This low level
	  debug option enables debug on hot paths (e.g Tx, Rx, ISR) and
	  will result in the kernel module being ~70 larger.  Most users
	  will typically not need this high verbosity debug information.

	  If you are not sure, say N here.

config LIBERTAS
	tristate "Marvell 8xxx Libertas WLAN driver support"
	depends on WLAN_80211
	select WIRELESS_EXT
	select IEEE80211
	select FW_LOADER
	---help---
	  A library for Marvell Libertas 8xxx devices.

config LIBERTAS_USB
	tristate "Marvell Libertas 8388 USB 802.11b/g cards"
	depends on LIBERTAS && USB
	---help---
	  A driver for Marvell Libertas 8388 USB devices.

config LIBERTAS_CS
	tristate "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
	depends on LIBERTAS && PCMCIA && EXPERIMENTAL
	select FW_LOADER
	---help---
	  A driver for Marvell Libertas 8385 CompactFlash devices.

config LIBERTAS_SDIO
	tristate "Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards"
	depends on LIBERTAS && MMC
	---help---
	  A driver for Marvell Libertas 8385 and 8686 SDIO devices.

config LIBERTAS_DEBUG
	bool "Enable full debugging output in the Libertas module."
	depends on LIBERTAS
	---help---
	  Debugging support.

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
	---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 HERMES
	tristate "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
	depends on (PPC_PMAC || PCI || PCMCIA) && WLAN_80211
	select WIRELESS_EXT
	---help---
	  A driver for 802.11b wireless cards based on the "Hermes" or
	  Intersil HFA384x (Prism 2) MAC controller.  This includes the vast
	  majority of the PCMCIA 802.11b cards (which are nearly all rebadges)
	  - except for the Cisco/Aironet cards.  Cards supported include the
	  Apple Airport (not a PCMCIA card), WavelanIEEE/Orinoco,
	  Cabletron/EnteraSys Roamabout, ELSA AirLancer, MELCO Buffalo, Avaya,
	  IBM High Rate Wireless, Farralon Syyline, Samsung MagicLAN, Netgear
	  MA401, LinkSys WPC-11, D-Link DWL-650, 3Com AirConnect, Intel
	  IPW2011, and Symbol Spectrum24 High Rate amongst others.

	  This option includes the guts of the driver, but in order to
	  actually use a card you will also need to enable support for PCMCIA
	  Hermes cards, PLX9052 based PCI adaptors or the Apple Airport below.

	  You will also very likely also need the Wireless Tools in order to
	  configure your card and that /etc/pcmcia/wireless.opts works :
	  <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>

config APPLE_AIRPORT
	tristate "Apple Airport support (built-in)"
	depends on PPC_PMAC && HERMES
	help
	  Say Y here to support the Airport 802.11b wireless Ethernet hardware
	  built into the Macintosh iBook and other recent PowerPC-based
	  Macintosh machines. This is essentially a Lucent Orinoco card with 
	  a non-standard interface.

	  This driver does not support the Airport Extreme (802.11b/g). Use
	  the BCM43xx driver for Airport Extreme cards.

config PLX_HERMES
	tristate "Hermes in PLX9052 based PCI adaptor support (Netgear MA301 etc.)"
	depends on PCI && HERMES
	help
	  Enable support for PCMCIA cards supported by the "Hermes" (aka
	  orinoco) driver when used in PLX9052 based PCI adaptors.  These
	  adaptors are not a full PCMCIA controller but act as a more limited
	  PCI <-> PCMCIA bridge.  Several vendors sell such adaptors so that
	  802.11b PCMCIA cards can be used in desktop machines.  The Netgear
	  MA301 is such an adaptor.

config TMD_HERMES
	tristate "Hermes in TMD7160 based PCI adaptor support"
	depends on PCI && HERMES
	help
	  Enable support for PCMCIA cards supported by the "Hermes" (aka
	  orinoco) driver when used in TMD7160 based PCI adaptors.  These
	  adaptors are not a full PCMCIA controller but act as a more limited
	  PCI <-> PCMCIA bridge.  Several vendors sell such adaptors so that
	  802.11b PCMCIA cards can be used in desktop machines.

config NORTEL_HERMES
	tristate "Nortel emobility PCI adaptor support"
	depends on PCI && HERMES
	help
	  Enable support for PCMCIA cards supported by the "Hermes" (aka
	  orinoco) driver when used in Nortel emobility PCI adaptors.  These
	  adaptors are not full PCMCIA controllers, but act as a more limited
	  PCI <-> PCMCIA bridge.

config PCI_HERMES
	tristate "Prism 2.5 PCI 802.11b adaptor support"
	depends on PCI && HERMES
	help
	  Enable support for PCI and mini-PCI 802.11b wireless NICs based on
	  the Prism 2.5 chipset.  These are true PCI cards, not the 802.11b
	  PCMCIA cards bundled with PCI<->PCMCIA adaptors which are also
	  common.  Some of the built-in wireless adaptors in laptops are of
	  this variety.

config PCMCIA_HERMES
	tristate "Hermes PCMCIA card support"
	depends on PCMCIA && HERMES
	---help---
	  A driver for "Hermes" chipset based PCMCIA wireless adaptors, such
	  as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/
	  EnteraSys RoamAbout 802.11, ELSA Airlancer, Melco Buffalo and
	  others).  It should also be usable on various Prism II based cards
	  such as the Linksys, D-Link and Farallon Skyline.  It should also
	  work on Symbol cards such as the 3Com AirConnect and Ericsson WLAN.

	  You will very likely need the Wireless Tools in order to
	  configure your card and that /etc/pcmcia/wireless.opts works:
	  <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.

config PCMCIA_SPECTRUM
	tristate "Symbol Spectrum24 Trilogy PCMCIA card support"
	depends on PCMCIA && HERMES
	select FW_LOADER
	---help---

	  This is a driver for 802.11b cards using RAM-loadable Symbol
	  firmware, such as Symbol Wireless Networker LA4100, CompactFlash
	  cards by Socket Communications and Intel PRO/Wireless 2011B.

	  This driver requires firmware download on startup.  Utilities
	  for downloading Symbol firmware are available at
	  <http://sourceforge.net/projects/orinoco/>

config ATMEL
      tristate "Atmel at76c50x chipset  802.11b support"
      depends on (PCI || PCMCIA) && WLAN_80211
      select WIRELESS_EXT
      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 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
       ---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' 
	depends on PCI && EXPERIMENTAL && WLAN_80211
	select WIRELESS_EXT
	select FW_LOADER
	---help---
	  Enable PCI and Cardbus support for the following chipset based cards:

	  ISL3880 - Prism GT            802.11 b/g
	  ISL3877 - Prism Indigo        802.11 a
	  ISL3890 - Prism Duette        802.11 a/b/g
	  
	  For a complete list of supported cards visit <http://prism54.org>.
	  Here is the latest confirmed list of supported cards:

	  3com OfficeConnect 11g Cardbus Card aka 3CRWE154G72 (version 1)
	  Allnet ALL0271 PCI Card
	  Compex WL54G Cardbus Card
	  Corega CG-WLCB54GT Cardbus Card
	  D-Link Air Plus Xtreme G A1 Cardbus Card aka DWL-g650
	  I-O Data WN-G54/CB Cardbus Card
	  Kobishi XG-300 aka Z-Com Cardbus Card
	  Netgear WG511 Cardbus Card
	  Ovislink WL-5400PCI PCI Card
	  Peabird WLG-PCI PCI Card
	  Sitecom WL-100i Cardbus Card
	  Sitecom WL-110i PCI Card
	  SMC2802W -    EZ Connect g 2.4GHz 54 Mbps Wireless PCI Card
	  SMC2835W -    EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card
	  SMC2835W-V2 - EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card
	  Z-Com XG-900 PCI Card
	  Zyxel G-100 Cardbus Card

	  If you enable this you will need a firmware file as well.
	  You will need to copy this to /usr/lib/hotplug/firmware/isl3890.
	  You can get this non-GPL'd firmware file from the Prism54 project page:
	  <http://prism54.org>
	  You will also need the /etc/hotplug/firmware.agent script from
	  a current hotplug package.

	  Note: You need a motherboard with DMA support to use any of these cards 
	  
	  If you want to compile the driver as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.txt>.
	  The module will be called prism54.ko.

config USB_ZD1201
	tristate "USB ZD1201 based Wireless device support"
	depends on USB && WLAN_80211
	select WIRELESS_EXT
	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
	select USB_USBNET
	select USB_NET_CDCETHER
	select USB_NET_RNDIS_HOST
	select WIRELESS_EXT
	---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 USB support"
	depends on MAC80211 && USB && WLAN_80211 && EXPERIMENTAL
	select EEPROM_93CX6
	---help---
	  This is a driver for RTL8187 based cards.
	  These are USB based chips found in cards such as:

	  Netgear WG111v2

	  Thanks to Realtek for their support!

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 P54_COMMON
	tristate "Softmac Prism54 support"
	depends on MAC80211 && WLAN_80211 && FW_LOADER && EXPERIMENTAL
	---help---
	  This is common code for isl38xx based cards.
	  This module does nothing by itself - the USB/PCI frontends
	  also need to be enabled in order to support any devices.

	  These devices require softmac firmware which can be found at
	  http://prism54.org/

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

config P54_USB
	tristate "Prism54 USB support"
	depends on P54_COMMON && USB
	select CRC32
	---help---
	  This driver is for USB isl38xx based wireless cards.
	  These are USB based adapters found in devices such as:

	  3COM 3CRWE254G72
	  SMC 2862W-G
	  Accton 802.11g WN4501 USB
	  Siemens Gigaset USB
	  Netgear WG121
	  Netgear WG111
	  Medion 40900, Roper Europe
	  Shuttle PN15, Airvast WM168g, IOGear GWU513
	  Linksys WUSB54G
	  Linksys WUSB54G Portable
	  DLink DWL-G120 Spinnaker
	  DLink DWL-G122
	  Belkin F5D7050 ver 1000
	  Cohiba Proto board
	  SMC 2862W-G version 2
	  U.S. Robotics U5 802.11g Adapter
	  FUJITSU E-5400 USB D1700
	  Sagem XG703A
	  DLink DWL-G120 Cohiba
	  Spinnaker Proto board
	  Linksys WUSB54AG
	  Inventel UR054G
	  Spinnaker DUT

	  These devices require softmac firmware which can be found at
	  http://prism54.org/

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

config P54_PCI
	tristate "Prism54 PCI support"
	depends on P54_COMMON && PCI
	---help---
	  This driver is for PCI isl38xx based wireless cards.
	  This driver supports most devices that are supported by the
	  fullmac prism54 driver plus many devices which are not
	  supported by the fullmac driver/firmware.

	  This driver requires softmac firmware which can be found at
	  http://prism54.org/

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

source "drivers/net/wireless/ath5k/Kconfig"
source "drivers/net/wireless/iwlwifi/Kconfig"
source "drivers/net/wireless/hostap/Kconfig"
source "drivers/net/wireless/bcm43xx/Kconfig"
source "drivers/net/wireless/b43/Kconfig"
source "drivers/net/wireless/b43legacy/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"
source "drivers/net/wireless/rt2x00/Kconfig"

endmenu
