Annotation of Gnu-Mach/i386/i386at/kd.h, revision 1.1.1.6

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);
1.1.1.6 ! root      705: extern void kd_putc_esc (u_char);
1.1.1.4   root      706: extern void kd_putc (u_char);
                    707: extern void kd_parseesc (void);
                    708: extern void kd_down (void);
                    709: extern void kd_up (void);
                    710: extern void kd_cr (void);
                    711: extern void kd_tab (void);
                    712: extern void kd_left (void);
                    713: extern void kd_right (void);
                    714: extern void kd_scrollup (void);
                    715: extern void kd_scrolldn (void);
                    716: extern void kd_cls (void);
                    717: extern void kd_home (void);
                    718: extern void kd_insch (int number);
                    719: extern void kd_cltobcur (void);
                    720: extern void kd_cltopcur (void);
                    721: extern void kd_cltoecur (void);
                    722: extern void kd_clfrbcur (void);
                    723: extern void kd_eraseln (void);
                    724: extern void kd_insln (int);
                    725: extern void kd_delln (int);
                    726: extern void kd_delch (int);
                    727: extern void kd_erase (int);
                    728: extern void kd_bellon (void);
                    729: extern void kd_belloff (void *param);
                    730: extern void kdinit (void);
                    731: extern int kdsetkbent (struct kbentry *, int);
                    732: extern int kdgetkbent (struct kbentry *);
                    733: extern int kdsetbell (int, int);
                    734: extern void kd_resend (void);
                    735: extern void kd_handle_ack (void);
                    736: extern int kd_kbd_magic (int);
1.1.1.5   root      737: extern unsigned int kdstate2idx (unsigned int, boolean_t);
1.1.1.4   root      738: extern void kd_parserest (u_char *);
                    739: extern int kdcnprobe(struct consdev *cp);
                    740: extern int kdcninit(struct consdev *cp);
                    741: extern int kdcngetc(dev_t dev, int wait);
                    742: extern int kdcnmaygetc (void);
                    743: extern int kdcnputc(dev_t dev, int c);
1.1.1.6 ! root      744: extern void kd_setpos(csrpos_t newpos);
1.1.1.4   root      745: 
                    746: extern void kd_slmwd (void *start, int count, int value);
                    747: extern void kd_slmscu (void *from, void *to, int count);
                    748: extern void kd_slmscd (void *from, void *to, int count);
                    749: 
                    750: extern void kdintr(int vec);
                    751: 
1.1.1.5   root      752: #if MACH_KDB
                    753: extern void kdb_kintr(void);
                    754: #endif /* MACH_KDB */
                    755: 
                    756: extern int kdopen(dev_t dev, int flag, io_req_t ior);
                    757: extern void kdclose(dev_t dev, int flag);
                    758: extern int kdread(dev_t dev, io_req_t uio);
                    759: extern int kdwrite(dev_t dev, io_req_t uio);
                    760: 
                    761: extern io_return_t kdgetstat(
                    762:        dev_t           dev,
                    763:        int             flavor,
                    764:        int             *data,
                    765:        natural_t       *count);
                    766: 
                    767: extern io_return_t kdsetstat(
                    768:        dev_t           dev,
                    769:        int             flavor,
                    770:        int *           data,
                    771:        natural_t       count);
                    772: 
                    773: extern int kdportdeath(dev_t dev, mach_port_t port);
                    774: extern int kdmmap(dev_t dev, vm_offset_t off, vm_prot_t prot);
                    775: 
                    776: boolean_t kdcheckmagic(Scancode scancode);
                    777: 
                    778: int do_modifier(int state, Scancode c, boolean_t up);
                    779: 
                    780: /*
                    781:  * Generic routines for bitmap devices (i.e., assume no hardware
                    782:  * assist).  Assumes a simple byte ordering (i.e., a byte at a lower
                    783:  * address is to the left of the byte at the next higher address).
                    784:  * For the 82786, this works anyway if the characters are 2 bytes
                    785:  * wide.  (more bubble gum and paper clips.)
                    786:  *
                    787:  * See the comments above (in i386at/kd.c) about SLAMBPW.
                    788:  */
                    789: void bmpch2bit(csrpos_t pos, short *xb, short *yb);
                    790: void bmppaintcsr(csrpos_t pos, u_char val);
                    791: u_char *bit2fbptr(short        xb, short yb);
                    792: 
                    793: unsigned char kd_getdata(void);
                    794: unsigned char state2leds(int state);
                    795: 
                    796: void kdstart(struct tty *tp);
                    797: void kdstop(struct tty *tp, int flags);
                    798: 
                    799: void kd_xga_init(void);
                    800: 
1.1       root      801: #endif /* _KD_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.