diff --git a/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index 88677edee8..e0161d1a78 100644 --- a/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -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 diff --git a/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index b717719014..a79ac5c724 100644 --- a/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c @@ -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) {