17
#include "qemu/osdep.h"
19
#include "hw/misc/arm_integrator_debug.h"
21
#include "qemu/module.h"
22
#include "qom/object.h"
24
OBJECT_DECLARE_SIMPLE_TYPE(IntegratorDebugState, INTEGRATOR_DEBUG)
26
struct IntegratorDebugState {
27
SysBusDevice parent_obj;
32
static uint64_t intdbg_control_read(void *opaque, hwaddr offset,
35
switch (offset >> 2) {
39
qemu_log_mask(LOG_UNIMP,
40
"%s: returning zero from %" HWADDR_PRIx ":%u\n",
41
__func__, offset, size);
44
qemu_log_mask(LOG_GUEST_ERROR,
45
"%s: Bad offset %" HWADDR_PRIx,
51
static void intdbg_control_write(void *opaque, hwaddr offset,
52
uint64_t value, unsigned size)
54
switch (offset >> 2) {
59
qemu_log_mask(LOG_UNIMP,
60
"%s: ignoring write of %" PRIu64
61
" to %" HWADDR_PRIx ":%u\n",
62
__func__, value, offset, size);
65
qemu_log_mask(LOG_GUEST_ERROR,
66
"%s: write of %" PRIu64
67
" to bad offset %" HWADDR_PRIx "\n",
68
__func__, value, offset);
72
static const MemoryRegionOps intdbg_control_ops = {
73
.read = intdbg_control_read,
74
.write = intdbg_control_write,
75
.endianness = DEVICE_NATIVE_ENDIAN,
78
static void intdbg_control_init(Object *obj)
80
SysBusDevice *sd = SYS_BUS_DEVICE(obj);
81
IntegratorDebugState *s = INTEGRATOR_DEBUG(obj);
83
memory_region_init_io(&s->iomem, obj, &intdbg_control_ops,
84
NULL, "dbg-leds", 0x1000000);
85
sysbus_init_mmio(sd, &s->iomem);
88
static const TypeInfo intdbg_info = {
89
.name = TYPE_INTEGRATOR_DEBUG,
90
.parent = TYPE_SYS_BUS_DEVICE,
91
.instance_size = sizeof(IntegratorDebugState),
92
.instance_init = intdbg_control_init,
95
static void intdbg_register_types(void)
97
type_register_static(&intdbg_info);
100
type_init(intdbg_register_types)