On Fri, Apr 12, 2019 at 08:30:09AM +0200, Gerd Hoffmann wrote:
Signed-off-by: Gerd Hoffmann kraxel@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)
return br.ah;*ascii = br.al;
}
FYI, it may be simpler to return br.ax which is the "keycode". Callers could then convert the "keycode" to either a "scancode" or an ascii code.
-Kevin
// 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-leave@seabios.org