From be8bc4f247b0ffa3f41f03bb2aaf29435fe1c6cc Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Thu, 7 May 2026 12:24:28 +0800 Subject: [PATCH] feat(wifi): support disable 11ac and 11ax in efuse --- components/esp_wifi/CMakeLists.txt | 2 +- components/esp_wifi/esp32c5/esp_adapter.c | 8 +++++++- components/esp_wifi/esp32c6/esp_adapter.c | 8 +++++++- components/esp_wifi/esp32c61/esp_adapter.c | 10 +++++++++- components/esp_wifi/esp32s31/esp_adapter.c | 6 ++++++ .../esp_wifi/include/esp_private/wifi_os_adapter.h | 3 +++ components/esp_wifi/lib | 2 +- 7 files changed, 34 insertions(+), 5 deletions(-) diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index 91a201d8021..ce0f841a38d 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -79,7 +79,7 @@ idf_component_register(SRCS "${srcs}" INCLUDE_DIRS "include" "include/local" "wifi_apps/include" "wifi_apps/nan_app/include" REQUIRES esp_event esp_phy esp_netif - PRIV_REQUIRES esp_pm esp_timer nvs_flash + PRIV_REQUIRES esp_pm esp_timer nvs_flash efuse wpa_supplicant hal lwip esp_coex PRIV_INCLUDE_DIRS ../wpa_supplicant/src/ ../wpa_supplicant/esp_supplicant/src/ wifi_apps/roaming_app/include wifi_apps/roaming_app/src diff --git a/components/esp_wifi/esp32c5/esp_adapter.c b/components/esp_wifi/esp32c5/esp_adapter.c index 157ead0c8e9..3d3030f2d09 100644 --- a/components/esp_wifi/esp32c5/esp_adapter.c +++ b/components/esp_wifi/esp32c5/esp_adapter.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -641,6 +641,11 @@ static void esp_phy_disable_wrapper(void) esp_phy_disable(PHY_MODEM_WIFI); } +static bool esp_wifi_disable_ac_ax_wrapper(void) +{ + return false; // disable 11ac and 11ax is not supported on esp32c5. +} + wifi_osi_funcs_t g_wifi_osi_funcs = { ._version = ESP_WIFI_OS_ADAPTER_VERSION, ._env_is_chip = esp_coex_common_env_is_chip_wrapper, @@ -764,5 +769,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper, ._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper, ._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper, + ._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32c6/esp_adapter.c b/components/esp_wifi/esp32c6/esp_adapter.c index 07c46725f93..b5b805458cd 100644 --- a/components/esp_wifi/esp32c6/esp_adapter.c +++ b/components/esp_wifi/esp32c6/esp_adapter.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -579,6 +579,11 @@ static void *sleep_retention_find_link_by_id_wrapper(int id) } #endif +static bool esp_wifi_disable_ac_ax_wrapper(void) +{ + return false; // disable 11ac and 11ax is not supported on esp32c6. +} + wifi_osi_funcs_t g_wifi_osi_funcs = { ._version = ESP_WIFI_OS_ADAPTER_VERSION, ._env_is_chip = esp_coex_common_env_is_chip_wrapper, @@ -702,5 +707,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper, ._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper, ._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper, + ._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32c61/esp_adapter.c b/components/esp_wifi/esp32c61/esp_adapter.c index 9f8555c76c5..f62435ef0d4 100644 --- a/components/esp_wifi/esp32c61/esp_adapter.c +++ b/components/esp_wifi/esp32c61/esp_adapter.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -40,6 +40,8 @@ #include "esp_private/periph_ctrl.h" #include "esp_private/esp_clk.h" #include "nvs.h" +#include "esp_efuse.h" +#include "esp_efuse_table.h" #include "os.h" #include "esp_smartconfig.h" #ifdef CONFIG_ESP_COEX_ENABLED @@ -641,6 +643,11 @@ static void esp_phy_disable_wrapper(void) esp_phy_disable(PHY_MODEM_WIFI); } +static bool esp_wifi_disable_ac_ax_wrapper(void) +{ + return esp_efuse_read_field_bit(ESP_EFUSE_DIS_WIFI6); +} + wifi_osi_funcs_t g_wifi_osi_funcs = { ._version = ESP_WIFI_OS_ADAPTER_VERSION, ._env_is_chip = esp_coex_common_env_is_chip_wrapper, @@ -764,5 +771,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper, ._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper, ._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper, + ._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32s31/esp_adapter.c b/components/esp_wifi/esp32s31/esp_adapter.c index b3234d79eee..2326bb11a81 100644 --- a/components/esp_wifi/esp32s31/esp_adapter.c +++ b/components/esp_wifi/esp32s31/esp_adapter.c @@ -650,6 +650,11 @@ static void esp_phy_disable_wrapper(void) esp_phy_disable(PHY_MODEM_WIFI); } +static bool esp_wifi_disable_ac_ax_wrapper(void) +{ + return false; // disable 11ac and 11ax is not supported on esp32s31. +} + wifi_osi_funcs_t g_wifi_osi_funcs = { ._version = ESP_WIFI_OS_ADAPTER_VERSION, ._env_is_chip = esp_coex_common_env_is_chip_wrapper, @@ -774,5 +779,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper, ._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper, ._coex_configure_preemption_end_cb = coex_configure_preemption_end_cb_wrapper, + ._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/include/esp_private/wifi_os_adapter.h b/components/esp_wifi/include/esp_private/wifi_os_adapter.h index 1d373a26491..3315044ab23 100644 --- a/components/esp_wifi/include/esp_private/wifi_os_adapter.h +++ b/components/esp_wifi/include/esp_private/wifi_os_adapter.h @@ -158,6 +158,9 @@ typedef struct wifi_osi_funcs_t { void * (*_coex_schm_get_phase_by_idx)(int); #if CONFIG_IDF_TARGET_ESP32S31 int (* _coex_configure_preemption_end_cb)(bool is_register, int(*cb)(uint32_t)); +#endif +#if CONFIG_SOC_WIFI_HE_SUPPORT + bool (*_wifi_disable_ac_ax)(void); #endif int32_t _magic; } wifi_osi_funcs_t; diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index baa228bd4df..6139fb7f860 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit baa228bd4df77de281e28f7ea6474288a3c7fb12 +Subproject commit 6139fb7f860a14f07cfa522bdfc213dbb346514a