On Fri, Apr 12, 2019 at 08:30:09AM +0200, Gerd Hoffmann wrote: > 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; > }
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-le...@seabios.org _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-le...@seabios.org