Module Name:    src
Committed By:   nia
Date:           Tue Sep  7 11:41:32 UTC 2021

Modified Files:
        src/sys/arch/i386/stand/boot: boot2.c
        src/sys/arch/i386/stand/efiboot: boot.c efiboot.h
        src/sys/arch/i386/stand/pxeboot: main.c
        src/sys/lib/libsa: bootcfg.c bootcfg.h
        src/sys/stand/efiboot: boot.c efiboot.h

Log Message:
Remove banner printing code from bootloaders, add it to libsa.

This harmonizes efiboot and the various x86 bootloaders to use shared
code for printing the banner. By friendly coincidence, it also adds
support for specifying 'banner=' in arm efiboot's boot.cfg, as on x86.


To generate a diff of this commit:
cvs rdiff -u -r1.77 -r1.78 src/sys/arch/i386/stand/boot/boot2.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/i386/stand/efiboot/boot.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/i386/stand/efiboot/efiboot.h
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/i386/stand/pxeboot/main.c
cvs rdiff -u -r1.6 -r1.7 src/sys/lib/libsa/bootcfg.c
cvs rdiff -u -r1.4 -r1.5 src/sys/lib/libsa/bootcfg.h
cvs rdiff -u -r1.35 -r1.36 src/sys/stand/efiboot/boot.c
cvs rdiff -u -r1.15 -r1.16 src/sys/stand/efiboot/efiboot.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/i386/stand/boot/boot2.c
diff -u src/sys/arch/i386/stand/boot/boot2.c:1.77 src/sys/arch/i386/stand/boot/boot2.c:1.78
--- src/sys/arch/i386/stand/boot/boot2.c:1.77	Mon Jun 21 19:52:17 2021
+++ src/sys/arch/i386/stand/boot/boot2.c	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot2.c,v 1.77 2021/06/21 19:52:17 nia Exp $	*/
+/*	$NetBSD: boot2.c,v 1.78 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -121,7 +121,6 @@ static const char *default_part_name;
 
 char *sprint_bootsel(const char *);
 static void bootit(const char *, int);
-void print_banner(void);
 void boot2(int, uint64_t);
 
 void	command_help(char *);
@@ -298,35 +297,6 @@ bootit(const char *filename, int howto)
 		printf("boot returned\n");
 }
 
-void
-print_banner(void)
-{
-
-	clearit();
-#ifndef SMALL
-	int n;
-	if (bootcfg_info.banner[0]) {
-		for (n = 0; n < BOOTCFG_MAXBANNER && bootcfg_info.banner[n];
-		    n++) 
-			printf("%s\n", bootcfg_info.banner[n]);
-	} else {
-#endif /* !SMALL */
-		printf("\n"
-		       "  \\-__,------,___.\n"
-		       "   \\        __,---`  %s (from NetBSD %s)\n"
-		       "    \\       `---,_.  Revision %s\n"
-		       "     \\-,_____,.---`  Memory: %d/%d k\n"
-		       "      \\\n"
-		       "       \\\n"
-		       "        \\\n",
-		       bootprog_name, bootprog_kernrev,
-		       bootprog_rev,
-		       getbasemem(), getextmem());
-#ifndef SMALL
-	}
-#endif /* !SMALL */
-}
-
 /*
  * Called from the initial entry point boot_start in biosboot.S
  *
@@ -379,10 +349,12 @@ boot2(int biosdev, uint64_t biossector)
 	 * If console set in boot.cfg, switch to it.
 	 * This will print the banner, so we don't need to explicitly do it
 	 */
-	if (bootcfg_info.consdev)
+	if (bootcfg_info.consdev) {
 		command_consdev(bootcfg_info.consdev);
-	else 
-		print_banner();
+	} else {
+		clearit();
+		print_bootcfg_banner(bootprog_name, bootprog_rev);
+	}
 
 	/* Display the menu, if applicable */
 	twiddle_toggle = 0;
@@ -393,7 +365,8 @@ boot2(int biosdev, uint64_t biossector)
 
 #else
 	twiddle_toggle = 0;
