CNDP  22.08.0
mempool.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2019-2022 Intel Corporation.
3  * Copyright (c) 2016 6WIND S.A.
4  */
5 
6 #include <stdio.h> // for FILE, size_t
7 #include <stdlib.h>
8 #include <stdint.h> // for uint32_t, uint16_t
9 #include <errno.h>
10 #include <inttypes.h>
11 #include <sys/queue.h>
12 #include <sys/types.h> // for ssize_t
13 
14 struct mempool_cache;
15 
16 #ifndef _CNE_MEMPOOL_H_
17 #define _CNE_MEMPOOL_H_
18 
37 #include <cne.h> // for cne_id
38 #include <cne_common.h> // for CNDP_API
39 #include <cne_log.h>
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 typedef void mempool_t;
52 typedef void(mempool_obj_cb_t)(mempool_t *mp, void *opaque, void *obj, unsigned obj_idx);
53 typedef mempool_obj_cb_t mempool_obj_ctor_t; /* compat */
54 
61 typedef void(mempool_ctor_t)(mempool_t *, void *);
62 
92 typedef struct mempool_cfg {
93  uint32_t objcnt;
94  uint32_t objsz;
95  uint16_t cache_sz;
96  char *addr;
100  void *mp_init_arg;
101  void *obj_init_arg;
103 
119 CNDP_API mempool_t *mempool_create(struct mempool_cfg *cinfo);
120 
136 CNDP_API mempool_t *mempool_create_empty(struct mempool_cfg *cinfo);
137 
148 CNDP_API void mempool_destroy(mempool_t *mp);
149 
162 CNDP_API int mempool_populate(mempool_t *mp, char *vaddr, size_t len);
163 
179 CNDP_API uint32_t mempool_obj_iter(mempool_t *mp, mempool_obj_cb_t *obj_cb, void *obj_cb_arg);
180 
187 CNDP_API void mempool_dump(mempool_t *mp);
188 
198 
211 CNDP_API void mempool_generic_put(mempool_t *mp, void *const *obj_table, unsigned int n,
212  struct mempool_cache *cache);
213 
228 CNDP_API void mempool_put_bulk(mempool_t *mp, void *const *obj_table, unsigned int n);
229 
242 CNDP_API void mempool_put(mempool_t *mp, void *obj);
243 
264 CNDP_API int mempool_generic_get(mempool_t *mp, void **obj_table, unsigned int n,
265  struct mempool_cache *cache);
266 
284 CNDP_API int mempool_get_bulk(mempool_t *mp, void **obj_table, unsigned int n);
285 
301 CNDP_API int mempool_get(mempool_t *mp, void **obj_p);
302 
311 CNDP_API unsigned int mempool_avail_count(const mempool_t *mp);
312 
321 CNDP_API unsigned int mempool_in_use_count(const mempool_t *mp);
322 
332 CNDP_API int mempool_full(const mempool_t *mp);
333 
343 CNDP_API int mempool_empty(const mempool_t *mp);
344 
353 CNDP_API void *mempool_ring_addr(mempool_t *mp);
354 
363 CNDP_API void *mempool_buff_addr(mempool_t *mp);
364 
373 CNDP_API int mempool_objcnt(mempool_t *mp);
374 
383 CNDP_API int mempool_objsz(mempool_t *mp);
384 
393 CNDP_API int mempool_cache_sz(mempool_t *mp);
394 
405 CNDP_API int mempool_cache_len(mempool_t *mp, int idx);
406 
417 CNDP_API int mempool_obj_index(mempool_t *mp, void *obj);
418 
429 CNDP_API void *mempool_obj_at_index(mempool_t *mp, int idx);
430 
431 #ifdef __cplusplus
432 }
433 #endif
434 
435 #endif /* _CNE_MEMPOOL_H_ */
CNDP_API mempool_t * mempool_create_empty(struct mempool_cfg *cinfo)
void() mempool_obj_cb_t(mempool_t *mp, void *opaque, void *obj, unsigned obj_idx)
Definition: mempool.h:52
void() mempool_ctor_t(mempool_t *, void *)
Definition: mempool.h:61
CNDP_API int mempool_objcnt(mempool_t *mp)
CNDP_API int mempool_cache_len(mempool_t *mp, int idx)
CNDP_API void * mempool_obj_at_index(mempool_t *mp, int idx)
CNDP_API int mempool_empty(const mempool_t *mp)
CNDP_API void mempool_destroy(mempool_t *mp)
CNDP_API int mempool_full(const mempool_t *mp)
CNDP_API struct mempool_cache * mempool_default_cache(mempool_t *mp)
CNDP_API uint32_t mempool_obj_iter(mempool_t *mp, mempool_obj_cb_t *obj_cb, void *obj_cb_arg)
CNDP_API int mempool_obj_index(mempool_t *mp, void *obj)
void mempool_t
Definition: mempool.h:45
CNDP_API int mempool_populate(mempool_t *mp, char *vaddr, size_t len)
CNDP_API int mempool_get(mempool_t *mp, void **obj_p)
CNDP_API int mempool_generic_get(mempool_t *mp, void **obj_table, unsigned int n, struct mempool_cache *cache)
CNDP_API int mempool_objsz(mempool_t *mp)
CNDP_API void mempool_put_bulk(mempool_t *mp, void *const *obj_table, unsigned int n)
CNDP_API unsigned int mempool_in_use_count(const mempool_t *mp)
struct mempool_cfg mempool_cfg_t
CNDP_API mempool_t * mempool_create(struct mempool_cfg *cinfo)
CNDP_API int mempool_cache_sz(mempool_t *mp)
CNDP_API int mempool_get_bulk(mempool_t *mp, void **obj_table, unsigned int n)
CNDP_API void * mempool_buff_addr(mempool_t *mp)
CNDP_API void mempool_put(mempool_t *mp, void *obj)
CNDP_API void mempool_dump(mempool_t *mp)
CNDP_API void mempool_generic_put(mempool_t *mp, void *const *obj_table, unsigned int n, struct mempool_cache *cache)
CNDP_API void * mempool_ring_addr(mempool_t *mp)
CNDP_API unsigned int mempool_avail_count(const mempool_t *mp)
void * obj_init_arg
Definition: mempool.h:101
mempool_ctor_t * mp_init
Definition: mempool.h:98
void * mp_init_arg
Definition: mempool.h:100
uint16_t cache_sz
Definition: mempool.h:95
char * addr
Definition: mempool.h:96
mempool_obj_cb_t * obj_init
Definition: mempool.h:99
uint32_t objcnt
Definition: mempool.h:93
uint32_t objsz
Definition: mempool.h:94