# Copyright 2020 Espressif Systems (Shanghai) PTE LTD

menuconfig WIFI_ESP32
	bool "ESP32 SoC WiFi support"
	default y
	depends on DT_HAS_ESPRESSIF_ESP32_WIFI_ENABLED
	depends on ZEPHYR_HAL_ESPRESSIF_MODULE_BLOBS
	depends on !SMP
	select THREAD_CUSTOM_DATA
	select NET_L2_WIFI_MGMT
	select WIFI_USE_NATIVE_NETWORKING
	select MBEDTLS
	select THREAD_STACK_INFO
	select DYNAMIC_THREAD
	select DYNAMIC_THREAD_ALLOC
	help
	  Enable ESP32 SoC WiFi support. Only supported in single
	  core mode because the network stack is not aware of SMP
	  stuff.

if WIFI_ESP32

config HEAP_MEM_POOL_ADD_SIZE_WIFI
	int
	default 4096
	help
	  Make sure there is a minimal heap available for Wi-Fi driver.

config NET_TCP_WORKQ_STACK_SIZE
	default 2048

config NET_RX_STACK_SIZE
	default 2048

config NET_MGMT_EVENT_STACK_SIZE
	default 2048

config ESP32_WIFI_STA_AUTO_DHCPV4
	bool "Automatically starts DHCP4 negotiation"
	depends on NET_DHCPV4
	depends on NET_IPV4
	help
	  WiFi driver will automatically initiate DHCPV4 negotiation when connected.

config ESP32_WIFI_AP_STA_MODE
	bool "Activates the Station/AP co-existence mode."
	depends on WIFI_NM
	help
	  The Station/AP coexistence mode allows the ESP32 to operate as both a station and
	  an access point simultaneously. This mode is not enabled by default.

config ESP32_WIFI_STA_RECONNECT
	bool "WiFi connection retry"
	help
	  Set auto WiFI reconnection when disconnected.

config ESP32_WIFI_SW_COEXIST_ENABLE
	bool
	help
	  Software controls WiFi/Bluetooth coexistence. Not supported yet.

config ESP32_WIFI_NET_ALLOC_SPIRAM
	bool "Allocate memory of WiFi and NET in SPIRAM"
	depends on ESP_SPIRAM
	help
	  Allocate memory of WiFi and NET stack in SPIRAM, increasing available RAM memory space
	  for application stack.

config ESP32_WIFI_STATIC_RX_BUFFER_NUM
	int "Max number of WiFi static RX buffers"
	range 2 25
	default 10
	help
	  Set the number of WiFi static RX buffers. Each buffer takes approximately 1.6KB of RAM.
	  The static rx buffers are allocated when esp_wifi_init is called, they are not freed
	  until esp_wifi_deinit is called.

	  WiFi hardware use these buffers to receive all 802.11 frames.
	  A higher number may allow higher throughput but increases memory use. If ESP32_WIFI_AMPDU_RX_ENABLED
	  is enabled, this value is recommended to set equal or bigger than ESP32_WIFI_RX_BA_WIN in order to
	  achieve better throughput and compatibility with both stations and APs.

config ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM
	int "Max number of WiFi dynamic RX buffers"
	range 0 128
	default 32
	help
	  Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers
	  will be allocated (provided sufficient free RAM). The size of each dynamic
	  RX buffer depends on the size of the received data frame.

	  For each received data frame, the WiFi driver makes a copy to an RX buffer
	  and then delivers it to the high layer TCP/IP stack. The dynamic RX buffer
	  is freed after the higher layer has successfully received the data frame.

	  For some applications, WiFi data frames may be received faster than the
	  application can process them. In these cases we may run out of memory if
	  RX buffer number is unlimited (0). If a dynamic RX buffer limit is set,
	  it should be at least the number of static RX buffers.

