diff --git a/components/bt/controller/esp32/bt.c b/components/bt/controller/esp32/bt.c index 046f733b52..4cfda15174 100644 --- a/components/bt/controller/esp32/bt.c +++ b/components/bt/controller/esp32/bt.c @@ -224,7 +224,7 @@ extern int coex_bt_release(uint32_t event); extern int coex_register_bt_cb(coex_func_cb_t cb); extern uint32_t coex_bb_reset_lock(void); extern void coex_bb_reset_unlock(uint32_t restore); -extern int coex_schm_register_btdm_callback(void *callback); +extern int coex_schm_register_callback(int type, void *callback); extern void coex_schm_status_bit_clear(uint32_t type, uint32_t status); extern void coex_schm_status_bit_set(uint32_t type, uint32_t status); extern uint32_t coex_schm_interval_get(void); @@ -1165,7 +1165,8 @@ static void IRAM_ATTR coex_bb_reset_unlock_wrapper(uint32_t restore) static int coex_schm_register_btdm_callback_wrapper(void *callback) { #if CONFIG_SW_COEXIST_ENABLE - return coex_schm_register_btdm_callback(callback); +#define COEX_SCHM_CALLBACK_TYPE_BT 0x1 + return coex_schm_register_callback(COEX_SCHM_CALLBACK_TYPE_BT, callback); #else return 0; #endif diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 9ea94bb162..91eda2dc40 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1768,7 +1768,7 @@ rcGetHighestRateIdx = 0x40001eac; pm_tx_null_data_done_process = 0x40001eb0; pm_tx_data_process = 0x40001eb4; pm_attach = 0x40001eb8; -pm_coex_schm_process = 0x40001ebc; +/* pm_coex_schm_process = 0x40001ebc; */ ppInitTxq = 0x40001ec0; pp_attach = 0x40001ec4; pp_deattach = 0x40001ec8; @@ -1948,12 +1948,12 @@ ieee80211_sta_is_connected = 0x40002080; current_task_is_wifi_task = 0x40002084; wifi_get_init_state = 0x40002088; ieee80211_timer_process = 0x4000208c; -cnx_coexist_timeout = 0x40002090; +/* cnx_coexist_timeout = 0x40002090; */ /* sta_recv_mgmt = 0x40002094;*/ ieee80211_send_setup = 0x40002098; ieee80211_send_probereq = 0x4000209c; sta_auth_shared = 0x400020a4; -cnx_coexist_timeout_process = 0x400020ac; +/* cnx_coexist_timeout_process = 0x400020ac; */ ieee80211_alloc_challenge = 0x400020b0; cnx_assoc_timeout = 0x400020b4; ieee80211_vnd_ie_set = 0x400020b8; diff --git a/components/esp_wifi/esp32/esp_adapter.c b/components/esp_wifi/esp32/esp_adapter.c index 3a99aeed04..ce103cc1f6 100644 --- a/components/esp_wifi/esp32/esp_adapter.c +++ b/components/esp_wifi/esp32/esp_adapter.c @@ -693,24 +693,6 @@ static void * coex_schm_curr_phase_get_wrapper(void) #endif } -static int coex_schm_curr_phase_idx_set_wrapper(int idx) -{ -#if CONFIG_SW_COEXIST_ENABLE - return coex_schm_curr_phase_idx_set(idx); -#else - return 0; -#endif -} - -static int coex_schm_curr_phase_idx_get_wrapper(void) -{ -#if CONFIG_SW_COEXIST_ENABLE - return coex_schm_curr_phase_idx_get(); -#else - return 0; -#endif -} - static int coex_register_start_cb_wrapper(int (* cb)(void)) { #if CONFIG_SW_COEXIST_ENABLE @@ -720,6 +702,24 @@ static int coex_register_start_cb_wrapper(int (* cb)(void)) #endif } +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, void(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + static void IRAM_ATTR esp_empty_wrapper(void) { @@ -845,9 +845,9 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_interval_get = coex_schm_interval_get_wrapper, ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, - ._coex_schm_curr_phase_idx_set = coex_schm_curr_phase_idx_set_wrapper, - ._coex_schm_curr_phase_idx_get = coex_schm_curr_phase_idx_get_wrapper, ._coex_register_start_cb = coex_register_start_cb_wrapper, + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; @@ -867,10 +867,10 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._is_in_isr = coex_is_in_isr_wrapper, ._malloc_internal = malloc_internal_wrapper, ._free = free, + ._esp_timer_get_time = esp_timer_get_time, ._timer_disarm = timer_disarm_wrapper, ._timer_done = timer_done_wrapper, ._timer_setfn = timer_setfn_wrapper, ._timer_arm_us = timer_arm_us_wrapper, - ._esp_timer_get_time = esp_timer_get_time, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32c2/esp_adapter.c b/components/esp_wifi/esp32c2/esp_adapter.c index bec2a25ac1..7d57949e30 100644 --- a/components/esp_wifi/esp32c2/esp_adapter.c +++ b/components/esp_wifi/esp32c2/esp_adapter.c @@ -619,24 +619,6 @@ static void * coex_schm_curr_phase_get_wrapper(void) #endif } -static int coex_schm_curr_phase_idx_set_wrapper(int idx) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_set(idx); -#else - return 0; -#endif -} - -static int coex_schm_curr_phase_idx_get_wrapper(void) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_get(); -#else - return 0; -#endif -} - static int coex_register_start_cb_wrapper(int (* cb)(void)) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE @@ -646,6 +628,24 @@ static int coex_register_start_cb_wrapper(int (* cb)(void)) #endif } +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, void(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + static void IRAM_ATTR esp_empty_wrapper(void) { @@ -765,9 +765,9 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_interval_get = coex_schm_interval_get_wrapper, ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, - ._coex_schm_curr_phase_idx_set = coex_schm_curr_phase_idx_set_wrapper, - ._coex_schm_curr_phase_idx_get = coex_schm_curr_phase_idx_get_wrapper, ._coex_register_start_cb = coex_register_start_cb_wrapper, + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; @@ -786,5 +786,9 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._esp_timer_get_time = esp_timer_get_time, ._env_is_chip = env_is_chip_wrapper, ._slowclk_cal_get = esp_clk_slowclk_cal_get_wrapper, + ._timer_disarm = timer_disarm_wrapper, + ._timer_done = timer_done_wrapper, + ._timer_setfn = timer_setfn_wrapper, + ._timer_arm_us = timer_arm_us_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32c3/esp_adapter.c b/components/esp_wifi/esp32c3/esp_adapter.c index 165f9e2fdf..d6b87809aa 100644 --- a/components/esp_wifi/esp32c3/esp_adapter.c +++ b/components/esp_wifi/esp32c3/esp_adapter.c @@ -627,24 +627,6 @@ static void * coex_schm_curr_phase_get_wrapper(void) #endif } -static int coex_schm_curr_phase_idx_set_wrapper(int idx) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_set(idx); -#else - return 0; -#endif -} - -static int coex_schm_curr_phase_idx_get_wrapper(void) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_get(); -#else - return 0; -#endif -} - static int coex_register_start_cb_wrapper(int (* cb)(void)) { #if CONFIG_SW_COEXIST_ENABLE @@ -654,6 +636,24 @@ static int coex_register_start_cb_wrapper(int (* cb)(void)) #endif } +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, void(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + static void IRAM_ATTR esp_empty_wrapper(void) { @@ -773,9 +773,9 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_interval_get = coex_schm_interval_get_wrapper, ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, - ._coex_schm_curr_phase_idx_set = coex_schm_curr_phase_idx_set_wrapper, - ._coex_schm_curr_phase_idx_get = coex_schm_curr_phase_idx_get_wrapper, ._coex_register_start_cb = coex_register_start_cb_wrapper, + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; @@ -792,5 +792,9 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._malloc_internal = malloc_internal_wrapper, ._free = free, ._esp_timer_get_time = esp_timer_get_time, + ._timer_disarm = timer_disarm_wrapper, + ._timer_done = timer_done_wrapper, + ._timer_setfn = timer_setfn_wrapper, + ._timer_arm_us = timer_arm_us_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32s2/esp_adapter.c b/components/esp_wifi/esp32s2/esp_adapter.c index 4a022638e1..31654e1220 100644 --- a/components/esp_wifi/esp32s2/esp_adapter.c +++ b/components/esp_wifi/esp32s2/esp_adapter.c @@ -694,24 +694,6 @@ static void * coex_schm_curr_phase_get_wrapper(void) #endif } -static int coex_schm_curr_phase_idx_set_wrapper(int idx) -{ -#if CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_set(idx); -#else - return 0; -#endif -} - -static int coex_schm_curr_phase_idx_get_wrapper(void) -{ -#if CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_get(); -#else - return 0; -#endif -} - static int coex_register_start_cb_wrapper(int (* cb)(void)) { #if CONFIG_SW_COEXIST_ENABLE @@ -721,6 +703,24 @@ static int coex_register_start_cb_wrapper(int (* cb)(void)) #endif } +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, void(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + static void IRAM_ATTR esp_empty_wrapper(void) { @@ -847,9 +847,10 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_interval_get = coex_schm_interval_get_wrapper, ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, - ._coex_schm_curr_phase_idx_set = coex_schm_curr_phase_idx_set_wrapper, - ._coex_schm_curr_phase_idx_get = coex_schm_curr_phase_idx_get_wrapper, ._coex_register_start_cb = coex_register_start_cb_wrapper, + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, + ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; @@ -866,5 +867,9 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._malloc_internal = malloc_internal_wrapper, ._free = free, ._esp_timer_get_time = esp_timer_get_time, + ._timer_disarm = timer_disarm_wrapper, + ._timer_done = timer_done_wrapper, + ._timer_setfn = timer_setfn_wrapper, + ._timer_arm_us = timer_arm_us_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/esp32s3/esp_adapter.c b/components/esp_wifi/esp32s3/esp_adapter.c index dd67515fda..0ecda19857 100644 --- a/components/esp_wifi/esp32s3/esp_adapter.c +++ b/components/esp_wifi/esp32s3/esp_adapter.c @@ -716,24 +716,6 @@ static void * coex_schm_curr_phase_get_wrapper(void) #endif } -static int coex_schm_curr_phase_idx_set_wrapper(int idx) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_set(idx); -#else - return 0; -#endif -} - -static int coex_schm_curr_phase_idx_get_wrapper(void) -{ -#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE - return coex_schm_curr_phase_idx_get(); -#else - return 0; -#endif -} - static int coex_register_start_cb_wrapper(int (* cb)(void)) { #if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE @@ -743,6 +725,24 @@ static int coex_register_start_cb_wrapper(int (* cb)(void)) #endif } +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, void(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + static void IRAM_ATTR esp_empty_wrapper(void) { @@ -867,9 +867,9 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._coex_schm_interval_get = coex_schm_interval_get_wrapper, ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, - ._coex_schm_curr_phase_idx_set = coex_schm_curr_phase_idx_set_wrapper, - ._coex_schm_curr_phase_idx_get = coex_schm_curr_phase_idx_get_wrapper, ._coex_register_start_cb = coex_register_start_cb_wrapper, + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, }; @@ -886,5 +886,9 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._malloc_internal = malloc_internal_wrapper, ._free = free, ._esp_timer_get_time = esp_timer_get_time, + ._timer_disarm = timer_disarm_wrapper, + ._timer_done = timer_done_wrapper, + ._timer_setfn = timer_setfn_wrapper, + ._timer_arm_us = timer_arm_us_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_wifi/include/esp_coexist_adapter.h b/components/esp_wifi/include/esp_coexist_adapter.h index d36a45ec87..11bf54d9b5 100644 --- a/components/esp_wifi/include/esp_coexist_adapter.h +++ b/components/esp_wifi/include/esp_coexist_adapter.h @@ -36,15 +36,13 @@ typedef struct { int (* _is_in_isr)(void); void * (* _malloc_internal)(size_t size); void (* _free)(void *p); -#if CONFIG_IDF_TARGET_ESP32 + int64_t (* _esp_timer_get_time)(void); + bool (* _env_is_chip)(void); + uint32_t (* _slowclk_cal_get)(void); void (* _timer_disarm)(void *timer); void (* _timer_done)(void *ptimer); void (* _timer_setfn)(void *ptimer, void *pfunction, void *parg); void (* _timer_arm_us)(void *ptimer, uint32_t us, bool repeat); -#endif - int64_t (* _esp_timer_get_time)(void); - bool (* _env_is_chip)(void); - uint32_t (* _slowclk_cal_get)(void); int32_t _magic; } coex_adapter_funcs_t; diff --git a/components/esp_wifi/include/esp_coexist_internal.h b/components/esp_wifi/include/esp_coexist_internal.h index c9fbd2a15a..fadb38c939 100644 --- a/components/esp_wifi/include/esp_coexist_internal.h +++ b/components/esp_wifi/include/esp_coexist_internal.h @@ -216,6 +216,22 @@ int coex_schm_curr_phase_idx_get(void); */ int coex_register_start_cb(int (* cb)(void)); +/** + * @brief Restart current coexistence scheme. + * + * @return : 0 - success, other - failed + */ +int coex_schm_process_restart(void); + +/** + * @brief Register callback for coexistence scheme. + * + * @param type : callback type + * @param callback : callback + * @return : 0 - success, other - failed + */ +int coex_schm_register_callback(int type, void *callback); + /** * @brief Register coexistence adapter functions. * 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 d17b5fc47d..da19d48321 100644 --- a/components/esp_wifi/include/esp_private/wifi_os_adapter.h +++ b/components/esp_wifi/include/esp_private/wifi_os_adapter.h @@ -142,8 +142,6 @@ typedef struct { uint32_t (* _coex_schm_interval_get)(void); uint8_t (* _coex_schm_curr_period_get)(void); void * (* _coex_schm_curr_phase_get)(void); - int (* _coex_schm_curr_phase_idx_set)(int idx); - int (* _coex_schm_curr_phase_idx_get)(void); int (* _coex_register_start_cb)(int (* cb)(void)); #if CONFIG_IDF_TARGET_ESP32C6 void (* _regdma_link_set_write_wait_content)(void *, uint32_t, uint32_t); @@ -151,6 +149,8 @@ typedef struct { int (* _sleep_retention_entries_create)(const void *, int, int, int); void (* _sleep_retention_entries_destroy)(int); #endif + int (* _coex_schm_process_restart)(void); + int (* _coex_schm_register_cb)(int, void (* cb)(int)); int32_t _magic; } wifi_osi_funcs_t;