VSF Documented
Data Structures | Macros | Typedefs | Functions | Variables
vsf_pool.h File Reference
#include "service/vsf_service_cfg.h"
#include "utilities/vsf_utilities.h"
#include "hal/arch/vsf_arch.h"
#include "utilities/ooc_class.h"

Go to the source code of this file.

Data Structures

struct  vsf_pool_info_t
 

Macros

#define __PLOOC_CLASS_USE_STRICT_TEMPLATE__
 
#define VSF_POOL_CFG_STATISTIC_MODE   ENABLED
 
#define VSF_POOL_CFG_FEED_ON_HEAP   ENABLED
 
#define VSF_POOL_CFG_SUPPORT_USER_OBJECT   ENABLED
 
#define __vsf_pool(__name)   __name##_pool_t
 
#define __vsf_pool_item(__name)   __name##_pool_item_t
 
#define __declare_vsf_pool(__name)
 
#define ____define_vsf_pool_tag(__name)
 
#define ____implement_vsf_pool_tag(__name)
 
#define __define_vsf_pool_tag(__name)   ____define_vsf_pool_tag(__name)
 
#define __implement_vsf_pool_tag(__name)   ____implement_vsf_pool_tag(__name)
 
#define __define_vsf_pool(__name, __type)
 
#define __implement_vsf_pool(__name, __type)
 
pool normal access
#define vsf_pool(__name)   __vsf_pool(__name)
 
#define vsf_pool_item(__name)   __vsf_pool_item(__name)
 
#define declare_vsf_pool(__name)
 
#define dcl_vsf_pool(__name)
 
#define define_vsf_pool(__name, __type)
 
#define def_vsf_pool(__name, __type)
 
#define end_def_pool(__name)
 
#define end_define_pool(__name)
 
#define implement_vsf_pool(__name, __type)
 
#define imp_vsf_pool(__name, __type)
 
#define VSF_POOL_INIT(__NAME, __VSF_POOL, __SIZE)
 
#define VSF_POOL_PREPARE(__NAME, __VSF_POOL)
 
#define END_VSF_POOL_PREPARE(__NAME)
 
#define VSF_POOL_INIT_EX( __NAME, __VSF_POOL, __SIZE, __ALIGN)
 
#define VSF_POOL_PREPARE_EX( __NAME, __VSF_POOL, __ALIGN)
 
#define VSF_POOL_ADD_BUFFER(__NAME, __VSF_POOL, __BUFFER, __SIZE)
 
#define VSF_POOL_ADD_BUFFER_EX(__NAME, __VSF_POOL, __BUFFER, __SIZE, __HANDLER)
 
#define VSF_POOL_FREE(__NAME, __VSF_POOL, __ITEM)
 
#define VSF_POOL_ALLOC(__NAME, __VSF_POOL)
 
#define VSF_POOL_ITEM_COUNT(__NAME, __VSF_POOL)
 
#define VSF_POOL_GET_REGION(__NAME, __VSF_POOL)
 
#define VSF_POOL_GET_TAG(__NAME, __VSF_POOL)
 
#define VSF_POOL_SET_TAG(__NAME, __VSF_POOL, __TARGET)
 

Typedefs

typedef struct vsf_pool_info_t vsf_pool_info_t
 

