Module Name:    src
Committed By:   jmcneill
Date:           Sat Jan  7 18:10:18 UTC 2012

Modified Files:
        src/sys/arch/usermode/conf: GENERIC.common
        src/sys/arch/usermode/dev: mainbus.c
        src/sys/arch/usermode/usermode: machdep.c

Log Message:
support multiple disk images (pass multiple disk=<path> parameters on the
command-line). while changing command-line params, rename tap= option to
net=


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/usermode/conf/GENERIC.common
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/usermode/dev/mainbus.c
cvs rdiff -u -r1.49 -r1.50 src/sys/arch/usermode/usermode/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/usermode/conf/GENERIC.common
diff -u src/sys/arch/usermode/conf/GENERIC.common:1.11 src/sys/arch/usermode/conf/GENERIC.common:1.12
--- src/sys/arch/usermode/conf/GENERIC.common:1.11	Wed Jan  4 14:04:12 2012
+++ src/sys/arch/usermode/conf/GENERIC.common	Sat Jan  7 18:10:18 2012
@@ -1,9 +1,9 @@
-# $NetBSD: GENERIC.common,v 1.11 2012/01/04 14:04:12 jmcneill Exp $
+# $NetBSD: GENERIC.common,v 1.12 2012/01/07 18:10:18 jmcneill Exp $
 
 include "arch/usermode/conf/std.usermode"
 
 options 	INCLUDE_CONFIG_FILE
-#ident 		"GENERIC-$Revision: 1.11 $"
+#ident 		"GENERIC-$Revision: 1.12 $"
 maxusers 	32
 
 makeoptions	DEBUG="-O1 -g3"
@@ -55,7 +55,7 @@ mainbus0	at root
 cpu0		at mainbus?
 clock0		at mainbus?
 ttycons0	at mainbus?
-ld0		at mainbus?
+ld*		at mainbus?
 veth0		at mainbus?
 vaudio0		at mainbus?
 audio0		at vaudio0

