# 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 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
