* [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
@ 2006-04-14 17:38 Toby Thain
2006-04-14 18:41 ` Jim C. Brown
2006-04-15 20:18 ` Pascal Terjan
0 siblings, 2 replies; 9+ messages in thread
From: Toby Thain @ 2006-04-14 17:38 UTC (permalink / raw)
To: qemu-devel
Per version 0.8.0, the ATAPI CD-ROM is always attached to IDE
secondary/master (address 2). (See assignment to cdrom_index around
vl.c line 4433.)
Bochs allows the CD-ROM to be attached to any of four addresses, my
suggestion is perhaps adding a QEMU runtime option for this.
E.g. NEXTSTEP 3.3 installation has a quirk in that it expects an
ATAPI CD-ROM to be primary/slave (address 1). Changing the ATAPI
address helps with NS 3.3 installation (although mine goes on to fail
for other reasons, after successfully detecting ATAPI drive patched
to attach at address 1). I hope to soon be able to add NS 3.3 to the
QEMU supported guest O/S list.
--Toby
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-14 17:38 [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master Toby Thain
@ 2006-04-14 18:41 ` Jim C. Brown
2006-04-14 19:23 ` Jim C. Brown
2006-04-15 20:18 ` Pascal Terjan
1 sibling, 1 reply; 9+ messages in thread
From: Jim C. Brown @ 2006-04-14 18:41 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 834 bytes --]
On Fri, Apr 14, 2006 at 01:38:18PM -0400, Toby Thain wrote:
> Per version 0.8.0, the ATAPI CD-ROM is always attached to IDE
> secondary/master (address 2). (See assignment to cdrom_index around
> vl.c line 4433.)
>
> Bochs allows the CD-ROM to be attached to any of four addresses, my
> suggestion is perhaps adding a QEMU runtime option for this.
>
> --Toby
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.
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
[-- Attachment #2: vl.cdrom --]
[-- Type: text/plain, Size: 3082 bytes --]
--- vl.c.nocdrom Fri Apr 14 14:05:19 2006
+++ vl.c Fri Apr 14 14:34:10 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 },
@@ -5091,11 +5099,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 +5131,7 @@
break;
r = argv[optind];
if (r[0] != '-') {
- hd_filename[0] = argv[optind++];
+ //hd_filename[0] = argv[optind++];
} else {
const QEMUOption *popt;
@@ -5178,9 +5182,12 @@
{
int hd_index;
hd_index = popt->index - QEMU_OPTION_hda;
+ if (hd_filename[hd_index] != NULL) {
+printf("%d %s\n", hd_index, hd_filename[hd_index]);
+ fprintf(stderr, "qemu: can't share multiple disks\n");
+ exit(1);
+ }
hd_filename[hd_index] = optarg;
- if (hd_index == cdrom_index)
- cdrom_index = -1;
}
break;
case QEMU_OPTION_snapshot:
@@ -5235,9 +5242,30 @@
kernel_cmdline = optarg;
break;
case QEMU_OPTION_cdrom:
+ case QEMU_OPTION_cdrom_a:
+ case QEMU_OPTION_cdrom_b:
+ case QEMU_OPTION_cdrom_c:
+ case QEMU_OPTION_cdrom_d:
if (cdrom_index >= 0) {
- hd_filename[cdrom_index] = optarg;
+ fprintf(stderr, "qemu: too many cdroms\n");
+ exit(1);
+ }
+
+ 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;
break;
case QEMU_OPTION_boot:
boot_device = optarg[0];
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-14 18:41 ` Jim C. Brown
@ 2006-04-14 19:23 ` Jim C. Brown
2006-04-15 16:44 ` Sylvain Petreolle
2006-04-17 16:26 ` Leonardo E. Reiter
0 siblings, 2 replies; 9+ messages in thread
From: Jim C. Brown @ 2006-04-14 19:23 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 687 bytes --]
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.
[-- Attachment #2: vl.multicdrom --]
[-- Type: text/plain, Size: 4393 bytes --]
--- 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 */
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-14 19:23 ` Jim C. Brown
@ 2006-04-15 16:44 ` Sylvain Petreolle
2006-04-15 18:13 ` Jim C. Brown
2006-04-17 16:26 ` Leonardo E. Reiter
1 sibling, 1 reply; 9+ messages in thread
From: Sylvain Petreolle @ 2006-04-15 16:44 UTC (permalink / raw)
To: qemu-devel
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" <jma5@umd.edu> 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
> Qemu-devel@nongnu.org
> 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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-15 16:44 ` Sylvain Petreolle
@ 2006-04-15 18:13 ` Jim C. Brown
2006-09-25 20:26 ` RE : " Sylvain Petreolle
0 siblings, 1 reply; 9+ messages in thread
From: Jim C. Brown @ 2006-04-15 18:13 UTC (permalink / raw)
To: qemu-devel
On Sat, Apr 15, 2006 at 06:44:40PM +0200, Sylvain Petreolle wrote:
> 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.
>
Probably.
Right now the bios seems to pick the first cdrom drive that it finds (in
order of cdrom-a, cdrom-b, ..). This is done in the bios, so it is a little
bit harder to change. (Hopefully fixing this would also make it trivial to
be able to tell the bios to boot from hdb/hdc/hdd instead of only supporting
hda).
> Listen to free Music: http://www.jamendo.com
> Windows is proprietary, use free ReactOS instead : http://www.reactos.org
--
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-14 17:38 [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master Toby Thain
2006-04-14 18:41 ` Jim C. Brown
@ 2006-04-15 20:18 ` Pascal Terjan
1 sibling, 0 replies; 9+ messages in thread
From: Pascal Terjan @ 2006-04-15 20:18 UTC (permalink / raw)
To: qemu-devel
On 4/14/06, Toby Thain <toby@smartgames.ca> wrote:
> Per version 0.8.0, the ATAPI CD-ROM is always attached to IDE
> secondary/master (address 2). (See assignment to cdrom_index around
> vl.c line 4433.)
>
>
> Bochs allows the CD-ROM to be attached to any of four addresses, my
> suggestion is perhaps adding a QEMU runtime option for this.
>
I had sent a patch regarding this one year ago but got no feedback :
http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00427.html
Looks like some people are now interested in this :)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-14 19:23 ` Jim C. Brown
2006-04-15 16:44 ` Sylvain Petreolle
@ 2006-04-17 16:26 ` Leonardo E. Reiter
2006-04-17 16:31 ` Leonardo E. Reiter
1 sibling, 1 reply; 9+ messages in thread
From: Leonardo E. Reiter @ 2006-04-17 16:26 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 1449 bytes --]
Jim,
thanks for the patch, it seems to work great. However, I'm attaching an
updated version that fixes the following [minor] problems:
1. qemu was not correctly aborting [with help] if no arguments/disk
images were specified
2. using the method "qemu [options] <disk-image>" no longer worked...
you had to specify -hda explicitly.
1 and 2 are fixed in this patch that I attached. It's also diff'ed
against today's CVS, so it applies without fuzz or hunks.
Like I said, these fixes are minor more than anything else - otherwise
the patch works great for me so far. I've been able to do a Windows XP
install with 2 CDROM images attached. That's the extent of my testing
so far, but I don't see any reason why there would be any problems
otherwise.
Regards,
Leo Reiter
Jim C. Brown wrote:
> 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.
>
--
Leonardo E. Reiter
Vice President of Product Development, CTO
Win4Lin, Inc.
Virtual Computing from Desktop to Data Center
Main: +1 512 339 7979
Fax: +1 512 532 6501
http://www.win4lin.com
[-- Attachment #2: vl.multicdrom-updated --]
[-- Type: text/plain, Size: 5233 bytes --]
Index: vl.c
===================================================================
RCS file: /cvsroot/qemu/qemu/vl.c,v
retrieving revision 1.171
diff -a -u -r1.171 vl.c
--- vl.c 16 Apr 2006 11:06:58 -0000 1.171
+++ vl.c 17 Apr 2006 16:22:45 -0000
@@ -4572,6 +4572,7 @@
"-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
"-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"
+ "-cdrom-[n] file use 'file' as IDE cdrom image (n is a, b, c, or d)\n"
"-boot [a|c|d] boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
"-snapshot write to temporary files instead of disk image files\n"
"-m megs set virtual RAM size to megs MB [default=%d]\n"
@@ -4700,6 +4701,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,
@@ -4761,6 +4766,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 },
@@ -5004,6 +5013,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;
@@ -5034,7 +5044,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;
@@ -5046,11 +5059,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;
pstrcpy(monitor_device, sizeof(monitor_device), "vc");
@@ -5129,9 +5138,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:
@@ -5185,9 +5197,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];
@@ -5407,7 +5436,8 @@
if (!linux_boot &&
hd_filename[0] == '\0' &&
- (cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
+ ((cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') ||
+ (cdrom_index < 0)) &&
fd_filename[0] == '\0')
help();
@@ -5493,9 +5523,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 */
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-17 16:26 ` Leonardo E. Reiter
@ 2006-04-17 16:31 ` Leonardo E. Reiter
0 siblings, 0 replies; 9+ messages in thread
From: Leonardo E. Reiter @ 2006-04-17 16:31 UTC (permalink / raw)
To: qemu-devel
Sorry, I should add that my patch also adds a simple help line for the
new options. Again, minor stuff ;)
Regards,
Leo Reiter
Leonardo E. Reiter wrote:
> Jim,
>
> thanks for the patch, it seems to work great. However, I'm attaching an
> updated version that fixes the following [minor] problems:
>
> 1. qemu was not correctly aborting [with help] if no arguments/disk
> images were specified
> 2. using the method "qemu [options] <disk-image>" no longer worked...
> you had to specify -hda explicitly.
>
> 1 and 2 are fixed in this patch that I attached. It's also diff'ed
> against today's CVS, so it applies without fuzz or hunks.
--
Leonardo E. Reiter
Vice President of Product Development, CTO
Win4Lin, Inc.
Virtual Computing from Desktop to Data Center
Main: +1 512 339 7979
Fax: +1 512 532 6501
http://www.win4lin.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE : Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master
2006-04-15 18:13 ` Jim C. Brown
@ 2006-09-25 20:26 ` Sylvain Petreolle
0 siblings, 0 replies; 9+ messages in thread
From: Sylvain Petreolle @ 2006-09-25 20:26 UTC (permalink / raw)
To: Jim C. Brown; +Cc: qemu-devel
Hi Jim,
After updating to today's CVS,
qemu now segfaults if your patch is applied to the source.
Its too bad, since its really useful for some apps/OS install.
Could you have a look on it ?
Crash happens even if no cdrom is specified on the command line.
(tried the qemu test linux.img and got the crash)
Running on Fedora 5/ compiled with gcc 3.2.3.
Kind regards,
Sylvain Petreolle (aka Usurp)
--- --- --- --- --- --- --- --- --- --- --- --- ---
Run your favorite Windows apps with free ReactOS : http://www.reactos.org
Listen to non-DRMised Music: http://www.jamendo.com
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2006-09-25 20:26 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-14 17:38 [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master Toby Thain
2006-04-14 18:41 ` Jim C. Brown
2006-04-14 19:23 ` Jim C. Brown
2006-04-15 16:44 ` Sylvain Petreolle
2006-04-15 18:13 ` Jim C. Brown
2006-09-25 20:26 ` RE : " Sylvain Petreolle
2006-04-17 16:26 ` Leonardo E. Reiter
2006-04-17 16:31 ` Leonardo E. Reiter
2006-04-15 20:18 ` Pascal Terjan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).