qemu-patch-raspberry4/hw/input
Volker Rümelin 9e24b2dd77 ps2: use a separate keyboard command reply queue
A PS/2 keyboard has a separate command reply queue that is
independent of the key queue. This prevents that command replies
and keyboard input mix. Keyboard command replies take precedence
over queued keystrokes. A new keyboard command removes any
remaining command replies from the command reply queue.

Implement a separate keyboard command reply queue and clear the
command reply queue before command execution. This brings the
PS/2 keyboard emulation much closer to a real PS/2 keyboard.

The command reply queue is located in a few free bytes directly
in front of the scancode queue. Because the scancode queue has
a maximum length of 16 bytes there are 240 bytes available for
the command reply queue. At the moment only a maximum of 3 bytes
are required. For compatibility reasons rptr, wptr and count kept
their function. rptr is the start, wptr is the end and count is
the length of the entire keyboard queue. The new variable cwptr
is the end of the command reply queue or -1 if the queue is
empty. To write to the command reply queue, rptr is moved
backward by the number of required bytes and the command replies
are written to the buffer starting at the new rptr position.
After writing, cwptr is at the old rptr position. Copying cwptr
to rptr clears the command reply queue. The command reply queue
can't overflow because each new keyboard command clears the
command reply queue.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/501
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/502
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20210810133258.8231-2-vr_qemu@t-online.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2021-09-10 07:32:32 +02:00
..
adb-internal.h Supply missing header guards 2019-06-12 13:20:21 +02:00
adb-kbd.c Use OBJECT_DECLARE_TYPE when possible 2020-09-18 14:12:32 -04:00
adb-mouse.c Use OBJECT_DECLARE_TYPE when possible 2020-09-18 14:12:32 -04:00
adb.c adb: Correct class size on TYPE_ADB_DEVICE 2020-09-08 10:08:42 +10:00
ads7846.c ads7846: moves from the hw/display folder to the hw/input folder. 2020-12-13 17:54:55 +01:00
hid.c hw/input/hid: Add support for keys of jp106 keyboard. 2021-05-28 09:08:03 +02:00
Kconfig ads7846: moves from the hw/display folder to the hw/input folder. 2020-12-13 17:54:55 +01:00
lasips2.c Do not include sysemu/sysemu.h if it's not really necessary 2021-05-02 17:24:50 +02:00
lm832x.c hw/input/lm832x: Define TYPE_LM8323 in public header 2021-07-08 14:15:01 -05:00
meson.build Drop the deprecated lm32 target 2021-05-12 18:20:25 +02:00
pckbd.c pckbd: clear outport_present in outer pre_load() 2021-05-26 11:33:19 +02:00
pl050.c Use OBJECT_DECLARE_SIMPLE_TYPE when possible 2020-09-18 14:12:32 -04:00
ps2.c ps2: use a separate keyboard command reply queue 2021-09-10 07:32:32 +02:00
pxa2xx_keypad.c hw: Remove superfluous breaks 2020-09-01 08:38:00 +02:00
stellaris_input.c migration: Define VMSTATE_INSTANCE_ID_ANY 2020-01-20 09:10:23 +01:00
trace-events docs: fix references to docs/devel/tracing.rst 2021-06-02 06:51:09 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
tsc210x.c Include migration/vmstate.h less 2019-08-16 13:31:52 +02:00
tsc2005.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
vhost-user-input.c vhost: Distinguish errors in vhost_dev_get_config() 2021-06-30 13:18:42 +02:00
virtio-input-hid.c hw/input/virtio-input-hid.c: Don't undef CONFIG_CURSES 2020-07-24 16:15:28 +02:00
virtio-input-host.c Fix build with 64 bits time_t 2021-05-14 10:26:18 -04:00
virtio-input.c qdev: Unrealize must not fail 2020-05-15 07:08:14 +02:00