xref: /onnv-gate/usr/src/uts/common/io/kb8042/kb8042_keytables.c (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate  * Copyright (c) 1999 by Sun Microsystems, Inc.
24*0Sstevel@tonic-gate  * All rights reserved.
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 PS/2 style keyboards.
31*0Sstevel@tonic-gate  */
32*0Sstevel@tonic-gate #define	KEYMAP_SIZE_VARIABLE
33*0Sstevel@tonic-gate 
34*0Sstevel@tonic-gate #include <sys/param.h>
35*0Sstevel@tonic-gate #include <sys/kbd.h>
36*0Sstevel@tonic-gate 
37*0Sstevel@tonic-gate /* handy way to define control characters in the tables */
38*0Sstevel@tonic-gate #define	c(ch)	(ch&0x1F)
39*0Sstevel@tonic-gate #define	ESC 0x1B
40*0Sstevel@tonic-gate #define	DEL 0x7F
41*0Sstevel@tonic-gate 
42*0Sstevel@tonic-gate #define	KEYMAP_SIZE_PC	160
43*0Sstevel@tonic-gate 
44*0Sstevel@tonic-gate /* ***************************** */
45*0Sstevel@tonic-gate /*  PC-101 keyboard definitions  */
46*0Sstevel@tonic-gate /* ***************************** */
47*0Sstevel@tonic-gate /* Unshifted keyboard table for PC keyboard */
48*0Sstevel@tonic-gate 
49*0Sstevel@tonic-gate /* BEGIN CSTYLED */
50*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_lc[KEYMAP_SIZE_PC] = {
51*0Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
52*0Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
53*0Sstevel@tonic-gate /* 16 */	'\t',	'q',	'w',	'e',	'r',	't',	'y',	'u',
54*0Sstevel@tonic-gate /* 24 */	'i',	'o', 	'p', 	'[',	']',	'\\',
55*0Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
56*0Sstevel@tonic-gate 									'a',
57*0Sstevel@tonic-gate /* 32 */	's',	'd',	'f',	'g',	'h',	'j',	'k',	'l',
58*0Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
59*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
60*0Sstevel@tonic-gate 							HOLE,	'z',	'x',
61*0Sstevel@tonic-gate /* 48 */	'c',	'v',	'b',	'n',	'm',	',',	'.',	'/',
62*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
63*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
64*0Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
65*0Sstevel@tonic-gate 							' ',	SHIFTKEYS+
66*0Sstevel@tonic-gate 								RIGHTALT,
67*0Sstevel@tonic-gate 									HOLE,
68*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
69*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
70*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,
71*0Sstevel@tonic-gate 							NOP,	HOLE,
72*0Sstevel@tonic-gate 							    STRING+LEFTARROW,
73*0Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
74*0Sstevel@tonic-gate 				    STRING+UPARROW,
75*0Sstevel@tonic-gate 					    STRING+DOWNARROW,
76*0Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
77*0Sstevel@tonic-gate /* 88 */	HOLE,
78*0Sstevel@tonic-gate 		STRING+RIGHTARROW,
79*0Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
80*0Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
81*0Sstevel@tonic-gate 							RF(13),	HOLE,
82*0Sstevel@tonic-gate 								PADSLASH,
83*0Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
84*0Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
85*0Sstevel@tonic-gate 					BF(8),	PADSTAR,
86*0Sstevel@tonic-gate 							RF(9),
87*0Sstevel@tonic-gate 							  STRING+RIGHTARROW,
88*0Sstevel@tonic-gate 									RF(15),
89*0Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
90*0Sstevel@tonic-gate 				PADPLUS,
91*0Sstevel@tonic-gate 					HOLE,	PADENTER,
92*0Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
93*0Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
94*0Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
95*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
96*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
97*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
98*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
99*0Sstevel@tonic-gate /*160 */
100*0Sstevel@tonic-gate };
101*0Sstevel@tonic-gate 
102*0Sstevel@tonic-gate /* Shifted keyboard table for PC keyboard */
103*0Sstevel@tonic-gate 
104*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_uc[KEYMAP_SIZE_PC] = {
105*0Sstevel@tonic-gate /*  0 */	HOLE,	'~',	'!',	'@',	'#',	'$',	'%',	'^',
106*0Sstevel@tonic-gate /*  8 */	'&', 	'*',	'(',	')',	'_',	'+',	HOLE,	'\b',
107*0Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
108*0Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'{',	'}',	'|',
109*0Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
110*0Sstevel@tonic-gate 									'A',
111*0Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
112*0Sstevel@tonic-gate /* 40 */	':',	'"',	'|',	'\r',
113*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
114*0Sstevel@tonic-gate 							HOLE,	'Z',	'X',
115*0Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	'<',	'>',	'?',
116*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
117*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
118*0Sstevel@tonic-gate 					HOLE,
119*0Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
120*0Sstevel@tonic-gate 							' ',	SHIFTKEYS+
121*0Sstevel@tonic-gate 								RIGHTALT,
122*0Sstevel@tonic-gate 									HOLE,
123*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
124*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
125*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
126*0Sstevel@tonic-gate 							    STRING+LEFTARROW,
127*0Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+UPARROW,
128*0Sstevel@tonic-gate 						STRING+DOWNARROW,
129*0Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
130*0Sstevel@tonic-gate /* 88 */	HOLE,
131*0Sstevel@tonic-gate 		STRING+RIGHTARROW,
132*0Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
133*0Sstevel@tonic-gate 					'7',	'4',	'1',	HOLE,	'/',
134*0Sstevel@tonic-gate /* 96 */	'8',	'5',	'2',	'0',	'*',	'9',	'6',	'3',
135*0Sstevel@tonic-gate /*104 */	'.',	'-',	'+',	HOLE,	'\n',	HOLE,	ESC,	HOLE,
136*0Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
137*0Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
138*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
139*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
140*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
141*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
142*0Sstevel@tonic-gate /*160 */
143*0Sstevel@tonic-gate };
144*0Sstevel@tonic-gate 
145*0Sstevel@tonic-gate /* Caps Locked keyboard table for PC keyboard */
146*0Sstevel@tonic-gate 
147*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_cl[KEYMAP_SIZE_PC] = {
148*0Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
149*0Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
150*0Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
151*0Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'[',	']',	'\\',
152*0Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
153*0Sstevel@tonic-gate 									'A',
154*0Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
155*0Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
156*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
157*0Sstevel@tonic-gate 							HOLE,	'Z',	'X',
158*0Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	',',	'.',	'/',
159*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
160*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
161*0Sstevel@tonic-gate 					HOLE,
162*0Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
163*0Sstevel@tonic-gate 							' ',	SHIFTKEYS+
164*0Sstevel@tonic-gate 								RIGHTALT,
165*0Sstevel@tonic-gate 									HOLE,
166*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
167*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
168*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
169*0Sstevel@tonic-gate 							    STRING+LEFTARROW,
170*0Sstevel@tonic-gate /* 80 */	RF(7),
171*0Sstevel@tonic-gate 			RF(13),	HOLE,
172*0Sstevel@tonic-gate 				    STRING+UPARROW,
173*0Sstevel@tonic-gate 					    STRING+DOWNARROW,
174*0Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
175*0Sstevel@tonic-gate /* 88 */	HOLE,
176*0Sstevel@tonic-gate 		STRING+RIGHTARROW,
177*0Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
178*0Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
179*0Sstevel@tonic-gate 							RF(13),	HOLE, PADSLASH,
180*0Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
181*0Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
182*0Sstevel@tonic-gate 					BF(8),	PADSTAR,
183*0Sstevel@tonic-gate 							RF(9),
184*0Sstevel@tonic-gate 							   STRING+RIGHTARROW,
185*0Sstevel@tonic-gate 									RF(15),
186*0Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
187*0Sstevel@tonic-gate 				PADPLUS,
188*0Sstevel@tonic-gate 					HOLE,	PADENTER,
189*0Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
190*0Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
191*0Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
192*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
193*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
194*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
195*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
196*0Sstevel@tonic-gate /*160 */
197*0Sstevel@tonic-gate };
198*0Sstevel@tonic-gate 
199*0Sstevel@tonic-gate /* Alt Graph keyboard table for PC keyboard */
200*0Sstevel@tonic-gate 
201*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_ag[KEYMAP_SIZE_PC] = {
202*0Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
203*0Sstevel@tonic-gate /*  8 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
204*0Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
205*0Sstevel@tonic-gate /* 24 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
206*0Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
207*0Sstevel@tonic-gate 									NOP,
208*0Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
209*0Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
210*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
211*0Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
212*0Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
213*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
214*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
215*0Sstevel@tonic-gate 					HOLE,
216*0Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
217*0Sstevel@tonic-gate 							' ',	SHIFTKEYS+
218*0Sstevel@tonic-gate 								RIGHTALT,
219*0Sstevel@tonic-gate 									HOLE,
220*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
221*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
222*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
223*0Sstevel@tonic-gate 									STRING+
224*0Sstevel@tonic-gate 								     LEFTARROW,
225*0Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+
226*0Sstevel@tonic-gate 					UPARROW,STRING+
227*0Sstevel@tonic-gate 					      DOWNARROW,RF(9),	RF(15),	HOLE,
228*0Sstevel@tonic-gate /* 88 */	HOLE,	STRING+
229*0Sstevel@tonic-gate 		    RIGHTARROW,
230*0Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK,
231*0Sstevel@tonic-gate 					NOP,	NOP,	NOP,	HOLE,	NOP,
232*0Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
233*0Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	ESC,	HOLE,
234*0Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
235*0Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
236*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
237*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
238*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
239*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
240*0Sstevel@tonic-gate /*160 */
241*0Sstevel@tonic-gate };
242*0Sstevel@tonic-gate 
243*0Sstevel@tonic-gate /* Num Locked keyboard table for PC keyboard */
244*0Sstevel@tonic-gate 
245*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_nl[KEYMAP_SIZE_PC] = {
246*0Sstevel@tonic-gate /*  0 */	HOLE,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
247*0Sstevel@tonic-gate /*  8 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,
248*0Sstevel@tonic-gate /* 16 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
249*0Sstevel@tonic-gate /* 24 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
250*0Sstevel@tonic-gate /* 32 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
251*0Sstevel@tonic-gate /* 40 */	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,
252*0Sstevel@tonic-gate /* 48 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
253*0Sstevel@tonic-gate /* 56 */	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	HOLE,
254*0Sstevel@tonic-gate /* 64 */	NONL,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
255*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NONL,	NONL,	NONL,	HOLE,	NONL,
256*0Sstevel@tonic-gate /* 80 */	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	NONL,	HOLE,
257*0Sstevel@tonic-gate /* 88 */	HOLE,	NONL,	NONL,	PAD7,	PAD4,	PAD1,	HOLE,	NONL,
258*0Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	NONL,	PAD9,	PAD6,	PAD3,
259*0Sstevel@tonic-gate /*104 */	PADDOT,	NONL,	NONL,	HOLE,	NONL,	HOLE,	NONL,	HOLE,
260*0Sstevel@tonic-gate /*112 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
261*0Sstevel@tonic-gate /*120 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,
262*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
263*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
264*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
265*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
266*0Sstevel@tonic-gate /*160 */
267*0Sstevel@tonic-gate };
268*0Sstevel@tonic-gate 
269*0Sstevel@tonic-gate /* Controlled keyboard table for PC keyboard */
270*0Sstevel@tonic-gate 
271*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_ct[KEYMAP_SIZE_PC] = {
272*0Sstevel@tonic-gate /*  0 */	HOLE,	c('^'),	'1',	c('@'),	'3',	'4',	'5',	c('^'),
273*0Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	c('_'),	'=',	HOLE,	'\b',
274*0Sstevel@tonic-gate /* 16 */	'\t',	c('q'),	c('w'),	c('e'),	c('r'),	c('t'),	c('y'),	c('u'),
275*0Sstevel@tonic-gate /* 24 */	c('i'),	c('o'), c('p'), c('['),	c(']'),	c('\\'),
276*0Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
277*0Sstevel@tonic-gate 									c('a'),
278*0Sstevel@tonic-gate /* 32 */	c('s'),	c('d'),	c('f'),	c('g'),	c('h'),	c('j'),	c('k'),	c('l'),
279*0Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
280*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
281*0Sstevel@tonic-gate 							HOLE,	c('z'),	c('x'),
282*0Sstevel@tonic-gate /* 48 */	c('c'),	c('v'),	c('b'),	c('n'),	c('m'),	',',	'.',	c('_'),
283*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
284*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
285*0Sstevel@tonic-gate 					HOLE,
286*0Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
287*0Sstevel@tonic-gate 							' ',	SHIFTKEYS+
288*0Sstevel@tonic-gate 								RIGHTALT,
289*0Sstevel@tonic-gate 									HOLE,
290*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
291*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
292*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
293*0Sstevel@tonic-gate 							    STRING+LEFTARROW,
294*0Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
295*0Sstevel@tonic-gate 				    STRING+UPARROW,
296*0Sstevel@tonic-gate 					    STRING+DOWNARROW,
297*0Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
298*0Sstevel@tonic-gate /* 88 */	HOLE,
299*0Sstevel@tonic-gate 		STRING+RIGHTARROW,
300*0Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
301*0Sstevel@tonic-gate 					PAD7,	PAD4,	PAD1,	HOLE,
302*0Sstevel@tonic-gate 								PADSLASH,
303*0Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	PADSTAR,
304*0Sstevel@tonic-gate 							PAD9,	PAD6,	PAD3,
305*0Sstevel@tonic-gate /*104 */	PADDOT,	PADMINUS,
306*0Sstevel@tonic-gate 				PADPLUS,
307*0Sstevel@tonic-gate 					HOLE,	PADENTER,
308*0Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
309*0Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
310*0Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
311*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
312*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
313*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
314*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
315*0Sstevel@tonic-gate /*160 */
316*0Sstevel@tonic-gate };
317*0Sstevel@tonic-gate 
318*0Sstevel@tonic-gate /* "Key Up" keyboard table for PC keyboard */
319*0Sstevel@tonic-gate 
320*0Sstevel@tonic-gate 
321*0Sstevel@tonic-gate static keymap_entry_t keytab_pc_up[KEYMAP_SIZE_PC] = {
322*0Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
323*0Sstevel@tonic-gate /*  8 */	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
324*0Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
325*0Sstevel@tonic-gate /* 24 */	NOP,	NOP, 	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,
326*0Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
327*0Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
328*0Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
329*0Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
330*0Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
331*0Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
332*0Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
333*0Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
334*0Sstevel@tonic-gate 							NOP,	SHIFTKEYS+
335*0Sstevel@tonic-gate 								RIGHTALT,
336*0Sstevel@tonic-gate 									HOLE,
337*0Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
338*0Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
339*0Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NOP,	NOP,	NOP,	HOLE,	NOP,
340*0Sstevel@tonic-gate /* 80 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	NOP,	HOLE,
341*0Sstevel@tonic-gate /* 88 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
342*0Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
343*0Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	NOP,	HOLE,
344*0Sstevel@tonic-gate /*112 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
345*0Sstevel@tonic-gate /*120 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,
346*0Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
347*0Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
348*0Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
349*0Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
350*0Sstevel@tonic-gate /*160 */
351*0Sstevel@tonic-gate };
352*0Sstevel@tonic-gate 
353*0Sstevel@tonic-gate /* END CSTYLED */
354*0Sstevel@tonic-gate 
355*0Sstevel@tonic-gate #define	M(x)	(1 << (x))
356*0Sstevel@tonic-gate #define	MASK_ALL	(M(LEFTSHIFT) |	\
357*0Sstevel@tonic-gate 			M(RIGHTSHIFT) |	\
358*0Sstevel@tonic-gate 			CTRLMASK |	\
359*0Sstevel@tonic-gate 			ALTMASK |	\
360*0Sstevel@tonic-gate 			ALTGRAPHMASK)
361*0Sstevel@tonic-gate 
362*0Sstevel@tonic-gate /*
363*0Sstevel@tonic-gate  * Make Ctrl+Shift+F1 be Compose.  This is SOOOO hokey.
364*0Sstevel@tonic-gate  */
365*0Sstevel@tonic-gate static struct exception_map exceptions_pc[] = {
366*0Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(LEFTCTRL),   112, COMPOSE, },
367*0Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(RIGHTCTRL),  112, COMPOSE, },
368*0Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(LEFTCTRL),  112, COMPOSE, },
369*0Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(RIGHTCTRL), 112, COMPOSE, },
370*0Sstevel@tonic-gate 	{ 0, },
371*0Sstevel@tonic-gate };
372*0Sstevel@tonic-gate 
373*0Sstevel@tonic-gate /* Index to keymaps for PC keyboard */
374*0Sstevel@tonic-gate struct keyboard keyindex_pc = {
375*0Sstevel@tonic-gate 	KEYMAP_SIZE_PC,
376*0Sstevel@tonic-gate 	keytab_pc_lc,
377*0Sstevel@tonic-gate 	keytab_pc_uc,
378*0Sstevel@tonic-gate 	keytab_pc_cl,
379*0Sstevel@tonic-gate 	keytab_pc_ag,
380*0Sstevel@tonic-gate 	keytab_pc_nl,
381*0Sstevel@tonic-gate 	keytab_pc_ct,
382*0Sstevel@tonic-gate 	keytab_pc_up,
383*0Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
384*0Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
385*0Sstevel@tonic-gate 	112, 0,	31,	/* abort keys: F1+A */
386*0Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
387*0Sstevel@tonic-gate 	exceptions_pc,	/* Exceptions */
388*0Sstevel@tonic-gate };
389