Functions

 dcl_class (vsf_pool_t) typedef void vsf_pool_item_init_evt_handler_t(uintptr_t target_ptr
 
void vsf_pool_init (vsf_pool_t *obj_ptr, uint32_t item_size, uint_fast16_t align, vsf_pool_cfg_t *cfg_ptr)
 initialise target pool !
 
bool vsf_pool_add_buffer_ex (vsf_pool_t *obj_ptr, uintptr_t buffer_ptr, uint32_t buffer_size, uint32_t item_size, vsf_pool_item_init_evt_handler_t *item_init_fn)
 add memory to pool !
 
bool vsf_pool_add_buffer (vsf_pool_t *obj_ptr, uintptr_t buffer_ptr, uint32_t buffer_size, uint32_t item_size)
 add memory to pool !
 
uintptr_t vsf_pool_alloc (vsf_pool_t *obj_ptr)
 try to fetch a memory block from the target pool !
 
void vsf_pool_free (vsf_pool_t *obj_ptr, uintptr_t item_ptr)
 return a memory block to the target pool !
 
uint_fast16_t vsf_pool_get_count (vsf_pool_t *obj_ptr)
 get the number of memory blocks available in the target pool !
 
uintptr_t vsf_pool_get_tag (vsf_pool_t *obj_ptr)
 get the address of the object which is attached to the pool !
 
uintptr_t vsf_pool_set_tag (vsf_pool_t *obj_ptr, uintptr_t target_ptr)
 set the address of the object which is attached to the pool !
 
vsf_protect_region_tvsf_pool_get_region (vsf_pool_t *obj_ptr)
 get the address of the code region used by this pool !
 

Variables

uintptr_t item_ptr
 
 vsf_pool_cfg_t
 

vsf pool interface

uintptr_t uint_fast32_t item_size
 
uint32_t uint_fast16_t align
 
uint32_t uint_fast16_t vsf_pool_cfg_tcfg_ptr
 
struct { 
 
   bool(*   AddEx )(vsf_pool_t *obj_ptr,
       uintptr_t buffer_ptr,
       uint32_t buffer_size,
       uint32_t item_size,
       vsf_pool_item_init_evt_handler_t
      *item_init_fn) 
 
   bool(*   Add )(vsf_pool_t *obj_ptr,
       uintptr_t buffer_ptr,
       uint32_t buffer_size,
       uint32_t item_size
 
Buffer 
 
uintptr_t(* Allocate )(vsf_pool_t *obj_ptr)
 
void(* Free )(vsf_pool_t *obj_ptr, uintptr_t item_ptr)
 
uint_fast16_t(* Count )(vsf_pool_t *obj_ptr)
 
struct { 
 
   uintptr_t(*   Get )(vsf_pool_t *obj_ptr) 
 
   uintptr_t(*   Set )(vsf_pool_t *obj_ptr,
       uintptr_t target_ptr) 
 
Tag 
 
 dcl_interface (i_pool_t) def_interface(i_pool_t) void(*Init)(vsf_pool_t *obj_ptr
 

Macro Definition Documentation

◆ __PLOOC_CLASS_USE_STRICT_TEMPLATE__

#define __PLOOC_CLASS_USE_STRICT_TEMPLATE__

\NOTE: Make sure #include "utilities/ooc_class.h" is close to the class ! definition and there is NO ANY OTHER module-interface-header file ! included in this file

◆ VSF_POOL_CFG_STATISTIC_MODE

#define VSF_POOL_CFG_STATISTIC_MODE   ENABLED
Note
Enable statistic mode by default

◆ VSF_POOL_CFG_FEED_ON_HEAP

#define VSF_POOL_CFG_FEED_ON_HEAP   ENABLED

◆ VSF_POOL_CFG_SUPPORT_USER_OBJECT

#define VSF_POOL_CFG_SUPPORT_USER_OBJECT   ENABLED

◆ __vsf_pool

#define __vsf_pool (   __name)    __name##_pool_t

◆ __vsf_pool_item

#define __vsf_pool_item (   __name)    __name##_pool_item_t

◆ __declare_vsf_pool

#define __declare_vsf_pool (   __name)
Value:
typedef union vsf_pool_item(__name) vsf_pool_item(__name); \
dcl_class(vsf_pool(__name))
#define __name
Definition hci_transport_aic8800.c:552
#define vsf_pool(__name)
Definition vsf_pool.h:258
#define vsf_pool_item(__name)
Definition vsf_pool.h:259

◆ ____define_vsf_pool_tag

#define ____define_vsf_pool_tag (   __name)
Value:
VSF_CAL_SECTION(".text." #__name "_pool_get_tag") \
extern uintptr_t __name##_pool_get_tag(vsf_pool(__name) *); \
VSF_CAL_SECTION(".text." #__name "_pool_set_tag") \
extern uintptr_t __name##_pool_set_tag(vsf_pool(__name) *, uintptr_t);
#define VSF_CAL_SECTION(__SEC)
Definition __compiler.h:181
uint32_t uintptr_t
Definition stdint.h:38

◆ ____implement_vsf_pool_tag

#define ____implement_vsf_pool_tag (   __name)
Value:
VSF_CAL_WEAK(__name##_pool_get_tag) \
VSF_CAL_SECTION(".text." #__name "_pool_get_tag") \
uintptr_t __name##_pool_get_tag(vsf_pool(__name) *this_ptr) \
{ \
return vsf_pool_get_tag((vsf_pool_t *)this_ptr); \
} \
VSF_CAL_WEAK(__name##_pool_set_tag) \
VSF_CAL_SECTION(".text." #__name "_pool_set_tag") \
uintptr_t __name##_pool_set_tag( vsf_pool(__name) *this_ptr, \
uintptr_t target_ptr) \
{ \
return vsf_pool_set_tag((vsf_pool_t *)this_ptr, target_ptr); \
}
uintptr_t vsf_pool_set_tag(vsf_pool_t *obj_ptr, uintptr_t target_ptr)
set the address of the object which is attached to the pool !
Definition vsf_pool.c:398
uintptr_t vsf_pool_get_tag(vsf_pool_t *obj_ptr)
get the address of the object which is attached to the pool !
Definition vsf_pool.c:385

◆ __define_vsf_pool_tag

#define __define_vsf_pool_tag (   __name)    ____define_vsf_pool_tag(__name)

◆ __implement_vsf_pool_tag

#define __implement_vsf_pool_tag (   __name)    ____implement_vsf_pool_tag(__name)

◆ __define_vsf_pool

#define __define_vsf_pool (   __name,
  __type 
)
Value:
union vsf_pool_item(__name) { \
implement(vsf_slist_t) \
__type __item; \
}; \
def_class(vsf_pool(__name), \
public_member( \
implement(vsf_pool_t) \
) \
) \
end_def_class(vsf_pool(__name)) \
extern void __name##_pool_init(vsf_pool(__name) *, vsf_pool_cfg_t *); \
VSF_CAL_SECTION(".text." #__name "_pool_init_ex") \
extern void __name##_pool_init_ex( \
extern bool __name##_pool_add_buffer( \
extern __type *__name##_pool_alloc(vsf_pool(__name) *); \
extern void __name##_pool_free(vsf_pool(__name) *, __type *); \
VSF_CAL_SECTION(".text." #__name "_pool_add_buffer_ex") \
extern bool __name##_pool_add_buffer_ex( \
vsf_pool(__name) *this_ptr, \
void *buffer_ptr, \
uint_fast32_t u32_size, \
vsf_pool_item_init_evt_handler_t *handler_fn); \
VSF_CAL_SECTION(".text." #__name "_get_pool_item_count") \
extern uint_fast32_t __name##_get_pool_item_count(vsf_pool(__name) *); \
VSF_CAL_SECTION(".text." #__name "_pool_get_region") \
extern vsf_protect_region_t *__name##_pool_get_region(vsf_pool(__name) *); \
__define_vsf_pool_tag(__name)
#define __type
Definition hci_transport_aic8800.c:553
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned short uint_fast16_t
Definition stdint.h:25
Definition vsf_arch_abstraction.h:54
Definition vsf_list.h:872
vsf_pool_cfg_t
Definition vsf_pool.h:539

◆ __implement_vsf_pool

#define __implement_vsf_pool (   __name,
  __type 
)

◆ vsf_pool

#define vsf_pool (   __name)    __vsf_pool(__name)

◆ vsf_pool_item

#define vsf_pool_item (   __name)    __vsf_pool_item(__name)

◆ declare_vsf_pool

#define declare_vsf_pool (   __name)
Value:
/* the name of the pool */ \
__declare_vsf_pool(__name)

◆ dcl_vsf_pool

#define dcl_vsf_pool (   __name)
Value:
/* the name of the pool */ \
declare_vsf_pool(__name)

◆ define_vsf_pool

#define define_vsf_pool (   __name,
  __type 
)
Value:
/* the type of the unit */ \
__define_vsf_pool(__name, __type)

◆ def_vsf_pool

#define def_vsf_pool (   __name,
  __type 
)
Value:
/* the type of the unit */ \
define_vsf_pool(__name, __type)

◆ end_def_pool

#define end_def_pool (   __name)

◆ end_define_pool

#define end_define_pool (   __name)

◆ implement_vsf_pool

#define implement_vsf_pool (   __name,
  __type 
)
Value:
/* the type of the unit */ \
__implement_vsf_pool(__name, __type)

◆ imp_vsf_pool

#define imp_vsf_pool (   __name,
  __type 
)
Value:
/* the type of the unit */ \
implement_vsf_pool(__name, __type)

◆ VSF_POOL_INIT

#define VSF_POOL_INIT (   __NAME,
  __VSF_POOL,
  __SIZE 
)
Value:
/* the total size of the pool */ \
/* the address of the code region obj_ptr */\
do { \
vsf_pool_cfg_t cfg = { \
.pool_name_str = (const uint8_t *)#__NAME, \
}; \
__NAME##_pool_init((__VSF_POOL), &cfg); \
static VSF_CAL_NO_INIT vsf_pool_item(__NAME) __buffer[__SIZE]; \
vsf_pool_add_buffer((vsf_pool_t *)(__VSF_POOL), \
(uintptr_t)__buffer, \
sizeof(__buffer), \
sizeof(vsf_pool_item(__NAME))); \
} while(0)
unsigned char uint8_t
Definition stdint.h:5

◆ VSF_POOL_PREPARE

#define VSF_POOL_PREPARE (   __NAME,
  __VSF_POOL 
)
Value:
/* the address of the pool */ \
/* the address of the code region obj_ptr */\
do { \
vsf_pool(__name) *this_ptr = (__VSF_POOL); \
vsf_pool_cfg_t cfg = { \
(const uint8_t *)#__NAME,

◆ END_VSF_POOL_PREPARE

#define END_VSF_POOL_PREPARE (   __NAME)
Value:
}; \
__NAME##_pool_init((this_ptr), &cfg); \
} while(0);

◆ VSF_POOL_INIT_EX

#define VSF_POOL_INIT_EX (   __NAME,
  __VSF_POOL,
  __SIZE,
  __ALIGN 
)
Value:
/* the item alignment */ \
/* the address of the code region obj_ptr */\
do { \
vsf_pool_cfg_t cfg = { \
.pool_name_str = (const uint8_t *)#__NAME, \
}; \
__NAME##_pool_init_ex((__VSF_POOL), (__ALIGN), &cfg); \
static VSF_CAL_NO_INIT vsf_pool_item(__NAME) \
__buffer[__SIZE] VSF_CAL_ALIGN((__ALIGN)); \
vsf_pool_add_buffer((vsf_pool_t *)(__VSF_POOL), \
__buffer, \
sizeof(__buffer), \
sizeof(vsf_pool_item(__NAME))); \
} while(0)
#define VSF_CAL_ALIGN(__N)
Definition __compiler.h:179

◆ VSF_POOL_PREPARE_EX

#define VSF_POOL_PREPARE_EX (   __NAME,
  __VSF_POOL,
  __ALIGN 
)
Value:
/* the item alignment */ \
/* the address of the code region obj_ptr */\
do { \
vsf_pool_cfg_t cfg = { \
.pool_name_str = (const uint8_t *)#__NAME, \
}; \
__NAME##_pool_init_ex((__VSF_POOL), (__ALIGN), &cfg); \
} while(0)

◆ VSF_POOL_ADD_BUFFER

#define VSF_POOL_ADD_BUFFER (   __NAME,
  __VSF_POOL,
  __BUFFER,
  __SIZE 
)
Value:
/* the size of the buffer */ \
__NAME##_pool_add_buffer( (__VSF_POOL), \
(uintptr_t)(__BUFFER), \
(__SIZE))

◆ VSF_POOL_ADD_BUFFER_EX

#define VSF_POOL_ADD_BUFFER_EX (   __NAME,
  __VSF_POOL,
  __BUFFER,
  __SIZE,
  __HANDLER 
)
Value:
/* the block initialisation routine */ \
__NAME##_pool_add_buffer_ex((__VSF_POOL), \
(uintptr_t)(__BUFFER), \
(__SIZE), \
(__HANDLER))

