#
# Wireless LAN device configuration
#

menu "Wireless LAN (non-hamradio)"
	depends on NETDEVICES

config NET_RADIO
	bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions"
	---help---
	  Support for wireless LANs and everything having to do with radio,
	  but not with amateur radio or FM broadcasting.

	  Saying Y here also enables the Wireless Extensions (creates
	  /proc/net/wireless and enables iwconfig access). The Wireless
	  Extension is a generic API allowing a driver to expose to the user
	  space configuration and statistics specific to common Wireless LANs.
	  The beauty of it is that a single set of tool can support all the
	  variations of Wireless LANs, regardless of their type (as long as
	  the driver supports Wireless Extension). Another advantage is that
	  these parameters may be changed on the fly without restarting the
	  driver (or Linux). If you wish to use Wireless Extensions with
	  wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch
	  the tools from
	  <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.

# Note : the cards are obsolete (can't buy them anymore), but the drivers
# are not, as people are still using them...
comment "Obsolete Wireless cards support (pre-802.11)"
	depends on NET_RADIO && (INET || ISA || PCMCIA)

config STRIP
	tristate "STRIP (Metricom starmode radio IP)"
	depends on NET_RADIO && INET
	---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 NET_RADIO && ISA && !64BIT
	---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 NET_RADIO && ISA
	---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.

	  This driver support the ISA version of the WaveLAN card.  A separate
	  driver for the PCMCIA (PC-card) hardware is available in David
	  Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
	  for location).

	  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/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 NET_RADIO && PCMCIA
	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 NET_RADIO && PCMCIA
	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.

comment "Wireless 802.11 Frequency Hopping cards support"
	depends on NET_RADIO && PCMCIA

config PCMCIA_RAYCS
	tristate "Aviator/Raytheon 2.4MHz wireless support"
	depends on NET_RADIO && PCMCIA
	---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.

comment "Wireless 802.11b ISA/PCI cards support"
	depends on NET_RADIO && (ISA || PCI || PPC_PMAC || PCMCIA)

config IPW2100
	tristate "Intel PRO/Wireless 2100 Network Connection"
	depends on NET_RADIO && PCI && IEEE80211
	select FW_LOADER
	---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 /etc/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>.
 
          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/modules.txt>.  The module
          will be called ipw2100.ko.
	
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 NET_RADIO && IEEE80211 && PCI
	select FW_LOADER
	---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 firmare 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>.
 
          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/modules.txt>.  The module
          will be called ipw2200.ko.

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

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

	  /sys/bus/pci/drivers/ipw2200/debug_level

	  This entry will only exist if this option is enabled.

	  To set a value, simply echo an 8-byte hex value to the same file:

	  % echo 0x00000FFO > /sys/bus/pci/drivers/ipw2200/debug_level

	  You can find the list of debug mask values in 
	  drivers/net/wireless/ipw2200.h

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

config AIRO
	tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
	depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)
	---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
	  aquisition (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 NET_RADIO && (PPC_PMAC || PCI || PCMCIA)
	---help---
	  A driver for 802.11b wireless cards based 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
	  PRO/Wireless, 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

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 ATMEL
      tristate "Atmel at76c50x chipset  802.11b support"
      depends on NET_RADIO
      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.

# If Pcmcia is compiled in, offer Pcmcia cards...
comment "Wireless 802.11b Pcmcia/Cardbus cards support"
	depends on NET_RADIO && PCMCIA

config PCMCIA_HERMES
	tristate "Hermes PCMCIA card support"
	depends on NET_RADIO && 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.

	  To use your PC-cards, you will need supporting software from David
	  Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
	  for location).  You also want to check out the PCMCIA-HOWTO,
	  available from <http://www.tldp.org/docs.html#howto>.

	  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 PCMCIA_SPECTRUM
	tristate "Symbol Spectrum24 Trilogy PCMCIA card support"
	depends on NET_RADIO && PCMCIA && HERMES
	---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 AIRO_CS
	tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
	depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
	---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
	  aquisition (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.

	  To use your PC-cards, you will need supporting software from David
	  Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
	  for location).  You also want to check out the PCMCIA-HOWTO,
	  available from <http://www.tldp.org/docs.html#howto>.

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

config PCMCIA_WL3501
      tristate "Planet WL3501 PCMCIA cards"
      depends on NET_RADIO && EXPERIMENTAL && PCMCIA
       ---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.

comment "Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support"
	depends on NET_RADIO && PCI
config PRISM54
	tristate 'Intersil Prism GT/Duette/Indigo PCI/Cardbus' 
	depends on PCI && NET_RADIO && EXPERIMENTAL
	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/modules.txt>.  The module
	  will be called prism54.ko.

source "drivers/net/wireless/hostap/Kconfig"

# yes, this works even when no drivers are selected
config NET_WIRELESS
	bool
	depends on NET_RADIO && (ISA || PCI || PPC_PMAC || PCMCIA)
	default y

endmenu

