# SPDX-License-Identifier: GPL-2.0-only
config HOSTAP
	tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)"
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV
	select CRYPTO
	select CRYPTO_MICHAEL_MIC
	select CRC32
	select LIB80211
	select LIB80211_CRYPT_WEP
	select LIB80211_CRYPT_TKIP
	select LIB80211_CRYPT_CCMP
	help
	Shared driver code for IEEE 802.11b wireless cards based on
	Intersil Prism2/2.5/3 chipset. This driver supports so called
	Host AP mode that allows the card to act as an IEEE 802.11
	access point.

	See <http://hostap.epitest.fi/> for more information about the
	Host AP driver configuration and tools. This site includes
	information and tools (hostapd and wpa_supplicant) for WPA/WPA2
	support.

	This option includes the base Host AP driver code that is shared by
	different hardware models. You will also need to enable support for
	PLX/PCI/CS version of the driver to actually use the driver.

	The driver can be compiled as a module and it will be called
	hostap.

config HOSTAP_FIRMWARE
	bool "Support downloading firmware images with Host AP driver"
	depends on HOSTAP
	help
	Configure Host AP driver to include support for firmware image
	download. This option by itself only enables downloading to the
	volatile memory, i.e. the card RAM. This option is required to
	support cards that don't have firmware in flash, such as D-Link
	DWL-520 rev E and D-Link DWL-650 rev P.

	Firmware image downloading needs a user space tool, prism2_srec.
	It is available from http://hostap.epitest.fi/.

config HOSTAP_FIRMWARE_NVRAM
	bool "Support for non-volatile firmware download"
	depends on HOSTAP_FIRMWARE
	help
	Allow Host AP driver to write firmware images to the non-volatile
	card memory, i.e. flash memory that survives power cycling.
	Enable this option if you want to be able to change card firmware
	permanently.

	Firmware image downloading needs a user space tool, prism2_srec.
	It is available from http://hostap.epitest.fi/.

config HOSTAP_PLX
	tristate "Host AP driver for Prism2/2.5/3 in PLX9052 PCI adaptors"
	depends on PCI && HOSTAP
	help
	Host AP driver's version for Prism2/2.5/3 PC Cards in PLX9052 based
	PCI adaptors.

	"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
	driver and its help text includes more information about the Host AP
	driver.

	The driver can be compiled as a module and will be named
	hostap_plx.

config HOSTAP_PCI
	tristate "Host AP driver for Prism2.5 PCI adaptors"
	depends on PCI && HOSTAP
	help
	Host AP driver's version for Prism2.5 PCI adaptors.

	"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
	driver and its help text includes more information about the Host AP
	driver.

	The driver can be compiled as a module and will be named
	hostap_pci.

config HOSTAP_CS
	tristate "Host AP driver for Prism2/2.5/3 PC Cards"
	depends on PCMCIA && HOSTAP
	help
	Host AP driver's version for Prism2/2.5/3 PC Cards.

	"Host AP support for Prism2/2.5/3 IEEE 802.11b" is required for this
	driver and its help text includes more information about the Host AP
	driver.

	The driver can be compiled as a module and will be named
	hostap_cs.
