# Nordic Wi-Fi driver for nRF70 series SoCs
#
# Copyright (c) 2024 Nordic Semiconductor
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig WIFI_NRF70
	bool "nRF70 driver"
	select NET_L2_WIFI_MGMT if NETWORKING
	select NET_L2_ETHERNET_MGMT if NETWORKING && NET_L2_ETHERNET
	select WIFI_USE_NATIVE_NETWORKING if NETWORKING
	select EXPERIMENTAL if !SOC_SERIES_NRF53X && !SOC_SERIES_NRF91X
	default y
	depends on \
		DT_HAS_NORDIC_NRF7002_SPI_ENABLED || DT_HAS_NORDIC_NRF7002_QSPI_ENABLED || \
		DT_HAS_NORDIC_NRF7001_SPI_ENABLED || DT_HAS_NORDIC_NRF7001_QSPI_ENABLED || \
		DT_HAS_NORDIC_NRF7000_SPI_ENABLED || DT_HAS_NORDIC_NRF7000_QSPI_ENABLED
	help
	  Nordic Wi-Fi Driver

if WIFI_NRF70
# Hidden symbols for internal use
config WIFI_NRF7002
	bool
	default y if DT_HAS_NORDIC_NRF7002_SPI_ENABLED || DT_HAS_NORDIC_NRF7002_QSPI_ENABLED

config WIFI_NRF7001
	bool
	default y if DT_HAS_NORDIC_NRF7001_SPI_ENABLED || DT_HAS_NORDIC_NRF7001_QSPI_ENABLED

config WIFI_NRF7000
	bool
	default y if DT_HAS_NORDIC_NRF7000_SPI_ENABLED || DT_HAS_NORDIC_NRF7000_QSPI_ENABLED


module = WIFI_NRF70_BUS
module-dep = LOG
module-str = Log level for Wi-Fi nRF70 bus layers
module-help = Sets log level for Wi-Fi nRF70 bus layers
source "subsys/net/Kconfig.template.log_config.net"

config WIFI_NRF70_BUS_LOG_LEVEL
	# Enable error by default
	default 1

choice NRF70_OPER_MODES
	bool "nRF70 operating modes"
	default NRF70_SYSTEM_WITH_RAW_MODES if !WIFI_NRF7000 && \
		(NRF70_RAW_DATA_TX || NRF70_RAW_DATA_RX || NRF70_PROMISC_DATA_RX)
	default NRF70_SYSTEM_MODE if !WIFI_NRF7000
	default NRF70_SCAN_ONLY if WIFI_NRF7000
	help
	  Select the operating mode of the nRF70 driver

config NRF70_SYSTEM_MODE
	bool "nRF70 system mode"
	depends on WIFI_NRF7002 || WIFI_NRF7001
	select WIFI_NM_WPA_SUPPLICANT
	help
	  Select this option to enable system mode of the nRF70 driver

config NRF70_SCAN_ONLY
	bool "nRF70 scan only mode"
	help
	  Select this option to enable scan only mode of the nRF70 driver

config NRF70_RADIO_TEST
	bool "Radio test mode of the nRF70 driver"

config NRF70_OFFLOADED_RAW_TX
	bool "Offloaded raw TX mode of the nRF70 driver"

config NRF70_SYSTEM_WITH_RAW_MODES
	bool "nRF70 system mode with raw modes"
	depends on WIFI_NRF7002 || WIFI_NRF7001
	select WIFI_NM_WPA_SUPPLICANT
	help
	  Select this option to enable system mode of the nRF70 driver with raw modes.
endchoice

config NRF70_SYSTEM_MODE_COMMON
	bool
	default y if NRF70_SYSTEM_MODE || NRF70_SYSTEM_WITH_RAW_MODES

config NET_L2_ETHERNET
	default y if (!NRF70_RADIO_TEST && !NRF70_OFFLOADED_RAW_TX)

