summaryrefslogtreecommitdiffstats
path: root/hw/misc/macio/macio.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/misc/macio/macio.c')
-rw-r--r--hw/misc/macio/macio.c59
1 files changed, 22 insertions, 37 deletions
diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index 3779865ab2..8ba7af073c 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -94,22 +94,13 @@ static void macio_bar_setup(MacIOState *s)
macio_escc_legacy_setup(s);
}
-static void macio_init_child_obj(MacIOState *s, const char *childname,
- void *child, size_t childsize,
- const char *childtype)
-{
- object_initialize_child(OBJECT(s), childname, child, childsize, childtype,
- &error_abort, NULL);
- qdev_set_parent_bus(DEVICE(child), BUS(&s->macio_bus));
-}
-
static void macio_common_realize(PCIDevice *d, Error **errp)
{
MacIOState *s = MACIO(d);
SysBusDevice *sysbus_dev;
Error *err = NULL;
- object_property_set_bool(OBJECT(&s->dbdma), true, "realized", &err);
+ qdev_realize(DEVICE(&s->dbdma), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -125,7 +116,7 @@ static void macio_common_realize(PCIDevice *d, Error **errp)
qdev_prop_set_chr(DEVICE(&s->escc), "chrB", serial_hd(1));
qdev_prop_set_uint32(DEVICE(&s->escc), "chnBtype", escc_serial);
qdev_prop_set_uint32(DEVICE(&s->escc), "chnAtype", escc_serial);
- object_property_set_bool(OBJECT(&s->escc), true, "realized", &err);
+ qdev_realize(DEVICE(&s->escc), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -148,7 +139,7 @@ static void macio_realize_ide(MacIOState *s, MACIOIDEState *ide,
object_property_set_link(OBJECT(ide), OBJECT(&s->dbdma), "dbdma", errp);
macio_ide_register_dma(ide);
- object_property_set_bool(OBJECT(ide), true, "realized", errp);
+ qdev_realize(DEVICE(ide), BUS(&s->macio_bus), errp);
}
static void macio_oldworld_realize(PCIDevice *d, Error **errp)
@@ -167,7 +158,7 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
s->frequency);
- object_property_set_bool(OBJECT(&s->cuda), true, "realized", &err);
+ qdev_realize(DEVICE(&s->cuda), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -184,7 +175,7 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
sysbus_connect_irq(sysbus_dev, 1, qdev_get_gpio_in(pic_dev,
OLDWORLD_ESCCA_IRQ));
- object_property_set_bool(OBJECT(&os->nvram), true, "realized", &err);
+ qdev_realize(DEVICE(&os->nvram), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -219,13 +210,12 @@ static void macio_oldworld_realize(PCIDevice *d, Error **errp)
}
}
-static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, size_t ide_size,
- int index)
+static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, int index)
{
gchar *name = g_strdup_printf("ide[%i]", index);
uint32_t addr = 0x1f000 + ((index + 1) * 0x1000);
- macio_init_child_obj(s, name, ide, ide_size, TYPE_MACIO_IDE);
+ object_initialize_child(OBJECT(s), name, ide, TYPE_MACIO_IDE);
qdev_prop_set_uint32(DEVICE(ide), "addr", addr);
memory_region_add_subregion(&s->bar, addr, &ide->mem);
g_free(name);
@@ -243,15 +233,15 @@ static void macio_oldworld_init(Object *obj)
qdev_prop_allow_set_link_before_realize,
0);
- macio_init_child_obj(s, "cuda", &s->cuda, sizeof(s->cuda), TYPE_CUDA);
+ object_initialize_child(OBJECT(s), "cuda", &s->cuda, TYPE_CUDA);
- object_initialize(&os->nvram, sizeof(os->nvram), TYPE_MACIO_NVRAM);
+ object_initialize_child(OBJECT(s), "nvram", &os->nvram, TYPE_MACIO_NVRAM);
dev = DEVICE(&os->nvram);
qdev_prop_set_uint32(dev, "size", 0x2000);
qdev_prop_set_uint32(dev, "it_shift", 4);
for (i = 0; i < 2; i++) {
- macio_init_ide(s, &os->ide[i], sizeof(os->ide[i]), i);
+ macio_init_ide(s, &os->ide[i], i);
}
}
@@ -347,17 +337,14 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
&error_abort);
memory_region_add_subregion(&s->bar, 0x50,
sysbus_mmio_get_region(sysbus_dev, 0));
- object_property_set_bool(OBJECT(&ns->gpio), true, "realized", &err);
+ qdev_realize(DEVICE(&ns->gpio), BUS(&s->macio_bus), &err);
/* PMU */
- object_initialize_child(OBJECT(s), "pmu", &s->pmu, sizeof(s->pmu),
- TYPE_VIA_PMU, &error_abort, NULL);
+ object_initialize_child(OBJECT(s), "pmu", &s->pmu, TYPE_VIA_PMU);
object_property_set_link(OBJECT(&s->pmu), OBJECT(sysbus_dev), "gpio",
&error_abort);
qdev_prop_set_bit(DEVICE(&s->pmu), "has-adb", ns->has_adb);
- qdev_set_parent_bus(DEVICE(&s->pmu), BUS(&s->macio_bus));
-
- object_property_set_bool(OBJECT(&s->pmu), true, "realized", &err);
+ qdev_realize(DEVICE(&s->pmu), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -368,14 +355,14 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
memory_region_add_subregion(&s->bar, 0x16000,
sysbus_mmio_get_region(sysbus_dev, 0));
} else {
+ object_unparent(OBJECT(&ns->gpio));
+
/* CUDA */
- object_initialize_child(OBJECT(s), "cuda", &s->cuda, sizeof(s->cuda),
- TYPE_CUDA, &error_abort, NULL);
- qdev_set_parent_bus(DEVICE(&s->cuda), BUS(&s->macio_bus));
+ object_initialize_child(OBJECT(s), "cuda", &s->cuda, TYPE_CUDA);
qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
s->frequency);
- object_property_set_bool(OBJECT(&s->cuda), true, "realized", &err);
+ qdev_realize(DEVICE(&s->cuda), BUS(&s->macio_bus), &err);
if (err) {
error_propagate(errp, err);
return;
@@ -399,11 +386,10 @@ static void macio_newworld_init(Object *obj)
qdev_prop_allow_set_link_before_realize,
0);
- macio_init_child_obj(s, "gpio", &ns->gpio, sizeof(ns->gpio),
- TYPE_MACIO_GPIO);
+ object_initialize_child(OBJECT(s), "gpio", &ns->gpio, TYPE_MACIO_GPIO);
for (i = 0; i < 2; i++) {
- macio_init_ide(s, &ns->ide[i], sizeof(ns->ide[i]), i);
+ macio_init_ide(s, &ns->ide[i], i);
}
}
@@ -416,10 +402,9 @@ static void macio_instance_init(Object *obj)
qbus_create_inplace(&s->macio_bus, sizeof(s->macio_bus), TYPE_MACIO_BUS,
DEVICE(obj), "macio.0");
- macio_init_child_obj(s, "dbdma", &s->dbdma, sizeof(s->dbdma),
- TYPE_MAC_DBDMA);
+ object_initialize_child(OBJECT(s), "dbdma", &s->dbdma, TYPE_MAC_DBDMA);
- macio_init_child_obj(s, "escc", &s->escc, sizeof(s->escc), TYPE_ESCC);
+ object_initialize_child(OBJECT(s), "escc", &s->escc, TYPE_ESCC);
}
static const VMStateDescription vmstate_macio_oldworld = {
@@ -489,7 +474,7 @@ static void macio_class_init(ObjectClass *klass, void *data)
static const TypeInfo macio_bus_info = {
.name = TYPE_MACIO_BUS,
- .parent = TYPE_BUS,
+ .parent = TYPE_SYSTEM_BUS,
.instance_size = sizeof(MacIOBusState),
};