From 87228afbd88e6ed3bce6a00971029fc629c8592a Mon Sep 17 00:00:00 2001 From: Andrew Baumann Date: Wed, 25 Nov 2015 14:49:46 -0800 Subject: [PATCH] bcm2835_vchiq: add header file and convert to init/realize --- hw/arm/bcm2835_peripherals.c | 12 ++++----- hw/misc/bcm2835_vchiq.c | 49 ++++++++++++++---------------------- include/hw/arm/bcm2835_peripherals.h | 4 ++- include/hw/misc/bcm2835_vchiq.h | 22 ++++++++++++++++ 4 files changed, 50 insertions(+), 37 deletions(-) create mode 100644 include/hw/misc/bcm2835_vchiq.h diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c index 8f2d6a5136..3796c0df17 100644 --- a/hw/arm/bcm2835_peripherals.c +++ b/hw/arm/bcm2835_peripherals.c @@ -101,9 +101,9 @@ static void bcm2835_peripherals_init(Object *obj) OBJECT(&s->gpu_bus_mr), &error_abort); /* VCHIQ */ - s->vchiq = dev = SYS_BUS_DEVICE(object_new("bcm2835_vchiq")); - object_property_add_child(obj, "vchiq", OBJECT(dev), NULL); - qdev_set_parent_bus(DEVICE(dev), sysbus_get_default()); + object_initialize(&s->vchiq, sizeof(s->vchiq), TYPE_BCM2835_VCHIQ); + object_property_add_child(obj, "vchiq", OBJECT(&s->vchiq), NULL); + qdev_set_parent_bus(DEVICE(&s->vchiq), sysbus_get_default()); /* Extended Mass Media Controller */ s->emmc = dev = SYS_BUS_DEVICE(object_new("bcm2835_emmc")); @@ -300,15 +300,15 @@ static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp) qdev_get_gpio_in(DEVICE(&s->sbm), MBOX_CHAN_PROPERTY)); /* VCHIQ */ - object_property_set_bool(OBJECT(s->vchiq), true, "realized", &err); + object_property_set_bool(OBJECT(&s->vchiq), true, "realized", &err); if (err) { error_propagate(errp, err); return; } memory_region_add_subregion(&s->mbox_mr, MBOX_CHAN_VCHIQ<<4, - sysbus_mmio_get_region(s->vchiq, 0)); - sysbus_connect_irq(s->vchiq, 0, + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->vchiq), 0)); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->vchiq), 0, qdev_get_gpio_in(DEVICE(&s->sbm), MBOX_CHAN_VCHIQ)); /* Extended Mass Media Controller */ diff --git a/hw/misc/bcm2835_vchiq.c b/hw/misc/bcm2835_vchiq.c index 68d3461559..185d7812fd 100644 --- a/hw/misc/bcm2835_vchiq.c +++ b/hw/misc/bcm2835_vchiq.c @@ -3,25 +3,13 @@ * This code is licensed under the GNU GPLv2 and later. */ -#include "hw/sysbus.h" - +#include "hw/misc/bcm2835_vchiq.h" #include "hw/arm/bcm2835_mbox.h" -#define TYPE_BCM2835_VCHIQ "bcm2835_vchiq" -#define BCM2835_VCHIQ(obj) \ - OBJECT_CHECK(Bcm2835VchiqState, (obj), TYPE_BCM2835_VCHIQ) - -typedef struct { - SysBusDevice busdev; - MemoryRegion iomem; - int pending; - qemu_irq mbox_irq; -} Bcm2835VchiqState; - static uint64_t bcm2835_vchiq_read(void *opaque, hwaddr offset, unsigned size) { - Bcm2835VchiqState *s = (Bcm2835VchiqState *)opaque; + BCM2835VchiqState *s = (BCM2835VchiqState *)opaque; uint32_t res = 0; switch (offset) { @@ -44,7 +32,7 @@ static uint64_t bcm2835_vchiq_read(void *opaque, hwaddr offset, static void bcm2835_vchiq_write(void *opaque, hwaddr offset, uint64_t value, unsigned size) { - Bcm2835VchiqState *s = (Bcm2835VchiqState *)opaque; + BCM2835VchiqState *s = (BCM2835VchiqState *)opaque; switch (offset) { case 0: s->pending = 1; @@ -58,14 +46,12 @@ static void bcm2835_vchiq_write(void *opaque, hwaddr offset, } - static const MemoryRegionOps bcm2835_vchiq_ops = { .read = bcm2835_vchiq_read, .write = bcm2835_vchiq_write, .endianness = DEVICE_NATIVE_ENDIAN, }; - static const VMStateDescription vmstate_bcm2835_vchiq = { .name = TYPE_BCM2835_VCHIQ, .version_id = 1, @@ -76,34 +62,37 @@ static const VMStateDescription vmstate_bcm2835_vchiq = { } }; -static int bcm2835_vchiq_init(SysBusDevice *sbd) +static void bcm2835_vchiq_init(Object *obj) { - DeviceState *dev = DEVICE(sbd); - Bcm2835VchiqState *s = BCM2835_VCHIQ(dev); + BCM2835VchiqState *s = BCM2835_VCHIQ(obj); - s->pending = 0; + sysbus_init_irq(SYS_BUS_DEVICE(s), &s->mbox_irq); + memory_region_init_io(&s->iomem, obj, &bcm2835_vchiq_ops, s, + TYPE_BCM2835_VCHIQ, 0x10); + sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem); +} - sysbus_init_irq(sbd, &s->mbox_irq); - memory_region_init_io(&s->iomem, OBJECT(s), &bcm2835_vchiq_ops, s, - TYPE_BCM2835_VCHIQ, 0x10); - sysbus_init_mmio(sbd, &s->iomem); - vmstate_register(dev, -1, &vmstate_bcm2835_vchiq, s); +static void bcm2835_vchiq_realize(DeviceState *dev, Error **errp) +{ + BCM2835VchiqState *s = BCM2835_VCHIQ(dev); - return 0; + s->pending = 0; } static void bcm2835_vchiq_class_init(ObjectClass *klass, void *data) { - SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass); + DeviceClass *dc = DEVICE_CLASS(klass); - sdc->init = bcm2835_vchiq_init; + dc->realize = bcm2835_vchiq_realize; + dc->vmsd = &vmstate_bcm2835_vchiq; } static TypeInfo bcm2835_vchiq_info = { .name = TYPE_BCM2835_VCHIQ, .parent = TYPE_SYS_BUS_DEVICE, - .instance_size = sizeof(Bcm2835VchiqState), + .instance_size = sizeof(BCM2835VchiqState), .class_init = bcm2835_vchiq_class_init, + .instance_init = bcm2835_vchiq_init, }; static void bcm2835_vchiq_register_types(void) diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index bb1af7e559..d0062873c7 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -22,6 +22,7 @@ #include "hw/misc/bcm2835_power.h" #include "hw/misc/bcm2835_property.h" #include "hw/misc/bcm2835_sbm.h" +#include "hw/misc/bcm2835_vchiq.h" #define TYPE_BCM2835_PERIPHERALS "bcm2835_peripherals" #define BCM2835_PERIPHERALS(obj) \ @@ -44,7 +45,8 @@ typedef struct BCM2835PeripheralState { BCM2835PowerState power; BCM2835PropertyState property; BCM2835SbmState sbm; - SysBusDevice *uart0, *systimer, *armtimer, *usb, *vchiq, *emmc; + BCM2835VchiqState vchiq; + SysBusDevice *uart0, *systimer, *armtimer, *usb, *emmc; } BCM2835PeripheralState; #endif /* BCM2835_PERIPHERALS_H */ diff --git a/include/hw/misc/bcm2835_vchiq.h b/include/hw/misc/bcm2835_vchiq.h new file mode 100644 index 0000000000..8ba9fd8c62 --- /dev/null +++ b/include/hw/misc/bcm2835_vchiq.h @@ -0,0 +1,22 @@ +/* + * Raspberry Pi emulation (c) 2012 Gregory Estrade + * This code is licensed under the GNU GPLv2 and later. + */ + +#ifndef BCM2835_VCHIQ_H +#define BCM2835_VCHIQ_H + +#include "hw/sysbus.h" + +#define TYPE_BCM2835_VCHIQ "bcm2835_vchiq" +#define BCM2835_VCHIQ(obj) \ + OBJECT_CHECK(BCM2835VchiqState, (obj), TYPE_BCM2835_VCHIQ) + +typedef struct { + SysBusDevice busdev; + MemoryRegion iomem; + int pending; + qemu_irq mbox_irq; +} BCM2835VchiqState; + +#endif -- 2.11.4.GIT