Commit 86f55663bd3926abba1d37e0440503a89ed2900f
1 parent
35cdaad6
Add -pflash option to register parallel flash bloc devices.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2719 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
35 additions
and
1 deletions
vl.c
| ... | ... | @@ -138,6 +138,7 @@ IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS]; |
| 138 | 138 | /* Note: bs_table[MAX_DISKS] is a dummy block driver if none available |
| 139 | 139 | to store the VM snapshots */ |
| 140 | 140 | BlockDriverState *bs_table[MAX_DISKS + 1], *fd_table[MAX_FD]; |
| 141 | +BlockDriverState *pflash_table[MAX_PFLASH]; | |
| 141 | 142 | BlockDriverState *sd_bdrv; |
| 142 | 143 | /* point to the block driver where the snapshots are managed */ |
| 143 | 144 | BlockDriverState *bs_snapshots; |
| ... | ... | @@ -6366,6 +6367,7 @@ void help(void) |
| 6366 | 6367 | "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n" |
| 6367 | 6368 | "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n" |
| 6368 | 6369 | "-sd file use 'file' as SecureDigital card image\n" |
| 6370 | + "-pflash file use 'file' as a parallel flash image\n" | |
| 6369 | 6371 | "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n" |
| 6370 | 6372 | "-snapshot write to temporary files instead of disk image files\n" |
| 6371 | 6373 | #ifdef CONFIG_SDL |
| ... | ... | @@ -6504,6 +6506,7 @@ enum { |
| 6504 | 6506 | QEMU_OPTION_hdd, |
| 6505 | 6507 | QEMU_OPTION_cdrom, |
| 6506 | 6508 | QEMU_OPTION_sd, |
| 6509 | + QEMU_OPTION_pflash, | |
| 6507 | 6510 | QEMU_OPTION_boot, |
| 6508 | 6511 | QEMU_OPTION_snapshot, |
| 6509 | 6512 | #ifdef TARGET_I386 |
| ... | ... | @@ -6583,6 +6586,7 @@ const QEMUOption qemu_options[] = { |
| 6583 | 6586 | { "hdd", HAS_ARG, QEMU_OPTION_hdd }, |
| 6584 | 6587 | { "cdrom", HAS_ARG, QEMU_OPTION_cdrom }, |
| 6585 | 6588 | { "sd", HAS_ARG, QEMU_OPTION_sd }, |
| 6589 | + { "pflash", HAS_ARG, QEMU_OPTION_pflash }, | |
| 6586 | 6590 | { "boot", HAS_ARG, QEMU_OPTION_boot }, |
| 6587 | 6591 | { "snapshot", 0, QEMU_OPTION_snapshot }, |
| 6588 | 6592 | #ifdef TARGET_I386 |
| ... | ... | @@ -6867,10 +6871,11 @@ int main(int argc, char **argv) |
| 6867 | 6871 | int use_gdbstub; |
| 6868 | 6872 | const char *gdbstub_port; |
| 6869 | 6873 | #endif |
| 6870 | - int i, cdrom_index; | |
| 6874 | + int i, cdrom_index, pflash_index; | |
| 6871 | 6875 | int snapshot, linux_boot; |
| 6872 | 6876 | const char *initrd_filename; |
| 6873 | 6877 | const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD]; |
| 6878 | + const char *pflash_filename[MAX_PFLASH]; | |
| 6874 | 6879 | const char *sd_filename; |
| 6875 | 6880 | const char *kernel_filename, *kernel_cmdline; |
| 6876 | 6881 | DisplayState *ds = &display_state; |
| ... | ... | @@ -6932,6 +6937,9 @@ int main(int argc, char **argv) |
| 6932 | 6937 | fd_filename[i] = NULL; |
| 6933 | 6938 | for(i = 0; i < MAX_DISKS; i++) |
| 6934 | 6939 | hd_filename[i] = NULL; |
| 6940 | + for(i = 0; i < MAX_PFLASH; i++) | |
| 6941 | + pflash_filename[i] = NULL; | |
| 6942 | + pflash_index = 0; | |
| 6935 | 6943 | sd_filename = NULL; |
| 6936 | 6944 | ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; |
| 6937 | 6945 | vga_ram_size = VGA_RAM_SIZE; |
| ... | ... | @@ -7054,6 +7062,13 @@ int main(int argc, char **argv) |
| 7054 | 7062 | case QEMU_OPTION_sd: |
| 7055 | 7063 | sd_filename = optarg; |
| 7056 | 7064 | break; |
| 7065 | + case QEMU_OPTION_pflash: | |
| 7066 | + if (pflash_index >= MAX_PFLASH) { | |
| 7067 | + fprintf(stderr, "qemu: too many parallel flash images\n"); | |
| 7068 | + exit(1); | |
| 7069 | + } | |
| 7070 | + pflash_filename[pflash_index++] = optarg; | |
| 7071 | + break; | |
| 7057 | 7072 | case QEMU_OPTION_snapshot: |
| 7058 | 7073 | snapshot = 1; |
| 7059 | 7074 | break; |
| ... | ... | @@ -7563,6 +7578,23 @@ int main(int argc, char **argv) |
| 7563 | 7578 | } |
| 7564 | 7579 | } |
| 7565 | 7580 | |
| 7581 | + /* Open the virtual parallel flash bloc devices */ | |
| 7582 | + for(i = 0; i < MAX_PFLASH; i++) { | |
| 7583 | + if (pflash_filename[i]) { | |
| 7584 | + if (!pflash_table[i]) { | |
| 7585 | + char buf[64]; | |
| 7586 | + snprintf(buf, sizeof(buf), "fl%c", i + 'a'); | |
| 7587 | + pflash_table[i] = bdrv_new(buf); | |
| 7588 | + } | |
| 7589 | + if (bdrv_open(pflash_table[i], pflash_filename[i], | |
| 7590 | + snapshot ? BDRV_O_SNAPSHOT : 0) < 0) { | |
| 7591 | + fprintf(stderr, "qemu: could not open flash image '%s'\n", | |
| 7592 | + pflash_filename[i]); | |
| 7593 | + exit(1); | |
| 7594 | + } | |
| 7595 | + } | |
| 7596 | + } | |
| 7597 | + | |
| 7566 | 7598 | sd_bdrv = bdrv_new ("sd"); |
| 7567 | 7599 | /* FIXME: This isn't really a floppy, but it's a reasonable |
| 7568 | 7600 | approximation. */ | ... | ... |
vl.h
| ... | ... | @@ -1459,6 +1459,8 @@ int sh7750_register_io_device(struct SH7750State *s, |
| 1459 | 1459 | int tc58128_init(struct SH7750State *s, char *zone1, char *zone2); |
| 1460 | 1460 | |
| 1461 | 1461 | /* NOR flash devices */ |
| 1462 | +#define MAX_PFLASH 4 | |
| 1463 | +extern BlockDriverState *pflash_table[MAX_PFLASH]; | |
| 1462 | 1464 | typedef struct pflash_t pflash_t; |
| 1463 | 1465 | |
| 1464 | 1466 | pflash_t *pflash_register (target_ulong base, ram_addr_t off, | ... | ... |