aboutsummaryrefslogtreecommitdiff
path: root/hw/ide/qdev.c
diff options
context:
space:
mode:
authorFathi Boudra <fathi.boudra@linaro.org>2013-08-05 10:19:49 +0300
committerFathi Boudra <fathi.boudra@linaro.org>2013-08-05 10:19:49 +0300
commit86342dcc9b73eac8310b9dc5fd1356bbfa5b9c8e (patch)
treec9987b94bab825a920990236234da4747d565f37 /hw/ide/qdev.c
parent050a840ead5e51a1a9f3bffe89cc89077b2f35ed (diff)
Imported Upstream version 1.5.0-2013.06+git74+20130802+ef1b0aeupstream
Diffstat (limited to 'hw/ide/qdev.c')
-rw-r--r--hw/ide/qdev.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index c436b38..6a272b0 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -21,7 +21,7 @@
#include "qemu/error-report.h"
#include <hw/ide/internal.h>
#include "sysemu/blockdev.h"
-#include "hw/block-common.h"
+#include "hw/block/block.h"
#include "sysemu/sysemu.h"
/* --------------------------------- */
@@ -47,10 +47,11 @@ static const TypeInfo ide_bus_info = {
.class_init = ide_bus_class_init,
};
-void ide_bus_new(IDEBus *idebus, DeviceState *dev, int bus_id)
+void ide_bus_new(IDEBus *idebus, DeviceState *dev, int bus_id, int max_units)
{
qbus_create_inplace(&idebus->qbus, TYPE_IDE_BUS, dev, NULL);
idebus->bus_id = bus_id;
+ idebus->max_units = max_units;
}
static char *idebus_get_fw_dev_path(DeviceState *dev)
@@ -76,6 +77,13 @@ static int ide_qdev_init(DeviceState *qdev)
if (dev->unit == -1) {
dev->unit = bus->master ? 1 : 0;
}
+
+ if (dev->unit >= bus->max_units) {
+ error_report("Can't create IDE unit %d, bus supports only %d units",
+ dev->unit, bus->max_units);
+ goto err;
+ }
+
switch (dev->unit) {
case 0:
if (bus->master) {
@@ -143,7 +151,10 @@ 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;
- if (dev->conf.discard_granularity && dev->conf.discard_granularity != 512) {
+ if (dev->conf.discard_granularity == -1) {
+ dev->conf.discard_granularity = 512;
+ } else if (dev->conf.discard_granularity &&
+ dev->conf.discard_granularity != 512) {
error_report("discard_granularity must be 512 for ide");
return -1;
}