summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorJordan Crouse <jordan.crouse@amd.com>2008-10-20 17:07:26 +0000
committerJordan Crouse <jordan.crouse@amd.com>2008-10-20 17:07:26 +0000
commitec6363dc48540db67a5966dc9987b192c26fcae1 (patch)
tree5097fa82577feee38070ad5822d1bd2826edb51f /payloads
parent6744231197b38bfc27c43b9cc95d25b6f8595d95 (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')
-rw-r--r--payloads/libpayload/drivers/keyboard.c9
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();