# 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 :
	  <https://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:
	  <https://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.
