2 * Raspberry Pi emulation (c) 2012 Gregory Estrade
3 * This code is licensed under the GNU GPLv2 and later.
8 #include "hw/arm/bcm2835_common.h"
10 #define TYPE_BCM2835_VCHIQ "bcm2835_vchiq"
11 #define BCM2835_VCHIQ(obj) \
12 OBJECT_CHECK(bcm2835_vchiq_state, (obj), TYPE_BCM2835_VCHIQ)
19 } bcm2835_vchiq_state
;
21 static uint64_t bcm2835_vchiq_read(void *opaque
, hwaddr offset
,
24 bcm2835_vchiq_state
*s
= (bcm2835_vchiq_state
*)opaque
;
29 res
= MBOX_CHAN_VCHIQ
;
31 qemu_set_irq(s
->mbox_irq
, 0);
37 qemu_log_mask(LOG_GUEST_ERROR
,
38 "bcm2835_vchiq_read: Bad offset %x\n", (int)offset
);
43 static void bcm2835_vchiq_write(void *opaque
, hwaddr offset
,
44 uint64_t value
, unsigned size
)
46 bcm2835_vchiq_state
*s
= (bcm2835_vchiq_state
*)opaque
;
50 qemu_set_irq(s
->mbox_irq
, 1);
53 qemu_log_mask(LOG_GUEST_ERROR
,
54 "bcm2835_vchiq_write: Bad offset %x\n", (int)offset
);
61 static const MemoryRegionOps bcm2835_vchiq_ops
= {
62 .read
= bcm2835_vchiq_read
,
63 .write
= bcm2835_vchiq_write
,
64 .endianness
= DEVICE_NATIVE_ENDIAN
,
68 static const VMStateDescription vmstate_bcm2835_vchiq
= {
69 .name
= TYPE_BCM2835_VCHIQ
,
71 .minimum_version_id
= 1,
72 .minimum_version_id_old
= 1,
73 .fields
= (VMStateField
[]) {
78 static int bcm2835_vchiq_init(SysBusDevice
*sbd
)
80 DeviceState
*dev
= DEVICE(sbd
);
81 bcm2835_vchiq_state
*s
= BCM2835_VCHIQ(dev
);
85 sysbus_init_irq(sbd
, &s
->mbox_irq
);
86 memory_region_init_io(&s
->iomem
, OBJECT(s
), &bcm2835_vchiq_ops
, s
,
87 TYPE_BCM2835_VCHIQ
, 0x10);
88 sysbus_init_mmio(sbd
, &s
->iomem
);
89 vmstate_register(dev
, -1, &vmstate_bcm2835_vchiq
, s
);
94 static void bcm2835_vchiq_class_init(ObjectClass
*klass
, void *data
)
96 SysBusDeviceClass
*sdc
= SYS_BUS_DEVICE_CLASS(klass
);
98 sdc
->init
= bcm2835_vchiq_init
;
101 static TypeInfo bcm2835_vchiq_info
= {
102 .name
= TYPE_BCM2835_VCHIQ
,
103 .parent
= TYPE_SYS_BUS_DEVICE
,
104 .instance_size
= sizeof(bcm2835_vchiq_state
),
105 .class_init
= bcm2835_vchiq_class_init
,
108 static void bcm2835_vchiq_register_types(void)
110 type_register_static(&bcm2835_vchiq_info
);
113 type_init(bcm2835_vchiq_register_types
)