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*e4603304Sqz  * Common Development and Distribution License (the "License").
6*e4603304Sqz  * 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*e4603304Sqz  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23*e4603304Sqz  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate /*
277c478bd9Sstevel@tonic-gate  * This module contains the translation tables for PS/2 style keyboards.
287c478bd9Sstevel@tonic-gate  */
297c478bd9Sstevel@tonic-gate #define	KEYMAP_SIZE_VARIABLE
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #include <sys/param.h>
327c478bd9Sstevel@tonic-gate #include <sys/kbd.h>
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate /* handy way to define control characters in the tables */
357c478bd9Sstevel@tonic-gate #define	c(ch)	(ch&0x1F)
367c478bd9Sstevel@tonic-gate #define	ESC 0x1B
377c478bd9Sstevel@tonic-gate #define	DEL 0x7F
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate #define	KEYMAP_SIZE_PC	160
407c478bd9Sstevel@tonic-gate 
417c478bd9Sstevel@tonic-gate /* ***************************** */
427c478bd9Sstevel@tonic-gate /*  PC-101 keyboard definitions  */
437c478bd9Sstevel@tonic-gate /* ***************************** */
447c478bd9Sstevel@tonic-gate /* Unshifted keyboard table for PC keyboard */
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
477c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_lc[KEYMAP_SIZE_PC] = {
487c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
497c478bd9Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
507c478bd9Sstevel@tonic-gate /* 16 */	'\t',	'q',	'w',	'e',	'r',	't',	'y',	'u',
517c478bd9Sstevel@tonic-gate /* 24 */	'i',	'o', 	'p', 	'[',	']',	'\\',
527c478bd9Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
537c478bd9Sstevel@tonic-gate 									'a',
547c478bd9Sstevel@tonic-gate /* 32 */	's',	'd',	'f',	'g',	'h',	'j',	'k',	'l',
557c478bd9Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
567c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
577c478bd9Sstevel@tonic-gate 							HOLE,	'z',	'x',
587c478bd9Sstevel@tonic-gate /* 48 */	'c',	'v',	'b',	'n',	'm',	',',	'.',	'/',
597c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
607c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
617c478bd9Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
627c478bd9Sstevel@tonic-gate 							' ',	SHIFTKEYS+
637c478bd9Sstevel@tonic-gate 								RIGHTALT,
647c478bd9Sstevel@tonic-gate 									HOLE,
657c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
667c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
677c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,
687c478bd9Sstevel@tonic-gate 							NOP,	HOLE,
697c478bd9Sstevel@tonic-gate 							    STRING+LEFTARROW,
707c478bd9Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
717c478bd9Sstevel@tonic-gate 				    STRING+UPARROW,
727c478bd9Sstevel@tonic-gate 					    STRING+DOWNARROW,
737c478bd9Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
747c478bd9Sstevel@tonic-gate /* 88 */	HOLE,
757c478bd9Sstevel@tonic-gate 		STRING+RIGHTARROW,
767c478bd9Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
777c478bd9Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
787c478bd9Sstevel@tonic-gate 							RF(13),	HOLE,
797c478bd9Sstevel@tonic-gate 								PADSLASH,
807c478bd9Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
817c478bd9Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
827c478bd9Sstevel@tonic-gate 					BF(8),	PADSTAR,
837c478bd9Sstevel@tonic-gate 							RF(9),
847c478bd9Sstevel@tonic-gate 							  STRING+RIGHTARROW,
857c478bd9Sstevel@tonic-gate 									RF(15),
867c478bd9Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
877c478bd9Sstevel@tonic-gate 				PADPLUS,
887c478bd9Sstevel@tonic-gate 					HOLE,	PADENTER,
897c478bd9Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
907c478bd9Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
917c478bd9Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
927c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
937c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
947c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
957c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
967c478bd9Sstevel@tonic-gate /*160 */
977c478bd9Sstevel@tonic-gate };
987c478bd9Sstevel@tonic-gate 
997c478bd9Sstevel@tonic-gate /* Shifted keyboard table for PC keyboard */
1007c478bd9Sstevel@tonic-gate 
1017c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_uc[KEYMAP_SIZE_PC] = {
1027c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	'~',	'!',	'@',	'#',	'$',	'%',	'^',
1037c478bd9Sstevel@tonic-gate /*  8 */	'&', 	'*',	'(',	')',	'_',	'+',	HOLE,	'\b',
1047c478bd9Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
1057c478bd9Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'{',	'}',	'|',
1067c478bd9Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
1077c478bd9Sstevel@tonic-gate 									'A',
1087c478bd9Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
1097c478bd9Sstevel@tonic-gate /* 40 */	':',	'"',	'|',	'\r',
1107c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
1117c478bd9Sstevel@tonic-gate 							HOLE,	'Z',	'X',
1127c478bd9Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	'<',	'>',	'?',
1137c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
1147c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
1157c478bd9Sstevel@tonic-gate 					HOLE,
1167c478bd9Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
1177c478bd9Sstevel@tonic-gate 							' ',	SHIFTKEYS+
1187c478bd9Sstevel@tonic-gate 								RIGHTALT,
1197c478bd9Sstevel@tonic-gate 									HOLE,
1207c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
1217c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1227c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
1237c478bd9Sstevel@tonic-gate 							    STRING+LEFTARROW,
1247c478bd9Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+UPARROW,
1257c478bd9Sstevel@tonic-gate 						STRING+DOWNARROW,
1267c478bd9Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
1277c478bd9Sstevel@tonic-gate /* 88 */	HOLE,
1287c478bd9Sstevel@tonic-gate 		STRING+RIGHTARROW,
1297c478bd9Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
1307c478bd9Sstevel@tonic-gate 					'7',	'4',	'1',	HOLE,	'/',
1317c478bd9Sstevel@tonic-gate /* 96 */	'8',	'5',	'2',	'0',	'*',	'9',	'6',	'3',
1327c478bd9Sstevel@tonic-gate /*104 */	'.',	'-',	'+',	HOLE,	'\n',	HOLE,	ESC,	HOLE,
1337c478bd9Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
1347c478bd9Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
1357c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1367c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1377c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1387c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1397c478bd9Sstevel@tonic-gate /*160 */
1407c478bd9Sstevel@tonic-gate };
1417c478bd9Sstevel@tonic-gate 
1427c478bd9Sstevel@tonic-gate /* Caps Locked keyboard table for PC keyboard */
1437c478bd9Sstevel@tonic-gate 
1447c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_cl[KEYMAP_SIZE_PC] = {
1457c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	'`',	'1',	'2',	'3',	'4',	'5',	'6',
1467c478bd9Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	'-',	'=',	HOLE,	'\b',
1477c478bd9Sstevel@tonic-gate /* 16 */	'\t',	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',
1487c478bd9Sstevel@tonic-gate /* 24 */	'I',	'O', 	'P', 	'[',	']',	'\\',
1497c478bd9Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
1507c478bd9Sstevel@tonic-gate 									'A',
1517c478bd9Sstevel@tonic-gate /* 32 */	'S',	'D',	'F',	'G',	'H',	'J',	'K',	'L',
1527c478bd9Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
1537c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
1547c478bd9Sstevel@tonic-gate 							HOLE,	'Z',	'X',
1557c478bd9Sstevel@tonic-gate /* 48 */	'C',	'V',	'B',	'N',	'M',	',',	'.',	'/',
1567c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
1577c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
1587c478bd9Sstevel@tonic-gate 					HOLE,
1597c478bd9Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
1607c478bd9Sstevel@tonic-gate 							' ',	SHIFTKEYS+
1617c478bd9Sstevel@tonic-gate 								RIGHTALT,
1627c478bd9Sstevel@tonic-gate 									HOLE,
1637c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
1647c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1657c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
1667c478bd9Sstevel@tonic-gate 							    STRING+LEFTARROW,
1677c478bd9Sstevel@tonic-gate /* 80 */	RF(7),
1687c478bd9Sstevel@tonic-gate 			RF(13),	HOLE,
1697c478bd9Sstevel@tonic-gate 				    STRING+UPARROW,
1707c478bd9Sstevel@tonic-gate 					    STRING+DOWNARROW,
1717c478bd9Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
1727c478bd9Sstevel@tonic-gate /* 88 */	HOLE,
1737c478bd9Sstevel@tonic-gate 		STRING+RIGHTARROW,
1747c478bd9Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
1757c478bd9Sstevel@tonic-gate 					RF(7),	STRING+LEFTARROW,
1767c478bd9Sstevel@tonic-gate 							RF(13),	HOLE, PADSLASH,
1777c478bd9Sstevel@tonic-gate /* 96 */	STRING+UPARROW,
1787c478bd9Sstevel@tonic-gate 			RF(11),	STRING+DOWNARROW,
1797c478bd9Sstevel@tonic-gate 					BF(8),	PADSTAR,
1807c478bd9Sstevel@tonic-gate 							RF(9),
1817c478bd9Sstevel@tonic-gate 							   STRING+RIGHTARROW,
1827c478bd9Sstevel@tonic-gate 									RF(15),
1837c478bd9Sstevel@tonic-gate /*104 */	DEL,	PADMINUS,
1847c478bd9Sstevel@tonic-gate 				PADPLUS,
1857c478bd9Sstevel@tonic-gate 					HOLE,	PADENTER,
1867c478bd9Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
1877c478bd9Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
1887c478bd9Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
1897c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1907c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1917c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1927c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
1937c478bd9Sstevel@tonic-gate /*160 */
1947c478bd9Sstevel@tonic-gate };
1957c478bd9Sstevel@tonic-gate 
1967c478bd9Sstevel@tonic-gate /* Alt Graph keyboard table for PC keyboard */
1977c478bd9Sstevel@tonic-gate 
1987c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_ag[KEYMAP_SIZE_PC] = {
1997c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2007c478bd9Sstevel@tonic-gate /*  8 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
2017c478bd9Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2027c478bd9Sstevel@tonic-gate /* 24 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2037c478bd9Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
2047c478bd9Sstevel@tonic-gate 									NOP,
2057c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2067c478bd9Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
2077c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2087c478bd9Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
2097c478bd9Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2107c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
2117c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
2127c478bd9Sstevel@tonic-gate 					HOLE,
2137c478bd9Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
2147c478bd9Sstevel@tonic-gate 							' ',	SHIFTKEYS+
2157c478bd9Sstevel@tonic-gate 								RIGHTALT,
2167c478bd9Sstevel@tonic-gate 									HOLE,
2177c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
2187c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2197c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
2207c478bd9Sstevel@tonic-gate 									STRING+
2217c478bd9Sstevel@tonic-gate 								     LEFTARROW,
2227c478bd9Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,	STRING+
2237c478bd9Sstevel@tonic-gate 					UPARROW,STRING+
2247c478bd9Sstevel@tonic-gate 					      DOWNARROW,RF(9),	RF(15),	HOLE,
2257c478bd9Sstevel@tonic-gate /* 88 */	HOLE,	STRING+
2267c478bd9Sstevel@tonic-gate 		    RIGHTARROW,
2277c478bd9Sstevel@tonic-gate 			SHIFTKEYS+NUMLOCK,
2287c478bd9Sstevel@tonic-gate 					NOP,	NOP,	NOP,	HOLE,	NOP,
2297c478bd9Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
2307c478bd9Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	ESC,	HOLE,
2317c478bd9Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
2327c478bd9Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
2337c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2347c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2357c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2367c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2377c478bd9Sstevel@tonic-gate /*160 */
2387c478bd9Sstevel@tonic-gate };
2397c478bd9Sstevel@tonic-gate 
2407c478bd9Sstevel@tonic-gate /* Num Locked keyboard table for PC keyboard */
2417c478bd9Sstevel@tonic-gate 
2427c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_nl[KEYMAP_SIZE_PC] = {
2437c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2447c478bd9Sstevel@tonic-gate /*  8 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,
2457c478bd9Sstevel@tonic-gate /* 16 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2467c478bd9Sstevel@tonic-gate /* 24 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2477c478bd9Sstevel@tonic-gate /* 32 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2487c478bd9Sstevel@tonic-gate /* 40 */	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,
2497c478bd9Sstevel@tonic-gate /* 48 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2507c478bd9Sstevel@tonic-gate /* 56 */	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	HOLE,
2517c478bd9Sstevel@tonic-gate /* 64 */	NONL,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2527c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NONL,	NONL,	NONL,	HOLE,	NONL,
2537c478bd9Sstevel@tonic-gate /* 80 */	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,	NONL,	HOLE,
2547c478bd9Sstevel@tonic-gate /* 88 */	HOLE,	NONL,	NONL,	PAD7,	PAD4,	PAD1,	HOLE,	NONL,
2557c478bd9Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	NONL,	PAD9,	PAD6,	PAD3,
2567c478bd9Sstevel@tonic-gate /*104 */	PADDOT,	NONL,	NONL,	HOLE,	NONL,	HOLE,	NONL,	HOLE,
2577c478bd9Sstevel@tonic-gate /*112 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
2587c478bd9Sstevel@tonic-gate /*120 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,
2597c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2607c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2617c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2627c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2637c478bd9Sstevel@tonic-gate /*160 */
2647c478bd9Sstevel@tonic-gate };
2657c478bd9Sstevel@tonic-gate 
2667c478bd9Sstevel@tonic-gate /* Controlled keyboard table for PC keyboard */
2677c478bd9Sstevel@tonic-gate 
2687c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_ct[KEYMAP_SIZE_PC] = {
2697c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	c('^'),	'1',	c('@'),	'3',	'4',	'5',	c('^'),
2707c478bd9Sstevel@tonic-gate /*  8 */	'7', 	'8',	'9',	'0',	c('_'),	'=',	HOLE,	'\b',
2717c478bd9Sstevel@tonic-gate /* 16 */	'\t',	c('q'),	c('w'),	c('e'),	c('r'),	c('t'),	c('y'),	c('u'),
2727c478bd9Sstevel@tonic-gate /* 24 */	c('i'),	c('o'), c('p'), c('['),	c(']'),	c('\\'),
2737c478bd9Sstevel@tonic-gate 							SHIFTKEYS+CAPSLOCK,
2747c478bd9Sstevel@tonic-gate 									c('a'),
2757c478bd9Sstevel@tonic-gate /* 32 */	c('s'),	c('d'),	c('f'),	c('g'),	c('h'),	c('j'),	c('k'),	c('l'),
2767c478bd9Sstevel@tonic-gate /* 40 */	';',	'\'',	'\\',	'\r',
2777c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2787c478bd9Sstevel@tonic-gate 							HOLE,	c('z'),	c('x'),
2797c478bd9Sstevel@tonic-gate /* 48 */	c('c'),	c('v'),	c('b'),	c('n'),	c('m'),	',',	'.',	c('_'),
2807c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
2817c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
2827c478bd9Sstevel@tonic-gate 					HOLE,
2837c478bd9Sstevel@tonic-gate 						SHIFTKEYS+LEFTALT,
2847c478bd9Sstevel@tonic-gate 							' ',	SHIFTKEYS+
2857c478bd9Sstevel@tonic-gate 								RIGHTALT,
2867c478bd9Sstevel@tonic-gate 									HOLE,
2877c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
2887c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
2897c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	BF(8),	DEL,	NOP,	HOLE,
2907c478bd9Sstevel@tonic-gate 							    STRING+LEFTARROW,
2917c478bd9Sstevel@tonic-gate /* 80 */	RF(7),	RF(13),	HOLE,
2927c478bd9Sstevel@tonic-gate 				    STRING+UPARROW,
2937c478bd9Sstevel@tonic-gate 					    STRING+DOWNARROW,
2947c478bd9Sstevel@tonic-gate 							RF(9),	RF(15),	HOLE,
2957c478bd9Sstevel@tonic-gate /* 88 */	HOLE,
2967c478bd9Sstevel@tonic-gate 		STRING+RIGHTARROW,
2977c478bd9Sstevel@tonic-gate 			    SHIFTKEYS+NUMLOCK,
2987c478bd9Sstevel@tonic-gate 					PAD7,	PAD4,	PAD1,	HOLE,
2997c478bd9Sstevel@tonic-gate 								PADSLASH,
3007c478bd9Sstevel@tonic-gate /* 96 */	PAD8,	PAD5,	PAD2,	PAD0,	PADSTAR,
3017c478bd9Sstevel@tonic-gate 							PAD9,	PAD6,	PAD3,
3027c478bd9Sstevel@tonic-gate /*104 */	PADDOT,	PADMINUS,
3037c478bd9Sstevel@tonic-gate 				PADPLUS,
3047c478bd9Sstevel@tonic-gate 					HOLE,	PADENTER,
3057c478bd9Sstevel@tonic-gate 							HOLE,	ESC,	HOLE,
3067c478bd9Sstevel@tonic-gate /*112 */	TF(1),	TF(2),	TF(3),	TF(4),	TF(5),	TF(6),	TF(7),	TF(8),
3077c478bd9Sstevel@tonic-gate /*120 */	TF(9),	TF(10),	TF(11),	TF(12),	NOP,	NOP,	NOP,	HOLE,
3087c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3097c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3107c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3117c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3127c478bd9Sstevel@tonic-gate /*160 */
3137c478bd9Sstevel@tonic-gate };
3147c478bd9Sstevel@tonic-gate 
3157c478bd9Sstevel@tonic-gate /* "Key Up" keyboard table for PC keyboard */
3167c478bd9Sstevel@tonic-gate 
3177c478bd9Sstevel@tonic-gate 
3187c478bd9Sstevel@tonic-gate static keymap_entry_t keytab_pc_up[KEYMAP_SIZE_PC] = {
3197c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3207c478bd9Sstevel@tonic-gate /*  8 */	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
3217c478bd9Sstevel@tonic-gate /* 16 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3227c478bd9Sstevel@tonic-gate /* 24 */	NOP,	NOP, 	NOP, 	NOP,	NOP,	NOP,	NOP,	NOP,
3237c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3247c478bd9Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,
3257c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
3267c478bd9Sstevel@tonic-gate 							HOLE,	NOP,	NOP,
3277c478bd9Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3287c478bd9Sstevel@tonic-gate /* 56 */	NOP,	SHIFTKEYS+RIGHTSHIFT,
3297c478bd9Sstevel@tonic-gate 				SHIFTKEYS+LEFTCTRL,
3307c478bd9Sstevel@tonic-gate 					HOLE,	SHIFTKEYS+LEFTALT,
3317c478bd9Sstevel@tonic-gate 							NOP,	SHIFTKEYS+
3327c478bd9Sstevel@tonic-gate 								RIGHTALT,
3337c478bd9Sstevel@tonic-gate 									HOLE,
3347c478bd9Sstevel@tonic-gate /* 64 */        SHIFTKEYS+RIGHTCTRL,
3357c478bd9Sstevel@tonic-gate 			HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3367c478bd9Sstevel@tonic-gate /* 72 */	HOLE,	HOLE,	HOLE,	NOP,	NOP,	NOP,	HOLE,	NOP,
3377c478bd9Sstevel@tonic-gate /* 80 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	NOP,	HOLE,
3387c478bd9Sstevel@tonic-gate /* 88 */	HOLE,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,
3397c478bd9Sstevel@tonic-gate /* 96 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3407c478bd9Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	HOLE,	NOP,	HOLE,	NOP,	HOLE,
3417c478bd9Sstevel@tonic-gate /*112 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3427c478bd9Sstevel@tonic-gate /*120 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	HOLE,
3437c478bd9Sstevel@tonic-gate /*128 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3447c478bd9Sstevel@tonic-gate /*136 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3457c478bd9Sstevel@tonic-gate /*144 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3467c478bd9Sstevel@tonic-gate /*152 */	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,	HOLE,
3477c478bd9Sstevel@tonic-gate /*160 */
3487c478bd9Sstevel@tonic-gate };
3497c478bd9Sstevel@tonic-gate 
3507c478bd9Sstevel@tonic-gate /* END CSTYLED */
3517c478bd9Sstevel@tonic-gate 
3527c478bd9Sstevel@tonic-gate #define	M(x)	(1 << (x))
3537c478bd9Sstevel@tonic-gate #define	MASK_ALL	(M(LEFTSHIFT) |	\
3547c478bd9Sstevel@tonic-gate 			M(RIGHTSHIFT) |	\
3557c478bd9Sstevel@tonic-gate 			CTRLMASK |	\
3567c478bd9Sstevel@tonic-gate 			ALTMASK |	\
3577c478bd9Sstevel@tonic-gate 			ALTGRAPHMASK)
3587c478bd9Sstevel@tonic-gate 
3597c478bd9Sstevel@tonic-gate /*
3607c478bd9Sstevel@tonic-gate  * Make Ctrl+Shift+F1 be Compose.  This is SOOOO hokey.
3617c478bd9Sstevel@tonic-gate  */
3627c478bd9Sstevel@tonic-gate static struct exception_map exceptions_pc[] = {
3637c478bd9Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(LEFTCTRL),   112, COMPOSE, },
3647c478bd9Sstevel@tonic-gate 	{ MASK_ALL, M(LEFTSHIFT)|M(RIGHTCTRL),  112, COMPOSE, },
3657c478bd9Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(LEFTCTRL),  112, COMPOSE, },
3667c478bd9Sstevel@tonic-gate 	{ MASK_ALL, M(RIGHTSHIFT)|M(RIGHTCTRL), 112, COMPOSE, },
3677c478bd9Sstevel@tonic-gate 	{ 0, },
3687c478bd9Sstevel@tonic-gate };
3697c478bd9Sstevel@tonic-gate 
3707c478bd9Sstevel@tonic-gate /* Index to keymaps for PC keyboard */
3717c478bd9Sstevel@tonic-gate struct keyboard keyindex_pc = {
3727c478bd9Sstevel@tonic-gate 	KEYMAP_SIZE_PC,
3737c478bd9Sstevel@tonic-gate 	keytab_pc_lc,
3747c478bd9Sstevel@tonic-gate 	keytab_pc_uc,
3757c478bd9Sstevel@tonic-gate 	keytab_pc_cl,
3767c478bd9Sstevel@tonic-gate 	keytab_pc_ag,
3777c478bd9Sstevel@tonic-gate 	keytab_pc_nl,
3787c478bd9Sstevel@tonic-gate 	keytab_pc_ct,
3797c478bd9Sstevel@tonic-gate 	keytab_pc_up,
3807c478bd9Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
3817c478bd9Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
3827c478bd9Sstevel@tonic-gate 	112, 0,	31,	/* abort keys: F1+A */
3837c478bd9Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
3847c478bd9Sstevel@tonic-gate 	exceptions_pc,	/* Exceptions */
385*e4603304Sqz 	44, 57, 126,	/* new abort keys: Shift+Pause */
3867c478bd9Sstevel@tonic-gate };
387