Revision 86394e96 hw/pl050.c
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) |
Also available in: Unified diff