* [Qemu-devel] [PATCH] [pckbd] Prevent IRQs when the guest disables the mouse
@ 2017-10-12 11:59 geoff
0 siblings, 0 replies; only message in thread
From: geoff @ 2017-10-12 11:59 UTC (permalink / raw)
To: qemu-devel
When the guest OS needs to send the mouse commands it will at least in
the case
of Windows 10 set the KBD_MODE_DISABLE_MOUSE bit to prevent interrupts
from
causing stream desynchronisation.
Here is Windows 10 attempting to issue a PS/2 mouse reset without this
fix where
you can see the mouse positional data was returned as the answer to the
get type
command.
KBD: kbd: write cmd=0xd4 // write next cmd to the aux port
KBD: kbd: read status=0x1c
KBD: kbd: read status=0x1c
KBD: kbd: read status=0x1c
KBD: kbd: write data=0xff
kbd: write mouse 0xff // reset
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0xfa // ack
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0xaa // self-test good
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x00 // the device type
KBD: kbd: read status=0x3d
KBD: kbd: write cmd=0xd4 // write cmd to the aux port
KBD: kbd: read status=0x3d
KBD: kbd: write data=0xf2
kbd: write mouse 0xf2 // get type
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x08 // mouse data byte 1
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x00 // mouse data byte 2
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x00 // mouse data byte 3
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0xfa // the ack for the get type above
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x00 // the device type
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x08 // mouse data byte 1
KBD: kbd: read status=0x3d
KBD: kbd: read status=0x3d
KBD: kbd: read data=0x00 // mouse data byte 2
Signed-off-by: Geoffrey McRae <geoff@hostfission.com>
---
hw/input/pckbd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c
index c479f827b6..78d5356817 100644
--- a/hw/input/pckbd.c
+++ b/hw/input/pckbd.c
@@ -168,7 +168,8 @@ static void kbd_update_irq(KBDState *s)
if (s->pending == KBD_PENDING_AUX) {
s->status |= KBD_STAT_MOUSE_OBF;
s->outport |= KBD_OUT_MOUSE_OBF;
- if (s->mode & KBD_MODE_MOUSE_INT)
+ if ((s->mode & KBD_MODE_MOUSE_INT) &&
+ !(s->mode & KBD_MODE_DISABLE_MOUSE))
irq_mouse_level = 1;
} else {
if ((s->mode & KBD_MODE_KBD_INT) &&
--
2.11.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2017-10-12 11:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-12 11:59 [Qemu-devel] [PATCH] [pckbd] Prevent IRQs when the guest disables the mouse geoff
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).