Message ID | 1307012202-14875-3-git-send-email-penberg@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
nice!
Acked-by: Ingo Molnar <mingo@elte.hu>
Thanks,
Ingo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
ok, with the shared commands it place here's some feature-completeness comparison of the kernel driver and the emulator: guest driver i8042.h | hw/i8042.c emu /* * Status register bits */ #define I8042_STR_PARITY 0x80 | missing #define I8042_STR_TIMEOUT 0x40 | missing #define I8042_STR_AUXDATA 0x20 | ok #define I8042_STR_KEYLOCK 0x10 | ok #define I8042_STR_CMDDAT 0x08 | ok #define I8042_STR_MUXERR 0x04 | ok #define I8042_STR_IBF 0x02 | missing #define I8042_STR_OBF 0x01 | ok The missing bits might be uninteresting, but wanted to map them out. There's more divergence for commands: guest driver i8042.h | hw/i8042.c emu /* * Standard commands. */ #define I8042_CMD_CTL_RCTR 0x0120 != 0x20 #define I8042_CMD_CTL_WCTR 0x1060 != 0x60 #define I8042_CMD_CTL_TEST 0x01aa | missing #define I8042_CMD_KBD_DISABLE 0x00ad | missing #define I8042_CMD_KBD_ENABLE 0x00ae | missing #define I8042_CMD_KBD_TEST 0x01ab | missing #define I8042_CMD_KBD_LOOP 0x11d2 | missing #define I8042_CMD_AUX_DISABLE 0x00a7 | ok #define I8042_CMD_AUX_ENABLE 0x00a8 | ok #define I8042_CMD_AUX_TEST 0x01a9 | != 0xa9 #define I8042_CMD_AUX_SEND 0x10d4 | != 0xd4 #define I8042_CMD_AUX_LOOP 0x11d3 | != 0xd3 #define I8042_CMD_MUX_PFX 0x0090 | missing #define I8042_CMD_MUX_SEND 0x1090 | missing Now the missing high word might just be some command symbol encoding difference, but it might be something more substantial as well. Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jun 2, 2011 at 2:19 PM, Ingo Molnar <mingo@elte.hu> wrote: > > ok, with the shared commands it place here's some > feature-completeness comparison of the kernel driver and the > emulator: > > guest driver i8042.h | hw/i8042.c emu > /* > * Status register bits > */ > #define I8042_STR_PARITY 0x80 | missing > #define I8042_STR_TIMEOUT 0x40 | missing > #define I8042_STR_AUXDATA 0x20 | ok > #define I8042_STR_KEYLOCK 0x10 | ok > #define I8042_STR_CMDDAT 0x08 | ok > #define I8042_STR_MUXERR 0x04 | ok > #define I8042_STR_IBF 0x02 | missing > #define I8042_STR_OBF 0x01 | ok > > The missing bits might be uninteresting, but wanted to map them out. > > There's more divergence for commands: > > guest driver i8042.h | hw/i8042.c emu > > /* > * Standard commands. > */ > > #define I8042_CMD_CTL_RCTR 0x0120 != 0x20 > #define I8042_CMD_CTL_WCTR 0x1060 != 0x60 > #define I8042_CMD_CTL_TEST 0x01aa | missing > > #define I8042_CMD_KBD_DISABLE 0x00ad | missing > #define I8042_CMD_KBD_ENABLE 0x00ae | missing > #define I8042_CMD_KBD_TEST 0x01ab | missing > #define I8042_CMD_KBD_LOOP 0x11d2 | missing > > #define I8042_CMD_AUX_DISABLE 0x00a7 | ok > #define I8042_CMD_AUX_ENABLE 0x00a8 | ok > #define I8042_CMD_AUX_TEST 0x01a9 | != 0xa9 > #define I8042_CMD_AUX_SEND 0x10d4 | != 0xd4 > #define I8042_CMD_AUX_LOOP 0x11d3 | != 0xd3 > > #define I8042_CMD_MUX_PFX 0x0090 | missing > #define I8042_CMD_MUX_SEND 0x1090 | missing > > Now the missing high word might just be some command symbol encoding > difference, but it might be something more substantial as well. The high byte is the data byte that's written immediately after the command byte. Pekka -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
oh, the keyboard driver did not work for me due to: if (vnc) { kbd__init(kvm); vesa__init(kvm); } I don't have VNC installed - i just wanted to see whether the keyboard gets detected. With kbd__init() called unconditionally it works fine here: [ 1.658000] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.659000] mousedev: PS/2 mouse device common for all mice Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/kvm/hw/i8042.c b/tools/kvm/hw/i8042.c index 48a3c9d..934ef4e 100644 --- a/tools/kvm/hw/i8042.c +++ b/tools/kvm/hw/i8042.c @@ -22,13 +22,16 @@ #define I8042_DATA_REG 0x60 #define I8042_COMMAND_REG 0x64 -#define CMD_READ_MODE 0x20 -#define CMD_WRITE_MODE 0x60 -#define CMD_WRITE_AUX_BUF 0xD3 -#define CMD_WRITE_AUX 0xD4 -#define CMD_TEST_AUX 0xA9 -#define CMD_DISABLE_AUX 0xA7 -#define CMD_ENABLE_AUX 0xA8 +/* + * Commands + */ +#define I8042_CMD_CTL_RCTR 0x20 +#define I8042_CMD_CTL_WCTR 0x60 +#define I8042_CMD_AUX_LOOP 0xD3 +#define I8042_CMD_AUX_SEND 0xD4 +#define I8042_CMD_AUX_TEST 0xA9 +#define I8042_CMD_AUX_DISABLE 0xA7 +#define I8042_CMD_AUX_ENABLE 0xA8 #define RESPONSE_ACK 0xFA @@ -143,22 +146,22 @@ static void kbd_queue(u8 c) static void kbd_write_command(u32 val) { switch (val) { - case CMD_READ_MODE: + case I8042_CMD_CTL_RCTR: kbd_queue(state.mode); break; - case CMD_WRITE_MODE: - case CMD_WRITE_AUX: - case CMD_WRITE_AUX_BUF: + case I8042_CMD_CTL_WCTR: + case I8042_CMD_AUX_SEND: + case I8042_CMD_AUX_LOOP: state.write_cmd = val; break; - case CMD_TEST_AUX: + case I8042_CMD_AUX_TEST: /* 0 means we're a normal PS/2 mouse */ mouse_queue(0); break; - case CMD_DISABLE_AUX: + case I8042_CMD_AUX_DISABLE: state.mode |= MODE_DISABLE_AUX; break; - case CMD_ENABLE_AUX: + case I8042_CMD_AUX_ENABLE: state.mode &= ~MODE_DISABLE_AUX; break; default: @@ -211,15 +214,15 @@ static u32 kbd_read_status(void) static void kbd_write_data(u32 val) { switch (state.write_cmd) { - case CMD_WRITE_MODE: + case I8042_CMD_CTL_WCTR: state.mode = val; kbd_update_irq(); break; - case CMD_WRITE_AUX_BUF: + case I8042_CMD_AUX_LOOP: mouse_queue(val); mouse_queue(RESPONSE_ACK); break; - case CMD_WRITE_AUX: + case I8042_CMD_AUX_SEND: /* The OS wants to send a command to the mouse */ mouse_queue(RESPONSE_ACK); switch (val) {
This patch renames the command constants in hw/i8042.c to use similar names as in <linux/i8042.h>. Note: we cannot use <linux/i8042.h> constants directly because they include the command and data. Cc: Ingo Molnar <mingo@elte.hu> Cc: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org> --- tools/kvm/hw/i8042.c | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-)