# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

if SOC_SERIES_ESP32S2

choice ESP32S2_UNIVERSAL_MAC_ADDRESSES
	bool "Number of universally administered (by IEEE) MAC address"
	default ESP32S2_UNIVERSAL_MAC_ADDRESSES_TWO
	help
	  Configure the number of universally administered (by IEEE) MAC addresses.
	  During initialization, MAC addresses for each network interface are generated or
	  derived from a single base MAC address. If the number of universal MAC addresses is two,
	  all interfaces (WiFi station, WiFi softap) receive a universally administered MAC
	  address.
	  They are generated sequentially by adding 0, and 1 (respectively) to the final octet of
	  the base MAC address. If the number of universal MAC addresses is one, only WiFi station
	  receives a universally administered MAC address.
	  The WiFi softap receives local MAC addresses. It's derived from the universal WiFi
	  station MAC addresses.
	  When using the default (Espressif-assigned) base MAC address, either setting can be used.
	  When using a custom universal MAC address range, the correct setting will depend on the
	  allocation of MAC addresses in this range (either 1 or 2 per device).

config ESP32S2_UNIVERSAL_MAC_ADDRESSES_ONE
	bool "One"
	select ESP_MAC_UNIVERSAL_MAC_ADDRESSES_ONE
	select ESP_MAC_ADDR_UNIVERSE_WIFI_STA

config ESP32S2_UNIVERSAL_MAC_ADDRESSES_TWO
	bool "Two"
	select ESP_MAC_UNIVERSAL_MAC_ADDRESSES_TWO
	select ESP_MAC_ADDR_UNIVERSE_WIFI_STA
	select ESP_MAC_ADDR_UNIVERSE_WIFI_AP

endchoice # ESP32S2_UNIVERSAL_MAC_ADDRESSES

config ESP32S2_UNIVERSAL_MAC_ADDRESSES
	int
	default 1 if ESP32S2_UNIVERSAL_MAC_ADDRESSES_ONE
	default 2 if ESP32S2_UNIVERSAL_MAC_ADDRESSES_TWO

endif # SOC_SERIES_ESP32S2
