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);
|
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
|
* qdf_mem_shared_mem_free() - Free shared memory
|
||||||
* @osdev: parent device instance
|
* @osdev: parent device instance
|
||||||
|
@@ -281,6 +281,10 @@ enum qdf_driver_type {
|
|||||||
QDF_DRIVER_TYPE_INVALID = 0x7FFFFFFF
|
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 */
|
/* work queue(kernel thread)/DPC function callback */
|
||||||
typedef void (*qdf_defer_fn_t)(void *);
|
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);
|
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
|
* qdf_mem_multi_page_link() - Make links for multi page elements
|
||||||
* @osdev: OS device handle pointer
|
* @osdev: OS device handle pointer
|
||||||
|
Reference in New Issue
Block a user