hpet: Use QOM realize for hpet
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com> [AF: Avoided SYS_BUS_DEVICE() in loop] Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
caad4eb345
commit
726887ef44
|
@ -686,8 +686,19 @@ static void hpet_handle_legacy_irq(void *opaque, int n, int level)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hpet_init(SysBusDevice *dev)
|
static void hpet_init(Object *obj)
|
||||||
{
|
{
|
||||||
|
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||||
|
HPETState *s = HPET(obj);
|
||||||
|
|
||||||
|
/* HPET Area */
|
||||||
|
memory_region_init_io(&s->iomem, obj, &hpet_ram_ops, s, "hpet", 0x400);
|
||||||
|
sysbus_init_mmio(sbd, &s->iomem);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hpet_realize(DeviceState *dev, Error **errp)
|
||||||
|
{
|
||||||
|
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
||||||
HPETState *s = HPET(dev);
|
HPETState *s = HPET(dev);
|
||||||
int i;
|
int i;
|
||||||
HPETTimer *timer;
|
HPETTimer *timer;
|
||||||
|
@ -698,14 +709,14 @@ static int hpet_init(SysBusDevice *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hpet_cfg.count == 8) {
|
if (hpet_cfg.count == 8) {
|
||||||
fprintf(stderr, "Only 8 instances of HPET is allowed\n");
|
error_setg(errp, "Only 8 instances of HPET is allowed");
|
||||||
return -1;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->hpet_id = hpet_cfg.count++;
|
s->hpet_id = hpet_cfg.count++;
|
||||||
|
|
||||||
for (i = 0; i < HPET_NUM_IRQ_ROUTES; i++) {
|
for (i = 0; i < HPET_NUM_IRQ_ROUTES; i++) {
|
||||||
sysbus_init_irq(dev, &s->irqs[i]);
|
sysbus_init_irq(sbd, &s->irqs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->num_timers < HPET_MIN_TIMERS) {
|
if (s->num_timers < HPET_MIN_TIMERS) {
|
||||||
|
@ -725,13 +736,8 @@ static int hpet_init(SysBusDevice *dev)
|
||||||
s->capability |= (s->num_timers - 1) << HPET_ID_NUM_TIM_SHIFT;
|
s->capability |= (s->num_timers - 1) << HPET_ID_NUM_TIM_SHIFT;
|
||||||
s->capability |= ((HPET_CLK_PERIOD) << 32);
|
s->capability |= ((HPET_CLK_PERIOD) << 32);
|
||||||
|
|
||||||
qdev_init_gpio_in(&dev->qdev, hpet_handle_legacy_irq, 2);
|
qdev_init_gpio_in(dev, hpet_handle_legacy_irq, 2);
|
||||||
qdev_init_gpio_out(&dev->qdev, &s->pit_enabled, 1);
|
qdev_init_gpio_out(dev, &s->pit_enabled, 1);
|
||||||
|
|
||||||
/* HPET Area */
|
|
||||||
memory_region_init_io(&s->iomem, OBJECT(s), &hpet_ram_ops, s, "hpet", 0x400);
|
|
||||||
sysbus_init_mmio(dev, &s->iomem);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property hpet_device_properties[] = {
|
static Property hpet_device_properties[] = {
|
||||||
|
@ -743,9 +749,8 @@ static Property hpet_device_properties[] = {
|
||||||
static void hpet_device_class_init(ObjectClass *klass, void *data)
|
static void hpet_device_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
|
|
||||||
|
|
||||||
k->init = hpet_init;
|
dc->realize = hpet_realize;
|
||||||
dc->no_user = 1;
|
dc->no_user = 1;
|
||||||
dc->reset = hpet_reset;
|
dc->reset = hpet_reset;
|
||||||
dc->vmsd = &vmstate_hpet;
|
dc->vmsd = &vmstate_hpet;
|
||||||
|
@ -756,6 +761,7 @@ static const TypeInfo hpet_device_info = {
|
||||||
.name = TYPE_HPET,
|
.name = TYPE_HPET,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(HPETState),
|
.instance_size = sizeof(HPETState),
|
||||||
|
.instance_init = hpet_init,
|
||||||
.class_init = hpet_device_class_init,
|
.class_init = hpet_device_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue