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 <[email protected]>
@@ -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;