From 880ee4dd1ab2b8a3e2987156cda08081f021fd7a Mon Sep 17 00:00:00 2001 From: Gururaj Pandurangi Date: Wed, 4 Jan 2023 22:32:35 -0800 Subject: [PATCH] qcacmn: Add function declaration to a T2LM API - To invoke the API wlan_send_tid_to_link_mapping from other files, change its static definition and add a function declaration. - Remove repetitive logging of T2LM params in wlan_mlo_parse_t2lm_info API. - HMT STA host needs to send T2LM mapping info to FW only on one peer instead of both peers in case of WKK. Thus, add new API under MCC flag to address this issue. The original changes will remain under else case. Change-Id: I2495fddca7dc5da253a6d10ab41b70cf7f627156 CRs-Fixed: 3373326 --- umac/mlo_mgr/inc/wlan_mlo_t2lm.h | 18 ++++++++ umac/mlo_mgr/src/wlan_mlo_t2lm.c | 79 ++++++++++++++++++++++---------- 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/umac/mlo_mgr/inc/wlan_mlo_t2lm.h b/umac/mlo_mgr/inc/wlan_mlo_t2lm.h index e706ef7d0a..0d5de07354 100644 --- a/umac/mlo_mgr/inc/wlan_mlo_t2lm.h +++ b/umac/mlo_mgr/inc/wlan_mlo_t2lm.h @@ -594,6 +594,17 @@ QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev, struct wlan_t2lm_context *rx_t2lm_ie, uint64_t tsf); +/** + * wlan_send_tid_to_link_mapping() - API to send T2LM info received from beacon, + * probe response or action frame to FW. + * + * @vdev: Pointer to vdev + * @t2lm: T2LM info + * + * Return QDF_STATUS + */ +QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_t2lm_info *t2lm); #else static inline QDF_STATUS wlan_mlo_parse_t2lm_ie( struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie) @@ -709,5 +720,12 @@ static inline QDF_STATUS wlan_mlo_dev_t2lm_notify_link_update( { return QDF_STATUS_SUCCESS; } + +static inline +QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_t2lm_info *t2lm) +{ + 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 3ab6c6711b..954cf0e8c9 100644 --- a/umac/mlo_mgr/src/wlan_mlo_t2lm.c +++ b/umac/mlo_mgr/src/wlan_mlo_t2lm.c @@ -100,8 +100,7 @@ QDF_STATUS wlan_mlo_parse_t2lm_info(uint8_t *ie, ie_ptr += WLAN_T2LM_EXPECTED_DURATION_SIZE * (sizeof(uint8_t)); } - t2lm_debug("direction:%d default_link_mapping:%d mapping_switch_time:%d expected_duration:%d", - t2lm->direction, t2lm->default_link_mapping, + t2lm_debug("mapping_switch_time:%d expected_duration:%d", t2lm->mapping_switch_time, t2lm->expected_duration); if (t2lm->default_link_mapping) @@ -715,35 +714,37 @@ QDF_STATUS wlan_mlo_vdev_tid_to_link_map_event( return QDF_STATUS_SUCCESS; } +#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE static -QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, - struct wlan_t2lm_info *t2lm) +QDF_STATUS wlan_send_t2lm_info(struct wlan_objmgr_vdev *vdev, + struct wlan_t2lm_info *t2lm, + struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops) +{ + QDF_STATUS status = QDF_STATUS_E_FAILURE; + + if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) { + t2lm_err("vdev is not MLO vdev"); + return status; + } + + status = mlo_tx_ops->send_tid_to_link_mapping(vdev, t2lm); + if (QDF_IS_STATUS_ERROR(status)) + t2lm_err("Failed to send T2LM command to FW"); + + return status; +} +#else +static +QDF_STATUS wlan_send_t2lm_info(struct wlan_objmgr_vdev *vdev, + struct wlan_t2lm_info *t2lm, + struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops) { - struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops; struct wlan_objmgr_vdev *co_mld_vdev; - struct wlan_objmgr_psoc *psoc; - struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS] = {NULL}; + struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS]; uint16_t vdev_count = 0; int i = 0; QDF_STATUS status = QDF_STATUS_E_FAILURE; - psoc = wlan_vdev_get_psoc(vdev); - if (!psoc) { - t2lm_err("null psoc"); - return QDF_STATUS_E_NULL_VALUE; - } - - mlo_tx_ops = &psoc->soc_cb.tx_ops->mlo_ops; - if (!mlo_tx_ops) { - t2lm_err("tx_ops is null!"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (!mlo_tx_ops->send_tid_to_link_mapping) { - t2lm_err("send_tid_to_link_mapping is null"); - return QDF_STATUS_E_NULL_VALUE; - } - mlo_get_ml_vdev_list(vdev, &vdev_count, wlan_vdev_list); if (!vdev_count) { t2lm_err("Number of VDEVs under MLD is reported as 0"); @@ -767,6 +768,36 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, return status; } +#endif + +QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev, + struct wlan_t2lm_info *t2lm) +{ + struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops; + struct wlan_objmgr_psoc *psoc; + QDF_STATUS status = QDF_STATUS_E_FAILURE; + + psoc = wlan_vdev_get_psoc(vdev); + if (!psoc) { + t2lm_err("null psoc"); + return QDF_STATUS_E_NULL_VALUE; + } + + mlo_tx_ops = &psoc->soc_cb.tx_ops->mlo_ops; + if (!mlo_tx_ops) { + t2lm_err("tx_ops is null!"); + return QDF_STATUS_E_NULL_VALUE; + } + + if (!mlo_tx_ops->send_tid_to_link_mapping) { + t2lm_err("send_tid_to_link_mapping is null"); + return QDF_STATUS_E_NULL_VALUE; + } + + status = wlan_send_t2lm_info(vdev, t2lm, mlo_tx_ops); + + return status; +} void wlan_mlo_t2lm_timer_expiry_handler(void *vdev) {