1*a2eb5b55SJens Wiklander /* SPDX-License-Identifier: BSD-2-Clause */ 2*a2eb5b55SJens Wiklander /* 3*a2eb5b55SJens Wiklander * Copyright (c) 2018, Linaro Limited 4*a2eb5b55SJens Wiklander */ 5*a2eb5b55SJens Wiklander 6*a2eb5b55SJens Wiklander #ifndef __MEMPOOL_H 7*a2eb5b55SJens Wiklander #define __MEMPOOL_H 8*a2eb5b55SJens Wiklander 9*a2eb5b55SJens Wiklander #include <types_ext.h> 10*a2eb5b55SJens Wiklander 11*a2eb5b55SJens Wiklander /* 12*a2eb5b55SJens Wiklander * struct mempool_item - internal struct to keep track of an item 13*a2eb5b55SJens Wiklander */ 14*a2eb5b55SJens Wiklander struct mempool_item { 15*a2eb5b55SJens Wiklander size_t size; 16*a2eb5b55SJens Wiklander ssize_t prev_item_offset; 17*a2eb5b55SJens Wiklander ssize_t next_item_offset; 18*a2eb5b55SJens Wiklander }; 19*a2eb5b55SJens Wiklander 20*a2eb5b55SJens Wiklander struct mempool; 21*a2eb5b55SJens Wiklander 22*a2eb5b55SJens Wiklander /* 23*a2eb5b55SJens Wiklander * mempool_alloc_pool() - Allocate a new memory pool 24*a2eb5b55SJens Wiklander * @data: a block of memory to carve out items from 25*a2eb5b55SJens Wiklander * @size: size fo the block of memory 26*a2eb5b55SJens Wiklander * @release_mem: function to call when the pool has been emptied, 27*a2eb5b55SJens Wiklander * ignored if NULL. 28*a2eb5b55SJens Wiklander * returns a pointer to a valid pool on success or NULL on failure. 29*a2eb5b55SJens Wiklander */ 30*a2eb5b55SJens Wiklander struct mempool *mempool_alloc_pool(void *data, size_t size, 31*a2eb5b55SJens Wiklander void (*release_mem)(void *ptr, size_t size)); 32*a2eb5b55SJens Wiklander 33*a2eb5b55SJens Wiklander /* 34*a2eb5b55SJens Wiklander * mempool_alloc() - Allocate an item from a memory pool 35*a2eb5b55SJens Wiklander * @pool: A memory pool created with mempool_alloc_pool() 36*a2eb5b55SJens Wiklander * @size: Size in bytes of the item to allocate 37*a2eb5b55SJens Wiklander * return a valid pointer on success or NULL on failure. 38*a2eb5b55SJens Wiklander */ 39*a2eb5b55SJens Wiklander void *mempool_alloc(struct mempool *pool, size_t size); 40*a2eb5b55SJens Wiklander 41*a2eb5b55SJens Wiklander /* 42*a2eb5b55SJens Wiklander * mempool_free() - Frees a previously allocated item 43*a2eb5b55SJens Wiklander * @pool: A memory pool create with mempool_alloc_pool() 44*a2eb5b55SJens Wiklander * @ptr: A pointer to a previously allocated item 45*a2eb5b55SJens Wiklander */ 46*a2eb5b55SJens Wiklander void mempool_free(struct mempool *pool, void *ptr); 47*a2eb5b55SJens Wiklander 48*a2eb5b55SJens Wiklander #endif /*__MEMPOOL_H*/ 49