qcacld-3.0: Disable dfs phyerr offload when no sap/go in DFS channel

As FW required, send WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID when there
is no beaconing session in DFS channel for FW which supports dfs offload.

Change-Id: Ib3c24758b81d6218d2504729d44cdbfb122933ee
CRs-Fixed: 2544846
This commit is contained in:
bings
2019-10-23 16:50:36 +08:00
committed by nshrivas
parent 6e5f4b2e27
commit 64c3a4433e
2 changed files with 54 additions and 0 deletions

View File

@@ -682,6 +682,22 @@ bool policy_mgr_is_any_nondfs_chnl_present(struct wlan_objmgr_psoc *psoc,
uint32_t policy_mgr_get_dfs_beaconing_session_id(
struct wlan_objmgr_psoc *psoc);
/**
* policy_mgr_is_dfs_beaconing_present_except_vdev() - to find
* if any DFS session except the given vdev id
* @psoc: PSOC object information
* @ch_freq: pointer to channel frequency that needs to filled
* @vdev_id: vdev id
*
* If any beaconing session except given vdev id such as SAP or GO present and
* it is on DFS channel then this function will return true
*
* Return: true if session is on DFS or false if session is on non-dfs channel
*/
bool policy_mgr_is_dfs_beaconing_present_except_vdev(
struct wlan_objmgr_psoc *psoc, uint32_t *ch_freq,
uint8_t vdev_id);
/**
* policy_mgr_is_any_dfs_beaconing_session_present() - to find
* if any DFS session

View File

@@ -3015,6 +3015,44 @@ uint32_t policy_mgr_get_dfs_beaconing_session_id(
return session_id;
}
bool policy_mgr_is_dfs_beaconing_present_except_vdev(
struct wlan_objmgr_psoc *psoc, uint32_t *ch_freq,
uint8_t vdev_id)
{
struct policy_mgr_conc_connection_info *conn_info;
bool status = false;
uint32_t conn_index = 0;
struct policy_mgr_psoc_priv_obj *pm_ctx;
struct policy_mgr_conc_connection_info info;
uint8_t num_cxn_del;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("Invalid Context");
return false;
}
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
policy_mgr_store_and_del_conn_info_by_vdev_id(
psoc, vdev_id, &info, &num_cxn_del);
for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_index++) {
conn_info = &pm_conc_connection_list[conn_index];
if (conn_info->in_use &&
wlan_reg_is_dfs_for_freq(pm_ctx->pdev, conn_info->freq) &&
(conn_info->mode == PM_SAP_MODE ||
conn_info->mode == PM_P2P_GO_MODE)) {
*ch_freq = pm_conc_connection_list[conn_index].freq;
status = true;
}
}
if (num_cxn_del)
policy_mgr_restore_deleted_conn_info(psoc, &info, num_cxn_del);
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
return status;
}
bool policy_mgr_is_any_dfs_beaconing_session_present(
struct wlan_objmgr_psoc *psoc, uint32_t *ch_freq)
{