qcacmn: Add addr conversion logic for raw mode packets

In case MLO HW will do the link mac address to mld mac address
conversion in RX path, But currently HW is supporting only for
802.3 mode.
For RAW mode(802.11) this conversion not happening on HW so added
this address conversion logic on SW.

Change-Id: Ibd794510e9d0ebdca884ed2e4043e0c48052156e
CRs-Fixed: 3537914
This commit is contained in:
KARTHIK KUMAR T
2023-06-22 16:45:39 +05:30
committed by Rahul Choudhary
parent ec3d41727b
commit 0f5280024c

View File

@@ -2344,6 +2344,52 @@ dp_rx_validate_rx_callbacks(struct dp_soc *soc,
return QDF_STATUS_SUCCESS;
}
#if defined(WLAN_FEATURE_11BE_MLO) && defined(RAW_PKT_MLD_ADDR_CONVERSION)
static void dp_rx_raw_pkt_mld_addr_conv(struct dp_soc *soc,
struct dp_vdev *vdev,
struct dp_txrx_peer *txrx_peer,
qdf_nbuf_t nbuf_head)
{
qdf_nbuf_t nbuf, next;
struct dp_peer *peer = NULL;
struct ieee80211_frame *wh = NULL;
if (vdev->rx_decap_type == htt_cmn_pkt_type_native_wifi)
return;
peer = dp_peer_get_ref_by_id(soc, txrx_peer->peer_id,
DP_MOD_ID_RX);
if (!peer)
return;
if (!IS_MLO_DP_MLD_PEER(peer)) {
dp_peer_unref_delete(peer, DP_MOD_ID_RX);
return;
}
nbuf = nbuf_head;
while (nbuf) {
next = nbuf->next;
wh = (struct ieee80211_frame *)qdf_nbuf_data(nbuf);
qdf_mem_copy(wh->i_addr1, vdev->mld_mac_addr.raw,
QDF_MAC_ADDR_SIZE);
qdf_mem_copy(wh->i_addr2, peer->mac_addr.raw,
QDF_MAC_ADDR_SIZE);
nbuf = next;
}
dp_peer_unref_delete(peer, DP_MOD_ID_RX);
}
#else
static inline
void dp_rx_raw_pkt_mld_addr_conv(struct dp_soc *soc,
struct dp_vdev *vdev,
struct dp_txrx_peer *txrx_peer,
qdf_nbuf_t nbuf_head)
{ }
#endif
QDF_STATUS dp_rx_deliver_to_stack(struct dp_soc *soc,
struct dp_vdev *vdev,
struct dp_txrx_peer *txrx_peer,
@@ -2356,6 +2402,7 @@ QDF_STATUS dp_rx_deliver_to_stack(struct dp_soc *soc,
if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw) ||
(vdev->rx_decap_type == htt_cmn_pkt_type_native_wifi)) {
dp_rx_raw_pkt_mld_addr_conv(soc, vdev, txrx_peer, nbuf_head);
vdev->osif_rsim_rx_decap(vdev->osif_vdev, &nbuf_head,
&nbuf_tail);
}