diff options
Diffstat (limited to 'hw/ide')
-rw-r--r-- | hw/ide/core.c | 10 | ||||
-rw-r--r-- | hw/ide/internal.h | 7 | ||||
-rw-r--r-- | hw/ide/qdev.c | 7 |
3 files changed, 16 insertions, 8 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c index 603e53776e..4cfaf38211 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -2594,7 +2594,8 @@ void ide_bus_reset(IDEBus *bus) ide_clear_hob(bus); } -void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version) +void ide_init_drive(IDEState *s, DriveInfo *dinfo, BlockConf *conf, + const char *version) { int cylinders, heads, secs; uint64_t nb_sectors; @@ -2619,6 +2620,9 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version) } strncpy(s->drive_serial_str, drive_get_serial(s->bs), sizeof(s->drive_serial_str)); + if (conf) { + s->conf = conf; + } } if (strlen(s->drive_serial_str) == 0) snprintf(s->drive_serial_str, sizeof(s->drive_serial_str), @@ -2648,9 +2652,9 @@ void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1, s->sector_write_timer = qemu_new_timer(vm_clock, ide_sector_write_timer_cb, s); if (i == 0) - ide_init_drive(s, hd0, NULL); + ide_init_drive(s, hd0, NULL, NULL); if (i == 1) - ide_init_drive(s, hd1, NULL); + ide_init_drive(s, hd1, NULL, NULL); } bus->irq = irq; } diff --git a/hw/ide/internal.h b/hw/ide/internal.h index 1cc4b550f7..9945993655 100644 --- a/hw/ide/internal.h +++ b/hw/ide/internal.h @@ -7,6 +7,7 @@ * non-internal declarations are in hw/ide.h */ #include <hw/ide.h> +#include "block_int.h" /* debug IDE devices */ //#define DEBUG_IDE @@ -397,6 +398,7 @@ struct IDEState { /* set for lba48 access */ uint8_t lba48; BlockDriverState *bs; + BlockConf *conf; char version[9]; /* ATAPI specific */ uint8_t sense_key; @@ -449,7 +451,7 @@ struct IDEBus { struct IDEDevice { DeviceState qdev; uint32_t unit; - DriveInfo *dinfo; + BlockConf conf; char *version; }; @@ -551,7 +553,8 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr); void ide_data_writel(void *opaque, uint32_t addr, uint32_t val); uint32_t ide_data_readl(void *opaque, uint32_t addr); -void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version); +void ide_init_drive(IDEState *s, DriveInfo *dinfo, BlockConf *conf, + const char *version); void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1, qemu_irq irq); void ide_init_ioport(IDEBus *bus, int iobase, int iobase2); diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c index 0b84a4f1d0..b18693d945 100644 --- a/hw/ide/qdev.c +++ b/hw/ide/qdev.c @@ -40,7 +40,7 @@ static int ide_qdev_init(DeviceState *qdev, DeviceInfo *base) IDEDeviceInfo *info = DO_UPCAST(IDEDeviceInfo, qdev, base); IDEBus *bus = DO_UPCAST(IDEBus, qbus, qdev->parent_bus); - if (!dev->dinfo) { + if (!dev->conf.dinfo) { fprintf(stderr, "%s: no drive specified\n", qdev->info->name); goto err; } @@ -99,7 +99,8 @@ typedef struct IDEDrive { static int ide_drive_initfn(IDEDevice *dev) { IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus); - ide_init_drive(bus->ifs + dev->unit, dev->dinfo, dev->version); + ide_init_drive(bus->ifs + dev->unit, dev->conf.dinfo, &dev->conf, + dev->version); return 0; } @@ -109,7 +110,7 @@ static IDEDeviceInfo ide_drive_info = { .init = ide_drive_initfn, .qdev.props = (Property[]) { DEFINE_PROP_UINT32("unit", IDEDrive, dev.unit, -1), - DEFINE_PROP_DRIVE("drive", IDEDrive, dev.dinfo), + DEFINE_BLOCK_PROPERTIES(IDEDrive, dev.conf), DEFINE_PROP_STRING("ver", IDEDrive, dev.version), DEFINE_PROP_END_OF_LIST(), } |