diff options
author | Michael Brown | 2006-04-25 05:30:46 +0200 |
---|---|---|
committer | Michael Brown | 2006-04-25 05:30:46 +0200 |
commit | b601a7d355a4c24563f4f2db40ba52ae183ce493 (patch) | |
tree | 84525e5d35329776f8a4c90563ae4e435c001d8f /src/include/malloc.h | |
parent | Add __constant_flsl(), because it's useful for finding out the next (diff) | |
download | ipxe-b601a7d355a4c24563f4f2db40ba52ae183ce493.tar.gz ipxe-b601a7d355a4c24563f4f2db40ba52ae183ce493.tar.xz ipxe-b601a7d355a4c24563f4f2db40ba52ae183ce493.zip |
Updated memory allocator to improve support for unaligned or partially
aligned blocks.
Moved header to include/malloc.h, since we now also provide the
POSIX-like malloc()/free() pair.
Not yet tested.
Diffstat (limited to 'src/include/malloc.h')
-rw-r--r-- | src/include/malloc.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/include/malloc.h b/src/include/malloc.h new file mode 100644 index 00000000..3442baf7 --- /dev/null +++ b/src/include/malloc.h @@ -0,0 +1,66 @@ +#ifndef _MALLOC_H +#define _MALLOC_H + +#include <stdint.h> + +/** @file + * + * Dynamic memory allocation + * + */ + +extern void * alloc_memblock ( size_t size, size_t align ); +extern void free_memblock ( void *ptr, size_t size ); +extern void * malloc ( size_t size ); +extern void free ( void *ptr ); +extern void mpopulate ( void *start, size_t len ); +extern void mdumpfree ( void ); + +/** + * Allocate memory for DMA + * + * @v size Requested size + * @v align Physical alignment + * @ret ptr Memory, or NULL + * + * Allocates physically-aligned memory for DMA. + * + * @c align must be a power of two. @c size may not be zero. + */ +static inline void * malloc_dma ( size_t size, size_t phys_align ) { + return alloc_memblock ( size, phys_align ); +} + +/** + * Free memory allocated with malloc_dma() + * + * @v ptr Memory allocated by malloc_dma(), or NULL + * @v size Size of memory, as passed to malloc_dma() + * + * Memory allocated with malloc_dma() can only be freed with + * free_dma(); it cannot be freed with the standard free(). + * + * If @c ptr is NULL, no action is taken. + */ +static inline void free_dma ( void *ptr, size_t size ) { + free_memblock ( ptr, size ); +} + +/** + * Allocate cleared memory + * + * @v nmemb Number of members + * @v size Size of each member + * @ret ptr Allocated memory + * + * Allocate memory as per malloc(), and zero it. + * + * Note that malloc() and calloc() are identical, in the interests of + * reducing code size. Callers should not, however, rely on malloc() + * clearing memory, since this behaviour may change in future. + */ +static inline void * calloc ( size_t nmemb, size_t size ) { + return malloc ( nmemb * size ); +} + +#endif /* _MALLOC_H */ |