Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
 src/util.h    |  2 +-
 src/boot.c    | 16 +++++++++-------
 src/tcgbios.c |  8 ++++----
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/util.h b/src/util.h
index 9c06850353a4..fdb542c42964 100644
--- a/src/util.h
+++ b/src/util.h
@@ -36,7 +36,7 @@ int bootprio_find_pci_rom(struct pci_device *pci, int 
instance);
 int bootprio_find_named_rom(const char *name, int instance);
 struct usbdevice_s;
 int bootprio_find_usb(struct usbdevice_s *usbdev, int lun);
-int get_keystroke(int msec);
+int get_keystroke(int msec, u8 *ascii);
 
 // bootsplash.c
 void enable_vga_console(void);
diff --git a/src/boot.c b/src/boot.c
index 9f82f3ca0c3e..47b039fbad09 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -435,23 +435,25 @@ check_for_keystroke(void)
 
 // Return a keystroke - waiting forever if necessary.
 static int
-get_raw_keystroke(void)
+get_raw_keystroke(u8 *ascii)
 {
     struct bregs br;
     memset(&br, 0, sizeof(br));
     br.flags = F_IF;
     call16_int(0x16, &br);
+    if (ascii)
+        *ascii = br.al;
     return br.ah;
 }
 
 // Read a keystroke - waiting up to 'msec' milliseconds.
 int
-get_keystroke(int msec)
+get_keystroke(int msec, u8 *ascii)
 {
     u32 end = irqtimer_calc(msec);
     for (;;) {
         if (check_for_keystroke())
-            return get_raw_keystroke();
+            return get_raw_keystroke(ascii);
         if (irqtimer_check(end))
             return -1;
         yield_toirq();
@@ -474,7 +476,7 @@ interactive_bootmenu(void)
     if (! CONFIG_BOOTMENU || !romfile_loadint("etc/show-boot-menu", 1))
         return;
 
-    while (get_keystroke(0) >= 0)
+    while (get_keystroke(0, NULL) >= 0)
         ;
 
     char *bootmsg = romfile_loadfile("etc/boot-menu-message", NULL);
@@ -484,12 +486,12 @@ interactive_bootmenu(void)
 
     u32 menutime = romfile_loadint("etc/boot-menu-wait", 
DEFAULT_BOOTMENU_WAIT);
     enable_bootsplash();
-    int scan_code = get_keystroke(menutime);
+    int scan_code = get_keystroke(menutime, NULL);
     disable_bootsplash();
     if (scan_code != menukey)
         return;
 
-    while (get_keystroke(0) >= 0)
+    while (get_keystroke(0, NULL) >= 0)
         ;
 
     printf("Select boot device:\n\n");
@@ -514,7 +516,7 @@ interactive_bootmenu(void)
     // multiple times and immediately booting the primary boot device.
     int esc_accepted_time = irqtimer_calc(menukey == 1 ? 1500 : 0);
     for (;;) {
-        scan_code = get_keystroke(1000);
+        scan_code = get_keystroke(1000, NULL);
         if (scan_code == 1 && !irqtimer_check(esc_accepted_time))
             continue;
         if (tpm_can_show_menu() && scan_code == 20 /* t */) {
diff --git a/src/tcgbios.c b/src/tcgbios.c
index 2e503f933524..a17239db21c9 100644
--- a/src/tcgbios.c
+++ b/src/tcgbios.c
@@ -2068,7 +2068,7 @@ tpm12_menu(void)
         waitkey = 1;
 
         while (waitkey) {
-            while ((scancode = get_keystroke(1000)) == ~0)
+            while ((scancode = get_keystroke(1000, NULL)) == ~0)
                 ;
 
             switch (scancode) {
@@ -2156,7 +2156,7 @@ tpm20_menu_change_active_pcrbanks(void)
         u8 flagnum;
         int show = 0;
         while (!show) {
-            int scancode = get_keystroke(1000);
+            int scancode = get_keystroke(1000, NULL);
 
             switch (scancode) {
             case ~0:
@@ -2197,7 +2197,7 @@ tpm20_menu(void)
 
         msgCode = TPM_PPI_OP_NOOP;
 
-        while ((scan_code = get_keystroke(1000)) == ~0)
+        while ((scan_code = get_keystroke(1000, NULL)) == ~0)
             ;
 
         switch (scan_code) {
@@ -2225,7 +2225,7 @@ tpm_menu(void)
     if (!CONFIG_TCGBIOS)
         return;
 
-    while (get_keystroke(0) >= 0)
+    while (get_keystroke(0, NULL) >= 0)
         ;
     wait_threads();
 
-- 
2.18.1
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to