qcacmn: Fix multiple radar founds for a single burst

In dfs test mode, 18 pulses are injected in a single burst, the host
driver reports the radar found event two or three times to
upper layer. For a single burst of radar pulses, radar found event
should be reported only once.

Fix the multiple radar founds for a single burst by disabling radar
detection and flushing the existing radar pulses from all queues
while processing the current radar found indication event in dfs test
mode (usenol=0).

Change-Id: I70c7c15147a5cde038773fd97735c113ca385932
CRs-Fixed: 2981217
This commit is contained in:
Huashan Qu
2021-08-05 19:40:26 +08:00
committed by Madan Koyyalamudi
parent 81de2fc14d
commit 83065ffe1e
5 changed files with 36 additions and 1 deletions

View File

@@ -1022,6 +1022,11 @@ dfs_process_radar_ind_on_home_chan(struct wlan_dfs *dfs,
WLAN_EV_RADAR_DETECTED); WLAN_EV_RADAR_DETECTED);
if (!dfs->dfs_use_nol) { if (!dfs->dfs_use_nol) {
if (!dfs->dfs_is_offload_enabled) {
dfs_radar_disable(dfs);
dfs_second_segment_radar_disable(dfs);
dfs_flush_additional_pulses(dfs);
}
dfs_reset_bangradar(dfs); dfs_reset_bangradar(dfs);
dfs_send_csa_to_current_chan(dfs); dfs_send_csa_to_current_chan(dfs);
status = QDF_STATUS_SUCCESS; status = QDF_STATUS_SUCCESS;

View File

@@ -968,4 +968,15 @@ QDF_STATUS dfs_init_chan_state_array(struct wlan_objmgr_pdev *pdev)
return QDF_STATUS_E_NOSUPPORT; return QDF_STATUS_E_NOSUPPORT;
} }
#endif /* WLAN_DISP_CHAN_INFO */ #endif /* WLAN_DISP_CHAN_INFO */
/**
* utils_dfs_radar_enable() - Enables the radar.
* @pdev: Pointer to DFS pdev object.
*
* This is called each time for eCSA occurs but don't change channel due
* to channel switch disabled in dfs test mode.
*
* Return: QDF_STATUS.
*/
QDF_STATUS utils_dfs_radar_enable(struct wlan_objmgr_pdev *pdev);
#endif /* _WLAN_DFS_UTILS_API_H_ */ #endif /* _WLAN_DFS_UTILS_API_H_ */

View File

@@ -1583,3 +1583,8 @@ QDF_STATUS utils_dfs_update_chan_state_array(struct wlan_objmgr_pdev *pdev,
return utils_dfs_update_chan_state_array_element(dfs, freq, state); return utils_dfs_update_chan_state_array_element(dfs, freq, state);
} }
#endif /* WLAN_DISP_CHAN_INFO */ #endif /* WLAN_DISP_CHAN_INFO */
QDF_STATUS utils_dfs_radar_enable(struct wlan_objmgr_pdev *pdev)
{
return tgt_dfs_radar_enable(pdev, 0, 0, true);
}

View File

@@ -1358,7 +1358,7 @@ static bool mlme_vdev_subst_suspend_csa_restart_event(void *ctx,
* change in channel i.e. only Beacon Probe response template * change in channel i.e. only Beacon Probe response template
* is updated (CSA / ECSA IE is removed). * is updated (CSA / ECSA IE is removed).
*/ */
mlme_vdev_chan_switch_disable_notify_dfs(vdev_mlme);
mlme_vdev_sm_transition_to(vdev_mlme, WLAN_VDEV_S_UP); mlme_vdev_sm_transition_to(vdev_mlme, WLAN_VDEV_S_UP);
mlme_vdev_sm_deliver_event(vdev_mlme, mlme_vdev_sm_deliver_event(vdev_mlme,
WLAN_VDEV_SM_EV_UP_HOST_RESTART, WLAN_VDEV_SM_EV_UP_HOST_RESTART,

View File

@@ -24,6 +24,8 @@
#define _VDEV_MLME_SM_H_ #define _VDEV_MLME_SM_H_
#include <wlan_mlo_mgr_ap.h> #include <wlan_mlo_mgr_ap.h>
#include <wlan_dfs_utils_api.h>
/** /**
* mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM
* @vdev_mlme: MLME VDEV comp object * @vdev_mlme: MLME VDEV comp object
@@ -623,6 +625,18 @@ static inline QDF_STATUS mlme_vdev_dfs_cac_wait_notify(
return ret; return ret;
} }
/**
* mlme_vdev_chan_switch_disable_notify_dfs - Notifies DFS when channel
* switch is disabled
* @vdev_mlme: VDEV MLME comp object
*
* Return: QDF_STATUS.
*/
static inline QDF_STATUS mlme_vdev_chan_switch_disable_notify_dfs(
struct vdev_mlme_obj *vdev_mlme)
{
return utils_dfs_radar_enable(wlan_vdev_get_pdev(vdev_mlme->vdev));
}
#ifdef WLAN_FEATURE_11BE_MLO #ifdef WLAN_FEATURE_11BE_MLO
/** /**
* mlme_vdev_up_notify_mlo_mgr - notify mlo link is ready to up * mlme_vdev_up_notify_mlo_mgr - notify mlo link is ready to up