xref: /onnv-gate/usr/src/uts/common/io/kb8042/kb8042_keytables.c (revision 3505:280762f431b6)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*3505Sqz150045  * Common Development and Distribution License (the "License").
6*3505Sqz150045  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
22*3505Sqz150045  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23*3505Sqz150045  * Use is subject to license terms.
240Sstevel@tonic-gate  */
250Sstevel@tonic-gate 
260Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
270Sstevel@tonic-gate 
280Sstevel@tonic-gate /*
290Sstevel@tonic-gate  * This module contains the translation tables for PS/2 style keyboards.
300Sstevel@tonic-gate  */
310Sstevel@tonic-gate #define	KEYMAP_SIZE_VARIABLE
320Sstevel@tonic-gate 
330Sstevel@tonic-gate #include <sys/param.h>
340Sstevel@tonic-gate #include <sys/kbd.h>
350Sstevel@tonic-gate 
360Sstevel@tonic-gate /* handy way to define control characters in the tables */
370Sstevel@tonic-gate #define	c(ch)	(ch&0x1F)
380Sstevel@tonic-gate #define	ESC 0x1B
390Sstevel@tonic-gate #define	DEL 0x7F
400Sstevel@tonic-gate 
410Sstevel@tonic-gate #define	KEYMAP_SIZE_PC	160
420Sstevel@tonic-gate 
430Sstevel@tonic-gate /* ***************************** */
440Sstevel@tonic-gate /*  PC-101 keyboard definitions  */
450Sstevel@tonic-gate /* ***************************** */
460Sstevel@tonic-gate /* Unshifted keyboard table for PC keyboard */
470Sstevel@tonic-gate 
480Sstevel@tonic-gate /* BEGIN CSTYLED */
490Sstevel@tonic-gate static keymap_entry_t keytab_pc_lc[KEYMAP_SIZE_PC] = {
500Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
510Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
520Sstevel@tonic-gate /* 16 */	'\t',	'q',	'w',	'e',	'r',	't',	'y',	'u',
530Sstevel@tonic-gate /* 24 */	'i',	'o', 	'p', 	'[',	']',	'\\',
540Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
550Sstevel@tonic-gate 									'a',
560Sstevel@tonic-gate /* 32 */	's',	'd',	'f',	'g',	'h',	'j',	'k',	'l',
570Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
580Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
590Sstevel@tonic-gate 							HOLE,	'z',	'x',
600Sstevel@tonic-gate /* 48 */	'c',	'v',	'b',	'n',	'm',	',',	'.',	'/',
610Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
620Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
630Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
640Sstevel@tonic-gate 							' ',	SHIFTKEYS+
650Sstevel@tonic-gate 								RIGHTALT,
660Sstevel@tonic-gate 									HOLE,
670Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
680Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
690Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,
700Sstevel@tonic-gate 							NOP,	HOLE,
710Sstevel@tonic-gate 							    STRING+LEFTARROW,
720Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
730Sstevel@tonic-gate 				    STRING+UPARROW,
740Sstevel@tonic-gate 					    STRING+DOWNARROW,
750Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
760Sstevel@tonic-gate /* 88 */	HOLE,
770Sstevel@tonic-gate 		STRING+RIGHTARROW,
780Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
790Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
800Sstevel@tonic-gate 							RF(13),	HOLE,
810Sstevel@tonic-gate 								PADSLASH,
820Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
830Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
840Sstevel@tonic-gate 					BF(8),	PADSTAR,
850Sstevel@tonic-gate 							RF(9),
860Sstevel@tonic-gate 							  STRING+RIGHTARROW,
870Sstevel@tonic-gate 									RF(15),
880Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
890Sstevel@tonic-gate 				PADPLUS,
900Sstevel@tonic-gate 					HOLE,	PADENTER,
910Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
920Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
930Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
940Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
950Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
960Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
970Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
980Sstevel@tonic-gate /*160 */
990Sstevel@tonic-gate };
1000Sstevel@tonic-gate 
1010Sstevel@tonic-gate /* Shifted keyboard table for PC keyboard */
1020Sstevel@tonic-gate 
1030Sstevel@tonic-gate static keymap_entry_t keytab_pc_uc[KEYMAP_SIZE_PC] = {
1040Sstevel@tonic-gate /*  0 */	HOLE,	'~',	'!',	'@',	'#',	'$',	'%',	'^',
1050Sstevel@tonic-gate /*  8 */	'&', 	'*',	'(',	')',	'_',	'+',	HOLE,	'\b',
1060Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
1070Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'{',	'}',	'|',
1080Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
1090Sstevel@tonic-gate 									'A',
1100Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
1110Sstevel@tonic-gate /* 40 */	':',	'"',	'|',	'\r',
1120Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
1130Sstevel@tonic-gate 							HOLE,	'Z',	'X',
1140Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	'<',	'>',	'?',
1150Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
1160Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
1170Sstevel@tonic-gate 					HOLE,
1180Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
1190Sstevel@tonic-gate 							' ',	SHIFTKEYS+
1200Sstevel@tonic-gate 								RIGHTALT,
1210Sstevel@tonic-gate 									HOLE,
1220Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
1230Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1240Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
1250Sstevel@tonic-gate 							    STRING+LEFTARROW,
1260Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+UPARROW,
1270Sstevel@tonic-gate 						STRING+DOWNARROW,
1280Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
1290Sstevel@tonic-gate /* 88 */	HOLE,
1300Sstevel@tonic-gate 		STRING+RIGHTARROW,
1310Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
1320Sstevel@tonic-gate 					'7',	'4',	'1',	HOLE,	'/',
1330Sstevel@tonic-gate /* 96 */	'8',	'5',	'2',	'0',	'*',	'9',	'6',	'3',
1340Sstevel@tonic-gate /*104 */	'.',	'-',	'+',	HOLE,	'\n',	HOLE,	ESC,	HOLE,
1350Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
1360Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
1370Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1380Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1390Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1400Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1410Sstevel@tonic-gate /*160 */
1420Sstevel@tonic-gate };
1430Sstevel@tonic-gate 
1440Sstevel@tonic-gate /* Caps Locked keyboard table for PC keyboard */
1450Sstevel@tonic-gate 
1460Sstevel@tonic-gate static keymap_entry_t keytab_pc_cl[KEYMAP_SIZE_PC] = {
1470Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
1480Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
1490Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
1500Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'[',	']',	'\\',
1510Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
1520Sstevel@tonic-gate 									'A',
1530Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
1540Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
1550Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
1560Sstevel@tonic-gate 							HOLE,	'Z',	'X',
1570Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	',',	'.',	'/',
1580Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
1590Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
1600Sstevel@tonic-gate 					HOLE,
1610Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
1620Sstevel@tonic-gate 							' ',	SHIFTKEYS+
1630Sstevel@tonic-gate 								RIGHTALT,
1640Sstevel@tonic-gate 									HOLE,
1650Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
1660Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1670Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
1680Sstevel@tonic-gate 							    STRING+LEFTARROW,
1690Sstevel@tonic-gate /* 80 */	RF(7),
1700Sstevel@tonic-gate 			RF(13),	HOLE,
1710Sstevel@tonic-gate 				    STRING+UPARROW,
1720Sstevel@tonic-gate 					    STRING+DOWNARROW,
1730Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
1740Sstevel@tonic-gate /* 88 */	HOLE,
1750Sstevel@tonic-gate 		STRING+RIGHTARROW,
1760Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
1770Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
1780Sstevel@tonic-gate 							RF(13),	HOLE, PADSLASH,
1790Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
1800Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
1810Sstevel@tonic-gate 					BF(8),	PADSTAR,
1820Sstevel@tonic-gate 							RF(9),
1830Sstevel@tonic-gate 							   STRING+RIGHTARROW,
1840Sstevel@tonic-gate 									RF(15),
1850Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
1860Sstevel@tonic-gate 				PADPLUS,
1870Sstevel@tonic-gate 					HOLE,	PADENTER,
1880Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
1890Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
1900Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
1910Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1920Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1930Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1940Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1950Sstevel@tonic-gate /*160 */
1960Sstevel@tonic-gate };
1970Sstevel@tonic-gate 
1980Sstevel@tonic-gate /* Alt Graph keyboard table for PC keyboard */
1990Sstevel@tonic-gate 
2000Sstevel@tonic-gate static keymap_entry_t keytab_pc_ag[KEYMAP_SIZE_PC] = {
2010Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2020Sstevel@tonic-gate /*  8 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
2030Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2040Sstevel@tonic-gate /* 24 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2050Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
2060Sstevel@tonic-gate 									NOP,
2070Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2080Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
2090Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2100Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
2110Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2120Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
2130Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
2140Sstevel@tonic-gate 					HOLE,
2150Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
2160Sstevel@tonic-gate 							' ',	SHIFTKEYS+
2170Sstevel@tonic-gate 								RIGHTALT,
2180Sstevel@tonic-gate 									HOLE,
2190Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
2200Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2210Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
2220Sstevel@tonic-gate 									STRING+
2230Sstevel@tonic-gate 								     LEFTARROW,
2240Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+
2250Sstevel@tonic-gate 					UPARROW,STRING+
2260Sstevel@tonic-gate 					      DOWNARROW,RF(9),	RF(15),	HOLE,
2270Sstevel@tonic-gate /* 88 */	HOLE,	STRING+
2280Sstevel@tonic-gate 		    RIGHTARROW,
2290Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK,
2300Sstevel@tonic-gate 					NOP,	NOP,	NOP,	HOLE,	NOP,
2310Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2320Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	ESC,	HOLE,
2330Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
2340Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
2350Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2360Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2370Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2380Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2390Sstevel@tonic-gate /*160 */
2400Sstevel@tonic-gate };
2410Sstevel@tonic-gate 
2420Sstevel@tonic-gate /* Num Locked keyboard table for PC keyboard */
2430Sstevel@tonic-gate 
2440Sstevel@tonic-gate static keymap_entry_t keytab_pc_nl[KEYMAP_SIZE_PC] = {
2450Sstevel@tonic-gate /*  0 */	HOLE,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2460Sstevel@tonic-gate /*  8 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,
2470Sstevel@tonic-gate /* 16 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2480Sstevel@tonic-gate /* 24 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2490Sstevel@tonic-gate /* 32 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2500Sstevel@tonic-gate /* 40 */	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,
2510Sstevel@tonic-gate /* 48 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2520Sstevel@tonic-gate /* 56 */	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	HOLE,
2530Sstevel@tonic-gate /* 64 */	NONL,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2540Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NONL,	NONL,	NONL,	HOLE,	NONL,
2550Sstevel@tonic-gate /* 80 */	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	NONL,	HOLE,
2560Sstevel@tonic-gate /* 88 */	HOLE,	NONL,	NONL,	PAD7,	PAD4,	PAD1,	HOLE,	NONL,
2570Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	NONL,	PAD9,	PAD6,	PAD3,
2580Sstevel@tonic-gate /*104 */	PADDOT,	NONL,	NONL,	HOLE,	NONL,	HOLE,	NONL,	HOLE,
2590Sstevel@tonic-gate /*112 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2600Sstevel@tonic-gate /*120 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,
2610Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2620Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2630Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2640Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2650Sstevel@tonic-gate /*160 */
2660Sstevel@tonic-gate };
2670Sstevel@tonic-gate 
2680Sstevel@tonic-gate /* Controlled keyboard table for PC keyboard */
2690Sstevel@tonic-gate 
2700Sstevel@tonic-gate static keymap_entry_t keytab_pc_ct[KEYMAP_SIZE_PC] = {
2710Sstevel@tonic-gate /*  0 */	HOLE,	c('^'),	'1',	c('@'),	'3',	'4',	'5',	c('^'),
2720Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	c('_'),	'=',	HOLE,	'\b',
2730Sstevel@tonic-gate /* 16 */	'\t',	c('q'),	c('w'),	c('e'),	c('r'),	c('t'),	c('y'),	c('u'),
2740Sstevel@tonic-gate /* 24 */	c('i'),	c('o'), c('p'), c('['),	c(']'),	c('\\'),
2750Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
2760Sstevel@tonic-gate 									c('a'),
2770Sstevel@tonic-gate /* 32 */	c('s'),	c('d'),	c('f'),	c('g'),	c('h'),	c('j'),	c('k'),	c('l'),
2780Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
2790Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2800Sstevel@tonic-gate 							HOLE,	c('z'),	c('x'),
2810Sstevel@tonic-gate /* 48 */	c('c'),	c('v'),	c('b'),	c('n'),	c('m'),	',',	'.',	c('_'),
2820Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
2830Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
2840Sstevel@tonic-gate 					HOLE,
2850Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
2860Sstevel@tonic-gate 							' ',	SHIFTKEYS+
2870Sstevel@tonic-gate 								RIGHTALT,
2880Sstevel@tonic-gate 									HOLE,
2890Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
2900Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2910Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
2920Sstevel@tonic-gate 							    STRING+LEFTARROW,
2930Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
2940Sstevel@tonic-gate 				    STRING+UPARROW,
2950Sstevel@tonic-gate 					    STRING+DOWNARROW,
2960Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
2970Sstevel@tonic-gate /* 88 */	HOLE,
2980Sstevel@tonic-gate 		STRING+RIGHTARROW,
2990Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
3000Sstevel@tonic-gate 					PAD7,	PAD4,	PAD1,	HOLE,
3010Sstevel@tonic-gate 								PADSLASH,
3020Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	PADSTAR,
3030Sstevel@tonic-gate 							PAD9,	PAD6,	PAD3,
3040Sstevel@tonic-gate /*104 */	PADDOT,	PADMINUS,
3050Sstevel@tonic-gate 				PADPLUS,
3060Sstevel@tonic-gate 					HOLE,	PADENTER,
3070Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
3080Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
3090Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
3100Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3110Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3120Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3130Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3140Sstevel@tonic-gate /*160 */
3150Sstevel@tonic-gate };
3160Sstevel@tonic-gate 
3170Sstevel@tonic-gate /* "Key Up" keyboard table for PC keyboard */
3180Sstevel@tonic-gate 
3190Sstevel@tonic-gate 
3200Sstevel@tonic-gate static keymap_entry_t keytab_pc_up[KEYMAP_SIZE_PC] = {
3210Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3220Sstevel@tonic-gate /*  8 */	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
3230Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3240Sstevel@tonic-gate /* 24 */	NOP,	NOP, 	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,
3250Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3260Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
3270Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
3280Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
3290Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3300Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
3310Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
3320Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
3330Sstevel@tonic-gate 							NOP,	SHIFTKEYS+
3340Sstevel@tonic-gate 								RIGHTALT,
3350Sstevel@tonic-gate 									HOLE,
3360Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
3370Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3380Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NOP,	NOP,	NOP,	HOLE,	NOP,
3390Sstevel@tonic-gate /* 80 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	NOP,	HOLE,
3400Sstevel@tonic-gate /* 88 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
3410Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3420Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	NOP,	HOLE,
3430Sstevel@tonic-gate /*112 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3440Sstevel@tonic-gate /*120 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,
3450Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3460Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3470Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3480Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3490Sstevel@tonic-gate /*160 */
3500Sstevel@tonic-gate };
3510Sstevel@tonic-gate 
3520Sstevel@tonic-gate /* END CSTYLED */
3530Sstevel@tonic-gate 
3540Sstevel@tonic-gate #define	M(x)	(1 << (x))
3550Sstevel@tonic-gate #define	MASK_ALL	(M(LEFTSHIFT) |	\
3560Sstevel@tonic-gate 			M(RIGHTSHIFT) |	\
3570Sstevel@tonic-gate 			CTRLMASK |	\
3580Sstevel@tonic-gate 			ALTMASK |	\
3590Sstevel@tonic-gate 			ALTGRAPHMASK)
3600Sstevel@tonic-gate 
3610Sstevel@tonic-gate /*
3620Sstevel@tonic-gate  * Make Ctrl+Shift+F1 be Compose.  This is SOOOO hokey.
3630Sstevel@tonic-gate  */
3640Sstevel@tonic-gate static struct exception_map exceptions_pc[] = {
3650Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(LEFTCTRL),   112, COMPOSE, },
3660Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(RIGHTCTRL),  112, COMPOSE, },
3670Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(LEFTCTRL),  112, COMPOSE, },
3680Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(RIGHTCTRL), 112, COMPOSE, },
3690Sstevel@tonic-gate 	{ 0, },
3700Sstevel@tonic-gate };
3710Sstevel@tonic-gate 
3720Sstevel@tonic-gate /* Index to keymaps for PC keyboard */
3730Sstevel@tonic-gate struct keyboard keyindex_pc = {
3740Sstevel@tonic-gate 	KEYMAP_SIZE_PC,
3750Sstevel@tonic-gate 	keytab_pc_lc,
3760Sstevel@tonic-gate 	keytab_pc_uc,
3770Sstevel@tonic-gate 	keytab_pc_cl,
3780Sstevel@tonic-gate 	keytab_pc_ag,
3790Sstevel@tonic-gate 	keytab_pc_nl,
3800Sstevel@tonic-gate 	keytab_pc_ct,
3810Sstevel@tonic-gate 	keytab_pc_up,
3820Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
3830Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
3840Sstevel@tonic-gate 	112, 0,	31,	/* abort keys: F1+A */
3850Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
3860Sstevel@tonic-gate 	exceptions_pc,	/* Exceptions */
387*3505Sqz150045 	44, 57, 126,	/* new abort keys: Shift+Pause */
3880Sstevel@tonic-gate };
389