◆ VSF_POOL_FREE

#define VSF_POOL_FREE (   __NAME,
  __VSF_POOL,
  __ITEM 
)
Value:
/* the address of the memory block */ \
/* to be released */ \
__NAME##_pool_free((__VSF_POOL), (__ITEM))

◆ VSF_POOL_ALLOC

#define VSF_POOL_ALLOC (   __NAME,
  __VSF_POOL 
)
Value:
/* the address of the pool */ \
__NAME##_pool_alloc((__VSF_POOL))

◆ VSF_POOL_ITEM_COUNT

#define VSF_POOL_ITEM_COUNT (   __NAME,
  __VSF_POOL 
)
Value:
/* the address of the pool */ \
__NAME##_get_pool_item_count((__VSF_POOL))

◆ VSF_POOL_GET_REGION

#define VSF_POOL_GET_REGION (   __NAME,
  __VSF_POOL 
)
Value:
/* the address of the pool */ \
__NAME##_pool_get_region((__VSF_POOL))

◆ VSF_POOL_GET_TAG

#define VSF_POOL_GET_TAG (   __NAME,
  __VSF_POOL 
)
Value:
/* the address of the pool */ \
__NAME##_pool_get_tag((__VSF_POOL))

◆ VSF_POOL_SET_TAG

