mirror of https://github.com/xemu-project/xemu.git
Changes to -drive without if= and with if=scsi
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJYrDELAAoJEDhwtADrkYZTUzIP/0h+Cg73nzEX7bEfP1tXMJ7A 9Byzvi5HDOayaAScqu459hJcGdhhkh2XhMN9rZ8xlCOVOxT765raMAv9XqhPMT08 C+btkD6a2b3CRSdf+omztSIkXqgrLZyj7lkwPQFM6bBU7th4uBv0RBus+oB/1Ahd zP/Kg5PqNTA8cRV6LK2R3GnUeJXXYxGbzM1z6fSMFIhmZj4Y/l/uWEjhi8K2w2aX oSoWv6sNgvNhs/JeJZvIATA3tbEoQunW3UGmbjjGQenJ2SLqShxtaO5luaS/P6WB oXEQw5J1Ar10Y0UvTSDusuYCbbFJlo98Pqv4X88166nmSTS9A+n3jkxwawYPQygT WK7ZtIUuz4ItxtVrVrtVilveujihITgbqyy5GtQOzYcbmLQwcAxH/z1W8UNwp31K pNL5V/IVia5z7g1pD++FCNIk+wxtQrwrytFZzeCLSzac/X0qdgJ+IQmmC+Y48FB7 Iqe9xgxHQHZ2HlHrLLltcgzOv9NPZ/wr6irOGEvc32nK3ZLP70wWCrNLw6Cqvi+c KeChpZ9JD7+kr+fQJ3P+Zq8cMJ5jX1KA5ANaHavVHRRB0U4frSWal/dsQwnVHC2o 7h4/KMjSPCsl3/dzxhP0T8RvvkqN+KnCn4dhxzzFDeOWHiW8jwc9ZfmWvzoIgVYJ fwA2tuXpPoAuzNoLcpVi =/97H -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-block-2017-02-21' into staging Changes to -drive without if= and with if=scsi # gpg: Signature made Tue 21 Feb 2017 12:22:35 GMT # gpg: using RSA key 0x3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-block-2017-02-21: hw/i386: Deprecate -drive if=scsi with PC machine types hw: Deprecate -drive if=scsi with non-onboard HBAs hw/scsi: Concentrate -drive if=scsi auto-create in one place hw: Drop superfluous special checks for orphaned -drive blockdev: Make orphaned -drive fatal blockdev: Improve message for orphaned -drive hw/arm/highbank: Default -drive to if=ide instead of if=scsi hw: Default -drive to if=none instead of scsi when scsi cannot work hw: Default -drive to if=none instead of ide when ide cannot work hw/arm/cubieboard hw/arm/xlnx-ep108: Fix units_per_default_bus hw: Default -drive to if=ide explicitly where it works Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
a1cf5fac2b
21
blockdev.c
21
blockdev.c
|
@ -227,27 +227,30 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool drive_check_orphaned(void)
|
void drive_check_orphaned(void)
|
||||||
{
|
{
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
bool rs = false;
|
Location loc;
|
||||||
|
bool orphans = false;
|
||||||
|
|
||||||
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
||||||
dinfo = blk_legacy_dinfo(blk);
|
dinfo = blk_legacy_dinfo(blk);
|
||||||
/* If dinfo->bdrv->dev is NULL, it has no device attached. */
|
|
||||||
/* Unless this is a default drive, this may be an oversight. */
|
|
||||||
if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
|
if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
|
||||||
dinfo->type != IF_NONE) {
|
dinfo->type != IF_NONE) {
|
||||||
fprintf(stderr, "Warning: Orphaned drive without device: "
|
loc_push_none(&loc);
|
||||||
"id=%s,file=%s,if=%s,bus=%d,unit=%d\n",
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
blk_name(blk), blk_bs(blk) ? blk_bs(blk)->filename : "",
|
error_report("machine type does not support"
|
||||||
|
" if=%s,bus=%d,unit=%d",
|
||||||
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
||||||
rs = true;
|
loc_pop(&loc);
|
||||||
|
orphans = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rs;
|
if (orphans) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
|
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
|
||||||
|
|
|
@ -177,6 +177,7 @@ static void clipper_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Alpha DP264/CLIPPER";
|
mc->desc = "Alpha DP264/CLIPPER";
|
||||||
mc->init = clipper_init;
|
mc->init = clipper_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = 4;
|
mc->max_cpus = 4;
|
||||||
mc->is_default = 1;
|
mc->is_default = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,8 @@ static void cubieboard_init(MachineState *machine)
|
||||||
memory_region_add_subregion(get_system_memory(), AW_A10_SDRAM_BASE,
|
memory_region_add_subregion(get_system_memory(), AW_A10_SDRAM_BASE,
|
||||||
&s->sdram);
|
&s->sdram);
|
||||||
|
|
||||||
|
/* TODO create and connect IDE devices for ide_drive_get() */
|
||||||
|
|
||||||
cubieboard_binfo.ram_size = machine->ram_size;
|
cubieboard_binfo.ram_size = machine->ram_size;
|
||||||
cubieboard_binfo.kernel_filename = machine->kernel_filename;
|
cubieboard_binfo.kernel_filename = machine->kernel_filename;
|
||||||
cubieboard_binfo.kernel_cmdline = machine->kernel_cmdline;
|
cubieboard_binfo.kernel_cmdline = machine->kernel_cmdline;
|
||||||
|
@ -82,6 +84,8 @@ static void cubieboard_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "cubietech cubieboard";
|
mc->desc = "cubietech cubieboard";
|
||||||
mc->init = cubieboard_init;
|
mc->init = cubieboard_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
|
mc->units_per_default_bus = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("cubieboard", cubieboard_machine_init)
|
DEFINE_MACHINE("cubieboard", cubieboard_machine_init)
|
||||||
|
|
|
@ -363,6 +363,8 @@ static void calxeda_init(MachineState *machine, enum cxmachines machine_id)
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 2, pic[82]);
|
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 2, pic[82]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO create and connect IDE devices for ide_drive_get() */
|
||||||
|
|
||||||
highbank_binfo.ram_size = ram_size;
|
highbank_binfo.ram_size = ram_size;
|
||||||
highbank_binfo.kernel_filename = kernel_filename;
|
highbank_binfo.kernel_filename = kernel_filename;
|
||||||
highbank_binfo.kernel_cmdline = kernel_cmdline;
|
highbank_binfo.kernel_cmdline = kernel_cmdline;
|
||||||
|
@ -405,7 +407,8 @@ static void highbank_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Calxeda Highbank (ECX-1000)";
|
mc->desc = "Calxeda Highbank (ECX-1000)";
|
||||||
mc->init = highbank_init;
|
mc->init = highbank_init;
|
||||||
mc->block_default_type = IF_SCSI;
|
mc->block_default_type = IF_IDE;
|
||||||
|
mc->units_per_default_bus = 1;
|
||||||
mc->max_cpus = 4;
|
mc->max_cpus = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +424,8 @@ static void midway_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Calxeda Midway (ECX-2000)";
|
mc->desc = "Calxeda Midway (ECX-2000)";
|
||||||
mc->init = midway_init;
|
mc->init = midway_init;
|
||||||
mc->block_default_type = IF_SCSI;
|
mc->block_default_type = IF_IDE;
|
||||||
|
mc->units_per_default_bus = 1;
|
||||||
mc->max_cpus = 4;
|
mc->max_cpus = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,7 @@ static void realview_init(MachineState *machine,
|
||||||
}
|
}
|
||||||
n = drive_get_max_bus(IF_SCSI);
|
n = drive_get_max_bus(IF_SCSI);
|
||||||
while (n >= 0) {
|
while (n >= 0) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
lsi53c895a_create(pci_bus);
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -443,7 +443,6 @@ static void realview_pbx_a9_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9";
|
mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9";
|
||||||
mc->init = realview_pbx_a9_init;
|
mc->init = realview_pbx_a9_init;
|
||||||
mc->block_default_type = IF_SCSI;
|
|
||||||
mc->max_cpus = 4;
|
mc->max_cpus = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -998,6 +998,7 @@ static void spitzpda_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Sharp SL-C3000 (Spitz) PDA (PXA270)";
|
mc->desc = "Sharp SL-C3000 (Spitz) PDA (PXA270)";
|
||||||
mc->init = spitz_init;
|
mc->init = spitz_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo spitzpda_type = {
|
static const TypeInfo spitzpda_type = {
|
||||||
|
@ -1012,6 +1013,7 @@ static void borzoipda_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Sharp SL-C3100 (Borzoi) PDA (PXA270)";
|
mc->desc = "Sharp SL-C3100 (Borzoi) PDA (PXA270)";
|
||||||
mc->init = borzoi_init;
|
mc->init = borzoi_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo borzoipda_type = {
|
static const TypeInfo borzoipda_type = {
|
||||||
|
@ -1026,6 +1028,7 @@ static void terrierpda_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Sharp SL-C3200 (Terrier) PDA (PXA270)";
|
mc->desc = "Sharp SL-C3200 (Terrier) PDA (PXA270)";
|
||||||
mc->init = terrier_init;
|
mc->init = terrier_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo terrierpda_type = {
|
static const TypeInfo terrierpda_type = {
|
||||||
|
|
|
@ -263,6 +263,7 @@ static void tosapda_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Sharp SL-6000 (Tosa) PDA (PXA255)";
|
mc->desc = "Sharp SL-6000 (Tosa) PDA (PXA255)";
|
||||||
mc->init = tosa_init;
|
mc->init = tosa_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("tosa", tosapda_machine_init)
|
DEFINE_MACHINE("tosa", tosapda_machine_init)
|
||||||
|
|
|
@ -290,7 +290,7 @@ static void versatile_init(MachineState *machine, int board_id)
|
||||||
}
|
}
|
||||||
n = drive_get_max_bus(IF_SCSI);
|
n = drive_get_max_bus(IF_SCSI);
|
||||||
while (n >= 0) {
|
while (n >= 0) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
lsi53c895a_create(pci_bus);
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -752,7 +752,6 @@ static void vexpress_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "ARM Versatile Express";
|
mc->desc = "ARM Versatile Express";
|
||||||
mc->init = vexpress_common_init;
|
mc->init = vexpress_common_init;
|
||||||
mc->block_default_type = IF_SCSI;
|
|
||||||
mc->max_cpus = 4;
|
mc->max_cpus = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -323,7 +323,6 @@ static void zynq_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Xilinx Zynq Platform Baseboard for Cortex-A9";
|
mc->desc = "Xilinx Zynq Platform Baseboard for Cortex-A9";
|
||||||
mc->init = zynq_init;
|
mc->init = zynq_init;
|
||||||
mc->block_default_type = IF_SCSI;
|
|
||||||
mc->max_cpus = 1;
|
mc->max_cpus = 1;
|
||||||
mc->no_sdcard = 1;
|
mc->no_sdcard = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,8 @@ static void xlnx_ep108_init(MachineState *machine)
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.spi[i]), 1, cs_line);
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->soc.spi[i]), 1, cs_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO create and connect IDE devices for ide_drive_get() */
|
||||||
|
|
||||||
xlnx_ep108_binfo.ram_size = ram_size;
|
xlnx_ep108_binfo.ram_size = ram_size;
|
||||||
xlnx_ep108_binfo.kernel_filename = machine->kernel_filename;
|
xlnx_ep108_binfo.kernel_filename = machine->kernel_filename;
|
||||||
xlnx_ep108_binfo.kernel_cmdline = machine->kernel_cmdline;
|
xlnx_ep108_binfo.kernel_cmdline = machine->kernel_cmdline;
|
||||||
|
@ -118,6 +120,8 @@ static void xlnx_ep108_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Xilinx ZynqMP EP108 board";
|
mc->desc = "Xilinx ZynqMP EP108 board";
|
||||||
mc->init = xlnx_ep108_init;
|
mc->init = xlnx_ep108_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
|
mc->units_per_default_bus = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("xlnx-ep108", xlnx_ep108_machine_init)
|
DEFINE_MACHINE("xlnx-ep108", xlnx_ep108_machine_init)
|
||||||
|
@ -126,6 +130,8 @@ static void xlnx_zcu102_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Xilinx ZynqMP ZCU102 board";
|
mc->desc = "Xilinx ZynqMP ZCU102 board";
|
||||||
mc->init = xlnx_ep108_init;
|
mc->init = xlnx_ep108_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
|
mc->units_per_default_bus = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("xlnx-zcu102", xlnx_zcu102_machine_init)
|
DEFINE_MACHINE("xlnx-zcu102", xlnx_zcu102_machine_init)
|
||||||
|
|
|
@ -1650,9 +1650,15 @@ void pc_pci_device_init(PCIBus *pci_bus)
|
||||||
int max_bus;
|
int max_bus;
|
||||||
int bus;
|
int bus;
|
||||||
|
|
||||||
|
/* Note: if=scsi is deprecated with PC machine types */
|
||||||
max_bus = drive_get_max_bus(IF_SCSI);
|
max_bus = drive_get_max_bus(IF_SCSI);
|
||||||
for (bus = 0; bus <= max_bus; bus++) {
|
for (bus = 0; bus <= max_bus; bus++) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
||||||
|
/*
|
||||||
|
* By not creating frontends here, we make
|
||||||
|
* scsi_legacy_handle_cmdline() create them, and warn that
|
||||||
|
* this usage is deprecated.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2339,6 +2345,7 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
|
||||||
mc->query_hotpluggable_cpus = pc_query_hotpluggable_cpus;
|
mc->query_hotpluggable_cpus = pc_query_hotpluggable_cpus;
|
||||||
mc->default_boot_order = "cad";
|
mc->default_boot_order = "cad";
|
||||||
mc->hot_add_cpu = pc_hot_add_cpu;
|
mc->hot_add_cpu = pc_hot_add_cpu;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = 255;
|
mc->max_cpus = 255;
|
||||||
mc->reset = pc_machine_reset;
|
mc->reset = pc_machine_reset;
|
||||||
hc->pre_plug = pc_machine_device_pre_plug_cb;
|
hc->pre_plug = pc_machine_device_pre_plug_cb;
|
||||||
|
|
|
@ -2840,23 +2840,6 @@ const VMStateDescription vmstate_ide_bus = {
|
||||||
void ide_drive_get(DriveInfo **hd, int n)
|
void ide_drive_get(DriveInfo **hd, int n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int highest_bus = drive_get_max_bus(IF_IDE) + 1;
|
|
||||||
int max_devs = drive_get_max_devs(IF_IDE);
|
|
||||||
int n_buses = max_devs ? (n / max_devs) : n;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Note: The number of actual buses available is not known.
|
|
||||||
* We compute this based on the size of the DriveInfo* array, n.
|
|
||||||
* If it is less than max_devs * <num_real_buses>,
|
|
||||||
* We will stop looking for drives prematurely instead of overfilling
|
|
||||||
* the array.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (highest_bus > n_buses) {
|
|
||||||
error_report("Too many IDE buses defined (%d > %d)",
|
|
||||||
highest_bus, n_buses);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
hd[i] = drive_get_by_index(IF_IDE, i);
|
hd[i] = drive_get_by_index(IF_IDE, i);
|
||||||
|
|
|
@ -387,6 +387,7 @@ static void mips_fulong2e_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Fulong 2e mini pc";
|
mc->desc = "Fulong 2e mini pc";
|
||||||
mc->init = mips_fulong2e_init;
|
mc->init = mips_fulong2e_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("fulong2e", mips_fulong2e_machine_init)
|
DEFINE_MACHINE("fulong2e", mips_fulong2e_machine_init)
|
||||||
|
|
|
@ -291,10 +291,6 @@ static void mips_jazz_init(MachineState *machine,
|
||||||
qdev_get_gpio_in(rc4030, 5), &esp_reset, &dma_enable);
|
qdev_get_gpio_in(rc4030, 5), &esp_reset, &dma_enable);
|
||||||
|
|
||||||
/* Floppy */
|
/* Floppy */
|
||||||
if (drive_get_max_bus(IF_FLOPPY) >= MAX_FD) {
|
|
||||||
fprintf(stderr, "qemu: too many floppy drives\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (n = 0; n < MAX_FD; n++) {
|
for (n = 0; n < MAX_FD; n++) {
|
||||||
fds[n] = drive_get(IF_FLOPPY, 0, n);
|
fds[n] = drive_get(IF_FLOPPY, 0, n);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1264,6 +1264,7 @@ static void mips_malta_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "MIPS Malta Core LV";
|
mc->desc = "MIPS Malta Core LV";
|
||||||
mc->init = mips_malta_init;
|
mc->init = mips_malta_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = 16;
|
mc->max_cpus = 16;
|
||||||
mc->is_default = 1;
|
mc->is_default = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,6 +306,7 @@ static void mips_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "mips r4k platform";
|
mc->desc = "mips r4k platform";
|
||||||
mc->init = mips_r4k_init;
|
mc->init = mips_r4k_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("mips", mips_machine_init)
|
DEFINE_MACHINE("mips", mips_machine_init)
|
||||||
|
|
|
@ -518,6 +518,7 @@ static void core99_machine_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Mac99 based PowerMAC";
|
mc->desc = "Mac99 based PowerMAC";
|
||||||
mc->init = ppc_core99_init;
|
mc->init = ppc_core99_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = MAX_CPUS;
|
mc->max_cpus = MAX_CPUS;
|
||||||
mc->default_boot_order = "cd";
|
mc->default_boot_order = "cd";
|
||||||
mc->kvm_type = core99_kvm_type;
|
mc->kvm_type = core99_kvm_type;
|
||||||
|
|
|
@ -368,6 +368,7 @@ static void heathrow_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "Heathrow based PowerMAC";
|
mc->desc = "Heathrow based PowerMAC";
|
||||||
mc->init = ppc_heathrow_init;
|
mc->init = ppc_heathrow_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = MAX_CPUS;
|
mc->max_cpus = MAX_CPUS;
|
||||||
#ifndef TARGET_PPC64
|
#ifndef TARGET_PPC64
|
||||||
mc->is_default = 1;
|
mc->is_default = 1;
|
||||||
|
|
|
@ -684,6 +684,7 @@ static void prep_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "PowerPC PREP platform";
|
mc->desc = "PowerPC PREP platform";
|
||||||
mc->init = ppc_prep_init;
|
mc->init = ppc_prep_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = MAX_CPUS;
|
mc->max_cpus = MAX_CPUS;
|
||||||
mc->default_boot_order = "cad";
|
mc->default_boot_order = "cad";
|
||||||
}
|
}
|
||||||
|
|
|
@ -367,9 +367,6 @@ static void esp_pci_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
s->irq = pci_allocate_irq(dev);
|
s->irq = pci_allocate_irq(dev);
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, NULL);
|
scsi_bus_new(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, NULL);
|
||||||
if (!d->hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void esp_pci_scsi_uninit(PCIDevice *d)
|
static void esp_pci_scsi_uninit(PCIDevice *d)
|
||||||
|
|
|
@ -690,7 +690,6 @@ static void sysbus_esp_realize(DeviceState *dev, Error **errp)
|
||||||
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
||||||
SysBusESPState *sysbus = ESP(dev);
|
SysBusESPState *sysbus = ESP(dev);
|
||||||
ESPState *s = &sysbus->esp;
|
ESPState *s = &sysbus->esp;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
sysbus_init_irq(sbd, &s->irq);
|
sysbus_init_irq(sbd, &s->irq);
|
||||||
assert(sysbus->it_shift != -1);
|
assert(sysbus->it_shift != -1);
|
||||||
|
@ -703,11 +702,6 @@ static void sysbus_esp_realize(DeviceState *dev, Error **errp)
|
||||||
qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2);
|
qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2);
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), dev, &esp_scsi_info, NULL);
|
scsi_bus_new(&s->bus, sizeof(s->bus), dev, &esp_scsi_info, NULL);
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
|
||||||
if (err != NULL) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sysbus_esp_hard_reset(DeviceState *dev)
|
static void sysbus_esp_hard_reset(DeviceState *dev)
|
||||||
|
|
|
@ -2216,9 +2216,6 @@ static void lsi_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
QTAILQ_INIT(&s->queue);
|
QTAILQ_INIT(&s->queue);
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, NULL);
|
scsi_bus_new(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, NULL);
|
||||||
if (!d->hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lsi_scsi_unrealize(DeviceState *dev, Error **errp)
|
static void lsi_scsi_unrealize(DeviceState *dev, Error **errp)
|
||||||
|
@ -2271,3 +2268,10 @@ static void lsi53c895a_register_types(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
type_init(lsi53c895a_register_types)
|
type_init(lsi53c895a_register_types)
|
||||||
|
|
||||||
|
void lsi53c895a_create(PCIBus *bus)
|
||||||
|
{
|
||||||
|
LSIState *s = LSI53C895A(pci_create_simple(bus, -1, "lsi53c895a"));
|
||||||
|
|
||||||
|
scsi_bus_legacy_handle_cmdline(&s->bus, false);
|
||||||
|
}
|
||||||
|
|
|
@ -2325,7 +2325,6 @@ static const struct SCSIBusInfo megasas_scsi_info = {
|
||||||
|
|
||||||
static void megasas_scsi_realize(PCIDevice *dev, Error **errp)
|
static void megasas_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
{
|
{
|
||||||
DeviceState *d = DEVICE(dev);
|
|
||||||
MegasasState *s = MEGASAS(dev);
|
MegasasState *s = MEGASAS(dev);
|
||||||
MegasasBaseClass *b = MEGASAS_DEVICE_GET_CLASS(s);
|
MegasasBaseClass *b = MEGASAS_DEVICE_GET_CLASS(s);
|
||||||
uint8_t *pci_conf;
|
uint8_t *pci_conf;
|
||||||
|
@ -2426,9 +2425,6 @@ static void megasas_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||||
&megasas_scsi_info, NULL);
|
&megasas_scsi_info, NULL);
|
||||||
if (!d->hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property megasas_properties_gen1[] = {
|
static Property megasas_properties_gen1[] = {
|
||||||
|
|
|
@ -1271,7 +1271,6 @@ static const struct SCSIBusInfo mptsas_scsi_info = {
|
||||||
|
|
||||||
static void mptsas_scsi_realize(PCIDevice *dev, Error **errp)
|
static void mptsas_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
{
|
{
|
||||||
DeviceState *d = DEVICE(dev);
|
|
||||||
MPTSASState *s = MPT_SAS(dev);
|
MPTSASState *s = MPT_SAS(dev);
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1326,9 +1325,6 @@ static void mptsas_scsi_realize(PCIDevice *dev, Error **errp)
|
||||||
QTAILQ_INIT(&s->pending);
|
QTAILQ_INIT(&s->pending);
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), &dev->qdev, &mptsas_scsi_info, NULL);
|
scsi_bus_new(&s->bus, sizeof(s->bus), &dev->qdev, &mptsas_scsi_info, NULL);
|
||||||
if (!d->hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mptsas_scsi_uninit(PCIDevice *dev)
|
static void mptsas_scsi_uninit(PCIDevice *dev)
|
||||||
|
|
|
@ -263,12 +263,11 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
||||||
return SCSI_DEVICE(dev);
|
return SCSI_DEVICE(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error **errp)
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
|
||||||
{
|
{
|
||||||
Location loc;
|
Location loc;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
int unit;
|
int unit;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
loc_push_none(&loc);
|
loc_push_none(&loc);
|
||||||
for (unit = 0; unit <= bus->info->max_target; unit++) {
|
for (unit = 0; unit <= bus->info->max_target; unit++) {
|
||||||
|
@ -277,16 +276,59 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error **errp)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
qemu_opts_loc_restore(dinfo->opts);
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
|
if (deprecated) {
|
||||||
unit, false, -1, NULL, &err);
|
/* Handling -drive not claimed by machine initialization */
|
||||||
if (err != NULL) {
|
if (blk_get_attached_dev(blk_by_legacy_dinfo(dinfo))) {
|
||||||
error_propagate(errp, err);
|
continue; /* claimed */
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (!dinfo->is_default) {
|
||||||
|
error_report("warning: bus=%d,unit=%d is deprecated with this"
|
||||||
|
" machine type",
|
||||||
|
bus->busnr, unit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
|
||||||
|
unit, false, -1, NULL, &error_fatal);
|
||||||
}
|
}
|
||||||
loc_pop(&loc);
|
loc_pop(&loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_scsi_hba_with_legacy_magic(Object *obj)
|
||||||
|
{
|
||||||
|
static const char *magic[] = {
|
||||||
|
"am53c974", "dc390", "esp", "lsi53c810", "lsi53c895a",
|
||||||
|
"megasas", "megasas-gen2", "mptsas1068", "spapr-vscsi",
|
||||||
|
"virtio-scsi-device",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
const char *typename = object_get_typename(obj);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; magic[i]; i++)
|
||||||
|
if (!strcmp(typename, magic[i])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int scsi_legacy_handle_cmdline_cb(Object *obj, void *opaque)
|
||||||
|
{
|
||||||
|
SCSIBus *bus = (SCSIBus *)object_dynamic_cast(obj, TYPE_SCSI_BUS);
|
||||||
|
|
||||||
|
if (bus && is_scsi_hba_with_legacy_magic(OBJECT(bus->qbus.parent))) {
|
||||||
|
scsi_bus_legacy_handle_cmdline(bus, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void scsi_legacy_handle_cmdline(void)
|
||||||
|
{
|
||||||
|
object_child_foreach_recursive(object_get_root(),
|
||||||
|
scsi_legacy_handle_cmdline_cb, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
|
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
|
||||||
{
|
{
|
||||||
scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
|
scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
|
||||||
|
|
|
@ -1206,9 +1206,6 @@ static void spapr_vscsi_realize(VIOsPAPRDevice *dev, Error **errp)
|
||||||
|
|
||||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||||
&vscsi_scsi_info, NULL);
|
&vscsi_scsi_info, NULL);
|
||||||
if (!dev->qdev.hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, errp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void spapr_vscsi_create(VIOsPAPRBus *bus)
|
void spapr_vscsi_create(VIOsPAPRBus *bus)
|
||||||
|
@ -1218,6 +1215,8 @@ void spapr_vscsi_create(VIOsPAPRBus *bus)
|
||||||
dev = qdev_create(&bus->bus, "spapr-vscsi");
|
dev = qdev_create(&bus->bus, "spapr-vscsi");
|
||||||
|
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
scsi_bus_legacy_handle_cmdline(&VIO_SPAPR_VSCSI_DEVICE(dev)->bus,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int spapr_vscsi_devnode(VIOsPAPRDevice *dev, void *fdt, int node_off)
|
static int spapr_vscsi_devnode(VIOsPAPRDevice *dev, void *fdt, int node_off)
|
||||||
|
|
|
@ -904,14 +904,6 @@ static void virtio_scsi_device_realize(DeviceState *dev, Error **errp)
|
||||||
/* override default SCSI bus hotplug-handler, with virtio-scsi's one */
|
/* override default SCSI bus hotplug-handler, with virtio-scsi's one */
|
||||||
qbus_set_hotplug_handler(BUS(&s->bus), dev, &error_abort);
|
qbus_set_hotplug_handler(BUS(&s->bus), dev, &error_abort);
|
||||||
|
|
||||||
if (!dev->hotplugged) {
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
|
||||||
if (err != NULL) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
virtio_scsi_dataplane_setup(s, errp);
|
virtio_scsi_dataplane_setup(s, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -362,6 +362,7 @@ static void r2d_machine_init(MachineClass *mc)
|
||||||
{
|
{
|
||||||
mc->desc = "r2d-plus board";
|
mc->desc = "r2d-plus board";
|
||||||
mc->init = r2d_init;
|
mc->init = r2d_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MACHINE("r2d", r2d_machine_init)
|
DEFINE_MACHINE("r2d", r2d_machine_init)
|
||||||
|
|
|
@ -989,11 +989,6 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef,
|
||||||
slavio_misc_init(hwdef->slavio_base, hwdef->aux1_base, hwdef->aux2_base,
|
slavio_misc_init(hwdef->slavio_base, hwdef->aux1_base, hwdef->aux2_base,
|
||||||
slavio_irq[30], fdc_tc);
|
slavio_irq[30], fdc_tc);
|
||||||
|
|
||||||
if (drive_get_max_bus(IF_SCSI) > 0) {
|
|
||||||
fprintf(stderr, "qemu: too many SCSI bus\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_init(hwdef->esp_base, 2,
|
esp_init(hwdef->esp_base, 2,
|
||||||
espdma_memory_read, espdma_memory_write,
|
espdma_memory_read, espdma_memory_write,
|
||||||
espdma, espdma_irq, &esp_reset, &dma_enable);
|
espdma, espdma_irq, &esp_reset, &dma_enable);
|
||||||
|
|
|
@ -579,6 +579,7 @@ static void sun4u_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Sun4u platform";
|
mc->desc = "Sun4u platform";
|
||||||
mc->init = sun4u_init;
|
mc->init = sun4u_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = 1; /* XXX for now */
|
mc->max_cpus = 1; /* XXX for now */
|
||||||
mc->is_default = 1;
|
mc->is_default = 1;
|
||||||
mc->default_boot_order = "c";
|
mc->default_boot_order = "c";
|
||||||
|
@ -596,6 +597,7 @@ static void sun4v_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
mc->desc = "Sun4v platform";
|
mc->desc = "Sun4v platform";
|
||||||
mc->init = sun4v_init;
|
mc->init = sun4v_init;
|
||||||
|
mc->block_default_type = IF_IDE;
|
||||||
mc->max_cpus = 1; /* XXX for now */
|
mc->max_cpus = 1; /* XXX for now */
|
||||||
mc->default_boot_order = "c";
|
mc->default_boot_order = "c";
|
||||||
}
|
}
|
||||||
|
|
|
@ -688,6 +688,8 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn,
|
||||||
PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
|
PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
|
||||||
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
|
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
|
||||||
|
|
||||||
|
void lsi53c895a_create(PCIBus *bus);
|
||||||
|
|
||||||
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
|
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
|
||||||
void pci_set_irq(PCIDevice *pci_dev, int level);
|
void pci_set_irq(PCIDevice *pci_dev, int level);
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,8 @@ static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d)
|
||||||
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
||||||
int unit, bool removable, int bootindex,
|
int unit, bool removable, int bootindex,
|
||||||
const char *serial, Error **errp);
|
const char *serial, Error **errp);
|
||||||
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error **errp);
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated);
|
||||||
|
void scsi_legacy_handle_cmdline(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Predefined sense codes
|
* Predefined sense codes
|
||||||
|
|
|
@ -19,12 +19,11 @@ void blockdev_auto_del(BlockBackend *blk);
|
||||||
typedef enum {
|
typedef enum {
|
||||||
IF_DEFAULT = -1, /* for use with drive_add() only */
|
IF_DEFAULT = -1, /* for use with drive_add() only */
|
||||||
/*
|
/*
|
||||||
* IF_IDE must be zero, because we want MachineClass member
|
* IF_NONE must be zero, because we want MachineClass member
|
||||||
* block_default_type to default-initialize to IF_IDE
|
* block_default_type to default-initialize to IF_NONE
|
||||||
*/
|
*/
|
||||||
IF_IDE = 0,
|
IF_NONE = 0,
|
||||||
IF_NONE,
|
IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
|
||||||
IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
|
|
||||||
IF_COUNT
|
IF_COUNT
|
||||||
} BlockInterfaceType;
|
} BlockInterfaceType;
|
||||||
|
|
||||||
|
@ -49,7 +48,7 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo);
|
||||||
void override_max_devs(BlockInterfaceType type, int max_devs);
|
void override_max_devs(BlockInterfaceType type, int max_devs);
|
||||||
|
|
||||||
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
||||||
bool drive_check_orphaned(void);
|
void drive_check_orphaned(void);
|
||||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
||||||
int drive_get_max_bus(BlockInterfaceType type);
|
int drive_get_max_bus(BlockInterfaceType type);
|
||||||
int drive_get_max_devs(BlockInterfaceType type);
|
int drive_get_max_devs(BlockInterfaceType type);
|
||||||
|
|
|
@ -654,11 +654,6 @@ If you don't specify the "file=" argument, you define an empty drive:
|
||||||
qemu-system-i386 -drive if=ide,index=1,media=cdrom
|
qemu-system-i386 -drive if=ide,index=1,media=cdrom
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
You can connect a SCSI disk with unit ID 6 on the bus #0:
|
|
||||||
@example
|
|
||||||
qemu-system-i386 -drive file=file,if=scsi,bus=0,unit=6
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Instead of @option{-fda}, @option{-fdb}, you can use:
|
Instead of @option{-fda}, @option{-fdb}, you can use:
|
||||||
@example
|
@example
|
||||||
qemu-system-i386 -drive file=file,index=0,if=floppy
|
qemu-system-i386 -drive file=file,index=0,if=floppy
|
||||||
|
|
|
@ -118,7 +118,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
||||||
Testing: -drive if=scsi,media=cdrom
|
Testing: -drive if=scsi,media=cdrom
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) QEMU_PROG: -drive if=scsi,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type
|
||||||
|
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive if=ide
|
Testing: -drive if=ide
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
@ -127,7 +128,8 @@ QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.
|
||||||
|
|
||||||
Testing: -drive if=scsi
|
Testing: -drive if=scsi
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) QEMU_PROG: Initialization of device lsi53c895a failed: Device needs media, but drive is empty
|
(qemu) QEMU_PROG: -drive if=scsi: warning: bus=0,unit=0 is deprecated with this machine type
|
||||||
|
QEMU_PROG: -drive if=scsi: Device needs media, but drive is empty
|
||||||
|
|
||||||
Testing: -drive if=virtio
|
Testing: -drive if=virtio
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
@ -172,7 +174,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on
|
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on: warning: bus=0,unit=0 is deprecated with this machine type
|
||||||
|
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on
|
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
@ -181,7 +184,8 @@ QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on
|
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on: warning: bus=0,unit=0 is deprecated with this machine type
|
||||||
|
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
|
|
10
vl.c
10
vl.c
|
@ -62,6 +62,7 @@ int main(int argc, char **argv)
|
||||||
#include "hw/usb.h"
|
#include "hw/usb.h"
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
#include "hw/isa/isa.h"
|
#include "hw/isa/isa.h"
|
||||||
|
#include "hw/scsi/scsi.h"
|
||||||
#include "hw/bt.h"
|
#include "hw/bt.h"
|
||||||
#include "sysemu/watchdog.h"
|
#include "sysemu/watchdog.h"
|
||||||
#include "hw/smbios/smbios.h"
|
#include "hw/smbios/smbios.h"
|
||||||
|
@ -4509,6 +4510,15 @@ int main(int argc, char **argv, char **envp)
|
||||||
|
|
||||||
rom_reset_order_override();
|
rom_reset_order_override();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create frontends for -drive if=scsi leftovers.
|
||||||
|
* Normally, frontends for -drive get created by machine
|
||||||
|
* initialization for onboard SCSI HBAs. However, we create a few
|
||||||
|
* more ever since SCSI qdevification, but this is pretty much an
|
||||||
|
* implementation accident, and deprecated.
|
||||||
|
*/
|
||||||
|
scsi_legacy_handle_cmdline();
|
||||||
|
|
||||||
/* Did we create any drives that we failed to create a device for? */
|
/* Did we create any drives that we failed to create a device for? */
|
||||||
drive_check_orphaned();
|
drive_check_orphaned();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue