qcacld-3.0: Fix 4th SAP force SCC issue

SAP 1 is started on 5 GHz 5180, SAP 2 is started on 5 GHz 5745.
ML STA 2 GHz 2437 + 6 GHz 6275 is up. SAP 1 is moved to 2 GHz 2437,
SAP 2 is not moved to 2 GHz 2437 because the SAP2 PCL is PM_SCC_ON_5_CH_5G
which have no 2.4 GHz scc channel. STA+SAP+SAP SCC is allowed
in same mac, but MCC is not supported.
Fix by:
1. Change PCL to include SCC channel in 4th pcl table for SAP/GO.
2. Add API policy_mgr_modify_sap_go_4th_conc_disallow to filter
out the channels which not supported in same mac based on
current concurrency combinations.

Change-Id: Ieb482076d961234d3987b2daebab4c407ee0b7f5
CRs-Fixed: 3479297
Cette révision appartient à :
Liangwei Dong
2023-05-09 16:45:26 +08:00
révisé par Rahul Choudhary
Parent c54702c3ad
révision 19e0551f91
3 fichiers modifiés avec 88 ajouts et 16 suppressions

Voir le fichier

@@ -2276,9 +2276,10 @@ policy_mgr_allow_4th_new_freq(struct wlan_objmgr_psoc *psoc,
* in this hw mode.
*/
if (i == MAX_MAC) {
policy_mgr_debug("new freq %d mode %s is allowed in hw mode %s",
ch_freq, device_mode_to_string(mode),
policy_mgr_hw_mode_to_str(j));
policy_mgr_rl_debug("new freq %d mode %s is allowed in hw mode %s",
ch_freq,
device_mode_to_string(mode),
policy_mgr_hw_mode_to_str(j));
return true;
}
}

Voir le fichier

@@ -1073,6 +1073,57 @@ add_freq:
return QDF_STATUS_SUCCESS;
}
/**
* policy_mgr_modify_sap_go_4th_conc_disallow() - filter out channel that
* is not allowed for 4th sap/go connection
* @psoc: pointer to soc
* @mode: interface mode
* @pcl_list_org: channel list to filter out
* @weight_list_org: weight of channel list
* @pcl_len_org: length of channel list
*
* Return: QDF_STATUS
*/
static QDF_STATUS policy_mgr_modify_sap_go_4th_conc_disallow(
struct wlan_objmgr_psoc *psoc,
enum policy_mgr_con_mode mode,
uint32_t *pcl_list_org,
uint8_t *weight_list_org,
uint32_t *pcl_len_org)
{
size_t i, pcl_len = 0;
struct policy_mgr_psoc_priv_obj *pm_ctx;
uint32_t num_connections;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("Invalid Context");
return QDF_STATUS_E_FAILURE;
}
if (*pcl_len_org > NUM_CHANNELS) {
policy_mgr_err("Invalid PCL List Length %d", *pcl_len_org);
return QDF_STATUS_E_FAILURE;
}
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
num_connections = policy_mgr_get_connection_count(psoc);
if (num_connections < 3)
goto end;
for (i = 0; i < *pcl_len_org; i++) {
if (policy_mgr_allow_4th_new_freq(psoc, pcl_list_org[i],
mode, 0)) {
pcl_list_org[pcl_len] = pcl_list_org[i];
weight_list_org[pcl_len++] = weight_list_org[i];
}
}
*pcl_len_org = pcl_len;
end:
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS policy_mgr_pcl_modification_for_sap(
struct wlan_objmgr_psoc *psoc,
uint32_t *pcl_channels, uint8_t *pcl_weight,
@@ -1085,6 +1136,7 @@ static QDF_STATUS policy_mgr_pcl_modification_for_sap(
bool dfs_modified_pcl = false;
bool indoor_modified_pcl = false;
bool passive_modified_pcl = false;
bool band_6ghz_modified_pcl = false;
bool modified_final_pcl = false;
bool srd_chan_enabled;
@@ -1157,15 +1209,26 @@ static QDF_STATUS policy_mgr_pcl_modification_for_sap(
policy_mgr_err("failed to modify pcl for 6G channels");
return status;
}
band_6ghz_modified_pcl = true;
status = policy_mgr_modify_sap_go_4th_conc_disallow(psoc,
PM_SAP_MODE,
pcl_channels,
pcl_weight, len);
if (QDF_IS_STATUS_ERROR(status)) {
policy_mgr_err("failed to modify pcl for 4th sap channels");
return status;
}
modified_final_pcl = true;
policy_mgr_debug("%d %d %d %d %d %d",
policy_mgr_debug("%d %d %d %d %d %d %d",
mandatory_modified_pcl,
nol_modified_pcl,
dfs_modified_pcl,
indoor_modified_pcl,
passive_modified_pcl,
modified_final_pcl);
modified_final_pcl,
band_6ghz_modified_pcl);
return QDF_STATUS_SUCCESS;
}
@@ -1207,6 +1270,14 @@ static QDF_STATUS policy_mgr_pcl_modification_for_p2p_go(
return status;
}
}
status = policy_mgr_modify_sap_go_4th_conc_disallow(psoc,
PM_P2P_GO_MODE,
pcl_channels,
pcl_weight, len);
if (QDF_IS_STATUS_ERROR(status)) {
policy_mgr_err("failed to modify pcl for 4th go channels");
return status;
}
return QDF_STATUS_SUCCESS;
}
@@ -1259,10 +1330,10 @@ static enum policy_mgr_pcl_type policy_mgr_get_pcl_4_port(
}
/* SAP and P2P Go have same result in 4th port pcl table */
if (mode == PM_SAP_MODE || mode == PM_P2P_GO_MODE ||
mode == PM_P2P_CLIENT_MODE) {
if (mode == PM_SAP_MODE || mode == PM_P2P_GO_MODE)
mode = PM_SAP_MODE;
}
else if (mode == PM_P2P_CLIENT_MODE)
mode = PM_STA_MODE;
if (mode != PM_STA_MODE && mode != PM_SAP_MODE &&
mode != PM_NDI_MODE) {

Voir le fichier

@@ -1992,13 +1992,13 @@ fourth_connection_pcl_dbs_sbs_table
[PM_24_SCC_MCC_PLUS_5_DBS] = {
[PM_STA_MODE] = { PM_SCC_ON_5_CH_5G, PM_SCC_ON_5_CH_5G,
PM_SCC_ON_5_CH_5G},
[PM_SAP_MODE] = { PM_SCC_ON_5_CH_5G, PM_SCC_ON_5_CH_5G,
PM_SCC_ON_5_CH_5G} },
[PM_SAP_MODE] = { PM_SCC_ON_5_5G_SCC_ON_24G, PM_SCC_ON_5_5G_SCC_ON_24G,
PM_SCC_ON_5_5G_SCC_ON_24G} },
[PM_5_SCC_MCC_PLUS_24_DBS] = {
[PM_STA_MODE] = { PM_SBS_CH_2G, PM_SBS_CH_2G,
PM_SBS_CH_2G },
[PM_SAP_MODE] = { PM_SBS_CH_2G, PM_SBS_CH_2G,
PM_SBS_CH_2G } },
[PM_SAP_MODE] = { PM_SBS_CH_24G_SCC_CH, PM_SBS_CH_24G_SCC_CH,
PM_SBS_CH_24G_SCC_CH } },
[PM_MCC_SCC_5G_HIGH_PLUS_5_LOW_SBS] = {
[PM_STA_MODE] = {PM_SCC_ON_5G_LOW_5G_LOW_PLUS_SHARED_2G,
PM_SCC_ON_5G_LOW_5G_LOW_PLUS_SHARED_2G,
@@ -2016,13 +2016,13 @@ fourth_connection_pcl_dbs_sbs_table
[PM_24_5_PLUS_5_LOW_N_HIGH_SHARE_SBS] = {
[PM_STA_MODE] = {PM_SCC_ON_5_CH_5G, PM_SCC_ON_5_CH_5G,
PM_SCC_ON_5_CH_5G},
[PM_SAP_MODE] = {PM_SCC_ON_5_CH_5G, PM_SCC_ON_5_CH_5G,
PM_SCC_ON_5_CH_5G} },
[PM_SAP_MODE] = {PM_SCC_ON_5_5G_SCC_ON_24G, PM_SCC_ON_5_5G_SCC_ON_24G,
PM_SCC_ON_5_5G_SCC_ON_24G} },
[PM_24_5_PLUS_5_LOW_OR_HIGH_SHARE_SBS] = {
[PM_STA_MODE] = {PM_SCC_ON_24_CH_24G, PM_SCC_ON_24_CH_24G,
PM_SCC_ON_24_CH_24G},
[PM_SAP_MODE] = {PM_SCC_ON_24_CH_24G, PM_SCC_ON_24_CH_24G,
PM_SCC_ON_24_CH_24G} },
[PM_SAP_MODE] = {PM_SCC_ON_24_SCC_ON_5_24G, PM_SCC_ON_24_SCC_ON_5_24G,
PM_SCC_ON_24_SCC_ON_5_24G} },
};
#endif
#endif