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:
Himanshu Batra
2019-10-13 16:40:44 +05:30
parent 86679bd69e
commit 005412e1c8
2 changed files with 36 additions and 17 deletions

View File

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

View File

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