config HEAP_MEM_POOL_ADD_SIZE_NRF70
	# Use a maximum that works for typical use cases and boards, each sample/app can override
	# this value if needed by using CONFIG_HEAP_MEM_POOL_IGNORE_MIN
	def_int 25000 if NRF70_SCAN_ONLY
	def_int 150000

if NRF70_SYSTEM_MODE || NRF70_SYSTEM_WITH_RAW_MODES
config NRF70_STA_MODE
	bool "nRF70 STA mode"
	default y
	help
	  Select this option to enable STA mode of the nRF70 driver.

config NRF70_AP_MODE
	bool "Access point mode"
	depends on WIFI_NM_WPA_SUPPLICANT_AP

config NRF70_P2P_MODE
	bool "P2P support in driver"
endif # NRF70_SYSTEM_MODE || NRF70_SYSTEM_WITH_RAW_MODES

config NRF70_RAW_DATA_TX
	bool "RAW TX data path in the driver"
	select EXPERIMENTAL

config NRF70_RAW_DATA_RX
	bool "RAW RX sniffer operation in the driver"
	select EXPERIMENTAL

config NRF70_PROMISC_DATA_RX
	bool "Promiscuous RX sniffer operation in the driver"
	select WIFI_NM_WPA_SUPPLICANT
	select EXPERIMENTAL
	select NET_PROMISCUOUS_MODE

config NRF70_DATA_TX
	bool "TX data path in the driver"
	default y if NRF70_SYSTEM_MODE || NRF70_SYSTEM_WITH_RAW_MODES

config NRF_WIFI_IF_AUTO_START
	bool "Wi-Fi interface auto start on boot"
	default y

choice NRF_WIFI_FW_BLOB_HANDLING
	prompt "nRF70 Firmware blob handling"
	default NRF_WIFI_PATCHES_BUILTIN

config NRF_WIFI_BUILD_ONLY_MODE
	bool "Build only mode"
	help
	  Enable this option to build the driver without firmware loading, removes
	  dependency on firmware binary and patches.
	  This is useful to check the build and link errors.

config NRF_WIFI_PATCHES_BUILTIN
	bool "Store nRF70 FW patches as part of the driver"
	help
	  Select this option to store nRF70 FW patches as part of the driver.
	  This option impacts the code memory footprint of the driver.

config NRF_WIFI_PATCHES_EXTERNAL
	bool "Load nRF70 FW patches from external binary"
	help
	  Select this option to load nRF70 FW patches from an external tooling.
endchoice

config NRF_WIFI_LOW_POWER
	bool "Low power mode in nRF Wi-Fi chipsets"
	default y

config NRF70_TCP_IP_CHECKSUM_OFFLOAD
	bool "TCP/IP checksum offload"
	default y

config NRF70_REG_DOMAIN
	string "The ISO/IEC alpha2 country code for the country in which this device is currently operating. Default 00 (World regulatory)"
	# 00 is used for World regulatory
	default "00"

# Making calls to RPU from net_mgmt callbacks.
#
# If WPA supplicant is enabled, then don't override as it has higher
# stack requirements.
config NET_MGMT_EVENT_STACK_SIZE
	default 2048 if !WIFI_NM_WPA_SUPPLICANT

config NRF70_LOG_VERBOSE
	bool "Maintains the verbosity of information in logs"
	default y

module = WIFI_NRF70
module-dep = LOG
module-str = Log level for Wi-Fi nRF70 driver
module-help = Sets log level for Wi-Fi nRF70 driver
source "subsys/logging/Kconfig.template.log_config"

config WIFI_NRF70_LOG_LEVEL
	# Enable error by default
	default 1

config NRF70_ON_QSPI
	def_bool DT_HAS_NORDIC_NRF7002_QSPI_ENABLED || \
			 DT_HAS_NORDIC_NRF7001_QSPI_ENABLED || \
			 DT_HAS_NORDIC_NRF7000_QSPI_ENABLED
	select NRFX_QSPI

