diff --git a/components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c b/components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c index 185c773532..8ecce7d89e 100644 --- a/components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c +++ b/components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c @@ -890,7 +890,8 @@ QDF_STATUS if_mgr_validate_candidate(struct wlan_objmgr_vdev *vdev, */ if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev) && !policy_mgr_is_concurrency_allowed(psoc, mode, chan_freq, - HW_MODE_20_MHZ, conc_ext_flags)) { + HW_MODE_20_MHZ, conc_ext_flags, + NULL)) { ifmgr_info("Concurrency not allowed for this channel freq %d bssid "QDF_MAC_ADDR_FMT", selecting next", chan_freq, QDF_MAC_ADDR_REF(bssid_arg.peer_addr.bytes)); diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index bc530d4de8..59833b80f7 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c @@ -4083,7 +4083,7 @@ policy_mgr_ml_link_vdev_need_to_be_disabled(struct wlan_objmgr_psoc *psoc, return !policy_mgr_is_concurrency_allowed(psoc, PM_STA_MODE, wlan_get_operation_chan_freq(vdev), HW_MODE_20_MHZ, - conc_ext_flags.value); + conc_ext_flags.value, NULL); } static void @@ -6764,7 +6764,7 @@ policy_mgr_sta_ml_link_enable_allowed(struct wlan_objmgr_psoc *psoc, return policy_mgr_is_concurrency_allowed(psoc, PM_STA_MODE, disabled_link_freq, HW_MODE_20_MHZ, - conc_ext_flags.value); + conc_ext_flags.value, NULL); } /* @@ -7166,7 +7166,8 @@ policy_mgr_pick_link_vdev_from_inactive_list( if (policy_mgr_is_concurrency_allowed(psoc, PM_STA_MODE, inactive_freq_lst[i], HW_MODE_20_MHZ, - conc_ext_flags.value)) { + conc_ext_flags.value, + NULL)) { *picked_vdev_id = inactive_vdev_lst[i]; wlan_objmgr_vdev_release_ref(partner_vdev, WLAN_POLICY_MGR_ID); @@ -8061,9 +8062,10 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc, enum policy_mgr_con_mode mode, uint32_t ch_freq, enum hw_mode_bandwidth bw, - uint32_t ext_flags) + uint32_t ext_flags, + struct policy_mgr_pcl_list *pcl) { - uint32_t num_connections = 0, count = 0, index = 0; + uint32_t num_connections = 0, count = 0, index = 0, i; bool status = false, match = false; uint32_t list[MAX_NUMBER_OF_CONC_CONNECTIONS]; struct policy_mgr_psoc_priv_obj *pm_ctx; @@ -8212,6 +8214,25 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc, policy_mgr_err("LL SAP concurrency is not valid"); return status; } + + /* + * Don't allow DFS SAP on non-SCC channels if an ML-STA is already + * present. PCL list returns the SCC channels and all channels from + * other MAC in case of non-ML/single link STA. + */ + if (mode == PM_SAP_MODE && pcl && + wlan_reg_is_dfs_for_freq(pm_ctx->pdev, ch_freq)) { + for (i = 0; i < pcl->pcl_len; i++) + if (pcl->pcl_list[i] == ch_freq) { + status = true; + break; + } + if (!status) { + policy_mgr_err("SAP channel %d Not present in PCL", + ch_freq); + return status; + } + } status = true; return status; @@ -8237,7 +8258,7 @@ bool policy_mgr_allow_concurrency(struct wlan_objmgr_psoc *psoc, } allowed = policy_mgr_is_concurrency_allowed(psoc, mode, ch_freq, - bw, ext_flags); + bw, ext_flags, &pcl); /* Fourth connection concurrency check */ if (allowed && policy_mgr_get_connection_count(psoc) == 3) diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h index 5cf3849334..b773b4b402 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h @@ -1086,6 +1086,7 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, * @ch_freq: channel frequency on which new connection is coming up * @bw: Bandwidth requested by the connection (optional) * @ext_flags: extended flags for concurrency check (union conc_ext_flag) + * @pcl: Optional PCL for new connection * * When a new connection is about to come up check if current * concurrency combination including the new connection is @@ -1098,7 +1099,8 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc, enum policy_mgr_con_mode mode, uint32_t ch_freq, enum hw_mode_bandwidth bw, - uint32_t ext_flags); + uint32_t ext_flags, + struct policy_mgr_pcl_list *pcl); /** * policy_mgr_can_2ghz_share_low_high_5ghz_sbs() - if SBS mode is dynamic where diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c index ed51fe03f9..b17142a83e 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c @@ -3859,7 +3859,7 @@ QDF_STATUS policy_mgr_get_valid_chan_weights(struct wlan_objmgr_psoc *psoc, if (!policy_mgr_is_concurrency_allowed (psoc, mode, weight->saved_chan_list[i], HW_MODE_20_MHZ, - policy_mgr_get_conc_ext_flags(vdev, false))) + policy_mgr_get_conc_ext_flags(vdev, false), NULL)) continue; /* * Keep weight 0 (WEIGHT_OF_DISALLOWED_CHANNELS) not diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h index 6005566ebe..324437e5a7 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_i.h @@ -2073,7 +2073,7 @@ pm_third_connection_pcl_dbs_2x2_table = { [PM_STA_STA_DBS_1x1] = { [PM_STA_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, - [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, + [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, [PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, @@ -2088,7 +2088,7 @@ pm_third_connection_pcl_dbs_2x2_table = { [PM_STA_STA_DBS_2x2] = { [PM_STA_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, - [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, + [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, [PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, @@ -2105,7 +2105,7 @@ pm_third_connection_pcl_dbs_2x2_table = { [PM_STA_MODE] = { PM_SBS_CH_5G, PM_SBS_CH, PM_SBS_CH}, [PM_SAP_MODE] = { - PM_SBS_CH_5G, PM_SBS_CH, PM_SBS_CH}, + PM_SCC_CH, PM_SCC_CH, PM_SCC_CH}, [PM_P2P_CLIENT_MODE] = { PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE}, [PM_P2P_GO_MODE] = { diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_sbs_i.h b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_sbs_i.h index d57555c0b3..7d1f1812fa 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_sbs_i.h +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_tables_2x2_dbs_sbs_i.h @@ -1974,7 +1974,7 @@ pm_third_connection_pcl_dbs_sbs_2x2_table = { [PM_STA_STA_DBS_1x1] = { [PM_STA_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24}, - [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, + [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, [PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24_5G, @@ -1991,7 +1991,7 @@ pm_third_connection_pcl_dbs_sbs_2x2_table = { [PM_STA_STA_DBS_2x2] = { [PM_STA_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24}, - [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24, + [PM_SAP_MODE] = {PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24}, [PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24_5G, @@ -2009,7 +2009,7 @@ pm_third_connection_pcl_dbs_sbs_2x2_table = { [PM_STA_MODE] = { PM_SBS_CH_5G, PM_SBS_CH_5G, PM_SBS_CH}, [PM_SAP_MODE] = { - PM_SBS_CH_5G, PM_SBS_CH_5G, PM_SBS_CH}, + PM_SCC_CH, PM_SCC_CH, PM_SCC_CH}, [PM_P2P_CLIENT_MODE] = { PM_SBS_CH_5G, PM_SBS_CH_5G, PM_SBS_CH}, [PM_P2P_GO_MODE] = {