25
29
static const VMStateDescription vmstate_pl050 = {
28
32
.minimum_version_id = 2,
29
33
.fields = (VMStateField[]) {
30
VMSTATE_UINT32(cr, pl050_state),
31
VMSTATE_UINT32(clk, pl050_state),
32
VMSTATE_UINT32(last, pl050_state),
33
VMSTATE_INT32(pending, pl050_state),
34
VMSTATE_UINT32(cr, PL050State),
35
VMSTATE_UINT32(clk, PL050State),
36
VMSTATE_UINT32(last, PL050State),
37
VMSTATE_INT32(pending, PL050State),
34
38
VMSTATE_END_OF_LIST()
133
137
.endianness = DEVICE_NATIVE_ENDIAN,
136
static int pl050_init(SysBusDevice *dev, int is_mouse)
140
static int pl050_initfn(SysBusDevice *dev)
138
pl050_state *s = FROM_SYSBUS(pl050_state, dev);
142
PL050State *s = PL050(dev);
140
memory_region_init_io(&s->iomem, &pl050_ops, s, "pl050", 0x1000);
144
memory_region_init_io(&s->iomem, OBJECT(s), &pl050_ops, s, "pl050", 0x1000);
141
145
sysbus_init_mmio(dev, &s->iomem);
142
146
sysbus_init_irq(dev, &s->irq);
143
s->is_mouse = is_mouse;
145
148
s->dev = ps2_mouse_init(pl050_update, s);
147
150
s->dev = ps2_kbd_init(pl050_update, s);
151
static int pl050_init_keyboard(SysBusDevice *dev)
153
return pl050_init(dev, 0);
156
static int pl050_init_mouse(SysBusDevice *dev)
158
return pl050_init(dev, 1);
161
static void pl050_kbd_class_init(ObjectClass *klass, void *data)
163
DeviceClass *dc = DEVICE_CLASS(klass);
164
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
166
k->init = pl050_init_keyboard;
167
dc->vmsd = &vmstate_pl050;
155
static void pl050_keyboard_init(Object *obj)
157
PL050State *s = PL050(obj);
162
static void pl050_mouse_init(Object *obj)
164
PL050State *s = PL050(obj);
170
169
static const TypeInfo pl050_kbd_info = {
171
170
.name = "pl050_keyboard",
172
.parent = TYPE_SYS_BUS_DEVICE,
173
.instance_size = sizeof(pl050_state),
174
.class_init = pl050_kbd_class_init,
171
.parent = TYPE_PL050,
172
.instance_init = pl050_keyboard_init,
177
static void pl050_mouse_class_init(ObjectClass *klass, void *data)
179
DeviceClass *dc = DEVICE_CLASS(klass);
180
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
182
k->init = pl050_init_mouse;
183
dc->vmsd = &vmstate_pl050;
186
175
static const TypeInfo pl050_mouse_info = {
187
176
.name = "pl050_mouse",
177
.parent = TYPE_PL050,
178
.instance_init = pl050_mouse_init,
181
static void pl050_class_init(ObjectClass *oc, void *data)
183
DeviceClass *dc = DEVICE_CLASS(oc);
184
SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(oc);
186
sdc->init = pl050_initfn;
187
dc->vmsd = &vmstate_pl050;
190
static const TypeInfo pl050_type_info = {
188
192
.parent = TYPE_SYS_BUS_DEVICE,
189
.instance_size = sizeof(pl050_state),
190
.class_init = pl050_mouse_class_init,
193
.instance_size = sizeof(PL050State),
195
.class_init = pl050_class_init,
193
198
static void pl050_register_types(void)
200
type_register_static(&pl050_type_info);
195
201
type_register_static(&pl050_kbd_info);
196
202
type_register_static(&pl050_mouse_info);