mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
isa: Use realizefn for ISADevice
Drop ISADeviceClass::init and the resulting no-op initfn and let children implement their own realizefn. Adapt error handling. Split off an instance_init where sensible. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
a3dcca567a
commit
db895a1e6a
34 changed files with 292 additions and 243 deletions
|
@ -489,31 +489,37 @@ static const MemoryRegionOps i8042_cmd_ops = {
|
|||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
static int i8042_initfn(ISADevice *dev)
|
||||
static void i8042_initfn(Object *obj)
|
||||
{
|
||||
ISAKBDState *isa_s = I8042(obj);
|
||||
KBDState *s = &isa_s->kbd;
|
||||
|
||||
memory_region_init_io(isa_s->io + 0, &i8042_data_ops, s, "i8042-data", 1);
|
||||
memory_region_init_io(isa_s->io + 1, &i8042_cmd_ops, s, "i8042-cmd", 1);
|
||||
}
|
||||
|
||||
static void i8042_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
ISADevice *isadev = ISA_DEVICE(dev);
|
||||
ISAKBDState *isa_s = I8042(dev);
|
||||
KBDState *s = &isa_s->kbd;
|
||||
|
||||
isa_init_irq(dev, &s->irq_kbd, 1);
|
||||
isa_init_irq(dev, &s->irq_mouse, 12);
|
||||
isa_init_irq(isadev, &s->irq_kbd, 1);
|
||||
isa_init_irq(isadev, &s->irq_mouse, 12);
|
||||
|
||||
memory_region_init_io(isa_s->io + 0, &i8042_data_ops, s, "i8042-data", 1);
|
||||
isa_register_ioport(dev, isa_s->io + 0, 0x60);
|
||||
|
||||
memory_region_init_io(isa_s->io + 1, &i8042_cmd_ops, s, "i8042-cmd", 1);
|
||||
isa_register_ioport(dev, isa_s->io + 1, 0x64);
|
||||
isa_register_ioport(isadev, isa_s->io + 0, 0x60);
|
||||
isa_register_ioport(isadev, isa_s->io + 1, 0x64);
|
||||
|
||||
s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
|
||||
s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
|
||||
qemu_register_reset(kbd_reset, s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void i8042_class_initfn(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
|
||||
ic->init = i8042_initfn;
|
||||
|
||||
dc->realize = i8042_realizefn;
|
||||
dc->no_user = 1;
|
||||
dc->vmsd = &vmstate_kbd_isa;
|
||||
}
|
||||
|
@ -522,6 +528,7 @@ static const TypeInfo i8042_info = {
|
|||
.name = TYPE_I8042,
|
||||
.parent = TYPE_ISA_DEVICE,
|
||||
.instance_size = sizeof(ISAKBDState),
|
||||
.instance_init = i8042_initfn,
|
||||
.class_init = i8042_class_initfn,
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue