# SPDX-License-Identifier: GPL-2.0-only
config HERMES
	tristate "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
	depends on (PPC_PMAC || PCI || PCMCIA)
	depends on CFG80211
	select CFG80211_WEXT_EXPORT
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV
	select FW_LOADER
	select CRYPTO
	select CRYPTO_MICHAEL_MIC
	---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 HERMES_PRISM
	bool "Support Prism 2/2.5 chipset"
	depends on HERMES
	---help---

	  Say Y to enable support for Prism 2 and 2.5 chipsets.  These
	  chipsets are better handled by the hostap driver.  This driver
	  would not support WPA or firmware download for Prism chipset.

	  If you are not sure, say N.

config HERMES_CACHE_FW_ON_INIT
	bool "Cache Hermes firmware on driver initialisation"
	depends on HERMES
	default y
	---help---
	  Say Y to cache any firmware required by the Hermes drivers
	  on startup.  The firmware will remain cached until the
	  driver is unloaded.  The cache uses 64K of RAM.

	  Otherwise load the firmware from userspace as required.  In
	  this case the driver should be unloaded and restarted
	  whenever the firmware is changed.

	  If you are not sure, say Y.

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 && HERMES_PRISM
	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 && HAS_IOPORT_MAP
	---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 && HAS_IOPORT_MAP
	---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 ORINOCO_USB
	tristate "Agere Orinoco USB support"
	depends on USB && HERMES
	select FW_LOADER
	---help---
	  This driver is for USB versions of the Agere Orinoco card.
