From 1958f62e8a854c8d9f76dc662c5ba48d567925a4 Mon Sep 17 00:00:00 2001 From: Gururaj Pandurangi Date: Thu, 2 Mar 2023 03:12:08 -0800 Subject: [PATCH] qcacmn: Add new wrapper API to send peer-level T2LM Add a new wrapper API to send peer-level negotiated tid-to-link mapping to FW as the existing API to send the mapping received from the beacon/probe response uses ML dev context whereas the new API uses ML peer context. Change-Id: Ifada5600e9524585c69847f332ed0280fd316813 CRs-Fixed: 3423127 --- umac/mlo_mgr/inc/wlan_mlo_t2lm.h | 21 +++++++++++++++++++ umac/mlo_mgr/src/wlan_mlo_t2lm.c | 36 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/umac/mlo_mgr/inc/wlan_mlo_t2lm.h b/umac/mlo_mgr/inc/wlan_mlo_t2lm.h index 718ac8bc76..1cac7a6d49 100644 --- a/umac/mlo_mgr/inc/wlan_mlo_t2lm.h +++ b/umac/mlo_mgr/inc/wlan_mlo_t2lm.h @@ -720,6 +720,20 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, */ QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev, struct wlan_t2lm_info *t2lm); + +/** + * wlan_send_peer_level_tid_to_link_mapping() - API to send peer level T2LM info + * negotiated using action frames to FW. + * + * @vdev: Pointer to vdev + * @peer: pointer to peer + * + * Return QDF_STATUS + */ +QDF_STATUS +wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_objmgr_peer *peer); + #else static inline QDF_STATUS wlan_mlo_parse_t2lm_ie( struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie) @@ -842,5 +856,12 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, { return QDF_STATUS_SUCCESS; } + +static inline QDF_STATUS +wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_objmgr_peer *peer) +{ + return QDF_STATUS_SUCCESS; +} #endif /* WLAN_FEATURE_11BE */ #endif /* _WLAN_MLO_T2LM_H_ */ diff --git a/umac/mlo_mgr/src/wlan_mlo_t2lm.c b/umac/mlo_mgr/src/wlan_mlo_t2lm.c index 9ebc4cd02c..34c631767b 100644 --- a/umac/mlo_mgr/src/wlan_mlo_t2lm.c +++ b/umac/mlo_mgr/src/wlan_mlo_t2lm.c @@ -926,6 +926,42 @@ peer_release: return status; } +QDF_STATUS +wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_objmgr_peer *peer) +{ + uint8_t dir, idx = 0; + struct wlan_mlo_peer_context *ml_peer; + struct wlan_t2lm_info *t2lm_info; + QDF_STATUS status = QDF_STATUS_E_NULL_VALUE; + + if (!peer) { + t2lm_err("peer is null"); + return status; + } + + ml_peer = peer->mlo_peer_ctx; + if (!ml_peer) { + t2lm_err("ml peer is null"); + return status; + } + + for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) { + t2lm_info = &ml_peer->t2lm_policy.t2lm_negotiated_info.t2lm_info[dir]; + if (t2lm_info && t2lm_info->direction != + WLAN_T2LM_INVALID_DIRECTION) { + t2lm_debug("send peer-level mapping to FW for dir: %d", dir); + status = wlan_send_tid_to_link_mapping(vdev, t2lm_info); + idx++; + } + } + + if (!idx) + t2lm_debug("No peer-level mapping present"); + + return status; +} + void wlan_mlo_t2lm_timer_expiry_handler(void *vdev) { struct wlan_objmgr_vdev *vdev_ctx = (struct wlan_objmgr_vdev *)vdev;