# Copyright (c) 2023 Cypress Semiconductor Corporation (an Infineon company) or
# an affiliate of Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig WIFI_AIROC
	bool "Infineon AIROC SoC Wi-Fi support"
	select THREAD_CUSTOM_DATA
	select WIFI_OFFLOAD
	select NET_L2_WIFI_MGMT
	select SDIO_STACK
	select SDHC
	select GPIO
	select WIFI_USE_NATIVE_NETWORKING
	select USE_INFINEON_ABSTRACTION_RTOS
	depends on DT_HAS_INFINEON_AIROC_WIFI_ENABLED
	help
	  Enable Infineon AIROC SoC Wi-Fi support.

if WIFI_AIROC

config AIROC_WIFI_EVENT_TASK_STACK_SIZE
	int "Event Task Stack Size"
	default 4096

config AIROC_WIFI_EVENT_TASK_PRIO
	int "Event Task Priority"
	default 4

config AIROC_WLAN_MFG_FIRMWARE
	bool "WLAN Manufacturing Firmware"
	help
	  Enable WLAN Manufacturing Firmware.

config AIROC_WIFI_CUSTOM
	bool "Custom CYW43xx device/module"
	help
	  Select Custom CYW43xx device/module. For this option,
	  user must to provide path to FW, CLM and NVRAM for
	  custom or vendor CYW43xx modules.

choice  AIROC_PART
	prompt "Select AIROC part"
	depends on !AIROC_WIFI_CUSTOM

config CYW4343W
	bool "CYW4343W"
	help
	  Enable Infineon AIROC CYW4343W Wi-Fi connectivity,
	  More information about CYW4343W device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw4343w/

config CYW4373
	bool "CYW4373"
	help
	  Enable Infineon AIROC CYW4373 Wi-Fi connectivity,
	  More information about CYW4373 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw4373/

config CYW43012
	bool "CYW43012"
	help
	  Enable Infineon AIROC CYW43012 Wi-Fi connectivity,
	  More information about CYW43012 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43012/

config CYW43438
	bool "CYW43438"
	help
	  Enable Infineon AIROC CYW43438 Wi-Fi connectivity,
	  More information about CYW43438 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43438/

config CYW43439
	bool "CYW43439"
	help
	  Enable Infineon AIROC CYW43439 Wi-Fi connectivity,
	  More information about CYW43439 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43439/
endchoice

choice CYW43012_MODULE
	prompt "Select CYW43012 module"
	depends on CYW43012 && !AIROC_WIFI_CUSTOM

config CYW43012_MURATA_1LV
	bool "MURATA-1LV"
	help
	  Murata Type 1LV module based on Infineon CYW43012 combo chipset
	  which supports Wi-Fi® 802.11a/b/g/n + Bluetooth® 5.0 BR/EDR/LE
	  up to 72.2Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate
	  on Bluetooth®. 2Mbps LE PHY is also supported.

	  Detailed information about Murata Type 1LV module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1lv
endchoice

choice CYW4343W_MODULE
	prompt "Select CYW4343W module"
	depends on CYW4343W && !AIROC_WIFI_CUSTOM

config CYW4343W_MURATA_1DX
	bool "MURATA-1DX"
	help
	  Murata Type 1DX modules based on Infineon CYW4343W combo chipset
	  which supports Wi-Fi® 802.11b/g/n + Bluetooth® 5.1 BR/EDR/LE
	  up to 65Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate
	  on Bluetooth®.

	  Detailed information about Type 1DX module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1dx
endchoice

choice CYW4373_MODULE
	prompt "Select CYW4373 module"
	depends on CYW4373 && !AIROC_WIFI_CUSTOM

config CYW4373_STERLING_LWB5PLUS
	bool "STERLING-LWB5plus"
	help
	  Ezurio Sterling LWB5+ 802.11ac / Bluetooth 5.0 M.2 Carrier Board
	  (E-Type Key w/ SDIO/UART)

	  Detailed information about Type Sterling LWB5+ module you can find on
	  https://www.ezurio.com/wireless-modules/wifi-modules-bluetooth/sterling-lwb5-plus-wifi-5-bluetooth-5-module
endchoice

choice CYW43439_MODULE
	prompt "Select CYW43439 module"
	depends on CYW43439 && !AIROC_WIFI_CUSTOM

config CYW43439_MURATA_1YN
	bool "MURATA_1YN"
	help
	  Murata Type 1YN module based on Infineon CYW43439 combo chipset
	  which supports Wi-Fi® 802.11b/g/n + Bluetooth® 5.2 BR/EDR/LE
	  up to 65Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate on
	  Bluetooth®.

	  Detailed information about Murata Type 1YN module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1yn
endchoice

endif # AIROC_WIFI
