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…
	
		Reference in New Issue