[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than s
From: |
Sylvain Petreolle |
Subject: |
Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master |
Date: |
Sat, 15 Apr 2006 18:44:40 +0200 (CEST) |
Shouldnt the behaviour of -boot option be changed to match this change ?
e.g. qemu -cdrom-a disk1.iso -cdrom-b myos.iso -boot cdrom-b
allowing multiple cdrom drives renders "-boot d" a bit strange imo.
--- "Jim C. Brown" <address@hidden> a écrit :
> On Fri, Apr 14, 2006 at 02:41:12PM -0400, Jim C. Brown wrote:
> > Attached is a patch that does just that.
> >
> > The default -cdrom still works, but you can also use -cdrom-a, -cdrom-b,
> > -cdrom-c, and
> -cdrom-d to specify if the cdrom should be plugged in place over hda, hdb,
> hdc, or hdd
> respectively.
> >
> > Also includes a few tests to make sure you don't clobber a hard disk with a
> > cdrom, or use the
> same -hdX or -cdrom-X option multiple times.
> >
>
> Here is a slightly modified version that enables you to have multiple cdrom
> drives at once.
>
> It is not heavily tested so there may be some bugs.
>
> --
> Infinite complexity begets infinite beauty.
> Infinite precision begets infinite perfection.
> > --- vl.c.nocdrom Fri Apr 14 15:12:35 2006
> +++ vl.c Fri Apr 14 15:21:08 2006
> @@ -4730,6 +4730,10 @@
> QEMU_OPTION_hdc,
> QEMU_OPTION_hdd,
> QEMU_OPTION_cdrom,
> + QEMU_OPTION_cdrom_a,
> + QEMU_OPTION_cdrom_b,
> + QEMU_OPTION_cdrom_c,
> + QEMU_OPTION_cdrom_d,
> QEMU_OPTION_boot,
> QEMU_OPTION_snapshot,
> QEMU_OPTION_m,
> @@ -4795,6 +4799,10 @@
> { "hdc", HAS_ARG, QEMU_OPTION_hdc },
> { "hdd", HAS_ARG, QEMU_OPTION_hdd },
> { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
> + { "cdrom-a", HAS_ARG, QEMU_OPTION_cdrom_a },
> + { "cdrom-b", HAS_ARG, QEMU_OPTION_cdrom_b },
> + { "cdrom-c", HAS_ARG, QEMU_OPTION_cdrom_c },
> + { "cdrom-d", HAS_ARG, QEMU_OPTION_cdrom_d },
> { "boot", HAS_ARG, QEMU_OPTION_boot },
> { "snapshot", 0, QEMU_OPTION_snapshot },
> { "m", HAS_ARG, QEMU_OPTION_m },
> @@ -5042,6 +5050,7 @@
> int snapshot, linux_boot;
> const char *initrd_filename;
> const char *hd_filename[MAX_DISKS], *fd_filename[MAX_FD];
> + int hd_is_cdrom[MAX_DISKS];
> const char *kernel_filename, *kernel_cmdline;
> DisplayState *ds = &display_state;
> int cyls, heads, secs, translation;
> @@ -5079,7 +5088,10 @@
> for(i = 0; i < MAX_FD; i++)
> fd_filename[i] = NULL;
> for(i = 0; i < MAX_DISKS; i++)
> + {
> hd_filename[i] = NULL;
> + hd_is_cdrom[i] = 0;
> + }
> ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
> vga_ram_size = VGA_RAM_SIZE;
> bios_size = BIOS_SIZE;
> @@ -5091,11 +5103,7 @@
> nographic = 0;
> kernel_filename = NULL;
> kernel_cmdline = "";
> -#ifdef TARGET_PPC
> - cdrom_index = 1;
> -#else
> - cdrom_index = 2;
> -#endif
> + cdrom_index = -1; //disable by default
> cyls = heads = secs = 0;
> translation = BIOS_ATA_TRANSLATION_AUTO;
> #ifdef _WIN32
> @@ -5127,7 +5135,7 @@
> break;
> r = argv[optind];
> if (r[0] != '-') {
> - hd_filename[0] = argv[optind++];
> + //hd_filename[0] = argv[optind++];
> } else {
> const QEMUOption *popt;
>
> @@ -5178,9 +5186,12 @@
> {
> int hd_index;
> hd_index = popt->index - QEMU_OPTION_hda;
> + if (hd_filename[hd_index] != NULL) {
> + fprintf(stderr, "qemu: can't share multiple
> disks\n");
> + exit(1);
> + }
> hd_filename[hd_index] = optarg;
> - if (hd_index == cdrom_index)
> - cdrom_index = -1;
> + hd_is_cdrom[hd_index] = 0;
> }
> break;
> case QEMU_OPTION_snapshot:
> @@ -5235,9 +5246,26 @@
> kernel_cmdline = optarg;
> break;
> case QEMU_OPTION_cdrom:
> - if (cdrom_index >= 0) {
> - hd_filename[cdrom_index] = optarg;
> + case QEMU_OPTION_cdrom_a:
> + case QEMU_OPTION_cdrom_b:
> + case QEMU_OPTION_cdrom_c:
> + case QEMU_OPTION_cdrom_d:
> + if (popt->index == QEMU_OPTION_cdrom)
> +/* use a sensible default */
> +#ifdef TARGET_PPC
> + cdrom_index = 1;
> +#else
> + cdrom_index = 2;
> +#endif
> + else
> + cdrom_index = popt->index - QEMU_OPTION_cdrom_a;
> +
> + if (hd_filename[cdrom_index] != NULL) {
> + fprintf(stderr, "qemu: can't share multiple disks\n");
> + exit(1);
> }
> + hd_filename[cdrom_index] = optarg;
> + hd_is_cdrom[cdrom_index] = 1;
> break;
> case QEMU_OPTION_boot:
> boot_device = optarg[0];
> @@ -5555,9 +5583,21 @@
>
> /* we always create the cdrom drive, even if no disk is there */
> bdrv_init();
> + int ci = 0;
> + char cdrom_name[7];
> + strcpy(cdrom_name, "cdrom");
> + cdrom_name[6] = '\0';
> if (cdrom_index >= 0) {
> - bs_table[cdrom_index] = bdrv_new("cdrom");
> - bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM);
> + for (i = 0; i < MAX_DISKS; i++)
> + {
> + if (hd_is_cdrom[i])
> + {
> + bs_table[i] = bdrv_new(cdrom_name);
> + ci++;
> + cdrom_name[5] = '0' + (char)ci;
> + bdrv_set_type_hint(bs_table[i], BDRV_TYPE_CDROM);
> + }
> + }
> }
>
> /* open the virtual block devices */
> > _______________________________________________
> Qemu-devel mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>
Kind regards,
Sylvain Petreolle (aka Usurp)
--- --- --- --- --- --- --- --- --- --- --- --- ---
Listen to free Music: http://www.jamendo.com
Windows is proprietary, use free ReactOS instead : http://www.reactos.org
Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master, Pascal Terjan, 2006/04/15