svn commit: r336246 - in head/stand: common efi/loader i386/libi386 userboot/userboot
Warner Losh
imp at FreeBSD.org
Fri Jul 13 16:43:28 UTC 2018
Author: imp
Date: Fri Jul 13 16:43:23 2018
New Revision: 336246
URL: https://svnweb.freebsd.org/changeset/base/336246
Log:
Eliminate boot loader copies of boot arg parsing.
Eliminate 4 of the copies of the arg parsing in /boot/laoder
by using boot_parse_cmdline.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D16205
Modified:
head/stand/common/metadata.c
head/stand/efi/loader/main.c
head/stand/i386/libi386/bootinfo.c
head/stand/userboot/userboot/bootinfo.c
Modified: head/stand/common/metadata.c
==============================================================================
--- head/stand/common/metadata.c Fri Jul 13 16:43:17 2018 (r336245)
+++ head/stand/common/metadata.c Fri Jul 13 16:43:23 2018 (r336246)
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <sys/param.h>
#include <sys/linker.h>
+#include <sys/boot.h>
#include <sys/reboot.h>
#if defined(LOADER_FDT_SUPPORT)
#include <fdt_platform.h>
@@ -96,61 +97,10 @@ md_bootserial(void)
static int
md_getboothowto(char *kargs)
{
- char *cp;
int howto;
- int active;
/* 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++;
- }
- }
-
+ howto = boot_parse_cmdline(kargs);
howto |= bootenv_flags();
#if defined(__sparc64__)
if (md_bootserial() != -1)
Modified: head/stand/efi/loader/main.c
==============================================================================
--- head/stand/efi/loader/main.c Fri Jul 13 16:43:17 2018 (r336245)
+++ head/stand/efi/loader/main.c Fri Jul 13 16:43:23 2018 (r336246)
@@ -420,79 +420,10 @@ parse_args(int argc, CHAR16 *argv[], bool has_kbd)
*/
howto = 0;
for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- for (j = 1; argv[i][j] != 0; j++) {
- int ch;
-
- ch = argv[i][j];
- switch (ch) {
- case 'a':
- howto |= RB_ASKNAME;
- break;
- case 'd':
- howto |= RB_KDB;
- break;
- case 'D':
- howto |= RB_MULTIPLE;
- break;
- case 'h':
- howto |= RB_SERIAL;
- break;
- case 'm':
- howto |= RB_MUTE;
- break;
- case 'p':
- howto |= RB_PAUSE;
- break;
- case 'P':
- if (!has_kbd)
- howto |= RB_SERIAL | RB_MULTIPLE;
- break;
- case 'r':
- howto |= RB_DFLTROOT;
- break;
- case 's':
- howto |= RB_SINGLE;
- break;
- case 'S':
- if (argv[i][j + 1] == 0) {
- if (i + 1 == argc) {
- setenv("comconsole_speed", "115200", 1);
- } else {
- cpy16to8(&argv[i + 1][0], var,
- sizeof(var));
- setenv("comconsole_speed", var, 1);
- }
- i++;
- break;
- } else {
- cpy16to8(&argv[i][j + 1], var,
- sizeof(var));
- setenv("comconsole_speed", var, 1);
- break;
- }
- case 'v':
- howto |= RB_VERBOSE;
- break;
- }
- }
- } else {
- vargood = false;
- for (j = 0; argv[i][j] != 0; j++) {
- if (j == sizeof(var)) {
- vargood = false;
- break;
- }
- if (j > 0 && argv[i][j] == '=')
- vargood = true;
- var[j] = (char)argv[i][j];
- }
- if (vargood) {
- var[j] = 0;
- putenv(var);
- }
- }
+ cpy16to8(argv[i], var, sizeof(var));
+ howto |= boot_parse_arg(var);
}
+
return (howto);
}
Modified: head/stand/i386/libi386/bootinfo.c
==============================================================================
--- head/stand/i386/libi386/bootinfo.c Fri Jul 13 16:43:17 2018 (r336245)
+++ head/stand/i386/libi386/bootinfo.c Fri Jul 13 16:43:23 2018 (r336246)
@@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <sys/param.h>
#include <sys/reboot.h>
+#include <sys/boot.h>
#include <sys/linker.h>
#include "bootstrap.h"
#include "libi386.h"
@@ -38,62 +39,11 @@ __FBSDID("$FreeBSD$");
int
bi_getboothowto(char *kargs)
{
- char *cp;
char *curpos, *next, *string;
int howto;
- int active;
int vidconsole;
- /* 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++;
- }
- }
+ howto = boot_parse_cmdline(kargs);
howto |= bootenv_flags();
/* Enable selected consoles */
Modified: head/stand/userboot/userboot/bootinfo.c
==============================================================================
--- head/stand/userboot/userboot/bootinfo.c Fri Jul 13 16:43:17 2018 (r336245)
+++ head/stand/userboot/userboot/bootinfo.c Fri Jul 13 16:43:23 2018 (r336246)
@@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <sys/param.h>
#include <sys/reboot.h>
+#include <sys/boot.h>
#include <sys/linker.h>
#include "bootstrap.h"
@@ -38,63 +39,11 @@ __FBSDID("$FreeBSD$");
int
bi_getboothowto(char *kargs)
{
- char *cp;
char *curpos, *next, *string;
int howto;
- int active;
int vidconsole;
- /* 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++;
- }
- }
-
+ howto = boot_parse_cmdline(kargs);
howto |= bootenv_flags();
/* Enable selected consoles */
@@ -117,7 +66,8 @@ bi_getboothowto(char *kargs)
/*
* XXX: Note that until the kernel is ready to respect multiple consoles
- * for the boot messages, the first named console is the primary console
+ * for the messages from /etc/rc, the first named console is the primary
+ * console
*/
if (!strcmp(string, "vidconsole"))
howto &= ~RB_SERIAL;
More information about the svn-src-head
mailing list