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.
--- 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];
_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to