mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-22 13:34:27 +00:00
pl061: QOM'ify pl061 and pl061_luminary
Let pl061_luminary inherit from pl061, with differing instance_init. Introduce type constant and use QOM casts. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
ee663e96e4
commit
692a76d1c4
@ -28,8 +28,12 @@ static const uint8_t pl061_id[12] =
|
||||
static const uint8_t pl061_id_luminary[12] =
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x18, 0x01, 0x0d, 0xf0, 0x05, 0xb1 };
|
||||
|
||||
#define TYPE_PL061 "pl061"
|
||||
#define PL061(obj) OBJECT_CHECK(PL061State, (obj), TYPE_PL061)
|
||||
|
||||
typedef struct PL061State {
|
||||
SysBusDevice busdev;
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
MemoryRegion iomem;
|
||||
uint32_t locked;
|
||||
uint32_t data;
|
||||
@ -272,27 +276,32 @@ static const MemoryRegionOps pl061_ops = {
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
};
|
||||
|
||||
static int pl061_init(SysBusDevice *dev, const unsigned char *id)
|
||||
static int pl061_initfn(SysBusDevice *sbd)
|
||||
{
|
||||
PL061State *s = FROM_SYSBUS(PL061State, dev);
|
||||
s->id = id;
|
||||
DeviceState *dev = DEVICE(sbd);
|
||||
PL061State *s = PL061(dev);
|
||||
|
||||
memory_region_init_io(&s->iomem, OBJECT(s), &pl061_ops, s, "pl061", 0x1000);
|
||||
sysbus_init_mmio(dev, &s->iomem);
|
||||
sysbus_init_irq(dev, &s->irq);
|
||||
qdev_init_gpio_in(&dev->qdev, pl061_set_irq, 8);
|
||||
qdev_init_gpio_out(&dev->qdev, s->out, 8);
|
||||
sysbus_init_mmio(sbd, &s->iomem);
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
qdev_init_gpio_in(dev, pl061_set_irq, 8);
|
||||
qdev_init_gpio_out(dev, s->out, 8);
|
||||
pl061_reset(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pl061_init_luminary(SysBusDevice *dev)
|
||||
static void pl061_luminary_init(Object *obj)
|
||||
{
|
||||
return pl061_init(dev, pl061_id_luminary);
|
||||
PL061State *s = PL061(obj);
|
||||
|
||||
s->id = pl061_id_luminary;
|
||||
}
|
||||
|
||||
static int pl061_init_arm(SysBusDevice *dev)
|
||||
static void pl061_init(Object *obj)
|
||||
{
|
||||
return pl061_init(dev, pl061_id);
|
||||
PL061State *s = PL061(obj);
|
||||
|
||||
s->id = pl061_id;
|
||||
}
|
||||
|
||||
static void pl061_class_init(ObjectClass *klass, void *data)
|
||||
@ -300,31 +309,22 @@ static void pl061_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = pl061_init_arm;
|
||||
k->init = pl061_initfn;
|
||||
dc->vmsd = &vmstate_pl061;
|
||||
}
|
||||
|
||||
static const TypeInfo pl061_info = {
|
||||
.name = "pl061",
|
||||
.name = TYPE_PL061,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(PL061State),
|
||||
.instance_init = pl061_init,
|
||||
.class_init = pl061_class_init,
|
||||
};
|
||||
|
||||
static void pl061_luminary_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = pl061_init_luminary;
|
||||
dc->vmsd = &vmstate_pl061;
|
||||
}
|
||||
|
||||
static const TypeInfo pl061_luminary_info = {
|
||||
.name = "pl061_luminary",
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(PL061State),
|
||||
.class_init = pl061_luminary_class_init,
|
||||
.parent = TYPE_PL061,
|
||||
.instance_init = pl061_luminary_init,
|
||||
};
|
||||
|
||||
static void pl061_register_types(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user