Move include/malloc.h to include/gpxe/malloc.h, since everything in there
[people/xl0/gpxe.git] / src / include / gpxe / malloc.h
1 #ifndef _GPXE_MALLOC_H
2 #define _GPXE_MALLOC_H
3
4 #include <stdint.h>
5
6 /** @file
7  *
8  * Dynamic memory allocation
9  *
10  */
11
12 /*
13  * Prototypes for the standard functions (malloc() et al) are in
14  * stdlib.h.  Include <gpxe/malloc.h> only if you need the
15  * non-standard functions, such as malloc_dma().
16  *
17  */
18 #include <stdlib.h>
19
20 extern size_t freemem;
21
22 extern void * alloc_memblock ( size_t size, size_t align );
23 extern void free_memblock ( void *ptr, size_t size );
24 extern void mpopulate ( void *start, size_t len );
25 extern void mdumpfree ( void );
26
27 /**
28  * Allocate memory for DMA
29  *
30  * @v size              Requested size
31  * @v align             Physical alignment
32  * @ret ptr             Memory, or NULL
33  *
34  * Allocates physically-aligned memory for DMA.
35  *
36  * @c align must be a power of two.  @c size may not be zero.
37  */
38 static inline void * malloc_dma ( size_t size, size_t phys_align ) {
39         return alloc_memblock ( size, phys_align );
40 }
41
42 /**
43  * Free memory allocated with malloc_dma()
44  *
45  * @v ptr               Memory allocated by malloc_dma(), or NULL
46  * @v size              Size of memory, as passed to malloc_dma()
47  *
48  * Memory allocated with malloc_dma() can only be freed with
49  * free_dma(); it cannot be freed with the standard free().
50  *
51  * If @c ptr is NULL, no action is taken.
52  */
53 static inline void free_dma ( void *ptr, size_t size ) {
54         free_memblock ( ptr, size );
55 }
56
57 #endif /* _GPXE_MALLOC_H */