From 83809910d2f9d0ecdf96a73b489ac417a6eff673 Mon Sep 17 00:00:00 2001 From: liuning Date: Tue, 10 Sep 2024 17:14:57 +0800 Subject: [PATCH] feat(coex): optimize connectionless coexist pwr, optimize wifi pwr with bt idle --- .../include/private/esp_coexist_internal.h | 14 +++++++++++++- components/esp_coex/lib | 2 +- components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld | 4 ++-- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 2 +- components/esp_rom/esp32c3/ld/esp32c3.rom.ld | 2 +- .../esp_rom/esp32c5/ld/esp32c5.rom.coexist.ld | 2 +- .../esp_rom/esp32c6/ld/esp32c6.rom.coexist.ld | 2 +- .../esp_rom/esp32c61/ld/esp32c61.rom.coexist.ld | 2 +- components/esp_rom/esp32s3/ld/esp32s3.rom.ld | 2 +- components/esp_wifi/esp32/esp_adapter.c | 2 +- components/esp_wifi/esp32c2/esp_adapter.c | 2 +- components/esp_wifi/esp32c3/esp_adapter.c | 2 +- components/esp_wifi/esp32c5/esp_adapter.c | 2 +- components/esp_wifi/esp32c6/esp_adapter.c | 2 +- components/esp_wifi/esp32c61/esp_adapter.c | 2 +- components/esp_wifi/esp32s2/esp_adapter.c | 2 +- components/esp_wifi/esp32s3/esp_adapter.c | 2 +- components/esp_wifi/lib | 2 +- 18 files changed, 31 insertions(+), 19 deletions(-) diff --git a/components/esp_coex/include/private/esp_coexist_internal.h b/components/esp_coex/include/private/esp_coexist_internal.h index 20cea8a437..5eac40b708 100644 --- a/components/esp_coex/include/private/esp_coexist_internal.h +++ b/components/esp_coex/include/private/esp_coexist_internal.h @@ -28,6 +28,16 @@ typedef enum { COEX_SCHM_CALLBACK_TYPE_I154, } coex_schm_callback_type_t; +typedef enum { + COEX_SCHM_ST_TYPE_WIFI = 0, + COEX_SCHM_ST_TYPE_BLE, + COEX_SCHM_ST_TYPE_BT, +} coex_schm_st_type_t; + +#define COEX_STATUS_GET_WIFI_BITMAP (1 << COEX_SCHM_ST_TYPE_WIFI) +#define COEX_STATUS_GET_BLE_BITMAP (1 << COEX_SCHM_ST_TYPE_BLE) +#define COEX_STATUS_GET_BT_BITMAP (1 << COEX_SCHM_ST_TYPE_BT) + typedef void (* coex_func_cb_t)(uint32_t event, int sched_cnt); typedef esp_err_t (* coex_set_lpclk_source_callback_t)(void); typedef void (* coex_wifi_channel_change_cb_t)(uint8_t primary, uint8_t secondary); @@ -94,9 +104,11 @@ esp_err_t coex_preference_set(coex_prefer_t prefer); /** * @brief Get software coexist status. + * + * @param bitmap : bitmap of the module getting status. * @return : software coexist status */ -uint32_t coex_status_get(void); +uint32_t coex_status_get(uint8_t bitmap); /** * @brief WiFi requests coexistence. diff --git a/components/esp_coex/lib b/components/esp_coex/lib index bf7cda7b17..e15e7a161f 160000 --- a/components/esp_coex/lib +++ b/components/esp_coex/lib @@ -1 +1 @@ -Subproject commit bf7cda7b17a4fd22c123d39748565a68c021e562 +Subproject commit e15e7a161fc1a48e8fb4fd0b3da74623c30ba1cb diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld index 1528dd405a..22130d601e 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld @@ -1174,8 +1174,8 @@ hal_set_sta_tbtt = 0x40001e4c; pm_set_sleep_type = 0x40001e54; pm_tx_null_data_done_process = 0x40001eb0; //pm_tx_data_process = 0x40001eb4; -pm_attach = 0x40001eb8; -pm_coex_schm_process = 0x40001ebc; +/*pm_attach = 0x40001eb8;*/ +/*pm_coex_schm_process = 0x40001ebc;*/ pm_on_probe_resp_rx = 0x40001ecc; pm_send_probe_stop = 0x40001edc; hal_sniffer_rx_set_promis = 0x40001ef4; diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 4ee45350b6..166dadf4ee 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1903,7 +1903,7 @@ coex_hw_timer_set = 0x4000219c; coex_schm_interval_set = 0x400021a0; coex_schm_lock = 0x400021a4; coex_schm_unlock = 0x400021a8; -coex_status_get = 0x400021ac; +/*coex_status_get = 0x400021ac;*/ coex_wifi_release = 0x400021b0; esp_coex_ble_conn_dynamic_prio_get = 0x400021b4; /*coex_hw_timer_tick_get = 0x400021b8;*/ diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld index 5fd087fddc..793e7d8d9a 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld @@ -1772,7 +1772,7 @@ coex_hw_timer_set = 0x400018e0; coex_schm_interval_set = 0x400018e4; coex_schm_lock = 0x400018e8; coex_schm_unlock = 0x400018ec; -coex_status_get = 0x400018f0; +/*coex_status_get = 0x400018f0;*/ coex_wifi_release = 0x400018f4; esp_coex_ble_conn_dynamic_prio_get = 0x400018f8; /* Data (.data, .bss, .rodata) */ diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.coexist.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.coexist.ld index 106eae97af..82a6bf8afa 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.coexist.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.coexist.ld @@ -35,7 +35,7 @@ coex_hw_timer_set = 0x40000afc; coex_schm_interval_set = 0x40000b00; coex_schm_lock = 0x40000b04; coex_schm_unlock = 0x40000b08; -coex_status_get = 0x40000b0c; +/*coex_status_get = 0x40000b0c;*/ coex_wifi_release = 0x40000b10; esp_coex_ble_conn_dynamic_prio_get = 0x40000b14; /* Data (.data, .bss, .rodata) */ diff --git a/components/esp_rom/esp32c6/ld/esp32c6.rom.coexist.ld b/components/esp_rom/esp32c6/ld/esp32c6.rom.coexist.ld index 5ff011973e..46e175e179 100644 --- a/components/esp_rom/esp32c6/ld/esp32c6.rom.coexist.ld +++ b/components/esp_rom/esp32c6/ld/esp32c6.rom.coexist.ld @@ -35,7 +35,7 @@ coex_hw_timer_set = 0x40000b30; coex_schm_interval_set = 0x40000b34; coex_schm_lock = 0x40000b38; coex_schm_unlock = 0x40000b3c; -coex_status_get = 0x40000b40; +/*coex_status_get = 0x40000b40;*/ coex_wifi_release = 0x40000b44; esp_coex_ble_conn_dynamic_prio_get = 0x40000b48; /* Data (.data, .bss, .rodata) */ diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.coexist.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.coexist.ld index c83f83824d..712a62c303 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.coexist.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.coexist.ld @@ -35,7 +35,7 @@ coex_hw_timer_set = 0x40000a64; coex_schm_interval_set = 0x40000a68; coex_schm_lock = 0x40000a6c; coex_schm_unlock = 0x40000a70; -coex_status_get = 0x40000a74; +/*coex_status_get = 0x40000a74;*/ coex_wifi_release = 0x40000a78; esp_coex_ble_conn_dynamic_prio_get = 0x40000a7c; /* Data (.data, .bss, .rodata) */ diff --git a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld index 13fee05c18..e60065d6b9 100644 --- a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld +++ b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld @@ -2058,7 +2058,7 @@ coex_hw_timer_set = 0x40005c04; coex_schm_interval_set = 0x40005c10; coex_schm_lock = 0x40005c1c; coex_schm_unlock = 0x40005c28; -coex_status_get = 0x40005c34; +/*coex_status_get = 0x40005c34;*/ coex_wifi_release = 0x40005c40; esp_coex_ble_conn_dynamic_prio_get = 0x40005c4c; /* Data (.data, .bss, .rodata) */ diff --git a/components/esp_wifi/esp32/esp_adapter.c b/components/esp_wifi/esp32/esp_adapter.c index f58f93769d..3d69706012 100644 --- a/components/esp_wifi/esp32/esp_adapter.c +++ b/components/esp_wifi/esp32/esp_adapter.c @@ -452,7 +452,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32c2/esp_adapter.c b/components/esp_wifi/esp32c2/esp_adapter.c index 4c0b4212cc..0ab7a81796 100644 --- a/components/esp_wifi/esp32c2/esp_adapter.c +++ b/components/esp_wifi/esp32c2/esp_adapter.c @@ -389,7 +389,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32c3/esp_adapter.c b/components/esp_wifi/esp32c3/esp_adapter.c index 10ec230ee9..7c72f19c9f 100644 --- a/components/esp_wifi/esp32c3/esp_adapter.c +++ b/components/esp_wifi/esp32c3/esp_adapter.c @@ -406,7 +406,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32c5/esp_adapter.c b/components/esp_wifi/esp32c5/esp_adapter.c index f341af368a..ad999cbb2f 100644 --- a/components/esp_wifi/esp32c5/esp_adapter.c +++ b/components/esp_wifi/esp32c5/esp_adapter.c @@ -464,7 +464,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32c6/esp_adapter.c b/components/esp_wifi/esp32c6/esp_adapter.c index aec8785a10..1cefee5e36 100644 --- a/components/esp_wifi/esp32c6/esp_adapter.c +++ b/components/esp_wifi/esp32c6/esp_adapter.c @@ -395,7 +395,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32c61/esp_adapter.c b/components/esp_wifi/esp32c61/esp_adapter.c index 58b7e56688..72f6429ef5 100644 --- a/components/esp_wifi/esp32c61/esp_adapter.c +++ b/components/esp_wifi/esp32c61/esp_adapter.c @@ -464,7 +464,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32s2/esp_adapter.c b/components/esp_wifi/esp32s2/esp_adapter.c index 3e131130f8..725a553dba 100644 --- a/components/esp_wifi/esp32s2/esp_adapter.c +++ b/components/esp_wifi/esp32s2/esp_adapter.c @@ -443,7 +443,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/esp32s3/esp_adapter.c b/components/esp_wifi/esp32s3/esp_adapter.c index 3fef6ab866..1e00fbbedb 100644 --- a/components/esp_wifi/esp32s3/esp_adapter.c +++ b/components/esp_wifi/esp32s3/esp_adapter.c @@ -460,7 +460,7 @@ static void coex_disable_wrapper(void) static IRAM_ATTR uint32_t coex_status_get_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_status_get(); + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); #else return 0; #endif diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 473674948f..efa80057b0 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 473674948f178962fefd7f7b1df7ebc9cc59a98a +Subproject commit efa80057b04ade8b1412a0dedcb5572d6ccd1fcc