1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  */
  25 
  26 #ifndef _SYS_KBIO_H
  27 #define _SYS_KBIO_H
  28 
  29 #pragma ident   "%Z%%M% %I%     %E% SMI"        /* SunOS4.0 1.23 */
  30 
  31 #ifdef  __cplusplus
  32 extern "C" {
  33 #endif
  34 
  35 /*
  36  * Keyboard related ioctls
  37  */
  38 
  39 /*
  40  * See sys/kbd.h for TR_NONE (don't translate) and TR_ASCII
  41  * (translate to ASCII) TR_EVENT (translate to virtual input
  42  * device codes)
  43  */
  44 #define KIOC            ('k'<<8)
  45 
  46 #if defined(__i386) || defined(__i386_COMPAT)
  47 
  48 /*
  49  * For x86, these numbers conflict with KD "Xenix" ioctl numbers, so each
  50  * conflicting command has been offset by 30.
  51  */
  52 #define KIOCTRANS       (KIOC|30)       /* set keyboard translation */
  53 #define KIOCGTRANS      (KIOC|35)       /* get keyboard translation */
  54 #define KIOCTRANSABLE   (KIOC|36)       /* set keyboard translatability */
  55 #define KIOCGTRANSABLE  (KIOC|37)       /* get keyboard translatability */
  56 
  57 #else   /* __i386 || __i386_COMPAT */
  58 
  59 #define KIOCTRANS       (KIOC|0)        /* set keyboard translation */
  60 #define KIOCGTRANS      (KIOC|5)        /* get keyboard translation */
  61 #define KIOCTRANSABLE   (KIOC|6)        /* set keyboard translatability */
  62 #define KIOCGTRANSABLE  (KIOC|7)        /* get keyboard translatability */
  63 
  64 #endif  /* __i386 || __i386_COMPAT */
  65 
  66 
  67 #define TR_CANNOT       0       /* Cannot translate keyboard using tables */
  68 #define TR_CAN          1       /* Can translate keyboard using tables */
  69 
  70 /*
  71  * Old-style keymap entry, for backwards compatibility only.
  72  */
  73 struct  kiockey {
  74         int     kio_tablemask;  /* Translation table (one of: 0, CAPSMASK, */
  75                                 /* SHIFTMASK, CTRLMASK, UPMASK, */
  76                                 /* ALTGRAPHMASK, NUMLOCKMASK) */
  77 #define KIOCABORT1      -1      /* Special "mask": abort1 keystation */
  78 #define KIOCABORT2      -2      /* Special "mask": abort2 keystation */
  79 #define KIOCABORT1A     -3      /* Special "mask": alt abort1 keystation */
  80         uchar_t kio_station;    /* Physical keyboard key station (0-127) */
  81         uchar_t kio_entry;      /* Translation table station's entry */
  82         char    kio_string[10]; /* Value for STRING entries (null terminated) */
  83 };
  84 
  85 /*
  86  * Set kio_tablemask table's kio_station to kio_entry.
  87  * Copy kio_string to string table if kio_entry is between STRING and
  88  * STRING+15.  EINVAL is possible if there are invalid arguments.
  89  */
  90 #if defined(__i386) || defined(__i386_COMPAT)
  91 #define KIOCSETKEY      (KIOC|31)       /* avoid conflict with "SETFKEY" */
  92 #else
  93 #define KIOCSETKEY      (KIOC|1)
  94 #endif
  95 
  96 /*
  97  * Get kio_tablemask table's kio_station to kio_entry.
  98  * Get kio_string from string table if kio_entry is between STRING and
  99  * STRING+15.  EINVAL is possible if there are invalid arguments.
 100  */
 101 #if defined(__i386) || defined(__i386_COMPAT)
 102 #define KIOCGETKEY      (KIOC|32)       /* avoid conflict with "GIO_SCRNMAP" */
 103 #else
 104 #define KIOCGETKEY      (KIOC|2)
 105 #endif
 106 
 107 /*
 108  * Send the keyboard device a control command.  sys/kbd.h contains
 109  * the constants that define the commands.  Normal values are:
 110  * KBD_CMD_BELL, KBD_CMD_NOBELL, KBD_CMD_CLICK, KBD_CMD_NOCLICK.
 111  * Inappropriate commands for particular keyboard types are ignored.
 112  *
 113  * Since there is no reliable way to get the state of the bell or click
 114  * or LED (because we can't query the kdb, and also one could do writes
 115  * to the appropriate serial driver--thus going around this ioctl)
 116  * we don't provide an equivalent state querying ioctl.
 117  */
 118 #define KIOCCMD         (KIOC|8)
 119 
 120 /*
 121  * Get keyboard type.  Return values are one of KB_* from sys/kbd.h,
 122  * e.g., KB_KLUNK, KB_VT100, KB_SUN2, KB_SUN3, KB_SUN4, KB_ASCII.
 123  * -1 means that the type is not known.
 124  */
 125 #define KIOCTYPE        (KIOC|9)        /* get keyboard type */
 126 
 127 /*
 128  * Set flag indicating whether keystrokes get routed to /dev/console.
 129  */
 130 #define KIOCSDIRECT     (KIOC|10)
 131 
 132 /*
 133  * Get flag indicating whether keystrokes get routed to /dev/console.
 134  */
 135 #if defined(__i386) || defined(__i386_COMPAT)
 136 #define KIOCGDIRECT     (KIOC|41)       /* avoid conflict with "GIO_STRMAP" */
 137 #else
 138 #define KIOCGDIRECT     (KIOC|11)
 139 #endif
 140 
 141 /*
 142  * New-style key map entry.
 143  */
 144 struct kiockeymap {
 145         int     kio_tablemask;  /* Translation table (one of: 0, CAPSMASK, */
 146                                 /*  SHIFTMASK, CTRLMASK, UPMASK, */
 147                                 /*  ALTGRAPHMASK) */
 148         uchar_t kio_station;    /* Physical keyboard key station (0-127) */
 149         ushort_t kio_entry;     /* Translation table station's entry */
 150         char    kio_string[10]; /* Value for STRING entries (null terminated) */
 151 };
 152 
 153 /*
 154  * Set kio_tablemask table's kio_station to kio_entry.
 155  * Copy kio_string to string table if kio_entry is between STRING and
 156  * STRING+15.  EINVAL is possible if there are invalid arguments.
 157  */
 158 #if defined(__i386) || defined(__i386_COMPAT)
 159 #define KIOCSKEY        (KIOC|42)       /* avoid conflict with "PIO_STRMAP" */
 160 #else
 161 #define KIOCSKEY        (KIOC|12)
 162 #endif
 163 
 164 /*
 165  * Get kio_tablemask table's kio_station to kio_entry.
 166  * Get kio_string from string table if kio_entry is between STRING and
 167  * STRING+15.  EINVAL is possible if there are invalid arguments.
 168  */
 169 #define KIOCGKEY        (KIOC|13)
 170 
 171 /*
 172  * Set and get LED state.
 173  */
 174 #define KIOCSLED        (KIOC|14)
 175 #define KIOCGLED        (KIOC|15)
 176 
 177 /*
 178  * Set and get compatibility mode.
 179  */
 180 #define KIOCSCOMPAT     (KIOC|16)
 181 #define KIOCGCOMPAT     (KIOC|17)
 182 
 183 /*
 184  * Set and get keyboard layout.
 185  */
 186 #define KIOCSLAYOUT     (KIOC|19)
 187 #define KIOCLAYOUT      (KIOC|20)
 188 
 189 /*
 190  * KIOCSKABORTEN:
 191  *
 192  * Enable/Disable/Alternate Keyboard abort effect (Stop/A, Break or other seq).
 193  * The argument is a pointer to an integer.  If the integer is zero,
 194  * keyboard abort is disabled, one will enable keyboard abort (hardware BREAK
 195  * signal), two will revert to the Alternative Break Sequence.  NB: This ioctl
 196  * requires root credentials and applies to serial input devices and keyboards.
 197  * When the Alternative Break Sequence is enabled it applies to serial input
 198  * devices ONLY.
 199  */
 200 #define KIOCSKABORTEN   (KIOC|21)
 201 
 202 #define KIOCABORTDISABLE        0       /* Disable Aborts  */
 203 #define KIOCABORTENABLE         1       /* Enable BREAK Signal Aborts  */
 204 #define KIOCABORTALTERNATE      2       /* Enable Alternative Aborts   */
 205 
 206 /*
 207  * Get/Set Keyboard autorepeat delay/rate.
 208  * Use millisecond as unit used by the user-level application
 209  */
 210 #define KIOCGRPTDELAY   (KIOC|22)
 211 #define KIOCSRPTDELAY   (KIOC|23)
 212 #define KIOCGRPTRATE    (KIOC|24)
 213 #define KIOCSRPTRATE    (KIOC|25)
 214 
 215 /* Set keyboard and console beeper frequencies */
 216 #define KIOCSETFREQ     (KIOC|26)
 217 
 218 /* Beeper type for struct freq_request */
 219 enum fr_beep_type {CONSOLE_BEEP = 1, KBD_BEEP = 2};
 220 
 221 /* Frequency request structure */
 222 struct freq_request {
 223         enum fr_beep_type type; /* Beeper type */
 224         int16_t freq;           /* Frequency */
 225 };
 226 
 227 #define KIOCMKTONE      (KIOC|27)
 228 
 229 /*
 230  * For historical reasons, the frequency argument to KIOCMKTONE is
 231  * in i8254 clock cycles.
 232  */
 233 
 234 #define PIT_HZ          1193182         /* 8254's cycles per second */
 235 
 236 #define KDMKTONE        KIOCMKTONE
 237 
 238 /* Used to control the AutoRepeat Min-delay and Min-Rate */
 239 #define KIOCRPTDELAY_MIN        (100)
 240 #define KIOCRPTRATE_MIN         (1)
 241 
 242 #ifdef  __cplusplus
 243 }
 244 #endif
 245 
 246 #endif  /* _SYS_KBIO_H */