1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #ifndef _GPXE_UMALLOC_H
- #define _GPXE_UMALLOC_H
-
- /**
- * @file
- *
- * User memory allocation
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #include <gpxe/api.h>
- #include <config/umalloc.h>
- #include <gpxe/uaccess.h>
-
- /**
- * Provide a user memory allocation API implementation
- *
- * @v _prefix Subsystem prefix
- * @v _api_func API function
- * @v _func Implementing function
- */
- #define PROVIDE_UMALLOC( _subsys, _api_func, _func ) \
- PROVIDE_SINGLE_API ( UMALLOC_PREFIX_ ## _subsys, _api_func, _func )
-
- /* Include all architecture-independent I/O API headers */
- #include <gpxe/efi/efi_umalloc.h>
-
- /* Include all architecture-dependent I/O API headers */
- #include <bits/umalloc.h>
-
- /**
- * Reallocate external memory
- *
- * @v userptr Memory previously allocated by umalloc(), or UNULL
- * @v new_size Requested size
- * @ret userptr Allocated memory, or UNULL
- *
- * Calling realloc() with a new size of zero is a valid way to free a
- * memory block.
- */
- userptr_t urealloc ( userptr_t userptr, size_t new_size );
-
- /**
- * Allocate external memory
- *
- * @v size Requested size
- * @ret userptr Memory, or UNULL
- *
- * Memory is guaranteed to be aligned to a page boundary.
- */
- static inline __always_inline userptr_t umalloc ( size_t size ) {
- return urealloc ( UNULL, size );
- }
-
- /**
- * Free external memory
- *
- * @v userptr Memory allocated by umalloc(), or UNULL
- *
- * If @c ptr is UNULL, no action is taken.
- */
- static inline __always_inline void ufree ( userptr_t userptr ) {
- urealloc ( userptr, 0 );
- }
-
- #endif /* _GPXE_UMALLOC_H */
|