config NRF70_ON_SPI
	def_bool DT_HAS_NORDIC_NRF7002_SPI_ENABLED || \
			 DT_HAS_NORDIC_NRF7001_SPI_ENABLED || \
			 DT_HAS_NORDIC_NRF7000_SPI_ENABLED
	select SPI

config NRF70_2_4G_ONLY
	def_bool y if WIFI_NRF7001

# Wi-Fi and SR Coexistence Hardware configuration.
config NRF70_SR_COEX
	bool "Wi-Fi and SR coexistence support"

config NRF70_SR_COEX_RF_SWITCH
	bool "GPIO configuration to control SR side RF switch position"

config NRF70_WORKQ_STACK_SIZE
	int "Stack size for workqueue"
	default 4096

config NRF70_WORKQ_MAX_ITEMS
	int "Maximum work items for all workqueues"
	default 100

config NRF70_MAX_TX_PENDING_QLEN
	int "Maximum number of pending TX packets"
	default 18

config NRF70_UTIL
	depends on SHELL
	bool "Utility shell in nRF70 driver"

config NRF70_QSPI_LOW_POWER
	bool "low power mode in QSPI"
	default y if NRF_WIFI_LOW_POWER

config NRF70_PCB_LOSS_2G
	int "PCB loss for 2.4 GHz band"
	default 0
	range 0 4
	help
	  Specifies PCB loss from the antenna connector to the RF pin.
	  The values are in dB scale in steps of 1 dB and range of 0-4 dB.
	  The loss is considered in the RX path only.

config NRF70_PCB_LOSS_5G_BAND1
	int "PCB loss for 5 GHz band (5150 MHz - 5350 MHz, Channel-32 - Channel-68)"
	default 0
	range 0 4
	help
	  Specifies PCB loss from the antenna connector to the RF pin.
	  The values are in dB scale in steps of 1 dB and range of 0-4 dB.
	  The loss is considered in the RX path only.

config NRF70_PCB_LOSS_5G_BAND2
	int "PCB loss for 5 GHz band (5470 MHz - 5730 MHz, Channel-96 - Channel-144)"
	default 0
	range 0 4
	help
	  Specifies PCB loss from the antenna connector to the RF pin.
	  The values are in dB scale in steps of 1 dB and range of 0-4 dB.
	  The loss is considered in the RX path only.

config NRF70_PCB_LOSS_5G_BAND3
	int "PCB loss for 5 GHz band (5730 MHz - 5895 MHz, Channel-149 - Channel-177)"
	default 0
	range 0 4
	help
	  Specifies PCB loss from the antenna connector to the RF pin.
	  The values are in dB scale in steps of 1 dB and range of 0-4 dB.
	  The loss is considered in the RX path only.

config NRF70_ANT_GAIN_2G
	int "Antenna gain for 2.4 GHz band"
	default 0
	range 0 6

config NRF70_ANT_GAIN_5G_BAND1
	int "Antenna gain for 5 GHz band (5150 MHz - 5350 MHz)"
	default 0
	range 0 6

config NRF70_ANT_GAIN_5G_BAND2
	int "Antenna gain for 5 GHz band (5470 MHz - 5730 MHz)"
	default 0
	range 0 6

config NRF70_ANT_GAIN_5G_BAND3
	int "Antenna gain for 5 GHz band (5730 MHz - 5895 MHz)"
	default 0
	range 0 6

config NRF70_BAND_2G_LOWER_EDGE_BACKOFF_DSSS
	int "DSSS Transmit power backoff (in dB) for lower edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_2G_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_2G_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_2G_UPPER_EDGE_BACKOFF_DSSS
	int "DSSS Transmit power backoff (in dB) for upper edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_2G_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_2G_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of 2.4 GHz frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_1_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of UNII-1 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_1_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of UNII-1 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_1_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of UNII-1 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_1_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of UNII-1 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2A_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of UNII-2A frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2A_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of UNII-2A frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2A_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of UNII-2A frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2A_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of UNII-2A frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2C_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of UNII-2C frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2C_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of UNII-2C frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2C_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of UNII-2C frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_2C_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of UNII-2C frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_3_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of UNII-3 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_3_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of UNII-3 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_3_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of UNII-3 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_3_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of UNII-3 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_4_LOWER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for lower edge of UNII-4 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_4_LOWER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for lower edge of UNII-4 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_4_UPPER_EDGE_BACKOFF_HT
	int "HT/VHT Transmit power backoff (in dB) for upper edge of UNII-4 frequency band"
	default 0
	range 0 10

