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