Changeset View
Changeset View
Standalone View
Standalone View
stand/efi/loader/bootinfo.c
Show First 20 Lines • Show All 441 Lines • ▼ Show 20 Lines | #if defined(__arm__) | ||||
vm_offset_t vaddr; | vm_offset_t vaddr; | ||||
size_t i; | size_t i; | ||||
/* | /* | ||||
* These metadata addreses must be converted for kernel after | * These metadata addreses must be converted for kernel after | ||||
* relocation. | * relocation. | ||||
*/ | */ | ||||
uint32_t mdt[] = { | uint32_t mdt[] = { | ||||
MODINFOMD_SSYM, MODINFOMD_ESYM, MODINFOMD_KERNEND, | MODINFOMD_SSYM, MODINFOMD_ESYM, MODINFOMD_KERNEND, | ||||
MODINFOMD_ENVP, | MODINFOMD_ENVP, MODINFOMD_FONT, | ||||
#if defined(LOADER_FDT_SUPPORT) | #if defined(LOADER_FDT_SUPPORT) | ||||
MODINFOMD_DTBP | MODINFOMD_DTBP | ||||
#endif | #endif | ||||
}; | }; | ||||
#endif | #endif | ||||
howto = bi_getboothowto(args); | howto = bi_getboothowto(args); | ||||
Show All 16 Lines | #endif | ||||
for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { | for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { | ||||
if (addr < (xp->f_addr + xp->f_size)) | if (addr < (xp->f_addr + xp->f_size)) | ||||
addr = xp->f_addr + xp->f_size; | addr = xp->f_addr + xp->f_size; | ||||
} | } | ||||
/* Pad to a page boundary. */ | /* Pad to a page boundary. */ | ||||
addr = roundup(addr, PAGE_SIZE); | addr = roundup(addr, PAGE_SIZE); | ||||
addr = build_font_module(addr); | |||||
/* Pad to a page boundary. */ | |||||
addr = roundup(addr, PAGE_SIZE); | |||||
/* Copy our environment. */ | /* Copy our environment. */ | ||||
envp = addr; | envp = addr; | ||||
addr = bi_copyenv(addr); | addr = bi_copyenv(addr); | ||||
/* Pad to a page boundary. */ | /* Pad to a page boundary. */ | ||||
addr = roundup(addr, PAGE_SIZE); | addr = roundup(addr, PAGE_SIZE); | ||||
#if defined(LOADER_FDT_SUPPORT) | #if defined(LOADER_FDT_SUPPORT) | ||||
/* Handle device tree blob */ | /* Handle device tree blob */ | ||||
dtbp = addr; | dtbp = addr; | ||||
dtb_size = fdt_copy(addr); | dtb_size = fdt_copy(addr); | ||||
/* Pad to a page boundary */ | /* Pad to a page boundary */ | ||||
if (dtb_size) | if (dtb_size) | ||||
addr += roundup(dtb_size, PAGE_SIZE); | addr += roundup(dtb_size, PAGE_SIZE); | ||||
#endif | #endif | ||||
kfp = file_findfile(NULL, "elf kernel"); | kfp = file_findfile(NULL, "elf kernel"); | ||||
if (kfp == NULL) | if (kfp == NULL) | ||||
kfp = file_findfile(NULL, "elf64 kernel"); | kfp = file_findfile(NULL, "elf64 kernel"); | ||||
if (kfp == NULL) | if (kfp == NULL) | ||||
panic("can't find kernel file"); | panic("can't find kernel file"); | ||||
kernend = 0; /* fill it in later */ | kernend = 0; /* fill it in later */ | ||||
file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof howto, &howto); | file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof(howto), &howto); | ||||
file_addmetadata(kfp, MODINFOMD_ENVP, sizeof envp, &envp); | file_addmetadata(kfp, MODINFOMD_ENVP, sizeof(envp), &envp); | ||||
#if defined(LOADER_FDT_SUPPORT) | #if defined(LOADER_FDT_SUPPORT) | ||||
if (dtb_size) | if (dtb_size) | ||||
file_addmetadata(kfp, MODINFOMD_DTBP, sizeof dtbp, &dtbp); | file_addmetadata(kfp, MODINFOMD_DTBP, sizeof(dtbp), &dtbp); | ||||
else | else | ||||
printf("WARNING! Trying to fire up the kernel, but no " | printf("WARNING! Trying to fire up the kernel, but no " | ||||
"device tree blob found!\n"); | "device tree blob found!\n"); | ||||
#endif | #endif | ||||
file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); | file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof(kernend), &kernend); | ||||
file_addmetadata(kfp, MODINFOMD_FW_HANDLE, sizeof ST, &ST); | file_addmetadata(kfp, MODINFOMD_FW_HANDLE, sizeof(ST), &ST); | ||||
#ifdef LOADER_GELI_SUPPORT | #ifdef LOADER_GELI_SUPPORT | ||||
geli_export_key_metadata(kfp); | geli_export_key_metadata(kfp); | ||||
#endif | #endif | ||||
bi_load_efi_data(kfp); | bi_load_efi_data(kfp); | ||||
/* Figure out the size and location of the metadata. */ | /* Figure out the size and location of the metadata. */ | ||||
*modulep = addr; | *modulep = addr; | ||||
size = bi_copymodules(0); | size = bi_copymodules(0); | ||||
Show All 28 Lines |