diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index 55d4e823cc..6729caa8a3 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -1397,6 +1397,56 @@ void dp_release_link_peers_ref( mld_link_peers->num_links = 0; } +/** + * dp_get_link_peer_id_by_lmac_id() - Get link peer id using peer id and lmac id + * @soc: Datapath soc handle + * @peer_id: peer id + * @lmac_id: lmac id to find the link peer on given lmac + * + * Return: peer_id of link peer if found + * else return HTT_INVALID_PEER + */ +static inline +uint16_t dp_get_link_peer_id_by_lmac_id(struct dp_soc *soc, uint16_t peer_id, + uint8_t lmac_id) +{ + uint8_t i; + struct dp_peer *peer; + struct dp_peer *link_peer; + struct dp_soc *link_peer_soc; + struct dp_mld_link_peers link_peers_info; + uint16_t link_peer_id = HTT_INVALID_PEER; + + peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_CDP); + + if (!peer) + return HTT_INVALID_PEER; + + if (IS_MLO_DP_MLD_PEER(peer)) { + /* get link peers with reference */ + dp_get_link_peers_ref_from_mld_peer(soc, peer, &link_peers_info, + DP_MOD_ID_CDP); + + for (i = 0; i < link_peers_info.num_links; i++) { + link_peer = link_peers_info.link_peers[i]; + link_peer_soc = link_peer->vdev->pdev->soc; + if ((link_peer_soc == soc) && + (link_peer->vdev->pdev->lmac_id == lmac_id)) { + link_peer_id = link_peer->peer_id; + break; + } + } + /* release link peers reference */ + dp_release_link_peers_ref(&link_peers_info, DP_MOD_ID_CDP); + } else { + link_peer_id = peer_id; + } + + dp_peer_unref_delete(peer, DP_MOD_ID_CDP); + + return link_peer_id; +} + /** * dp_peer_get_tgt_peer_hash_find() - get MLD dp_peer handle for processing @@ -1783,6 +1833,12 @@ dp_tgt_txrx_peer_get_ref_by_id(struct dp_soc *soc, return dp_txrx_peer_get_ref_by_id(soc, peer_id, handle, mod_id); } +static inline +uint16_t dp_get_link_peer_id_by_lmac_id(struct dp_soc *soc, uint16_t peer_id, + uint8_t lmac_id) +{ + return peer_id; +} #endif /* WLAN_FEATURE_11BE_MLO */ #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)