diff options
author | Michael Brown <mcb30@ipxe.org> | 2022-02-09 15:43:42 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2022-02-10 13:59:32 +0000 |
commit | 0bbd8967830097b9141945ba960e90339c230ccb (patch) | |
tree | eca6637c24625b3ca50663d8f5e833f6e4f009b5 /src/include/ipxe/keymap.h | |
parent | 3f05a82fec6223a49df300a9cbf80c6245c3f99e (diff) | |
download | ipxe-0bbd8967830097b9141945ba960e90339c230ccb.tar.gz |
[console] Handle remapping of scancode 86
The key with scancode 86 appears in the position between left shift
and Z on a US keyboard, where it typically fails to exist entirely.
Most US keyboard maps define this nonexistent key as generating "\|",
with the notable exception of "loadkeys" which instead reports it as
generating "<>". Both of these mapping choices duplicate keys that
exist elsewhere in the map, which causes problems for our ASCII-based
remapping mechanism.
Work around these quirks by treating the key as generating "\|" with
the high bit set, and making it subject to remapping. Where the BIOS
generates "\|" as expected, this allows us to remap to the correct
ASCII value.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/keymap.h')
-rw-r--r-- | src/include/ipxe/keymap.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/include/ipxe/keymap.h b/src/include/ipxe/keymap.h index 62b3bb131..93c9e7314 100644 --- a/src/include/ipxe/keymap.h +++ b/src/include/ipxe/keymap.h @@ -27,6 +27,9 @@ struct key_mapping { /** Define a keyboard mapping */ #define __keymap __table_entry ( KEYMAP, 01 ) +/** Pseudo key flag */ +#define KEYMAP_PSEUDO 0x80 + extern unsigned int key_remap ( unsigned int character ); #endif /* _IPXE_KEYMAP_H */ |