qcacmn: Define API to get the link peer_id using peer_id and lmac_id

Define API to get the link peer_id using peer_id and lmac_id.
This is required in Rx monitor path for stats updation as Rx
monitor provides MLD peer id, whereas stats updation is done
for link peer.

Change-Id: Ib1c9e2729ccaea2e28272b7d175b3ef7fba9fd7a
CRs-Fixed: 3133003
Cette révision appartient à :
Harsh Kumar Bijlani
2021-12-29 16:07:58 +05:30
révisé par Madan Koyyalamudi
Parent f94ac12152
révision c4f3ae13ee

Voir le fichier

@@ -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)