diff --git a/core/hdd/inc/wlan_hdd_p2p.h b/core/hdd/inc/wlan_hdd_p2p.h index 1d0745084d37..876ff193101e 100644 --- a/core/hdd/inc/wlan_hdd_p2p.h +++ b/core/hdd/inc/wlan_hdd_p2p.h @@ -196,4 +196,14 @@ int wlan_hdd_go_set_mcc_p2p_quota(struct hdd_adapter *hostapd_adapter, * Return: None */ void wlan_hdd_set_mcc_latency(struct hdd_adapter *adapter, int set_value); + +/** + * wlan_hdd_cleanup_actionframe() - Cleanup action frame + * @adapter: Pointer to HDD adapter + * + * This function cleans up action frame. + * + * Return: None + */ +void wlan_hdd_cleanup_actionframe(struct hdd_adapter *adapter); #endif /* __P2P_H */ diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index b3ea6c1a1e98..5bad4be1471e 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -5128,6 +5128,7 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, adapter->session_id); return -EINVAL; } + wlan_hdd_cleanup_actionframe(adapter); wlan_hdd_cleanup_remain_on_channel_ctx(adapter); mutex_lock(&hdd_ctx->sap_lock); if (test_bit(SOFTAP_BSS_STARTED, &adapter->event_flags)) { diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index cf633b95c31c..b1b768efd485 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -5185,6 +5185,7 @@ QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx, } wlan_hdd_scan_abort(adapter); + wlan_hdd_cleanup_actionframe(adapter); wlan_hdd_cleanup_remain_on_channel_ctx(adapter); hdd_clear_fils_connection_info(adapter); diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index 56bfdfcc36c6..ee756b07857f 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -81,15 +81,12 @@ const char *tdls_action_frame_type[] = { "TDLS Setup Request", void wlan_hdd_cancel_existing_remain_on_channel(struct hdd_adapter *adapter) { - QDF_STATUS status; - if (!adapter) { hdd_err("null adapter"); return; } - status = ucfg_p2p_cleanup_roc(adapter->hdd_vdev); - hdd_debug("status:%d", status); + ucfg_p2p_cleanup_roc_by_vdev(adapter->hdd_vdev); } int wlan_hdd_check_remain_on_channel(struct hdd_adapter *adapter) @@ -103,15 +100,22 @@ int wlan_hdd_check_remain_on_channel(struct hdd_adapter *adapter) /* Clean up RoC context at hdd_stop_adapter*/ void wlan_hdd_cleanup_remain_on_channel_ctx(struct hdd_adapter *adapter) { - QDF_STATUS status; - if (!adapter) { hdd_err("null adapter"); return; } - status = ucfg_p2p_cleanup_roc(adapter->hdd_vdev); - hdd_debug("status:%d", status); + ucfg_p2p_cleanup_roc_by_vdev(adapter->hdd_vdev); +} + +void wlan_hdd_cleanup_actionframe(struct hdd_adapter *adapter) +{ + if (!adapter) { + hdd_err("null adapter"); + return; + } + + ucfg_p2p_cleanup_tx_by_vdev(adapter->hdd_vdev); } static int __wlan_hdd_cfg80211_remain_on_channel(struct wiphy *wiphy, diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 00c2c0814268..37155465ed41 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -76,6 +76,7 @@ #include "wlan_cfg80211_scan.h" #include "wlan_ipa_ucfg_api.h" #include +#include "wlan_p2p_ucfg_api.h" /* Preprocessor definitions and constants */ #ifdef QCA_WIFI_NAPIER_EMULATION @@ -1667,6 +1668,9 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, } } } + /* p2p cleanup task based on scheduler */ + ucfg_p2p_cleanup_tx_by_psoc(hdd_ctx->hdd_psoc); + ucfg_p2p_cleanup_roc_by_psoc(hdd_ctx->hdd_psoc); /* Stop ongoing scan on each interface */ hdd_for_each_adapter(hdd_ctx, adapter) {