qcacld-3.0: Add support for LL_LT_SAP_MODE in policy mgr

Currently PM_LL_LT_SAP_MODE is not handled in policy manager.
With this change add support for PM_LL_LT_SAP_MODE in the policy
manager.

Change-Id: Icfbb3a95dc65225fc7dad5df7dca9306a5029402
CRs-Fixed: 3536491
This commit is contained in:
Ashish Kumar Dhanotiya
2023-06-21 11:09:38 +05:30
committed by Rahul Choudhary
parent 84a9b935b3
commit fe6d7d0625
14 changed files with 142 additions and 161 deletions

View File

@@ -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, sta_cnt = policy_mgr_get_mode_specific_conn_info(psoc, NULL,
vdev_id_list, vdev_id_list,
PM_STA_MODE); PM_STA_MODE);
sap_cnt = policy_mgr_get_mode_specific_conn_info(psoc, NULL, sap_cnt = policy_mgr_get_sap_mode_info(psoc, NULL,
&vdev_id_list[sta_cnt], &vdev_id_list[sta_cnt]);
PM_SAP_MODE);
op_mode = wlan_vdev_mlme_get_opmode(vdev); op_mode = wlan_vdev_mlme_get_opmode(vdev);
if (op_mode == QDF_STA_MODE || op_mode == QDF_P2P_CLIENT_MODE) if (op_mode == QDF_STA_MODE || op_mode == QDF_P2P_CLIENT_MODE)

View File

@@ -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_P2P_GO_MODE);
CASE_RETURN_STRING(PM_NDI_MODE); CASE_RETURN_STRING(PM_NDI_MODE);
CASE_RETURN_STRING(PM_NAN_DISC_MODE); CASE_RETURN_STRING(PM_NAN_DISC_MODE);
CASE_RETURN_STRING(PM_LL_LT_SAP_MODE);
default: default:
return "Unknown"; 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, void policy_mgr_soc_set_dual_mac_cfg_cb(enum set_hw_mode_status status,
uint32_t scan_config, uint32_t fw_mode_config); 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 * policy_mgr_mode_specific_num_open_sessions() - to get number of open sessions
* for a specific mode * for a specific mode

View File

@@ -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; cur_freq = pm_conc_connection_list[conn_index].freq;
mode = policy_mgr_get_mode(conn_table_entry.type, mode = policy_mgr_get_mode(psoc, conn_table_entry.type,
conn_table_entry.sub_type); conn_table_entry.sub_type, vdev_id);
ch_freq = conn_table_entry.mhz; ch_freq = conn_table_entry.mhz;
status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g); status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g);
if (QDF_IS_STATUS_SUCCESS(status)) { 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; uint32_t ap_present, go_present;
ap_present = policy_mgr_mode_specific_connection_count( ap_present = policy_mgr_get_sap_mode_count(psoc, NULL);
psoc, PM_SAP_MODE, NULL);
if (ap_present) if (ap_present)
return true; return true;
@@ -1963,7 +1962,7 @@ policy_mgr_nan_sap_pre_enable_conc_check(struct wlan_objmgr_psoc *psoc,
return false; 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"); policy_mgr_debug("Not NAN or SAP mode");
return true; 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, sap_freq = policy_mgr_mode_specific_get_channel(pm_ctx->psoc,
PM_SAP_MODE); PM_SAP_MODE);
policy_mgr_debug("FREQ SAP: %d NAN: %d", sap_freq, ch_freq); 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) && if (ucfg_is_nan_dbs_supported(pm_ctx->psoc) &&
!WLAN_REG_IS_SAME_BAND_FREQS(sap_freq, ch_freq)) !WLAN_REG_IS_SAME_BAND_FREQS(sap_freq, ch_freq))
return true; 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"); policy_mgr_debug("NAN+SAP unsafe ch SCC disabled");
return false; return false;
} }
} else if (mode == PM_SAP_MODE) { } else if (policy_mgr_is_sap_mode(mode)) {
nan_2g_freq = nan_2g_freq =
policy_mgr_mode_specific_get_channel(pm_ctx->psoc, policy_mgr_mode_specific_get_channel(pm_ctx->psoc,
PM_NAN_DISC_MODE); 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); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { 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) { pm_conc_connection_list[i].in_use) {
sap_info = &pm_conc_connection_list[i]; sap_info = &pm_conc_connection_list[i];
break; 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)) if (!policy_mgr_is_sap_go_existed(pm_ctx->psoc))
goto end; goto end;
cc_count = policy_mgr_get_mode_specific_conn_info( cc_count = policy_mgr_get_sap_mode_info(pm_ctx->psoc,
pm_ctx->psoc, &op_ch_freq_list[cc_count], &op_ch_freq_list[cc_count],
&vdev_id[cc_count], PM_SAP_MODE); &vdev_id[cc_count]);
policy_mgr_debug("Number of concurrent SAP: %d", cc_count); policy_mgr_debug("Number of concurrent SAP: %d", cc_count);
if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS) if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS)
cc_count = cc_count + cc_count = cc_count +

