qca-wifi: Componentize Multicast Enhancement
Remove dependency of ME on VAP layer and radio(ic) layer data structures Change-Id: Ic1e93204e02083fb90e879a7c5f41c8ee7376c14 CRs-Fixed: 2580389
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -171,11 +171,12 @@ dp_tx_me_free_descriptor(struct cdp_pdev *pdev_handle)
|
||||
{
|
||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
||||
|
||||
qdf_atomic_dec(&pdev->mc_num_vap_attached);
|
||||
if (atomic_read(&pdev->mc_num_vap_attached) == 0) {
|
||||
dp_tx_me_exit(pdev);
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"Disable MCAST_TO_UCAST");
|
||||
if (atomic_read(&pdev->mc_num_vap_attached)) {
|
||||
if (qdf_atomic_dec_and_test(&pdev->mc_num_vap_attached)) {
|
||||
dp_tx_me_exit(pdev);
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"Disable MCAST_TO_UCAST");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,10 +190,10 @@ dp_tx_me_free_descriptor(struct cdp_pdev *pdev_handle)
|
||||
QDF_STATUS
|
||||
dp_tx_prepare_send_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf)
|
||||
{
|
||||
if (vdev->me_convert) {
|
||||
if (vdev->me_convert(vdev->osif_vdev, nbuf) > 0)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
if (dp_me_mcast_convert((struct cdp_soc_t *)(vdev->pdev->soc),
|
||||
vdev->vdev_id, vdev->pdev->pdev_id,
|
||||
nbuf) > 0)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
@@ -231,7 +232,8 @@ static void dp_tx_me_mem_free(struct dp_pdev *pdev,
|
||||
|
||||
/**
|
||||
* dp_tx_me_send_convert_ucast(): function to convert multicast to unicast
|
||||
* @vdev: DP VDEV handle
|
||||
* @soc: Datapath soc handle
|
||||
* @vdev_id: vdev id
|
||||
* @nbuf: Multicast nbuf
|
||||
* @newmac: Table of the clients to which packets have to be sent
|
||||
* @new_mac_cnt: No of clients
|
||||
@@ -239,11 +241,13 @@ static void dp_tx_me_mem_free(struct dp_pdev *pdev,
|
||||
* return: no of converted packets
|
||||
*/
|
||||
uint16_t
|
||||
dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf,
|
||||
uint8_t newmac[][QDF_MAC_ADDR_SIZE], uint8_t new_mac_cnt)
|
||||
dp_tx_me_send_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
||||
qdf_nbuf_t nbuf,
|
||||
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
||||
uint8_t new_mac_cnt)
|
||||
{
|
||||
struct dp_vdev *vdev = (struct dp_vdev *) vdev_handle;
|
||||
struct dp_pdev *pdev = vdev->pdev;
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_pdev *pdev;
|
||||
qdf_ether_header_t *eh;
|
||||
uint8_t *data;
|
||||
uint16_t len;
|
||||
@@ -266,6 +270,16 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf,
|
||||
uint8_t empty_entry_mac[QDF_MAC_ADDR_SIZE] = {0};
|
||||
QDF_STATUS status;
|
||||
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
|
||||
vdev_id);
|
||||
if (!vdev)
|
||||
return 1;
|
||||
|
||||
pdev = vdev->pdev;
|
||||
|
||||
if (!pdev)
|
||||
return 1;
|
||||
|
||||
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
|
||||
|
||||
dp_tx_get_queue(vdev, nbuf, &msdu_info.tx_queue);
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
#ifndef _DP_TXRX_ME_H_
|
||||
#define _DP_TXRX_ME_H_
|
||||
uint16_t dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle,
|
||||
uint16_t dp_tx_me_send_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
||||
qdf_nbuf_t nbuf,
|
||||
uint8_t newmac[][QDF_MAC_ADDR_SIZE],
|
||||
uint8_t new_mac_cnt);
|
||||
@@ -27,4 +27,9 @@ void dp_tx_me_free_descriptor(struct cdp_pdev *pdev);
|
||||
void dp_tx_me_exit(struct dp_pdev *pdev);
|
||||
QDF_STATUS
|
||||
dp_tx_prepare_send_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf);
|
||||
extern int
|
||||
dp_me_mcast_convert(struct cdp_soc_t *soc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t pdev_id,
|
||||
qdf_nbuf_t wbuf);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user