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;