Index: sys/conf/files
===================================================================
RCS file: /cvsroot/src/sys/conf/files,v
retrieving revision 1.924
diff -u -r1.924 files
--- sys/conf/files	15 Oct 2008 06:51:20 -0000	1.924
+++ sys/conf/files	2 Nov 2008 13:25:04 -0000
@@ -254,6 +254,9 @@
 
 defflag opt_tftproot.h		TFTPROOT TFTPROOT_DEBUG
 
+# boot verbosity options
+defparam opt_verbosity.h		BOOT_VERBOSITY
+
 # Support for hardware performance monitoring counters
 #
 defflag	opt_perfctrs.h		PERFCTRS
Index: sys/kern/init_main.c
===================================================================
RCS file: /cvsroot/src/sys/kern/init_main.c,v
retrieving revision 1.371
diff -u -r1.371 init_main.c
--- sys/kern/init_main.c	28 Oct 2008 15:33:10 -0000	1.371
+++ sys/kern/init_main.c	2 Nov 2008 13:25:05 -0000
@@ -331,6 +331,8 @@
 	l->l_cpu = curcpu();
 #endif
 
+	BOOTHOWTO_SET_VERBOSITY(boothowto);
+
 	/*
 	 * Attempt to find console and initialize
 	 * in case of early panic or other messages.
Index: sys/sys/boot_flag.h
===================================================================
RCS file: /cvsroot/src/sys/sys/boot_flag.h,v
retrieving revision 1.7
diff -u -r1.7 boot_flag.h
--- sys/sys/boot_flag.h	29 Apr 2008 19:16:08 -0000	1.7
+++ sys/sys/boot_flag.h	2 Nov 2008 13:25:05 -0000
@@ -67,6 +67,9 @@
 	case 'm': /* mini root present in memory */		\
 		(retval) |= RB_MINIROOT;			\
 		break;						\
+	case 'n': /* force boot normally */			\
+		(retval) |= AB_FORCENORMAL;				\
+		break;						\
 	case 'q': /* boot quietly */				\
 		(retval) |= AB_QUIET;				\
 		break;						\
Index: sys/sys/reboot.h
===================================================================
RCS file: /cvsroot/src/sys/sys/reboot.h,v
retrieving revision 1.25
diff -u -r1.25 reboot.h
--- sys/sys/reboot.h	25 Dec 2007 18:33:48 -0000	1.25
+++ sys/sys/reboot.h	2 Nov 2008 13:25:05 -0000
@@ -63,6 +63,9 @@
 #define	AB_VERBOSE	0x00020000	/* boot verbosely */
 #define	AB_SILENT	0x00040000	/* boot silently */
 #define	AB_DEBUG	0x00080000	/* boot with debug messages */
+#define	AB_FORCENORMAL	0x00100000	/* force normal boot */
+
+#define AB_VERBOSE_ALL	(AB_QUIET|AB_VERBOSE|AB_SILENT|AB_DEBUG)
 
 /*
  * The top 4 bits are architecture specific and are used to
Index: sys/sys/systm.h
===================================================================
RCS file: /cvsroot/src/sys/sys/systm.h,v
retrieving revision 1.228
diff -u -r1.228 systm.h
--- sys/sys/systm.h	23 Sep 2008 22:20:24 -0000	1.228
+++ sys/sys/systm.h	2 Nov 2008 13:25:06 -0000
@@ -42,6 +42,7 @@
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
 #include "opt_multiprocessor.h"
+#include "opt_verbosity.h"
 #endif
 
 #include <machine/endian.h>
@@ -134,6 +135,32 @@
 #define	bootverbose	(boothowto & AB_VERBOSE)
 #define	bootquiet	(boothowto & AB_QUIET)
 
+/*
+ * BOOTHOWTO_SET_VERBOSITY() processes boothowto to allow the boot verbosity
+ * to be hardwired in a kernel configuration with the BOOT_VERBOSITY
+ * option, yet potentially it to be overridden with the -n boot flag (which
+ * corresponds to AB_FORCENORMAL). If AB_FORCENORMAL is set in the kernel
+ * configuration, then the bootloader will not be able to override the
+ * hardwired settings.
+ */
+ 
+#ifdef BOOT_VERBOSITY
+#define	BOOTHOWTO_SET_VERBOSITY(h) do {					\
+	if ((BOOT_VERBOSITY) & AB_FORCENORMAL) {			\
+		(h) &= ~AB_VERBOSE_ALL;					\
+		(h) |= (BOOT_VERBOSITY);				\
+	} else if ((h) & AB_FORCENORMAL) {				\
+		(h) &= ~AB_VERBOSE_ALL;					\
+	} else								\
+		(h) |= (BOOT_VERBOSITY);				\
+	} while (/* CONSTCOND */ 0)
+#else
+#define	BOOTHOWTO_SET_VERBOSITY(h) do {					\
+	if ((h) & AB_FORCENORMAL)						\
+		(h) &= ~AB_VERBOSE_ALL;					\
+	} while (/* CONSTCOND */ 0)
+#endif /* BOOT_VERBOSITY */
+
 extern void (*v_putc)(int); /* Virtual console putc routine */
 
 /*
