qcacmn: Handle frag based ops based on rx_Desc_pool flag

Rx desc pool have a flag to identify whether frag or nbuf
operation needs to be performed for alloc, map, prep and
free buffer for monitor dest buffer.

This flag will be set only for mon destination desc pool,
if RX_MON_MEM_FRAG feature is enabled.
In all other case, It will be set to Zero and default nbuf
operation will be taken.
This flag get initialized at the time of pdev rx_desc_pool
initialization and gets reset while pdev deinit.

Mon destination buffer will have support for frag if
RX_MON_MEM_FRAG flag is set.

Change-Id: I67c6c823ee4f114035b884c024a1a9054a40665b
CRs-Fixed: 2741757
This commit is contained in:
Ankit Kumar
2020-07-25 15:08:45 +05:30
committed by snandini
parent 37a135ca9e
commit 526bbe81de
8 changed files with 381 additions and 69 deletions

View File

@@ -229,6 +229,10 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
rx_desc_pool->freelist = NULL;
rx_desc_pool->pool_size = 0;
/* Deinitialize rx mon desr frag flag */
rx_desc_pool->rx_mon_dest_frag_enable = false;
qdf_spin_unlock_bh(&rx_desc_pool->lock);
qdf_spinlock_destroy(&rx_desc_pool->lock);
}
@@ -374,6 +378,41 @@ void dp_rx_desc_nbuf_free(struct dp_soc *soc,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
/**
* dp_rx_desc_frag_free() - Free desc frag buffer
*
* @soc: core txrx main context
* @rx_desc_pool: rx descriptor pool pointer
*
* Return: None
*/
#ifdef DP_RX_MON_MEM_FRAG
void dp_rx_desc_frag_free(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool)
{
qdf_dma_addr_t paddr;
qdf_frag_t vaddr;
int i;
qdf_spin_lock_bh(&rx_desc_pool->lock);
for (i = 0; i < rx_desc_pool->pool_size; i++) {
if (rx_desc_pool->array[i].rx_desc.in_use) {
paddr = rx_desc_pool->array[i].rx_desc.paddr_buf_start;
vaddr = rx_desc_pool->array[i].rx_desc.rx_buf_start;
if (!(rx_desc_pool->array[i].rx_desc.unmapped)) {
qdf_mem_unmap_page(soc->osdev, paddr,
rx_desc_pool->buf_size,
QDF_DMA_FROM_DEVICE);
rx_desc_pool->array[i].rx_desc.unmapped = 1;
}
qdf_frag_free(vaddr);
}
}
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
#endif
void dp_rx_desc_pool_free(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool)
{
@@ -387,6 +426,10 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
rx_desc_pool->freelist = NULL;
rx_desc_pool->pool_size = 0;
/* Deinitialize rx mon desr frag flag */
rx_desc_pool->rx_mon_dest_frag_enable = false;
qdf_spin_unlock_bh(&rx_desc_pool->lock);
qdf_spinlock_destroy(&rx_desc_pool->lock);
}