svn commit: r269373 - in projects/arm64/sys: arm64/arm64 boot/arm64/efi
Andrew Turner
andrew at FreeBSD.org
Fri Aug 1 09:54:12 UTC 2014
Author: andrew
Date: Fri Aug 1 09:54:11 2014
New Revision: 269373
URL: http://svnweb.freebsd.org/changeset/base/269373
Log:
Allow us to set verbose boot, along with the other flags loaders boot
command takes.
Modified:
projects/arm64/sys/arm64/arm64/machdep.c
projects/arm64/sys/boot/arm64/efi/bootinfo.c
Modified: projects/arm64/sys/arm64/arm64/machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/machdep.c Fri Aug 1 08:39:47 2014 (r269372)
+++ projects/arm64/sys/arm64/arm64/machdep.c Fri Aug 1 09:54:11 2014 (r269373)
@@ -529,6 +529,7 @@ initarm(struct arm64_bootparams *abp)
if (kmdp == NULL)
kmdp = preload_search_by_type("elf64 kernel");
+ boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int);
#ifdef FDT
try_load_dtb(kmdp);
#endif
Modified: projects/arm64/sys/boot/arm64/efi/bootinfo.c
==============================================================================
--- projects/arm64/sys/boot/arm64/efi/bootinfo.c Fri Aug 1 08:39:47 2014 (r269372)
+++ projects/arm64/sys/boot/arm64/efi/bootinfo.c Fri Aug 1 09:54:11 2014 (r269373)
@@ -29,7 +29,9 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/reboot.h>
#include <sys/linker.h>
+#include <sys/boot.h>
#include <machine/metadata.h>
@@ -100,6 +102,81 @@ UINTN arm64_efi_mapkey;
COPY32(0, a, c); \
}
+static int
+bi_getboothowto(char *kargs)
+{
+ char *cp;
+ char *p;
+ int howto;
+ int active;
+ int i;
+
+ /* Parse kargs */
+ howto = 0;
+ if (kargs != NULL) {
+ cp = kargs;
+ active = 0;
+ while (*cp != 0) {
+ if (!active && (*cp == '-'))
+ active = 1;
+ else if (active)
+ switch (*cp) {
+ case 'a':
+ howto |= RB_ASKNAME;
+ break;
+ case 'C':
+ howto |= RB_CDROM;
+ break;
+ case 'd':
+ howto |= RB_KDB;
+ break;
+ case 'D':
+ howto |= RB_MULTIPLE;
+ break;
+ case 'm':
+ howto |= RB_MUTE;
+ break;
+ case 'g':
+ howto |= RB_GDB;
+ break;
+ case 'h':
+ howto |= RB_SERIAL;
+ break;
+ case 'p':
+ howto |= RB_PAUSE;
+ break;
+ case 'r':
+ howto |= RB_DFLTROOT;
+ break;
+ case 's':
+ howto |= RB_SINGLE;
+ break;
+ case 'v':
+ howto |= RB_VERBOSE;
+ break;
+ default:
+ active = 0;
+ break;
+ }
+ cp++;
+ }
+ }
+
+ /* get equivalents from the environment */
+ for (i = 0; howto_names[i].ev != NULL; i++) {
+ if (getenv(howto_names[i].ev) != NULL)
+ howto |= howto_names[i].mask;
+ }
+ if ((p = getenv("console"))) {
+ if (!strcmp(p, "comconsole"))
+ howto |= RB_SERIAL;
+ if (!strcmp(p, "nullconsole"))
+ howto |= RB_MUTE;
+ }
+
+ return(howto);
+}
+
static vm_offset_t
bi_copymodules(vm_offset_t addr)
{
@@ -203,6 +280,9 @@ bi_load(char *args, vm_offset_t *modulep
uint64_t kernend;
vm_offset_t addr, size;
vm_offset_t dtbp;
+ int howto;
+
+ howto = bi_getboothowto(args);
/* find the last module in the chain */
addr = 0;
@@ -220,6 +300,8 @@ bi_load(char *args, vm_offset_t *modulep
panic("can't find kernel file");
kernend = 0; /* fill it in later */
+ file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof howto, &howto);
+
dtbfp = file_findfile(NULL, "dtb");
if (dtbfp != NULL) {
printf("dtbfp = %llx %lld\n", dtbfp->f_addr, dtbfp->f_addr - kfp->f_addr);
More information about the svn-src-projects
mailing list