qcacld-3.0: Avoid NSS and Antenna mode change during TDLS connection

In the api hdd_set_nss_params() and hdd_set_antenna_mode()
change in nss parameter or antenna mode cause the TDLS
teardown.

Add a check in api hdd_set_nss_params() and
hdd_set_antenna_mode() to prevent change in parameter
if there is a existing TDLS connection.

Change-Id: I8a58b8b0a617a8de490907e4c3181b15d90e0dbb
CRs-Fixed: 3789892
此提交包含在:
Vijay Raj
2024-04-16 22:41:13 -07:00
提交者 Ravindra Konda
父節點 86a2632fa2
當前提交 847c26d19d
共有 4 個檔案被更改,包括 72 行新增3 行删除

查看文件

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-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 above
@@ -104,6 +104,15 @@ wlan_tdls_notify_sta_connect(uint8_t vdev_id,
bool tdls_prohibited,
struct wlan_objmgr_vdev *vdev);
/**
* wlan_is_tdls_session_present() - Get TDLS session status
* @vdev: vdev pointer
*
* Return: QDF_STATUS_SUCCESS if success; other value if failed
*/
QDF_STATUS
wlan_is_tdls_session_present(struct wlan_objmgr_vdev *vdev);
/**
* wlan_tdls_update_tx_pkt_cnt() - update tx pkt count
* @vdev: tdls vdev object

查看文件

@@ -31,6 +31,7 @@
#include <wlan_objmgr_cmn.h>
#include "wlan_tdls_cfg_api.h"
#include "wlan_policy_mgr_api.h"
#include "wlan_mlo_mgr_sta.h"
static QDF_STATUS tdls_teardown_flush_cb(struct scheduler_msg *msg)
{
@@ -286,6 +287,50 @@ wlan_tdls_handle_sap_start(struct wlan_objmgr_psoc *psoc)
{}
#endif
#ifdef WLAN_FEATURE_11BE_MLO
static QDF_STATUS
wlan_mlo_is_tdls_session_present(struct wlan_objmgr_vdev *vdev)
{
uint8_t i;
struct wlan_mlo_dev_context *ml_dev = vdev->mlo_dev_ctx;
if (!ml_dev) {
tdls_err("MLO dev ctx is null");
return QDF_STATUS_E_FAILURE;
}
for (i = 0; i < ml_dev->wlan_vdev_count; i++) {
vdev = ml_dev->wlan_vdev_list[i];
if (tdls_get_connected_peer_count_from_vdev(vdev) > 0) {
tdls_debug("TDLS session is present");
return QDF_STATUS_SUCCESS;
}
}
return QDF_STATUS_E_INVAL;
}
#else
static QDF_STATUS
wlan_mlo_is_tdls_session_present(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_E_INVAL;
}
#endif
QDF_STATUS
wlan_is_tdls_session_present(struct wlan_objmgr_vdev *vdev)
{
if (mlo_is_mld_sta(vdev))
return wlan_mlo_is_tdls_session_present(vdev);
if (tdls_get_connected_peer_count_from_vdev(vdev) > 0) {
tdls_debug("TDLS session is present");
return QDF_STATUS_SUCCESS;
}
return QDF_STATUS_E_INVAL;
}
void wlan_tdls_notify_start_bss(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{