[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] integratorcp: convert control to sysbus
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [PATCH] integratorcp: convert control to sysbus |
Date: |
Wed, 19 Oct 2011 14:56:30 +0200 |
Signed-off-by: Benoit Canet <address@hidden>
---
hw/integratorcp.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/hw/integratorcp.c b/hw/integratorcp.c
index 7f79560..7ad68b7 100644
--- a/hw/integratorcp.c
+++ b/hw/integratorcp.c
@@ -393,6 +393,11 @@ static int icp_pic_init(SysBusDevice *dev)
/* CP control registers. */
+typedef struct icp_control_state {
+ SysBusDevice busdev;
+ MemoryRegion iomem;
+} icp_control_state;
+
static uint64_t icp_control_read(void *opaque, target_phys_addr_t offset,
unsigned size)
{
@@ -431,15 +436,14 @@ static const MemoryRegionOps icp_control_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void icp_control_init(target_phys_addr_t base)
+static int icp_control_init(SysBusDevice *dev)
{
- MemoryRegion *io;
+ icp_control_state *s = FROM_SYSBUS(icp_control_state, dev);
- io = (MemoryRegion *)g_malloc0(sizeof(MemoryRegion));
- memory_region_init_io(io, &icp_control_ops, NULL,
+ memory_region_init_io(&s->iomem, &icp_control_ops, s,
"control", 0x00800000);
- memory_region_add_subregion(get_system_memory(), base, io);
- /* ??? Save/restore. */
+ sysbus_init_mmio_region(dev, &s->iomem);
+ return 0;
}
@@ -498,7 +502,7 @@ static void integratorcp_init(ram_addr_t ram_size,
sysbus_create_simple("pl031", 0x15000000, pic[8]);
sysbus_create_simple("pl011", 0x16000000, pic[1]);
sysbus_create_simple("pl011", 0x17000000, pic[2]);
- icp_control_init(0xcb000000);
+ sysbus_create_simple("integrator_control", 0xcb000000, NULL);
sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]);
sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]);
sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL);
@@ -541,6 +545,8 @@ static SysBusDeviceInfo core_info = {
static void integratorcp_register_devices(void)
{
sysbus_register_dev("integrator_pic", sizeof(icp_pic_state), icp_pic_init);
+ sysbus_register_dev("integrator_control", sizeof(icp_control_state),
+ icp_control_init);
sysbus_register_withprop(&core_info);
}
--
1.7.5.4