#define VSF_POOL_SET_TAG (   __NAME,
  __VSF_POOL,
  __TARGET 
)
Value:
/* the address of the target */ \
__NAME##_pool_set_tag((__VSF_POOL), (__TARGET))

Typedef Documentation

◆ vsf_pool_info_t

Function Documentation

◆ dcl_class()

dcl_class ( vsf_pool_t  )

◆ dcl_interface()

dcl_interface ( i_pool_t  )

◆ vsf_pool_init()

void vsf_pool_init ( vsf_pool_t *  obj_ptr,
uint32_t  item_size,
uint_fast16_t  align,
vsf_pool_cfg_t cfg_ptr 
)
extern

initialise target pool !

Parameters
obj_ptraddress of the target pool !
item_sizememory item size !
alignItem Alignment !
cfg_ptrconfigurations !
Returns
none
Parameters
this_ptraddress of the target pool !
cfg_ptrconfigurations !
Returns
none

add pool to the pool list

◆ vsf_pool_add_buffer_ex()

bool vsf_pool_add_buffer_ex ( vsf_pool_t *  obj_ptr,
uintptr_t  buffer_ptr,
uint32_t  buffer_size,
uint32_t  item_size,
vsf_pool_item_init_evt_handler_t *  item_init_fn 
)
extern

