diff options
author | Jordan Crouse <jordan.crouse@amd.com> | 2008-10-20 17:07:26 +0000 |
---|---|---|
committer | Jordan Crouse <jordan.crouse@amd.com> | 2008-10-20 17:07:26 +0000 |
commit | ec6363dc48540db67a5966dc9987b192c26fcae1 (patch) | |
tree | 5097fa82577feee38070ad5822d1bd2826edb51f /payloads/libpayload/drivers/keyboard.c | |
parent | 6744231197b38bfc27c43b9cc95d25b6f8595d95 (diff) |
[PATCH] libpayload: Bail if the keyboard controller isn't there
If the system in question does not have a superIO, then a read of
0x64 will return 0xFF and we will loop forever.
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3675 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/libpayload/drivers/keyboard.c')
-rw-r--r-- | payloads/libpayload/drivers/keyboard.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/payloads/libpayload/drivers/keyboard.c b/payloads/libpayload/drivers/keyboard.c index 0bf7c56161..95827463ca 100644 --- a/payloads/libpayload/drivers/keyboard.c +++ b/payloads/libpayload/drivers/keyboard.c @@ -175,11 +175,10 @@ static void keyboard_cmd(unsigned char cmd, unsigned char val) while (inb(0x64) & 2); } - int keyboard_havechar(void) { unsigned char c = inb(0x64); - return c & 1; + return (c == 0xFF) ? 0 : c & 1; } unsigned char keyboard_get_scancode(void) @@ -332,6 +331,12 @@ void keyboard_init(void) u8 mode; map = &keyboard_layouts[0]; + /* If 0x64 returns 0xff, then we have no keyboard + * controller */ + + if (inb(0x64) == 0xFF) + return; + /* Empty keyboard buffer */ while (keyboard_havechar()) keyboard_getchar(); |