Updated memory allocator to improve support for unaligned or partially
[gpxe.git] / src / include / malloc.h
1 #ifndef _MALLOC_H
2 #define _MALLOC_H
3
4 #include <stdint.h>
5
6 /** @file
7  *
8  * Dynamic memory allocation
9  *
10  */
11
12 extern void * alloc_memblock ( size_t size, size_t align );
13 extern void free_memblock ( void *ptr, size_t size );
14 extern void * malloc ( size_t size );
15 extern void free ( void *ptr );
16 extern void mpopulate ( void *start, size_t len );
17 extern void mdumpfree ( void );
18
19 /**
20  * Allocate memory for DMA
21  *
22  * @v size              Requested size
23  * @v align             Physical alignment
24  * @ret ptr             Memory, or NULL
25  *
26  * Allocates physically-aligned memory for DMA.
27  *
28  * @c align must be a power of two.  @c size may not be zero.
29  */
30 static inline void * malloc_dma ( size_t size, size_t phys_align ) {
31         return alloc_memblock ( size, phys_align );
32 }
33
34 /**
35  * Free memory allocated with malloc_dma()
36  *
37  * @v ptr               Memory allocated by malloc_dma(), or NULL
38  * @v size              Size of memory, as passed to malloc_dma()
39  *
40  * Memory allocated with malloc_dma() can only be freed with
41  * free_dma(); it cannot be freed with the standard free().
42  *
43  * If @c ptr is NULL, no action is taken.
44  */
45 static inline void free_dma ( void *ptr, size_t size ) {
46         free_memblock ( ptr, size );
47 }
48
49 /**
50  * Allocate cleared memory
51  *
52  * @v nmemb             Number of members
53  * @v size              Size of each member
54  * @ret ptr             Allocated memory
55  *
56  * Allocate memory as per malloc(), and zero it.
57  *
58  * Note that malloc() and calloc() are identical, in the interests of
59  * reducing code size.  Callers should not, however, rely on malloc()
60  * clearing memory, since this behaviour may change in future.
61  */
62 static inline void * calloc ( size_t nmemb, size_t size ) {
63         return malloc ( nmemb * size );
64 }
65
66 #endif /* _MALLOC_H */