xref: /titanic_53/usr/src/uts/common/io/kbtrans/usb_keytables.c (revision e4603304e8bd084dd25a0dbafdd438ac250d5f56)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*e4603304Sqz150045  * Common Development and Distribution License (the "License").
6*e4603304Sqz150045  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22*e4603304Sqz150045  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
277c478bd9Sstevel@tonic-gate 
287c478bd9Sstevel@tonic-gate /*
297c478bd9Sstevel@tonic-gate  * This module contains the translation tables for the up-down encoded
307c478bd9Sstevel@tonic-gate  * USB keyboards.
317c478bd9Sstevel@tonic-gate  */
327c478bd9Sstevel@tonic-gate #include <sys/usb/usba/usbai_version.h>
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate #define	KEYMAP_SIZE_VARIABLE
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate #include <sys/param.h>
377c478bd9Sstevel@tonic-gate #include <sys/kbd.h>
387c478bd9Sstevel@tonic-gate #include <sys/stream.h>
397c478bd9Sstevel@tonic-gate #include <sys/consdev.h>
407c478bd9Sstevel@tonic-gate #include <sys/note.h>
417c478bd9Sstevel@tonic-gate #include <sys/usb/clients/hid/hid.h>
427c478bd9Sstevel@tonic-gate #include <sys/usb/clients/hid/hid_polled.h>
437c478bd9Sstevel@tonic-gate #include <sys/usb/clients/hidparser/hidparser.h>
447c478bd9Sstevel@tonic-gate #include <sys/kbtrans.h>
457c478bd9Sstevel@tonic-gate #include <sys/usb/clients/usbkbm/usbkbm.h>
467c478bd9Sstevel@tonic-gate #include <sys/types.h>
477c478bd9Sstevel@tonic-gate #include <sys/kmem.h>
487c478bd9Sstevel@tonic-gate #include <sys/sunddi.h>
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /* handy way to define control characters in the tables */
517c478bd9Sstevel@tonic-gate #define	c(char)(char&0x1F)
527c478bd9Sstevel@tonic-gate #define	ESC 0x1B
537c478bd9Sstevel@tonic-gate #define	DEL 0x7F
547c478bd9Sstevel@tonic-gate 
557c478bd9Sstevel@tonic-gate /* Unshifted keyboard table for USB keyboard */
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_lc[KEYMAP_SIZE_USB] = {
587c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'a', 'b', 'c', 'd',
597c478bd9Sstevel@tonic-gate /*   8 */	'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
607c478bd9Sstevel@tonic-gate /*  16 */	'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
617c478bd9Sstevel@tonic-gate /*  24 */	'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
627c478bd9Sstevel@tonic-gate /*  32 */	'3', '4', '5', '6', '7', '8', '9', '0',
637c478bd9Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '-', '=', '[',
647c478bd9Sstevel@tonic-gate /*  48  */	']',   '\\',   HOLE,    ';',   '\'',    '`',   ',',   '.',
657c478bd9Sstevel@tonic-gate /*  56 */	'/', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
667c478bd9Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
677c478bd9Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
687c478bd9Sstevel@tonic-gate 		RF(2), RF(3),
697c478bd9Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
707c478bd9Sstevel@tonic-gate 					STRING+RIGHTARROW,
717c478bd9Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
727c478bd9Sstevel@tonic-gate 					SHIFTKEYS+NUMLOCK, RF(5),
737c478bd9Sstevel@tonic-gate 		RF(6), BF(15), BF(14),
747c478bd9Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15), STRING+LEFTARROW, \
757c478bd9Sstevel@tonic-gate 		RF(11), STRING+RIGHTARROW, RF(7),
767c478bd9Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
777c478bd9Sstevel@tonic-gate 		BF(13), HOLE,
787c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
797c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
807c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6), LF(8), \
817c478bd9Sstevel@tonic-gate 		LF(9), RF(4),
827c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
837c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
847c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
857c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
867c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
877c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
887c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
897c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
907c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
917c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
927c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
937c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
947c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
957c478bd9Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
967c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
977c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
987c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
997c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1007c478bd9Sstevel@tonic-gate };
1017c478bd9Sstevel@tonic-gate 
1027c478bd9Sstevel@tonic-gate 
1037c478bd9Sstevel@tonic-gate /* Shifted keyboard table for USB keyboard */
1047c478bd9Sstevel@tonic-gate 
1057c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_uc[KEYMAP_SIZE_USB] = {
1067c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'A', 'B', 'C', 'D',
1077c478bd9Sstevel@tonic-gate /*   8 */	'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
1087c478bd9Sstevel@tonic-gate /*  16 */	'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
1097c478bd9Sstevel@tonic-gate /*  24 */	'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
1107c478bd9Sstevel@tonic-gate /*  32 */	'#', '$', '%', '^', '&', '*', '(', ')',
1117c478bd9Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '_', '+', '{',
1127c478bd9Sstevel@tonic-gate /*  48  */	'}',   '|',   HOLE,    ':',   '"',  '~',   '<',   '>',
1137c478bd9Sstevel@tonic-gate /*  56 */	'?', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
1147c478bd9Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
1157c478bd9Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
1167c478bd9Sstevel@tonic-gate 		RF(2), RF(3),
1177c478bd9Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
1187c478bd9Sstevel@tonic-gate 					STRING+RIGHTARROW,
1197c478bd9Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
1207c478bd9Sstevel@tonic-gate 					SHIFTKEYS+NUMLOCK, RF(5), RF(6), \
1217c478bd9Sstevel@tonic-gate 		BF(15), BF(14), \
1227c478bd9Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15), \
1237c478bd9Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
1247c478bd9Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
1257c478bd9Sstevel@tonic-gate 		BF(13), HOLE,
1267c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1277c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
1287c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6), \
1297c478bd9Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
1307c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1317c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1327c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1337c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
1347c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1357c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1367c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1377c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1387c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1397c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1407c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1417c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1427c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
1437c478bd9Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
1447c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
1457c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1467c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1477c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1487c478bd9Sstevel@tonic-gate 	};
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate 
1517c478bd9Sstevel@tonic-gate /* Caps Locked keyboard table for USB keyboard */
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_cl[KEYMAP_SIZE_USB] = {
1547c478bd9Sstevel@tonic-gate 
1557c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, 'A', 'B', 'C', 'D',
1567c478bd9Sstevel@tonic-gate /*   8 */	'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
1577c478bd9Sstevel@tonic-gate /*  16 */	'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
1587c478bd9Sstevel@tonic-gate /*  24 */	'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2',
1597c478bd9Sstevel@tonic-gate /*  32 */	'3', '4', '5', '6', '7', '8', '9', '0',
1607c478bd9Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', ' ', '-', '=', '[',
1617c478bd9Sstevel@tonic-gate /*  48  */	']',   '\\',   HOLE,    ';',   '\'',  '`',   ',',   '.',
1627c478bd9Sstevel@tonic-gate /*  56 */	'/', SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
1637c478bd9Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
1647c478bd9Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
1657c478bd9Sstevel@tonic-gate 		RF(2), RF(3),
1667c478bd9Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
1677c478bd9Sstevel@tonic-gate 						STRING+RIGHTARROW,
1687c478bd9Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
1697c478bd9Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
1707c478bd9Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15),
1717c478bd9Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
1727c478bd9Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
1737c478bd9Sstevel@tonic-gate 		BF(13), HOLE,
1747c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1757c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
1767c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6),
1777c478bd9Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
1787c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1797c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1807c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1817c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
1827c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1837c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1847c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1857c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1867c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1877c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1887c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1897c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1907c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT,
1917c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALT, BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL,
1927c478bd9Sstevel@tonic-gate 		SHIFTKEYS+RIGHTSHIFT,
1937c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
1947c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1957c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1967c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
1977c478bd9Sstevel@tonic-gate 	};
1987c478bd9Sstevel@tonic-gate 
1997c478bd9Sstevel@tonic-gate 
2007c478bd9Sstevel@tonic-gate /* Alt Graph keyboard table for USB keyboard */
2017c478bd9Sstevel@tonic-gate 
2027c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_ag[KEYMAP_SIZE_USB] = {
2037c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	HOLE, HOLE,	ERROR,	NOP,	NOP,	NOP,	NOP,
2047c478bd9Sstevel@tonic-gate /*  8 */	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2057c478bd9Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2067c478bd9Sstevel@tonic-gate /* 24 */	NOP, 	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2077c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2087c478bd9Sstevel@tonic-gate /* 40 */	'\r',	ESC,	'\b',	'\t',	' ',	NOP,	NOP,	NOP,
2097c478bd9Sstevel@tonic-gate /* 48 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,
2107c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+CAPSLOCK,	TF(1), TF(2),
2117c478bd9Sstevel@tonic-gate 				TF(3),	TF(4),	TF(5),	TF(6),
2127c478bd9Sstevel@tonic-gate /* 64 */	TF(7),	TF(8),	 TF(9),	TF(10),
2137c478bd9Sstevel@tonic-gate 					TF(11),	TF(12), RF(2),	RF(3),
2147c478bd9Sstevel@tonic-gate /* 72 */	RF(1),	BF(8),	RF(7),	RF(9),	DEL, RF(13), RF(15),
2157c478bd9Sstevel@tonic-gate 					STRING+RIGHTARROW,
2167c478bd9Sstevel@tonic-gate /* 80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
2177c478bd9Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
2187c478bd9Sstevel@tonic-gate /* 88 */	BF(11),	RF(13),	STRING+DOWNARROW, RF(15),
2197c478bd9Sstevel@tonic-gate 			STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
2207c478bd9Sstevel@tonic-gate /* 96 */	STRING+UPARROW,	RF(9),	BF(8), BF(10),
2217c478bd9Sstevel@tonic-gate 					HOLE,	COMPOSE, BF(13), HOLE,
2227c478bd9Sstevel@tonic-gate /* 104 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE, HOLE,	HOLE,
2237c478bd9Sstevel@tonic-gate /* 112 */	HOLE,	HOLE, HOLE,	HOLE,	LF(7),	LF(16), LF(3), LF(5),
2247c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2),	LF(4), LF(10), LF(6),
2257c478bd9Sstevel@tonic-gate 		LF(8),	LF(9),	RF(4),
2267c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2277c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2287c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2297c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
2307c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2317c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2327c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2337c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2347c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2357c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2367c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2377c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2387c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
2397c478bd9Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
2407c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
2417c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2427c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2437c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2447c478bd9Sstevel@tonic-gate };
2457c478bd9Sstevel@tonic-gate 
2467c478bd9Sstevel@tonic-gate /* Num Locked keyboard table for USB keyboard */
2477c478bd9Sstevel@tonic-gate 
2487c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_nl[KEYMAP_SIZE_USB] = {
2497c478bd9Sstevel@tonic-gate 
2507c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, NONL, NONL, NONL, NONL, NONL,
2517c478bd9Sstevel@tonic-gate /*   8 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2527c478bd9Sstevel@tonic-gate /*  16 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2537c478bd9Sstevel@tonic-gate /*  24 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2547c478bd9Sstevel@tonic-gate /*  32 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2557c478bd9Sstevel@tonic-gate /*  40 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2567c478bd9Sstevel@tonic-gate /*  48 */	NONL, NONL, HOLE, NONL, NONL, NONL, NONL, NONL,
2577c478bd9Sstevel@tonic-gate /*  56 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2587c478bd9Sstevel@tonic-gate /*  64 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2597c478bd9Sstevel@tonic-gate /*  72 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2607c478bd9Sstevel@tonic-gate /*  80 */	NONL, NONL, NONL, NONL, PADSLASH, PADSTAR, PADMINUS, PADPLUS,
2617c478bd9Sstevel@tonic-gate /*  88 */	PADENTER, PAD1, PAD2, PAD3, PAD4, PAD5, PAD6, PAD7,
2627c478bd9Sstevel@tonic-gate /*  96 */	PAD8, PAD9, PAD0, PADDOT, HOLE, NONL, NONL, HOLE,
2637c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2647c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, NONL, NONL, NONL, NONL,
2657c478bd9Sstevel@tonic-gate /* 120 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, PADEQUAL,
2667c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2677c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2687c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2697c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, NONL, HOLE,
2707c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2717c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2727c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2737c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2747c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2757c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2767c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2777c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2787c478bd9Sstevel@tonic-gate /* 224 */	NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
2797c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2807c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2817c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
2827c478bd9Sstevel@tonic-gate };
2837c478bd9Sstevel@tonic-gate 
2847c478bd9Sstevel@tonic-gate /* Controlled keyboard table for USB keyboard */
2857c478bd9Sstevel@tonic-gate 
2867c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_ct[KEYMAP_SIZE_USB] = {
2877c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, ERROR, c('a'), c('b'), c('c'), c('d'),
2887c478bd9Sstevel@tonic-gate /*   8 */	c('e'), c('f'), c('g'), c('h'), c('i'), c('j'), c('k'), c('l'),
2897c478bd9Sstevel@tonic-gate /*  16 */	c('m'), c('n'), c('o'), c('p'), c('q'), c('r'), c('s'), c('t'),
2907c478bd9Sstevel@tonic-gate /*  24 */	c('u'), c('v'), c('w'), c('x'), c('y'), c('z'), '1', c(' '),
2917c478bd9Sstevel@tonic-gate /*  32 */	'3', '4', '5', c('^'), '7', '8', '9', '0',
2927c478bd9Sstevel@tonic-gate /*  40 */	'\r', ESC, '\b', '\t', c(' '), c('_'), '=', ESC,
2937c478bd9Sstevel@tonic-gate /*  48  */	c(']'),   c('\\'),   HOLE,    ';',   '\'',    c('^'),
2947c478bd9Sstevel@tonic-gate 		',',   '.',
2957c478bd9Sstevel@tonic-gate /*  56 */	c('_'), SHIFTKEYS+CAPSLOCK, TF(1), TF(2), TF(3),
2967c478bd9Sstevel@tonic-gate 		TF(4), TF(5), TF(6),
2977c478bd9Sstevel@tonic-gate /*  64 */	TF(7), TF(8), TF(9), TF(10), TF(11), TF(12),
2987c478bd9Sstevel@tonic-gate 		RF(2), RF(3),
2997c478bd9Sstevel@tonic-gate /*  72 */	RF(1), BF(8), RF(7), RF(9), DEL, RF(13), RF(15),
3007c478bd9Sstevel@tonic-gate 						STRING+RIGHTARROW,
3017c478bd9Sstevel@tonic-gate /*  80 */	STRING+LEFTARROW, STRING+DOWNARROW, STRING+UPARROW,
3027c478bd9Sstevel@tonic-gate 		SHIFTKEYS+NUMLOCK, RF(5), RF(6), BF(15), BF(14),
3037c478bd9Sstevel@tonic-gate /*  88 */	BF(11), RF(13), STRING+DOWNARROW, RF(15),
3047c478bd9Sstevel@tonic-gate 		STRING+LEFTARROW, RF(11), STRING+RIGHTARROW, RF(7),
3057c478bd9Sstevel@tonic-gate /*  96 */	STRING+UPARROW, RF(9), BF(8), BF(10), HOLE, COMPOSE,
3067c478bd9Sstevel@tonic-gate 		BF(13), HOLE,
3077c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3087c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, LF(7), LF(16), LF(3), LF(5),
3097c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, LF(2), LF(4), LF(10), LF(6),
3107c478bd9Sstevel@tonic-gate 		LF(8), LF(9), RF(4),
3117c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3127c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3137c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3147c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, '\r', HOLE,
3157c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3167c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3177c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3187c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3197c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3207c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3217c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3227c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3237c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
3247c478bd9Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
3257c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
3267c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3277c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3287c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3297c478bd9Sstevel@tonic-gate 
3307c478bd9Sstevel@tonic-gate 
3317c478bd9Sstevel@tonic-gate };
3327c478bd9Sstevel@tonic-gate 
3337c478bd9Sstevel@tonic-gate /* "Key Up" keyboard table for USB keyboard */
3347c478bd9Sstevel@tonic-gate 
3357c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb_up[KEYMAP_SIZE_USB] = {
3367c478bd9Sstevel@tonic-gate 
3377c478bd9Sstevel@tonic-gate /*   0 */	HOLE, HOLE, HOLE, NOP, NOP, NOP, NOP, NOP,
3387c478bd9Sstevel@tonic-gate /*   8 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3397c478bd9Sstevel@tonic-gate /*  16 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3407c478bd9Sstevel@tonic-gate /*  24 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3417c478bd9Sstevel@tonic-gate /*  32 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3427c478bd9Sstevel@tonic-gate /*  40 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3437c478bd9Sstevel@tonic-gate /*  48  */	NOP, NOP, HOLE, NOP, NOP, NOP, NOP, NOP,
3447c478bd9Sstevel@tonic-gate /*  56 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3457c478bd9Sstevel@tonic-gate /*  64 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3467c478bd9Sstevel@tonic-gate /*  72 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3477c478bd9Sstevel@tonic-gate /*  80 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3487c478bd9Sstevel@tonic-gate /*  88 */	NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3497c478bd9Sstevel@tonic-gate /*  96 */	NOP, NOP, NOP, NOP, HOLE, NOP, NOP, HOLE,
3507c478bd9Sstevel@tonic-gate /* 104 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3517c478bd9Sstevel@tonic-gate /* 112 */	HOLE, HOLE, HOLE, HOLE, NOP, NOP, NOP, NOP,
3527c478bd9Sstevel@tonic-gate /* 120 */	BUCKYBITS+SYSTEMBIT, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
3537c478bd9Sstevel@tonic-gate /* 128 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3547c478bd9Sstevel@tonic-gate /* 136 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3557c478bd9Sstevel@tonic-gate /* 144 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3567c478bd9Sstevel@tonic-gate /* 152 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, NOP, HOLE,
3577c478bd9Sstevel@tonic-gate /* 160 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3587c478bd9Sstevel@tonic-gate /* 168 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3597c478bd9Sstevel@tonic-gate /* 176 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3607c478bd9Sstevel@tonic-gate /* 184 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3617c478bd9Sstevel@tonic-gate /* 192 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3627c478bd9Sstevel@tonic-gate /* 200 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3637c478bd9Sstevel@tonic-gate /* 208 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3647c478bd9Sstevel@tonic-gate /* 216 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3657c478bd9Sstevel@tonic-gate /* 224 */	SHIFTKEYS+LEFTCTRL, SHIFTKEYS+LEFTSHIFT, SHIFTKEYS+ALT,
3667c478bd9Sstevel@tonic-gate 		BUCKYBITS+METABIT, SHIFTKEYS+RIGHTCTRL, SHIFTKEYS+RIGHTSHIFT,
3677c478bd9Sstevel@tonic-gate 		SHIFTKEYS+ALTGRAPH, BUCKYBITS+METABIT,
3687c478bd9Sstevel@tonic-gate /* 232 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3697c478bd9Sstevel@tonic-gate /* 240 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3707c478bd9Sstevel@tonic-gate /* 248 */	HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
3717c478bd9Sstevel@tonic-gate 	};
3727c478bd9Sstevel@tonic-gate 
3737c478bd9Sstevel@tonic-gate 
3747c478bd9Sstevel@tonic-gate /*
3757c478bd9Sstevel@tonic-gate  * Index into keytab_pc_lc based on USB scancodes
3767c478bd9Sstevel@tonic-gate  */
3777c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_usb2pc[KEYMAP_SIZE_USB] = {
3787c478bd9Sstevel@tonic-gate /*   0 */	0,	0,	0,	0,	31,	50,	48,	33,
3797c478bd9Sstevel@tonic-gate /*   8 */	19,	34,	35,	36,	24,	37,	38,	39,
3807c478bd9Sstevel@tonic-gate /*  16 */	52,	51,	25,	26,	17,	20,	32,	21,
3817c478bd9Sstevel@tonic-gate /*  24 */	23,	49,	18,	47,	22,	46,	2,	3,
3827c478bd9Sstevel@tonic-gate /*  32 */	4,	5,	6,	7,	8,	9,	10,	11,
3837c478bd9Sstevel@tonic-gate /*  40 */	43,	110,	15,	16,	61,	12,	13,	27,
3847c478bd9Sstevel@tonic-gate /*  48 */	28,	29,	0,	40,	41,	1,	53,	54,
3857c478bd9Sstevel@tonic-gate /*  56 */	55,	30,	112,	113,	114,	115,	116,	117,
3867c478bd9Sstevel@tonic-gate /*  64 */	118,	119,	120,	121,	122,	123,	124,	125,
3877c478bd9Sstevel@tonic-gate /*  72 */	126,	75,	80,	85,	76,	81,	86,	89,
3887c478bd9Sstevel@tonic-gate /*  80 */	79,	84,	83,	90,	95,	100,	105,	106,
3897c478bd9Sstevel@tonic-gate /*  88 */	108,	93,	98,	103,	92,	97,	102,	91,
3907c478bd9Sstevel@tonic-gate /*  96 */	96,	101,	99,	104,	0,	0,	0,	0,
3917c478bd9Sstevel@tonic-gate /* 104 */	0,	0,	0,	0,	0,	0,	0,	0,
3927c478bd9Sstevel@tonic-gate /* 112 */	0,	0,	0,	0,	0,	0,	0,	0,
3937c478bd9Sstevel@tonic-gate /* 120 */	0,	0,	0,	0,	0,	0,	0,	0,
3947c478bd9Sstevel@tonic-gate /* 128 */	0,	0,	0,	0,	0,	0,	0,	0,
3957c478bd9Sstevel@tonic-gate /* 136 */	0,	0,	0,	0,	0,	0,	0,	0,
3967c478bd9Sstevel@tonic-gate /* 144 */	0,	0,	0,	0,	0,	0,	0,	0,
3977c478bd9Sstevel@tonic-gate /* 152 */	0,	0,	0,	0,	0,	0,	0,	0,
3987c478bd9Sstevel@tonic-gate /* 160 */	0,	0,	0,	0,	0,	0,	0,	0,
3997c478bd9Sstevel@tonic-gate /* 168 */	0,	0,	0,	0,	0,	0,	0,	0,
4007c478bd9Sstevel@tonic-gate /* 176 */	0,	0,	0,	0,	0,	0,	0,	0,
4017c478bd9Sstevel@tonic-gate /* 184 */	0,	0,	0,	0,	0,	0,	0,	0,
4027c478bd9Sstevel@tonic-gate /* 192 */	0,	0,	0,	0,	0,	0,	0,	0,
4037c478bd9Sstevel@tonic-gate /* 200 */	0,	0,	0,	0,	0,	0,	0,	0,
4047c478bd9Sstevel@tonic-gate /* 208 */	0,	0,	0,	0,	0,	0,	0,	0,
4057c478bd9Sstevel@tonic-gate /* 216 */	0,	0,	0,	0,	0,	0,	0,	0,
4067c478bd9Sstevel@tonic-gate /* 224 */	58,	44,	60,	0,	64,	57,	62,	0,
4077c478bd9Sstevel@tonic-gate /* 232 */	0,	0,	0,	0,	0,	0,	0,	0,
4087c478bd9Sstevel@tonic-gate /* 240 */	0,	0,	0,	0,	0,	0,	0,	0,
4097c478bd9Sstevel@tonic-gate /* 248 */	0,	0,	0,	0,	0,	0,	0
4107c478bd9Sstevel@tonic-gate };
4117c478bd9Sstevel@tonic-gate 
4127c478bd9Sstevel@tonic-gate /* Index to keymaps for USB keyboard */
4137c478bd9Sstevel@tonic-gate static struct keyboard kbtrans_usb_keyindex = {
4147c478bd9Sstevel@tonic-gate 	KEYMAP_SIZE_USB,
4157c478bd9Sstevel@tonic-gate 	keytab_usb_lc,
4167c478bd9Sstevel@tonic-gate 	keytab_usb_uc,
4177c478bd9Sstevel@tonic-gate 	keytab_usb_cl,
4187c478bd9Sstevel@tonic-gate 	keytab_usb_ag,
4197c478bd9Sstevel@tonic-gate 	keytab_usb_nl,
4207c478bd9Sstevel@tonic-gate 	keytab_usb_ct,
4217c478bd9Sstevel@tonic-gate 	keytab_usb_up,
4227c478bd9Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
4237c478bd9Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
4247c478bd9Sstevel@tonic-gate 	120,
4257c478bd9Sstevel@tonic-gate #if defined(__sparc)
4267c478bd9Sstevel@tonic-gate 	0,		/* no alternate abort key F1 on sparc */
4277c478bd9Sstevel@tonic-gate #else
4287c478bd9Sstevel@tonic-gate 	58,		/* alternate abort key F1 */
4297c478bd9Sstevel@tonic-gate #endif
4307c478bd9Sstevel@tonic-gate 	4,
4317c478bd9Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
4327c478bd9Sstevel@tonic-gate 	NULL,		/* Exception table */
433*e4603304Sqz150045 	225,		/* new abort key Left Shift */
434*e4603304Sqz150045 	229,		/* alternate new abort key Right Shift */
435*e4603304Sqz150045 	72,		/* new abort key Pause */
4367c478bd9Sstevel@tonic-gate };
4377c478bd9Sstevel@tonic-gate 
4387c478bd9Sstevel@tonic-gate struct keyboard *
kbtrans_usbkb_maptab_init(void)4397c478bd9Sstevel@tonic-gate kbtrans_usbkb_maptab_init(void)
4407c478bd9Sstevel@tonic-gate {
4417c478bd9Sstevel@tonic-gate 	struct keyboard *pkbd;
4427c478bd9Sstevel@tonic-gate 
4437c478bd9Sstevel@tonic-gate 	pkbd = (struct keyboard *)
4447c478bd9Sstevel@tonic-gate 	    kmem_alloc(sizeof (struct keyboard), KM_SLEEP);
4457c478bd9Sstevel@tonic-gate 
4467c478bd9Sstevel@tonic-gate 	bcopy(&kbtrans_usb_keyindex, pkbd, sizeof (*pkbd));
4477c478bd9Sstevel@tonic-gate 
4487c478bd9Sstevel@tonic-gate 	return (pkbd);
4497c478bd9Sstevel@tonic-gate }
4507c478bd9Sstevel@tonic-gate 
4517c478bd9Sstevel@tonic-gate void
kbtrans_usbkb_maptab_fini(struct keyboard ** ppkbd)4527c478bd9Sstevel@tonic-gate kbtrans_usbkb_maptab_fini(struct keyboard **ppkbd)
4537c478bd9Sstevel@tonic-gate {
4547c478bd9Sstevel@tonic-gate 	kmem_free(*ppkbd, sizeof (struct keyboard));
4557c478bd9Sstevel@tonic-gate 	*ppkbd = NULL;
4567c478bd9Sstevel@tonic-gate }
4577c478bd9Sstevel@tonic-gate 
4587c478bd9Sstevel@tonic-gate /*
4597c478bd9Sstevel@tonic-gate  * Translate USB scancodes to PC scancodes before sending it to 'kbtrans'
4607c478bd9Sstevel@tonic-gate  */
4617c478bd9Sstevel@tonic-gate keymap_entry_t
kbtrans_keycode_usb2pc(int key)4627c478bd9Sstevel@tonic-gate kbtrans_keycode_usb2pc(int key)
4637c478bd9Sstevel@tonic-gate {
4647c478bd9Sstevel@tonic-gate 	ASSERT(key >= 0 && key <= 255);
4657c478bd9Sstevel@tonic-gate 	return (keytab_usb2pc[key]);
4667c478bd9Sstevel@tonic-gate }
467