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@se-eng.com>
Reviewed-on: https://gerrit.chromium.org/gerrit/63627
Reviewed-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: Shawn Nematbakhsh <shawnn@chromium.org>
Commit-Queue: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: http://review.coreboot.org/4395
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Martin Roth 2013-07-26 16:31:21 -06:00 committed by Patrick Georgi
parent 2f38b07570
commit 3ee59f7b31
2 changed files with 22 additions and 0 deletions

View File

@ -31,6 +31,8 @@
#include <libpayload-config.h> #include <libpayload-config.h>
#include <libpayload.h> #include <libpayload.h>
#define I8042_CMD_DIS_KB 0xad
struct layout_maps { struct layout_maps {
const char *country; const char *country;
const unsigned short map[4][0x57]; const unsigned short map[4][0x57];
@ -300,3 +302,22 @@ void keyboard_init(void)
console_add_input_driver(&cons); 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();
}

View File

@ -150,6 +150,7 @@ int add_reset_handler(void (*new_handler)(void));
* @{ * @{
*/ */
void keyboard_init(void); void keyboard_init(void);
void keyboard_disconnect(void);
int keyboard_havechar(void); int keyboard_havechar(void);
unsigned char keyboard_get_scancode(void); unsigned char keyboard_get_scancode(void);
int keyboard_getchar(void); int keyboard_getchar(void);