The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/i386at/kd.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 6dceccf65c9989dbdc96c4d5a1df4160


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.