config NRF70_BAND_UNII_4_UPPER_EDGE_BACKOFF_HE
	int "HE Transmit power backoff (in dB) for upper edge of UNII-4 frequency band"
	default 0
	range 0 10

# Performance fine tuning options

config NRF70_RX_NUM_BUFS
	int "Number of RX buffers"
	default 48

config NRF70_MAX_TX_AGGREGATION
	int "Maximum number of TX packets to aggregate"
	default 12

config NRF70_MAX_TX_TOKENS
	int "Maximum number of TX tokens"
	range 5 12 if !NRF70_RADIO_TEST
	default 10

config NRF70_TX_MAX_DATA_SIZE
	int "Maximum size of TX data"
	default 1600

config NRF70_RX_MAX_DATA_SIZE
	int "Maximum size of RX data"
	default 1600

config NRF70_TX_DONE_WQ_ENABLED
	bool "TX done workqueue (impacts performance negatively)"

config NRF70_RX_WQ_ENABLED
	bool "RX workqueue"

# Use for IRQ processing (TODO: using for BH processing causes issues)
config NUM_METAIRQ_PRIORITIES
	default 1

config NRF70_IRQ_WQ_PRIORITY
	int "Priority of the workqueue for handling IRQs"
	default -15

config NRF70_BH_WQ_PRIORITY
	int "Priority of the workqueue for handling bottom half"
	default 0

config NRF70_IRQ_WQ_STACK_SIZE
	int "Stack size of the workqueue for handling IRQs"
	default 2048

config NRF70_BH_WQ_STACK_SIZE
	int "Stack size of the workqueue for handling bottom half"
	default 2048

if NRF70_TX_DONE_WQ_ENABLED
config NRF70_TX_DONE_WQ_PRIORITY
	int "Priority of the workqueue for handling TX done"
	default 0

config NRF70_TX_DONE_WQ_STACK_SIZE
	int "Stack size of the workqueue for handling TX done"
	default 2048
endif # NRF70_TX_DONE_WQ_ENABLED
if NRF70_RX_WQ_ENABLED
config NRF70_RX_WQ_PRIORITY
	int "Priority of the workqueue for handling RX"
	default 0

config NRF70_RX_WQ_STACK_SIZE
	int "Stack size of the workqueue for handling RX"
	default 2048
endif # NRF70_RX_WQ_ENABLED

if NRF_WIFI_LOW_POWER
config NRF70_RPU_PS_IDLE_TIMEOUT_MS
	int "RPU power save idle timeout in milliseconds"
	default 10

config NRF70_RPU_EXTEND_TWT_SP
	bool "extending TWT service period"
	help
	  In case frames accepted before the beginning of SP are not
	  transmitted before the SP completes, then typically they are
	  dropped to conform to the SP window as per the specification that is, no
	  transmission outside SP window.
	  This feature mitigates frame loss by transmitting even after SP
	  completion by using a standard contention mechanism, which is allowed
	  in specification but not recommended. As the device is actively transmitting
	  beyond SP, the power consumption increases depending on the amount
	  of traffic available at the start of the SP.
	  Note that if a frame is sent after the SP starts, it will be queued, and this
	  mechanism is not used.
endif # NRF_WIFI_LOW_POWER

config WIFI_FIXED_MAC_ADDRESS
	string "Wi-Fi Fixed MAC address in format XX:XX:XX:XX:XX:XX"
	help
	  This option overrides the MAC address read from OTP. It is strictly for testing purposes only.

