diff --git a/hypervisor/bsp/uefi/efi/malloc.c b/hypervisor/bsp/uefi/efi/malloc.c index efd94ec70..423bdc822 100644 --- a/hypervisor/bsp/uefi/efi/malloc.c +++ b/hypervisor/bsp/uefi/efi/malloc.c @@ -93,143 +93,6 @@ failed: return err; } -/** - * emalloc - Allocate memory with a strict alignment requirement - * @size: size in bytes of the requested allocation - * @align: the required alignment of the allocation - * @addr: a pointer to the allocated address on success - * - * If we cannot satisfy @align we return 0. - * - * FIXME: This function cannot guarantee to return address under 4G, - * and the hypervisor cannot handle params, which address is above 4G, - * delivered from efi stub. - */ -EFI_STATUS emalloc(UINTN size, UINTN align, EFI_PHYSICAL_ADDRESS *addr) -{ - UINTN map_size, map_key, desc_size; - EFI_MEMORY_DESCRIPTOR *map_buf; - UINTN d, map_end; - UINT32 desc_version; - EFI_STATUS err; - UINTN nr_pages = EFI_SIZE_TO_PAGES(size); - - err = memory_map(&map_buf, &map_size, &map_key, - &desc_size, &desc_version); - if (err != EFI_SUCCESS) - goto fail; - - d = (UINTN)map_buf; - map_end = (UINTN)map_buf + map_size; - - for (; d < map_end; d += desc_size) { - EFI_MEMORY_DESCRIPTOR *desc; - EFI_PHYSICAL_ADDRESS start, end, aligned; - - desc = (EFI_MEMORY_DESCRIPTOR *)d; - if (desc->Type != EfiConventionalMemory) - continue; - - if (desc->NumberOfPages < nr_pages) - continue; - - start = desc->PhysicalStart; - end = start + (desc->NumberOfPages << EFI_PAGE_SHIFT); - - /* Low-memory is super-precious! */ - if (end <= 1 << 20) - continue; - if (start < 1 << 20) { - size -= (1 << 20) - start; - start = (1 << 20); - } - - aligned = (start + align -1) & ~(align -1); - - if ((aligned + size) <= end) { - err = allocate_pages(AllocateAddress, EfiLoaderData, - nr_pages, &aligned); - if (err == EFI_SUCCESS) { - *addr = aligned; - break; - } - } - } - - if (d == map_end) - err = EFI_OUT_OF_RESOURCES; - - free_pool(map_buf); -fail: - return err; -} - - -/** - * efree - Return memory allocated with emalloc - * @memory: the address of the emalloc() allocation - * @size: the size of the allocation - */ -void efree(EFI_PHYSICAL_ADDRESS memory, UINTN size) -{ - UINTN nr_pages = EFI_SIZE_TO_PAGES(size); - - free_pages(memory, nr_pages); -} - -/** - * malloc - Allocate memory from the EfiLoaderData pool - * @size: size in bytes of the requested allocation - * - * Return a pointer to an allocation of @size bytes of type - * EfiLoaderData. - */ -void *malloc(UINTN size) -{ - EFI_STATUS err; - void *buffer; - - err = allocate_pool(EfiLoaderData, size, &buffer); - if (err != EFI_SUCCESS) - buffer = NULL; - - return buffer; -} - -/** - * free - Release memory to the EfiLoaderData pool - * @buffer: pointer to the malloc() allocation to free - */ -void free(void *buffer) -{ - if (buffer) - free_pool(buffer); -} - -/** - * calloc - Allocate zeroed memory for an array of elements - * @nmemb: number of elements - * @size: size of each element - */ -void *calloc(UINTN nmemb, UINTN size) -{ - void *buffer; - - /* - * There's no equivalent of UINTN_MAX, so for safety we refuse to - * allocate anything larger than 32 bits. - */ - UINTN bytes = nmemb * size; - if ((nmemb | size) > 0xffffU) { - if (size && bytes / size != nmemb) - return NULL; - } - - buffer = malloc(bytes); - if (buffer) - (void)memset(buffer, 0, bytes); - return buffer; -} EFI_STATUS dump_e820(void) { diff --git a/hypervisor/bsp/uefi/efi/stdlib.h b/hypervisor/bsp/uefi/efi/stdlib.h index 8fbbff980..7106acf18 100644 --- a/hypervisor/bsp/uefi/efi/stdlib.h +++ b/hypervisor/bsp/uefi/efi/stdlib.h @@ -44,13 +44,6 @@ #ifndef __STDLIB_H__ #define __STDLIB_H__ -extern void *malloc(UINTN size); -extern void free(void *buf); -extern void *calloc(UINTN nmemb, UINTN size); - -extern EFI_STATUS emalloc(UINTN, UINTN, EFI_PHYSICAL_ADDRESS *); -extern EFI_STATUS __emalloc(UINTN, UINTN, EFI_PHYSICAL_ADDRESS *, EFI_MEMORY_TYPE); -extern void efree(EFI_PHYSICAL_ADDRESS, UINTN); static inline void memset(void *dstv, char ch, UINTN size) { @@ -80,39 +73,6 @@ static inline int strlen(const char *str) return len; } -static inline char *strstr(const char *haystack, const char *needle) -{ - const char *p; - const char *word = NULL; - int len = strlen(needle); - - if (!len) - return NULL; - - p = haystack; - while (*p) { - word = p; - if (!strncmpa((CHAR8 *)p, (CHAR8 *)needle, len)) - break; - p++; - word = NULL; - } - - return (char *)word; -} - -static inline char *strdup(const char *src) -{ - int len; - char *dst; - - len = strlen(src); - dst = malloc(len + 1); - if (dst) - memcpy(dst, src, len + 1); - return dst; -} - static inline CHAR16 *strstr_16(CHAR16 *haystack, CHAR16 *needle) { CHAR16 *p;