Changeset View
Changeset View
Standalone View
Standalone View
head/stand/i386/libi386/bootinfo32.c
Show All 33 Lines | |||||
#include <machine/bootinfo.h> | #include <machine/bootinfo.h> | ||||
#include <machine/metadata.h> | #include <machine/metadata.h> | ||||
#include "bootstrap.h" | #include "bootstrap.h" | ||||
#include "libi386.h" | #include "libi386.h" | ||||
#include "btxv86.h" | #include "btxv86.h" | ||||
#ifdef LOADER_GELI_SUPPORT | #ifdef LOADER_GELI_SUPPORT | ||||
#include "geliboot.h" | #include "geliboot.h" | ||||
static const size_t keybuf_size = sizeof(struct keybuf) + | |||||
(GELI_MAX_KEYS * sizeof(struct keybuf_ent)); | |||||
#endif | #endif | ||||
static struct bootinfo bi; | static struct bootinfo bi; | ||||
/* | /* | ||||
* Copy module-related data into the load area, where it can be | * Copy module-related data into the load area, where it can be | ||||
* used as a directory for loaded modules. | * used as a directory for loaded modules. | ||||
* | * | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | bi_load32(char *args, int *howtop, int *bootdevp, vm_offset_t *bip, vm_offset_t *modulep, vm_offset_t *kernendp) | ||||
vm_offset_t kernend; | vm_offset_t kernend; | ||||
vm_offset_t envp; | vm_offset_t envp; | ||||
vm_offset_t size; | vm_offset_t size; | ||||
vm_offset_t ssym, esym; | vm_offset_t ssym, esym; | ||||
char *rootdevname; | char *rootdevname; | ||||
int bootdevnr, i, howto; | int bootdevnr, i, howto; | ||||
char *kernelname; | char *kernelname; | ||||
const char *kernelpath; | const char *kernelpath; | ||||
#ifdef LOADER_GELI_SUPPORT | |||||
char buf[keybuf_size]; | |||||
struct keybuf *keybuf = (struct keybuf *)buf; | |||||
#endif | |||||
howto = bi_getboothowto(args); | howto = bi_getboothowto(args); | ||||
/* | /* | ||||
* Allow the environment variable 'rootdev' to override the supplied device | * Allow the environment variable 'rootdev' to override the supplied device | ||||
* This should perhaps go to MI code and/or have $rootdev tested/set by | * This should perhaps go to MI code and/or have $rootdev tested/set by | ||||
* MI code before launching the kernel. | * MI code before launching the kernel. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | if (addr < (xp->f_addr + xp->f_size)) | ||||
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); | ||||
file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); | file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); | ||||
bios_addsmapdata(kfp); | bios_addsmapdata(kfp); | ||||
#ifdef LOADER_GELI_SUPPORT | #ifdef LOADER_GELI_SUPPORT | ||||
geli_fill_keybuf(keybuf); | geli_export_key_metadata(kfp); | ||||
file_addmetadata(kfp, MODINFOMD_KEYBUF, keybuf_size, buf); | |||||
bzero(buf, sizeof(buf)); | |||||
#endif | #endif | ||||
/* Figure out the size and location of the metadata */ | /* Figure out the size and location of the metadata */ | ||||
*modulep = addr; | *modulep = addr; | ||||
size = bi_copymodules32(0); | size = bi_copymodules32(0); | ||||
kernend = roundup(addr + size, PAGE_SIZE); | kernend = roundup(addr + size, PAGE_SIZE); | ||||
*kernendp = kernend; | *kernendp = kernend; | ||||
▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines |