qcacld-3.0: Handle eMLSR STA concurrencies in policy mgr

Handle the following the eMLSR STA concurrency scenarios

1) eMLSR STA + SAP/P2P GO/NAN - Send a force disable link request to
FW on any one of the eMLSR links. FW will decide which link to disable.
2) eMLSR STA + STA/P2P Client - Send a force disable link request to
FW on any one of the eMLSR links. FW will decide which link to disable.
This action happens before vdev start of the new connection request.
3) eMLSR STA + TDLS - TDLS connection is not allowed since eMLSR STA is
given higher priority.
4) If there is already an existing connection, then eMLSR is not allowed.

Once the other connection goes down, the disabled eMLSR link is restored.
The concurrency handling API is invoked from corresponding interface
manager APIs.

Change-Id: Ib7d5da5dcb8eb3ea16c6e50c8fcadc20972d7d05
CRs-Fixed: 3185078
这个提交包含在:
Gururaj Pandurangi
2022-04-21 11:38:48 -07:00
提交者 Madan Koyyalamudi
父节点 61a1943070
当前提交 61dfd77555
修改 14 个文件,包含 267 行新增79 行删除

查看文件

@@ -28,6 +28,7 @@
#include "wlan_p2p_cfg_api.h"
#include "wlan_tdls_api.h"
#include "wlan_p2p_api.h"
#include "wlan_mlme_vdev_mgr_interface.h"
QDF_STATUS if_mgr_ap_start_bss(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
@@ -45,6 +46,10 @@ QDF_STATUS if_mgr_ap_start_bss(struct wlan_objmgr_vdev *vdev,
wlan_tdls_teardown_links_sync(psoc);
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);
if (policy_mgr_is_hw_mode_change_in_progress(psoc)) {
if (!QDF_IS_STATUS_SUCCESS(
policy_mgr_wait_for_connection_update(psoc))) {
@@ -119,6 +124,9 @@ if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
if (!psoc)
return QDF_STATUS_E_FAILURE;
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);
/*
* Due to audio share glitch with P2P GO caused by
* roam scan on concurrent interface, disable

查看文件

@@ -34,6 +34,7 @@
#include <wlan_mlo_mgr_cmn.h>
#include <wlan_cm_roam_api.h>
#include "wlan_nan_api.h"
#include "wlan_mlme_vdev_mgr_interface.h"
#ifdef WLAN_FEATURE_11BE_MLO
#include <wlan_mlo_mgr_sta.h>
#endif
@@ -68,6 +69,10 @@ QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev,
&vdev_id_list[sta_cnt],
PM_SAP_MODE);
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);
if (op_mode == QDF_P2P_CLIENT_MODE || sap_cnt || sta_cnt) {
for (i = 0; i < sta_cnt + sap_cnt; i++) {
if (vdev_id_list[i] == wlan_vdev_get_id(vdev))
@@ -200,6 +205,10 @@ QDF_STATUS if_mgr_disconnect_complete(struct wlan_objmgr_vdev *vdev,
if (!psoc)
return QDF_STATUS_E_FAILURE;
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);
status = if_mgr_enable_roaming_after_p2p_disconnect(pdev, vdev,
RSO_INVALID_REQUESTOR);
if (status) {