From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40220 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OnI7p-0006YQ-Or for qemu-devel@nongnu.org; Sun, 22 Aug 2010 17:30:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OnI7o-0006Qh-8t for qemu-devel@nongnu.org; Sun, 22 Aug 2010 17:30:45 -0400 Received: from mail-gx0-f173.google.com ([209.85.161.173]:42403) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OnI7o-0006Qb-5F for qemu-devel@nongnu.org; Sun, 22 Aug 2010 17:30:44 -0400 Received: by gxk5 with SMTP id 5so2064582gxk.4 for ; Sun, 22 Aug 2010 14:30:43 -0700 (PDT) Message-ID: <4C719702.3090308@codemonkey.ws> Date: Sun, 22 Aug 2010 16:30:42 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH RESENT] pckbd: support for commands 0xf0-0xff: Pulse output bit References: <1282222332-20906-1-git-send-email-bernhard.kohl@nsn.com> In-Reply-To: <1282222332-20906-1-git-send-email-bernhard.kohl@nsn.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bernhard Kohl Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org On 08/19/2010 07:52 AM, Bernhard Kohl wrote: > I have a guest OS which sends the command 0xfd to the keyboard > controller during initialization. To get rid of the message > "qemu: unsupported keyboard cmd=0x%02x\n" I added support for > the pulse output bit commands. > > I found the following explanation here: > http://www.win.tue.nl/~aeb/linux/kbd/scancodes-11.html#ss11.3 > > Command 0xf0-0xff: Pulse output bit > Bits 3-0 of the output port P2 of the keyboard controller may > be pulsed low for approximately 6 µseconds. Bits 3-0 of this > command specify the output port bits to be pulsed. 0: Bit should > be pulsed. 1: Bit should not be modified. The only useful version > of this command is Command 0xfe. > (For MCA, replace 3-0 by 1-0 in the above.) > > Command 0xfe: System reset > Pulse bit 0 of the output port P2 of the keyboard controller. > This will reset the CPU. > > Signed-off-by: Bernhard Kohl > Applied. Thanks. Regards, Anthony Liguori > --- > hw/pckbd.c | 23 ++++++++++++++++++++--- > 1 files changed, 20 insertions(+), 3 deletions(-) > > diff --git a/hw/pckbd.c b/hw/pckbd.c > index 0533b1d..6e4e406 100644 > --- a/hw/pckbd.c > +++ b/hw/pckbd.c > @@ -56,7 +56,9 @@ > #define KBD_CCMD_WRITE_MOUSE 0xD4 /* Write the following byte to the mouse */ > #define KBD_CCMD_DISABLE_A20 0xDD /* HP vectra only ? */ > #define KBD_CCMD_ENABLE_A20 0xDF /* HP vectra only ? */ > -#define KBD_CCMD_RESET 0xFE > +#define KBD_CCMD_PULSE_BITS_3_0 0xF0 /* Pulse bits 3-0 of the output port P2. */ > +#define KBD_CCMD_RESET 0xFE /* Pulse bit 0 of the output port P2 = CPU reset. */ > +#define KBD_CCMD_NO_OP 0xFF /* Pulse no bits of the output port P2. */ > > /* Keyboard Commands */ > #define KBD_CMD_SET_LEDS 0xED /* Set keyboard leds */ > @@ -238,6 +240,21 @@ static void kbd_write_command(void *opaque, uint32_t addr, uint32_t val) > KBDState *s = opaque; > > DPRINTF("kbd: write cmd=0x%02x\n", val); > + > + /* Bits 3-0 of the output port P2 of the keyboard controller may be pulsed > + * low for approximately 6 micro seconds. Bits 3-0 of the KBD_CCMD_PULSE > + * command specify the output port bits to be pulsed. > + * 0: Bit should be pulsed. 1: Bit should not be modified. > + * The only useful version of this command is pulsing bit 0, > + * which does a CPU reset. > + */ > + if((val& KBD_CCMD_PULSE_BITS_3_0) == KBD_CCMD_PULSE_BITS_3_0) { > + if(!(val& 1)) > + val = KBD_CCMD_RESET; > + else > + val = KBD_CCMD_NO_OP; > + } > + > switch(val) { > case KBD_CCMD_READ_MODE: > kbd_queue(s, s->mode, 0); > @@ -294,8 +311,8 @@ static void kbd_write_command(void *opaque, uint32_t addr, uint32_t val) > case KBD_CCMD_RESET: > qemu_system_reset_request(); > break; > - case 0xff: > - /* ignore that - I don't know what is its use */ > + case KBD_CCMD_NO_OP: > + /* ignore that */ > break; > default: > fprintf(stderr, "qemu: unsupported keyboard cmd=0x%02x\n", val); >