#
# 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>.

	  Some user-level drivers for scarab devices which don't require
	  special kernel support are available from
	  <ftp://shadow.cabi.net/pub/Linux/>.

# 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 remvoed 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 IPW_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 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 remvoed from the running kernel whenever you want),
          say M here and read <file:Documentation/modules.txt>.  The module
          will be called ipw2200.ko.

config IPW_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 && (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 && EXPERIMENTAL
      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