Index: src/sys/arch/usermode/dev/mainbus.c
diff -u src/sys/arch/usermode/dev/mainbus.c:1.8 src/sys/arch/usermode/dev/mainbus.c:1.9
--- src/sys/arch/usermode/dev/mainbus.c:1.8	Thu Dec 29 21:22:49 2011
+++ src/sys/arch/usermode/dev/mainbus.c	Sat Jan  7 18:10:18 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: mainbus.c,v 1.8 2011/12/29 21:22:49 jmcneill Exp $ */
+/* $NetBSD: mainbus.c,v 1.9 2012/01/07 18:10:18 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.8 2011/12/29 21:22:49 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.9 2012/01/07 18:10:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -50,7 +50,8 @@ typedef struct mainbus_softc {
 CFATTACH_DECL_NEW(mainbus, sizeof(mainbus_softc_t),
     mainbus_match, mainbus_attach, NULL, NULL);
 
-extern char *usermode_root_image_path;
+extern char *usermode_disk_image_path[];
+extern int usermode_disk_image_path_count;
 extern char *usermode_tap_device;
 extern char *usermode_tap_eaddr;
 extern char *usermode_audio_device;
@@ -68,6 +69,7 @@ mainbus_attach(device_t parent, device_t
 {
 	mainbus_softc_t *sc = device_private(self);
 	struct thunkbus_attach_args taa;
+	int i;
 
 	aprint_naive("\n");
 	aprint_normal("\n");
@@ -104,9 +106,9 @@ mainbus_attach(device_t parent, device_t
 		config_found_ia(self, "thunkbus", &taa, mainbus_print);
 	}
 
-	if (usermode_root_image_path) {
+	for (i = 0; i < usermode_disk_image_path_count; i++) {
 		taa.taa_type = THUNKBUS_TYPE_DISKIMAGE;
-		taa.u.diskimage.path = usermode_root_image_path;
+		taa.u.diskimage.path = usermode_disk_image_path[i];
 		config_found_ia(self, "thunkbus", &taa, mainbus_print);
 	}
 }

Index: src/sys/arch/usermode/usermode/machdep.c
diff -u src/sys/arch/usermode/usermode/machdep.c:1.49 src/sys/arch/usermode/usermode/machdep.c:1.50
--- src/sys/arch/usermode/usermode/machdep.c:1.49	Fri Jan  6 20:44:57 2012
+++ src/sys/arch/usermode/usermode/machdep.c	Sat Jan  7 18:10:18 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.49 2012/01/06 20:44:57 reinoud Exp $ */
+/* $NetBSD: machdep.c,v 1.50 2012/01/07 18:10:18 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2011 Reinoud Zandijk <rein...@netbsd.org>
@@ -37,7 +37,7 @@
 #include "opt_memsize.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.49 2012/01/06 20:44:57 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.50 2012/01/07 18:10:18 jmcneill Exp $");
 
 #include <sys/types.h>
 #include <sys/systm.h>
@@ -58,6 +58,10 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include <machine/machdep.h>
 #include <machine/thunk.h>
 
+#ifndef MAX_DISK_IMAGES
+#define MAX_DISK_IMAGES	4
+#endif
+
 char machine[_SYS_NMLN] = "";
 char machine_arch[_SYS_NMLN] = "";
 char module_machine_usermode[_SYS_NMLN] = "";
@@ -65,7 +69,10 @@ char module_machine_usermode[_SYS_NMLN] 
 struct vm_map *phys_map = NULL;
 
 static char **saved_argv;
-char *usermode_root_image_path = NULL;
+
+char *usermode_disk_image_path[MAX_DISK_IMAGES];
+int usermode_disk_image_path_count = 0;
+
 static char usermode_tap_devicebuf[PATH_MAX] = "";
 char *usermode_tap_device = NULL;
 char *usermode_tap_eaddr = NULL;
@@ -82,16 +89,16 @@ static void
 usage(const char *pn)
 {
 	printf("usage: %s [-acdqsvxz]"
-	    " [tap=<dev>,<eaddr>]"
-	    " [audio=<dev>]"
-	    " [vnc=<width>x<height>,<port>]"
-	    " [<fsimg>]\n",
+	    " [net=<tapdev>,<eaddr>]"
+	    " [audio=<audiodev>]"
+	    " [disk=<diskimg> ...]"
+	    " [vnc=<width>x<height>,<port>]\n",
 	    pn);
 	printf("       (ex. \"%s"
-	    " tap=tap0,00:00:be:ef:ca:fe"
+	    " net=tap0,00:00:be:ef:ca:fe"
 	    " audio=audio0"
-	    " vnc=640x480,5900"
-	    " root.fs\")\n", pn);
+	    " disk=root.fs"
+	    " vnc=640x480,5900\")\n", pn);
 }
 
 void
@@ -115,11 +122,11 @@ main(int argc, char *argv[])
 
 	for (i = 1; i < argc; i++) {
 		if (argv[i][0] != '-') {
-			if (strncmp(argv[i], "tap=", strlen("tap=")) == 0) {
-				char *tap = argv[i] + strlen("tap=");
+			if (strncmp(argv[i], "net=", strlen("net=")) == 0) {
+				char *tap = argv[i] + strlen("net=");
 				char *mac = strchr(tap, ',');
 				if (mac == NULL) {
-					printf("bad tap= format\n");
+					printf("bad net= format\n");
 					return;
 				}
 				*mac++ = '\0';
@@ -166,8 +173,22 @@ main(int argc, char *argv[])
 				usermode_vnc_width = strtoul(w, NULL, 10);
 				usermode_vnc_height = strtoul(h, NULL, 10);
 				usermode_vnc_port = strtoul(p, NULL, 10);
+			} else if (strncmp(argv[i], "disk=",
+			    strlen("disk=")) == 0) {
+				if (usermode_disk_image_path_count ==
+				    MAX_DISK_IMAGES) {
+					printf("too many disk images "
+					    "(increase MAX_DISK_IMAGES)\n");
+					usage(argv[0]);
+					return;
+				}
+				usermode_disk_image_path[
+				    usermode_disk_image_path_count++] =
+				    argv[i] + strlen("disk=");
 			} else {
-				usermode_root_image_path = argv[i];
+				printf("%s: unknown parameter\n", argv[i]);
+				usage(argv[0]);
+				return;
 			}
 			continue;
 		}

Reply via email to