Revision 86394e96
b/hw/integratorcp.c | ||
---|---|---|
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"); |
b/hw/pl050.c | ||
---|---|---|
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 | 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) |
b/hw/primecell.h | ||
---|---|---|
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); |
b/hw/realview.c | ||
---|---|---|
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]); |
b/hw/versatilepb.c | ||
---|---|---|
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, |
Also available in: Unified diff