| // SPDX-License-Identifier: GPL-2.0+ |
| |
| #ifndef __MEMORY_POOL_H |
| #define __MEMORY_POOL_H |
| |
| struct memory_pool; |
| |
| /** |
| * Creates a new memory pool object. |
| * |
| * @pool_start - starting address of an existing contiguous memory range. |
| * @pool_size - size in bytes of the contiguous memory range. |
| * @block_size - fixed size in bytes of each allocation unit. |
| * |
| * Returns a pointer to the new memory pool or NULL on error. |
| */ |
| struct memory_pool *memory_pool_create(uintptr_t pool_start, size_t pool_size, |
| size_t block_size); |
| |
| /** |
| * Destroyes a memory pool. |
| * |
| * Does nothing if @pool == NULL. |
| */ |
| void memory_pool_destroy(struct memory_pool *pool); |
| |
| /** |
| * Allocates a buffer from the memory pool. |
| * |
| * @pool - pointer to an initialized pool. |
| * @align - desired buffer address alignment, zero or a power of 2. |
| * @bytes - desired buffer size in bytes. |
| * |
| * Returns NULL on error else buffer address. |
| */ |
| void *memory_pool_allocate(struct memory_pool *pool, size_t align, |
| size_t bytes); |
| |
| /** |
| * Returns an allocated buffer to the memory pool. |
| * |
| * @pool - pointer to an initialized memory pool. |
| * @ptr - pointer to an previously allocated buffer. |
| */ |
| void memory_pool_deallocate(struct memory_pool *pool, void *ptr); |
| |
| #endif /* __MEMORY_POOL_H */ |