-	print_banner();
+	clearit();
+	print_bootcfg_banner(bootprog_name, bootprog_rev);
 #endif
 
 	printf("Press return to boot now, any other key for boot menu\n");
@@ -616,7 +589,8 @@ command_consdev(char *arg)
 		}
 
 		initio(cdp->tag);
-		print_banner();
+		clearit();
+		print_bootcfg_banner(bootprog_name, bootprog_rev);
 		return;
 	}
 error:

Index: src/sys/arch/i386/stand/efiboot/boot.c
diff -u src/sys/arch/i386/stand/efiboot/boot.c:1.19 src/sys/arch/i386/stand/efiboot/boot.c:1.20
--- src/sys/arch/i386/stand/efiboot/boot.c:1.19	Tue Jun 22 19:53:58 2021
+++ src/sys/arch/i386/stand/efiboot/boot.c	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot.c,v 1.19 2021/06/22 19:53:58 nia Exp $	*/
+/*	$NetBSD: boot.c,v 1.20 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -278,31 +278,6 @@ bootit(const char *filename, int howto)
 }
 
 void
-print_banner(void)
-{
-	int n;
-
-	clearit();
-	if (bootcfg_info.banner[0]) {
-		for (n = 0; n < BOOTCFG_MAXBANNER && bootcfg_info.banner[n];
-		    n++)
-			printf("%s\n", bootcfg_info.banner[n]);
-	} else {
-		printf("\n"
-		   "  \\-__,------,___.\n"
-		   "   \\        __,---`  %s (from NetBSD %s)\n"
-		   "    \\       `---,_.  Revision %s\n"
-		   "     \\-,_____,.---`  Memory: %d/%d k\n"
-		   "      \\\n"  
-		   "       \\\n"
-		   "        \\\n",
-		   bootprog_name, bootprog_kernrev,
-		   bootprog_rev,               
-		   getbasemem(), getextmem());
-	}
-}
-
-void
 boot(void)
 {
 	int currname;
@@ -344,10 +319,12 @@ boot(void)
 	 * If console set in boot.cfg, switch to it.
 	 * This will print the banner, so we don't need to explicitly do it
 	 */
-	if (bootcfg_info.consdev)
+	if (bootcfg_info.consdev) {
 		command_consdev(bootcfg_info.consdev);
-	else
-		print_banner();
+	} else {
+		clearit();
+		print_bootcfg_banner(bootprog_name, bootprog_rev);
+	}
 
 	/* Display the menu, if applicable */
 	twiddle_toggle = 0;
@@ -602,7 +579,8 @@ command_consdev(char *arg)
 				}
 			}
 			efi_consinit(cdp->tag, ioport, speed);
-			print_banner();
+			clearit();
+			print_bootcfg_banner(bootprog_name, bootprog_rev);
 			return;
 		}
 	}

Index: src/sys/arch/i386/stand/efiboot/efiboot.h
diff -u src/sys/arch/i386/stand/efiboot/efiboot.h:1.10 src/sys/arch/i386/stand/efiboot/efiboot.h:1.11
--- src/sys/arch/i386/stand/efiboot/efiboot.h:1.10	Fri Sep 13 02:19:45 2019
+++ src/sys/arch/i386/stand/efiboot/efiboot.h	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: efiboot.h,v 1.10 2019/09/13 02:19:45 manu Exp $	*/
+/*	$NetBSD: efiboot.h,v 1.11 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -41,7 +41,6 @@ extern EFI_GUID GraphicsOutputProtocol;
 /* boot.c */
 void boot(void);
 void clearit(void);
-void print_banner(void);
 
 /* efiboot.c */
 extern EFI_HANDLE IH;

Index: src/sys/arch/i386/stand/pxeboot/main.c
diff -u src/sys/arch/i386/stand/pxeboot/main.c:1.31 src/sys/arch/i386/stand/pxeboot/main.c:1.32
--- src/sys/arch/i386/stand/pxeboot/main.c:1.31	Sat Jun 28 09:16:18 2014
+++ src/sys/arch/i386/stand/pxeboot/main.c	Tue Sep  7 11:41:32 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.31 2014/06/28 09:16:18 rtr Exp $	*/
+/*	$NetBSD: main.c,v 1.32 2021/09/07 11:41:32 nia Exp $	*/
 
 /*
  * Copyright (c) 1996
@@ -106,20 +106,6 @@ bootit(const char *filename, int howto)
 	return (-1);
 }
 
-static void
-print_banner(void)
-{
-	int base = getbasemem();
-	int ext = getextmem();
-
-	clearit();
-	printf("\n"
-	       ">> NetBSD/x86 PXE boot, Revision %s (from NetBSD %s)\n"
-	       ">> Memory: %d/%d k\n",
-	       bootprog_rev, bootprog_kernrev,
-	       base, ext);
-}
-
 int
 main(void)
 {
@@ -148,10 +134,12 @@ main(void)
 	 * If console set in boot.cfg, switch to it.
 	 * This will print the banner, so we don't need to explicitly do it
 	 */
-	if (bootcfg_info.consdev)
+	if (bootcfg_info.consdev) {
 		command_consdev(bootcfg_info.consdev);
-	else 
-		print_banner();
+	} else {
+		clearit();
+		print_bootcfg_banner(bootprog_name, bootprog_rev);
+	}
 
 	/* Display the menu, if applicable */
 	twiddle_toggle = 0;
@@ -161,7 +149,8 @@ main(void)
 	}
 #else
 	twiddle_toggle = 0;
-	print_banner();
+	clearit();
+	print_bootcfg_banner(bootprog_name, bootprog_rev);
 #endif
 
 	printf("Press return to boot now, any other key for boot menu\n");
@@ -254,7 +243,8 @@ command_consdev(char *arg)
 	for (cdp = cons_devs; cdp->name; cdp++) {
 		if (!strcmp(arg, cdp->name)) {
 			initio(cdp->tag);
-			print_banner();
+			clearit();
+			print_bootcfg_banner(bootprog_name, bootprog_rev);
 			return;
 		}
 	}

Index: src/sys/lib/libsa/bootcfg.c
diff -u src/sys/lib/libsa/bootcfg.c:1.6 src/sys/lib/libsa/bootcfg.c:1.7
--- src/sys/lib/libsa/bootcfg.c:1.6	Sun May 30 05:59:23 2021
+++ src/sys/lib/libsa/bootcfg.c	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: bootcfg.c,v 1.6 2021/05/30 05:59:23 mlelstv Exp $	*/
+/*	$NetBSD: bootcfg.c,v 1.7 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -278,3 +278,26 @@ perform_bootcfg(const char *conf, bootcf
 
 	return 0;
 }
+
+void
+print_bootcfg_banner(const char *bootprog_name, const char *bootprog_rev)
+{
+	int n = 0;
+
+	if (bootcfg_info.banner[0]) {  
+		for (; n < BOOTCFG_MAXBANNER && bootcfg_info.banner[n]; n++) 
+			printf("%s\n", bootcfg_info.banner[n]);
+		return;
+	}
+
+	/* If the user has not specified a banner, print a default one. */
+
+	printf("\n");
+	printf("  \\\\-__,------,___.\n");
+	printf("   \\\\        __,---`  %s\n", bootprog_name);
+	printf("    \\\\       `---,_.  Revision %s\n", bootprog_rev);
+	printf("     \\\\-,_____,.---`\n");
+	printf("      \\\\\n");
+	printf("       \\\\\n");
+	printf("        \\\\\n\n");
+}

Index: src/sys/lib/libsa/bootcfg.h
diff -u src/sys/lib/libsa/bootcfg.h:1.4 src/sys/lib/libsa/bootcfg.h:1.5
--- src/sys/lib/libsa/bootcfg.h:1.4	Sun May 30 05:59:23 2021
+++ src/sys/lib/libsa/bootcfg.h	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: bootcfg.h,v 1.4 2021/05/30 05:59:23 mlelstv Exp $	*/
+/*	$NetBSD: bootcfg.h,v 1.5 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -54,5 +54,6 @@ extern struct bootcfg_def bootcfg_info;
 
 int perform_bootcfg(const char *, bootcfg_command, const off_t);
 void bootcfg_do_noop(const char *, char *);
+void print_bootcfg_banner(const char *, const char *);
 
 #endif /* !_BOOTCFG_H */

