Loading Kbuild +4 −0 Original line number Diff line number Diff line Loading @@ -3513,6 +3513,10 @@ ifdef CONFIG_SCHED_HISTORY_SIZE ccflags-y += -DWLAN_SCHED_HISTORY_SIZE=$(CONFIG_SCHED_HISTORY_SIZE) endif ifdef CONFIG_HANDLE_RX_REROUTE_ERR cppflags-y += -DHANDLE_RX_REROUTE_ERR endif # configure log buffer size ifdef CONFIG_CFG_NUM_DP_TRACE_RECORD ccflags-y += -DMAX_QDF_DP_TRACE_RECORDS=$(CONFIG_CFG_NUM_DP_TRACE_RECORD) Loading components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +26 −0 Original line number Diff line number Diff line Loading @@ -2326,6 +2326,16 @@ void policy_mgr_hw_mode_transition_cb(uint32_t old_hw_mode_index, struct policy_mgr_vdev_mac_map *vdev_mac_map, struct wlan_objmgr_psoc *context); /** * policy_mgr_current_concurrency_is_scc() - To check the current * concurrency combination if it is doing SCC * @psoc: PSOC object information * This routine is called to check if it is doing SCC * * Return: True - SCC, False - Otherwise */ bool policy_mgr_current_concurrency_is_scc(struct wlan_objmgr_psoc *psoc); /** * policy_mgr_current_concurrency_is_mcc() - To check the current * concurrency combination if it is doing MCC Loading Loading @@ -3057,6 +3067,22 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( uint32_t sap_ch_freq, uint8_t sap_vdev_id, struct ch_params *ch_params); /** * policy_mgr_sap_allowed_on_indoor_freq() - Check whether STA+SAP concurrency * allowed on indoor channel or not * @psoc: pointer to PSOC object information * @pdev: pointer to PDEV object information * @sap_ch_freq: initial channel frequency for SAP * * This function checks whether SAP is allowed to turn on in case of STA+SAP * concurrency if STA is on indoor channel. * * Return: false if SAP not allowed to come up on a indoor channel */ bool policy_mgr_sap_allowed_on_indoor_freq(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_pdev *pdev, uint32_t sap_ch_freq); /** * policy_mgr_get_alternate_channel_for_sap() - Get an alternate * channel to move the SAP to Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +24 −4 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "wlan_mlme_api.h" #include "sap_api.h" #include "wlan_mlme_api.h" #include "wlan_mlme_ucfg_api.h" enum policy_mgr_conc_next_action (*policy_mgr_get_current_pref_hw_mode_ptr) (struct wlan_objmgr_psoc *psoc); Loading Loading @@ -2202,6 +2203,23 @@ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( return QDF_STATUS_SUCCESS; } bool policy_mgr_sap_allowed_on_indoor_freq(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_pdev *pdev, uint32_t sap_ch_freq) { bool include_indoor_channel = 0; ucfg_mlme_get_indoor_channel_support(psoc, &include_indoor_channel); if (!include_indoor_channel && wlan_reg_is_freq_indoor(pdev, sap_ch_freq)) { policy_mgr_debug("No more operation on indoor channel"); return false; } return true; } QDF_STATUS policy_mgr_valid_sap_conc_channel_check( struct wlan_objmgr_psoc *psoc, uint32_t *con_ch_freq, uint32_t sap_ch_freq, uint8_t sap_vdev_id, Loading Loading @@ -2307,11 +2325,13 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( return QDF_STATUS_E_FAILURE; } } else { if (!(policy_mgr_sta_sap_scc_on_lte_coex_chan if ((!(policy_mgr_sta_sap_scc_on_lte_coex_chan (psoc)) && !(policy_mgr_is_safe_channel (psoc, ch_freq))) { policy_mgr_warn("Can't have concurrency due to unsafe channel %d", ch_freq); (psoc, ch_freq))) || !policy_mgr_sap_allowed_on_indoor_freq(psoc, pm_ctx->pdev, sap_ch_freq)) { policy_mgr_warn("Can't have concurrency due to unsafe/indoor channel:%d, sap_ch_freq:%d", ch_freq, sap_ch_freq); return QDF_STATUS_E_FAILURE; } } Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +14 −0 Original line number Diff line number Diff line Loading @@ -1404,8 +1404,22 @@ void policy_mgr_set_pcl_for_connected_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool clear_pcl) { struct policy_mgr_pcl_list msg = { {0} }; struct wlan_objmgr_vdev *vdev; uint8_t roam_enabled_vdev_id; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_POLICY_MGR_ID); if (!vdev) { policy_mgr_err("vdev is NULL"); return; } if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE) { wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID); return; } wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID); /* * Get the vdev id of the STA on which roaming is already * initialized and set the vdev PCL for that STA vdev if dual Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +52 −0 Original line number Diff line number Diff line Loading @@ -1609,6 +1609,58 @@ bool policy_mgr_is_scc_with_this_vdev_id(struct wlan_objmgr_psoc *psoc, return false; } bool policy_mgr_current_concurrency_is_scc(struct wlan_objmgr_psoc *psoc) { uint32_t num_connections = 0; bool is_scc = false; struct policy_mgr_psoc_priv_obj *pm_ctx; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid Context"); return is_scc; } num_connections = policy_mgr_get_connection_count(psoc); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); switch (num_connections) { case 1: break; case 2: if (pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq && pm_conc_connection_list[0].mac == pm_conc_connection_list[1].mac) { is_scc = true; } break; case 3: if (policy_mgr_is_current_hwmode_dbs(psoc) && (pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq || pm_conc_connection_list[0].freq == pm_conc_connection_list[2].freq || pm_conc_connection_list[1].freq == pm_conc_connection_list[2].freq)) { is_scc = true; } else if ((pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq) && (pm_conc_connection_list[0].freq == pm_conc_connection_list[2].freq)) { is_scc = true; } break; default: policy_mgr_debug("unexpected num_connections value %d", num_connections); break; } qdf_mutex_release(&pm_ctx->qdf_conc_list_lock); return is_scc; } bool policy_mgr_current_concurrency_is_mcc(struct wlan_objmgr_psoc *psoc) { uint32_t num_connections = 0; Loading Loading
Kbuild +4 −0 Original line number Diff line number Diff line Loading @@ -3513,6 +3513,10 @@ ifdef CONFIG_SCHED_HISTORY_SIZE ccflags-y += -DWLAN_SCHED_HISTORY_SIZE=$(CONFIG_SCHED_HISTORY_SIZE) endif ifdef CONFIG_HANDLE_RX_REROUTE_ERR cppflags-y += -DHANDLE_RX_REROUTE_ERR endif # configure log buffer size ifdef CONFIG_CFG_NUM_DP_TRACE_RECORD ccflags-y += -DMAX_QDF_DP_TRACE_RECORDS=$(CONFIG_CFG_NUM_DP_TRACE_RECORD) Loading
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +26 −0 Original line number Diff line number Diff line Loading @@ -2326,6 +2326,16 @@ void policy_mgr_hw_mode_transition_cb(uint32_t old_hw_mode_index, struct policy_mgr_vdev_mac_map *vdev_mac_map, struct wlan_objmgr_psoc *context); /** * policy_mgr_current_concurrency_is_scc() - To check the current * concurrency combination if it is doing SCC * @psoc: PSOC object information * This routine is called to check if it is doing SCC * * Return: True - SCC, False - Otherwise */ bool policy_mgr_current_concurrency_is_scc(struct wlan_objmgr_psoc *psoc); /** * policy_mgr_current_concurrency_is_mcc() - To check the current * concurrency combination if it is doing MCC Loading Loading @@ -3057,6 +3067,22 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( uint32_t sap_ch_freq, uint8_t sap_vdev_id, struct ch_params *ch_params); /** * policy_mgr_sap_allowed_on_indoor_freq() - Check whether STA+SAP concurrency * allowed on indoor channel or not * @psoc: pointer to PSOC object information * @pdev: pointer to PDEV object information * @sap_ch_freq: initial channel frequency for SAP * * This function checks whether SAP is allowed to turn on in case of STA+SAP * concurrency if STA is on indoor channel. * * Return: false if SAP not allowed to come up on a indoor channel */ bool policy_mgr_sap_allowed_on_indoor_freq(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_pdev *pdev, uint32_t sap_ch_freq); /** * policy_mgr_get_alternate_channel_for_sap() - Get an alternate * channel to move the SAP to Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +24 −4 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "wlan_mlme_api.h" #include "sap_api.h" #include "wlan_mlme_api.h" #include "wlan_mlme_ucfg_api.h" enum policy_mgr_conc_next_action (*policy_mgr_get_current_pref_hw_mode_ptr) (struct wlan_objmgr_psoc *psoc); Loading Loading @@ -2202,6 +2203,23 @@ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( return QDF_STATUS_SUCCESS; } bool policy_mgr_sap_allowed_on_indoor_freq(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_pdev *pdev, uint32_t sap_ch_freq) { bool include_indoor_channel = 0; ucfg_mlme_get_indoor_channel_support(psoc, &include_indoor_channel); if (!include_indoor_channel && wlan_reg_is_freq_indoor(pdev, sap_ch_freq)) { policy_mgr_debug("No more operation on indoor channel"); return false; } return true; } QDF_STATUS policy_mgr_valid_sap_conc_channel_check( struct wlan_objmgr_psoc *psoc, uint32_t *con_ch_freq, uint32_t sap_ch_freq, uint8_t sap_vdev_id, Loading Loading @@ -2307,11 +2325,13 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( return QDF_STATUS_E_FAILURE; } } else { if (!(policy_mgr_sta_sap_scc_on_lte_coex_chan if ((!(policy_mgr_sta_sap_scc_on_lte_coex_chan (psoc)) && !(policy_mgr_is_safe_channel (psoc, ch_freq))) { policy_mgr_warn("Can't have concurrency due to unsafe channel %d", ch_freq); (psoc, ch_freq))) || !policy_mgr_sap_allowed_on_indoor_freq(psoc, pm_ctx->pdev, sap_ch_freq)) { policy_mgr_warn("Can't have concurrency due to unsafe/indoor channel:%d, sap_ch_freq:%d", ch_freq, sap_ch_freq); return QDF_STATUS_E_FAILURE; } } Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +14 −0 Original line number Diff line number Diff line Loading @@ -1404,8 +1404,22 @@ void policy_mgr_set_pcl_for_connected_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool clear_pcl) { struct policy_mgr_pcl_list msg = { {0} }; struct wlan_objmgr_vdev *vdev; uint8_t roam_enabled_vdev_id; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, WLAN_POLICY_MGR_ID); if (!vdev) { policy_mgr_err("vdev is NULL"); return; } if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE) { wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID); return; } wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID); /* * Get the vdev id of the STA on which roaming is already * initialized and set the vdev PCL for that STA vdev if dual Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +52 −0 Original line number Diff line number Diff line Loading @@ -1609,6 +1609,58 @@ bool policy_mgr_is_scc_with_this_vdev_id(struct wlan_objmgr_psoc *psoc, return false; } bool policy_mgr_current_concurrency_is_scc(struct wlan_objmgr_psoc *psoc) { uint32_t num_connections = 0; bool is_scc = false; struct policy_mgr_psoc_priv_obj *pm_ctx; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid Context"); return is_scc; } num_connections = policy_mgr_get_connection_count(psoc); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); switch (num_connections) { case 1: break; case 2: if (pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq && pm_conc_connection_list[0].mac == pm_conc_connection_list[1].mac) { is_scc = true; } break; case 3: if (policy_mgr_is_current_hwmode_dbs(psoc) && (pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq || pm_conc_connection_list[0].freq == pm_conc_connection_list[2].freq || pm_conc_connection_list[1].freq == pm_conc_connection_list[2].freq)) { is_scc = true; } else if ((pm_conc_connection_list[0].freq == pm_conc_connection_list[1].freq) && (pm_conc_connection_list[0].freq == pm_conc_connection_list[2].freq)) { is_scc = true; } break; default: policy_mgr_debug("unexpected num_connections value %d", num_connections); break; } qdf_mutex_release(&pm_ctx->qdf_conc_list_lock); return is_scc; } bool policy_mgr_current_concurrency_is_mcc(struct wlan_objmgr_psoc *psoc) { uint32_t num_connections = 0; Loading