1
0

qcacld-3.0: skip frequency filtering for MLO STA scenario

If MLO STA is present, allow further STA connections to all
available bands/channels irrespective of existing STA
connection band.

Change-Id: Ic7da10b2e74645b73c579b38f43bb7e3105b6f55
CRs-Fixed: 3088656
Este cometimento está contido em:
Yu Wang
2021-12-01 14:29:02 +08:00
cometido por Madan Koyyalamudi
ascendente dd4e2f07dc
cometimento 987d406769
3 ficheiros modificados com 56 adições e 0 eliminações

Ver ficheiro

@@ -4034,6 +4034,14 @@ bool policy_mgr_is_mlo_sap_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
*/
uint32_t
policy_mgr_get_conc_ext_flags(struct wlan_objmgr_vdev *vdev, bool force_mlo);
/**
* policy_mgr_is_mlo_sta_present() - Check whether MLO STA is present
* @psoc: PSOC object information
*
* Return: True if MLO STA is present, otherwise false.
*/
bool policy_mgr_is_mlo_sta_present(struct wlan_objmgr_psoc *psoc);
#else
static inline bool policy_mgr_is_mlo_sap_concurrency_allowed(
@@ -4048,6 +4056,11 @@ policy_mgr_get_conc_ext_flags(struct wlan_objmgr_vdev *vdev, bool force_mlo)
{
return 0;
}
static inline bool policy_mgr_is_mlo_sta_present(struct wlan_objmgr_psoc *psoc)
{
return false;
}
#endif
/**

Ver ficheiro

@@ -3651,6 +3651,42 @@ policy_mgr_is_mlo_sap_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
return ret;
}
bool policy_mgr_is_mlo_sta_present(struct wlan_objmgr_psoc *psoc)
{
uint32_t conn_index = 0;
struct policy_mgr_psoc_priv_obj *pm_ctx;
struct wlan_objmgr_vdev *vdev;
bool mlo_sta_present = false;
uint8_t vdev_id;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("Invalid Context");
return false;
}
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
for (conn_index = 0;
conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS && !mlo_sta_present;
conn_index++) {
if (pm_conc_connection_list[conn_index].mode != PM_STA_MODE ||
!pm_conc_connection_list[conn_index].in_use)
continue;
vdev_id = pm_conc_connection_list[conn_index].vdev_id;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_POLICY_MGR_ID);
if (!vdev)
continue;
mlo_sta_present = wlan_vdev_mlme_is_mlo_vdev(vdev);
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
}
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
return mlo_sta_present;
}
#else
static bool
policy_mgr_allow_sta_concurrency(struct wlan_objmgr_psoc *psoc,

Ver ficheiro

@@ -496,6 +496,13 @@ wlan_cm_dual_sta_is_freq_allowed(struct wlan_objmgr_psoc *psoc,
opmode != QDF_STA_MODE)
return true;
/*
* For MLO STA scenario, allow further STA connections to all available
* bands/channels irrespective of existing STA connection band.
*/
if (policy_mgr_is_mlo_sta_present(psoc))
return true;
connected_sta_freq = op_ch_freq_list[0];
band = wlan_reg_freq_to_band(connected_sta_freq);
if ((band == REG_BAND_2G && WLAN_REG_IS_24GHZ_CH_FREQ(freq)) ||