Unified Extensible Firmware Interface (UEFI) Support¶
UEFI stub library functions¶
-
efi_status_t efi_get_memory_map(struct efi_boot_memmap **map, bool install_cfg_tbl)¶
get memory map
Parameters
struct efi_boot_memmap **mappointer to memory map pointer to which to assign the newly allocated memory map
bool install_cfg_tblwhether or not to install the boot memory map as a configuration table
Description
Retrieve the UEFI memory map. The allocated memory leaves room for up to EFI_MMAP_NR_SLACK_SLOTS additional memory map entries.
Return
status code
-
efi_status_t efi_allocate_pages(unsigned long size, unsigned long *addr, unsigned long max)¶
Allocate memory pages
Parameters
unsigned long sizeminimum number of bytes to allocate
unsigned long *addrOn return the address of the first allocated page. The first allocated page has alignment EFI_ALLOC_ALIGN which is an architecture dependent multiple of the page size.
unsigned long maxthe address that the last allocated memory page shall not exceed
Description
Allocate pages as EFI_LOADER_DATA. The allocated pages are aligned according to EFI_ALLOC_ALIGN. The last allocated page will not exceed the address given by max.
Return
status code
-
void efi_free(unsigned long size, unsigned long addr)¶
free memory pages
Parameters
unsigned long sizesize of the memory area to free in bytes
unsigned long addrstart of the memory area to free (must be EFI_PAGE_SIZE aligned)
Description
size is rounded up to a multiple of EFI_ALLOC_ALIGN which is an
architecture specific multiple of EFI_PAGE_SIZE. So this function should
only be used to return pages allocated with efi_allocate_pages() or
efi_low_alloc_above().
UEFI Common Platform Error Record (CPER) functions¶
-
void cper_print_bits(const char *pfx, unsigned int bits, const char *const strs[], unsigned int strs_size)¶
print strings for set bits
Parameters
const char *pfxprefix for each line, including log level and prefix string
unsigned int bitsbit mask
const char * const strs[]string array, indexed by bit position
unsigned int strs_sizesize of the string array: strs
Description
For each set bit in bits, print the corresponding string in strs. If the output length is longer than 80, multiple line will be printed, with pfx is printed at the beginning of each line.
-
int cper_bits_to_str(char *buf, int buf_size, unsigned long bits, const char *const strs[], unsigned int strs_size)¶
return a string for set bits
Parameters
char *bufbuffer to store the output string
int buf_sizesize of the output string buffer
unsigned long bitsbit mask
const char * const strs[]string array, indexed by bit position
unsigned int strs_sizesize of the string array: strs
Description
Add to buf the bitmask in hexadecimal. Then, for each set bit in bits, add the corresponding string describing the bit in strs to buf.
A typical example is:
const char * const bits[] = {
"bit 3 name",
"bit 4 name",
"bit 5 name",
};
char str[120];
unsigned int bitmask = BIT(3) | BIT(5);
#define MASK GENMASK(5,3)
cper_bits_to_str(str, sizeof(str), FIELD_GET(MASK, bitmask),
bits, ARRAY_SIZE(bits));
The above code fills the string str with bit 3 name|bit 5 name.
Return
number of bytes stored or an error code if lower than zero.