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_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,
|
||||
qdf_dma_addr_t bus_addr,
|
||||
qdf_size_t size,
|
||||
|
@@ -102,6 +102,7 @@ typedef struct __qdf_mempool_ctxt {
|
||||
u_int32_t free_cnt;
|
||||
} __qdf_mempool_ctxt_t;
|
||||
|
||||
typedef struct kmem_cache *qdf_kmem_cache_t;
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#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_alloc(qdf_device_t osdev, __qdf_mempool_t pool);
|
||||
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_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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* __qdf_mem_alloc_consistent() - allocates consistent qdf memory
|
||||
* @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);
|
||||
#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