2 * Raspberry Pi emulation (c) 2012 Gregory Estrade
3 * This code is licensed under the GNU GPLv2 and later.
6 #include "hw/misc/bcm2835_power.h"
7 #include "hw/misc/bcm2835_mbox_defs.h"
9 static uint64_t bcm2835_power_read(void *opaque
, hwaddr offset
, unsigned size
)
11 BCM2835PowerState
*s
= (BCM2835PowerState
*)opaque
;
16 res
= MBOX_CHAN_POWER
;
18 qemu_set_irq(s
->mbox_irq
, 0);
24 qemu_log_mask(LOG_GUEST_ERROR
,
25 "bcm2835_power_read: Bad offset %x\n", (int)offset
);
31 static void bcm2835_power_write(void *opaque
, hwaddr offset
, uint64_t value
,
34 BCM2835PowerState
*s
= (BCM2835PowerState
*)opaque
;
38 qemu_set_irq(s
->mbox_irq
, 1);
41 qemu_log_mask(LOG_GUEST_ERROR
,
42 "bcm2835_power_write: Bad offset %x\n", (int)offset
);
48 static const MemoryRegionOps bcm2835_power_ops
= {
49 .read
= bcm2835_power_read
,
50 .write
= bcm2835_power_write
,
51 .endianness
= DEVICE_NATIVE_ENDIAN
,
54 static const VMStateDescription vmstate_bcm2835_power
= {
55 .name
= TYPE_BCM2835_POWER
,
57 .minimum_version_id
= 1,
58 .minimum_version_id_old
= 1,
59 .fields
= (VMStateField
[]) {
64 static void bcm2835_power_init(Object
*obj
)
66 BCM2835PowerState
*s
= BCM2835_POWER(obj
);
68 sysbus_init_irq(SYS_BUS_DEVICE(s
), &s
->mbox_irq
);
69 memory_region_init_io(&s
->iomem
, obj
, &bcm2835_power_ops
, s
,
70 TYPE_BCM2835_POWER
, 0x10);
71 sysbus_init_mmio(SYS_BUS_DEVICE(s
), &s
->iomem
);
74 static void bcm2835_power_realize(DeviceState
*dev
, Error
**errp
)
76 BCM2835PowerState
*s
= BCM2835_POWER(dev
);
81 static void bcm2835_power_class_init(ObjectClass
*klass
, void *data
)
83 DeviceClass
*dc
= DEVICE_CLASS(klass
);
85 dc
->realize
= bcm2835_power_realize
;
86 dc
->vmsd
= &vmstate_bcm2835_power
;
89 static TypeInfo bcm2835_power_info
= {
90 .name
= TYPE_BCM2835_POWER
,
91 .parent
= TYPE_SYS_BUS_DEVICE
,
92 .instance_size
= sizeof(BCM2835PowerState
),
93 .class_init
= bcm2835_power_class_init
,
94 .instance_init
= bcm2835_power_init
,
97 static void bcm2835_power_register_types(void)
99 type_register_static(&bcm2835_power_info
);
102 type_init(bcm2835_power_register_types
)