From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FUTEL-0003uZ-Cn for qemu-devel@nongnu.org; Fri, 14 Apr 2006 14:41:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FUTEJ-0003sE-I6 for qemu-devel@nongnu.org; Fri, 14 Apr 2006 14:41:16 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FUTEJ-0003ry-Ab for qemu-devel@nongnu.org; Fri, 14 Apr 2006 14:41:15 -0400 Received: from [128.8.10.163] (helo=po1.wam.umd.edu) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FUTEL-00028P-3W for qemu-devel@nongnu.org; Fri, 14 Apr 2006 14:41:17 -0400 Received: from jbrown.mylinuxbox.org (jma-box.student.umd.edu [129.2.253.219]) by po1.wam.umd.edu (8.12.11.20060308/8.12.10) with ESMTP id k3EIfDpL022002 for ; Fri, 14 Apr 2006 14:41:13 -0400 (EDT) Date: Fri, 14 Apr 2006 14:41:12 -0400 From: "Jim C. Brown" Subject: Re: [Qemu-devel] enh req: Allow ATAPI CD-ROM to be attached other than sec/master Message-ID: <20060414184112.GA16776@jbrown.mylinuxbox.org> References: <34D2FED5-B14A-4375-8433-6B614C3B2073@smartgames.ca> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="/9DWx/yDrRhgMJTb" Content-Disposition: inline In-Reply-To: <34D2FED5-B14A-4375-8433-6B614C3B2073@smartgames.ca> 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 --/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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. --/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="vl.cdrom" --- 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]; --/9DWx/yDrRhgMJTb--