qcacld-3.0: Don't disable connected 6 GHz channels
Currently host disables 6 GHz band when set_fcc_channel cmd is received hence existing STA/P2P client 6 GHz connections get disabled. Add changes to keep existing STA/P2P client 6 GHz connections intact and also keep SAP up on 6 GHz if STA+SAP SCC on 6 GHz channel was present before receiving this command. Disable all other 6 GHz operations. Change-Id: I95c094e1b344d430a288b6f613842efe6e576e25 CRs-Fixed: 3495006
This commit is contained in:

committed by
Rahul Choudhary

parent
5598f7bcfc
commit
7ebd1c2c35
@@ -5034,9 +5034,9 @@ bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
|
||||
* @discon_freq: disconnect frequency
|
||||
* @type: enum indoor_conc_update_type
|
||||
*
|
||||
* Return: None
|
||||
* Return: True if need to compute pdev current channel list
|
||||
*/
|
||||
void
|
||||
bool
|
||||
policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint32_t discon_freq,
|
||||
|
@@ -414,12 +414,16 @@ QDF_STATUS policy_mgr_update_connection_info(struct wlan_objmgr_psoc *psoc,
|
||||
policy_mgr_handle_ml_sta_links_on_vdev_up_csa(psoc,
|
||||
policy_mgr_get_qdf_mode_from_pm(mode), vdev_id);
|
||||
|
||||
if (policy_mgr_is_conc_sap_present_on_sta_freq(psoc, mode, cur_freq))
|
||||
policy_mgr_update_indoor_concurrency(psoc, vdev_id, 0,
|
||||
SWITCH_WITH_CONCURRENCY);
|
||||
else
|
||||
policy_mgr_update_indoor_concurrency(psoc, vdev_id, cur_freq,
|
||||
SWITCH_WITHOUT_CONCURRENCY);
|
||||
if (policy_mgr_is_conc_sap_present_on_sta_freq(psoc, mode, cur_freq) &&
|
||||
policy_mgr_update_indoor_concurrency(psoc, vdev_id, 0,
|
||||
SWITCH_WITH_CONCURRENCY))
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
else if (policy_mgr_update_indoor_concurrency(psoc, vdev_id, cur_freq,
|
||||
SWITCH_WITHOUT_CONCURRENCY))
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
else if (wlan_reg_get_keep_6ghz_sta_cli_connection(pm_ctx->pdev))
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -4510,7 +4510,8 @@ void policy_mgr_incr_active_session(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
policy_mgr_dump_current_concurrency(psoc);
|
||||
|
||||
policy_mgr_update_indoor_concurrency(psoc, session_id, 0, CONNECT);
|
||||
if (policy_mgr_update_indoor_concurrency(psoc, session_id, 0, CONNECT))
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
policy_mgr_handle_ml_sta_links_on_vdev_up_csa(psoc, mode, session_id);
|
||||
@@ -4687,9 +4688,16 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc,
|
||||
mode == QDF_STA_MODE || mode == QDF_P2P_CLIENT_MODE)
|
||||
policy_mgr_update_dfs_master_dynamic_enabled(psoc, session_id);
|
||||
|
||||
if (!pm_ctx->last_disconn_sta_freq)
|
||||
policy_mgr_update_indoor_concurrency(psoc, session_id, cur_freq,
|
||||
DISCONNECT_WITHOUT_CONCURRENCY);
|
||||
if (!pm_ctx->last_disconn_sta_freq) {
|
||||
if (policy_mgr_update_indoor_concurrency(psoc, session_id,
|
||||
cur_freq, DISCONNECT_WITHOUT_CONCURRENCY))
|
||||
wlan_reg_recompute_current_chan_list(psoc,
|
||||
pm_ctx->pdev);
|
||||
}
|
||||
|
||||
if (wlan_reg_get_keep_6ghz_sta_cli_connection(pm_ctx->pdev) &&
|
||||
(mode == QDF_STA_MODE || mode == QDF_P2P_CLIENT_MODE))
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
|
||||
return qdf_status;
|
||||
}
|
||||
@@ -10409,7 +10417,7 @@ bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint32_t discon_freq,
|
||||
@@ -10424,13 +10432,13 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid pm context");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
ucfg_mlme_get_indoor_channel_support(psoc, &indoor_support);
|
||||
if (indoor_support ||
|
||||
!policy_mgr_get_sta_sap_scc_allowed_on_indoor_chnl(psoc))
|
||||
return;
|
||||
return false;
|
||||
|
||||
mode = wlan_get_opmode_from_vdev_id(pm_ctx->pdev, vdev_id);
|
||||
|
||||
@@ -10440,10 +10448,10 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
*/
|
||||
if (type != DISCONNECT_WITH_CONCURRENCY &&
|
||||
(mode != QDF_STA_MODE && mode != QDF_P2P_CLIENT_MODE)) {
|
||||
return;
|
||||
return false;
|
||||
} else if (type == DISCONNECT_WITH_CONCURRENCY &&
|
||||
(mode != QDF_SAP_MODE && mode != QDF_P2P_GO_MODE)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
@@ -10458,13 +10466,13 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
ch_freq = discon_freq;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type != SWITCH_WITHOUT_CONCURRENCY &&
|
||||
!(WLAN_REG_IS_5GHZ_CH_FREQ(ch_freq) &&
|
||||
wlan_reg_is_freq_indoor(pm_ctx->pdev, ch_freq))) {
|
||||
return;
|
||||
return false;
|
||||
} else if (type == SWITCH_WITHOUT_CONCURRENCY) {
|
||||
/* Either the previous frequency or the current
|
||||
* frequency can be indoor. Or both can be indoor.
|
||||
@@ -10475,7 +10483,7 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_reg_is_freq_indoor(pm_ctx->pdev, ch_freq)) ||
|
||||
(WLAN_REG_IS_5GHZ_CH_FREQ(discon_freq) &&
|
||||
wlan_reg_is_freq_indoor(pm_ctx->pdev, discon_freq))))
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
@@ -10498,7 +10506,7 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
case DISCONNECT_WITH_CONCURRENCY:
|
||||
/*If there are other sessions, do not change current chan list*/
|
||||
if (policy_mgr_get_connection_count_with_ch_freq(ch_freq) > 1)
|
||||
return;
|
||||
return false;
|
||||
wlan_reg_modify_indoor_concurrency(pm_ctx->pdev,
|
||||
INVALID_VDEV_ID, ch_freq,
|
||||
CH_WIDTH_INVALID, false);
|
||||
@@ -10510,9 +10518,9 @@ policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
* The previous frequency removal and current channel list
|
||||
* recomputation will happen after SAP CSA
|
||||
*/
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
wlan_reg_recompute_current_chan_list(psoc, pm_ctx->pdev);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool policy_mgr_is_conc_sap_present_on_sta_freq(struct wlan_objmgr_psoc *psoc,
|
||||
|
Reference in New Issue
Block a user