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