add memory to pool !

Parameters
obj_ptraddress of the target pool !
buffer_ptraddress of the target memory !
buffer_sizethe size of the target memory !
item_sizememory block size of the pool !
item_init_fnblock initialisation handler !
Return values
falsethe buffer size is too small or invalid parameters !
truebuffer is added
Parameters
this_ptraddress of the target pool !
buffer_ptraddress of the target memory !
buffer_sizethe size of the target memory !
item_sizememory block size of the pool !
item_init_fnblock initialisation handler !
Return values
falsethe buffer size is too small or invalid parameters !
truebuffer is added

◆ vsf_pool_add_buffer()

bool vsf_pool_add_buffer ( vsf_pool_t *  this_ptr,
uintptr_t  buffer_ptr,
uint32_t  buffer_size,
uint32_t  item_size 
)
extern

add memory to pool !

Parameters
obj_ptraddress of the target pool !
buffer_ptraddress of the target memory !
buffer_sizethe size of the target memory !
item_sizememory block size of the pool !
Return values
falsethe buffer size is too small or invalid parameters !
truebuffer is added
Parameters
this_ptraddress of the target pool !
buffer_ptraddress of the target memory !
buffer_sizethe size of the target memory !
item_sizememory block size of the pool !
Return values
falsethe buffer size is too small or invalid parameters !
truebuffer is added

◆ vsf_pool_alloc()

