|
|
b32e65 |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
b32e65 |
From: Michael Bideau <mica.devel@gmail.com>
|
|
|
b32e65 |
Date: Wed, 2 Oct 2019 23:48:10 +0200
|
|
|
b32e65 |
Subject: [PATCH] at_keyboard: Fix unreliable key presses
|
|
|
b32e65 |
|
|
|
b32e65 |
This patch fixes an issue that prevented the at_keyboard module to work
|
|
|
b32e65 |
(for me). The cause was a bad/wrong return value in the
|
|
|
b32e65 |
grub_at_keyboard_getkey() function in grub-core/term/at_keyboard.c file
|
|
|
b32e65 |
at line 237. My symptoms were to have an unresponsive keyboard. Keys
|
|
|
b32e65 |
needed to be pressed 10x and more to effectively be printed sometimes
|
|
|
b32e65 |
generating multiple key presses (after 1 or 2 sec of no printing). It
|
|
|
b32e65 |
was very problematic when typing passphrase in early stage (with
|
|
|
b32e65 |
GRUB_ENABLE_CRYPTODISK). When switched to "console" terminal input
|
|
|
b32e65 |
keyboard worked perfectly. It also worked great with the GRUB 2.02
|
|
|
b32e65 |
packaged by Debian (2.02+dfsg1-20). It was not an output issue but an
|
|
|
b32e65 |
input one.
|
|
|
b32e65 |
|
|
|
b32e65 |
I've managed to analyze the issue and found that it came from the commit
|
|
|
b32e65 |
216950a4e (at_keyboard: Split protocol from controller code.). Three
|
|
|
b32e65 |
lines where moved from the fetch_key() function in
|
|
|
b32e65 |
grub-core/term/at_keyboard.c file to the beginning of
|
|
|
b32e65 |
grub_at_keyboard_getkey() function (same file). However, returning -1
|
|
|
b32e65 |
made sense when it happened in fetch_key() function but not anymore in
|
|
|
b32e65 |
grub_at_keyboard_getkey() function which should return GRUB_TERM_NO_KEY.
|
|
|
b32e65 |
I think it was just an incomplete cut-paste missing a small manual
|
|
|
b32e65 |
correction. Let's fix it.
|
|
|
b32e65 |
|
|
|
b32e65 |
Note: Commit message updated by Daniel Kiper.
|
|
|
b32e65 |
|
|
|
b32e65 |
Signed-off-by: Michael Bideau <mica.devel@gmail.com>
|
|
|
b32e65 |
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|
|
b32e65 |
(cherry picked from commit 33203ca3484717712b54e199c46ae8a818374284)
|
|
|
b32e65 |
---
|
|
|
b32e65 |
grub-core/term/at_keyboard.c | 2 +-
|
|
|
b32e65 |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
b32e65 |
|
|
|
b32e65 |
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
|
|
|
b32e65 |
index c805cccbd..dac0f946f 100644
|
|
|
b32e65 |
--- a/grub-core/term/at_keyboard.c
|
|
|
b32e65 |
+++ b/grub-core/term/at_keyboard.c
|
|
|
b32e65 |
@@ -318,7 +318,7 @@ grub_at_keyboard_getkey (struct grub_term_input *term __attribute__ ((unused)))
|
|
|
b32e65 |
return GRUB_TERM_NO_KEY;
|
|
|
b32e65 |
|
|
|
b32e65 |
if (! KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS)))
|
|
|
b32e65 |
- return -1;
|
|
|
b32e65 |
+ return GRUB_TERM_NO_KEY;
|
|
|
b32e65 |
at_key = grub_inb (KEYBOARD_REG_DATA);
|
|
|
b32e65 |
old_led = ps2_state.led_status;
|
|
|
b32e65 |
|