diff options
Diffstat (limited to 'hw/ide')
-rw-r--r-- | hw/ide/core.c | 24 | ||||
-rw-r--r-- | hw/ide/qdev.c | 19 |
2 files changed, 14 insertions, 29 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c index 5378fc39fe..d65ef3d58d 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1935,18 +1935,6 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind, s->drive_kind = kind; bdrv_get_geometry(bs, &nb_sectors); - if (cylinders < 1 || cylinders > 65535) { - error_report("cyls must be between 1 and 65535"); - return -1; - } - if (heads < 1 || heads > 16) { - error_report("heads must be between 1 and 16"); - return -1; - } - if (secs < 1 || secs > 255) { - error_report("secs must be between 1 and 255"); - return -1; - } s->cylinders = cylinders; s->heads = heads; s->sectors = secs; @@ -2094,6 +2082,18 @@ void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0, } else if (trans == BIOS_ATA_TRANSLATION_AUTO) { trans = hd_bios_chs_auto_trans(cyls, heads, secs); } + if (cyls < 1 || cyls > 65535) { + error_report("cyls must be between 1 and 65535"); + exit(1); + } + if (heads < 1 || heads > 16) { + error_report("heads must be between 1 and 16"); + exit(1); + } + if (secs < 1 || secs > 255) { + error_report("secs must be between 1 and 255"); + exit(1); + } if (ide_init_drive(&bus->ifs[i], dinfo->bdrv, dinfo->media_cd ? IDE_CD : IDE_HD, NULL, dinfo->serial, NULL, 0, diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c index 7fe803c85f..22e58dfc8a 100644 --- a/hw/ide/qdev.c +++ b/hw/ide/qdev.c @@ -142,7 +142,6 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind) { IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus); IDEState *s = bus->ifs + dev->unit; - DriveInfo *dinfo; if (dev->conf.discard_granularity && dev->conf.discard_granularity != 512) { error_report("discard_granularity must be 512 for ide"); @@ -150,22 +149,8 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind) } blkconf_serial(&dev->conf, &dev->serial); - - if (!dev->conf.cyls && !dev->conf.heads && !dev->conf.secs) { - /* try to fall back to value set with legacy -drive cyls=... */ - dinfo = drive_get_by_blockdev(dev->conf.bs); - dev->conf.cyls = dinfo->cyls; - dev->conf.heads = dinfo->heads; - dev->conf.secs = dinfo->secs; - dev->chs_trans = dinfo->trans; - } - if (!dev->conf.cyls && !dev->conf.heads && !dev->conf.secs) { - hd_geometry_guess(dev->conf.bs, - &dev->conf.cyls, &dev->conf.heads, &dev->conf.secs, - &dev->chs_trans); - } else if (dev->chs_trans == BIOS_ATA_TRANSLATION_AUTO) { - dev->chs_trans = hd_bios_chs_auto_trans(dev->conf.cyls, - dev->conf.heads, dev->conf.secs); + if (blkconf_geometry(&dev->conf, &dev->chs_trans, 65536, 16, 255) < 0) { + return -1; } if (ide_init_drive(s, dev->conf.bs, kind, |