[efi] Add EFI image format and basic runtime environment
[people/sha0/gpxe.git] / src / include / gpxe / umalloc.h
1 #ifndef _GPXE_UMALLOC_H
2 #define _GPXE_UMALLOC_H
3
4 /**
5  * @file
6  *
7  * User memory allocation
8  *
9  */
10
11 #include <gpxe/api.h>
12 #include <config/umalloc.h>
13 #include <gpxe/uaccess.h>
14
15 /**
16  * Provide a user memory allocation API implementation
17  *
18  * @v _prefix           Subsystem prefix
19  * @v _api_func         API function
20  * @v _func             Implementing function
21  */
22 #define PROVIDE_UMALLOC( _subsys, _api_func, _func ) \
23         PROVIDE_SINGLE_API ( UMALLOC_PREFIX_ ## _subsys, _api_func, _func )
24
25 /* Include all architecture-independent I/O API headers */
26 #include <gpxe/efi/efi_umalloc.h>
27
28 /* Include all architecture-dependent I/O API headers */
29 #include <bits/umalloc.h>
30
31 /**
32  * Reallocate external memory
33  *
34  * @v userptr           Memory previously allocated by umalloc(), or UNULL
35  * @v new_size          Requested size
36  * @ret userptr         Allocated memory, or UNULL
37  *
38  * Calling realloc() with a new size of zero is a valid way to free a
39  * memory block.
40  */
41 userptr_t urealloc ( userptr_t userptr, size_t new_size );
42
43 /**
44  * Allocate external memory
45  *
46  * @v size              Requested size
47  * @ret userptr         Memory, or UNULL
48  *
49  * Memory is guaranteed to be aligned to a page boundary.
50  */
51 static inline __always_inline userptr_t umalloc ( size_t size ) {
52         return urealloc ( UNULL, size );
53 }
54
55 /**
56  * Free external memory
57  *
58  * @v userptr           Memory allocated by umalloc(), or UNULL
59  *
60  * If @c ptr is UNULL, no action is taken.
61  */
62 static inline __always_inline void ufree ( userptr_t userptr ) {
63         urealloc ( userptr, 0 );
64 }
65
66 #endif /* _GPXE_UMALLOC_H */