From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HdLz2-0007dh-DE for qemu-devel@nongnu.org; Mon, 16 Apr 2007 03:50:44 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HdLz0-0007dV-T0 for qemu-devel@nongnu.org; Mon, 16 Apr 2007 03:50:44 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HdLz0-0007dR-Nu for qemu-devel@nongnu.org; Mon, 16 Apr 2007 03:50:42 -0400 Received: from bangui.magic.fr ([195.154.194.245]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1HdLuN-0006mw-V4 for qemu-devel@nongnu.org; Mon, 16 Apr 2007 03:45:57 -0400 Received: from [192.168.0.2] (ppp-36.net-723.magic.fr [80.118.184.36]) by bangui.magic.fr (8.13.1/8.13.1) with ESMTP id l3G7jhsM031440 for ; Mon, 16 Apr 2007 09:45:45 +0200 From: "J. Mayer" Content-Type: multipart/mixed; boundary="=-zslT1Qj3k8JjbOj6amnO" Date: Mon, 16 Apr 2007 09:45:40 +0200 Message-Id: <1176709540.6333.38.camel@rapid> Mime-Version: 1.0 Subject: [Qemu-devel] [RFC] Parallel flash support option Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --=-zslT1Qj3k8JjbOj6amnO Content-Type: text/plain Content-Transfer-Encoding: 7bit This patch adds a -pflash option to the Qemu command line. This seems needed to instanciate parallel NOR flashes using the pflash_cfi02 driver for embedded targets. Please comment. -- J. Mayer Never organized --=-zslT1Qj3k8JjbOj6amnO Content-Disposition: attachment; filename=pflash.diff Content-Type: text/x-patch; name=pflash.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: vl.c =================================================================== RCS file: /sources/qemu/qemu/vl.c,v retrieving revision 1.279 diff -u -d -d -p -r1.279 vl.c --- vl.c 6 Apr 2007 16:49:48 -0000 1.279 +++ vl.c 16 Apr 2007 07:42:10 -0000 @@ -138,6 +138,7 @@ IOPortWriteFunc *ioport_write_table[3][M /* Note: bs_table[MAX_DISKS] is a dummy block driver if none available to store the VM snapshots */ BlockDriverState *bs_table[MAX_DISKS + 1], *fd_table[MAX_FD]; +BlockDriverState *pflash_table[MAX_PFLASH]; BlockDriverState *sd_bdrv; /* point to the block driver where the snapshots are managed */ BlockDriverState *bs_snapshots; @@ -6347,6 +6348,7 @@ void help(void) "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n" "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n" "-sd file use 'file' as SecureDigital card image\n" + "-pflash file use 'file' as a parallel flash image\n" "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n" "-snapshot write to temporary files instead of disk image files\n" #ifdef CONFIG_SDL @@ -6485,6 +6487,7 @@ enum { QEMU_OPTION_hdd, QEMU_OPTION_cdrom, QEMU_OPTION_sd, + QEMU_OPTION_pflash, QEMU_OPTION_boot, QEMU_OPTION_snapshot, #ifdef TARGET_I386 @@ -6564,6 +6567,7 @@ const QEMUOption qemu_options[] = { { "hdd", HAS_ARG, QEMU_OPTION_hdd }, { "cdrom", HAS_ARG, QEMU_OPTION_cdrom }, { "sd", HAS_ARG, QEMU_OPTION_sd }, + { "pflash", HAS_ARG, QEMU_OPTION_pflash }, { "boot", HAS_ARG, QEMU_OPTION_boot }, { "snapshot", 0, QEMU_OPTION_snapshot }, #ifdef TARGET_I386 @@ -6847,10 +6854,11 @@ int main(int argc, char **argv) int use_gdbstub; const char *gdbstub_port; #endif - int i, cdrom_index; + int i, cdrom_index, pflash_index; int snapshot, linux_boot; const char *initrd_filename; const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD]; + const char *pflash_filename[MAX_PFLASH]; const char *sd_filename; const char *kernel_filename, *kernel_cmdline; DisplayState *ds = &display_state; @@ -6912,6 +6920,9 @@ int main(int argc, char **argv) fd_filename[i] = NULL; for(i = 0; i < MAX_DISKS; i++) hd_filename[i] = NULL; + for(i = 0; i < MAX_PFLASH; i++) + pflash_filename[i] = NULL; + pflash_index = 0; sd_filename = NULL; ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; vga_ram_size = VGA_RAM_SIZE; @@ -7034,6 +7045,13 @@ int main(int argc, char **argv) case QEMU_OPTION_sd: sd_filename = optarg; break; + case QEMU_OPTION_pflash: + if (pflash_index >= MAX_PFLASH) { + fprintf(stderr, "qemu: too many parallel flash images\n"); + exit(1); + } + pflash_filename[pflash_index++] = optarg; + break; case QEMU_OPTION_snapshot: snapshot = 1; break; @@ -7543,6 +7562,23 @@ int main(int argc, char **argv) } } + /* Open the virtual parallel flash bloc devices */ + for(i = 0; i < MAX_PFLASH; i++) { + if (pflash_filename[i]) { + if (!pflash_table[i]) { + char buf[64]; + snprintf(buf, sizeof(buf), "fl%c", i + 'a'); + pflash_table[i] = bdrv_new(buf); + } + if (bdrv_open(pflash_table[i], pflash_filename[i], + snapshot ? BDRV_O_SNAPSHOT : 0) < 0) { + fprintf(stderr, "qemu: could not open flash image '%s'\n", + pflash_filename[i]); + exit(1); + } + } + } + sd_bdrv = bdrv_new ("sd"); /* FIXME: This isn't really a floppy, but it's a reasonable approximation. */ Index: vl.h =================================================================== RCS file: /sources/qemu/qemu/vl.h,v retrieving revision 1.210 diff -u -d -d -p -r1.210 vl.h --- vl.h 12 Apr 2007 21:11:02 -0000 1.210 +++ vl.h 16 Apr 2007 07:42:10 -0000 @@ -1432,6 +1508,8 @@ int sh7750_register_io_device(struct SH7 int tc58128_init(struct SH7750State *s, char *zone1, char *zone2); /* NOR flash devices */ +#define MAX_PFLASH 4 +extern BlockDriverState *pflash_table[MAX_PFLASH]; typedef struct pflash_t pflash_t; pflash_t *pflash_register (target_ulong base, ram_addr_t off, --=-zslT1Qj3k8JjbOj6amnO--