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:

committed by
Rahul Choudhary

parent
ec3d41727b
commit
0f5280024c
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user