qemu-devel
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]