qcacmn: Add API to clean up tx desc pool
Add an API to clean up tx dec pool in case of umac reset. Change-Id: I99fe11bcd07471f5aafefbeae10a9d4683cc5c5c CRs-Fixed: 3266252
This commit is contained in:

committed by
Madan Koyyalamudi

parent
d5a9b008f4
commit
d9709af89a
@@ -1053,6 +1053,25 @@ qdf_mem_set_dma_pa(qdf_device_t osdev,
|
||||
*/
|
||||
qdf_shared_mem_t *qdf_mem_shared_mem_alloc(qdf_device_t osdev, uint32_t size);
|
||||
|
||||
#ifdef DP_UMAC_HW_RESET_SUPPORT
|
||||
/**
|
||||
* qdf_tx_desc_pool_free_bufs() - Go through elems and call the registered cb
|
||||
* @ctxt: Context to be passed to the cb
|
||||
* @pages: Multi page information storage
|
||||
* @elem_size: Each element size
|
||||
* @elem_count: Total number of elements should be allocated
|
||||
* @cacheable: Coherent memory or cacheable memory
|
||||
* @cb: Callback to free the elements
|
||||
* @elem_list: elem list for delayed free
|
||||
*
|
||||
* Return: 0 on Succscc, or Error code
|
||||
*/
|
||||
int qdf_tx_desc_pool_free_bufs(void *ctxt, struct qdf_mem_multi_page_t *pages,
|
||||
uint32_t elem_size, uint32_t elem_count,
|
||||
uint8_t cacheable, qdf_mem_release_cb cb,
|
||||
void *elem_list);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* qdf_mem_shared_mem_free() - Free shared memory
|
||||
* @osdev: parent device instance
|
||||
|
@@ -281,6 +281,10 @@ enum qdf_driver_type {
|
||||
QDF_DRIVER_TYPE_INVALID = 0x7FFFFFFF
|
||||
};
|
||||
|
||||
#ifdef DP_UMAC_HW_RESET_SUPPORT
|
||||
typedef void (*qdf_mem_release_cb) (void *ctxt, void *elem, void *elem_list);
|
||||
#endif
|
||||
|
||||
/* work queue(kernel thread)/DPC function callback */
|
||||
typedef void (*qdf_defer_fn_t)(void *);
|
||||
|
||||
|
@@ -2261,6 +2261,73 @@ void *qdf_aligned_malloc_fl(uint32_t *size,
|
||||
|
||||
qdf_export_symbol(qdf_aligned_malloc_fl);
|
||||
|
||||
#ifdef DP_UMAC_HW_RESET_SUPPORT
|
||||
/**
|
||||
* qdf_tx_desc_pool_free_bufs() - Go through elems and call the registered cb
|
||||
* @ctxt: Context to be passed to the cb
|
||||
* @pages: Multi page information storage
|
||||
* @elem_size: Each element size
|
||||
* @elem_count: Total number of elements should be allocated
|
||||
* @cacheable: Coherent memory or cacheable memory
|
||||
* @cb: Callback to free the elements
|
||||
* @elem_list: elem list for delayed free
|
||||
*
|
||||
* Return: 0 on Succscc, or Error code
|
||||
*/
|
||||
int qdf_tx_desc_pool_free_bufs(void *ctxt, struct qdf_mem_multi_page_t *pages,
|
||||
uint32_t elem_size, uint32_t elem_count,
|
||||
uint8_t cacheable, qdf_mem_release_cb cb,
|
||||
void *elem_list)
|
||||
{
|
||||
uint16_t i, i_int;
|
||||
void *page_info;
|
||||
void *elem;
|
||||
uint32_t num_link = 0;
|
||||
|
||||
for (i = 0; i < pages->num_pages; i++) {
|
||||
if (cacheable)
|
||||
page_info = pages->cacheable_pages[i];
|
||||
else
|
||||
page_info = pages->dma_pages[i].page_v_addr_start;
|
||||
|
||||
if (!page_info)
|
||||
return -ENOMEM;
|
||||
|
||||
elem = page_info;
|
||||
for (i_int = 0; i_int < pages->num_element_per_page; i_int++) {
|
||||
if (i_int == (pages->num_element_per_page - 1)) {
|
||||
cb(ctxt, elem, elem_list);
|
||||
|
||||
if ((i + 1) == pages->num_pages)
|
||||
break;
|
||||
if (cacheable)
|
||||
elem =
|
||||
(void *)(pages->cacheable_pages[i + 1]);
|
||||
else
|
||||
elem = (void *)(pages->
|
||||
dma_pages[i + 1].page_v_addr_start);
|
||||
|
||||
num_link++;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
cb(ctxt, elem, elem_list);
|
||||
elem = ((char *)elem + elem_size);
|
||||
num_link++;
|
||||
|
||||
/* Last link established exit */
|
||||
if (num_link == (elem_count - 1))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_tx_desc_pool_free_bufs);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* qdf_mem_multi_page_link() - Make links for multi page elements
|
||||
* @osdev: OS device handle pointer
|
||||
|
Reference in New Issue
Block a user