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