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 485 sysbus_create_simple("pl011", 0x16000000, pic[1]);
486 486 sysbus_create_simple("pl011", 0x17000000, pic[2]);
487 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 490 sd = drive_get_index(IF_SD, 0, 0);
491 491 if (sd == -1) {
492 492 fprintf(stderr, "qemu: missing SecureDigital card\n");
... ...
hw/pl050.c
... ... @@ -7,11 +7,11 @@
7 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 11 #include "ps2.h"
13 12  
14 13 typedef struct {
  14 + SysBusDevice busdev;
15 15 void *dev;
16 16 uint32_t cr;
17 17 uint32_t clk;
... ... @@ -122,20 +122,39 @@ static CPUWriteMemoryFunc *pl050_writefn[] = {
122 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 128 int iomemtype;
128   - pl050_state *s;
129 129  
130   - s = (pl050_state *)qemu_mallocz(sizeof(pl050_state));
131 130 iomemtype = cpu_register_io_memory(0, pl050_readfn,
132 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 134 s->is_mouse = is_mouse;
136   - if (is_mouse)
  135 + if (s->is_mouse)
137 136 s->dev = ps2_mouse_init(pl050_update, s);
138 137 else
139 138 s->dev = ps2_kbd_init(pl050_update, s);
140 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 13 void pl022_init(uint32_t base, qemu_irq irq, ssi_xfer_cb xfer_cb,
14 14 void *opaque);
15 15  
16   -/* pl050.c */
17   -void pl050_init(uint32_t base, qemu_irq irq, int is_mouse);
18   -
19 16 /* pl061.c */
20 17 void pl061_float_high(void *opaque, uint8_t mask);
21 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 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 88 sysbus_create_simple("pl011", 0x10009000, pic[12]);
89 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 186 pic = arm_pic_init_cpu(env);
187 187 pic = pl190_init(0x10140000, pic[0], pic[1]);
188 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 193 pci_bus = pci_vpb_init(sic, 27, 0);
193 194 /* The Versatile PCI bridge does not provide access to PCI IO space,
... ...