[coreboot-gerrit] Patch set updated for coreboot: 16adf33 Libpayload: Add keyboard-disable function.

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Sat Dec 21 08:12:31 CET 2013


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4395

-gerrit

commit 16adf33af768957bd80ea3c91838b64d21effe51
Author: Martin Roth <martin.roth at se-eng.com>
Date:   Fri Jul 26 16:31:21 2013 -0600

    Libpayload: Add keyboard-disable function.
    
    Add a function to disable and clear the keyboard controller.
    
    Verified Code flow in normal boot/S3 resume with print statements.
    Verified Keyboard was correctly disabled and flushed by booting
    to recovery mode screen while pressing keys on the integrated
    keyboard.
    
    Change-Id: I3e1f011c3436fee5ce10993c6c26a3c8597c6fca
    Signed-off-by: Martin Roth <martin.roth at se-eng.com>
    Reviewed-on: https://gerrit.chromium.org/gerrit/63627
    Reviewed-by: Shawn Nematbakhsh <shawnn at chromium.org>
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    Tested-by: Shawn Nematbakhsh <shawnn at chromium.org>
    Commit-Queue: Shawn Nematbakhsh <shawnn at chromium.org>
---
 payloads/libpayload/drivers/keyboard.c   | 21 +++++++++++++++++++++
 payloads/libpayload/include/libpayload.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/payloads/libpayload/drivers/keyboard.c b/payloads/libpayload/drivers/keyboard.c
index e65f085..0175bc7 100644
--- a/payloads/libpayload/drivers/keyboard.c
+++ b/payloads/libpayload/drivers/keyboard.c
@@ -31,6 +31,8 @@
 #include <libpayload-config.h>
 #include <libpayload.h>
 
+#define I8042_CMD_DIS_KB     0xad
+
 struct layout_maps {
 	const char *country;
 	const unsigned short map[4][0x57];
@@ -300,3 +302,22 @@ void keyboard_init(void)
 	console_add_input_driver(&cons);
 }
 
+void keyboard_disconnect(void)
+{
+	/* If 0x64 returns 0xff, then we have no keyboard
+	 * controller */
+	if (inb(0x64) == 0xFF)
+		return;
+
+	/* Empty keyboard buffer */
+	while (keyboard_havechar())
+		keyboard_getchar();
+
+	/* Send keyboard disconnect command */
+	outb(I8042_CMD_DIS_KB, 0x64);
+	keyboard_wait_write();
+
+	/* Hand off with empty buffer */
+	while (keyboard_havechar())
+		keyboard_getchar();
+}
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index 8e03c0b..10a4505 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -150,6 +150,7 @@ int add_reset_handler(void (*new_handler)(void));
  * @{
  */
 void keyboard_init(void);
+void keyboard_disconnect(void);
 int keyboard_havechar(void);
 unsigned char keyboard_get_scancode(void);
 int keyboard_getchar(void);



More information about the coreboot-gerrit mailing list