.

.

.

lib/efi_loader/efi_memory.c

int efi_memory_init(void)
{
        unsigned long runtime_start, runtime_end, runtime_pages;
        unsigned long uboot_start, uboot_pages;
        unsigned long uboot_stack_size = 16 * 1024 * 1024;
        int i;

        /* Add RAM */
        for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
                u64 ram_start = gd->bd->bi_dram[i].start;
                u64 ram_size = gd->bd->bi_dram[i].size;
                u64 start = (ram_start + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
                u64 pages = (ram_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT;

                efi_add_memory_map(start, pages, EFI_CONVENTIONAL_MEMORY,
                                   false);
        }

        /* Add U-Boot */
        uboot_start = (gd->start_addr_sp - uboot_stack_size) & ~EFI_PAGE_MASK;
        uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT;
        efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false);

        /* Add Runtime Services */
        runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK;
        runtime_end = (ulong)&__efi_runtime_stop;
        runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
        runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT;
        efi_add_memory_map(runtime_start, runtime_pages,
                           EFI_RUNTIME_SERVICES_CODE, false);

#ifdef CONFIG_EFI_LOADER_BOUNCE_BUFFER
        /* Request a 32bit 64MB bounce buffer region */
        uint64_t efi_bounce_buffer_addr = 0xffffffff;

        if (efi_allocate_pages(1, EFI_LOADER_DATA,
                               (64 * 1024 * 1024) >> EFI_PAGE_SHIFT,
                               &efi_bounce_buffer_addr) != EFI_SUCCESS)
                return -1;

        efi_bounce_buffer = (void*)(uintptr_t)efi_bounce_buffer_addr;
#endif

        return 0;
}

.

.

results matching ""

    No results matching ""