FreeBSD/Linux Kernel Cross Reference
sys/i386at/kd.h
1 /*
2 * Mach Operating System
3 * Copyright (c) 1991,1990,1989 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie Mellon
24 * the rights to redistribute these changes.
25 */
26 /*
27 * HISTORY
28 * $Log: kd.h,v $
29 * Revision 2.9 93/05/15 19:32:06 mrt
30 * machparam.h -> machspl.h
31 *
32 * Revision 2.8 93/01/14 17:31:17 danner
33 * Proper spl typing.
34 * [92/11/30 af]
35 *
36 * Revision 2.7 91/05/14 16:26:55 mrt
37 * Correcting copyright
38 *
39 * Revision 2.6 91/03/16 14:46:53 rpd
40 * Fixed ioctl definitions for ANSI C.
41 * [91/02/20 rpd]
42 *
43 * Revision 2.5 91/02/05 17:19:03 mrt
44 * Changed to new Mach copyright
45 * [91/02/01 17:45:28 mrt]
46 *
47 * Revision 2.4 90/11/26 14:50:27 rvb
48 * jsb bet me to XMK34, sigh ...
49 * [90/11/26 rvb]
50 * Synched 2.5 & 3.0 at I386q (r1.5.1.5) & XMK35 (r2.4)
51 * [90/11/15 rvb]
52 *
53 * Revision 1.5.1.4 90/06/07 08:05:44 rvb
54 * Move CURRENT_COLUMN here.
55 * [90/06/06 rvb]
56 *
57 * Revision 2.3 90/08/09 16:32:09 rpd
58 * Added kdb/X support from rvb.
59 * [90/08/09 rpd]
60 *
61 * Revision 1.5.1.3 90/05/14 13:21:26 rvb
62 * Support for entering kdb from X;
63 * [90/04/30 rvb]
64 *
65 * Revision 2.2 90/05/03 15:44:47 dbg
66 * First checkin.
67 *
68 * Revision 1.5.1.2 90/02/28 15:50:17 rvb
69 * Fix numerous typo's in Olivetti disclaimer.
70 * [90/02/28 rvb]
71 *
72 * Revision 1.5.1.1 90/01/08 13:30:59 rvb
73 * Add Olivetti copyright.
74 * [90/01/08 rvb]
75 *
76 * Revision 1.5 89/07/17 10:41:10 rvb
77 * Olivetti Changes to X79 upto 5/9/89:
78 * [89/07/11 rvb]
79 *
80 * Revision 1.6 89/07/07 16:24:24 kupfer
81 * X79 merge, 2nd attempt
82 *
83 * Revision 1.4.1.1 89/04/27 12:20:58 kupfer
84 * Merge X79 with our latest and greatest.
85 *
86 * Revision 1.1.1.1 89/04/27 11:53:41 kupfer
87 * X79 from CMU.
88 *
89 * Revision 1.4 89/03/09 20:06:33 rpd
90 * More cleanup.
91 *
92 * Revision 1.3 89/02/26 12:37:13 gm0w
93 * Changes for cleanup.
94 *
95 */
96
97 /* **********************************************************************
98 File: kd.h
99 Description: definitions for AT keyboard/display driver
100 Authors: Eugene Kuerner, Adrienne Jardetzky, Mike Kupfer
101
102 $ Header: $
103
104 Copyright Ing. C. Olivetti & C. S.p.A. 1988, 1989.
105 All rights reserved.
106 ********************************************************************** */
107 /*
108 Copyright 1988, 1989 by Olivetti Advanced Technology Center, Inc.,
109 Cupertino, California.
110
111 All Rights Reserved
112
113 Permission to use, copy, modify, and distribute this software and
114 its documentation for any purpose and without fee is hereby
115 granted, provided that the above copyright notice appears in all
116 copies and that both the copyright notice and this permission notice
117 appear in supporting documentation, and that the name of Olivetti
118 not be used in advertising or publicity pertaining to distribution
119 of the software without specific, written prior permission.
120
121 OLIVETTI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
122 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
123 IN NO EVENT SHALL OLIVETTI BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
124 CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
125 LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
126 NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUR OF OR IN CONNECTION
127 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
128 */
129
130 /*
131 * This file contains defines and structures that implement hardware
132 * keyboard mapping into ansi defined output codes. Note that this
133 * is structured so that "re-mapping" of actual keys is allowed at
134 * anytime during execution of the console driver. And each scan code
135 * is potentially expanded into NUMKEYS characters. Which is programmable
136 * at runtime or whenever.
137 *
138 * 02 Nov 1988 orc!eugene
139 *
140 */
141
142 #ifndef _KD_H_
143 #define _KD_H_
144
145 #include <sys/ioctl.h>
146 #include <mach/boolean.h>
147 #include <sys/types.h>
148 #include <sys/time.h>
149
150
151 /*
152 * Where memory for various graphics adapters starts.
153 */
154 #define EGA_START 0x0b8000
155 #define CGA_START 0x0b8000
156 #define MONO_START 0x0b0000
157
158 /*
159 * Common I/O ports.
160 */
161 #define K_TMR0 0x40 /* timer 0, 1, or 2 value (r/w) */
162 #define K_TMR1 0x41
163 #define K_TMR2 0x42
164 #define K_TMRCTL 0x43 /* timer control (write-only) */
165 #define K_RDWR 0x60 /* keyboard data & cmds (read/write) */
166 #define K_PORTB 0x61 /* r/w. speaker & status lines */
167 #define K_STATUS 0x64 /* keybd status (read-only) */
168 #define K_CMD 0x64 /* keybd ctlr command (write-only) */
169
170 /*
171 * I/O ports for various graphics adapters.
172 */
173 #define EGA_IDX_REG 0x3d4
174 #define EGA_IO_REG 0x3d5
175 #define CGA_IDX_REG 0x3d4
176 #define CGA_IO_REG 0x3d5
177 #define MONO_IDX_REG 0x3b4
178 #define MONO_IO_REG 0x3b5
179
180 /*
181 * Commands sent to graphics adapter.
182 */
183 #define C_LOW 0x0f /* return low byte of cursor addr */
184 #define C_HIGH 0x0e /* high byte */
185
186 /*
187 * Bit definitions for K_STATUS port.
188 */
189 #define K_OBUF_FUL 0x01 /* output (from keybd) buffer full */
190 #define K_IBUF_FUL 0x02 /* input (to keybd) buffer full */
191 #define K_SYSFLAG 0x04 /* "System Flag" */
192 #define K_CMD_DATA 0x08 /* 1 = input buf has cmd, 0 = data */
193 #define K_KBD_INHBT 0x10 /* 0 if keyboard inhibited */
194
195 /*
196 * Keyboard controller commands (sent to K_CMD port).
197 */
198 #define KC_CMD_READ 0x20 /* read controller command byte */
199 #define KC_CMD_WRITE 0x60 /* write controller command byte */
200 #define KC_CMD_TEST 0xab /* test interface */
201 #define KC_CMD_DUMP 0xac /* diagnostic dump */
202 #define KC_CMD_DISBLE 0xad /* disable keyboard */
203 #define KC_CMD_ENBLE 0xae /* enable keyboard */
204 #define KC_CMD_RDKBD 0xc4 /* read keyboard ID */
205 #define KC_CMD_ECHO 0xee /* used for diagnostic testing */
206
207 /*
208 * Keyboard commands (send to K_RDWR).
209 */
210 #define K_CMD_LEDS 0xed /* set status LEDs (caps lock, etc.) */
211
212 /*
213 * Bit definitions for controller command byte (sent following
214 * K_CMD_WRITE command).
215 */
216 #define K_CB_ENBLIRQ 0x01 /* enable data-ready intrpt */
217 #define K_CB_SETSYSF 0x04 /* Set System Flag */
218 #define K_CB_INHBOVR 0x08 /* Inhibit Override */
219 #define K_CB_DISBLE 0x10 /* disable keyboard */
220
221 /*
222 * Bit definitions for "Indicator Status Byte" (sent after a
223 * K_CMD_LEDS command). If the bit is on, the LED is on. Undefined
224 * bit positions must be 0.
225 */
226 #define K_LED_SCRLLK 0x1 /* scroll lock */
227 #define K_LED_NUMLK 0x2 /* num lock */
228 #define K_LED_CAPSLK 0x4 /* caps lock */
229
230 /*
231 * Bit definitions for "Miscellaneous port B" (K_PORTB).
232 */
233 /* read/write */
234 #define K_ENABLETMR2 0x01 /* enable output from timer 2 */
235 #define K_SPKRDATA 0x02 /* direct input to speaker */
236 #define K_ENABLEPRTB 0x04 /* "enable" port B */
237 #define K_EIOPRTB 0x08 /* enable NMI on parity error */
238 /* read-only */
239 #define K_REFRESHB 0x10 /* refresh flag from INLTCONT PAL */
240 #define K_OUT2B 0x20 /* timer 2 output */
241 #define K_ICKB 0x40 /* I/O channel check (parity error) */
242
243 /*
244 * Bit definitions for timer control port (K_TMRCTL).
245 */
246 /* select timer 0, 1, or 2. Don't mess with 0 or 1. */
247 #define K_SELTMRMASK 0xc0
248 #define K_SELTMR0 0x00
249 #define K_SELTMR1 0x40
250 #define K_SELTMR2 0x80
251
252 /* read/load control */
253 #define K_RDLDTMRMASK 0x30
254 #define K_HOLDTMR 0x00 /* freeze timer until read */
255 #define K_RDLDTLSB 0x10 /* read/load LSB */
256 #define K_RDLDTMSB 0x20 /* read/load MSB */
257 #define K_RDLDTWORD 0x30 /* read/load LSB then MSB */
258
259 /* mode control */
260 #define K_TMDCTLMASK 0x0e
261 #define K_TCOUNTINTR 0x00 /* "Term Count Intr" */
262 #define K_TONESHOT 0x02 /* "Progr One-Shot" */
263 #define K_TRATEGEN 0x04 /* "Rate Gen (/n)" */
264 #define K_TSQRWAVE 0x06 /* "Sqr Wave Gen" */
265 #define K_TSOFTSTRB 0x08 /* "Softw Trig Strob" */
266 #define K_THARDSTRB 0x0a /* "Hardw Trig Strob" */
267
268 /* count mode */
269 #define K_TCNTMDMASK 0x01
270 #define K_TBINARY 0x00 /* 16-bit binary counter */
271 #define K_TBCD 0x01 /* 4-decade BCD counter */
272
273
274
275 /*
276 * Fun definitions for displayed characters and characters read from
277 * the keyboard.
278 */
279
280 /*
281 * Attributes for character sent to display.
282 */
283 #define KA_NORMAL 0x07
284 #define KA_REVERSE 0x70
285
286 /*
287 * For an EGA-like display, each character takes two bytes, one for the
288 * actual character, followed by one for its attributes.
289 * Be very careful if you change ONE_SPACE, as these constants are also used
290 * to define the device-independent display implemented by kd.c.
291 * (See kdsoft.h for more details on the device-independent display.)
292 */
293 #define ONE_SPACE 2 /* bytes in 1 char, EGA-like display */
294 #define BOTTOM_LINE 3840 /* 1st byte in last line of display */
295 #define ONE_PAGE 4000 /* number of bytes in page */
296 #define ONE_LINE 160 /* number of bytes in line */
297
298 #define BEG_OF_LINE(pos) ((pos) - (pos)%ONE_LINE)
299 #define CURRENT_COLUMN(pos) (((pos) % ONE_LINE) / ONE_SPACE)
300
301 #define NUMKEYS 89
302 #define NUMSTATES 5 /* NORMAL_STATE, ... */
303 #define NUMOUTPUT 3 /* max size of byte seq from key */
304 #define WIDTH_KMAP (NUMSTATES * NUMOUTPUT)
305
306 /*
307 * Keyboard states. Used for KDGKBENT, KDSKBENT ioctl's. If you
308 * change these values, you should also rearrange the entries in
309 * key_map.
310 */
311 /* "state indices" (for computing key_map index) */
312 #define NORM_STATE 0
313 #define SHIFT_STATE 1
314 #define CTRL_STATE 2
315 #define ALT_STATE 3
316 #define SHIFT_ALT 4
317 /* macro to convert from state index to actual key_map index */
318 #define CHARIDX(sidx) ((sidx) * NUMOUTPUT)
319 /* where sidx is in [NORM_STATE ... SHIFT_ALT] */
320
321 /* "state bits" for kd_state vector */
322 #define KS_NORMAL 0x00
323 #define KS_SLKED 0x01
324 #define KS_NLKED 0x02
325 #define KS_CLKED 0x04
326 #define KS_ALTED 0x08
327 #define KS_SHIFTED 0x10
328 #define KS_CTLED 0x20
329
330
331 /*
332 * Scancode values, not to be confused with Ascii values.
333 */
334 typedef u_char Scancode;
335
336 /* special codes */
337 #define K_UP 0x80 /* OR'd in if key below is released */
338 #define K_EXTEND 0xe0 /* marker for "extended" sequence */
339 #define K_ACKSC 0xfa /* ack for keyboard command */
340 #define K_RESEND 0xfe /* request to resend keybd cmd */
341
342 /* modifier keys */
343 #define K_CTLSC 0x1d /* control down */
344 #define K_LSHSC 0x2a /* left shift down */
345 #define K_RSHSC 0x36 /* right shift down */
346 #define K_ALTSC 0x38 /* alt key down */
347 #define K_CLCKSC 0x3a /* caps lock */
348 #define K_NLCKSC 0x45 /* num lock down */
349
350 /* "special keys" */
351 #define K_BSSC 0x0e /* backspace */
352 #define K_TABSC 0x0f /* tab */
353 #define K_RETSC 0x1c /* return */
354 #define K_SPSC 0x39 /* space */
355 #define K_ESCSC 0x01 /* ESC */
356
357 /* alphabetic keys */
358 #define K_qSC 0x10
359 #define K_wSC 0x11
360 #define K_eSC 0x12
361 #define K_rSC 0x13
362 #define K_tSC 0x14
363 #define K_ySC 0x15
364 #define K_uSC 0x16
365 #define K_iSC 0x17
366 #define K_oSC 0x18
367 #define K_pSC 0x19
368
369 #define K_aSC 0x1e
370 #define K_sSC 0x1f
371 #define K_dSC 0x20
372 #define K_fSC 0x21
373 #define K_gSC 0x22
374 #define K_hSC 0x23
375 #define K_jSC 0x24
376 #define K_kSC 0x25
377 #define K_lSC 0x26
378
379 #define K_zSC 0x2c
380 #define K_xSC 0x2d
381 #define K_cSC 0x2e
382 #define K_vSC 0x2f
383 #define K_bSC 0x30
384 #define K_nSC 0x31
385 #define K_mSC 0x32
386
387 /* numbers and punctuation */
388 #define K_ONESC 0x02 /* 1 */
389 #define K_TWOSC 0x03 /* 2 */
390 #define K_THREESC 0x04 /* 3 */
391 #define K_FOURSC 0x05 /* 4 */
392 #define K_FIVESC 0x06 /* 5 */
393 #define K_SIXSC 0x07 /* 6 */
394 #define K_SEVENSC 0x08 /* 7 */
395 #define K_EIGHTSC 0x09 /* 8 */
396 #define K_NINESC 0x0a /* 9 */
397 #define K_ZEROSC 0x0b /* 0 */
398
399 #define K_MINUSSC 0x0c /* - */
400 #define K_EQLSC 0x0d /* = */
401 #define K_LBRKTSC 0x1a /* [ */
402 #define K_RBRKTSC 0x1b /* ] */
403 #define K_SEMISC 0x27 /* ; */
404 #define K_SQUOTESC 0x28 /* ' */
405 #define K_GRAVSC 0x29 /* ` */
406 #define K_BSLSHSC 0x2b /* \ */
407 #define K_COMMASC 0x33 /* , */
408 #define K_PERIODSC 0x34 /* . */
409 #define K_SLASHSC 0x35 /* / */
410
411 /* keypad keys */
412 #define K_HOMESC 0x47 /* scancode for home */
413 #define K_DELSC 0x53 /* scancode for del */
414
415 /*
416 * Ascii values and flag characters for key map.
417 * A function key is represented by the 3-byte char sequence that it
418 * corresponds to.
419 * Other mappable non-Ascii keys (e.g., "ctrl") are represented by a
420 * two-byte sequence: K_SCAN, followed by the key's scan code.
421 */
422 #define K_DONE 0xff /* must be same as NC */
423 #define NC 0xff /* No character defined */
424
425 #define K_SCAN 0xfe /* followed by scan code */
426
427 /* ascii char set */
428 #define K_NUL 0x00 /* Null character */
429 #define K_SOH 0x01
430 #define K_STX 0x02
431 #define K_ETX 0x03
432 #define K_EOT 0x04
433 #define K_ENQ 0x05
434 #define K_ACK 0x06
435 #define K_BEL 0x07 /* bell character */
436 #define K_BS 0x08 /* back space */
437 #define K_HT 0x09
438 #define K_LF 0x0a /* line feed */
439 #define K_VT 0x0b
440 #define K_FF 0x0c
441 #define K_CR 0x0d /* carriage return */
442 #define K_SO 0x0e
443 #define K_SI 0x0f
444 #define K_DLE 0x10
445 #define K_DC1 0x11
446 #define K_DC2 0x12
447 #define K_DC3 0x13
448 #define K_DC4 0x14
449 #define K_NAK 0x15
450 #define K_SYN 0x16
451 #define K_ETB 0x17
452 #define K_CAN 0x18
453 #define K_EM 0x19
454 #define K_SUB 0x1a
455 #define K_ESC 0x1b /* escape character */
456 #define K_FS 0x1c
457 #define K_GS 0x1d
458 #define K_RS 0x1e
459 #define K_US 0x1f
460 #define K_SPACE 0x20 /* space character */
461 #define K_BANG 0x21 /* ! */
462 #define K_DQUOTE 0x22 /* " */
463 #define K_POUND 0x23 /* # */
464 #define K_DOLLAR 0x24 /* $ */
465 #define K_PERC 0x25 /* % */
466 #define K_AMPER 0x26 /* & */
467 #define K_SQUOTE 0x27 /* ' */
468 #define K_LPAREN 0x28 /* ( */
469 #define K_RPAREN 0x29 /* ) */
470 #define K_ASTER 0x2a /* * */
471 #define K_PLUS 0x2b /* + */
472 #define K_COMMA 0x2c /* , */
473 #define K_MINUS 0x2d /* - */
474 #define K_PERIOD 0x2e /* . */
475 #define K_SLASH 0x2f /* / */
476 #define K_ZERO 0x30 /* 0 */
477 #define K_ONE 0x31 /* 1 */
478 #define K_TWO 0x32 /* 2 */
479 #define K_THREE 0x33 /* 3 */
480 #define K_FOUR 0x34 /* 4 */
481 #define K_FIVE 0x35 /* 5 */
482 #define K_SIX 0x36 /* 6 */
483 #define K_SEVEN 0x37 /* 7 */
484 #define K_EIGHT 0x38 /* 8 */
485 #define K_NINE 0x39 /* 9 */
486 #define K_COLON 0x3a /* : */
487 #define K_SEMI 0x3b /* ; */
488 #define K_LTHN 0x3c /* < */
489 #define K_EQL 0x3d /* = */
490 #define K_GTHN 0x3e /* > */
491 #define K_QUES 0x3f /* ? */
492 #define K_ATSN 0x40 /* @ */
493 #define K_A 0x41 /* A */
494 #define K_B 0x42 /* B */
495 #define K_C 0x43 /* C */
496 #define K_D 0x44 /* D */
497 #define K_E 0x45 /* E */
498 #define K_F 0x46 /* F */
499 #define K_G 0x47 /* G */
500 #define K_H 0x48 /* H */
501 #define K_I 0x49 /* I */
502 #define K_J 0x4a /* J */
503 #define K_K 0x4b /* K */
504 #define K_L 0x4c /* L */
505 #define K_M 0x4d /* M */
506 #define K_N 0x4e /* N */
507 #define K_O 0x4f /* O */
508 #define K_P 0x50 /* P */
509 #define K_Q 0x51 /* Q */
510 #define K_R 0x52 /* R */
511 #define K_S 0x53 /* S */
512 #define K_T 0x54 /* T */
513 #define K_U 0x55 /* U */
514 #define K_V 0x56 /* V */
515 #define K_W 0x57 /* W */
516 #define K_X 0x58 /* X */
517 #define K_Y 0x59 /* Y */
518 #define K_Z 0x5a /* Z */
519 #define K_LBRKT 0x5b /* [ */
520 #define K_BSLSH 0x5c /* \ */
521 #define K_RBRKT 0x5d /* ] */
522 #define K_CARET 0x5e /* ^ */
523 #define K_UNDSC 0x5f /* _ */
524 #define K_GRAV 0x60 /* ` */
525 #define K_a 0x61 /* a */
526 #define K_b 0x62 /* b */
527 #define K_c 0x63 /* c */
528 #define K_d 0x64 /* d */
529 #define K_e 0x65 /* e */
530 #define K_f 0x66 /* f */
531 #define K_g 0x67 /* g */
532 #define K_h 0x68 /* h */
533 #define K_i 0x69 /* i */
534 #define K_j 0x6a /* j */
535 #define K_k 0x6b /* k */
536 #define K_l 0x6c /* l */
537 #define K_m 0x6d /* m */
538 #define K_n 0x6e /* n */
539 #define K_o 0x6f /* o */
540 #define K_p 0x70 /* p */
541 #define K_q 0x71 /* q */
542 #define K_r 0x72 /* r */
543 #define K_s 0x73 /* s */
544 #define K_t 0x74 /* t */
545 #define K_u 0x75 /* u */
546 #define K_v 0x76 /* v */
547 #define K_w 0x77 /* w */
548 #define K_x 0x78 /* x */
549 #define K_y 0x79 /* y */
550 #define K_z 0x7a /* z */
551 #define K_LBRACE 0x7b /* { */
552 #define K_PIPE 0x7c /* | */
553 #define K_RBRACE 0x7d /* } */
554 #define K_TILDE 0x7e /* ~ */
555 #define K_DEL 0x7f /* delete */
556
557 /* Ascii sequences to be generated by the named key */
558 #define K_F1 0x1b,0x4f,0x50
559 #define K_F1S 0x1b,0x4f,0x70
560 #define K_F2 0x1b,0x4f,0x51
561 #define K_F2S 0x1b,0x4f,0x71
562 #define K_F3 0x1b,0x4f,0x52
563 #define K_F3S 0x1b,0x4f,0x72
564 #define K_F4 0x1b,0x4f,0x53
565 #define K_F4S 0x1b,0x4f,0x73
566 #define K_F5 0x1b,0x4f,0x54
567 #define K_F5S 0x1b,0x4f,0x74
568 #define K_F6 0x1b,0x4f,0x55
569 #define K_F6S 0x1b,0x4f,0x75
570 #define K_F7 0x1b,0x4f,0x56
571 #define K_F7S 0x1b,0x4f,0x76
572 #define K_F8 0x1b,0x4f,0x57
573 #define K_F8S 0x1b,0x4f,0x77
574 #define K_F9 0x1b,0x4f,0x58
575 #define K_F9S 0x1b,0x4f,0x78
576 #define K_F10 0x1b,0x4f,0x59
577 #define K_F10S 0x1b,0x4f,0x79
578 #define K_F11 0x1b,0x4f,0x5a
579 #define K_F11S 0x1b,0x4f,0x7a
580 #define K_F12 0x1b,0x4f,0x41
581 #define K_F12S 0x1b,0x4f,0x61
582
583 #define K_SCRL 0x1b,0x5b,0x4d
584 #define K_HOME 0x1b,0x5b,0x48
585 #define K_UA 0x1b,0x5b,0x41
586 #define K_PUP 0x1b,0x5b,0x56
587 #define K_LA 0x1b,0x5b,0x44
588 #define K_RA 0x1b,0x5b,0x43
589 #define K_END 0x1b,0x5b,0x59
590 #define K_DA 0x1b,0x5b,0x42
591 #define K_PDN 0x1b,0x5b,0x55
592 #define K_INS 0x1b,0x5b,0x40
593
594
595 /*
596 * This array maps scancodes to Ascii characters (or character
597 * sequences).
598 * The first index is the scancode. The first NUMOUTPUT characters
599 * (accessed using the second index) correspond to the key's char
600 * sequence for the Normal state. The next NUMOUTPUT characters
601 * are for the Shift state, then Ctrl, then Alt, then Shift/Alt.
602 */
603 #ifdef KERNEL
604 extern u_char key_map[NUMKEYS][WIDTH_KMAP];
605 #endif /* KERNEL */
606
607
608
609 /*
610 * These routines are declared here so that all the modules making
611 * up the kd driver agree on how to do locking.
612 */
613
614 #ifdef KERNEL
615 #include <i386/machspl.h>
616 extern void splx();
617 extern spl_t spltty();
618 #define SPLKD spltty
619 #endif /* KERNEL */
620
621
622 /*
623 * Ioctl's on /dev/console.
624 */
625
626 /*
627 * KDGKBENT, KDSKBENT - Get and set keyboard table entry. Useful for
628 * remapping keys.
629 *
630 * KDGSTATE - Get the keyboard state variable, which flags the
631 * modifier keys (shift, ctrl, etc.) that are down. See
632 * KS_NORMAL et al above. Used for debugging.
633 *
634 * KDSETBELL - Turns the bell on or off.
635 */
636
637 #define KDGKBENT _IOWR('k', 1, struct kbentry) /* get keybd entry */
638
639 #define KDSKBENT _IOW('k', 2, struct kbentry) /* set keybd entry */
640
641 #define KDGSTATE _IOR('k', 3, int) /* get keybd state */
642
643 #define KDSETBELL _IOW('k', 4, int) /* turn bell on or off */
644 # define KD_BELLON 1
645 # define KD_BELLOFF 0
646
647 /*
648 * This struct is used for getting and setting key definitions. The
649 * values for kb_index are obtainable from the man page for
650 * keyboard(7) (though they should really be defined here!).
651 */
652 struct kbentry {
653 u_char kb_state; /* which state to use */
654 u_char kb_index; /* which keycode */
655 u_char kb_value[NUMOUTPUT]; /* value to get/set */
656 };
657
658
659 /*
660 * Ioctl's on /dev/kbd.
661 */
662
663 /*
664 * KDSKBDMODE - When the console is in "ascii" mode, keyboard events are
665 * converted to Ascii characters that are readable from /dev/console.
666 * When the console is in "event" mode, keyboard events are
667 * timestamped and queued up on /dev/kbd as kd_events. When the last
668 * close is done on /dev/kbd, the console automatically reverts to ascii
669 * mode.
670 * When /dev/mouse is opened, mouse events are timestamped and queued
671 * on /dev/mouse, again as kd_events.
672 *
673 * KDGKBDTYPE - Returns the type of keyboard installed. Currently
674 * there is only one type, KB_VANILLAKB, which is your standard PC-AT
675 * keyboard.
676 */
677
678 #ifdef KERNEL
679 extern int kb_mode;
680 #endif
681
682 #define KDSKBDMODE _IOW('K', 1, int) /* set keyboard mode */
683 #define KB_EVENT 1
684 #define KB_ASCII 2
685
686 #define KDGKBDTYPE _IOR('K', 2, int) /* get keyboard type */
687 #define KB_VANILLAKB 0
688
689 struct X_kdb {
690 u_int *ptr;
691 u_int size;
692 };
693
694 #define K_X_KDB_ENTER _IOW('K', 16, struct X_kdb)
695 #define K_X_KDB_EXIT _IOW('K', 17, struct X_kdb)
696
697 #define K_X_IN 0x01000000
698 #define K_X_OUT 0x02000000
699 #define K_X_BYTE 0x00010000
700 #define K_X_WORD 0x00020000
701 #define K_X_LONG 0x00040000
702 #define K_X_TYPE 0x03070000
703 #define K_X_PORT 0x0000ffff
704
705 typedef u_short kev_type; /* kd event type */
706
707 /* (used for event records) */
708 struct mouse_motion {
709 short mm_deltaX; /* units? */
710 short mm_deltaY;
711 };
712
713 typedef struct {
714 kev_type type; /* see below */
715 struct timeval time; /* timestamp */
716 union { /* value associated with event */
717 boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */
718 Scancode sc; /* KEYBD_EVENT */
719 struct mouse_motion mmotion; /* MOUSE_MOTION */
720 } value;
721 } kd_event;
722 #define m_deltaX mmotion.mm_deltaX
723 #define m_deltaY mmotion.mm_deltaY
724
725 /*
726 * kd_event ID's.
727 */
728 #define MOUSE_LEFT 1 /* mouse left button up/down */
729 #define MOUSE_MIDDLE 2
730 #define MOUSE_RIGHT 3
731 #define MOUSE_MOTION 4 /* mouse motion */
732 #define KEYBD_EVENT 5 /* key up/down */
733
734 #endif /* _KD_H_ */
Cache object: 6dceccf65c9989dbdc96c4d5a1df4160
|