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