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:

committed by
Ravindra Konda

parent
08a119dfea
commit
26b8de01cc
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user