choice
	prompt "Wi-Fi MAC address type"
	default WIFI_FIXED_MAC_ADDRESS_ENABLED if WIFI_FIXED_MAC_ADDRESS != ""
	default WIFI_OTP_MAC_ADDRESS
	help
	  Select the type of MAC address to be used by the Wi-Fi driver

config WIFI_OTP_MAC_ADDRESS
	bool "Use MAC address from OTP"
	help
	  This option uses the MAC address stored in the OTP memory of the nRF70.

config WIFI_FIXED_MAC_ADDRESS_ENABLED
	bool "fixed MAC address"
	help
	  Enable fixed MAC address

config WIFI_RANDOM_MAC_ADDRESS
	bool "Random MAC address generation at runtime"
	depends on ENTROPY_GENERATOR
	help
	  This option enables random MAC address generation at runtime.
	  The random MAC address is generated using the entropy device random generator.

endchoice

config NRF70_RSSI_STALE_TIMEOUT_MS
	int "RSSI stale timeout in milliseconds"
	default 1000
	help
	  RSSI stale timeout is the period after which the driver queries
	  RPU to get the RSSI value.
	  If data is active (for example, ping), the driver stores the RSSI value from
	  the received frames and provides this stored information
	  to wpa_supplicant. In this case, a higher value will be suitable
	  as the stored RSSI value at the driver will be updated regularly.
	  If data is not active or after the stale timeout duration,
	  the driver queries the RPU to get the RSSI value
	  and provides it to wpa_supplicant. The value should be set to a lower
	  value as the driver does not store it and requires RPU to provide the
	  information.

if NETWORKING
# Finetune defaults for certain system components used by the driver
config SYSTEM_WORKQUEUE_STACK_SIZE
	default 4096

config NET_TX_STACK_SIZE
	default 4096

config NET_RX_STACK_SIZE
	default 4096

config NET_TC_TX_COUNT
	default 1

endif # NETWORKING

config MAIN_STACK_SIZE
	default 4096

config SHELL_STACK_SIZE
	default 4096

# Override the Wi-Fi subsystems WIFI_MGMT_SCAN_SSID_FILT_MAX parameter,
# since we support a maximum of 2 SSIDs for scan result filtering.
config WIFI_MGMT_SCAN_SSID_FILT_MAX
	default 2

config NRF_WIFI_SCAN_MAX_BSS_CNT
	int "Maximum number of scan results to return."
	default 0
	range 0 65535
	help
	  Maximum number of scan results to return. 0 represents unlimited number of BSSes.

config NRF_WIFI_BEAMFORMING
	bool "Wi-Fi beamforming. Enabling beamforming can provide a slight improvement in performance, whereas disabling it can provide better power savings in low network activity applications"
	default y

config WIFI_NRF70_SCAN_TIMEOUT_S
	int "Scan timeout in seconds"
	default 30

menu "nRF Wi-Fi operation band(s)"
	visible if !NRF70_2_4G_ONLY

config NRF_WIFI_2G_BAND
	bool "Set operation band to 2.4GHz"
	default y if NRF70_2_4G_ONLY

config NRF_WIFI_5G_BAND
	bool "Set operation band to 5GHz"
	depends on !NRF70_2_4G_ONLY

config NRF_WIFI_OP_BAND
	int "Options to set operation band"
	default 1 if NRF_WIFI_2G_BAND
	default 2 if NRF_WIFI_5G_BAND
	default 3
	help
	  Set this option to select frequency band
	  1 - 2.4GHz
	  2 - 5GHz
	  3 - All ( 2.4GHz and 5GHz )
endmenu

config NRF_WIFI_IFACE_MTU
	int "MTU for Wi-Fi interface"
	range 576 2304 if NET_IPV4
	range 1280 2304 if NET_IPV6
	default 1500

