Hi,
landry@ reported that kbd spits out the following error while booting
with a ucc keyboard attached and /etc/kbdtype being present:
kbd: unsupported encoding uk on /dev/wskbd2
Changing the encoding of a ucc keyboard doesn't make sense as only one
encoding is supported. Instead, silently ignore such requests. I ended
up repurposing KB_MACHDEP as is became unused back in 2008. Note that
kbd and wsconsctl must be recompiled as they rely on KDBVAR_TAB.
Comments? OK?
Index: dev/usb/ucc.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/ucc.c,v
retrieving revision 1.26
diff -u -p -r1.26 ucc.c
--- dev/usb/ucc.c 12 Sep 2021 06:58:08 -0000 1.26
+++ dev/usb/ucc.c 12 Sep 2021 15:22:03 -0000
@@ -788,7 +788,7 @@ ucc_attach_wskbd(struct ucc_softc *sc)
sc->sc_keydesc[0].map_size = sc->sc_maplen;
sc->sc_keydesc[0].map = sc->sc_map;
sc->sc_keymap.keydesc = sc->sc_keydesc;
- sc->sc_keymap.layout = KB_US;
+ sc->sc_keymap.layout = KB_US | KB_NOENCODING;
sc->sc_wskbddev = config_found(&sc->sc_hdev.sc_dev, &a, wskbddevprint);
}
Index: dev/wscons/wskbd.c
===================================================================
RCS file: /cvs/src/sys/dev/wscons/wskbd.c,v
retrieving revision 1.107
diff -u -p -r1.107 wskbd.c
--- dev/wscons/wskbd.c 2 Nov 2020 19:45:18 -0000 1.107
+++ dev/wscons/wskbd.c 12 Sep 2021 15:22:04 -0000
@@ -1146,6 +1146,8 @@ getkeyrepeat:
/* map variants make no sense */
if (KB_VARIANT(enc) & ~KB_HANDLEDBYWSKBD)
return (EINVAL);
+ } else if (sc->id->t_keymap.layout & KB_NOENCODING) {
+ return (0);
} else {
error = wskbd_load_keymap(&sc->id->t_keymap, enc,
&sc->sc_map, &sc->sc_maplen);
Index: dev/wscons/wsksymdef.h
===================================================================
RCS file: /cvs/src/sys/dev/wscons/wsksymdef.h,v
retrieving revision 1.38
diff -u -p -r1.38 wsksymdef.h
--- dev/wscons/wsksymdef.h 11 May 2019 14:19:16 -0000 1.38
+++ dev/wscons/wsksymdef.h 12 Sep 2021 15:22:04 -0000
@@ -744,7 +744,7 @@
#define KB_DVORAK 0x00000010 /* Dvorak layout */
#define KB_METAESC 0x00000020 /* generate ESC prefix on ALT-key */
#define KB_IOPENER 0x00000040 /* f1-f12 -> ESC,f1-f11 */
-#define KB_MACHDEP 0x00000080 /* machine dependent */
+#define KB_NOENCODING 0x00000080 /* no encodings available */
#define KB_APPLE 0x00010000 /* Apple specific layout */
#define KB_COLEMAK 0x02000000 /* Colemak layout */
#define KB_DEFAULT 0x80000000 /* (attach-only) default layout */
@@ -788,7 +788,7 @@
{ KB_DVORAK, "dvorak" }, \
{ KB_METAESC, "metaesc" }, \
{ KB_IOPENER, "iopener" }, \
- { KB_MACHDEP, "machdep" }, \
+ { KB_NOENCODING, "noencoding" }, \
{ KB_APPLE, "apple" }, \
{ KB_COLEMAK, "colemak" }
Index: dev/wscons/wsksymvar.h
===================================================================
RCS file: /cvs/src/sys/dev/wscons/wsksymvar.h,v
retrieving revision 1.8
diff -u -p -r1.8 wsksymvar.h
--- dev/wscons/wsksymvar.h 26 Jan 2014 17:48:08 -0000 1.8
+++ dev/wscons/wsksymvar.h 12 Sep 2021 15:22:04 -0000
@@ -60,7 +60,7 @@ struct wskbd_mapdata {
};
/* layout variant bits ignored by mapping code */
-#define KB_HANDLEDBYWSKBD (KB_METAESC | KB_DEFAULT)
+#define KB_HANDLEDBYWSKBD (KB_METAESC | KB_DEFAULT | KB_NOENCODING)
/*
* Utility functions.