qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]