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