Changeset View
Changeset View
Standalone View
Standalone View
head/stand/i386/libi386/bootinfo64.c
Show All 36 Lines | |||||
#include <machine/psl.h> | #include <machine/psl.h> | ||||
#include <machine/specialreg.h> | #include <machine/specialreg.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 | ||||
/* | /* | ||||
* 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. | ||||
* | * | ||||
* Module data is presented in a self-describing format. Each datum | * Module data is presented in a self-describing format. Each datum | ||||
* is preceded by a 32-bit identifier and a 32-bit size field. | * is preceded by a 32-bit identifier and a 32-bit size field. | ||||
▲ Show 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | bi_load64(char *args, vm_offset_t addr, vm_offset_t *modulep, | ||||
struct i386_devdesc *rootdev; | struct i386_devdesc *rootdev; | ||||
struct file_metadata *md; | struct file_metadata *md; | ||||
uint64_t kernend; | uint64_t kernend; | ||||
uint64_t envp; | uint64_t envp; | ||||
uint64_t module; | uint64_t module; | ||||
vm_offset_t size; | vm_offset_t size; | ||||
char *rootdevname; | char *rootdevname; | ||||
int howto; | int howto; | ||||
#ifdef LOADER_GELI_SUPPORT | |||||
char buf[keybuf_size]; | |||||
struct keybuf *keybuf = (struct keybuf *)buf; | |||||
#endif | |||||
if (!bi_checkcpu()) { | if (!bi_checkcpu()) { | ||||
printf("CPU doesn't support long mode\n"); | printf("CPU doesn't support long mode\n"); | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
howto = bi_getboothowto(args); | howto = bi_getboothowto(args); | ||||
Show All 32 Lines | bi_load64(char *args, vm_offset_t addr, vm_offset_t *modulep, | ||||
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); | ||||
file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof module, &module); | file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof module, &module); | ||||
if (add_smap != 0) | if (add_smap != 0) | ||||
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 | ||||
size = bi_copymodules64(0); | size = bi_copymodules64(0); | ||||
/* copy our environment */ | /* copy our environment */ | ||||
envp = roundup(addr + size, PAGE_SIZE); | envp = roundup(addr + size, PAGE_SIZE); | ||||
addr = bi_copyenv(envp); | addr = bi_copyenv(envp); | ||||
Show All 17 Lines |