xref: /illumos-gate/usr/src/uts/common/sys/kbio.h (revision 61f797f57a0715da7fa0c5202cdf1c31f184778c)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef _SYS_KBIO_H
27 #define	_SYS_KBIO_H
28 
29 #ifdef	__cplusplus
30 extern "C" {
31 #endif
32 
33 /*
34  * Keyboard related ioctls
35  */
36 
37 /*
38  * See sys/kbd.h for TR_NONE (don't translate) and TR_ASCII
39  * (translate to ASCII) TR_EVENT (translate to virtual input
40  * device codes)
41  */
42 #define	KIOC		('k'<<8)
43 
44 #if defined(__i386) || defined(__i386_COMPAT)
45 
46 /*
47  * For x86, these numbers conflict with KD "Xenix" ioctl numbers, so each
48  * conflicting command has been offset by 30.
49  */
50 #define	KIOCTRANS	(KIOC|30)	/* set keyboard translation */
51 #define	KIOCGTRANS	(KIOC|35)	/* get keyboard translation */
52 #define	KIOCTRANSABLE	(KIOC|36)	/* set keyboard translatability */
53 #define	KIOCGTRANSABLE	(KIOC|37)	/* get keyboard translatability */
54 
55 #else	/* __i386 || __i386_COMPAT */
56 
57 #define	KIOCTRANS	(KIOC|0)	/* set keyboard translation */
58 #define	KIOCGTRANS	(KIOC|5)	/* get keyboard translation */
59 #define	KIOCTRANSABLE	(KIOC|6)	/* set keyboard translatability */
60 #define	KIOCGTRANSABLE	(KIOC|7)	/* get keyboard translatability */
61 
62 #endif	/* __i386 || __i386_COMPAT */
63 
64 
65 #define	TR_CANNOT	0	/* Cannot translate keyboard using tables */
66 #define	TR_CAN		1	/* Can translate keyboard using tables */
67 
68 /*
69  * Old-style keymap entry, for backwards compatibility only.
70  */
71 struct	kiockey {
72 	int	kio_tablemask;	/* Translation table (one of: 0, CAPSMASK, */
73 				/* SHIFTMASK, CTRLMASK, UPMASK, */
74 				/* ALTGRAPHMASK, NUMLOCKMASK) */
75 #define	KIOCABORT1	-1	/* Special "mask": abort1 keystation */
76 #define	KIOCABORT2	-2	/* Special "mask": abort2 keystation */
77 #define	KIOCABORT1A	-3	/* Special "mask": alt abort1 keystation */
78 	uchar_t	kio_station;	/* Physical keyboard key station (0-127) */
79 	uchar_t	kio_entry;	/* Translation table station's entry */
80 	char	kio_string[10];	/* Value for STRING entries (null terminated) */
81 };
82 
83 /*
84  * Set kio_tablemask table's kio_station to kio_entry.
85  * Copy kio_string to string table if kio_entry is between STRING and
86  * STRING+15.  EINVAL is possible if there are invalid arguments.
87  */
88 #if defined(__i386) || defined(__i386_COMPAT)
89 #define	KIOCSETKEY	(KIOC|31)	/* avoid conflict with "SETFKEY" */
90 #else
91 #define	KIOCSETKEY	(KIOC|1)
92 #endif
93 
94 /*
95  * Get kio_tablemask table's kio_station to kio_entry.
96  * Get kio_string from string table if kio_entry is between STRING and
97  * STRING+15.  EINVAL is possible if there are invalid arguments.
98  */
99 #if defined(__i386) || defined(__i386_COMPAT)
100 #define	KIOCGETKEY	(KIOC|32)	/* avoid conflict with "GIO_SCRNMAP" */
101 #else
102 #define	KIOCGETKEY	(KIOC|2)
103 #endif
104 
105 /*
106  * Send the keyboard device a control command.  sys/kbd.h contains
107  * the constants that define the commands.  Normal values are:
108  * KBD_CMD_BELL, KBD_CMD_NOBELL, KBD_CMD_CLICK, KBD_CMD_NOCLICK.
109  * Inappropriate commands for particular keyboard types are ignored.
110  *
111  * Since there is no reliable way to get the state of the bell or click
112  * or LED (because we can't query the kdb, and also one could do writes
113  * to the appropriate serial driver--thus going around this ioctl)
114  * we don't provide an equivalent state querying ioctl.
115  */
116 #define	KIOCCMD		(KIOC|8)
117 
118 /*
119  * Get keyboard type.  Return values are one of KB_* from sys/kbd.h,
120  * e.g., KB_KLUNK, KB_VT100, KB_SUN2, KB_SUN3, KB_SUN4, KB_ASCII.
121  * -1 means that the type is not known.
122  */
123 #define	KIOCTYPE	(KIOC|9)	/* get keyboard type */
124 
125 /*
126  * Set flag indicating whether keystrokes get routed to /dev/console.
127  */
128 #define	KIOCSDIRECT	(KIOC|10)
129 
130 /*
131  * Get flag indicating whether keystrokes get routed to /dev/console.
132  */
133 #if defined(__i386) || defined(__i386_COMPAT)
134 #define	KIOCGDIRECT	(KIOC|41)	/* avoid conflict with "GIO_STRMAP" */
135 #else
136 #define	KIOCGDIRECT	(KIOC|11)
137 #endif
138 
139 /*
140  * New-style key map entry.
141  */
142 struct kiockeymap {
143 	int	kio_tablemask;	/* Translation table (one of: 0, CAPSMASK, */
144 				/*  SHIFTMASK, CTRLMASK, UPMASK, */
145 				/*  ALTGRAPHMASK) */
146 	uchar_t	kio_station;	/* Physical keyboard key station (0-127) */
147 	unsigned kio_entry;	/* Translation table station's entry */
148 	char	kio_string[10];	/* Value for STRING entries (null terminated) */
149 };
150 
151 /*
152  * Set kio_tablemask table's kio_station to kio_entry.
153  * Copy kio_string to string table if kio_entry is between STRING and
154  * STRING+15.  EINVAL is possible if there are invalid arguments.
155  */
156 #if defined(__i386) || defined(__i386_COMPAT)
157 #define	KIOCSKEY	(KIOC|42)	/* avoid conflict with "PIO_STRMAP" */
158 #else
159 #define	KIOCSKEY	(KIOC|12)
160 #endif
161 
162 /*
163  * Get kio_tablemask table's kio_station to kio_entry.
164  * Get kio_string from string table if kio_entry is between STRING and
165  * STRING+15.  EINVAL is possible if there are invalid arguments.
166  */
167 #define	KIOCGKEY	(KIOC|13)
168 
169 /*
170  * Set and get LED state.
171  */
172 #define	KIOCSLED	(KIOC|14)
173 #define	KIOCGLED	(KIOC|15)
174 
175 /*
176  * Set and get compatibility mode.
177  */
178 #define	KIOCSCOMPAT	(KIOC|16)
179 #define	KIOCGCOMPAT	(KIOC|17)
180 
181 /*
182  * Set and get keyboard layout.
183  */
184 #define	KIOCSLAYOUT	(KIOC|19)
185 #define	KIOCLAYOUT	(KIOC|20)
186 
187 /*
188  * KIOCSKABORTEN:
189  *
190  * Enable/Disable/Alternate Keyboard abort effect (Stop/A, Break or other seq).
191  * The argument is a pointer to an integer.  If the integer is zero,
192  * keyboard abort is disabled, one will enable keyboard abort (hardware BREAK
193  * signal), two will revert to the Alternative Break Sequence.  NB: This ioctl
194  * requires root credentials and applies to serial input devices and keyboards.
195  * When the Alternative Break Sequence is enabled it applies to serial input
196  * devices ONLY.
197  */
198 #define	KIOCSKABORTEN	(KIOC|21)
199 
200 #define	KIOCABORTDISABLE	0	/* Disable Aborts  */
201 #define	KIOCABORTENABLE		1	/* Enable BREAK Signal Aborts  */
202 #define	KIOCABORTALTERNATE	2	/* Enable Alternative Aborts   */
203 
204 /*
205  * Get/Set Keyboard autorepeat delay/rate.
206  * Use millisecond as unit used by the user-level application
207  */
208 #define	KIOCGRPTDELAY	(KIOC|22)
209 #define	KIOCSRPTDELAY	(KIOC|23)
210 #define	KIOCGRPTRATE	(KIOC|24)
211 #define	KIOCSRPTRATE	(KIOC|25)
212 
213 /* Set keyboard and console beeper frequencies */
214 #define	KIOCSETFREQ	(KIOC|26)
215 
216 /* Beeper type for struct freq_request */
217 enum fr_beep_type {CONSOLE_BEEP = 1, KBD_BEEP = 2};
218 
219 /* Frequency request structure */
220 struct freq_request {
221 	enum fr_beep_type type;	/* Beeper type */
222 	int16_t	freq;		/* Frequency */
223 };
224 
225 #define	KIOCMKTONE	(KIOC|27)
226 
227 /*
228  * For historical reasons, the frequency argument to KIOCMKTONE is
229  * in i8254 clock cycles.
230  */
231 
232 #define	PIT_HZ		1193182		/* 8254's cycles per second */
233 
234 #define	KDMKTONE	KIOCMKTONE
235 
236 /* Used to control the AutoRepeat Min-delay and Min-Rate */
237 #define	KIOCRPTDELAY_MIN	(100)
238 #define	KIOCRPTRATE_MIN		(1)
239 
240 /*
241  * Get/Set Keyboard autorepeat count.
242  */
243 #define	KIOCGRPTCOUNT	(KIOC|28)
244 #define	KIOCSRPTCOUNT	(KIOC|29)
245 
246 #ifdef	__cplusplus
247 }
248 #endif
249 
250 #endif	/* _SYS_KBIO_H */
251