On Fri, Apr 12, 2019 at 08:30:09AM +0200, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <[email protected]>
> ---
> 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 -- [email protected]
> To unsubscribe send an email to [email protected]
_______________________________________________
SeaBIOS mailing list -- [email protected]
To unsubscribe send an email to [email protected]