qcacmn: Add QDF Kmem cache support
Introduce QDF abstraction APIs for handling kmem cache create/destroy/alloc/free Change-Id: I46fa8e5e3891a3665fb230b737ef66ff65b5135e CRs-Fixed: 3274919
This commit is contained in:

committed by
Madan Koyyalamudi

parent
f9c54b61a3
commit
8983dd04f8
@@ -648,6 +648,59 @@ static inline void qdf_mempool_free(qdf_device_t osdev, qdf_mempool_t pool,
|
|||||||
__qdf_mempool_free(osdev, pool, buf);
|
__qdf_mempool_free(osdev, pool, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_kmem_cache_create() - OS abstraction for cache creation
|
||||||
|
*
|
||||||
|
* @cache_name: Cache name
|
||||||
|
* @size: Size of the object to be created
|
||||||
|
*
|
||||||
|
* Return: Cache address on successful creation, else NULL
|
||||||
|
*/
|
||||||
|
static inline qdf_kmem_cache_t
|
||||||
|
qdf_kmem_cache_create(const char *cache_name,
|
||||||
|
qdf_size_t size)
|
||||||
|
{
|
||||||
|
return __qdf_kmem_cache_create(cache_name, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_kmem_cache_destroy() - OS abstraction for cache destructin
|
||||||
|
*
|
||||||
|
* @cache: Cache pointer
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
static inline void qdf_kmem_cache_destroy(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
__qdf_kmem_cache_destroy(cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_kmem_cache_alloc() - Function to allocation object from a cache
|
||||||
|
*
|
||||||
|
* @cache: Cache address
|
||||||
|
*
|
||||||
|
* Return: Object from cache
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static inline void *qdf_kmem_cache_alloc(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
return __qdf_kmem_cache_alloc(cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_kmem_cache_free() - Function to free cache object
|
||||||
|
*
|
||||||
|
* @cache: Cache address
|
||||||
|
* @object: Object to be returned to cache
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
static inline void qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node)
|
||||||
|
{
|
||||||
|
__qdf_kmem_cache_free(cache, node);
|
||||||
|
}
|
||||||
|
|
||||||
void qdf_mem_dma_sync_single_for_device(qdf_device_t osdev,
|
void qdf_mem_dma_sync_single_for_device(qdf_device_t osdev,
|
||||||
qdf_dma_addr_t bus_addr,
|
qdf_dma_addr_t bus_addr,
|
||||||
qdf_size_t size,
|
qdf_size_t size,
|
||||||
|
@@ -102,6 +102,7 @@ typedef struct __qdf_mempool_ctxt {
|
|||||||
u_int32_t free_cnt;
|
u_int32_t free_cnt;
|
||||||
} __qdf_mempool_ctxt_t;
|
} __qdf_mempool_ctxt_t;
|
||||||
|
|
||||||
|
typedef struct kmem_cache *qdf_kmem_cache_t;
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#define __page_size ((size_t)PAGE_SIZE)
|
#define __page_size ((size_t)PAGE_SIZE)
|
||||||
@@ -210,6 +211,11 @@ int __qdf_mempool_init(qdf_device_t osdev, __qdf_mempool_t *pool, int pool_cnt,
|
|||||||
void __qdf_mempool_destroy(qdf_device_t osdev, __qdf_mempool_t pool);
|
void __qdf_mempool_destroy(qdf_device_t osdev, __qdf_mempool_t pool);
|
||||||
void *__qdf_mempool_alloc(qdf_device_t osdev, __qdf_mempool_t pool);
|
void *__qdf_mempool_alloc(qdf_device_t osdev, __qdf_mempool_t pool);
|
||||||
void __qdf_mempool_free(qdf_device_t osdev, __qdf_mempool_t pool, void *buf);
|
void __qdf_mempool_free(qdf_device_t osdev, __qdf_mempool_t pool, void *buf);
|
||||||
|
qdf_kmem_cache_t __qdf_kmem_cache_create(const char *cache_name,
|
||||||
|
qdf_size_t size);
|
||||||
|
void __qdf_kmem_cache_destroy(qdf_kmem_cache_t cache);
|
||||||
|
void* __qdf_kmem_cache_alloc(qdf_kmem_cache_t cache);
|
||||||
|
void __qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node);
|
||||||
#define QDF_RET_IP ((void *)_RET_IP_)
|
#define QDF_RET_IP ((void *)_RET_IP_)
|
||||||
|
|
||||||
#define __qdf_mempool_elem_size(_pool) ((_pool)->elem_size)
|
#define __qdf_mempool_elem_size(_pool) ((_pool)->elem_size)
|
||||||
@@ -606,6 +612,7 @@ __qdf_mem_set_dma_pa(qdf_device_t osdev,
|
|||||||
mem_info->pa = dma_pa;
|
mem_info->pa = dma_pa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __qdf_mem_alloc_consistent() - allocates consistent qdf memory
|
* __qdf_mem_alloc_consistent() - allocates consistent qdf memory
|
||||||
* @osdev: OS device handle
|
* @osdev: OS device handle
|
||||||
|
@@ -3068,3 +3068,74 @@ qdf_dma_addr_t qdf_mem_paddr_from_dmaaddr(qdf_device_t osdev,
|
|||||||
|
|
||||||
qdf_export_symbol(qdf_mem_paddr_from_dmaaddr);
|
qdf_export_symbol(qdf_mem_paddr_from_dmaaddr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef QCA_KMEM_CACHE_SUPPORT
|
||||||
|
qdf_kmem_cache_t
|
||||||
|
__qdf_kmem_cache_create(const char *cache_name,
|
||||||
|
qdf_size_t size)
|
||||||
|
{
|
||||||
|
struct kmem_cache *cache;
|
||||||
|
|
||||||
|
cache = kmem_cache_create(cache_name, size,
|
||||||
|
0, 0, NULL);
|
||||||
|
|
||||||
|
if (!cache)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(__qdf_kmem_cache_create);
|
||||||
|
|
||||||
|
void
|
||||||
|
__qdf_kmem_cache_destroy(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
kmem_cache_destroy(cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(__qdf_kmem_cache_destroy);
|
||||||
|
|
||||||
|
void*
|
||||||
|
__qdf_kmem_cache_alloc(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
int flags = GFP_KERNEL;
|
||||||
|
|
||||||
|
if (in_interrupt() || irqs_disabled() || in_atomic())
|
||||||
|
flags = GFP_ATOMIC;
|
||||||
|
|
||||||
|
return kmem_cache_alloc(cache, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(__qdf_kmem_cache_alloc);
|
||||||
|
|
||||||
|
void
|
||||||
|
__qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node)
|
||||||
|
|
||||||
|
{
|
||||||
|
kmem_cache_free(cache, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(__qdf_kmem_cache_free);
|
||||||
|
#else
|
||||||
|
qdf_kmem_cache_t
|
||||||
|
__qdf_kmem_cache_create(const char *cache_name,
|
||||||
|
qdf_size_t size)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
__qdf_kmem_cache_destroy(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
__qdf_kmem_cache_alloc(qdf_kmem_cache_t cache)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
__qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Reference in New Issue
Block a user