config WIFI_NRF70_SKIP_LOCAL_ADMIN_MAC
	bool "Suppress networks with non-individual MAC addresses as BSSID in the scan results"
	help
	  Wi-Fi access points use locally administered MAC addresses to manage
	  multiple virtual interfaces. For geo-location use cases, these networks
	  from the virtual interfaces do not help in any way as they are co-located with the primary interface
	  that has a globally unique MAC address.
	  So, to save resources, this option drops such networks from the scan results.

config WIFI_NRF70_SCAN_DISABLE_DFS_CHANNELS
	bool "Disables DFS channels in scan operation"
	help
	  This option disables inclusion of the DFS channels in the scan operation.
	  This is useful to reduce the scan time, as DFS channels are seldom used.

config NET_INTERFACE_NAME_LEN
	# nordic_wlanN
	default 15

config NRF_WIFI_AP_DEAD_DETECT_TIMEOUT
	int "Access point dead detection timeout in seconds"
	range 1 30
	default 20
	help
		The number of seconds after which the AP is declared dead if no beacons
		are received from the AP. This is used to detect AP silently going down, for example, due to power off.

config NRF_WIFI_RPU_RECOVERY
	bool "RPU recovery mechanism"
	# Relies on power-save mode, so, LPM is needed and AP mode is not supported
	depends on NRF_WIFI_LOW_POWER
	depends on !NRF70_AP_MODE
	default y
	select EXPERIMENTAL
	help
		Enable the RPU recovery mechanism to recover from an RPU (nRF70) hang.
		This feature performs an interface reset (down and up), which triggers
		a RPU cold boot. The application's network connection will be lost during
		the recovery process, and it is the application's responsibility to
		re-establish the network connection.

if NRF_WIFI_RPU_RECOVERY
config NRF_WIFI_RPU_RECOVERY_PROPAGATION_DELAY_MS
	int "RPU recovery propagation delay in milliseconds"
	default 2000
	help
		Propagation delay in milliseconds to wait after RPU is powered down
		before powering it up. This delay is required to ensure that the recovery
		is propagated to all the applications and stack and have enough time to
		clean up the resources.

config NET_MGMT_EVENT_QUEUE_SIZE
	# Doing interface down and up even with delay puts a lot of events in the queue
	default 16

config NRF_WIFI_RPU_RECOVERY_PROPAGATION_DELAY_MS
	int "RPU recovery propagation delay in milliseconds"
	default 10
	help
	  Propagation delay in milliseconds to wait after the RPU is powered down
	  before powering it up. This delay is required to ensure that the recovery
	  is propagated to all the applications and stack, and has enough time to
	  clean up the resources.

config NRF_WIFI_RPU_RECOVERY_PS_ACTIVE_TIMEOUT_MS
	int "RPU recovery power save active timeout in milliseconds"
	default 50000
	help
	  Power save active timeout in milliseconds, after which the RPU recovery
	  mechanism will be triggered. This timeout is used to ensure that the
	  RPU attempts to enter power save mode in case of inactivity.

config NRF_WIFI_RPU_MIN_TIME_TO_ENTER_SLEEP_MS
	int "Minimum idle time to enter sleep in milliseconds"
	range 100 5000
	default 1000
	help
	  Minimum time the host should de-assert WAKEUP_NOW and let RPU enter
	  sleep mode, assuming there is no activity.

config NRF_WIFI_RPU_RECOVERY_DEBUG
	bool "RPU recovery debug logs"
	help
		Enable RPU recovery debug logs to help debug the RPU recovery mechanism.

config NRF_WIFI_RPU_RECOVERY_QUIET_PERIOD_MS
	int "RPU recovery quiet period in milliseconds"
	default 5000
	help
	  Quiet period in milliseconds after RPU recovery is triggered. During
	  this period, no new RPU recovery will be triggered.

config NRF_WIFI_RPU_RECOVERY_MAX_RETRIES
	int "Maximum number of consecutive RPU recovery retries, 0 to disable"
	default 0
	help
	  Maximum number of consecutive RPU recovery retries before giving up
	  and resetting the system. Set it to 0 to keep retrying indefinitely.

