qcacmn: Multicast support for MLO
Multicast support for MLO 1. Following functions are newly added. dp_rx_igmp_handler() dp_tx_mlo_mcast_handler_be() dp_rx_mlo_mcast_handler_be() dp_mlo_get_mcast_primary_vdev() Change-Id: If215f843369e6e2621ef302b924e524c86f0d30b
This commit is contained in:

committed by
Madan Koyyalamudi

parent
64d845ab39
commit
b43e679a58
@@ -1072,6 +1072,72 @@ struct dp_rx_desc *dp_rx_desc_cookie_2_va_be(struct dp_soc *soc,
|
||||
return (struct dp_rx_desc *)dp_cc_desc_find(soc, cookie);
|
||||
}
|
||||
|
||||
#if defined(WLAN_FEATURE_11BE_MLO)
|
||||
#if defined(WLAN_MLO_MULTI_CHIP) && defined(WLAN_MCAST_MLO)
|
||||
static inline void dp_rx_dummy_src_mac(qdf_nbuf_t nbuf)
|
||||
{
|
||||
qdf_ether_header_t *eh =
|
||||
(qdf_ether_header_t *)qdf_nbuf_data(nbuf);
|
||||
|
||||
eh->ether_shost[0] = 0x4d; /* M */
|
||||
eh->ether_shost[1] = 0x4c; /* L */
|
||||
eh->ether_shost[2] = 0x4d; /* M */
|
||||
eh->ether_shost[3] = 0x43; /* C */
|
||||
eh->ether_shost[4] = 0x41; /* A */
|
||||
eh->ether_shost[5] = 0x53; /* S */
|
||||
}
|
||||
|
||||
bool dp_rx_mlo_igmp_handler(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
struct dp_peer *peer,
|
||||
qdf_nbuf_t nbuf)
|
||||
{
|
||||
struct dp_vdev *mcast_primary_vdev = NULL;
|
||||
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
|
||||
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||
|
||||
if (!(qdf_nbuf_is_ipv4_igmp_pkt(buf) ||
|
||||
qdf_nbuf_is_ipv6_igmp_pkt(buf)))
|
||||
return false;
|
||||
|
||||
if (vdev->mcast_enhancement_en || be_vdev->mcast_primary)
|
||||
goto send_pkt;
|
||||
|
||||
mcast_primary_vdev = dp_mlo_get_mcast_primary_vdev(be_soc, be_vdev,
|
||||
DP_MOD_ID_RX);
|
||||
if (!mcast_primary_vdev) {
|
||||
dp_rx_debug("Non mlo vdev");
|
||||
goto send_pkt;
|
||||
}
|
||||
dp_rx_dummy_src_mac(nbuf);
|
||||
dp_rx_deliver_to_stack(mcast_primary_vdev->pdev->soc,
|
||||
mcast_primary_vdev,
|
||||
peer,
|
||||
nbuf,
|
||||
NULL);
|
||||
dp_vdev_unref_delete(mcast_primary_vdev->pdev->soc,
|
||||
mcast_primary_vdev,
|
||||
DP_MOD_ID_RX);
|
||||
return true;
|
||||
send_pkt:
|
||||
dp_rx_deliver_to_stack(be_vdev->vdev.pdev->soc,
|
||||
&be_vdev->vdev,
|
||||
peer,
|
||||
nbuf,
|
||||
NULL);
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
bool dp_rx_mlo_igmp_handler(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
struct dp_peer *peer,
|
||||
qdf_nbuf_t nbuf)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_NEAR_FULL_IRQ
|
||||
uint32_t dp_rx_nf_process(struct dp_intr *int_ctx,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
|
Reference in New Issue
Block a user