qcacld-3.0: Handle concurrency with new EMLSR connection

Currently, if there is a legacy connection and a new STA
connection comes up with EMLSR capability, Host does not
advertise EML caps in assoc request. But there is no support
to enable EMLSR mode if the legacy connection goes away.
Thus, add support to handle this concurrency scenario as
follows
1) Host should advertise EML support capability in assoc
request.
2) After association is complete, force disable one of the
EMLSR links.
3) Once the legacy connection goes down, re-enable the
disabled link.

Change-Id: I5d9f37827e2a9f0571fa9733b4779668bd987f92
CRs-Fixed: 3363115
This commit is contained in:
Gururaj Pandurangi
2022-12-20 00:34:58 -08:00
committed by Madan Koyyalamudi
parent c73843f146
commit 06bec08823
7 changed files with 68 additions and 48 deletions

View File

@@ -50,7 +50,7 @@ QDF_STATUS if_mgr_ap_start_bss(struct wlan_objmgr_vdev *vdev,
if (wlan_vdev_mlme_get_opmode(vdev) == QDF_SAP_MODE ||
wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_GO_MODE)
wlan_handle_emlsr_sta_concurrency(vdev, true, false);
wlan_handle_emlsr_sta_concurrency(vdev, true, false, false);
if (policy_mgr_is_hw_mode_change_in_progress(psoc)) {
if (!QDF_IS_STATUS_SUCCESS(
@@ -132,7 +132,7 @@ if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
if (wlan_vdev_mlme_get_opmode(vdev) == QDF_SAP_MODE ||
wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_GO_MODE)
wlan_handle_emlsr_sta_concurrency(vdev, false, false);
wlan_handle_emlsr_sta_concurrency(vdev, false, false, true);
/*
* Due to audio share glitch with P2P GO caused by
* roam scan on concurrent interface, disable

View File

@@ -72,7 +72,7 @@ QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev,
op_mode = wlan_vdev_mlme_get_opmode(vdev);
if (op_mode == QDF_STA_MODE || op_mode == QDF_P2P_CLIENT_MODE)
wlan_handle_emlsr_sta_concurrency(vdev, false, true);
wlan_handle_emlsr_sta_concurrency(vdev, false, true, false);
if (op_mode == QDF_P2P_CLIENT_MODE || sap_cnt || sta_cnt) {
for (i = 0; i < sta_cnt + sap_cnt; i++) {
@@ -165,6 +165,9 @@ QDF_STATUS if_mgr_connect_complete(struct wlan_objmgr_vdev *vdev,
}
policy_mgr_check_n_start_opportunistic_timer(psoc);
if (wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE &&
wlan_vdev_mlme_is_mlo_vdev(vdev))
wlan_handle_emlsr_sta_concurrency(vdev, false, false, true);
if (!wlan_cm_is_vdev_roaming(vdev))
policy_mgr_check_concurrent_intf_and_restart_sap(psoc,
@@ -209,7 +212,7 @@ QDF_STATUS if_mgr_disconnect_complete(struct wlan_objmgr_vdev *vdev,
if (wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE ||
wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_CLIENT_MODE)
wlan_handle_emlsr_sta_concurrency(vdev, false, false);
wlan_handle_emlsr_sta_concurrency(vdev, false, false, true);
status = if_mgr_enable_roaming_after_p2p_disconnect(pdev, vdev,
RSO_CONNECT_START);