# SPDX-License-Identifier: ISC
config ATH9K_HW
	tristate
config ATH9K_COMMON
	tristate
	select ATH_COMMON
config ATH9K_COMMON_DEBUG
	bool
config ATH9K_DFS_DEBUGFS
	def_bool y
	depends on ATH9K_DEBUGFS && ATH9K_DFS_CERTIFIED

config ATH9K_BTCOEX_SUPPORT
	bool "Atheros bluetooth coexistence support"
	depends on (ATH9K || ATH9K_HTC)
	default y
	help
	  Say Y, if you want to use the ath9k/ath9k_htc radios together with
	  Bluetooth modules in the same system.

config ATH9K
	tristate "Atheros 802.11n wireless cards support"
	depends on MAC80211 && HAS_DMA
	select MAC80211_LEDS if LEDS_CLASS=y || LEDS_CLASS=MAC80211
	select ATH9K_HW
	select ATH9K_COMMON
	help
	  This module adds support for wireless adapters based on
	  Atheros IEEE 802.11n AR5008, AR9001 and AR9002 family
	  of chipsets. For a specific list of supported external
	  cards, laptops that already ship with these cards and
	  APs that come with these cards refer to ath9k wiki
	  products page:

	  https://wireless.wiki.kernel.org/en/users/Drivers/ath9k/products

	  If you choose to build a module, it'll be called ath9k.

config ATH9K_PCI
	bool "Atheros ath9k PCI/PCIe bus support"
	default y
	depends on ATH9K && PCI
	help
	  This option enables the PCI bus support in ath9k.

	  Say Y, if you have a compatible PCI/PCIe wireless card.

config ATH9K_AHB
	bool "Atheros ath9k AHB bus support"
	depends on ATH9K
	default n
	help
	  This option enables the AHB bus support in ath9k.

	  Say Y, if you have a SoC with a compatible built-in
	  wireless MAC. Say N if unsure.

config ATH9K_DEBUGFS
	bool "Atheros ath9k debugging"
	depends on ATH9K && DEBUG_FS
	select MAC80211_DEBUGFS
	select ATH9K_COMMON_DEBUG
	help
	  Say Y, if you need access to ath9k's statistics for
	  interrupts, rate control, etc.

	  Also required for changing debug message flags at run time and for
	  TX99.

config ATH9K_STATION_STATISTICS
	bool "Detailed station statistics"
	depends on ATH9K && ATH9K_DEBUGFS && DEBUG_FS
	select MAC80211_DEBUGFS
	default n
	help
	  This option enables detailed statistics for association stations.

config ATH9K_TX99
	bool "Atheros ath9k TX99 testing support"
	depends on ATH9K_DEBUGFS && CFG80211_CERTIFICATION_ONUS
	default n
	help
	  Say N. This should only be enabled on systems undergoing
	  certification testing and evaluation in a controlled environment.
	  Enabling this will only enable TX99 support, all other modes of
	  operation will be disabled.

	  TX99 support enables Specific Absorption Rate (SAR) testing.
	  SAR is the unit of measurement for the amount of radio frequency(RF)
	  absorbed by the body when using a wireless device. The RF exposure
	  limits used are expressed in the terms of SAR, which is a measure
	  of the electric and magnetic field strength and power density for
	  transmitters operating at frequencies from 300 kHz to 100 GHz.
	  Regulatory bodies around the world require that wireless device
	  be evaluated to meet the RF exposure limits set forth in the
	  governmental SAR regulations.

config ATH9K_DFS_CERTIFIED
	bool "Atheros DFS support for certified platforms"
	depends on ATH9K && CFG80211_CERTIFICATION_ONUS
	default n
	help
	  This option enables DFS support for initiating radiation on
	  ath9k. There is no way to dynamically detect if a card was DFS
	  certified and as such this is left as a build time option. This
	  option should only be enabled by system integrators that can
	  guarantee that all the platforms that their kernel will run on
	  have obtained appropriate regulatory body certification for a
	  respective Atheros card by using ath9k on the target shipping
	  platforms.

	  This is currently only a placeholder for future DFS support,
	  as DFS support requires more components that still need to be
	  developed. At this point enabling this option won't do anything
	  except increase code size.

config ATH9K_DYNACK
	bool "Atheros ath9k ACK timeout estimation algorithm"
	depends on ATH9K
	default n
	help
	  This option enables ath9k dynamic ACK timeout estimation algorithm
	  based on ACK frame RX timestamp, TX frame timestamp and frame
	  duration

config ATH9K_WOW
	bool "Wake on Wireless LAN support (EXPERIMENTAL)"
	depends on ATH9K && PM
	default n
	help
	  This option enables Wake on Wireless LAN support for certain cards.
	  Currently, AR9462 is supported.

config ATH9K_RFKILL
	bool "Atheros ath9k rfkill support" if EXPERT
	depends on ATH9K
	depends on RFKILL=y || RFKILL=ATH9K
	default y
	help
	  Say Y to have ath9k poll the RF-Kill GPIO every couple of
	  seconds. Turn off to save power, but enable it if you have
	  a platform that can toggle the RF-Kill GPIO.

config ATH9K_CHANNEL_CONTEXT
	bool "Channel Context support"
	depends on ATH9K
	default n
	help
	  This option enables channel context support in ath9k, which is needed
	  for multi-channel concurrency. Enable this if P2P PowerSave support
	  is required.

config ATH9K_PCOEM
	bool "Atheros ath9k support for PC OEM cards" if EXPERT
	depends on ATH9K
	default y

config ATH9K_PCI_NO_EEPROM
	tristate "Atheros ath9k pci loader for EEPROM-less chips"
	depends on ATH9K_PCI
	default n
	help
	  This separate driver provides a loader in order to support the
	  AR500X to AR92XX-generation of ath9k PCI(e) WiFi chips, which have
	  their initialization data (which contains the real PCI Device ID
	  that ath9k will need) stored together with the calibration data out
	  of reach for the ath9k chip.

	  These devices are usually various network appliances, routers or
	  access Points and such.

	  If unsure say N.

config ATH9K_HTC
	tristate "Atheros HTC based wireless cards support"
	depends on USB && MAC80211
	select MAC80211_LEDS if LEDS_CLASS=y || LEDS_CLASS=MAC80211
	select ATH9K_HW
	select ATH9K_COMMON
	help
	  Support for Atheros HTC based cards.
	  Chipsets supported: AR9271

	  For more information:
	  https://wireless.wiki.kernel.org/en/users/Drivers/ath9k_htc

	  The built module will be ath9k_htc.

config ATH9K_HTC_DEBUGFS
	bool "Atheros ath9k_htc debugging"
	depends on ATH9K_HTC && DEBUG_FS
	select ATH9K_COMMON_DEBUG
	help
	  Say Y, if you need access to ath9k_htc's statistics.
	  As well as access to the FFT/spectral data.

config ATH9K_HWRNG
	bool "Random number generator support"
	depends on ATH9K && (HW_RANDOM = y || HW_RANDOM = ATH9K)
	default n
	help
	  This option incorporates the ADC register output as a source of
	  randomness into Linux entropy pool (/dev/urandom and /dev/random)

	  Say Y, feeds the entropy directly from the WiFi driver to the input
	  pool.

config ATH9K_COMMON_SPECTRAL
	bool "Atheros ath9k/ath9k_htc spectral scan support"
	depends on ATH9K_DEBUGFS || ATH9K_HTC_DEBUGFS
	select RELAY
	default n
	help
	  Say Y to enable access to the FFT/spectral data via debugfs.
