Hi, I think the diff should be brought to arm64 as well. ok?
On Thu, 23 Aug 2018 11:21:57 +0900 (JST) YASUOKA Masahiko <[email protected]> wrote: > On Mon, 20 Aug 2018 13:50:13 +0200 > Theo Buehler <[email protected]> wrote: >> On Thu, Aug 16, 2018 at 09:51:32PM +0200, Frank Groeneveld wrote: >>> I haven't been able to type the passphrase of my softraid device on >>> boot when using an external keyboard on my Thinkpad X260. Finally I >>> had some time to debug this problem and this is what I discovered. >>> >>> On a different laptop with EFI, the ReadKeyStroke call will not return >>> a packet when shift is pressed on the external keyboard. On the >>> Thinkpad however, a packet is returned with UnicodeChar == 0, which >>> results in a wrong passphrase being used. >>> >>> This seems like a bug in the firmware to me, because according to some >>> EFI specifications I found online, this should not return a packet. >>> I've attached a simple patch that fixes this, but I'm not sure whether >>> this might break things on different systems. >> >> I can't comment on the technical side of this patch but I can confirm >> that it allows me to enter the password from an external keyboard with >> my x280. > > In the spec, > > | The UnicodeChar is the actual printable character or is zero if the > | key does not represent a printable character (control key, function > | key, etc.). > > It seems that UnicodeChar can be zero. So I think the diff is OK even > on the spec. > > If there is no futher comment I'll commit it. Thanks. Index: sys/arch/arm64/stand/efiboot/efiboot.c =================================================================== RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/efiboot.c,v retrieving revision 1.20 diff -u -p -r1.20 efiboot.c --- sys/arch/arm64/stand/efiboot/efiboot.c 23 Aug 2018 15:31:12 -0000 1.20 +++ sys/arch/arm64/stand/efiboot/efiboot.c 24 Aug 2018 02:44:30 -0000 @@ -129,7 +129,7 @@ efi_cons_getc(dev_t dev) } status = conin->ReadKeyStroke(conin, &key); - while (status == EFI_NOT_READY) { + while (status == EFI_NOT_READY || key.UnicodeChar == 0) { if (dev & 0x80) return (0); /*
