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:
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user