qcacld-3.0: Enable RSO for ML connection

For MLO connection, roaming is enabled
after ML link is up.

Change-Id: Ib042a9593bef9f287b92f0b256c942f8133a7f71
CRs-Fixed: 3098637
This commit is contained in:
Amruta Kulkarni
2021-11-10 15:45:36 -08:00
committed by Madan Koyyalamudi
parent 54f3255108
commit f99679197f
4 changed files with 54 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015, 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -35,6 +35,7 @@
#include "cfg_ucfg_api.h" #include "cfg_ucfg_api.h"
#include "wlan_roam_debug.h" #include "wlan_roam_debug.h"
#include "wlan_mlo_mgr_sta.h" #include "wlan_mlo_mgr_sta.h"
#include "wlan_mlo_mgr_roam.h"
#ifdef WLAN_FEATURE_FILS_SK #ifdef WLAN_FEATURE_FILS_SK
void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev, void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
@@ -1377,7 +1378,8 @@ static void cm_process_connect_complete(struct wlan_objmgr_psoc *psoc,
QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP_104) || QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP_104) ||
QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP))) { QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP))) {
cm_csr_set_ss_none(vdev_id); cm_csr_set_ss_none(vdev_id);
cm_roam_start_init_on_connect(pdev, vdev_id); if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
cm_roam_start_init_on_connect(pdev, vdev_id);
} else { } else {
if (rsp->is_wps_connection) if (rsp->is_wps_connection)
key_interval = key_interval =
@@ -1398,6 +1400,7 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev; struct wlan_objmgr_pdev *pdev;
struct wlan_objmgr_psoc *psoc; struct wlan_objmgr_psoc *psoc;
enum QDF_OPMODE op_mode; enum QDF_OPMODE op_mode;
QDF_STATUS status;
if (!vdev || !rsp) { if (!vdev || !rsp) {
mlme_err("vdev or rsp is NULL"); mlme_err("vdev or rsp is NULL");
@@ -1435,10 +1438,15 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
wlan_p2p_status_connect(vdev); wlan_p2p_status_connect(vdev);
} }
if (op_mode == QDF_STA_MODE) if (op_mode == QDF_STA_MODE &&
!wlan_vdev_mlme_is_mlo_vdev(vdev))
wlan_cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_INIT, wlan_cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_INIT,
REASON_CONNECT); REASON_CONNECT);
status = mlo_enable_rso(pdev, vdev);
if (QDF_IS_STATUS_ERROR(status))
return status;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -88,6 +88,19 @@ mlo_get_sta_link_mac_addr(uint8_t vdev_id,
bool bool
is_multi_link_roam(struct roam_offload_synch_ind *sync_ind); is_multi_link_roam(struct roam_offload_synch_ind *sync_ind);
/**
* mlo_enable_rso - Enable rso on assoc vdev
*
* @pdev: pdev pointer
* @vdev: assoc vdev pointer
*
* This api will be called to enable RSO for MLO connection.
*
* Return: qdf_status success or fail
*/
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev);
#else #else
static inline QDF_STATUS static inline QDF_STATUS
mlo_get_sta_link_mac_addr(uint8_t vdev_id, mlo_get_sta_link_mac_addr(uint8_t vdev_id,
@@ -103,5 +116,11 @@ is_multi_link_roam(struct roam_offload_synch_ind *sync_ind)
return false; return false;
} }
static inline
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_FEATURE_11BE_MLO */ #endif /* WLAN_FEATURE_11BE_MLO */
#endif #endif

View File

@@ -1,5 +1,5 @@
/* /*
* 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -69,3 +69,23 @@ bool is_multi_link_roam(struct roam_offload_synch_ind *sync_ind)
return false; return false;
} }
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev)
{
struct wlan_objmgr_vdev *assoc_vdev;
if (wlan_vdev_mlme_is_mlo_link_vdev(vdev)) {
assoc_vdev = wlan_mlo_get_assoc_link_vdev(vdev);
if (!assoc_vdev) {
mlo_err("Assoc vdev is null");
return QDF_STATUS_E_NULL_VALUE;
}
cm_roam_start_init_on_connect(pdev,
wlan_vdev_get_id(assoc_vdev));
}
return QDF_STATUS_SUCCESS;
}

View File

@@ -4120,7 +4120,8 @@ csr_roam_chk_lnk_set_ctx_rsp(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
csr_roam_substate_change(mac_ctx, eCSR_ROAM_SUBSTATE_NONE, csr_roam_substate_change(mac_ctx, eCSR_ROAM_SUBSTATE_NONE,
sessionId); sessionId);
cm_stop_wait_for_key_timer(mac_ctx->psoc, sessionId); cm_stop_wait_for_key_timer(mac_ctx->psoc, sessionId);
cm_roam_start_init_on_connect(mac_ctx->pdev, sessionId); if (!wlan_vdev_mlme_get_is_mlo_vdev(mac_ctx->psoc, sessionId))
cm_roam_start_init_on_connect(mac_ctx->pdev, sessionId);
} }
if (eSIR_SME_SUCCESS == pRsp->status_code) { if (eSIR_SME_SUCCESS == pRsp->status_code) {
qdf_copy_macaddr(&roam_info->peerMac, &pRsp->peer_macaddr); qdf_copy_macaddr(&roam_info->peerMac, &pRsp->peer_macaddr);