choice ESP32_WIFI_TX_BUFFER
	prompt "Type of WiFi TX buffers"
	default ESP32_WIFI_DYNAMIC_TX_BUFFER
	help
	  Select type of WiFi TX buffers:

	  If "Static" is selected, WiFi TX buffers are allocated when WiFi is
	  initialized and released when WiFi is de-initialized. The size of each
	  static TX buffer is fixed to about 1.6KB.

	  If "Dynamic" is selected, each WiFi TX buffer is allocated as needed
	  when a data frame is delivered to the Wifi driver from the TCP/IP stack.
	  The buffer is freed after the data frame has been sent by the WiFi driver.
	  The size of each dynamic TX buffer depends on the length of each data
	  frame sent by the TCP/IP layer.

	  If PSRAM is enabled, "Static" should be selected to guarantee enough
	  WiFi TX buffers. If PSRAM is disabled, "Dynamic" should be selected
	  to improve the utilization of RAM.

	config ESP32_WIFI_STATIC_TX_BUFFER
		bool "Static"
	config ESP32_WIFI_DYNAMIC_TX_BUFFER
		bool "Dynamic"
endchoice

config ESP32_WIFI_TX_BUFFER_TYPE
	int
	default 0 if ESP32_WIFI_STATIC_TX_BUFFER
	default 1 if ESP32_WIFI_DYNAMIC_TX_BUFFER

config ESP32_WIFI_STATIC_TX_BUFFER_NUM
	int "Max number of WiFi static TX buffers"
	depends on ESP32_WIFI_STATIC_TX_BUFFER
	range 1 64
	default 16
	help
	  Set the number of WiFi static TX buffers. Each buffer takes approximately
	  1.6KB of RAM. The static RX buffers are allocated when esp_wifi_init() is
	  called, they are not released until esp_wifi_deinit() is called.

	  For each transmitted data frame from the higher layer TCP/IP stack,
	  the WiFi driver makes a copy of it in a TX buffer.  For some applications
	  especially UDP applications, the upper layer can deliver frames faster
	  than WiFi layer can transmit.
	  In these cases, we may run out of TX buffers.

config ESP32_WIFI_CACHE_TX_BUFFER_NUM
	int "Max number of WiFi cache TX buffers"
	depends on ESP_SPIRAM
	range 16 128
	default 32
	help
	  Set the number of WiFi cache TX buffer number.

	  For each TX packet from uplayer, such as LWIP etc, WiFi driver needs to
	  allocate a static TX buffer and makes a copy of uplayer packet. If WiFi
	  driver fails to allocate the static TX buffer, it caches the uplayer
	  packets to a dedicated buffer queue, this option is used to configure the
	  size of the cached TX queue.

config ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM
	int "Max number of WiFi dynamic TX buffers"
	depends on ESP32_WIFI_DYNAMIC_TX_BUFFER
	range 1 128
	default 32
	help
	  Set the number of WiFi dynamic TX buffers. The size of each
	  dynamic TXbuffer is not fixed, it depends on the size of each
	  transmitted data frame.

	  For each transmitted frame from the higher layer TCP/IP stack,
	  the WiFi driver makes a copy of it in a TX buffer. For some applications,
	  especially UDP applications, the upper layer can deliver frames faster
	  than WiFi layer can transmit. In these cases, we may run out of TX
	  buffers.

choice ESP32_WIFI_MGMT_RX_BUFFER
	prompt "Type of WiFi RX MGMT buffers"
	default ESP32_WIFI_STATIC_RX_MGMT_BUFFER
	help
	  Select type of WiFi RX MGMT buffers:

	  If "Static" is selected, WiFi RX MGMT buffers are allocated when WiFi is initialized and released
	  when WiFi is de-initialized. The size of each static RX MGMT buffer is fixed to about 500 Bytes.

	  If "Dynamic" is selected, each WiFi RX MGMT buffer is allocated as needed when a MGMT data frame is
	  received. The MGMT buffer is freed after the MGMT data frame has been processed by the WiFi driver.

	config ESP32_WIFI_STATIC_RX_MGMT_BUFFER
		bool "Static"
	config ESP32_WIFI_DYNAMIC_RX_MGMT_BUFFER
		bool "Dynamic"
endchoice

