qcacld-3.0: handle MLO scenario for roam processing

Treat MLO STA as a single entity in roam processing:
only process roam related requests on assoc vdev.

Change-Id: Ida9665771e00236c491f58dc764cc6e470dcb6df
CRs-Fixed: 3104659
This commit is contained in:
Yu Wang
2022-01-12 20:30:12 +08:00
committed by Madan Koyyalamudi
szülő fd0ebe20c7
commit 728e81e5a4
2 fájl változott, egészen pontosan 23 új sor hozzáadva és 6 régi sor törölve

Fájl megtekintése

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2022 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 above
@@ -133,10 +133,10 @@ if_mgr_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
if (!psoc)
return QDF_STATUS_E_FAILURE;
vdev_id = wlan_vdev_get_id(vdev);
if (policy_mgr_is_sta_active_connection_exists(psoc) &&
wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE) {
wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE &&
!wlan_vdev_mlme_is_mlo_link_vdev(vdev)) {
vdev_id = wlan_vdev_get_id(vdev);
ifmgr_debug("Enable roaming on connected sta for vdev_id %d", vdev_id);
wlan_cm_enable_roaming_on_connected_sta(pdev, vdev_id);
policy_mgr_set_pcl_for_connected_vdev(psoc, vdev_id, true);

Fájl megtekintése

@@ -40,9 +40,8 @@
#include "wlan_mlme_api.h"
#include "wlan_mlme_main.h"
#include "wlan_mlme_vdev_mgr_interface.h"
#ifdef WLAN_FEATURE_11BE_MLO
#include "wlan_mlo_mgr_sta.h"
#endif
#include "wlan_cm_ucfg_api.h"
/* invalid channel id. */
#define INVALID_CHANNEL_ID 0
@@ -6156,6 +6155,7 @@ uint8_t policy_mgr_get_roam_enabled_sta_session_id(
uint32_t list[MAX_NUMBER_OF_CONC_CONNECTIONS];
uint32_t index, count;
struct policy_mgr_psoc_priv_obj *pm_ctx;
struct wlan_objmgr_vdev *vdev, *assoc_vdev;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
@@ -6163,6 +6163,23 @@ uint8_t policy_mgr_get_roam_enabled_sta_session_id(
return false;
}
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_POLICY_MGR_ID);
if (!vdev) {
policy_mgr_err("Invalid vdev");
return false;
}
if (wlan_vdev_mlme_is_link_sta_vdev(vdev)) {
assoc_vdev = ucfg_mlo_get_assoc_link_vdev(vdev);
if (assoc_vdev && ucfg_cm_is_vdev_active(assoc_vdev)) {
policy_mgr_debug("replace link vdev %d with assoc vdev %d",
vdev_id, wlan_vdev_get_id(assoc_vdev));
vdev_id = wlan_vdev_get_id(assoc_vdev);
}
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
count = policy_mgr_mode_specific_connection_count(
psoc, PM_STA_MODE, list);
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);