Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/stand/efiboot Add MI EFI bootloader and AArch64 glue.
details: https://anonhg.NetBSD.org/src/rev/d834504590f3
branches: trunk
changeset: 365610:d834504590f3
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Fri Aug 24 02:01:06 2018 +0000
description:
Add MI EFI bootloader and AArch64 glue.
diffstat:
sys/stand/efiboot/Makefile.efiboot | 148 +++++++++++++++++++++++
sys/stand/efiboot/boot.c | 144 ++++++++++++++++++++++
sys/stand/efiboot/bootaa64/Makefile | 14 ++
sys/stand/efiboot/bootaa64/cache.S | 98 +++++++++++++++
sys/stand/efiboot/bootaa64/efibootaa64.c | 55 ++++++++
sys/stand/efiboot/conf.c | 43 ++++++
sys/stand/efiboot/console.c | 63 ++++++++++
sys/stand/efiboot/devopen.c | 40 ++++++
sys/stand/efiboot/devopen.h | 34 +++++
sys/stand/efiboot/efiboot.c | 123 +++++++++++++++++++
sys/stand/efiboot/efiboot.h | 77 ++++++++++++
sys/stand/efiboot/efiboot_machdep.h | 33 +++++
sys/stand/efiboot/efichar.c | 195 +++++++++++++++++++++++++++++++
sys/stand/efiboot/efifdt.c | 124 +++++++++++++++++++
sys/stand/efiboot/efifdt.h | 33 +++++
sys/stand/efiboot/efifile.c | 163 +++++++++++++++++++++++++
sys/stand/efiboot/efifile.h | 33 +++++
sys/stand/efiboot/efigetsecs.c | 52 ++++++++
sys/stand/efiboot/exec.c | 91 ++++++++++++++
sys/stand/efiboot/panic.c | 46 +++++++
sys/stand/efiboot/prompt.c | 152 ++++++++++++++++++++++++
sys/stand/efiboot/version | 7 +
22 files changed, 1768 insertions(+), 0 deletions(-)
diffs (truncated from 1856 to 300 lines):
diff -r 001f8b273413 -r d834504590f3 sys/stand/efiboot/Makefile.efiboot
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/stand/efiboot/Makefile.efiboot Fri Aug 24 02:01:06 2018 +0000
@@ -0,0 +1,148 @@
+# $NetBSD: Makefile.efiboot,v 1.1 2018/08/24 02:01:06 jmcneill Exp $
+
+S= ${.CURDIR}/../../..
+
+NOMAN= # defined
+NOPIE= # defined
+NOLIBCSANITIZER=# defined
+NOSANITIZER= # defined
+NORELRO= # defined
+PROG?= boot.efi
+NEWVERSWHAT?= "EFI Boot"
+
+EFIDIR= ${S}/external/bsd/gnu-efi/dist
+GNUEFIARCH?= ${MACHINE_CPU}
+CPPFLAGS+= -I${EFIDIR}/inc -I${EFIDIR}/inc/${GNUEFIARCH}
+CPPFLAGS+= -I${EFIDIR}/inc/protocol
+
+LDSCRIPT?= ${EFIDIR}/gnuefi/elf_${GNUEFIARCH}_efi.lds
+
+AFLAGS.start.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:}
+
+.PATH: ${EFIDIR}/gnuefi
+SOURCES= crt0-efi-${GNUEFIARCH}.S reloc_${GNUEFIARCH}.c
+SOURCES+= boot.c conf.c console.c devopen.c exec.c panic.c prompt.c
+SOURCES+= efiboot.c efichar.c efifdt.c efifile.c
+
+.PATH: ${S}/external/bsd/libfdt/dist
+CPPFLAGS+= -I${S}/external/bsd/libfdt/dist
+SOURCES+= fdt.c fdt_addresses.c fdt_empty_tree.c
+SOURCES+= fdt_ro.c fdt_rw.c fdt_strerror.c fdt_sw.c fdt_wip.c
+
+SRCS= ${SOURCES} ${EXTRA_SOURCES}
+
+.include <bsd.init.mk>
+
+STRIPFLAG= # nothing
+
+LIBCRT0= # nothing
+LIBCRTI= # nothing
+LIBCRTBEGIN= # nothing
+LIBCRTEND= # nothing
+LIBC= # nothing
+
+BINDIR=/usr/mdec
+BINMODE=444
+
+.PATH: ${.CURDIR} ${.CURDIR}/..
+.PATH: ${.CURDIR}/../../lib
+
+LDFLAGS+= -nostdlib -T${LDSCRIPT} -Bsymbolic -shared
+CPPFLAGS+= -I$S -I${.CURDIR} -I${.CURDIR}/../common -I$S/lib/libsa
+CPPFLAGS+= -I${.OBJDIR}
+CPPFLAGS+= -I${.CURDIR}/../../lib
+
+COPTS+= -fpic -g -O2
+COPTS+= -fshort-wchar -fno-strict-aliasing
+COPTS+= -ffreestanding -fno-stack-protector
+LDFLAGS+= --defsym=EFI_SUBSYSTEM=0xa
+
+
+COPTS+= ${${ACTIVE_CC} == "gcc":? -Wno-error=unused-but-set-variable :}
+CPPFLAGS+= -nostdinc -D_STANDALONE
+CPPFLAGS+= -DEFIBOOT
+
+CPPFLAGS+= -Wall -Wmissing-prototypes
+CPPFLAGS+= -Wno-pointer-sign
+
+CPPFLAGS+= -DHEAP_VARIABLE
+#CPPFLAGS+= -DSUPPORT_CD9660
+CPPFLAGS+= -D"devb2cdb(bno)=(bno)"
+#CPPFLAGS+= -DSUPPORT_DOSFS
+#CPPFLAGS+= -DSUPPORT_EXT2FS
+#CPPFLAGS+= -DSUPPORT_BOOTP
+#CPPFLAGS+= -DSUPPORT_DHCP
+#CPPFLAGS+= -DSUPPORT_NFS
+#CPPFLAGS+= -DSUPPORT_TFTP
+#CPPFLAGS+= -DLIBSA_ENABLE_LS_OP
+
+#CPPFLAGS+= -DARP_DEBUG
+#CPPFLAGS+= -DBOOTP_DEBUG
+#CPPFLAGS+= -DNET_DEBUG
+#CPPFLAGS+= -DNETIF_DEBUG
+#CPPFLAGS+= -DNFS_DEBUG
+#CPPFLAGS+= -DRARP_DEBUG
+#CPPFLAGS+= -DRPC_DEBUG
+
+SAMISCCPPFLAGS+= -DLIBSA_PRINTF_LONGLONG_SUPPORT
+SAMISCCPPFLAGS+= -DLIBSA_PRINTF_WIDTH_SUPPORT
+SAMISCCPPFLAGS+= -D"cdb2devb(bno)=(bno)"
+
+### find out what to use for libsa
+SA_AS= library
+SAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes"
+SAMISCMAKEFLAGS+="SA_USE_CREAD=yes"
+#SAMISCMAKEFLAGS+="SA_INCLUDE_NET=yes"
+#SAMISCMAKEFLAGS+="SA_ENABLE_LS_OP=yes"
+.include "${S}/lib/libsa/Makefile.inc"
+LIBSA= ${SALIB}
+
+### find out what to use for libkern
+KERN_AS= library
+LIBKERN_ARCH?= ${MACHINE_ARCH}
+KERNMISCMAKEFLAGS+="LIBKERN_ARCH=${LIBKERN_ARCH}"
+.include "${S}/lib/libkern/Makefile.inc"
+LIBKERN= ${KERNLIB}
+
+### find out what to use for libz
+Z_AS= library
+.include "${S}/lib/libz/Makefile.inc"
+LIBZ= ${ZLIB}
+
+### find out what to use for libgnuefi
+GNUEFI_AS= library
+LIBGNUEFI_ARCH?= ${MACHINE_ARCH}
+GNUEFIMISCMAKEFLAGS+="LIBGNUEFI_ARCH=${LIBGNUEFI_ARCH}"
+GNUEFIMISCCPPFLAGS+= -I${EFIDIR}/lib
+.include "${S}/lib/libgnuefi/Makefile.inc"
+LIBGNUEFI= ${GNUEFILIB}
+
+cleandir distclean: .WAIT cleanlibdir
+
+cleanlibdir:
+ -rm -rf lib
+
+LIBLIST= ${LIBGNUEFI} ${LIBSA} ${LIBZ} ${LIBKERN} ${LIBSA}
+
+VERSIONMACHINE=evbarm
+.include "${S}/conf/newvers_stand.mk"
+
+CLEANFILES+= ${PROG}.so ${PROG}.tmp
+
+${PROG}: ${PROG}.so
+ ${OBJCOPY} -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
+ -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
+ -j .reloc -O binary ${PROG}.so ${.TARGET}
+
+.include <bsd.prog.mk>
+
+${PROG}.so: ${OBJS} ${LIBLIST} ${LDSCRIPT} ${.CURDIR}/../Makefile.efiboot
+ ${LD} ${LDFLAGS} -o ${.TARGET}.tmp ${OBJS} ${LIBLIST}
+ @if ${OBJDUMP} -t ${.TARGET}.tmp | grep 'UND'; then \
+ (echo Undefined symbols; false); \
+ fi
+ rm -f ${.TARGET}
+ mv ${.TARGET}.tmp ${.TARGET}
+
+KLINK_MACHINE?= ${MACHINE}
+.include <bsd.klinks.mk>
diff -r 001f8b273413 -r d834504590f3 sys/stand/efiboot/boot.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/stand/efiboot/boot.c Fri Aug 24 02:01:06 2018 +0000
@@ -0,0 +1,144 @@
+/* $NetBSD: boot.c,v 1.1 2018/08/24 02:01:06 jmcneill Exp $ */
+
+/*-
+ * Copyright (c) 2016 Kimihiro Nonaka <nonaka%netbsd.org@localhost>
+ * Copyright (c) 2018 Jared McNeill <jmcneill%invisible.ca@localhost>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "efiboot.h"
+
+#include <sys/bootblock.h>
+#include <sys/boot_flag.h>
+#include <machine/limits.h>
+
+#include <loadfile.h>
+
+extern const char bootprog_name[], bootprog_rev[], bootprog_kernrev[];
+
+extern char twiddle_toggle;
+
+static const char * const names[][2] = {
+ { "netbsd", "netbsd.gz" },
+ { "onetbsd", "onetbsd.gz" },
+ { "netbsd.old", "netbsd.old.gz" },
+};
+
+#define NUMNAMES __arraycount(names)
+#define DEFFILENAME names[0][0]
+
+#define DEFTIMEOUT 5
+
+void command_boot(char *);
+void command_reset(char *);
+void command_version(char *);
+void command_quit(char *);
+
+const struct boot_command commands[] = {
+ { "boot", command_boot, "boot [fsN:][filename] [args]\n (ex. \"fs0:\\netbsd.old -s\"" },
+ { "version", command_version, "version" },
+ { "help", command_help, "help|?" },
+ { "?", command_help, NULL },
+ { "quit", command_quit, "quit" },
+ { NULL, NULL },
+};
+
+void
+command_help(char *arg)
+{
+ int n;
+
+ printf("commands are:\n");
+ for (n = 0; commands[n].c_name; n++) {
+ if (commands[n].c_help)
+ printf("%s\n", commands[n].c_help);
+ }
+}
+
+void
+command_boot(char *arg)
+{
+ char *fname = arg;
+ char *bootargs = gettrailer(arg);
+
+ exec_netbsd(*fname ? fname : DEFFILENAME, bootargs);
+}
+
+void
+command_version(char *arg)
+{
+ char *ufirmware;
+ int rv;
+
+ printf("EFI version: %d.%02d\n",
+ ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
+ ufirmware = NULL;
+ rv = ucs2_to_utf8(ST->FirmwareVendor, &ufirmware);
+ if (rv == 0) {
+ printf("EFI Firmware: %s (rev %d.%02d)\n", ufirmware,
+ ST->FirmwareRevision >> 16,
+ ST->FirmwareRevision & 0xffff);
+ FreePool(ufirmware);
+ }
+}
+
+void
+command_quit(char *arg)
+{
+ efi_exit();
+}
+
+void
+print_banner(void)
+{
+ printf("\n\n"
+ ">> %s, Revision %s (from NetBSD %s)\n",
+ bootprog_name, bootprog_rev, bootprog_kernrev);
+}
+
+void
+boot(void)
+{
+ int currname, c;
+
+ print_banner();
+
+ printf("Press return to boot now, any other key for boot prompt\n");
+ for (currname = 0; currname < NUMNAMES; currname++) {
+ printf("booting %s - starting in ", names[currname][0]);
+
+ c = awaitkey(DEFTIMEOUT, 1);
+ if ((c != '\r') && (c != '\n') && (c != '\0')) {
+ bootprompt(); /* does not return */
+ }
+
+ /*
+ * try pairs of names[] entries, foo and foo.gz
+ */
+ exec_netbsd(names[currname][0], "");
+ exec_netbsd(names[currname][1], "");
+ }
+
+ bootprompt(); /* does not return */
+}
Home |
Main Index |
Thread Index |
Old Index