diff --git a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c index ec4ea43672..4ccc224178 100644 --- a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c +++ b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c @@ -67,9 +67,9 @@ QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev, sta_cnt = policy_mgr_get_mode_specific_conn_info(psoc, NULL, vdev_id_list, PM_STA_MODE); - sap_cnt = policy_mgr_get_mode_specific_conn_info(psoc, NULL, - &vdev_id_list[sta_cnt], - PM_SAP_MODE); + sap_cnt = policy_mgr_get_sap_mode_info(psoc, NULL, + &vdev_id_list[sta_cnt]); + op_mode = wlan_vdev_mlme_get_opmode(vdev); if (op_mode == QDF_STA_MODE || op_mode == QDF_P2P_CLIENT_MODE) diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index 750d8e7234..a196532b1a 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -145,6 +145,7 @@ static inline const char *device_mode_to_string(uint32_t idx) CASE_RETURN_STRING(PM_P2P_GO_MODE); CASE_RETURN_STRING(PM_NDI_MODE); CASE_RETURN_STRING(PM_NAN_DISC_MODE); + CASE_RETURN_STRING(PM_LL_LT_SAP_MODE); default: return "Unknown"; } @@ -2409,19 +2410,6 @@ bool policy_mgr_is_mcc_on_any_sta_vdev(struct wlan_objmgr_psoc *psoc); void policy_mgr_soc_set_dual_mac_cfg_cb(enum set_hw_mode_status status, uint32_t scan_config, uint32_t fw_mode_config); -/** - * policy_mgr_map_concurrency_mode() - to map concurrency mode - * between sme and hdd - * @old_mode: sme provided adapter mode - * @new_mode: hdd provided concurrency mode - * - * This routine will map concurrency mode between sme and hdd - * - * Return: true or false - */ -bool policy_mgr_map_concurrency_mode(enum QDF_OPMODE *old_mode, - enum policy_mgr_con_mode *new_mode); - /** * policy_mgr_mode_specific_num_open_sessions() - to get number of open sessions * for a specific mode diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c index 1a1489bb06..d458117347 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c @@ -385,8 +385,8 @@ QDF_STATUS policy_mgr_update_connection_info(struct wlan_objmgr_psoc *psoc, cur_freq = pm_conc_connection_list[conn_index].freq; - mode = policy_mgr_get_mode(conn_table_entry.type, - conn_table_entry.sub_type); + mode = policy_mgr_get_mode(psoc, conn_table_entry.type, + conn_table_entry.sub_type, vdev_id); ch_freq = conn_table_entry.mhz; status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g); if (QDF_IS_STATUS_SUCCESS(status)) { @@ -1535,8 +1535,7 @@ static bool policy_mgr_is_sap_go_existed(struct wlan_objmgr_psoc *psoc) { uint32_t ap_present, go_present; - ap_present = policy_mgr_mode_specific_connection_count( - psoc, PM_SAP_MODE, NULL); + ap_present = policy_mgr_get_sap_mode_count(psoc, NULL); if (ap_present) return true; @@ -1963,7 +1962,7 @@ policy_mgr_nan_sap_pre_enable_conc_check(struct wlan_objmgr_psoc *psoc, return false; } - if (!(mode == PM_SAP_MODE || mode == PM_NAN_DISC_MODE)) { + if (!policy_mgr_is_sap_mode(mode) || mode == PM_NAN_DISC_MODE) { policy_mgr_debug("Not NAN or SAP mode"); return true; } @@ -1987,6 +1986,13 @@ policy_mgr_nan_sap_pre_enable_conc_check(struct wlan_objmgr_psoc *psoc, sap_freq = policy_mgr_mode_specific_get_channel(pm_ctx->psoc, PM_SAP_MODE); policy_mgr_debug("FREQ SAP: %d NAN: %d", sap_freq, ch_freq); + if (!sap_freq) { + sap_freq = policy_mgr_mode_specific_get_channel( + pm_ctx->psoc, + PM_LL_LT_SAP_MODE); + policy_mgr_debug("FREQ LL_LT_SAP: %d NAN: %d", + sap_freq, ch_freq); + } if (ucfg_is_nan_dbs_supported(pm_ctx->psoc) && !WLAN_REG_IS_SAME_BAND_FREQS(sap_freq, ch_freq)) return true; @@ -2005,7 +2011,7 @@ policy_mgr_nan_sap_pre_enable_conc_check(struct wlan_objmgr_psoc *psoc, policy_mgr_debug("NAN+SAP unsafe ch SCC disabled"); return false; } - } else if (mode == PM_SAP_MODE) { + } else if (policy_mgr_is_sap_mode(mode)) { nan_2g_freq = policy_mgr_mode_specific_get_channel(pm_ctx->psoc, PM_NAN_DISC_MODE); @@ -2063,7 +2069,7 @@ policy_mgr_nan_sap_post_enable_conc_check(struct wlan_objmgr_psoc *psoc) qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { - if (pm_conc_connection_list[i].mode == PM_SAP_MODE && + if (policy_mgr_is_sap_mode(pm_conc_connection_list[i].mode) && pm_conc_connection_list[i].in_use) { sap_info = &pm_conc_connection_list[i]; break; @@ -2571,9 +2577,10 @@ static void __policy_mgr_check_sta_ap_concurrent_ch_intf( if (!policy_mgr_is_sap_go_existed(pm_ctx->psoc)) goto end; - cc_count = policy_mgr_get_mode_specific_conn_info( - pm_ctx->psoc, &op_ch_freq_list[cc_count], - &vdev_id[cc_count], PM_SAP_MODE); + cc_count = policy_mgr_get_sap_mode_info(pm_ctx->psoc, + &op_ch_freq_list[cc_count], + &vdev_id[cc_count]); + policy_mgr_debug("Number of concurrent SAP: %d", cc_count); if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS) cc_count = cc_count + diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c index d6a4e386f8..5b8ecc1b46 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c @@ -529,7 +529,7 @@ void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc, pm_ctx->cdp_cbacks.cdp_update_mac_id(psoc, vdev_id, mac); /* IPA only cares about STA or SAP mode */ - if (mode == PM_STA_MODE || mode == PM_SAP_MODE) { + if (mode == PM_STA_MODE || policy_mgr_is_sap_mode(mode)) { mcc_mode = policy_mgr_current_concurrency_is_mcc(psoc); if (pm_ctx->dp_cbacks.hdd_ipa_set_mcc_mode_cb) @@ -1166,6 +1166,9 @@ static uint32_t policy_mgr_dump_current_concurrency_one_connection( case PM_NDI_MODE: count = strlcat(cc_mode, "NDI", length); break; + case PM_LL_LT_SAP_MODE: + count = strlcat(cc_mode, "LT_SAP", length); + break; default: policy_mgr_err("unexpected mode %d", mode); break; @@ -1237,6 +1240,12 @@ static uint32_t policy_mgr_dump_current_concurrency_two_connection( psoc, cc_mode, length); count += strlcat(cc_mode, "+NAN Disc", length); break; + case PM_LL_LT_SAP_MODE: + count = policy_mgr_dump_current_concurrency_one_connection( + psoc, cc_mode, length); + count += strlcat(cc_mode, "+LT_SAP", + length); + break; default: policy_mgr_err("unexpected mode %d", mode); break; @@ -1309,6 +1318,13 @@ static uint32_t policy_mgr_dump_current_concurrency_three_connection( count += strlcat(cc_mode, "+NDI", length); break; + case PM_LL_LT_SAP_MODE: + count = policy_mgr_dump_current_concurrency_two_connection( + psoc, cc_mode, length); + count += strlcat(cc_mode, "+LT_SAP", + length); + + break; default: policy_mgr_err("unexpected mode %d", mode); break; @@ -1519,6 +1535,13 @@ static uint32_t policy_mgr_dump_current_concurrency_4_connection( count += strlcat(cc_mode, "+NDI", length); break; + case PM_LL_LT_SAP_MODE: + count = policy_mgr_dump_current_concurrency_three_connection( + psoc, cc_mode, length); + count += strlcat(cc_mode, "+LT_SAP", + length); + break; + default: policy_mgr_err("unexpected mode %d", mode); break; @@ -2082,25 +2105,26 @@ uint32_t policy_mgr_get_connection_for_vdev_id(struct wlan_objmgr_psoc *psoc, return conn_index; } -/** - * policy_mgr_get_mode() - Get mode from type and subtype - * @type: type - * @subtype: subtype - * - * Get the concurrency mode from the type and subtype - * of the interface - * - * Return: policy_mgr_con_mode - */ -enum policy_mgr_con_mode policy_mgr_get_mode(uint8_t type, - uint8_t subtype) +enum policy_mgr_con_mode policy_mgr_get_mode(struct wlan_objmgr_psoc *psoc, + uint8_t type, uint8_t subtype, + uint32_t vdev_id) + { enum policy_mgr_con_mode mode = PM_MAX_NUM_OF_MODE; if (type == WMI_VDEV_TYPE_AP) { switch (subtype) { case 0: - mode = PM_SAP_MODE; + /* + * This feature flag is added on temporary basis, once LL_LT_SAP is + * enabled, this feature flag will be removed. + */ +#ifdef WLAN_FEATURE_LL_LT_SAP + if (policy_mgr_is_vdev_ll_lt_sap(psoc, vdev_id)) + mode = PM_LL_LT_SAP_MODE; + else +#endif + mode = PM_SAP_MODE; break; case WMI_UNIFIED_VDEV_SUBTYPE_P2P_GO: mode = PM_P2P_GO_MODE; @@ -4409,8 +4433,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, } } - count = policy_mgr_mode_specific_connection_count(psoc, - PM_SAP_MODE, list); + count = policy_mgr_get_sap_mode_count(psoc, list); + for (index = 0; index < count; index++) { qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); vdev_id = pm_conc_connection_list[list[index]].vdev_id; 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 5e610ddf80..36ca7b9040 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 @@ -4912,10 +4912,9 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc, * there are more than one STA connections */ if ((policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE, NULL) > 1) || - (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) > 0) || + (policy_mgr_get_beaconing_mode_count(psoc, NULL) > 0) || (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_CLIENT_MODE, NULL) > 0) || - (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_GO_MODE, NULL) > 0) || (policy_mgr_mode_specific_connection_count(psoc, PM_NDI_MODE, NULL) > 0)) { @@ -4924,8 +4923,7 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc, }; /* Enable RPS if SAP interface has come up */ - if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) - == 1) { + if (policy_mgr_get_sap_mode_count(psoc, NULL) == 1) { if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb) pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb(true); } @@ -5080,15 +5078,10 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc, ((policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE, NULL) == 1) && - (policy_mgr_mode_specific_connection_count(psoc, - PM_SAP_MODE, - NULL) == 0) && + (policy_mgr_get_beaconing_mode_count(psoc, NULL) == 0) && (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_CLIENT_MODE, NULL) == 0) && - (policy_mgr_mode_specific_connection_count(psoc, - PM_P2P_GO_MODE, - NULL) == 0) && (policy_mgr_mode_specific_connection_count(psoc, PM_NDI_MODE, NULL) == 0))) { @@ -5097,8 +5090,7 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc, }; /* Disable RPS if SAP interface has come up */ - if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) - == 0) { + if (policy_mgr_get_sap_mode_count(psoc, NULL) == 0) { if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb) pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb(false); } @@ -5181,8 +5173,8 @@ QDF_STATUS policy_mgr_incr_connection_count(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_FAILURE; } - mode = policy_mgr_get_mode(conn_table_entry.type, - conn_table_entry.sub_type); + mode = policy_mgr_get_mode(psoc, conn_table_entry.type, + conn_table_entry.sub_type, vdev_id); ch_freq = conn_table_entry.mhz; status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g); if (QDF_IS_STATUS_SUCCESS(status)) { @@ -5293,40 +5285,6 @@ QDF_STATUS policy_mgr_decr_connection_count(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } -bool policy_mgr_map_concurrency_mode(enum QDF_OPMODE *old_mode, - enum policy_mgr_con_mode *new_mode) -{ - bool status = true; - - switch (*old_mode) { - - case QDF_STA_MODE: - *new_mode = PM_STA_MODE; - break; - case QDF_SAP_MODE: - *new_mode = PM_SAP_MODE; - break; - case QDF_P2P_CLIENT_MODE: - *new_mode = PM_P2P_CLIENT_MODE; - break; - case QDF_P2P_GO_MODE: - *new_mode = PM_P2P_GO_MODE; - break; - case QDF_NAN_DISC_MODE: - *new_mode = PM_NAN_DISC_MODE; - break; - case QDF_NDI_MODE: - *new_mode = PM_NDI_MODE; - break; - default: - *new_mode = PM_MAX_NUM_OF_MODE; - status = false; - break; - } - - return status; -} - uint32_t policy_mgr_get_mode_specific_conn_info( struct wlan_objmgr_psoc *psoc, uint32_t *ch_freq_list, uint8_t *vdev_id, @@ -5719,8 +5677,7 @@ static bool policy_mgr_is_6g_channel_allowed( is_dfs = (conn->ch_flagext & (IEEE80211_CHAN_DFS | IEEE80211_CHAN_DFS_CFREQ2)) && WLAN_REG_IS_5GHZ_CH_FREQ(conn->freq); - if ((conn->mode == PM_SAP_MODE || - conn->mode == PM_P2P_GO_MODE) && + if (policy_mgr_is_beaconing_mode(conn->mode) && is_dfs && (ch_freq != conn->freq && !policy_mgr_are_sbs_chan(psoc, ch_freq, conn->freq))) { @@ -7224,12 +7181,10 @@ policy_mgr_handle_ml_sta_link_concurrency(struct wlan_objmgr_psoc *psoc, * the link, disabled by SAP/P2P logic, as this API only consider * STA specific counts and ignore other counts. */ - if (policy_mgr_mode_specific_connection_count(psoc, - PM_SAP_MODE, NULL) || + if (policy_mgr_get_beaconing_mode_count(psoc, NULL) || policy_mgr_mode_specific_connection_count(psoc, - PM_P2P_CLIENT_MODE, NULL) || - policy_mgr_mode_specific_connection_count(psoc, - PM_P2P_GO_MODE, NULL)) { + PM_P2P_CLIENT_MODE, + NULL)) { policy_mgr_debug("SAP/GO/CLI exist ignore this check"); return QDF_STATUS_E_INVAL; } @@ -7271,8 +7226,8 @@ policy_mgr_handle_ml_sta_link_concurrency(struct wlan_objmgr_psoc *psoc, static bool policy_mgr_is_mode_p2p_sap(enum policy_mgr_con_mode mode) { - return (mode == PM_SAP_MODE) || (mode == PM_P2P_CLIENT_MODE) || - (mode == PM_P2P_GO_MODE); + return (policy_mgr_is_beaconing_mode(mode) || + (mode == PM_P2P_CLIENT_MODE)); } bool @@ -10248,9 +10203,8 @@ uint32_t policy_mgr_get_sap_go_count_on_mac(struct wlan_objmgr_psoc *psoc, conn_index++) { if (pm_conc_connection_list[conn_index].mac == mac_id && pm_conc_connection_list[conn_index].in_use && - (pm_conc_connection_list[conn_index].mode == PM_SAP_MODE || - pm_conc_connection_list[conn_index].mode == - PM_P2P_GO_MODE)) { + policy_mgr_is_beaconing_mode( + pm_conc_connection_list[conn_index].mode)) { if (list) list[count] = pm_conc_connection_list[conn_index].vdev_id; @@ -10314,9 +10268,9 @@ QDF_STATUS policy_mgr_is_chan_ok_for_dnbs(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_INVAL; } - cc_count = policy_mgr_get_mode_specific_conn_info( - psoc, &op_ch_freq_list[cc_count], - &vdev_id[cc_count], PM_SAP_MODE); + cc_count = policy_mgr_get_sap_mode_info(psoc, + &op_ch_freq_list[cc_count], + &vdev_id[cc_count]); if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS) cc_count = cc_count + @@ -10748,7 +10702,7 @@ bool policy_mgr_is_multi_sap_allowed_on_same_band( return false; } - if (!ch_freq || mode != PM_SAP_MODE) + if (!ch_freq || !policy_mgr_is_sap_mode(mode)) return true; status = policy_mgr_get_multi_sap_allowed_on_same_band(psoc, @@ -10763,8 +10717,7 @@ bool policy_mgr_is_multi_sap_allowed_on_same_band( uint32_t list[MAX_NUMBER_OF_CONC_CONNECTIONS]; struct policy_mgr_conc_connection_info *ap_info; - ap_cnt = policy_mgr_mode_specific_connection_count(psoc, - PM_SAP_MODE, list); + ap_cnt = policy_mgr_get_sap_mode_count(psoc, list); if (!ap_cnt) return true; @@ -11031,7 +10984,8 @@ void policy_mgr_init_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, 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 && PM_SAP_MODE == conn_info->mode && + if (conn_info->in_use && + policy_mgr_is_sap_mode(conn_info->mode) && vdev_id == conn_info->vdev_id) { conn_info->conn_6ghz_flag = ap_6ghz_capable; conn_info->conn_6ghz_flag |= CONN_6GHZ_FLAG_VALID; @@ -11063,8 +11017,8 @@ void policy_mgr_set_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, 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 && (PM_SAP_MODE == conn_info->mode || - PM_P2P_GO_MODE == conn_info->mode) && + if (conn_info->in_use && + policy_mgr_is_beaconing_mode(conn_info->mode) && policy_mgr_is_6ghz_conc_mode_supported( psoc, conn_info->mode) && vdev_id == conn_info->vdev_id) { @@ -11104,8 +11058,8 @@ bool policy_mgr_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, 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 && (PM_SAP_MODE == conn_info->mode || - PM_P2P_GO_MODE == conn_info->mode) && + if (conn_info->in_use && + policy_mgr_is_beaconing_mode(conn_info->mode) && policy_mgr_is_6ghz_conc_mode_supported( psoc, conn_info->mode) && vdev_id == conn_info->vdev_id) { @@ -11249,10 +11203,8 @@ policy_mgr_fetch_existing_con_info(struct wlan_objmgr_psoc *psoc, qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS; conn_index++) { - if ((pm_conc_connection_list[conn_index].mode == - PM_P2P_GO_MODE || - pm_conc_connection_list[conn_index].mode == - PM_SAP_MODE || + if ((policy_mgr_is_beaconing_mode( + pm_conc_connection_list[conn_index].mode) || pm_conc_connection_list[conn_index].mode == PM_P2P_CLIENT_MODE || pm_conc_connection_list[conn_index].mode == @@ -11591,10 +11543,7 @@ QDF_STATUS policy_mgr_check_mon_concurrency(struct wlan_objmgr_psoc *psoc) return QDF_STATUS_E_BUSY; } - num_open_session = policy_mgr_mode_specific_connection_count( - psoc, - PM_SAP_MODE, - NULL); + num_open_session = policy_mgr_get_sap_mode_count(psoc, NULL); if (num_open_session) { policy_mgr_err("cannot add monitor mode, due to SAP concurrency"); @@ -11858,8 +11807,8 @@ static qdf_freq_t _policy_mgr_get_ll_sap_freq(struct wlan_objmgr_psoc *psoc, qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); for (conn_idx = 0; conn_idx < MAX_NUMBER_OF_CONC_CONNECTIONS; conn_idx++) { - if (!(pm_conc_connection_list[conn_idx].mode == - PM_SAP_MODE && + if (!(policy_mgr_is_sap_mode( + pm_conc_connection_list[conn_idx].mode) && pm_conc_connection_list[conn_idx].in_use)) continue; 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 d46190c335..1b3f24307e 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 @@ -818,8 +818,20 @@ policy_mgr_dump_disabled_ml_links(struct policy_mgr_psoc_priv_obj *pm_ctx) {} void policy_mgr_dump_current_concurrency(struct wlan_objmgr_psoc *psoc); void pm_dbs_opportunistic_timer_handler(void *data); -enum policy_mgr_con_mode policy_mgr_get_mode(uint8_t type, - uint8_t subtype); + +/** + * policy_mgr_get_mode() - Get policy manager mode + * @psoc: psoc handle + * @type: WMI vdev type for which policy mgr mode is required + * @subtype: Subtype of the vdev type + * @vdev_id: Vdev id for which the policy mgr type is required + * + * + * Return: policy_mgr_con_mode + */ +enum policy_mgr_con_mode policy_mgr_get_mode(struct wlan_objmgr_psoc *psoc, + uint8_t type, uint8_t subtype, + uint32_t vdev_id); /** * policy_mgr_get_channel_list() - Get channel list based on PCL and mode 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 5fad5507ae..5a9e38ad31 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 @@ -3479,7 +3479,7 @@ QDF_STATUS policy_mgr_get_valid_chans_from_range( ch_weight_len = *ch_cnt; /* check the channel avoidance list for beaconing entities */ - if (mode == PM_SAP_MODE || mode == PM_P2P_GO_MODE) + if (policy_mgr_is_beaconing_mode(mode)) policy_mgr_update_with_safe_channel_list( psoc, ch_freq_list, ch_cnt, ch_weight_list, ch_weight_len); @@ -3930,10 +3930,7 @@ QDF_STATUS policy_mgr_get_valid_chan_weights(struct wlan_objmgr_psoc *psoc, * vdev is SAP/P2PGO/P2PGC. */ if ((mode == PM_P2P_GO_MODE || mode == PM_P2P_CLIENT_MODE) && - (policy_mgr_mode_specific_connection_count( - psoc, PM_SAP_MODE, NULL) || - policy_mgr_mode_specific_connection_count( - psoc, PM_P2P_GO_MODE, NULL) || + ((policy_mgr_get_beaconing_mode_count(psoc, NULL)) || policy_mgr_mode_specific_connection_count( psoc, PM_P2P_CLIENT_MODE, NULL))) strict_follow_pcl = true; @@ -4308,8 +4305,7 @@ bool policy_mgr_is_sta_chan_valid_for_connect_and_roam( skip_6g_and_indoor_freq = wlan_scan_cfg_skip_6g_and_indoor_freq(psoc); sap_count = - policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, - NULL); + policy_mgr_get_sap_mode_count(psoc, NULL); /* * Do not allow STA to connect/roam on 6Ghz or indoor channel for * non-dbs hardware if SAP is present and skip_6g_and_indoor_freq_scan diff --git a/components/nan/core/src/nan_main.c b/components/nan/core/src/nan_main.c index 035cf980c0..c961fc7ce1 100644 --- a/components/nan/core/src/nan_main.c +++ b/components/nan/core/src/nan_main.c @@ -1256,8 +1256,7 @@ QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_pdev *pdev, goto pre_enable_failure; } - if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, - NULL) && + if ((policy_mgr_get_sap_mode_count(psoc, NULL)) && !policy_mgr_nan_sap_pre_enable_conc_check(psoc, PM_NAN_DISC_MODE, nan_ch_freq)) { nan_debug("NAN not enabled due to concurrency constraints"); diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index a9244650ee..b9926533e8 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -14762,7 +14762,7 @@ static uint32_t wlan_hdd_populate_weigh_pcl( w_pcl[i].freq = chan_weights->pcl_list[i]; w_pcl[i].weight = chan_weights->weight_list[i]; - if (intf_mode == PM_SAP_MODE || intf_mode == PM_P2P_GO_MODE) + if (policy_mgr_is_beaconing_mode(intf_mode)) w_pcl[i].flag = PCL_CHANNEL_SUPPORT_GO; else w_pcl[i].flag = PCL_CHANNEL_SUPPORT_CLI; @@ -14797,8 +14797,8 @@ static uint32_t wlan_hdd_populate_weigh_pcl( PCL_CHANNEL_EXCLUDE_IN_GO_NEG; w_pcl[chan_idx].weight = 0; } else { - if (intf_mode == PM_SAP_MODE || - intf_mode == PM_P2P_GO_MODE) + if (policy_mgr_is_beaconing_mode( + intf_mode)) w_pcl[chan_idx].flag = PCL_CHANNEL_SUPPORT_GO; else diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 1ff5398019..2576e883a2 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -2033,12 +2033,7 @@ hdd_hostapd_check_channel_post_csa(struct hdd_context *hdd_ctx, return; } - sap_cnt = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, - PM_SAP_MODE, - NULL); - sap_cnt += policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, - PM_P2P_GO_MODE, - NULL); + sap_cnt = policy_mgr_get_beaconing_mode_count(hdd_ctx->psoc, NULL); if (sap_cnt > 1) policy_mgr_check_concurrent_intf_and_restart_sap( hdd_ctx->psoc, @@ -4058,7 +4053,7 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) con_mode = policy_mgr_qdf_opmode_to_pm_con_mode(psoc, ap_adapter->device_mode, vdev_id); - if ((con_mode != PM_SAP_MODE && con_mode != PM_P2P_GO_MODE) || + if (!policy_mgr_is_beaconing_mode(con_mode) || !policy_mgr_is_6ghz_conc_mode_supported(psoc, con_mode)) { hdd_err("unexpected device mode %d", ap_adapter->device_mode); wlan_objmgr_vdev_release_ref(vdev, WLAN_HDD_ID_OBJ_MGR); @@ -7864,9 +7859,9 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy, sta_cnt = policy_mgr_get_mode_specific_conn_info(hdd_ctx->psoc, NULL, vdev_id_list, PM_STA_MODE); - sap_cnt = policy_mgr_get_mode_specific_conn_info(hdd_ctx->psoc, NULL, - &vdev_id_list[sta_cnt], - PM_SAP_MODE); + sap_cnt = policy_mgr_get_sap_mode_info(hdd_ctx->psoc, NULL, + &vdev_id_list[sta_cnt]); + /* Disable NAN Disc before starting P2P GO or STA+SAP or SAP+SAP */ if (adapter->device_mode == QDF_P2P_GO_MODE || sta_cnt || (sap_cnt > (MAX_SAP_NUM_CONCURRENCY_WITH_NAN - 1))) { diff --git a/core/hdd/src/wlan_hdd_twt.c b/core/hdd/src/wlan_hdd_twt.c index 12d906c6c2..01e4c30a18 100644 --- a/core/hdd/src/wlan_hdd_twt.c +++ b/core/hdd/src/wlan_hdd_twt.c @@ -4776,9 +4776,7 @@ void __hdd_twt_update_work_handler(struct hdd_context *hdd_ctx) sta_count = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, PM_STA_MODE, NULL); - sap_count = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, - PM_SAP_MODE, - NULL); + sap_count = policy_mgr_get_sap_mode_count(hdd_ctx->psoc, NULL); twt_arg.hdd_ctx = hdd_ctx; hdd_debug("Total connection %d, sta_count %d, sap_count %d", diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index af33fef2de..76d6982cd4 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -10374,9 +10374,8 @@ QDF_STATUS lim_ap_mlme_vdev_rnr_notify(struct pe_session *session) return status; pe_debug("vdev id %d non mlo 6G AP notify co-located AP to update RNR", wlan_vdev_get_id(session->vdev)); - vdev_num = policy_mgr_get_mode_specific_conn_info( - mac_ctx->psoc, freq_list, vdev_id_list, - PM_SAP_MODE); + vdev_num = policy_mgr_get_sap_mode_info(mac_ctx->psoc, freq_list, + vdev_id_list); for (i = 0; i < vdev_num; i++) { if (vdev_id_list[i] == session->vdev_id) continue; diff --git a/core/sap/src/sap_module.c b/core/sap/src/sap_module.c index 9476c42d11..8b448ffbfb 100644 --- a/core/sap/src/sap_module.c +++ b/core/sap/src/sap_module.c @@ -3460,6 +3460,7 @@ wlansap_get_safe_channel(struct sap_context *sap_ctx, mac_handle_t mac_handle; uint32_t pcl_len = 0, i; uint32_t selected_freq; + enum policy_mgr_con_mode mode; if (!sap_ctx) { sap_err("NULL parameter"); @@ -3473,6 +3474,9 @@ wlansap_get_safe_channel(struct sap_context *sap_ctx, } mac_handle = MAC_HANDLE(mac); + mode = policy_mgr_qdf_opmode_to_pm_con_mode(mac->psoc, + QDF_SAP_MODE, + sap_ctx->vdev_id); /* get the channel list for current domain */ status = policy_mgr_get_valid_chans(mac->psoc, pcl_freqs, &pcl_len); if (QDF_IS_STATUS_ERROR(status)) { @@ -3491,7 +3495,7 @@ wlansap_get_safe_channel(struct sap_context *sap_ctx, status = policy_mgr_get_valid_chans_from_range(mac->psoc, pcl_freqs, &pcl_len, - PM_SAP_MODE); + mode); if (QDF_IS_STATUS_ERROR(status) || !pcl_len) { sap_err("failed to get valid channel: %d len %d", status, pcl_len); @@ -3574,6 +3578,7 @@ wlansap_get_safe_channel_from_pcl_and_acs_range(struct sap_context *sap_ctx, QDF_STATUS status; mac_handle_t mac_handle; uint32_t pcl_len = 0; + enum policy_mgr_con_mode mode; if (!sap_ctx) { sap_err("NULL parameter"); @@ -3592,8 +3597,11 @@ wlansap_get_safe_channel_from_pcl_and_acs_range(struct sap_context *sap_ctx, return wlansap_get_safe_channel(sap_ctx, ch_width); } + mode = policy_mgr_qdf_opmode_to_pm_con_mode(mac->psoc, QDF_SAP_MODE, + sap_ctx->vdev_id); + status = - policy_mgr_get_pcl_for_scc_in_same_mode(mac->psoc, PM_SAP_MODE, + policy_mgr_get_pcl_for_scc_in_same_mode(mac->psoc, mode, pcl_freqs, &pcl_len, pcl.weight_list, QDF_ARRAY_SIZE(pcl.weight_list), @@ -3697,6 +3705,7 @@ uint32_t wlansap_get_safe_channel_from_pcl_for_sap(struct sap_context *sap_ctx) uint32_t pcl_freqs[NUM_CHANNELS] = {0}; QDF_STATUS status; uint32_t pcl_len = 0; + enum policy_mgr_con_mode mode; if (!sap_ctx) { sap_err("NULL parameter"); @@ -3714,7 +3723,10 @@ uint32_t wlansap_get_safe_channel_from_pcl_for_sap(struct sap_context *sap_ctx) sap_err("NULL pdev"); } - status = policy_mgr_get_pcl_for_vdev_id(mac->psoc, PM_SAP_MODE, + mode = policy_mgr_qdf_opmode_to_pm_con_mode(mac->psoc, QDF_SAP_MODE, + sap_ctx->vdev_id); + + status = policy_mgr_get_pcl_for_vdev_id(mac->psoc, mode, pcl_freqs, &pcl_len, pcl.weight_list, QDF_ARRAY_SIZE(pcl.weight_list), @@ -3743,6 +3755,9 @@ uint32_t wlansap_get_safe_channel_from_pcl_for_sap(struct sap_context *sap_ctx) sap_debug("pcl length is zero!"); } + if (mode == PM_LL_LT_SAP_MODE) + return INVALID_CHANNEL_ID; + return wlansap_get_2g_first_safe_chan_freq(sap_ctx); } @@ -4043,8 +4058,8 @@ bool wlansap_filter_vendor_unsafe_ch_freq( if (!mac) return false; - count = policy_mgr_mode_specific_connection_count(mac->psoc, - PM_SAP_MODE, NULL); + count = policy_mgr_get_sap_mode_count(mac->psoc, NULL); + if (count != policy_mgr_get_connection_count(mac->psoc)) return false; diff --git a/os_if/twt/src/osif_twt_ext_req.c b/os_if/twt/src/osif_twt_ext_req.c index c768f8f8ec..7c5ce15889 100644 --- a/os_if/twt/src/osif_twt_ext_req.c +++ b/os_if/twt/src/osif_twt_ext_req.c @@ -1379,9 +1379,8 @@ void osif_twt_concurrency_update_handler(struct wlan_objmgr_psoc *psoc, sta_count = policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE, NULL); - sap_count = policy_mgr_mode_specific_connection_count(psoc, - PM_SAP_MODE, - NULL); + sap_count = policy_mgr_get_sap_mode_count(psoc, NULL); + twt_arg.psoc = psoc; osif_debug("Total connection %d, sta_count %d, sap_count %d",