Subject: xsrc/29591: pure wskbd devices (without console emulation) do not work with X
To: None <xsrc-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Matthias Pfaller <leo@dachau.marco.de>
List: netbsd-bugs
Date: 03/04/2005 09:55:00
>Number:         29591
>Category:       xsrc
>Synopsis:       pure wskbd devices do not work with x
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    xsrc-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Mar 04 09:55:00 +0000 2005
>Originator:     Matthias Pfaller
>Release:        NetBSD 2.99.14
>Organization:
Matthias Pfaller                            Software Entwicklung
marco Systemanalyse und Entwicklung GmbH    Tel   +49 8131 5161-41
Hans-B=F6ckler-Str. 2, D 85221 Dachau         Fax   +49 8131 5161-66
http://www.marco.de/                        Email leo@dachau.marco.de
>Environment:
	<The following information is extracted from your kernel. Please>
	<append output of "ldd", "ident" where relevant (multiple lines).>
System: NetBSD joghurt 2.99.14 NetBSD 2.99.14 (SIN) #24: Mon Jan 17 10:21:1=
7 CET 2005 leo@joghurt:/usr/src/sys/arch/i386/compile/SIN i386
Architecture: i386
Machine: i386
>Description:
	when using a wskbd for X without any emulation active (i.e. for a
	second display), USB and PS/2 keyboards return "strange" keycodes.
>How-To-Repeat:
	Put a second VGA card into your machine, connect a keyboard to the
	mouse port or to USB and run a second X Server.
>Fix:
This patch removes some code from xf86Events.c (necessary for USB-Keyboards=
)=20
and adds a wskbd translation map for PC/XT keyboards.

Index: xf86Events.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/xsrc/xfree/xc/programs/Xserver/hw/xfree86/common/xf86Eve=
nts.c,v
retrieving revision 1.4
diff -u -u -r1.4 xf86Events.c
--- xf86Events.c	5 Mar 2004 16:33:03 -0000	1.4
+++ xf86Events.c	3 Mar 2005 14:22:21 -0000
@@ -543,6 +543,7 @@
       }
     } else
 #endif /* i386 && SVR4 */
+#if 0
     {
       switch (scanCode) {
       case 0x59:        scanCode =3D KEY_0x59; break;
@@ -575,6 +576,7 @@
       case 0x76:        scanCode =3D KEY_0x76; break;
       }
     }
+#endif
   }
