[OpenBIOS] [PATCH 01/11] pc_kbd: ensure that we properly reset the 8042 controller and keyboard device
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Sat May 26 21:29:46 CEST 2018
More recent versions of QEMU disable scanning until the controller and
keyboard device have been explicitly reset.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
---
drivers/pc_kbd.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/drivers/pc_kbd.c b/drivers/pc_kbd.c
index 51b7a1f..3b74f8c 100644
--- a/drivers/pc_kbd.c
+++ b/drivers/pc_kbd.c
@@ -134,6 +134,24 @@ unsigned char pc_kbd_readdata(void)
return tmp;
}
+static void
+pc_kbd_reset(void)
+{
+ /* Reset first port */
+ outb(0xae, 0x64);
+ while (inb(0x64) & 2);
+
+ /* Write mode command, translated mode */
+ pc_kbd_controller_cmd(0x60, 0x40);
+
+ /* Reset keyboard device */
+ outb(0xff, 0x60);
+ while (inb(0x64) & 2);
+ inb(0x60); /* Should be 0xfa */
+ while (inb(0x64) & 2);
+ inb(0x60); /* Should be 0xaa */
+}
+
/* ( addr len -- actual ) */
static void
pc_kbd_read(void)
@@ -280,8 +298,8 @@ ob_pc_kbd_init(const char *path, const char *kdev_name, const char *mdev_name,
aliases = find_dev("/aliases");
set_property(aliases, "keyboard", nodebuff, strlen(nodebuff) + 1);
- pc_kbd_controller_cmd(0x60, 0x40); // Write mode command, translated mode
-
+ pc_kbd_reset();
+
/* Mouse (optional) */
if (mdev_name != NULL) {
snprintf(nodebuff, sizeof(nodebuff), "%s/8042", path);
--
2.11.0
More information about the OpenBIOS
mailing list