pckbd: don't use legacy ps2_mouse_init() function
Instantiate the PS2 mouse device within KBDState using object_initialize_child() in i8042_initfn() and i8042_mmio_init() and realize it in i8042_realizefn() and i8042_mmio_realize() accordingly. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Tested-by: Helge Deller <deller@gmx.de> Acked-by: Helge Deller <deller@gmx.de> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20220712215251.7944-39-mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
5e8312ab8e
commit
9d1a425037
@ -286,7 +286,7 @@ static void kbd_queue(KBDState *s, int b, int aux)
|
||||
s->pending |= aux ? KBD_PENDING_CTRL_AUX : KBD_PENDING_CTRL_KBD;
|
||||
kbd_safe_update_irq(s);
|
||||
} else {
|
||||
ps2_queue(aux ? s->mouse : PS2_DEVICE(&s->ps2kbd), b);
|
||||
ps2_queue(aux ? PS2_DEVICE(&s->ps2mouse) : PS2_DEVICE(&s->ps2kbd), b);
|
||||
}
|
||||
}
|
||||
|
||||
@ -410,7 +410,7 @@ static uint64_t kbd_read_data(void *opaque, hwaddr addr,
|
||||
}
|
||||
s->obdata = ps2_read_data(PS2_DEVICE(&s->ps2kbd));
|
||||
} else if (s->obsrc & KBD_OBSRC_MOUSE) {
|
||||
s->obdata = ps2_read_data(s->mouse);
|
||||
s->obdata = ps2_read_data(PS2_DEVICE(&s->ps2mouse));
|
||||
} else if (s->obsrc & KBD_OBSRC_CTRL) {
|
||||
s->obdata = kbd_dequeue(s);
|
||||
}
|
||||
@ -459,7 +459,7 @@ static void kbd_write_data(void *opaque, hwaddr addr,
|
||||
outport_write(s, val);
|
||||
break;
|
||||
case KBD_CCMD_WRITE_MOUSE:
|
||||
ps2_write_mouse(s->mouse, val);
|
||||
ps2_write_mouse(&s->ps2mouse, val);
|
||||
/* sending data to the mouse reenables PS/2 communication */
|
||||
s->mode &= ~KBD_MODE_DISABLE_MOUSE;
|
||||
kbd_safe_update_irq(s);
|
||||
@ -704,12 +704,15 @@ static void i8042_mmio_realize(DeviceState *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&ks->ps2mouse), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
qdev_connect_gpio_out(DEVICE(&ks->ps2kbd), PS2_DEVICE_IRQ,
|
||||
qdev_get_gpio_in_named(dev, "ps2-kbd-input-irq",
|
||||
0));
|
||||
|
||||
ks->mouse = ps2_mouse_init();
|
||||
qdev_connect_gpio_out(DEVICE(ks->mouse), PS2_DEVICE_IRQ,
|
||||
qdev_connect_gpio_out(DEVICE(&ks->ps2mouse), PS2_DEVICE_IRQ,
|
||||
qdev_get_gpio_in_named(dev, "ps2-mouse-input-irq",
|
||||
0));
|
||||
}
|
||||
@ -722,6 +725,8 @@ static void i8042_mmio_init(Object *obj)
|
||||
ks->extended_state = true;
|
||||
|
||||
object_initialize_child(obj, "ps2kbd", &ks->ps2kbd, TYPE_PS2_KBD_DEVICE);
|
||||
object_initialize_child(obj, "ps2mouse", &ks->ps2mouse,
|
||||
TYPE_PS2_MOUSE_DEVICE);
|
||||
|
||||
qdev_init_gpio_out(DEVICE(obj), ks->irqs, 2);
|
||||
qdev_init_gpio_in_named(DEVICE(obj), i8042_mmio_set_kbd_irq,
|
||||
@ -785,7 +790,7 @@ void i8042_isa_mouse_fake_event(ISAKBDState *isa)
|
||||
{
|
||||
KBDState *s = &isa->kbd;
|
||||
|
||||
ps2_mouse_fake_event(s->mouse);
|
||||
ps2_mouse_fake_event(&s->ps2mouse);
|
||||
}
|
||||
|
||||
void i8042_setup_a20_line(ISADevice *dev, qemu_irq a20_out)
|
||||
@ -859,6 +864,8 @@ static void i8042_initfn(Object *obj)
|
||||
"i8042-cmd", 1);
|
||||
|
||||
object_initialize_child(obj, "ps2kbd", &s->ps2kbd, TYPE_PS2_KBD_DEVICE);
|
||||
object_initialize_child(obj, "ps2mouse", &s->ps2mouse,
|
||||
TYPE_PS2_MOUSE_DEVICE);
|
||||
|
||||
qdev_init_gpio_out_named(DEVICE(obj), &s->a20_out, I8042_A20_LINE, 1);
|
||||
|
||||
@ -901,10 +908,14 @@ static void i8042_realizefn(DeviceState *dev, Error **errp)
|
||||
qdev_get_gpio_in_named(dev, "ps2-kbd-input-irq",
|
||||
0));
|
||||
|
||||
s->mouse = ps2_mouse_init();
|
||||
qdev_connect_gpio_out(DEVICE(s->mouse), PS2_DEVICE_IRQ,
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ps2mouse), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
qdev_connect_gpio_out(DEVICE(&s->ps2mouse), PS2_DEVICE_IRQ,
|
||||
qdev_get_gpio_in_named(dev, "ps2-mouse-input-irq",
|
||||
0));
|
||||
|
||||
if (isa_s->kbd_throttle && !isa_s->kbd.extended_state) {
|
||||
warn_report(TYPE_I8042 ": can't enable kbd-throttle without"
|
||||
" extended-state, disabling kbd-throttle");
|
||||
|
@ -32,7 +32,7 @@ typedef struct KBDState {
|
||||
uint8_t cbdata;
|
||||
uint8_t pending_tmp;
|
||||
PS2KbdState ps2kbd;
|
||||
void *mouse;
|
||||
PS2MouseState ps2mouse;
|
||||
QEMUTimer *throttle_timer;
|
||||
|
||||
qemu_irq irqs[2];
|
||||
|
Loading…
Reference in New Issue
Block a user