| /******************************************************************************* | |
| * Copyright (C) 2007, ZTE Corporation. | |
| * | |
| * File Name:hal_qalloc.h | |
| * File Mark: | |
| * Description: | |
| * Others: | |
| * Version: 1.0 | |
| * Author: geanfeng | |
| * Date: 2013-09-25 | |
| * History 1: | |
| * Date: | |
| * Version: | |
| * Author: | |
| * Modification: | |
| * History 2: | |
| ********************************************************************************/ | |
| #ifndef _HAL_QALLOC_H | |
| #define _HAL_QALLOC_H | |
| /**************************************************************************** | |
| * Include files | |
| ****************************************************************************/ | |
| #include "drvs_general.h" | |
| #include "drvs_list.h" | |
| /**************************************************************************** | |
| * Macros | |
| ****************************************************************************/ | |
| /**************************************************************************** | |
| * Types | |
| ****************************************************************************/ | |
| /* | |
| * General purpose special memory pool descriptor. | |
| */ | |
| typedef struct _T_Quick_Pool { | |
| struct list_head node; /* node*/ | |
| struct list_head chunks; /* list of chunks in this pool */ | |
| UINT32 count; | |
| UINT8* name; | |
| }T_Quick_Pool; | |
| /**************************************************************************** | |
| * Constants | |
| ****************************************************************************/ | |
| /**************************************************************************** | |
| * Global Variables | |
| ****************************************************************************/ | |
| /**************************************************************************** | |
| * Function Prototypes | |
| ****************************************************************************/ | |
| /** | |
| * QPool_Create - create a new special memory pool | |
| * | |
| * Create a new special memory pool that can be used to manage special purpose | |
| * memory not managed by the regular kmalloc/kfree interface. | |
| */ | |
| T_Quick_Pool *QPool_Create(UINT8* name); | |
| /** | |
| * QPool_AddVirt - add a new chunk of special memory to the pool | |
| * @pool: pool to add new memory chunk to | |
| * @virt: virtual starting address of memory chunk to add to pool | |
| * @phys: physical starting address of memory chunk to add to pool | |
| * @size: size in bytes of the memory chunk to add to pool | |
| * | |
| * Add a new chunk of special memory to the specified pool. | |
| * | |
| * Returns 0 on success or a -ve errno on failure. | |
| */ | |
| SINT32 QPool_AddVirt(T_Quick_Pool *pool,UINT32 virt, UINT32 size, | |
| UINT32 page_size, UINT32 max_alloc_order); | |
| /** | |
| * QPool_Alloc - allocate special memory from the pool | |
| * @pool: pool to allocate from | |
| * @size: number of bytes to allocate from the pool | |
| * @debug_info: some debug info | |
| * | |
| * Allocate the requested number of bytes from the specified pool. | |
| * Uses a first-fit algorithm. | |
| */ | |
| UINT32 QPool_Alloc(T_Quick_Pool *pool, UINT32 size, VOID *debug_info); | |
| /** | |
| * QPool_Free - free allocated special memory back to the pool | |
| * @pool: pool to free to | |
| * @addr: starting address of memory to free back to pool | |
| * @size: size in bytes of memory to free | |
| * | |
| */ | |
| VOID QPool_Free(T_Quick_Pool *pool, UINT32 addr, VOID *debug_info); | |
| /** | |
| * QPool_Destroy - destroy a special memory pool | |
| * | |
| * Destroy the specified special memory pool. Verifies that there are no | |
| * outstanding allocations. | |
| */ | |
| VOID QPool_Destroy(T_Quick_Pool *pool); | |
| /** | |
| * gen_pool_avail - get available free space of the pool | |
| * @pool: pool to get available free space | |
| * | |
| * Return available free space of the specified pool. | |
| */ | |
| UINT32 QPool_Avail(T_Quick_Pool *pool); | |
| /** | |
| * QPool_Size - get size in bytes of memory managed by the pool | |
| * @pool: pool to get size | |
| * | |
| * Return size in bytes of memory managed by the pool. | |
| */ | |
| UINT32 QPool_Size(T_Quick_Pool *pool); | |
| /** | |
| * QPool_Print - print the pool debug info. | |
| * @pool: pool to print | |
| * | |
| */ | |
| VOID QPool_Print(T_Quick_Pool *pool); | |
| /** | |
| * QPool_PrintAll - print the all pool debug info. | |
| * | |
| */ | |
| VOID QPool_PrintAll(VOID); | |
| #endif/*_HAL_TCLK_REG_H*/ | |