uintptr_t vsf_pool_alloc ( vsf_pool_t *  obj_ptr)
extern

try to fetch a memory block from the target pool !

Parameters
obj_ptraddress of the target pool !
Return values
NULLthe pool is empty !
!NULLaddress of the allocated memory block
Parameters
this_ptraddress of the target pool !
Return values
NULLthe pool is empty !
!NULLaddress of the allocated memory block

feed on heap

◆ vsf_pool_free()

void vsf_pool_free ( vsf_pool_t *  obj_ptr,
uintptr_t  pItem 
)
extern

return a memory block to the target pool !

Parameters
obj_ptraddress of the target pool !
item_ptrtarget memory block !
Returns
none
Parameters
this_ptraddress of the target pool !
pItemtarget memory block !
Returns
none

◆ vsf_pool_get_count()

uint_fast16_t vsf_pool_get_count ( vsf_pool_t *  obj_ptr)
extern

get the number of memory blocks available in the target pool !

Parameters
obj_ptraddress of the target pool !
Returns
the number of memory blocks
Parameters
this_ptraddress of the target pool !
Returns
the number of memory blocks

◆ vsf_pool_get_tag()

uintptr_t vsf_pool_get_tag ( vsf_pool_t *  obj_ptr)
extern

get the address of the object which is attached to the pool !

Parameters
obj_ptraddress of the target pool !
Returns
the address of the object
Parameters
this_ptraddress of the target pool !
Returns
the address of the object

◆ vsf_pool_set_tag()

uintptr_t vsf_pool_set_tag ( vsf_pool_t *  obj_ptr,
uintptr_t  target_ptr 
)
extern

set the address of the object which is attached to the pool !

Parameters
obj_ptraddress of the target pool !
Returns
the address of the object
Parameters
this_ptraddress of the target pool !
Returns
the address of the object

◆ vsf_pool_get_region()

vsf_protect_region_t * vsf_pool_get_region ( vsf_pool_t *  obj_ptr)
extern

get the address of the code region used by this pool !

Parameters
obj_ptraddress of the target pool !
Returns
the address of the code region
Parameters
this_ptraddress of the target pool !
Returns
the address of the code region

Variable Documentation

◆ item_ptr

uintptr_t item_ptr

◆ item_size

uint32_t item_size

◆ vsf_pool_cfg_t

typedef struct vsf_pool_cfg_t

◆ align

◆ cfg_ptr

◆ AddEx

bool(* AddEx) (vsf_pool_t *obj_ptr, uintptr_t buffer_ptr, uint32_t buffer_size, uint32_t item_size, vsf_pool_item_init_evt_handler_t *item_init_fn) ( vsf_pool_t *  obj_ptr,
uintptr_t  buffer_ptr,
uint32_t  buffer_size,
uint32_t  item_size,
vsf_pool_item_init_evt_handler_t *  item_init_fn 
)

◆ Add

bool(* Add) (vsf_pool_t *obj_ptr, uintptr_t buffer_ptr, uint32_t buffer_size, uint32_t item_size) ( vsf_pool_t *  obj_ptr,
uintptr_t  buffer_ptr,
uint32_t  buffer_size,
uint32_t  item_size 
)

◆ [struct]

struct { ... } Buffer

◆ Allocate

uintptr_t(* Allocate) (vsf_pool_t *obj_ptr) ( vsf_pool_t *  obj_ptr)

◆ Free

void(* Free) (vsf_pool_t *obj_ptr, uintptr_t item_ptr) ( vsf_pool_t *  obj_ptr,
uintptr_t  item_ptr 
)

◆ Count

uint_fast16_t(* Count) (vsf_pool_t *obj_ptr) ( vsf_pool_t *  obj_ptr)

◆ Get

uintptr_t(* Get) (vsf_pool_t *obj_ptr) ( vsf_pool_t *  obj_ptr)

◆ Set

uintptr_t(* Set) (vsf_pool_t *obj_ptr, uintptr_t target_ptr) ( vsf_pool_t *  obj_ptr,
uintptr_t  target_ptr 
)

◆ [struct]

struct { ... } Tag