xref: /onnv-gate/usr/src/uts/common/io/kbtrans/usb_keytables.c (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*0Sstevel@tonic-gate  * Use is subject to license terms.
25*0Sstevel@tonic-gate  */
26*0Sstevel@tonic-gate 
27*0Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*0Sstevel@tonic-gate 
29*0Sstevel@tonic-gate /*
30*0Sstevel@tonic-gate  * This module contains the translation tables for the up-down encoded
31*0Sstevel@tonic-gate  * USB keyboards.
32*0Sstevel@tonic-gate  */
33*0Sstevel@tonic-gate #include <sys/usb/usba/usbai_version.h>
34*0Sstevel@tonic-gate 
35*0Sstevel@tonic-gate #define	KEYMAP_SIZE_VARIABLE
36*0Sstevel@tonic-gate 
37*0Sstevel@tonic-gate #include <sys/param.h>
38*0Sstevel@tonic-gate #include <sys/kbd.h>
39*0Sstevel@tonic-gate #include <sys/stream.h>
40*0Sstevel@tonic-gate #include <sys/consdev.h>
41*0Sstevel@tonic-gate #include <sys/note.h>
42*0Sstevel@tonic-gate #include <sys/usb/clients/hid/hid.h>
43*0Sstevel@tonic-gate #include <sys/usb/clients/hid/hid_polled.h>
44*0Sstevel@tonic-gate #include <sys/usb/clients/hidparser/hidparser.h>
45*0Sstevel@tonic-gate #include <sys/kbtrans.h>
46*0Sstevel@tonic-gate #include <sys/usb/clients/usbkbm/usbkbm.h>
47*0Sstevel@tonic-gate #include <sys/types.h>
48*0Sstevel@tonic-gate #include <sys/kmem.h>
49*0Sstevel@tonic-gate #include <sys/sunddi.h>
50*0Sstevel@tonic-gate 
51*0Sstevel@tonic-gate /* handy way to define control characters in the tables */
52*0Sstevel@tonic-gate #define	c(char)(char&0x1F)
53*0Sstevel@tonic-gate #define	ESC 0x1B
54*0Sstevel@tonic-gate #define	DEL 0x7F
55*0Sstevel@tonic-gate 
56*0Sstevel@tonic-gate /* Unshifted keyboard table for USB keyboard */
57*0Sstevel@tonic-gate 
58*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_lc[KEYMAP_SIZE_USB] = {
59*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'a', 'b', 'c', 'd',
60*0Sstevel@tonic-gate /*   8 */	'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
61*0Sstevel@tonic-gate /*  16 */	'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
62*0Sstevel@tonic-gate /*  24 */	'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
63*0Sstevel@tonic-gate /*  32 */	'3', '4', '5', '6', '7', '8', '9', '0',
64*0Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '-', '=', '[',
65*0Sstevel@tonic-gate /*  48  */	']',   '\\',   HOLE,    ';',   '\'',    '`',   ',',   '.',
66*0Sstevel@tonic-gate /*  56 */	'/', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
67*0Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
68*0Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
69*0Sstevel@tonic-gate 		RF(2), RF(3),
70*0Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
71*0Sstevel@tonic-gate 					STRING+RIGHTARROW,
72*0Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
73*0Sstevel@tonic-gate 					SHIFTKEYS+NUMLOCK, RF(5),
74*0Sstevel@tonic-gate 		RF(6), BF(15), BF(14),
75*0Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15), STRING+LEFTARROW, \
76*0Sstevel@tonic-gate 		RF(11), STRING+RIGHTARROW, RF(7),
77*0Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
78*0Sstevel@tonic-gate 		BF(13), HOLE,
79*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
80*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
81*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6), LF(8), \
82*0Sstevel@tonic-gate 		LF(9), RF(4),
83*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
84*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
85*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
86*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
87*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
88*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
89*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
90*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
91*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
92*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
93*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
94*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
95*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
96*0Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
97*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
98*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
99*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
100*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
101*0Sstevel@tonic-gate };
102*0Sstevel@tonic-gate 
103*0Sstevel@tonic-gate 
104*0Sstevel@tonic-gate /* Shifted keyboard table for USB keyboard */
105*0Sstevel@tonic-gate 
106*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_uc[KEYMAP_SIZE_USB] = {
107*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'A', 'B', 'C', 'D',
108*0Sstevel@tonic-gate /*   8 */	'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
109*0Sstevel@tonic-gate /*  16 */	'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
110*0Sstevel@tonic-gate /*  24 */	'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
111*0Sstevel@tonic-gate /*  32 */	'#', '$', '%', '^', '&', '*', '(', ')',
112*0Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '_', '+', '{',
113*0Sstevel@tonic-gate /*  48  */	'}',   '|',   HOLE,    ':',   '"',  '~',   '<',   '>',
114*0Sstevel@tonic-gate /*  56 */	'?', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
115*0Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
116*0Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
117*0Sstevel@tonic-gate 		RF(2), RF(3),
118*0Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
119*0Sstevel@tonic-gate 					STRING+RIGHTARROW,
120*0Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
121*0Sstevel@tonic-gate 					SHIFTKEYS+NUMLOCK, RF(5), RF(6), \
122*0Sstevel@tonic-gate 		BF(15), BF(14), \
123*0Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15), \
124*0Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
125*0Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
126*0Sstevel@tonic-gate 		BF(13), HOLE,
127*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
128*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
129*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6), \
130*0Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
131*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
132*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
133*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
134*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
135*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
136*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
137*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
138*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
139*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
140*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
141*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
142*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
143*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
144*0Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
145*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
146*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
147*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
148*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
149*0Sstevel@tonic-gate 	};
150*0Sstevel@tonic-gate 
151*0Sstevel@tonic-gate 
152*0Sstevel@tonic-gate /* Caps Locked keyboard table for USB keyboard */
153*0Sstevel@tonic-gate 
154*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_cl[KEYMAP_SIZE_USB] = {
155*0Sstevel@tonic-gate 
156*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'A', 'B', 'C', 'D',
157*0Sstevel@tonic-gate /*   8 */	'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
158*0Sstevel@tonic-gate /*  16 */	'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
159*0Sstevel@tonic-gate /*  24 */	'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2',
160*0Sstevel@tonic-gate /*  32 */	'3', '4', '5', '6', '7', '8', '9', '0',
161*0Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '-', '=', '[',
162*0Sstevel@tonic-gate /*  48  */	']',   '\\',   HOLE,    ';',   '\'',  '`',   ',',   '.',
163*0Sstevel@tonic-gate /*  56 */	'/', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
164*0Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
165*0Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
166*0Sstevel@tonic-gate 		RF(2), RF(3),
167*0Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
168*0Sstevel@tonic-gate 						STRING+RIGHTARROW,
169*0Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
170*0Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
171*0Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15),
172*0Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
173*0Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
174*0Sstevel@tonic-gate 		BF(13), HOLE,
175*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
176*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
177*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6),
178*0Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
179*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
180*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
181*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
182*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
183*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
184*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
185*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
186*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
187*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
188*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
189*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
190*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
191*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT,
192*0Sstevel@tonic-gate 		SHIFTKEYS+ALT, BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL,
193*0Sstevel@tonic-gate 		SHIFTKEYS+RIGHTSHIFT,
194*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
195*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
196*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
197*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
198*0Sstevel@tonic-gate 	};
199*0Sstevel@tonic-gate 
200*0Sstevel@tonic-gate 
201*0Sstevel@tonic-gate /* Alt Graph keyboard table for USB keyboard */
202*0Sstevel@tonic-gate 
203*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_ag[KEYMAP_SIZE_USB] = {
204*0Sstevel@tonic-gate /*  0 */	HOLE,	HOLE, HOLE,	ERROR,	NOP,	NOP,	NOP,	NOP,
205*0Sstevel@tonic-gate /*  8 */	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
206*0Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
207*0Sstevel@tonic-gate /* 24 */	NOP, 	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
208*0Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
209*0Sstevel@tonic-gate /* 40 */	'\r',	ESC,	'\b',	'\t',	' ',	NOP,	NOP,	NOP,
210*0Sstevel@tonic-gate /* 48 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,
211*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+CAPSLOCK,	TF(1), TF(2),
212*0Sstevel@tonic-gate 				TF(3),	TF(4),	TF(5),	TF(6),
213*0Sstevel@tonic-gate /* 64 */	TF(7),	TF(8),	 TF(9),	TF(10),
214*0Sstevel@tonic-gate 					TF(11),	TF(12), RF(2),	RF(3),
215*0Sstevel@tonic-gate /* 72 */	RF(1),	BF(8),	RF(7),	RF(9),	DEL, RF(13), RF(15),
216*0Sstevel@tonic-gate 					STRING+RIGHTARROW,
217*0Sstevel@tonic-gate /* 80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
218*0Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
219*0Sstevel@tonic-gate /* 88 */	BF(11),	RF(13),	STRING+DOWNARROW, RF(15),
220*0Sstevel@tonic-gate 			STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
221*0Sstevel@tonic-gate /* 96 */	STRING+UPARROW,	RF(9),	BF(8), BF(10),
222*0Sstevel@tonic-gate 					HOLE,	COMPOSE, BF(13), HOLE,
223*0Sstevel@tonic-gate /* 104 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE, HOLE,	HOLE,
224*0Sstevel@tonic-gate /* 112 */	HOLE,	HOLE, HOLE,	HOLE,	LF(7),	LF(16), LF(3), LF(5),
225*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2),	LF(4), LF(10), LF(6),
226*0Sstevel@tonic-gate 		LF(8),	LF(9),	RF(4),
227*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
228*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
229*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
230*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
231*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
232*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
233*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
234*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
235*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
236*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
237*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
238*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
239*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
240*0Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
241*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
242*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
243*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
244*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
245*0Sstevel@tonic-gate };
246*0Sstevel@tonic-gate 
247*0Sstevel@tonic-gate /* Num Locked keyboard table for USB keyboard */
248*0Sstevel@tonic-gate 
249*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_nl[KEYMAP_SIZE_USB] = {
250*0Sstevel@tonic-gate 
251*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, NONL, NONL, NONL, NONL, NONL,
252*0Sstevel@tonic-gate /*   8 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
253*0Sstevel@tonic-gate /*  16 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
254*0Sstevel@tonic-gate /*  24 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
255*0Sstevel@tonic-gate /*  32 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
256*0Sstevel@tonic-gate /*  40 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
257*0Sstevel@tonic-gate /*  48 */	NONL, NONL, HOLE, NONL, NONL, NONL, NONL, NONL,
258*0Sstevel@tonic-gate /*  56 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
259*0Sstevel@tonic-gate /*  64 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
260*0Sstevel@tonic-gate /*  72 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
261*0Sstevel@tonic-gate /*  80 */	NONL, NONL, NONL, NONL, PADSLASH, PADSTAR, PADMINUS, PADPLUS,
262*0Sstevel@tonic-gate /*  88 */	PADENTER, PAD1, PAD2, PAD3, PAD4, PAD5, PAD6, PAD7,
263*0Sstevel@tonic-gate /*  96 */	PAD8, PAD9, PAD0, PADDOT, HOLE, NONL, NONL, HOLE,
264*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
265*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, NONL, NONL, NONL, NONL,
266*0Sstevel@tonic-gate /* 120 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, PADEQUAL,
267*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
268*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
269*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
270*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, NONL, HOLE,
271*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
272*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
273*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
274*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
275*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
276*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
277*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
278*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
279*0Sstevel@tonic-gate /* 224 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
280*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
281*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
282*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
283*0Sstevel@tonic-gate };
284*0Sstevel@tonic-gate 
285*0Sstevel@tonic-gate /* Controlled keyboard table for USB keyboard */
286*0Sstevel@tonic-gate 
287*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_ct[KEYMAP_SIZE_USB] = {
288*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, c('a'), c('b'), c('c'), c('d'),
289*0Sstevel@tonic-gate /*   8 */	c('e'), c('f'), c('g'), c('h'), c('i'), c('j'), c('k'), c('l'),
290*0Sstevel@tonic-gate /*  16 */	c('m'), c('n'), c('o'), c('p'), c('q'), c('r'), c('s'), c('t'),
291*0Sstevel@tonic-gate /*  24 */	c('u'), c('v'), c('w'), c('x'), c('y'), c('z'), '1', c(' '),
292*0Sstevel@tonic-gate /*  32 */	'3', '4', '5', c('^'), '7', '8', '9', '0',
293*0Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', c(' '), c('_'), '=', ESC,
294*0Sstevel@tonic-gate /*  48  */	c(']'),   c('\\'),   HOLE,    ';',   '\'',    c('^'),
295*0Sstevel@tonic-gate 		',',   '.',
296*0Sstevel@tonic-gate /*  56 */	c('_'), SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
297*0Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
298*0Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
299*0Sstevel@tonic-gate 		RF(2), RF(3),
300*0Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
301*0Sstevel@tonic-gate 						STRING+RIGHTARROW,
302*0Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
303*0Sstevel@tonic-gate 		SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
304*0Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15),
305*0Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
306*0Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
307*0Sstevel@tonic-gate 		BF(13), HOLE,
308*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
309*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
310*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6),
311*0Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
312*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
313*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
314*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
315*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
316*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
317*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
318*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
319*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
320*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
321*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
322*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
323*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
324*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
325*0Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
326*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
327*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
328*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
329*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
330*0Sstevel@tonic-gate 
331*0Sstevel@tonic-gate 
332*0Sstevel@tonic-gate };
333*0Sstevel@tonic-gate 
334*0Sstevel@tonic-gate /* "Key Up" keyboard table for USB keyboard */
335*0Sstevel@tonic-gate 
336*0Sstevel@tonic-gate static keymap_entry_t keytab_usb_up[KEYMAP_SIZE_USB] = {
337*0Sstevel@tonic-gate 
338*0Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, NOP, NOP, NOP, NOP, NOP,
339*0Sstevel@tonic-gate /*   8 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
340*0Sstevel@tonic-gate /*  16 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
341*0Sstevel@tonic-gate /*  24 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
342*0Sstevel@tonic-gate /*  32 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
343*0Sstevel@tonic-gate /*  40 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
344*0Sstevel@tonic-gate /*  48  */	NOP, NOP, HOLE, NOP, NOP, NOP, NOP, NOP,
345*0Sstevel@tonic-gate /*  56 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
346*0Sstevel@tonic-gate /*  64 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
347*0Sstevel@tonic-gate /*  72 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
348*0Sstevel@tonic-gate /*  80 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
349*0Sstevel@tonic-gate /*  88 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
350*0Sstevel@tonic-gate /*  96 */	NOP, NOP, NOP, NOP, HOLE, NOP, NOP, HOLE,
351*0Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
352*0Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, NOP, NOP, NOP, NOP,
353*0Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
354*0Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
355*0Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
356*0Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
357*0Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, NOP, HOLE,
358*0Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
359*0Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
360*0Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
361*0Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
362*0Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
363*0Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
364*0Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
365*0Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
366*0Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
367*0Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
368*0Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
369*0Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
370*0Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
371*0Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
372*0Sstevel@tonic-gate 	};
373*0Sstevel@tonic-gate 
374*0Sstevel@tonic-gate 
375*0Sstevel@tonic-gate /*
376*0Sstevel@tonic-gate  * Index into keytab_pc_lc based on USB scancodes
377*0Sstevel@tonic-gate  */
378*0Sstevel@tonic-gate static keymap_entry_t keytab_usb2pc[KEYMAP_SIZE_USB] = {
379*0Sstevel@tonic-gate /*   0 */	0,	0,	0,	0,	31,	50,	48,	33,
380*0Sstevel@tonic-gate /*   8 */	19,	34,	35,	36,	24,	37,	38,	39,
381*0Sstevel@tonic-gate /*  16 */	52,	51,	25,	26,	17,	20,	32,	21,
382*0Sstevel@tonic-gate /*  24 */	23,	49,	18,	47,	22,	46,	2,	3,
383*0Sstevel@tonic-gate /*  32 */	4,	5,	6,	7,	8,	9,	10,	11,
384*0Sstevel@tonic-gate /*  40 */	43,	110,	15,	16,	61,	12,	13,	27,
385*0Sstevel@tonic-gate /*  48 */	28,	29,	0,	40,	41,	1,	53,	54,
386*0Sstevel@tonic-gate /*  56 */	55,	30,	112,	113,	114,	115,	116,	117,
387*0Sstevel@tonic-gate /*  64 */	118,	119,	120,	121,	122,	123,	124,	125,
388*0Sstevel@tonic-gate /*  72 */	126,	75,	80,	85,	76,	81,	86,	89,
389*0Sstevel@tonic-gate /*  80 */	79,	84,	83,	90,	95,	100,	105,	106,
390*0Sstevel@tonic-gate /*  88 */	108,	93,	98,	103,	92,	97,	102,	91,
391*0Sstevel@tonic-gate /*  96 */	96,	101,	99,	104,	0,	0,	0,	0,
392*0Sstevel@tonic-gate /* 104 */	0,	0,	0,	0,	0,	0,	0,	0,
393*0Sstevel@tonic-gate /* 112 */	0,	0,	0,	0,	0,	0,	0,	0,
394*0Sstevel@tonic-gate /* 120 */	0,	0,	0,	0,	0,	0,	0,	0,
395*0Sstevel@tonic-gate /* 128 */	0,	0,	0,	0,	0,	0,	0,	0,
396*0Sstevel@tonic-gate /* 136 */	0,	0,	0,	0,	0,	0,	0,	0,
397*0Sstevel@tonic-gate /* 144 */	0,	0,	0,	0,	0,	0,	0,	0,
398*0Sstevel@tonic-gate /* 152 */	0,	0,	0,	0,	0,	0,	0,	0,
399*0Sstevel@tonic-gate /* 160 */	0,	0,	0,	0,	0,	0,	0,	0,
400*0Sstevel@tonic-gate /* 168 */	0,	0,	0,	0,	0,	0,	0,	0,
401*0Sstevel@tonic-gate /* 176 */	0,	0,	0,	0,	0,	0,	0,	0,
402*0Sstevel@tonic-gate /* 184 */	0,	0,	0,	0,	0,	0,	0,	0,
403*0Sstevel@tonic-gate /* 192 */	0,	0,	0,	0,	0,	0,	0,	0,
404*0Sstevel@tonic-gate /* 200 */	0,	0,	0,	0,	0,	0,	0,	0,
405*0Sstevel@tonic-gate /* 208 */	0,	0,	0,	0,	0,	0,	0,	0,
406*0Sstevel@tonic-gate /* 216 */	0,	0,	0,	0,	0,	0,	0,	0,
407*0Sstevel@tonic-gate /* 224 */	58,	44,	60,	0,	64,	57,	62,	0,
408*0Sstevel@tonic-gate /* 232 */	0,	0,	0,	0,	0,	0,	0,	0,
409*0Sstevel@tonic-gate /* 240 */	0,	0,	0,	0,	0,	0,	0,	0,
410*0Sstevel@tonic-gate /* 248 */	0,	0,	0,	0,	0,	0,	0
411*0Sstevel@tonic-gate };
412*0Sstevel@tonic-gate 
413*0Sstevel@tonic-gate /* Index to keymaps for USB keyboard */
414*0Sstevel@tonic-gate static struct keyboard kbtrans_usb_keyindex = {
415*0Sstevel@tonic-gate 	KEYMAP_SIZE_USB,
416*0Sstevel@tonic-gate 	keytab_usb_lc,
417*0Sstevel@tonic-gate 	keytab_usb_uc,
418*0Sstevel@tonic-gate 	keytab_usb_cl,
419*0Sstevel@tonic-gate 	keytab_usb_ag,
420*0Sstevel@tonic-gate 	keytab_usb_nl,
421*0Sstevel@tonic-gate 	keytab_usb_ct,
422*0Sstevel@tonic-gate 	keytab_usb_up,
423*0Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
424*0Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
425*0Sstevel@tonic-gate 	120,
426*0Sstevel@tonic-gate #if defined(__sparc)
427*0Sstevel@tonic-gate 	0,		/* no alternate abort key F1 on sparc */
428*0Sstevel@tonic-gate #else
429*0Sstevel@tonic-gate 	58,		/* alternate abort key F1 */
430*0Sstevel@tonic-gate #endif
431*0Sstevel@tonic-gate 	4,
432*0Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
433*0Sstevel@tonic-gate 	NULL,		/* Exception table */
434*0Sstevel@tonic-gate };
435*0Sstevel@tonic-gate 
436*0Sstevel@tonic-gate struct keyboard *
437*0Sstevel@tonic-gate kbtrans_usbkb_maptab_init(void)
438*0Sstevel@tonic-gate {
439*0Sstevel@tonic-gate 	struct keyboard *pkbd;
440*0Sstevel@tonic-gate 
441*0Sstevel@tonic-gate 	pkbd = (struct keyboard *)
442*0Sstevel@tonic-gate 	    kmem_alloc(sizeof (struct keyboard), KM_SLEEP);
443*0Sstevel@tonic-gate 
444*0Sstevel@tonic-gate 	bcopy(&kbtrans_usb_keyindex, pkbd, sizeof (*pkbd));
445*0Sstevel@tonic-gate 
446*0Sstevel@tonic-gate 	return (pkbd);
447*0Sstevel@tonic-gate }
448*0Sstevel@tonic-gate 
449*0Sstevel@tonic-gate void
450*0Sstevel@tonic-gate kbtrans_usbkb_maptab_fini(struct keyboard **ppkbd)
451*0Sstevel@tonic-gate {
452*0Sstevel@tonic-gate 	kmem_free(*ppkbd, sizeof (struct keyboard));
453*0Sstevel@tonic-gate 	*ppkbd = NULL;
454*0Sstevel@tonic-gate }
455*0Sstevel@tonic-gate 
456*0Sstevel@tonic-gate /*
457*0Sstevel@tonic-gate  * Translate USB scancodes to PC scancodes before sending it to 'kbtrans'
458*0Sstevel@tonic-gate  */
459*0Sstevel@tonic-gate keymap_entry_t
460*0Sstevel@tonic-gate kbtrans_keycode_usb2pc(int key)
461*0Sstevel@tonic-gate {
462*0Sstevel@tonic-gate 	ASSERT(key >= 0 && key <= 255);
463*0Sstevel@tonic-gate 	return (keytab_usb2pc[key]);
464*0Sstevel@tonic-gate }
465