From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56278) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bkICL-00087j-IT for qemu-devel@nongnu.org; Wed, 14 Sep 2016 17:58:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bkICH-0008G3-G7 for qemu-devel@nongnu.org; Wed, 14 Sep 2016 17:58:28 -0400 Received: from smtp2-g21.free.fr ([212.27.42.2]:53611) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bkICH-00089H-9w for qemu-devel@nongnu.org; Wed, 14 Sep 2016 17:58:25 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 14 Sep 2016 23:57:42 +0200 Message-Id: <1473890265-3304-3-git-send-email-hpoussin@reactos.org> In-Reply-To: <1473890265-3304-1-git-send-email-hpoussin@reactos.org> References: <1473890265-3304-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 2/5] ps2: correctly handle 'get/set scancode' command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , =?UTF-8?q?Herv=C3=A9=20Poussineau?= When getting scancode, current scancode must be preceded from reply ack. When setting scancode, we must reject invalid scancodes. Signed-off-by: Herv=C3=A9 Poussineau --- hw/input/ps2.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 00a1792..2105e51 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -296,16 +296,18 @@ void ps2_write_keyboard(void *opaque, int val) break; case KBD_CMD_SCANCODE: if (val =3D=3D 0) { + ps2_queue(&s->common, KBD_REPLY_ACK); if (s->scancode_set =3D=3D 1) ps2_put_keycode(s, 0x43); else if (s->scancode_set =3D=3D 2) ps2_put_keycode(s, 0x41); else if (s->scancode_set =3D=3D 3) ps2_put_keycode(s, 0x3f); - } else { - if (val >=3D 1 && val <=3D 3) - s->scancode_set =3D val; + } else if (val >=3D 1 && val <=3D 3) { + s->scancode_set =3D val; ps2_queue(&s->common, KBD_REPLY_ACK); + } else { + ps2_queue(&s->common, KBD_REPLY_RESEND); } s->common.write_cmd =3D -1; break; --=20 2.1.4