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