config NRF_WIFI_RPU_RECOVERY_RETRY_WINDOW_S
	int "RPU recovery retry window in seconds"
	default 900
	help
	  Window in seconds during which the number of consecutive RPU recovery
	  retries are counted. If the number of consecutive RPU recovery retries
	  exceeds NRF_WIFI_RPU_RECOVERY_MAX_RETRIES within this window, the system
	  will be reset.

config NRF_WIFI_RPU_RECOVERY_PS_STATE_DEBUG
	bool "RPU recovery power save state debug logs"
	help
	  Enable RPU recovery power save state debug logs to help debug the RPU recovery mechanism.
endif # NRF_WIFI_RPU_RECOVERY

config NRF_WIFI_FEAT_WMM
	bool "WMM/QoS support"
	default y
	help
	  This option controls disable/enable of the WMM (Wireless Multi-Media) feature.

choice NRF_WIFI_PS_DATA_RETRIEVAL_MECHANISM
	prompt "Power save data retrieval mechanism"
	default NRF_WIFI_PS_POLL_BASED_RETRIEVAL
	help
	  Select the mechanism to retrieve buffered data from AP.

config NRF_WIFI_PS_POLL_BASED_RETRIEVAL
	bool "PS-Poll frame-based mechanism to retrieve buffered data from AP"
	help
	  When the AP notifies about the availability of buffered data, the STA stays in power save
	  and retrieves the frames one-by-one. This conserves more power but adds latency
	  to the traffic. It is ideal for minimum number of frames.

config NRF_WIFI_QOS_NULL_BASED_RETRIEVAL
	bool "QoS null frame-based mechanism to retrieve buffered data from AP"
	help
	  When the AP notifies about the availability of buffered data, the STA comes out of
	  power save, and then AP can deliver all buffered frames without any additional
	  overhead or latency, but STA enters power save after a delay costing more power
	  depending on the delay. It is ideal for heavy buffered traffic.
endchoice

config NRF_WIFI_MGMT_BUFF_OFFLOAD
	bool "Management buffer offload"
	default y
	help
	  This option offloads the refilling of management buffers to the UMAC, saving the host
	  from having to exchange commands and events for every management packet even if it is
	  consumed by UMAC.

config NRF_WIFI_FEAT_KEEPALIVE
	bool "Wi-Fi keepalive feature for connection maintenance"
	depends on NRF70_STA_MODE
	help
	  Enable the Wi-Fi keepalive feature to keep the connection alive by sending
	  keepalive packets to the AP. This feature is primarily intended to interoperate with APs
	  that disconnect idle clients without any explicit checks. It slightly increases
	  power consumption.

if NRF_WIFI_FEAT_KEEPALIVE
config NRF_WIFI_KEEPALIVE_PERIOD_S
	int "Keepalive period in seconds"
	range 30 3600
	default 60
	help
	  Keepalive period in seconds to send keepalive packets to the AP.
endif

choice NRF_WIFI_PS_EXIT_STRATEGY
	prompt "Power save exit strategy"
	default NRF_WIFI_PS_INT_PS
	help
	  Select the power save exit strategy to retrieve buffered data from AP.

config NRF_WIFI_PS_EXIT_EVERY_TIM
	bool "Exit power save every time to retrieve buffered data from AP"
	help
	  Exit power save every time to retrieve buffered data from AP. Entering back to
	  power save mode might take some time and power.

config NRF_WIFI_PS_INT_PS
	bool "Exit power save based on an intelligent algorithm"
	help
	  Exit power save based on an intelligent algorithm to retrieve buffered data from the AP.
	  The algorithm tracks the buffered data at the AP and then dynamically decides
	  whether to stay in PS (for a lower amount of buffered data) or exit PS (for a higher
	  amount of buffered data).
endchoice

config NRF70_PASSIVE_SCAN_ONLY
	bool "Forced Passive scan"
	depends on NRF70_SCAN_ONLY
	help
	  Enable this configuration to force passive scan on all channels.
	  This will override application-specified scan type.
endif # WIFI_NRF70
