Signed-off-by: Gerd Hoffmann <kraxel(a)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