config ESP32_WIFI_DYNAMIC_RX_MGMT_BUF
	int
	default 0 if ESP32_WIFI_STATIC_RX_MGMT_BUFFER
	default 1 if ESP32_WIFI_DYNAMIC_RX_MGMT_BUFFER

config ESP32_WIFI_RX_MGMT_BUF_NUM_DEF
	int "Max number of WiFi RX MGMT buffers"
	range 1 10
	default 5
	help
	  Set the number of WiFi RX_MGMT buffers.

	  For Management buffers, the number of dynamic and static management buffers is the same.
	  In order to prevent memory fragmentation, the management buffer type should be set to static first.

config ESP32_WIFI_CSI_ENABLED
	bool "WiFi CSI(Channel State Information)"
	default n
	help
	  Select this option to enable CSI(Channel State Information) feature.
	  CSI takes about CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM KB of RAM.
	  If CSI is not used, it is better to disable this feature in order
	  to save memory.

config ESP32_WIFI_AMPDU_TX_ENABLED
	bool "WiFi AMPDU TX"
	default y
	help
	  Select this option to enable AMPDU TX feature. It improves transmission
	  error checking and overall network performance with the cost of processing
	  speed. Helpful when the device is operating in crowded wireless area.

config ESP32_WIFI_TX_BA_WIN
	int "WiFi AMPDU TX BA window size"
	depends on ESP32_WIFI_AMPDU_TX_ENABLED
	range 2 32
	default 6
	help
	  Set the size of WiFi Block Ack TX window. Generally a bigger value means
	  higher throughput but more memory. Most of time we should NOT change the
	  default value unless special reason, e.g. test the maximum
	  UDP TX throughput with iperf etc. For iperf test in shieldbox,
	  the recommended value is 9~12.

config ESP32_WIFI_AMPDU_RX_ENABLED
	bool "WiFi AMPDU RX"
	default y
	help
	  Select this option to enable AMPDU RX feature. It improves transmission
	  error checking and overall network performance with the cost of processing
	  speed. Helpful when the device is operating in crowded wireless area.

config ESP32_WIFI_RX_BA_WIN
	int "WiFi AMPDU RX BA window size"
	depends on ESP32_WIFI_AMPDU_RX_ENABLED
	range 2 32
	default 6
	help
	  Set the size of WiFi Block Ack RX window. Generally a bigger value means
	  higher throughput and better compatibility but more memory. Most of time
	  we should NOT change the default value unless special reason,
	  e.g. test the maximum UDP RX throughput with iperf etc. For iperf test in
	  shieldbox, the recommended value is 9~12. If PSRAM is used and WiFi memory
	  is preferred to be allocated in PSRAM first, the default and minimum value
	  should be 16 to achieve better throughput and compatibility with both
	  stations and APs.

config ESP32_WIFI_AMSDU_TX_ENABLED
	bool "WiFi AMSDU TX"
	depends on ESP_SPIRAM
	default n
	help
	  Select this option to enable AMSDU TX feature

config ESP32_WIFI_MGMT_SBUF_NUM
	int "WiFi mgmt short buffer number"
	range 6 32
	default 32
	help
	  Set the number of WiFi management short buffer.

config ESP32_WIFI_IRAM_OPT
	bool "WiFi IRAM speed optimization"
	default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32)
	default y
	help
	  Select this option to place frequently called Wi-Fi library functions in IRAM.
	  When this option is disabled, more than 10Kbytes of IRAM memory will be saved
	  but Wi-Fi throughput will be reduced.

config ESP32_WIFI_RX_IRAM_OPT
	bool "WiFi RX IRAM speed optimization"
	default n if (BT && ESP_SPIRAM && SOC_SERIES_ESP32)
	help
	  Select this option to place frequently called Wi-Fi library RX functions in IRAM.
	  When this option is disabled, more than 17Kbytes of IRAM memory will be saved
	  but Wi-Fi performance will be reduced.

config ESP32_WIFI_MAX_THREAD_PRIORITY
	int "Maximum work queue thread priority"
	default 7
	help
	  Maximum priority of thread used for processing driver work queue items.

