efiboot: Boot parameters can be set via installboot(8).

This commit is contained in:
nonaka 2017-04-29 00:05:35 +00:00
parent a9391cc9b5
commit d6c1a4862f
6 changed files with 40 additions and 11 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile.efiboot,v 1.8 2017/04/08 19:53:21 christos Exp $
# $NetBSD: Makefile.efiboot,v 1.9 2017/04/29 00:05:35 nonaka Exp $
S= ${.CURDIR}/../../../../..
@ -10,7 +10,7 @@ AFLAGS.start.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:}
SOURCES?= start.S conf.c devopen.c efiboot.c self_reloc.c
LIBI386SRCS= boot.c biosdisk.c bootinfo.c bootinfo_biosgeom.c
LIBI386SRCS+= bootmenu.c boot_params.S diskbuf.c exec.c menuutils.c
LIBI386SRCS+= bootmenu.c diskbuf.c exec.c menuutils.c
LIBI386SRCS+= panic.c parseutils.c pread.c
LIBI386SRCS+= eficons.c efidelay.c efidisk.c efidisk_ll.c efigetsecs.c
LIBI386SRCS+= efimemory.c

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibootia32.c,v 1.2 2017/02/21 10:53:37 nonaka Exp $ */
/* $NetBSD: efibootia32.c,v 1.3 2017/04/29 00:05:35 nonaka Exp $ */
/*-
* Copyright (c) 2016 Kimihiro Nonaka <nonaka@netbsd.org>
@ -30,8 +30,6 @@
#include <sys/bootblock.h>
struct x86_boot_params boot_params;
void startprog32_start(physaddr_t, uint32_t, uint32_t *, physaddr_t,
physaddr_t, physaddr_t, u_long, void *);
extern void (*startprog32)(physaddr_t, uint32_t, uint32_t *, physaddr_t,

View File

@ -1,4 +1,4 @@
/* $NetBSD: start.S,v 1.1 2017/01/24 11:09:14 nonaka Exp $ */
/* $NetBSD: start.S,v 1.2 2017/04/29 00:05:35 nonaka Exp $ */
/*-
* Copyright (c) 2008-2010 Rui Paulo <rpaulo@FreeBSD.org>
@ -29,6 +29,7 @@
*/
#include <machine/asm.h>
#include <sys/bootblock.h>
.text
.align 16
@ -72,3 +73,18 @@ END(_start)
.long 0
.long 10
.word 0
/* boot parameters */
.text
.code16
.align 512
.Lfake_bootxx:
jmp 1f
.balign 4
.long X86_BOOT_MAGIC_EFI /* checked by installboot */
.globl _C_LABEL(boot_params)
_C_LABEL(boot_params): /* space for patchable variables */
.long 1f - boot_params /* length of this data area */
#include <boot_params.S>
. = .Lfake_bootxx + 0x80 /* Space for patching unknown params */
1:

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibootx64.c,v 1.2 2017/02/11 10:23:39 nonaka Exp $ */
/* $NetBSD: efibootx64.c,v 1.3 2017/04/29 00:05:35 nonaka Exp $ */
/*-
* Copyright (c) 2016 Kimihiro Nonaka <nonaka@netbsd.org>
@ -30,8 +30,6 @@
#include <sys/bootblock.h>
struct x86_boot_params boot_params;
void startprog64_start(physaddr_t, physaddr_t, physaddr_t, u_long,
void *, physaddr_t);
extern void (*startprog64)(physaddr_t, physaddr_t, physaddr_t, u_long,

View File

@ -1,4 +1,4 @@
/* $NetBSD: start.S,v 1.1 2017/01/24 11:09:14 nonaka Exp $ */
/* $NetBSD: start.S,v 1.2 2017/04/29 00:05:35 nonaka Exp $ */
/*-
* Copyright (C) 1999 Hewlett-Packard Co.
@ -39,6 +39,7 @@
*/
#include <machine/asm.h>
#include <sys/bootblock.h>
.text
.align 16
@ -77,3 +78,18 @@ _start:
.long 0
.long 10
.word 0
/* boot parameters */
.text
.code16
.align 512
.Lfake_bootxx:
jmp 1f
.balign 4
.long X86_BOOT_MAGIC_EFI /* checked by installboot */
.globl _C_LABEL(boot_params)
_C_LABEL(boot_params): /* space for patchable variables */
.long 1f - boot_params /* length of this data area */
#include <boot_params.S>
. = .Lfake_bootxx + 0x80 /* Space for patching unknown params */
1:

View File

@ -1,4 +1,4 @@
/* $NetBSD: bootblock.h,v 1.57 2014/09/14 17:39:06 nonaka Exp $ */
/* $NetBSD: bootblock.h,v 1.58 2017/04/29 00:05:35 nonaka Exp $ */
/*-
* Copyright (c) 2002-2004 The NetBSD Foundation, Inc.
@ -1089,6 +1089,7 @@ struct x86_boot_params {
#define X86_BOOT_MAGIC_2 X86_BOOT_MAGIC(2) /* bootxx.S */
#define X86_BOOT_MAGIC_PXE X86_BOOT_MAGIC(3) /* start_pxe.S */
#define X86_BOOT_MAGIC_FAT X86_BOOT_MAGIC(4) /* fatboot.S */
#define X86_BOOT_MAGIC_EFI X86_BOOT_MAGIC(5) /* efiboot/start.S */
#define X86_MBR_GPT_MAGIC 0xedb88320 /* gpt.S */
/* values for bp_flags */