1 /*- 2 * $FreeBSD$ 3 */ 4 5 #ifndef _SYS_KBIO_H_ 6 #define _SYS_KBIO_H_ 7 8 #ifndef _KERNEL 9 #include <sys/types.h> 10 #endif 11 #include <sys/ioccom.h> 12 13 /* get/set keyboard I/O mode */ 14 #define K_RAW 0 /* keyboard returns scancodes */ 15 #define K_XLATE 1 /* keyboard returns ascii */ 16 #define K_CODE 2 /* keyboard returns keycodes */ 17 #define KDGKBMODE _IOR('K', 6, int) 18 #define KDSKBMODE _IOWINT('K', 7) 19 20 /* make tone */ 21 #define KDMKTONE _IOWINT('K', 8) 22 23 /* see console.h for the definitions of the following ioctls */ 24 #ifdef notdef 25 #define KDGETMODE _IOR('K', 9, int) 26 #define KDSETMODE _IOWINT('K', 10) 27 #define KDSBORDER _IOWINT('K', 13) 28 #endif 29 30 /* get/set keyboard lock state */ 31 #define CLKED 1 /* Caps locked */ 32 #define NLKED 2 /* Num locked */ 33 #define SLKED 4 /* Scroll locked */ 34 #define ALKED 8 /* AltGr locked */ 35 #define LOCK_MASK (CLKED | NLKED | SLKED | ALKED) 36 #define KDGKBSTATE _IOR('K', 19, int) 37 #define KDSKBSTATE _IOWINT('K', 20) 38 39 /* enable/disable I/O access */ 40 #define KDENABIO _IO('K', 60) 41 #define KDDISABIO _IO('K', 61) 42 43 /* make sound */ 44 #define KIOCSOUND _IOWINT('K', 63) 45 46 /* get keyboard model */ 47 #define KB_OTHER 0 /* keyboard not known */ 48 #define KB_84 1 /* 'old' 84 key AT-keyboard */ 49 #define KB_101 2 /* MF-101 or MF-102 keyboard */ 50 #define KDGKBTYPE _IOR('K', 64, int) 51 52 /* get/set keyboard LED state */ 53 #define LED_CAP 1 /* Caps lock LED */ 54 #define LED_NUM 2 /* Num lock LED */ 55 #define LED_SCR 4 /* Scroll lock LED */ 56 #define LED_MASK (LED_CAP | LED_NUM | LED_SCR) 57 #define KDGETLED _IOR('K', 65, int) 58 #define KDSETLED _IOWINT('K', 66) 59 60 /* set keyboard repeat rate (obsolete, use KDSETREPEAT below) */ 61 #define KDSETRAD _IOWINT('K', 67) 62 63 struct keyboard_info { 64 int kb_index; /* kbdio index# */ 65 char kb_name[16]; /* driver name */ 66 int kb_unit; /* unit# */ 67 int kb_type; /* KB_84, KB_101, KB_OTHER,... */ 68 int kb_config; /* device configuration flags */ 69 int kb_flags; /* internal flags */ 70 }; 71 typedef struct keyboard_info keyboard_info_t; 72 73 /* add/remove keyboard to/from mux */ 74 #define KBADDKBD _IOW('K', 68, keyboard_info_t) /* add keyboard */ 75 #define KBRELKBD _IOW('K', 69, keyboard_info_t) /* release keyboard */ 76 77 /* see console.h for the definition of the following ioctl */ 78 #ifdef notdef 79 #define KDRASTER _IOW('K', 100, scr_size_t) 80 #endif 81 82 /* get keyboard information */ 83 #define KDGKBINFO _IOR('K', 101, keyboard_info_t) 84 85 /* set/get keyboard repeat rate (new interface) */ 86 struct keyboard_repeat { 87 int kb_repeat[2]; 88 }; 89 typedef struct keyboard_repeat keyboard_repeat_t; 90 #define KDSETREPEAT _IOW('K', 102, keyboard_repeat_t) 91 #define KDGETREPEAT _IOR('K', 103, keyboard_repeat_t) 92 93 /* get/set key map/accent map/function key strings */ 94 95 #define NUM_KEYS 256 /* number of keys in table */ 96 #define NUM_STATES 8 /* states per key */ 97 #define ALTGR_OFFSET 128 /* offset for altlock keys */ 98 99 #define NUM_DEADKEYS 15 /* number of accent keys */ 100 #define NUM_ACCENTCHARS 52 /* max number of accent chars */ 101 102 #define NUM_FKEYS 96 /* max number of function keys */ 103 #define MAXFK 16 /* max length of a function key str */ 104 105 #ifndef _KEYMAP_DECLARED 106 #define _KEYMAP_DECLARED 107 108 struct keyent_t { 109 u_int map[NUM_STATES]; 110 u_char spcl; 111 u_char flgs; 112 #define FLAG_LOCK_O 0 113 #define FLAG_LOCK_C 1 114 #define FLAG_LOCK_N 2 115 }; 116 117 struct keymap { 118 u_short n_keys; 119 struct keyent_t key[NUM_KEYS]; 120 }; 121 typedef struct keymap keymap_t; 122 123 #ifdef COMPAT_FREEBSD13 124 struct okeyent_t { 125 u_char map[NUM_STATES]; 126 u_char spcl; 127 u_char flgs; 128 }; 129 130 struct okeymap { 131 u_short n_keys; 132 struct okeyent_t key[NUM_KEYS]; 133 }; 134 typedef struct okeymap okeymap_t; 135 #endif /* COMPAT_FREEBSD13 */ 136 137 #endif /* !_KEYMAP_DECLARED */ 138 139 /* defines for "special" keys (spcl bit set in keymap) */ 140 #define NOP 0x00 /* nothing (dead key) */ 141 #define LSH 0x02 /* left shift key */ 142 #define RSH 0x03 /* right shift key */ 143 #define CLK 0x04 /* caps lock key */ 144 #define NLK 0x05 /* num lock key */ 145 #define SLK 0x06 /* scroll lock key */ 146 #define LALT 0x07 /* left alt key */ 147 #define BTAB 0x08 /* backwards tab */ 148 #define LCTR 0x09 /* left control key */ 149 #define NEXT 0x0a /* switch to next screen */ 150 #define F_SCR 0x0b /* switch to first screen */ 151 #define L_SCR 0x1a /* switch to last screen */ 152 #define F_FN 0x1b /* first function key */ 153 #define L_FN 0x7a /* last function key */ 154 /* 0x7b-0x7f reserved do not use ! */ 155 #define RCTR 0x80 /* right control key */ 156 #define RALT 0x81 /* right alt (altgr) key */ 157 #define ALK 0x82 /* alt lock key */ 158 #define ASH 0x83 /* alt shift key */ 159 #define META 0x84 /* meta key */ 160 #define RBT 0x85 /* boot machine */ 161 #define DBG 0x86 /* call debugger */ 162 #define SUSP 0x87 /* suspend power (APM) */ 163 #define SPSC 0x88 /* toggle splash/text screen */ 164 165 #define F_ACC DGRA /* first accent key */ 166 #define DGRA 0x89 /* grave */ 167 #define DACU 0x8a /* acute */ 168 #define DCIR 0x8b /* circumflex */ 169 #define DTIL 0x8c /* tilde */ 170 #define DMAC 0x8d /* macron */ 171 #define DBRE 0x8e /* breve */ 172 #define DDOT 0x8f /* dot */ 173 #define DUML 0x90 /* umlaut/diaresis */ 174 #define DDIA 0x90 /* diaresis */ 175 #define DSLA 0x91 /* slash */ 176 #define DRIN 0x92 /* ring */ 177 #define DCED 0x93 /* cedilla */ 178 #define DAPO 0x94 /* apostrophe */ 179 #define DDAC 0x95 /* double acute */ 180 #define DOGO 0x96 /* ogonek */ 181 #define DCAR 0x97 /* caron */ 182 #define L_ACC DCAR /* last accent key */ 183 184 #define STBY 0x98 /* Go into standby mode (apm) */ 185 #define PREV 0x99 /* switch to previous screen */ 186 #define PNC 0x9a /* force system panic */ 187 #define LSHA 0x9b /* left shift key / alt lock */ 188 #define RSHA 0x9c /* right shift key / alt lock */ 189 #define LCTRA 0x9d /* left ctrl key / alt lock */ 190 #define RCTRA 0x9e /* right ctrl key / alt lock */ 191 #define LALTA 0x9f /* left alt key / alt lock */ 192 #define RALTA 0xa0 /* right alt key / alt lock */ 193 #define HALT 0xa1 /* halt machine */ 194 #define PDWN 0xa2 /* halt machine and power down */ 195 #define PASTE 0xa3 /* paste from cut-paste buffer */ 196 197 #define F(x) ((x)+F_FN-1) 198 #define S(x) ((x)+F_SCR-1) 199 #define ACC(x) ((x)+F_ACC) 200 201 struct acc_t { 202 u_int accchar; 203 u_int map[NUM_ACCENTCHARS][2]; 204 }; 205 206 struct accentmap { 207 u_short n_accs; 208 struct acc_t acc[NUM_DEADKEYS]; 209 }; 210 typedef struct accentmap accentmap_t; 211 212 #ifdef COMPAT_FREEBSD13 213 struct oacc_t { 214 u_char accchar; 215 u_char map[NUM_ACCENTCHARS][2]; 216 }; 217 218 struct oaccentmap { 219 u_short n_accs; 220 struct oacc_t acc[NUM_DEADKEYS]; 221 }; 222 typedef struct oaccentmap oaccentmap_t; 223 #endif /* COMPAT_FREEBSD13 */ 224 225 struct keyarg { 226 u_short keynum; 227 struct keyent_t key; 228 }; 229 typedef struct keyarg keyarg_t; 230 231 struct fkeytab { 232 u_char str[MAXFK]; 233 u_char len; 234 }; 235 typedef struct fkeytab fkeytab_t; 236 237 struct fkeyarg { 238 u_short keynum; 239 char keydef[MAXFK]; 240 char flen; 241 }; 242 typedef struct fkeyarg fkeyarg_t; 243 244 #define GETFKEY _IOWR('k', 0, fkeyarg_t) 245 #define SETFKEY _IOWR('k', 1, fkeyarg_t) 246 #ifdef notdef /* see console.h */ 247 #define GIO_SCRNMAP _IOR('k', 2, scrmap_t) 248 #define PIO_SCRNMAP _IOW('k', 3, scrmap_t) 249 #endif 250 /* XXX: Should have keymap_t as an argument, but that's too big for ioctl()! */ 251 #define GIO_KEYMAP _IO('k', 6) 252 #define PIO_KEYMAP _IO('k', 7) 253 #ifdef COMPAT_FREEBSD13 254 #define OGIO_KEYMAP _IOR('k', 6, okeymap_t) 255 #define OPIO_KEYMAP _IOW('k', 7, okeymap_t) 256 #endif /* COMPAT_FREEBSD13 */ 257 /* XXX: Should have accentmap_t as an argument, but that's too big for ioctl()! */ 258 #define GIO_DEADKEYMAP _IO('k', 8) 259 #define PIO_DEADKEYMAP _IO('k', 9) 260 #ifdef COMPAT_FREEBSD13 261 #define OGIO_DEADKEYMAP _IOR('k', 8, oaccentmap_t) 262 #define OPIO_DEADKEYMAP _IOW('k', 9, oaccentmap_t) 263 #endif /* COMPAT_FREEBSD13 */ 264 #define GIO_KEYMAPENT _IOWR('k', 10, keyarg_t) 265 #define PIO_KEYMAPENT _IOW('k', 11, keyarg_t) 266 267 /* flags set to the return value in the KD_XLATE mode */ 268 269 #define NOKEY 0x01000000 /* no key pressed marker */ 270 #define FKEY 0x02000000 /* function key marker */ 271 #define MKEY 0x04000000 /* meta key marker (prepend ESC)*/ 272 #define BKEY 0x08000000 /* backtab (ESC [ Z) */ 273 274 #define SPCLKEY 0x80000000 /* special key */ 275 #define RELKEY 0x40000000 /* key released */ 276 #define ERRKEY 0x20000000 /* error */ 277 278 /* 279 * The top byte is used to store the flags. This means there are 24 280 * bits left to store the actual character. Because UTF-8 can encode 281 * 2^21 different characters, this is good enough to get Unicode 282 * working. 283 */ 284 #define KEYCHAR(c) ((c) & 0x00ffffff) 285 #define KEYFLAGS(c) ((c) & ~0x00ffffff) 286 287 #endif /* !_SYS_KBIO_H_ */ 288