From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54343 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Powo3-00039e-Nl for qemu-devel@nongnu.org; Mon, 14 Feb 2011 06:41:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Powo1-0006i8-Ik for qemu-devel@nongnu.org; Mon, 14 Feb 2011 06:41:26 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45351) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Powo1-0006hy-8R for qemu-devel@nongnu.org; Mon, 14 Feb 2011 06:41:25 -0500 Message-ID: <4D591550.2070801@redhat.com> Date: Mon, 14 Feb 2011 12:43:12 +0100 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2] PS/2 keyboard Scancode Set 3 support References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Roy Tam Cc: qemu-devel Am 13.02.2011 11:07, schrieb Roy Tam: > The following patch adds PS/2 keyboard Scancode Set 3 support. > > Sign-off-by: Roy Tam > -- > v2: checkpatch.pl style fixes > > diff --git a/hw/ps2.c b/hw/ps2.c > index 762bb00..6bea0ef 100644 > --- a/hw/ps2.c > +++ b/hw/ps2.c > @@ -143,13 +143,85 @@ static void ps2_put_keycode(void *opaque, int keycode) > { > PS2KbdState *s = opaque; > > - /* XXX: add support for scancode sets 1 and 3 */ > - if (!s->translate && keycode < 0xe0 && s->scancode_set == 2) > - { > + /* XXX: add support for scancode sets 1 */ > + if (!s->translate && keycode < 0xe0 && s->scancode_set > 1) { > if (keycode & 0x80) > ps2_queue(&s->common, 0xf0); > keycode = ps2_raw_keycode[keycode & 0x7f]; > - } > + if (s->scancode_set == 3) { > + switch (keycode) { > + case 0x1: > + keycode = 0x47; > + break; > + case 0x3: > + keycode = 0x27; > + break; > + case 0x4: > + keycode = 0x17; > + break; > + case 0x5: > + keycode = 0x7; > + break; > + case 0x6: > + keycode = 0xf; > + break; > + case 0x7: > + keycode = 0x5e; > + break; > + case 0x9: > + keycode = 0x4f; > + break; > + case 0xa: > + keycode = 0x3f; > + break; > + case 0xb: > + keycode = 0x2f; > + break; > + case 0xc: > + keycode = 0x1f; > + break; > + case 0x11: > + keycode = 0x19; > + break; > + case 0x14: > + keycode = 0x11; > + break; > + case 0x58: > + keycode = 0x14; > + break; > + case 0x5d: > + keycode = 0x5c; > + break; > + case 0x76: > + keycode = 0x8; > + break; > + case 0x77: > + keycode = 0x76; > + break; > + case 0x78: > + keycode = 0x56; > + break; > + case 0x79: > + keycode = 0x7c; > + break; > + case 0x7b: > + keycode = 0x84; > + break; > + case 0x7c: > + keycode = 0x7e; > + break; > + case 0x7e: > + keycode = 0x5f; > + break; > + case 0x83: > + keycode = 0x37; > + break; > + case 0x84: > + keycode = 0x57; > + break; > + } > + } > + } > ps2_queue(&s->common, keycode); > } Wouldn't a second table like ps2_raw_keycode be better than a huge switch block that translates from scancode set 2 to 3? Kevin