From b601a7d355a4c24563f4f2db40ba52ae183ce493 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 25 Apr 2006 03:30:46 +0000 Subject: 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. --- src/include/malloc.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/include/malloc.h (limited to 'src/include/malloc.h') 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 + +/** @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 */ -- cgit v1.2.3-55-g7522