=20
   else if (
@@ -1631,7 +1633,7 @@
   int value =3D event->value;
   unsigned int keycode;
   int blocked;
- =20
+
   if (type =3D=3D WSCONS_EVENT_KEY_UP || type =3D=3D WSCONS_EVENT_KEY_DOWN=
) {
     Bool down =3D (type =3D=3D WSCONS_EVENT_KEY_DOWN ? TRUE : FALSE);
=20
Index: xf86KbdBSD.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/xsrc/xfree/xc/programs/Xserver/hw/xfree86/common/xf86Kbd=
BSD.c,v
retrieving revision 1.7
diff -u -u -r1.7 xf86KbdBSD.c
--- xf86KbdBSD.c	11 Nov 2004 19:16:33 -0000	1.7
+++ xf86KbdBSD.c	3 Mar 2005 14:22:21 -0000
@@ -871,11 +871,238 @@
 	/* 228 */ KEY_RCtrl,	/* Right Control */
 	/* 229 */ KEY_ShiftR,	/* Right Shift */
 	/* 230 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
-	/* 231 */ KEY_LMeta,	/* Right Meta XXX */
+	/* 231 */ KEY_RMeta,	/* Right Meta */
 };
=20
 #define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
=20
+static CARD8 wsATXTMap[] =3D {
+	/* 0 */  KEY_NOTUSED,
+	/* 1 */  KEY_Escape,	/* Escape */
+	/* 2 */  KEY_1, 	/* 1 ! */
+	/* 3 */  KEY_2, 	/* 2 @ */
+	/* 4 */  KEY_3, 	/* 3 # */
+	/* 5 */  KEY_4, 	/* 4 $ */
+	/* 6 */  KEY_5, 	/* 5 % */
+	/* 7 */  KEY_6, 	/* 6 ^ */
+	/* 8 */  KEY_7, 	/* 7 & */
+	/* 9 */  KEY_8, 	/* 8 * */
+	/* 10 */ KEY_9, 	/* 9 ( */
+	/* 11 */ KEY_0, 	/* 0 ) */
+	/* 12 */ KEY_Minus,	/* - _ */
+	/* 13 */ KEY_Equal,	/* =3D + */
+	/* 14 */ KEY_BackSpace,	/* Backspace Delete */
+	/* 15 */ KEY_Tab,	/* Tab */
+	/* 16 */ KEY_Q,
+	/* 17 */ KEY_W,
+	/* 18 */ KEY_E,
+	/* 19 */ KEY_R,
+	/* 20 */ KEY_T,
+	/* 21 */ KEY_Y,
+	/* 22 */ KEY_U,
+	/* 23 */ KEY_I,
+	/* 24 */ KEY_O,
+	/* 25 */ KEY_P,
+	/* 26 */ KEY_LBrace,	/* [ { */
+	/* 27 */ KEY_RBrace,	/* ] } */
+	/* 28 */ KEY_Enter,	/* Return  */
+	/* 29 */ KEY_LCtrl,	/* Left Control */
+	/* 30 */ KEY_A,
+	/* 31 */ KEY_S,
+	/* 32 */ KEY_D,
+	/* 33 */ KEY_F,
+	/* 34 */ KEY_G,
+	/* 35 */ KEY_H,
+	/* 36 */ KEY_J,
+	/* 37 */ KEY_K,
+	/* 38 */ KEY_L,
+	/* 39 */ KEY_SemiColon,	/* ; : */
+	/* 40 */ KEY_Quote,	/* ' " */
+	/* 41 */ KEY_Tilde,	/* ` ~ */
+	/* 42 */ KEY_ShiftL,	/* Left Shift */
+	/* 43 */ KEY_BSlash,	/* \ | */
+	/* 44 */ KEY_Z,
+	/* 45 */ KEY_X,
+	/* 46 */ KEY_C,
+	/* 47 */ KEY_V,
+	/* 48 */ KEY_B,
+	/* 49 */ KEY_N,
+	/* 50 */ KEY_M,
+	/* 51 */ KEY_Comma,	/* , <  */
+	/* 52 */ KEY_Period,	/* . > */
+	/* 53 */ KEY_Slash,	/* / ? */
+	/* 54 */ KEY_ShiftR,	/* Right Shift */
+	/* 55 */ KEY_KP_Multiply, /* Keypad * */
+	/* 56 */ KEY_Alt,	/* Left Alt */
+	/* 57 */ KEY_Space,	/* Space */
+	/* 58 */ KEY_CapsLock,	/* Caps Lock */
+	/* 59 */ KEY_F1,	/* F1 */
+	/* 60 */ KEY_F2,	/* F2 */
+	/* 61 */ KEY_F3,	/* F3 */
+	/* 62 */ KEY_F4,	/* F4 */
+	/* 63 */ KEY_F5,	/* F5 */
+	/* 64 */ KEY_F6,	/* F6 */
+	/* 65 */ KEY_F7,	/* F7 */
+	/* 66 */ KEY_F8,	/* F8 */
+	/* 67 */ KEY_F9,	/* F9 */
+	/* 68 */ KEY_F10,	/* F10 */
+	/* 69 */ KEY_NumLock,	/* Num Lock */
+	/* 70 */ KEY_ScrollLock,/* Scroll Lock */
+	/* 71 */ KEY_KP_7,	/* Keypad 7 Home */
+	/* 72 */ KEY_KP_8,	/* Keypad 8 Up */
+	/* 73 */ KEY_KP_9,	/* KEypad 9 Pg Up */
+	/* 74 */ KEY_KP_Minus,	/* Keypad - */
+	/* 75 */ KEY_KP_4,	/* Keypad 4 Left  */
+	/* 76 */ KEY_KP_5,	/* Keypad 5 */
+	/* 77 */ KEY_KP_6,	/* Keypad 6 */
+	/* 78 */ KEY_KP_Plus,	/* Keypad + */
+	/* 79 */ KEY_KP_1,	/* Keypad 1 End */
+	/* 80 */ KEY_KP_2,	/* Keypad 2 Down */
+	/* 81 */ KEY_KP_3,	/* Keypad 3 Pg Down */
+	/* 82 */ KEY_KP_0,	/* Keypad 0 Ins */
+	/* 83 */ KEY_KP_Decimal,/* Keypad . Del */
+	/* 84 */ KEY_NOTUSED,
+	/* 85 */ KEY_NOTUSED,
+	/* 86 */ KEY_Less,	/* < > on some keyboards */
+	/* 87 */ KEY_F11,	/* F11 */
+	/* 88 */ KEY_F12,	/* F12 */
+	/* 89 */ KEY_NOTUSED,
+	/* 90 */ KEY_NOTUSED,
+	/* 91 */ KEY_NOTUSED,
+	/* 92 */ KEY_NOTUSED,
+	/* 93 */ KEY_NOTUSED,
+	/* 94 */ KEY_NOTUSED,
+	/* 95 */ KEY_NOTUSED,
+	/* 96 */ KEY_NOTUSED,
+	/* 97 */ KEY_NOTUSED,
+	/* 98 */ KEY_NOTUSED,
+	/* 99 */ KEY_NOTUSED,
+	/* 100 */ KEY_NOTUSED,
+	/* 101 */ KEY_NOTUSED,
+	/* 102 */ KEY_NOTUSED,
+	/* 103 */ KEY_NOTUSED,
+	/* 104 */ KEY_NOTUSED,
+	/* 105 */ KEY_NOTUSED,
+	/* 106 */ KEY_NOTUSED,
+	/* 107 */ KEY_NOTUSED,
+	/* 108 */ KEY_NOTUSED,
+	/* 109 */ KEY_NOTUSED,
+	/* 110 */ KEY_NOTUSED,
+	/* 111 */ KEY_NOTUSED,
+	/* 112 */ KEY_NOTUSED,
+	/* 113 */ KEY_NOTUSED,
+	/* 114 */ KEY_NOTUSED,
+	/* 115 */ KEY_NOTUSED,
+	/* 116 */ KEY_NOTUSED,
+	/* 117 */ KEY_NOTUSED,
+	/* 118 */ KEY_NOTUSED,
+	/* 119 */ KEY_NOTUSED,
+	/* 120 */ KEY_NOTUSED,
+	/* 121 */ KEY_NOTUSED,
+	/* 122 */ KEY_NOTUSED,
+	/* 123 */ KEY_NOTUSED,
+	/* 124 */ KEY_NOTUSED,
+	/* 125 */ KEY_NOTUSED,
+	/* 126 */ KEY_NOTUSED,
+	/* 127 */ KEY_Pause,	/* Pause Break */
+	/* 128 */ KEY_NOTUSED,
+	/* 129 */ KEY_NOTUSED,
+	/* 130 */ KEY_NOTUSED,
+	/* 131 */ KEY_NOTUSED,
+	/* 132 */ KEY_NOTUSED,
+	/* 133 */ KEY_NOTUSED,
+	/* 134 */ KEY_NOTUSED,
+	/* 135 */ KEY_NOTUSED,
+	/* 136 */ KEY_NOTUSED,
+	/* 137 */ KEY_NOTUSED,
+	/* 138 */ KEY_NOTUSED,
+	/* 139 */ KEY_NOTUSED,
+	/* 140 */ KEY_NOTUSED,
+	/* 141 */ KEY_NOTUSED,
+	/* 142 */ KEY_NOTUSED,
+	/* 143 */ KEY_NOTUSED,
+	/* 144 */ KEY_NOTUSED,
+	/* 145 */ KEY_NOTUSED,
+	/* 146 */ KEY_NOTUSED,
+	/* 147 */ KEY_NOTUSED,
+	/* 148 */ KEY_NOTUSED,
+	/* 149 */ KEY_NOTUSED,
+	/* 150 */ KEY_NOTUSED,
+	/* 151 */ KEY_NOTUSED,
+	/* 152 */ KEY_NOTUSED,
+	/* 153 */ KEY_NOTUSED,
+	/* 154 */ KEY_NOTUSED,
+	/* 155 */ KEY_NOTUSED,
+	/* 156 */ KEY_KP_Enter,	/* Keypad Enter */
+	/* 157 */ KEY_RCtrl,	/* Right Control */
+	/* 158 */ KEY_NOTUSED,
+	/* 159 */ KEY_NOTUSED,
+	/* 160 */ KEY_NOTUSED,
+	/* 161 */ KEY_NOTUSED,
+	/* 162 */ KEY_NOTUSED,
+	/* 163 */ KEY_NOTUSED,
+	/* 164 */ KEY_NOTUSED,
+	/* 165 */ KEY_NOTUSED,
+	/* 166 */ KEY_NOTUSED,
+	/* 167 */ KEY_NOTUSED,
+	/* 168 */ KEY_NOTUSED,
+	/* 169 */ KEY_NOTUSED,
+	/* 170 */ KEY_Print,	/* PrintScrn SysReq */
+	/* 171 */ KEY_NOTUSED,
+	/* 172 */ KEY_NOTUSED,
+	/* 173 */ KEY_NOTUSED,
+	/* 174 */ KEY_NOTUSED,
+	/* 175 */ KEY_NOTUSED,
+	/* 176 */ KEY_NOTUSED,
+	/* 177 */ KEY_NOTUSED,
+	/* 178 */ KEY_NOTUSED,
+	/* 179 */ KEY_NOTUSED,
+	/* 180 */ KEY_NOTUSED,
+	/* 181 */ KEY_KP_Divide,	/* Keypad / */
+	/* 182 */ KEY_NOTUSED,
+	/* 183 */ KEY_Print,	/* PrintScrn SysReq */
+	/* 184 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
+	/* 185 */ KEY_NOTUSED,
+	/* 186 */ KEY_NOTUSED,
+	/* 187 */ KEY_NOTUSED,
+	/* 188 */ KEY_NOTUSED,
+	/* 189 */ KEY_NOTUSED,
+	/* 190 */ KEY_NOTUSED,
+	/* 191 */ KEY_NOTUSED,
+	/* 192 */ KEY_NOTUSED,
+	/* 193 */ KEY_NOTUSED,
+	/* 194 */ KEY_NOTUSED,
+	/* 195 */ KEY_NOTUSED,
+	/* 196 */ KEY_NOTUSED,
+	/* 197 */ KEY_NOTUSED,
+	/* 198 */ KEY_NOTUSED,
+	/* 199 */ KEY_Home,	/* Home */
+	/* 200 */ KEY_Up,	/* Up Arrow */
+	/* 201 */ KEY_PgUp,	/* Page Up */
+	/* 202 */ KEY_NOTUSED,
+	/* 203 */ KEY_Left,	/* Left Arrow */
+	/* 204 */ KEY_NOTUSED,
+	/* 205 */ KEY_Right,	/* Right Arrow */
+	/* 206 */ KEY_NOTUSED,
+	/* 207 */ KEY_End,	/* End */
+	/* 208 */ KEY_Down,	/* Down Arrow */
+	/* 209 */ KEY_PgDown,	/* Page Down */
+	/* 210 */ KEY_Insert,	/* Insert XXX  Help on some Mac Keyboards */
+	/* 211 */ KEY_Delete,	/* Delete */
+	/* 212 */ KEY_NOTUSED,
+	/* 213 */ KEY_NOTUSED,
+	/* 214 */ KEY_NOTUSED,
+	/* 215 */ KEY_NOTUSED,
+	/* 216 */ KEY_NOTUSED,
+	/* 217 */ KEY_NOTUSED,
+	/* 218 */ KEY_NOTUSED,
+	/* 219 */ KEY_LMeta,	/* Left Meta */
+	/* 220 */ KEY_RMeta,	/* Right Meta */
+	/* 221 */ KEY_Menu,	/* Menu */
+};
+
+#define WS_ATXT_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
+
 /* Map for adb keyboards  */
 static CARD8 wsAdbMap[] =3D {
 	/* 0 */ KEY_A,
@@ -1249,8 +1476,10 @@
 	switch (xf86Info.wsKbdType) {
 	case WSKBD_TYPE_PC_XT:
 	case WSKBD_TYPE_PC_AT:
-		/* No translation needed */
-		return keycode;
+		if (keycode < 0 || keycode >=3D WS_ATXT_MAP_SIZE)=20
+			return KEY_UNKNOWN;
+		else=20
+			return wsATXTMap[keycode];
 	case WSKBD_TYPE_USB:
 		if (keycode < 0 || keycode >=3D WS_USB_MAP_SIZE)=20
 			return KEY_UNKNOWN;

>Unformatted:
 	xsrc 20050303
 	<Please check that the above is correct for the bug being reported,>
 	<and append source date of snapshot, if applicable (one line).>