View File

@@ -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); pm_ctx->cdp_cbacks.cdp_update_mac_id(psoc, vdev_id, mac);
/* IPA only cares about STA or SAP mode */ /* 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); mcc_mode = policy_mgr_current_concurrency_is_mcc(psoc);
if (pm_ctx->dp_cbacks.hdd_ipa_set_mcc_mode_cb) 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: case PM_NDI_MODE:
count = strlcat(cc_mode, "NDI", length); count = strlcat(cc_mode, "NDI", length);
break; break;
case PM_LL_LT_SAP_MODE:
count = strlcat(cc_mode, "LT_SAP", length);
break;
default: default:
policy_mgr_err("unexpected mode %d", mode); policy_mgr_err("unexpected mode %d", mode);
break; break;
@@ -1237,6 +1240,12 @@ static uint32_t policy_mgr_dump_current_concurrency_two_connection(
psoc, cc_mode, length); psoc, cc_mode, length);
count += strlcat(cc_mode, "+NAN Disc", length); count += strlcat(cc_mode, "+NAN Disc", length);
break; 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: default:
policy_mgr_err("unexpected mode %d", mode); policy_mgr_err("unexpected mode %d", mode);
break; break;
@@ -1309,6 +1318,13 @@ static uint32_t policy_mgr_dump_current_concurrency_three_connection(
count += strlcat(cc_mode, "+NDI", count += strlcat(cc_mode, "+NDI",
length); length);
break; 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: default:
policy_mgr_err("unexpected mode %d", mode); policy_mgr_err("unexpected mode %d", mode);
break; break;
@@ -1519,6 +1535,13 @@ static uint32_t policy_mgr_dump_current_concurrency_4_connection(
count += strlcat(cc_mode, "+NDI", count += strlcat(cc_mode, "+NDI",
length); length);
break; 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: default:
policy_mgr_err("unexpected mode %d", mode); policy_mgr_err("unexpected mode %d", mode);
break; break;
@@ -2082,24 +2105,25 @@ uint32_t policy_mgr_get_connection_for_vdev_id(struct wlan_objmgr_psoc *psoc,
return conn_index; return conn_index;
} }
/** enum policy_mgr_con_mode policy_mgr_get_mode(struct wlan_objmgr_psoc *psoc,
* policy_mgr_get_mode() - Get mode from type and subtype uint8_t type, uint8_t subtype,
* @type: type uint32_t vdev_id)
* @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 mode = PM_MAX_NUM_OF_MODE; enum policy_mgr_con_mode mode = PM_MAX_NUM_OF_MODE;
if (type == WMI_VDEV_TYPE_AP) { if (type == WMI_VDEV_TYPE_AP) {
switch (subtype) { switch (subtype) {
case 0: case 0:
/*
* 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; mode = PM_SAP_MODE;
break; break;
case WMI_UNIFIED_VDEV_SUBTYPE_P2P_GO: case WMI_UNIFIED_VDEV_SUBTYPE_P2P_GO:
@@ -4409,8 +4433,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
} }
} }
count = policy_mgr_mode_specific_connection_count(psoc, count = policy_mgr_get_sap_mode_count(psoc, list);
PM_SAP_MODE, list);
for (index = 0; index < count; index++) { for (index = 0; index < count; index++) {
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
vdev_id = pm_conc_connection_list[list[index]].vdev_id; vdev_id = pm_conc_connection_list[list[index]].vdev_id;

View File

@@ -4912,10 +4912,9 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc,
* there are more than one STA connections * there are more than one STA connections
*/ */
if ((policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE, NULL) > 1) || 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) > (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_CLIENT_MODE, NULL) >
0) || 0) ||
(policy_mgr_mode_specific_connection_count(psoc, PM_P2P_GO_MODE, NULL) > 0) ||
(policy_mgr_mode_specific_connection_count(psoc, (policy_mgr_mode_specific_connection_count(psoc,
PM_NDI_MODE, PM_NDI_MODE,
NULL) > 0)) { 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 */ /* Enable RPS if SAP interface has come up */
if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) if (policy_mgr_get_sap_mode_count(psoc, NULL) == 1) {
== 1) {
if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb) if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb)
pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb(true); 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, ((policy_mgr_mode_specific_connection_count(psoc,
PM_STA_MODE, PM_STA_MODE,
NULL) == 1) && NULL) == 1) &&
(policy_mgr_mode_specific_connection_count(psoc, (policy_mgr_get_beaconing_mode_count(psoc, NULL) == 0) &&
PM_SAP_MODE,
NULL) == 0) &&
(policy_mgr_mode_specific_connection_count(psoc, (policy_mgr_mode_specific_connection_count(psoc,
PM_P2P_CLIENT_MODE, PM_P2P_CLIENT_MODE,
NULL) == 0) && NULL) == 0) &&
(policy_mgr_mode_specific_connection_count(psoc,
PM_P2P_GO_MODE,
NULL) == 0) &&
(policy_mgr_mode_specific_connection_count(psoc, (policy_mgr_mode_specific_connection_count(psoc,
PM_NDI_MODE, PM_NDI_MODE,
NULL) == 0))) { 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 */ /* Disable RPS if SAP interface has come up */
if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) if (policy_mgr_get_sap_mode_count(psoc, NULL) == 0) {
== 0) {
if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb) if (pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb)
pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb(false); 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; return QDF_STATUS_E_FAILURE;
} }
mode = policy_mgr_get_mode(conn_table_entry.type, mode = policy_mgr_get_mode(psoc, conn_table_entry.type,
conn_table_entry.sub_type); conn_table_entry.sub_type, vdev_id);
ch_freq = conn_table_entry.mhz; ch_freq = conn_table_entry.mhz;
status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g); status = policy_mgr_get_nss_for_vdev(psoc, mode, &nss_2g, &nss_5g);
if (QDF_IS_STATUS_SUCCESS(status)) { 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; 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( uint32_t policy_mgr_get_mode_specific_conn_info(
struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_psoc *psoc,
uint32_t *ch_freq_list, uint8_t *vdev_id, 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 & is_dfs = (conn->ch_flagext &
(IEEE80211_CHAN_DFS | IEEE80211_CHAN_DFS_CFREQ2)) && (IEEE80211_CHAN_DFS | IEEE80211_CHAN_DFS_CFREQ2)) &&
WLAN_REG_IS_5GHZ_CH_FREQ(conn->freq); WLAN_REG_IS_5GHZ_CH_FREQ(conn->freq);
if ((conn->mode == PM_SAP_MODE || if (policy_mgr_is_beaconing_mode(conn->mode) &&
conn->mode == PM_P2P_GO_MODE) &&
is_dfs && (ch_freq != conn->freq && is_dfs && (ch_freq != conn->freq &&
!policy_mgr_are_sbs_chan(psoc, ch_freq, !policy_mgr_are_sbs_chan(psoc, ch_freq,
conn->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 * the link, disabled by SAP/P2P logic, as this API only consider
* STA specific counts and ignore other counts. * STA specific counts and ignore other counts.
*/ */
if (policy_mgr_mode_specific_connection_count(psoc, if (policy_mgr_get_beaconing_mode_count(psoc, NULL) ||
PM_SAP_MODE, NULL) ||
policy_mgr_mode_specific_connection_count(psoc, policy_mgr_mode_specific_connection_count(psoc,
PM_P2P_CLIENT_MODE, NULL) || PM_P2P_CLIENT_MODE,
policy_mgr_mode_specific_connection_count(psoc, NULL)) {
PM_P2P_GO_MODE, NULL)) {
policy_mgr_debug("SAP/GO/CLI exist ignore this check"); policy_mgr_debug("SAP/GO/CLI exist ignore this check");
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
} }
@@ -7271,8 +7226,8 @@ policy_mgr_handle_ml_sta_link_concurrency(struct wlan_objmgr_psoc *psoc,
static bool static bool
policy_mgr_is_mode_p2p_sap(enum policy_mgr_con_mode mode) policy_mgr_is_mode_p2p_sap(enum policy_mgr_con_mode mode)
{ {
return (mode == PM_SAP_MODE) || (mode == PM_P2P_CLIENT_MODE) || return (policy_mgr_is_beaconing_mode(mode) ||
(mode == PM_P2P_GO_MODE); (mode == PM_P2P_CLIENT_MODE));
} }
bool bool
@@ -10248,9 +10203,8 @@ uint32_t policy_mgr_get_sap_go_count_on_mac(struct wlan_objmgr_psoc *psoc,
conn_index++) { conn_index++) {
if (pm_conc_connection_list[conn_index].mac == mac_id && if (pm_conc_connection_list[conn_index].mac == mac_id &&
pm_conc_connection_list[conn_index].in_use && pm_conc_connection_list[conn_index].in_use &&
(pm_conc_connection_list[conn_index].mode == PM_SAP_MODE || policy_mgr_is_beaconing_mode(
pm_conc_connection_list[conn_index].mode == pm_conc_connection_list[conn_index].mode)) {
PM_P2P_GO_MODE)) {
if (list) if (list)
list[count] = list[count] =
pm_conc_connection_list[conn_index].vdev_id; 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; return QDF_STATUS_E_INVAL;
} }
cc_count = policy_mgr_get_mode_specific_conn_info( cc_count = policy_mgr_get_sap_mode_info(psoc,
psoc, &op_ch_freq_list[cc_count], &op_ch_freq_list[cc_count],
&vdev_id[cc_count], PM_SAP_MODE); &vdev_id[cc_count]);
if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS) if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS)
cc_count = cc_count + cc_count = cc_count +
@@ -10748,7 +10702,7 @@ bool policy_mgr_is_multi_sap_allowed_on_same_band(
return false; return false;
} }
if (!ch_freq || mode != PM_SAP_MODE) if (!ch_freq || !policy_mgr_is_sap_mode(mode))
return true; return true;
status = policy_mgr_get_multi_sap_allowed_on_same_band(psoc, 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]; uint32_t list[MAX_NUMBER_OF_CONC_CONNECTIONS];
struct policy_mgr_conc_connection_info *ap_info; struct policy_mgr_conc_connection_info *ap_info;
ap_cnt = policy_mgr_mode_specific_connection_count(psoc, ap_cnt = policy_mgr_get_sap_mode_count(psoc, list);
PM_SAP_MODE, list);
if (!ap_cnt) if (!ap_cnt)
return true; 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; for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_index++) { conn_index++) {
conn_info = &pm_conc_connection_list[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) { vdev_id == conn_info->vdev_id) {
conn_info->conn_6ghz_flag = ap_6ghz_capable; conn_info->conn_6ghz_flag = ap_6ghz_capable;
conn_info->conn_6ghz_flag |= CONN_6GHZ_FLAG_VALID; 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; for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_index++) { conn_index++) {
conn_info = &pm_conc_connection_list[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 &&
PM_P2P_GO_MODE == conn_info->mode) && policy_mgr_is_beaconing_mode(conn_info->mode) &&
policy_mgr_is_6ghz_conc_mode_supported( policy_mgr_is_6ghz_conc_mode_supported(
psoc, conn_info->mode) && psoc, conn_info->mode) &&
vdev_id == conn_info->vdev_id) { 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; for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_index++) { conn_index++) {
conn_info = &pm_conc_connection_list[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 &&
PM_P2P_GO_MODE == conn_info->mode) && policy_mgr_is_beaconing_mode(conn_info->mode) &&
policy_mgr_is_6ghz_conc_mode_supported( policy_mgr_is_6ghz_conc_mode_supported(
psoc, conn_info->mode) && psoc, conn_info->mode) &&
vdev_id == conn_info->vdev_id) { 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); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS; for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_index++) { conn_index++) {
if ((pm_conc_connection_list[conn_index].mode == if ((policy_mgr_is_beaconing_mode(
PM_P2P_GO_MODE || pm_conc_connection_list[conn_index].mode) ||
pm_conc_connection_list[conn_index].mode ==
PM_SAP_MODE ||
pm_conc_connection_list[conn_index].mode == pm_conc_connection_list[conn_index].mode ==
PM_P2P_CLIENT_MODE || PM_P2P_CLIENT_MODE ||
pm_conc_connection_list[conn_index].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; return QDF_STATUS_E_BUSY;
} }
num_open_session = policy_mgr_mode_specific_connection_count( num_open_session = policy_mgr_get_sap_mode_count(psoc, NULL);
psoc,
PM_SAP_MODE,
NULL);
if (num_open_session) { if (num_open_session) {
policy_mgr_err("cannot add monitor mode, due to SAP concurrency"); 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); qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
for (conn_idx = 0; conn_idx < MAX_NUMBER_OF_CONC_CONNECTIONS; for (conn_idx = 0; conn_idx < MAX_NUMBER_OF_CONC_CONNECTIONS;
conn_idx++) { conn_idx++) {
if (!(pm_conc_connection_list[conn_idx].mode == if (!(policy_mgr_is_sap_mode(
PM_SAP_MODE && pm_conc_connection_list[conn_idx].mode) &&
pm_conc_connection_list[conn_idx].in_use)) pm_conc_connection_list[conn_idx].in_use))
continue; continue;

View File

@@ -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 policy_mgr_dump_current_concurrency(struct wlan_objmgr_psoc *psoc);
void pm_dbs_opportunistic_timer_handler(void *data); 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 * policy_mgr_get_channel_list() - Get channel list based on PCL and mode

View File

@@ -3479,7 +3479,7 @@ QDF_STATUS policy_mgr_get_valid_chans_from_range(
ch_weight_len = *ch_cnt; ch_weight_len = *ch_cnt;
/* check the channel avoidance list for beaconing entities */ /* 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( policy_mgr_update_with_safe_channel_list(
psoc, ch_freq_list, ch_cnt, ch_weight_list, psoc, ch_freq_list, ch_cnt, ch_weight_list,
ch_weight_len); 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. * vdev is SAP/P2PGO/P2PGC.
*/ */
if ((mode == PM_P2P_GO_MODE || mode == PM_P2P_CLIENT_MODE) && if ((mode == PM_P2P_GO_MODE || mode == PM_P2P_CLIENT_MODE) &&
(policy_mgr_mode_specific_connection_count( ((policy_mgr_get_beaconing_mode_count(psoc, NULL)) ||
psoc, PM_SAP_MODE, NULL) ||
policy_mgr_mode_specific_connection_count(
psoc, PM_P2P_GO_MODE, NULL) ||
policy_mgr_mode_specific_connection_count( policy_mgr_mode_specific_connection_count(
psoc, PM_P2P_CLIENT_MODE, NULL))) psoc, PM_P2P_CLIENT_MODE, NULL)))
strict_follow_pcl = true; strict_follow_pcl = true;
@@ -4308,8 +4305,7 @@ bool policy_mgr_is_sta_chan_valid_for_connect_and_roam(
skip_6g_and_indoor_freq = skip_6g_and_indoor_freq =
wlan_scan_cfg_skip_6g_and_indoor_freq(psoc); wlan_scan_cfg_skip_6g_and_indoor_freq(psoc);
sap_count = sap_count =
policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, policy_mgr_get_sap_mode_count(psoc, NULL);
NULL);
/* /*
* Do not allow STA to connect/roam on 6Ghz or indoor channel for * 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 * non-dbs hardware if SAP is present and skip_6g_and_indoor_freq_scan

View File

@@ -1256,8 +1256,7 @@ QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_pdev *pdev,
goto pre_enable_failure; goto pre_enable_failure;
} }
if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, if ((policy_mgr_get_sap_mode_count(psoc, NULL)) &&
NULL) &&
!policy_mgr_nan_sap_pre_enable_conc_check(psoc, PM_NAN_DISC_MODE, !policy_mgr_nan_sap_pre_enable_conc_check(psoc, PM_NAN_DISC_MODE,
nan_ch_freq)) { nan_ch_freq)) {
nan_debug("NAN not enabled due to concurrency constraints"); nan_debug("NAN not enabled due to concurrency constraints");

View File

@@ -14762,7 +14762,7 @@ static uint32_t wlan_hdd_populate_weigh_pcl(
w_pcl[i].freq = chan_weights->pcl_list[i]; w_pcl[i].freq = chan_weights->pcl_list[i];
w_pcl[i].weight = chan_weights->weight_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; w_pcl[i].flag = PCL_CHANNEL_SUPPORT_GO;
else else
w_pcl[i].flag = PCL_CHANNEL_SUPPORT_CLI; 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; PCL_CHANNEL_EXCLUDE_IN_GO_NEG;
w_pcl[chan_idx].weight = 0; w_pcl[chan_idx].weight = 0;
} else { } else {
if (intf_mode == PM_SAP_MODE || if (policy_mgr_is_beaconing_mode(
intf_mode == PM_P2P_GO_MODE) intf_mode))
w_pcl[chan_idx].flag = w_pcl[chan_idx].flag =
PCL_CHANNEL_SUPPORT_GO; PCL_CHANNEL_SUPPORT_GO;
else else

View File

@@ -2033,12 +2033,7 @@ hdd_hostapd_check_channel_post_csa(struct hdd_context *hdd_ctx,
return; return;
} }
sap_cnt = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, sap_cnt = policy_mgr_get_beaconing_mode_count(hdd_ctx->psoc, NULL);
PM_SAP_MODE,
NULL);
sap_cnt += policy_mgr_mode_specific_connection_count(hdd_ctx->psoc,
PM_P2P_GO_MODE,
NULL);
if (sap_cnt > 1) if (sap_cnt > 1)
policy_mgr_check_concurrent_intf_and_restart_sap( policy_mgr_check_concurrent_intf_and_restart_sap(
hdd_ctx->psoc, 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, con_mode = policy_mgr_qdf_opmode_to_pm_con_mode(psoc,
ap_adapter->device_mode, ap_adapter->device_mode,
vdev_id); 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)) { !policy_mgr_is_6ghz_conc_mode_supported(psoc, con_mode)) {
hdd_err("unexpected device mode %d", ap_adapter->device_mode); hdd_err("unexpected device mode %d", ap_adapter->device_mode);
wlan_objmgr_vdev_release_ref(vdev, WLAN_HDD_ID_OBJ_MGR); 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, sta_cnt = policy_mgr_get_mode_specific_conn_info(hdd_ctx->psoc, NULL,
vdev_id_list, vdev_id_list,
PM_STA_MODE); PM_STA_MODE);
sap_cnt = policy_mgr_get_mode_specific_conn_info(hdd_ctx->psoc, NULL, sap_cnt = policy_mgr_get_sap_mode_info(hdd_ctx->psoc, NULL,
&vdev_id_list[sta_cnt], &vdev_id_list[sta_cnt]);
PM_SAP_MODE);
/* Disable NAN Disc before starting P2P GO or STA+SAP or SAP+SAP */ /* Disable NAN Disc before starting P2P GO or STA+SAP or SAP+SAP */
if (adapter->device_mode == QDF_P2P_GO_MODE || sta_cnt || if (adapter->device_mode == QDF_P2P_GO_MODE || sta_cnt ||
(sap_cnt > (MAX_SAP_NUM_CONCURRENCY_WITH_NAN - 1))) { (sap_cnt > (MAX_SAP_NUM_CONCURRENCY_WITH_NAN - 1))) {

View File

@@ -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, sta_count = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc,
PM_STA_MODE, PM_STA_MODE,
NULL); NULL);
sap_count = policy_mgr_mode_specific_connection_count(hdd_ctx->psoc, sap_count = policy_mgr_get_sap_mode_count(hdd_ctx->psoc, NULL);
PM_SAP_MODE,
NULL);
twt_arg.hdd_ctx = hdd_ctx; twt_arg.hdd_ctx = hdd_ctx;
hdd_debug("Total connection %d, sta_count %d, sap_count %d", hdd_debug("Total connection %d, sta_count %d, sap_count %d",

View File

@@ -10374,9 +10374,8 @@ QDF_STATUS lim_ap_mlme_vdev_rnr_notify(struct pe_session *session)
return status; return status;
pe_debug("vdev id %d non mlo 6G AP notify co-located AP to update RNR", pe_debug("vdev id %d non mlo 6G AP notify co-located AP to update RNR",
wlan_vdev_get_id(session->vdev)); wlan_vdev_get_id(session->vdev));
vdev_num = policy_mgr_get_mode_specific_conn_info( vdev_num = policy_mgr_get_sap_mode_info(mac_ctx->psoc, freq_list,
mac_ctx->psoc, freq_list, vdev_id_list, vdev_id_list);
PM_SAP_MODE);
for (i = 0; i < vdev_num; i++) { for (i = 0; i < vdev_num; i++) {
if (vdev_id_list[i] == session->vdev_id) if (vdev_id_list[i] == session->vdev_id)
continue; continue;

View File

@@ -3460,6 +3460,7 @@ wlansap_get_safe_channel(struct sap_context *sap_ctx,
mac_handle_t mac_handle; mac_handle_t mac_handle;
uint32_t pcl_len = 0, i; uint32_t pcl_len = 0, i;
uint32_t selected_freq; uint32_t selected_freq;
enum policy_mgr_con_mode mode;
if (!sap_ctx) { if (!sap_ctx) {
sap_err("NULL parameter"); sap_err("NULL parameter");
@@ -3473,6 +3474,9 @@ wlansap_get_safe_channel(struct sap_context *sap_ctx,
} }
mac_handle = MAC_HANDLE(mac); 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 */ /* get the channel list for current domain */
status = policy_mgr_get_valid_chans(mac->psoc, pcl_freqs, &pcl_len); status = policy_mgr_get_valid_chans(mac->psoc, pcl_freqs, &pcl_len);
if (QDF_IS_STATUS_ERROR(status)) { 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, status = policy_mgr_get_valid_chans_from_range(mac->psoc,
pcl_freqs, pcl_freqs,
&pcl_len, &pcl_len,
PM_SAP_MODE); mode);
if (QDF_IS_STATUS_ERROR(status) || !pcl_len) { if (QDF_IS_STATUS_ERROR(status) || !pcl_len) {
sap_err("failed to get valid channel: %d len %d", sap_err("failed to get valid channel: %d len %d",
status, pcl_len); status, pcl_len);
@@ -3574,6 +3578,7 @@ wlansap_get_safe_channel_from_pcl_and_acs_range(struct sap_context *sap_ctx,
QDF_STATUS status; QDF_STATUS status;
mac_handle_t mac_handle; mac_handle_t mac_handle;
uint32_t pcl_len = 0; uint32_t pcl_len = 0;
enum policy_mgr_con_mode mode;
if (!sap_ctx) { if (!sap_ctx) {
sap_err("NULL parameter"); 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); 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 = 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_freqs, &pcl_len,
pcl.weight_list, pcl.weight_list,
QDF_ARRAY_SIZE(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}; uint32_t pcl_freqs[NUM_CHANNELS] = {0};
QDF_STATUS status; QDF_STATUS status;
uint32_t pcl_len = 0; uint32_t pcl_len = 0;
enum policy_mgr_con_mode mode;
if (!sap_ctx) { if (!sap_ctx) {
sap_err("NULL parameter"); 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"); 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_freqs, &pcl_len,
pcl.weight_list, pcl.weight_list,
QDF_ARRAY_SIZE(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!"); 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); return wlansap_get_2g_first_safe_chan_freq(sap_ctx);
} }
@@ -4043,8 +4058,8 @@ bool wlansap_filter_vendor_unsafe_ch_freq(
if (!mac) if (!mac)
return false; return false;
count = policy_mgr_mode_specific_connection_count(mac->psoc, count = policy_mgr_get_sap_mode_count(mac->psoc, NULL);
PM_SAP_MODE, NULL);
if (count != policy_mgr_get_connection_count(mac->psoc)) if (count != policy_mgr_get_connection_count(mac->psoc))
return false; return false;

View File

@@ -1379,9 +1379,8 @@ void osif_twt_concurrency_update_handler(struct wlan_objmgr_psoc *psoc,
sta_count = policy_mgr_mode_specific_connection_count(psoc, sta_count = policy_mgr_mode_specific_connection_count(psoc,
PM_STA_MODE, PM_STA_MODE,
NULL); NULL);
sap_count = policy_mgr_mode_specific_connection_count(psoc, sap_count = policy_mgr_get_sap_mode_count(psoc, NULL);
PM_SAP_MODE,
NULL);
twt_arg.psoc = psoc; twt_arg.psoc = psoc;
osif_debug("Total connection %d, sta_count %d, sap_count %d", osif_debug("Total connection %d, sta_count %d, sap_count %d",