Commit 86394e969de181d95f2f03e9c93e31e0b3e6c90f

Authored by Paul Brook
1 parent a7d518a6

PL050 qdev conversion

Signed-off-by: Paul Brook <paul@codesourcery.com>
hw/integratorcp.c
@@ -485,8 +485,8 @@ static void integratorcp_init(ram_addr_t ram_size, @@ -485,8 +485,8 @@ static void integratorcp_init(ram_addr_t ram_size,
485 sysbus_create_simple("pl011", 0x16000000, pic[1]); 485 sysbus_create_simple("pl011", 0x16000000, pic[1]);
486 sysbus_create_simple("pl011", 0x17000000, pic[2]); 486 sysbus_create_simple("pl011", 0x17000000, pic[2]);
487 icp_control_init(0xcb000000); 487 icp_control_init(0xcb000000);
488 - pl050_init(0x18000000, pic[3], 0);  
489 - pl050_init(0x19000000, pic[4], 1); 488 + sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]);
  489 + sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]);
490 sd = drive_get_index(IF_SD, 0, 0); 490 sd = drive_get_index(IF_SD, 0, 0);
491 if (sd == -1) { 491 if (sd == -1) {
492 fprintf(stderr, "qemu: missing SecureDigital card\n"); 492 fprintf(stderr, "qemu: missing SecureDigital card\n");
hw/pl050.c
@@ -7,11 +7,11 @@ @@ -7,11 +7,11 @@
7 * This code is licenced under the GPL. 7 * This code is licenced under the GPL.
8 */ 8 */
9 9
10 -#include "hw.h"  
11 -#include "primecell.h" 10 +#include "sysbus.h"
12 #include "ps2.h" 11 #include "ps2.h"
13 12
14 typedef struct { 13 typedef struct {
  14 + SysBusDevice busdev;
15 void *dev; 15 void *dev;
16 uint32_t cr; 16 uint32_t cr;
17 uint32_t clk; 17 uint32_t clk;
@@ -122,20 +122,39 @@ static CPUWriteMemoryFunc *pl050_writefn[] = { @@ -122,20 +122,39 @@ static CPUWriteMemoryFunc *pl050_writefn[] = {
122 pl050_write 122 pl050_write
123 }; 123 };
124 124
125 -void pl050_init(uint32_t base, qemu_irq irq, int is_mouse) 125 +static void pl050_init(SysBusDevice *dev, int is_mouse)
126 { 126 {
  127 + pl050_state *s = FROM_SYSBUS(pl050_state, dev);
127 int iomemtype; 128 int iomemtype;
128 - pl050_state *s;  
129 129
130 - s = (pl050_state *)qemu_mallocz(sizeof(pl050_state));  
131 iomemtype = cpu_register_io_memory(0, pl050_readfn, 130 iomemtype = cpu_register_io_memory(0, pl050_readfn,
132 pl050_writefn, s); 131 pl050_writefn, s);
133 - cpu_register_physical_memory(base, 0x00001000, iomemtype);  
134 - s->irq = irq; 132 + sysbus_init_mmio(dev, 0x1000, iomemtype);
  133 + sysbus_init_irq(dev, &s->irq);
135 s->is_mouse = is_mouse; 134 s->is_mouse = is_mouse;
136 - if (is_mouse) 135 + if (s->is_mouse)
137 s->dev = ps2_mouse_init(pl050_update, s); 136 s->dev = ps2_mouse_init(pl050_update, s);
138 else 137 else
139 s->dev = ps2_kbd_init(pl050_update, s); 138 s->dev = ps2_kbd_init(pl050_update, s);
140 /* ??? Save/restore. */ 139 /* ??? Save/restore. */
141 } 140 }
  141 +
  142 +static void pl050_init_keyboard(SysBusDevice *dev)
  143 +{
  144 + pl050_init(dev, 0);
  145 +}
  146 +
  147 +static void pl050_init_mouse(SysBusDevice *dev)
  148 +{
  149 + pl050_init(dev, 1);
  150 +}
  151 +
  152 +static void pl050_register_devices(void)
  153 +{
  154 + sysbus_register_dev("pl050_keyboard", sizeof(pl050_state),
  155 + pl050_init_keyboard);
  156 + sysbus_register_dev("pl050_mouse", sizeof(pl050_state),
  157 + pl050_init_mouse);
  158 +}
  159 +
  160 +device_init(pl050_register_devices)
hw/primecell.h
@@ -13,9 +13,6 @@ typedef int (*ssi_xfer_cb)(void *, int); @@ -13,9 +13,6 @@ typedef int (*ssi_xfer_cb)(void *, int);
13 void pl022_init(uint32_t base, qemu_irq irq, ssi_xfer_cb xfer_cb, 13 void pl022_init(uint32_t base, qemu_irq irq, ssi_xfer_cb xfer_cb,
14 void *opaque); 14 void *opaque);
15 15
16 -/* pl050.c */  
17 -void pl050_init(uint32_t base, qemu_irq irq, int is_mouse);  
18 -  
19 /* pl061.c */ 16 /* pl061.c */
20 void pl061_float_high(void *opaque, uint8_t mask); 17 void pl061_float_high(void *opaque, uint8_t mask);
21 qemu_irq *pl061_init(uint32_t base, qemu_irq irq, qemu_irq **out); 18 qemu_irq *pl061_init(uint32_t base, qemu_irq irq, qemu_irq **out);
hw/realview.c
@@ -82,8 +82,8 @@ static void realview_init(ram_addr_t ram_size, @@ -82,8 +82,8 @@ static void realview_init(ram_addr_t ram_size,
82 pic = mpcore_irq_init(cpu_irq); 82 pic = mpcore_irq_init(cpu_irq);
83 } 83 }
84 84
85 - pl050_init(0x10006000, pic[20], 0);  
86 - pl050_init(0x10007000, pic[21], 1); 85 + sysbus_create_simple("pl050_keyboard", 0x10006000, pic[20]);
  86 + sysbus_create_simple("pl050_mouse", 0x10007000, pic[21]);
87 87
88 sysbus_create_simple("pl011", 0x10009000, pic[12]); 88 sysbus_create_simple("pl011", 0x10009000, pic[12]);
89 sysbus_create_simple("pl011", 0x1000a000, pic[13]); 89 sysbus_create_simple("pl011", 0x1000a000, pic[13]);
hw/versatilepb.c
@@ -186,8 +186,9 @@ static void versatile_init(ram_addr_t ram_size, @@ -186,8 +186,9 @@ static void versatile_init(ram_addr_t ram_size,
186 pic = arm_pic_init_cpu(env); 186 pic = arm_pic_init_cpu(env);
187 pic = pl190_init(0x10140000, pic[0], pic[1]); 187 pic = pl190_init(0x10140000, pic[0], pic[1]);
188 sic = vpb_sic_init(0x10003000, pic, 31); 188 sic = vpb_sic_init(0x10003000, pic, 31);
189 - pl050_init(0x10006000, sic[3], 0);  
190 - pl050_init(0x10007000, sic[4], 1); 189 +
  190 + sysbus_create_simple("pl050_keyboard", 0x10006000, sic[3]);
  191 + sysbus_create_simple("pl050_mouse", 0x10007000, sic[4]);
191 192
192 pci_bus = pci_vpb_init(sic, 27, 0); 193 pci_bus = pci_vpb_init(sic, 27, 0);
193 /* The Versatile PCI bridge does not provide access to PCI IO space, 194 /* The Versatile PCI bridge does not provide access to PCI IO space,