mirror of https://github.com/xemu-project/xemu.git
pckbd: don't use legacy ps2_kbd_init() function
Instantiate the PS2 keyboard 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-37-mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
abcacb20f7
commit
652fbff420
|
@ -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 : s->kbd, b);
|
||||
ps2_queue(aux ? s->mouse : PS2_DEVICE(&s->ps2kbd), b);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -408,7 +408,7 @@ static uint64_t kbd_read_data(void *opaque, hwaddr addr,
|
|||
timer_mod(s->throttle_timer,
|
||||
qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + 1000);
|
||||
}
|
||||
s->obdata = ps2_read_data(s->kbd);
|
||||
s->obdata = ps2_read_data(PS2_DEVICE(&s->ps2kbd));
|
||||
} else if (s->obsrc & KBD_OBSRC_MOUSE) {
|
||||
s->obdata = ps2_read_data(s->mouse);
|
||||
} else if (s->obsrc & KBD_OBSRC_CTRL) {
|
||||
|
@ -429,14 +429,15 @@ static void kbd_write_data(void *opaque, hwaddr addr,
|
|||
|
||||
switch (s->write_cmd) {
|
||||
case 0:
|
||||
ps2_write_keyboard(s->kbd, val);
|
||||
ps2_write_keyboard(&s->ps2kbd, val);
|
||||
/* sending data to the keyboard reenables PS/2 communication */
|
||||
s->mode &= ~KBD_MODE_DISABLE_KBD;
|
||||
kbd_safe_update_irq(s);
|
||||
break;
|
||||
case KBD_CCMD_WRITE_MODE:
|
||||
s->mode = val;
|
||||
ps2_keyboard_set_translation(s->kbd, (s->mode & KBD_MODE_KCC) != 0);
|
||||
ps2_keyboard_set_translation(&s->ps2kbd,
|
||||
(s->mode & KBD_MODE_KCC) != 0);
|
||||
/*
|
||||
* a write to the mode byte interrupt enable flags directly updates
|
||||
* the irq lines
|
||||
|
@ -699,10 +700,14 @@ static void i8042_mmio_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->region);
|
||||
|
||||
ks->kbd = ps2_kbd_init();
|
||||
qdev_connect_gpio_out(DEVICE(ks->kbd), PS2_DEVICE_IRQ,
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&ks->ps2kbd), 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_get_gpio_in_named(dev, "ps2-mouse-input-irq",
|
||||
|
@ -716,6 +721,8 @@ static void i8042_mmio_init(Object *obj)
|
|||
|
||||
ks->extended_state = true;
|
||||
|
||||
object_initialize_child(obj, "ps2kbd", &ks->ps2kbd, TYPE_PS2_KBD_DEVICE);
|
||||
|
||||
qdev_init_gpio_out(DEVICE(obj), ks->irqs, 2);
|
||||
qdev_init_gpio_in_named(DEVICE(obj), i8042_mmio_set_kbd_irq,
|
||||
"ps2-kbd-input-irq", 1);
|
||||
|
@ -851,6 +858,8 @@ static void i8042_initfn(Object *obj)
|
|||
memory_region_init_io(isa_s->io + 1, obj, &i8042_cmd_ops, s,
|
||||
"i8042-cmd", 1);
|
||||
|
||||
object_initialize_child(obj, "ps2kbd", &s->ps2kbd, TYPE_PS2_KBD_DEVICE);
|
||||
|
||||
qdev_init_gpio_out_named(DEVICE(obj), &s->a20_out, I8042_A20_LINE, 1);
|
||||
|
||||
qdev_init_gpio_out(DEVICE(obj), s->irqs, 2);
|
||||
|
@ -884,10 +893,14 @@ static void i8042_realizefn(DeviceState *dev, Error **errp)
|
|||
isa_register_ioport(isadev, isa_s->io + 0, 0x60);
|
||||
isa_register_ioport(isadev, isa_s->io + 1, 0x64);
|
||||
|
||||
s->kbd = ps2_kbd_init();
|
||||
qdev_connect_gpio_out(DEVICE(s->kbd), PS2_DEVICE_IRQ,
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ps2kbd), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
qdev_connect_gpio_out(DEVICE(&s->ps2kbd), PS2_DEVICE_IRQ,
|
||||
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,
|
||||
qdev_get_gpio_in_named(dev, "ps2-mouse-input-irq",
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "hw/isa/isa.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/input/ps2.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define I8042_KBD_IRQ 0
|
||||
|
@ -30,7 +31,7 @@ typedef struct KBDState {
|
|||
uint8_t obdata;
|
||||
uint8_t cbdata;
|
||||
uint8_t pending_tmp;
|
||||
void *kbd;
|
||||
PS2KbdState ps2kbd;
|
||||
void *mouse;
|
||||
QEMUTimer *throttle_timer;
|
||||
|
||||
|
|
Loading…
Reference in New Issue