Module Name:    src
Committed By:   jmcneill
Date:           Fri Aug 30 16:42:17 UTC 2013

Modified Files:
        src/sys/arch/i386/stand/boot: boot2.c
        src/sys/arch/i386/stand/lib: bootmod.h exec.c libi386.h
        src/sys/arch/x86/include: bootinfo.h
        src/sys/arch/x86/x86: x86_machdep.c

Log Message:
Add support for using a raw file-system image as memory disk root with
the x86 bootloader.


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/sys/arch/i386/stand/boot/boot2.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/i386/stand/lib/bootmod.h
cvs rdiff -u -r1.50 -r1.51 src/sys/arch/i386/stand/lib/exec.c
cvs rdiff -u -r1.38 -r1.39 src/sys/arch/i386/stand/lib/libi386.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/x86/include/bootinfo.h
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/x86/x86/x86_machdep.c

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.59 src/sys/arch/i386/stand/boot/boot2.c:1.60
--- src/sys/arch/i386/stand/boot/boot2.c:1.59	Sun Jul 28 08:50:09 2013
+++ src/sys/arch/i386/stand/boot/boot2.c	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot2.c,v 1.59 2013/07/28 08:50:09 he Exp $	*/
+/*	$NetBSD: boot2.c,v 1.60 2013/08/30 16:42:17 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -143,6 +143,7 @@ const struct bootblk_command commands[] 
 	{ "vesa",	command_vesa },
 	{ "splash",	splash_add },
 	{ "rndseed",	rnd_add },
+	{ "fs",		fs_add },
 	{ "userconf",	userconf_add },
 	{ NULL,		NULL },
 };

Index: src/sys/arch/i386/stand/lib/bootmod.h
diff -u src/sys/arch/i386/stand/lib/bootmod.h:1.5 src/sys/arch/i386/stand/lib/bootmod.h:1.6
--- src/sys/arch/i386/stand/lib/bootmod.h:1.5	Mon Nov 28 07:56:54 2011
+++ src/sys/arch/i386/stand/lib/bootmod.h	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bootmod.h,v 1.5 2011/11/28 07:56:54 tls Exp $	*/
+/*	$NetBSD: bootmod.h,v 1.6 2013/08/30 16:42:17 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2008 Jared D. McNeill <jmcne...@invisible.ca>
@@ -36,6 +36,7 @@ typedef struct boot_module {
 #define	BM_TYPE_KMOD		0x00
 #define	BM_TYPE_IMAGE		0x01
 #define BM_TYPE_RND		0x02
+#define BM_TYPE_FS		0x03
 	struct boot_module	*bm_next;
 } boot_module_t;
 

Index: src/sys/arch/i386/stand/lib/exec.c
diff -u src/sys/arch/i386/stand/lib/exec.c:1.50 src/sys/arch/i386/stand/lib/exec.c:1.51
--- src/sys/arch/i386/stand/lib/exec.c:1.50	Mon May 21 21:34:16 2012
+++ src/sys/arch/i386/stand/lib/exec.c	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec.c,v 1.50 2012/05/21 21:34:16 dsl Exp $	 */
+/*	$NetBSD: exec.c,v 1.51 2013/08/30 16:42:17 jmcneill Exp $	 */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -177,6 +177,12 @@ rnd_add(char *name)
 	return module_add_common(name, BM_TYPE_RND);
 }
 
+void
+fs_add(char *name)
+{
+	return module_add_common(name, BM_TYPE_FS);
+}
+
 static void
 module_add_common(char *name, uint8_t type)
 {
@@ -591,6 +597,9 @@ module_init(const char *kernel_path)
 			    case BM_TYPE_IMAGE:
 				bi->type = BI_MODULE_IMAGE;
 				break;
+			    case BM_TYPE_FS:
+				bi->type = BI_MODULE_FS;
+				break;
 			    case BM_TYPE_RND:
 			    default:
 				/* safest -- rnd checks the sha1 */

Index: src/sys/arch/i386/stand/lib/libi386.h
diff -u src/sys/arch/i386/stand/lib/libi386.h:1.38 src/sys/arch/i386/stand/lib/libi386.h:1.39
--- src/sys/arch/i386/stand/lib/libi386.h:1.38	Mon Nov 28 07:56:54 2011
+++ src/sys/arch/i386/stand/lib/libi386.h	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: libi386.h,v 1.38 2011/11/28 07:56:54 tls Exp $	*/
+/*	$NetBSD: libi386.h,v 1.39 2013/08/30 16:42:17 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 1996
@@ -139,6 +139,7 @@ extern int doserrno;	/* in dos_file.S */
 void module_add(char *);
 void splash_add(char *);
 void rnd_add(char *);
+void fs_add(char *);
 void userconf_add(char *);
 
 struct btinfo_framebuffer;

Index: src/sys/arch/x86/include/bootinfo.h
diff -u src/sys/arch/x86/include/bootinfo.h:1.22 src/sys/arch/x86/include/bootinfo.h:1.23
--- src/sys/arch/x86/include/bootinfo.h:1.22	Thu May 16 19:06:45 2013
+++ src/sys/arch/x86/include/bootinfo.h	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bootinfo.h,v 1.22 2013/05/16 19:06:45 christos Exp $	*/
+/*	$NetBSD: bootinfo.h,v 1.23 2013/08/30 16:42:17 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 1997
@@ -176,6 +176,7 @@ struct bi_modulelist_entry {
 #define	BI_MODULE_ELF		0x01
 #define	BI_MODULE_IMAGE		0x02
 #define BI_MODULE_RND		0x03
+#define BI_MODULE_FS		0x04
 
 struct btinfo_modulelist {
 	struct btinfo_common common;

Index: src/sys/arch/x86/x86/x86_machdep.c
diff -u src/sys/arch/x86/x86/x86_machdep.c:1.58 src/sys/arch/x86/x86/x86_machdep.c:1.59
--- src/sys/arch/x86/x86/x86_machdep.c:1.58	Fri Apr 12 16:59:40 2013
+++ src/sys/arch/x86/x86/x86_machdep.c	Fri Aug 30 16:42:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: x86_machdep.c,v 1.58 2013/04/12 16:59:40 christos Exp $	*/
+/*	$NetBSD: x86_machdep.c,v 1.59 2013/08/30 16:42:17 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi,
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.58 2013/04/12 16:59:40 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.59 2013/08/30 16:42:17 jmcneill Exp $");
 
 #include "opt_modular.h"
 #include "opt_physmem.h"
@@ -73,6 +73,11 @@ __KERNEL_RCSID(0, "$NetBSD: x86_machdep.
 #include <dev/acpi/acpivar.h>
 #endif
 
+#include "opt_md.h"
+#ifdef MEMORY_DISK_HOOKS
+#include <dev/md.h>
+#endif
+
 void (*x86_cpu_idle)(void);
 static bool x86_cpu_idle_ipi;
 static char x86_cpu_idle_text[16];
@@ -182,6 +187,15 @@ module_init_md(void)
 			    (void *)((uintptr_t)bi->base + KERNBASE),
 			     bi->len);
 			break;
+		case BI_MODULE_FS:
+			aprint_debug("File-system image path=%s len=%d pa=%x\n",
+			    bi->path, bi->len, bi->base);
+			KASSERT(trunc_page(bi->base) == bi->base);
+#ifdef MEMORY_DISK_HOOKS
+			md_root_setconf((void *)((uintptr_t)bi->base + KERNBASE),
+			    bi->len);
+#endif
+			break;		
 		default:
 			aprint_debug("Skipping non-ELF module\n");
 			break;

Reply via email to