svn commit: r199210 - head/sys/boot/common

Attilio Rao attilio at FreeBSD.org
Thu Nov 12 01:30:18 UTC 2009


Author: attilio
Date: Thu Nov 12 01:30:17 2009
New Revision: 199210
URL: http://svn.freebsd.org/changeset/base/199210

Log:
  Introduce a new option (BOOT_PROMPT_123) that lets enter the boot prompt
  only when typing the sequence "123" (opposite to the standard 'push any
  button' approach).
  That results useful when using serial lines sending garbage and leading
  to unwilling boot prompt appearence.
  
  Obtained from:	Sandvine Incorporated
  Reviewed by:	emaste, jhb
  Sponsored by:	Sandvine Incorporated
  MFC:		1 week

Modified:
  head/sys/boot/common/Makefile.inc
  head/sys/boot/common/boot.c

Modified: head/sys/boot/common/Makefile.inc
==============================================================================
--- head/sys/boot/common/Makefile.inc	Thu Nov 12 00:52:14 2009	(r199209)
+++ head/sys/boot/common/Makefile.inc	Thu Nov 12 01:30:17 2009	(r199210)
@@ -38,4 +38,8 @@ MAN+=	../forth/loader.conf.5
 MAN+=	../forth/loader.4th.8
 .endif
 
+.if defined(BOOT_PROMPT_123)
+CFLAGS+=	-DBOOT_PROMPT_123
+.endif
+
 MAN+=	loader.8

Modified: head/sys/boot/common/boot.c
==============================================================================
--- head/sys/boot/common/boot.c	Thu Nov 12 00:52:14 2009	(r199209)
+++ head/sys/boot/common/boot.c	Thu Nov 12 01:30:17 2009	(r199210)
@@ -162,6 +162,9 @@ autoboot(int timeout, char *prompt)
     int		c, yes;
     char	*argv[2], *cp, *ep;
     char	*kernelname;
+#ifdef BOOT_PROMPT_123
+    const char	*seq = "123", *p = seq;
+#endif
 
     autoboot_tried = 1;
 
@@ -192,14 +195,29 @@ autoboot(int timeout, char *prompt)
 
         yes = 0;
 
+#ifdef BOOT_PROMPT_123
+        printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or "
+	    "1 2 3 sequence for command prompt." : prompt);
+#else
         printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or any other key for command prompt." : prompt);
+#endif
 
         for (;;) {
 	    if (ischar()) {
 	        c = getchar();
+#ifdef BOOT_PROMPT_123
+		if ((c == '\r') || (c == '\n')) {
+			yes = 1;
+			break;
+		} else if (c != *p++)
+			p = seq;
+		if (*p == 0)
+			break;
+#else
 	        if ((c == '\r') || (c == '\n'))
 		    yes = 1;
 	        break;
+#endif
 	    }
 	    ntime = time(NULL);
 	    if (ntime >= when) {


More information about the svn-src-head mailing list