qcacld-3.0: Stop CFR once get disconnection event

CFR only works when DUT as STA and connected to AP. But, host doesn't
stop CFR if CFR started and disconnect to AP. So add this change to
stop CFR once get disconnection event.

Change-Id: I5a616dbe4c35311fb260514a8d33ed9a1361c514
CRs-Fixed: 3026715
This commit is contained in:
Wu Gao
2021-09-02 05:00:36 +08:00
کامیت شده توسط Madan Koyyalamudi
والد 22e96c1faa
کامیت 36d764e1af
3فایلهای تغییر یافته به همراه55 افزوده شده و 15 حذف شده

مشاهده پرونده

@@ -49,6 +49,25 @@ wlan_hdd_cfg80211_peer_cfr_capture_cfg(struct wiphy *wiphy,
const void *data,
int data_len);
#ifdef WLAN_ENH_CFR_ENABLE
/**
* hdd_cfr_disconnect() - Handle disconnection event in CFR
* @vdev: Pointer to vdev object
*
* Handle disconnection event in CFR. Stop CFR if it started and get
* disconnection event.
*
* Return: QDF status
*/
QDF_STATUS hdd_cfr_disconnect(struct wlan_objmgr_vdev *vdev);
#else
static inline QDF_STATUS
hdd_cfr_disconnect(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
#endif
extern const struct nla_policy cfr_config_policy[
QCA_WLAN_VENDOR_ATTR_PEER_CFR_MAX + 1];
@@ -64,6 +83,11 @@ extern const struct nla_policy cfr_config_policy[
},
#else
#define FEATURE_CFR_VENDOR_COMMANDS
static inline QDF_STATUS
hdd_cfr_disconnect(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_CFR_ENABLE */
#endif /* _WLAN_HDD_CFR_H */

مشاهده پرونده

@@ -349,6 +349,30 @@ wlan_cfg80211_cfr_set_config(struct wlan_objmgr_vdev *vdev,
return 0;
}
static QDF_STATUS hdd_stop_enh_cfr(struct wlan_objmgr_vdev *vdev)
{
if (!ucfg_cfr_get_rcc_enabled(vdev))
return QDF_STATUS_SUCCESS;
hdd_debug("cleanup rcc mode");
wlan_objmgr_vdev_try_get_ref(vdev, WLAN_CFR_ID);
ucfg_cfr_set_rcc_mode(vdev, RCC_DIS_ALL_MODE, 0);
ucfg_cfr_subscribe_ppdu_desc(wlan_vdev_get_pdev(vdev),
false);
ucfg_cfr_committed_rcc_config(vdev);
ucfg_cfr_stop_indication(vdev);
ucfg_cfr_suspend(wlan_vdev_get_pdev(vdev));
hdd_debug("stop indication done");
wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS hdd_cfr_disconnect(struct wlan_objmgr_vdev *vdev)
{
return hdd_stop_enh_cfr(vdev);
}
static int
wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter,
struct nlattr **tb)
@@ -385,23 +409,13 @@ wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter,
QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE_GROUP_BITMAP]);
hdd_debug("params.en_cfg %d", params.en_cfg);
ucfg_cfr_set_en_bitmap(vdev, &params);
} else {
hdd_debug("cleanup rcc mode");
ucfg_cfr_set_rcc_mode(vdev, RCC_DIS_ALL_MODE, 0);
}
if (is_start_capture)
ucfg_cfr_resume(wlan_vdev_get_pdev(vdev));
ucfg_cfr_subscribe_ppdu_desc(wlan_vdev_get_pdev(vdev),
is_start_capture);
ucfg_cfr_committed_rcc_config(vdev);
if (!is_start_capture) {
ucfg_cfr_stop_indication(vdev);
ucfg_cfr_suspend(wlan_vdev_get_pdev(vdev));
hdd_debug("stop indication done");
ucfg_cfr_subscribe_ppdu_desc(wlan_vdev_get_pdev(vdev),
true);
ucfg_cfr_committed_rcc_config(vdev);
} else {
hdd_stop_enh_cfr(vdev);
}
out:
hdd_objmgr_put_vdev_by_user(vdev, WLAN_CFR_ID);
return ret;

مشاهده پرونده

@@ -45,6 +45,7 @@
#include "hif.h"
#include "wlan_hdd_power.h"
#include "wlan_hdd_napi.h"
#include "wlan_hdd_cfr.h"
#include "wlan_roam_debug.h"
#include "wma_api.h"
@@ -155,6 +156,7 @@ void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter,
/* update P2P connection status */
ucfg_p2p_status_disconnect(vdev);
hdd_cfr_disconnect(adapter->vdev);
hdd_wmm_adapter_clear(adapter);
ucfg_cm_ft_reset(vdev);