Index: src/sys/stand/efiboot/boot.c
diff -u src/sys/stand/efiboot/boot.c:1.35 src/sys/stand/efiboot/boot.c:1.36
--- src/sys/stand/efiboot/boot.c:1.35	Sat Jul 24 10:22:28 2021
+++ src/sys/stand/efiboot/boot.c	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot.c,v 1.35 2021/07/24 10:22:28 jmcneill Exp $	*/
+/*	$NetBSD: boot.c,v 1.36 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -451,61 +451,6 @@ set_bootargs(const char *arg)
 	return 0;
 }
 
-static void
-get_memory_info(uint64_t *ptotal)
-{
-	EFI_MEMORY_DESCRIPTOR *md, *memmap;
-	UINTN nentries, mapkey, descsize;
-	UINT32 descver;
-	uint64_t totalpg = 0;
-	int n;
-
-	memmap = LibMemoryMap(&nentries, &mapkey, &descsize, &descver);
-	for (n = 0, md = memmap; n < nentries; n++, md = NextMemoryDescriptor(md, descsize)) {
-		if ((md->Attribute & EFI_MEMORY_WB) == 0) {
-			continue;
-		}
-		totalpg += md->NumberOfPages;
-	}
-
-	*ptotal = totalpg * EFI_PAGE_SIZE;
-}
-
-static void
-format_bytes(uint64_t val, uint64_t *pdiv, const char **punit)
-{
-	static const char *units[] = { "KB", "MB", "GB" };
-	unsigned n;
-
-	*punit = "bytes";
-	*pdiv = 1;
-
-	for (n = 0; n < __arraycount(units) && val >= 1024 * 10; n++) {
-		*punit = units[n];
-		*pdiv *= 1024;
-		val /= 1024;
-	}
-}
-
-void
-print_banner(void)
-{
-	const char *total_unit;
-	uint64_t total, total_div;
-
-	get_memory_info(&total);
-	format_bytes(total, &total_div, &total_unit);
-
-	printf("  \\-__,------,___.\n");
-	printf("   \\        __,---`  %s\n", bootprog_name);
-	printf("    \\       `---,_.  Revision %s\n", bootprog_rev);
-	printf("     \\-,_____,.---`  Memory: %" PRIu64 " %s\n",
-	    total / total_div, total_unit);
-	printf("      \\\n");
-	printf("       \\\n");
-	printf("        \\\n\n");
-}
-
 void
 boot(void)
 {
@@ -520,7 +465,7 @@ boot(void)
 	if (bootcfg_info.clear)
 		uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
 
-	print_banner();
+	print_bootcfg_banner(bootprog_name, bootprog_rev);
 
 	/* Display menu if configured */
 	if (bootcfg_info.nummenu > 0) {

Index: src/sys/stand/efiboot/efiboot.h
diff -u src/sys/stand/efiboot/efiboot.h:1.15 src/sys/stand/efiboot/efiboot.h:1.16
--- src/sys/stand/efiboot/efiboot.h:1.15	Sun Jun 20 19:10:47 2021
+++ src/sys/stand/efiboot/efiboot.h	Tue Sep  7 11:41:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: efiboot.h,v 1.15 2021/06/20 19:10:47 jmcneill Exp $	*/
+/*	$NetBSD: efiboot.h,v 1.16 2021/09/07 11:41:31 nia Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -51,7 +51,6 @@ extern struct fs_ops nfs_fs_ops;
 /* boot.c */
 void boot(void);
 void clearit(void);
-void print_banner(void);
 extern const struct boot_command commands[];
 void command_help(char *);
 int set_default_device(const char *);

Reply via email to