config ESP32_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME
	int "Minimum active time"
	range 8 60
	default 50
	help
	  Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station enters the active state,
	  it will work for at least ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME. If a data packet is received or sent
	  during this period, the time will be refreshed. If the time is up, but the station still has packets
	  to receive or send, the time will also be refreshed. unit: milliseconds.

config ESP32_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME
	int "Maximum keep alive time"
	range 10 60
	default 10
	help
	  Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. If no packet has been
	  sent within ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME, a null data packet will be sent
	  to maintain the connection with the AP. unit: seconds.

config ESP32_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME
	int "Minimum wait broadcast data time"
	range 10 30
	default 15
	help
	  Only for station in WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM. When the station knows through the beacon
	  that AP will send broadcast packet, it will wait for ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME
	  before entering the sleep process. If a broadcast packet is received with more data bits, the time
	  will refreshed. unit: milliseconds.

choice ESP_WIFI_HEAP
	prompt "Wifi adapter heap in use"
	default ESP_WIFI_HEAP_RUNTIME

	config ESP_WIFI_HEAP_RUNTIME
		bool "Wifi adapter use ESP runtime heap"
		depends on ESP_HEAP_RUNTIME

	config ESP_WIFI_HEAP_SPIRAM
		bool "Wifi adapter use SPIRAM heap"
		depends on ESP_SPIRAM

	config ESP_WIFI_HEAP_SYSTEM
		bool "Wifi adapter use system heap"

endchoice # ESP_WIFI_HEAP

config ESP32_WIFI_FTM_ENABLE
	bool "WiFi FTM"
	default n
	depends on SOC_SERIES_ESP32C2 || SOC_SERIES_ESP32C3 || SOC_SERIES_ESP32C6 || SOC_SERIES_ESP32S2 || SOC_SERIES_ESP32S3
	help
	  Enable feature Fine Timing Measurement for calculating WiFi Round-Trip-Time (RTT).

config ESP32_WIFI_FTM_INITIATOR_SUPPORT
	bool "FTM Initiator support"
	default y
	depends on ESP32_WIFI_FTM_ENABLE

config ESP32_WIFI_FTM_RESPONDER_SUPPORT
	bool "FTM Responder support"
	default y
	depends on ESP32_WIFI_FTM_ENABLE

config ESP32_WIFI_SOFTAP_SUPPORT
	bool
	default y
	help
	  Hidden option to enable Wi-Fi SoftAP functions in WPA supplicant and RF libraries.

config ESP32_WIFI_MBEDTLS_CRYPTO
	bool "Use MbedTLS crypto APIs"
	default n
	select MBEDTLS_ECP_C
	select MBEDTLS_ECDH_C
	select MBEDTLS_ECDSA_C
	select MBEDTLS_PKCS5_C
	select MBEDTLS_PK_WRITE_C
	select MBEDTLS_CIPHER_MODE_CTR_ENABLED
	select MBEDTLS_CMAC
	select MBEDTLS_ENTROPY_C
	help
	  Select this option to use MbedTLS crypto APIs which utilize hardware acceleration.

config ESP32_WIFI_ENABLE_WPA3_SAE
	bool "WPA3-Personal"
	default n
	select ESP32_WIFI_MBEDTLS_CRYPTO
	help
	  Select this option to allow the device to establish a WPA3-Personal connection.

config ESP32_WIFI_ENABLE_WPA3_OWE_STA
	bool "OWE STA"
	default y
	depends on ESP32_WIFI_ENABLE_WPA3_SAE
	help
	  Select this option to allow the device to establish OWE connection with eligible AP's.

config ESP32_WIFI_ENABLE_SAE_PK
	bool "SAE-PK"
	default y
	depends on ESP32_WIFI_ENABLE_WPA3_SAE
	help
	  Select this option to enable SAE-PK

config ESP32_WIFI_DEBUG_PRINT
	bool "Print debug messages from WPA Supplicant"
	default n
	help
	  Select this option to print logging information from WPA supplicant,
	  this includes handshake information and key hex dumps depending
	  on the project logging level.

	  Enabling this could increase the build size ~60kb
	  depending on the project logging level.

endif # WIFI_ESP32
