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.

Reply via email to