qcacld-3.0: Allow STA+SAP SCC in 6 GHz PSC/VLP channel

The SAP is not moved to the 6 GHz user configured
frequency in the following cases:
1. STA disconnected, SAP is standalone in 2.4 GHz
2. STA is VLP/PSC channel, but SAP is currently in
   2.4 GHz(due to STA(DFS) + SAP)

Allow the SAP to restart in 6 GHz channels for the
above scenarios if the following criteria are met:
1. For standalone: The SAP user configured band is
   superior than the current operating band.
2. For SCC: The 6 GHz STA should operate in PSC and
   the channel should support VLP in DUT regdomain.

Change-Id: Iea292c94e579ccead2300f6e9b994c4b8e9a0a87
CRs-Fixed: 3713247
This commit is contained in:
Surya Prakash Sivaraj
2024-01-23 11:53:45 +05:30
committed by Ravindra Konda
parent 08a119dfea
commit 26b8de01cc
3 changed files with 66 additions and 32 deletions

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -1871,8 +1871,7 @@ bool policy_mgr_is_sap_restart_required_after_sta_disconnect(
QDF_STATUS status;
uint32_t sta_gc_present = 0;
qdf_freq_t user_config_freq = 0;
tQDF_MCC_TO_SCC_SWITCH_MODE cc_mode =
policy_mgr_get_mcc_to_scc_switch_mode(psoc);
enum reg_wifi_band user_band, op_band;
if (intf_ch_freq)
*intf_ch_freq = 0;
@@ -1966,26 +1965,14 @@ bool policy_mgr_is_sap_restart_required_after_sta_disconnect(
/*
* STA got disconnected & SAP has previously moved to 2.4 GHz
* due to concurrency, then move SAP back to user configured
* frequency.
* if SCC to MCC switch mode is
* QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL, then don't move
* SAP to user configured frequency whenever standalone SAP is
* currently not on the user configured frequency.
* Else move the SAP only when SAP is on 2.4 GHz band and user
* configured frequency is on any other bands.
* And for QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL, if GO
* is on 5/6 GHz, SAP is not allowed to move back to 5/6 GHz.
* If GO is not present on 5/6 GHz, SAP need to moved to
* user configured frequency.
* frequency if the user configured band is better than
* the current operating band.
*/
op_band = wlan_reg_freq_to_band(op_ch_freq_list[i]);
user_band = wlan_reg_freq_to_band(user_config_freq);
if (!sta_gc_present && user_config_freq &&
cc_mode == QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL) {
policy_mgr_debug("Don't move sap to user configured freq: %d",
user_config_freq);
break;
} else if (!sta_gc_present && user_config_freq &&
WLAN_REG_IS_24GHZ_CH_FREQ(op_ch_freq_list[i]) &&
!WLAN_REG_IS_24GHZ_CH_FREQ(user_config_freq)) {
op_band < user_band) {
curr_sap_freq = op_ch_freq_list[i];
policy_mgr_debug("Move sap to user configured freq: %d",
user_config_freq);

View File

@@ -11961,6 +11961,49 @@ bool policy_mgr_is_sap_go_on_2g(struct wlan_objmgr_psoc *psoc)
return ret;
}
static inline bool
policy_mgr_is_chan_eligible_for_sap(struct policy_mgr_psoc_priv_obj *pm_ctx,
uint8_t vdev_id, qdf_freq_t freq)
{
struct wlan_objmgr_vdev *vdev;
enum channel_state ch_state;
enum reg_6g_ap_type sta_connected_pwr_type;
uint32_t ap_power_type_6g = 0;
bool is_eligible = false;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(pm_ctx->psoc, vdev_id,
WLAN_POLICY_MGR_ID);
if (!vdev)
return false;
ch_state = wlan_reg_get_channel_state_for_pwrmode(pm_ctx->pdev,
freq,
REG_CURRENT_PWR_MODE);
sta_connected_pwr_type = mlme_get_best_6g_power_type(vdev);
wlan_reg_get_cur_6g_ap_pwr_type(pm_ctx->pdev, &ap_power_type_6g);
/*
* If the SAP user configured frequency is 6 GHz,
* move the SAP to STA SCC in 6 GHz only if:
* a) The channel is PSC
* b) The channel supports AP in VLP power type
* c) The DUT is configured to operate SAP in VLP only
* d) The STA is connected to the 6 GHz AP in
* either VLP or LPI.
* - If the STA is in LPI, then lim_update_tx_power()
* would move the STA to VLP.
*/
if (WLAN_REG_IS_6GHZ_PSC_CHAN_FREQ(freq) &&
ap_power_type_6g == REG_VERY_LOW_POWER_AP &&
ch_state == CHANNEL_STATE_ENABLE &&
(sta_connected_pwr_type == REG_VERY_LOW_POWER_AP ||
sta_connected_pwr_type == REG_INDOOR_AP))
is_eligible = true;
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
return is_eligible;
}
bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
qdf_freq_t freq,
@@ -12138,14 +12181,20 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc,
}
if (scc_mode == QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL &&
connection[i].freq == freq &&
WLAN_REG_IS_24GHZ_CH_FREQ(freq) &&
!num_5_or_6_conn &&
user_config_freq &&
!WLAN_REG_IS_24GHZ_CH_FREQ(user_config_freq)) {
policy_mgr_debug("SAP move to user configure %d from %d",
user_config_freq, freq);
restart_required = true;
WLAN_REG_IS_24GHZ_CH_FREQ(freq) && user_config_freq) {
if (connection[i].freq == freq && !num_5_or_6_conn &&
!WLAN_REG_IS_24GHZ_CH_FREQ(user_config_freq)) {
policy_mgr_debug("SAP move to user configure %d from %d",
user_config_freq, freq);
restart_required = true;
} else if (connection[i].freq != freq &&
WLAN_REG_IS_6GHZ_CHAN_FREQ(user_config_freq) &&
policy_mgr_is_chan_eligible_for_sap(pm_ctx,
connection[i].vdev_id,
connection[i].freq)) {
policy_mgr_debug("Move SAP to STA 6 GHz channel");
restart_required = true;
}
}
}

View File

@@ -11547,10 +11547,8 @@ lim_is_power_change_required_for_sta(struct mac_context *mac_ctx,
return false;
}
if (sta_session->curr_op_freq != sap_session->curr_op_freq) {
pe_err("STA and SAP are not in same frequency, do not change TPC power");
if (sta_session->curr_op_freq != sap_session->curr_op_freq)
return false;
}
wlan_reg_get_cur_6g_ap_pwr_type(mac_ctx->pdev, &ap_power_type_6g);