qcacmn: Split dp_rx_pdev_attach and dp_rx_pdev_detach
Split dp_rx_pdev_attach into dp_rx_pdev_desc_pool_alloc, dp_rx_pdev_desc_pool_init, dp_rx_pdev_buffers_alloc and dp_rx_pdev_detach into dp_rx_pdev_desc_pool_free, dp_rx _pdev_desc_pool_deinit, dp_rx_pdev_buffers_free APIs This split is made because dp_pdev_init is introduced as part of this FR and these APIs will be called from dp_pdev_init/dp_pdev_deinit or dp_pdev_attach/dp_pdev_ detach accordingly to maintain the symmetry to DP init and deinit path Change-Id: Ib543ddae90b90f4706004080b1f2b7d0e5cfbfbc CRs-Fixed: 2663595
This commit is contained in:
@@ -2468,21 +2468,7 @@ QDF_STATUS dp_rx_vdev_detach(struct dp_vdev *vdev)
|
||||
void
|
||||
dp_rx_pdev_detach(struct dp_pdev *pdev)
|
||||
{
|
||||
uint8_t mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
|
||||
if (rx_desc_pool->pool_size != 0) {
|
||||
if (!dp_is_soc_reinit(soc))
|
||||
dp_rx_desc_nbuf_and_pool_free(soc, mac_for_pdev,
|
||||
rx_desc_pool);
|
||||
else
|
||||
dp_rx_desc_nbuf_free(soc, rx_desc_pool);
|
||||
}
|
||||
|
||||
return;
|
||||
dp_rx_pdev_desc_pool_free(pdev);
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
@@ -2655,6 +2641,127 @@ dp_pdev_rx_buffers_attach(struct dp_soc *dp_soc, uint32_t mac_id,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_desc_pool_alloc() - allocate memory for software rx descriptor
|
||||
* pool
|
||||
*
|
||||
* @pdev: core txrx pdev context
|
||||
*
|
||||
* Return: QDF_STATUS - QDF_STATUS_SUCCESS
|
||||
* QDF_STATUS_E_NOMEM
|
||||
*/
|
||||
QDF_STATUS
|
||||
dp_rx_pdev_desc_pool_alloc(struct dp_pdev *pdev)
|
||||
{
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
uint32_t rxdma_entries;
|
||||
uint32_t rx_sw_desc_weight;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
uint32_t status = QDF_STATUS_SUCCESS;
|
||||
int mac_for_pdev;
|
||||
|
||||
mac_for_pdev = pdev->lmac_id;
|
||||
if (wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"nss-wifi<4> skip Rx refil %d", mac_for_pdev);
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_for_pdev];
|
||||
rxdma_entries = dp_rxdma_srng->num_entries;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
rx_sw_desc_weight = wlan_cfg_get_dp_soc_rx_sw_desc_weight(soc->wlan_cfg_ctx);
|
||||
|
||||
status = dp_rx_desc_pool_alloc(soc,
|
||||
rx_sw_desc_weight * rxdma_entries,
|
||||
rx_desc_pool);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
rx_desc_pool->owner = DP_WBM2SW_RBM;
|
||||
rx_desc_pool->buf_size = RX_DATA_BUFFER_SIZE;
|
||||
rx_desc_pool->buf_alignment = RX_DATA_BUFFER_ALIGNMENT;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_desc_pool_free() - free software rx descriptor pool
|
||||
*
|
||||
* @pdev: core txrx pdev context
|
||||
*/
|
||||
void dp_rx_pdev_desc_pool_free(struct dp_pdev *pdev)
|
||||
{
|
||||
int mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
|
||||
dp_rx_desc_pool_free(soc, rx_desc_pool);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_desc_pool_init() - initialize software rx descriptors
|
||||
*
|
||||
* @pdev: core txrx pdev context
|
||||
*
|
||||
* Return: QDF_STATUS - QDF_STATUS_SUCCESS
|
||||
* QDF_STATUS_E_NOMEM
|
||||
*/
|
||||
QDF_STATUS dp_rx_pdev_desc_pool_init(struct dp_pdev *pdev)
|
||||
{
|
||||
int mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
uint32_t rxdma_entries;
|
||||
uint32_t rx_sw_desc_weight;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
|
||||
if (wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"nss-wifi<4> skip Rx refil %d", mac_for_pdev);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
if (dp_rx_desc_pool_is_allocated(rx_desc_pool) == QDF_STATUS_E_NOMEM)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_for_pdev];
|
||||
rxdma_entries = dp_rxdma_srng->num_entries;
|
||||
|
||||
soc->process_rx_status = CONFIG_PROCESS_RX_STATUS;
|
||||
|
||||
rx_sw_desc_weight =
|
||||
wlan_cfg_get_dp_soc_rx_sw_desc_weight(soc->wlan_cfg_ctx);
|
||||
|
||||
dp_rx_desc_pool_init(soc, mac_for_pdev,
|
||||
rx_sw_desc_weight * rxdma_entries,
|
||||
rx_desc_pool);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_desc_pool_deinit() - de-initialize software rx descriptor pools
|
||||
* @pdev: core txrx pdev context
|
||||
*
|
||||
* This function resets the freelist of rx descriptors and destroys locks
|
||||
* associated with this list of descriptors.
|
||||
*/
|
||||
void dp_rx_pdev_desc_pool_deinit(struct dp_pdev *pdev)
|
||||
{
|
||||
int mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
|
||||
dp_rx_desc_pool_deinit(soc, rx_desc_pool);
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_rx_attach() - attach DP RX
|
||||
* @pdev: core txrx pdev context
|
||||
@@ -2669,55 +2776,79 @@ dp_pdev_rx_buffers_attach(struct dp_soc *dp_soc, uint32_t mac_id,
|
||||
QDF_STATUS
|
||||
dp_rx_pdev_attach(struct dp_pdev *pdev)
|
||||
{
|
||||
uint8_t pdev_id = pdev->pdev_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
uint32_t rxdma_entries;
|
||||
uint32_t rx_sw_desc_weight;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
QDF_STATUS ret_val;
|
||||
int mac_for_pdev;
|
||||
|
||||
if (wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
"nss-wifi<4> skip Rx refil %d", pdev_id);
|
||||
"nss-wifi<4> skip Rx refil %d",
|
||||
pdev->pdev_id);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
pdev = soc->pdev_list[pdev_id];
|
||||
mac_for_pdev = pdev->lmac_id;
|
||||
dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_for_pdev];
|
||||
if (!dp_is_soc_reinit(soc)) {
|
||||
ret_val = dp_rx_pdev_desc_pool_alloc(pdev);
|
||||
if (ret_val != QDF_STATUS_SUCCESS)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
rxdma_entries = dp_rxdma_srng->num_entries;
|
||||
|
||||
soc->process_rx_status = CONFIG_PROCESS_RX_STATUS;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
rx_sw_desc_weight = wlan_cfg_get_dp_soc_rx_sw_desc_weight(soc->wlan_cfg_ctx);
|
||||
|
||||
dp_rx_desc_pool_alloc(soc, mac_for_pdev,
|
||||
rx_sw_desc_weight * rxdma_entries,
|
||||
rx_desc_pool);
|
||||
|
||||
rx_desc_pool->owner = DP_WBM2SW_RBM;
|
||||
rx_desc_pool->buf_size = RX_DATA_BUFFER_SIZE;
|
||||
rx_desc_pool->buf_alignment = RX_DATA_BUFFER_ALIGNMENT;
|
||||
|
||||
/* For Rx buffers, WBM release ring is SW RING 3,for all pdev's */
|
||||
dp_rx_pdev_desc_pool_init(pdev);
|
||||
|
||||
ret_val = dp_rx_fst_attach(soc, pdev);
|
||||
if ((ret_val != QDF_STATUS_SUCCESS) &&
|
||||
(ret_val != QDF_STATUS_E_NOSUPPORT)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_ANY, QDF_TRACE_LEVEL_ERROR,
|
||||
"RX Flow Search Table attach failed: pdev %d err %d",
|
||||
pdev_id, ret_val);
|
||||
pdev->pdev_id, ret_val);
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
return dp_rx_pdev_buffers_alloc(pdev);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_buffers_alloc() - Allocate nbufs (skbs) and replenish RxDMA ring
|
||||
*
|
||||
* @pdev: core txrx pdev context
|
||||
*
|
||||
* Return: QDF_STATUS - QDF_STATUS_SUCCESS
|
||||
* QDF_STATUS_E_NOMEM
|
||||
*/
|
||||
QDF_STATUS
|
||||
dp_rx_pdev_buffers_alloc(struct dp_pdev *pdev)
|
||||
{
|
||||
int mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
uint32_t rxdma_entries;
|
||||
|
||||
dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_for_pdev];
|
||||
rxdma_entries = dp_rxdma_srng->num_entries;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
|
||||
return dp_pdev_rx_buffers_attach(soc, mac_for_pdev, dp_rxdma_srng,
|
||||
rx_desc_pool, rxdma_entries - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_pdev_buffers_free - Free nbufs (skbs)
|
||||
*
|
||||
* @pdev: core txrx pdev context
|
||||
*/
|
||||
void
|
||||
dp_rx_pdev_buffers_free(struct dp_pdev *pdev)
|
||||
{
|
||||
int mac_for_pdev = pdev->lmac_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
|
||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||
|
||||
dp_rx_desc_nbuf_free(soc, rx_desc_pool);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_rx_nbuf_prepare() - prepare RX nbuf
|
||||
* @soc: core txrx main context
|
||||
|
Reference in New Issue
Block a user