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/dev/atkbdc/atkbdcreg.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  * Copyright (c) 1996-1999
    3  * Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp)
    4  * All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. The name of the author may not be used to endorse or promote 
   15  *    products derived from this software without specific prior written 
   16  *    permission.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   28  * SUCH DAMAGE.
   29  *
   30  * $FreeBSD: releng/7.3/sys/dev/atkbdc/atkbdcreg.h 147271 2005-06-10 20:56:38Z marius $
   31  * from kbdio.h,v 1.8 1998/09/25 11:55:46 yokota Exp
   32  */
   33 
   34 #ifndef _DEV_ATKBDC_ATKBDCREG_H_
   35 #define _DEV_ATKBDC_ATKBDCREG_H_
   36 
   37 #include "opt_kbd.h"    /* Structures depend on the value if KBDIO_DEBUG */
   38 
   39 /* constants */
   40 
   41 /* I/O ports */
   42 #define KBD_STATUS_PORT         4       /* status port, read */
   43 #define KBD_COMMAND_PORT        4       /* controller command port, write */
   44 #define KBD_DATA_PORT           0       /* data port, read/write 
   45                                          * also used as keyboard command
   46                                          * and mouse command port 
   47                                          */
   48 
   49 /* controller commands (sent to KBD_COMMAND_PORT) */
   50 #define KBDC_SET_COMMAND_BYTE   0x0060
   51 #define KBDC_GET_COMMAND_BYTE   0x0020
   52 #define KBDC_WRITE_TO_AUX       0x00d4
   53 #define KBDC_DISABLE_AUX_PORT   0x00a7
   54 #define KBDC_ENABLE_AUX_PORT    0x00a8
   55 #define KBDC_TEST_AUX_PORT      0x00a9
   56 #define KBDC_DIAGNOSE           0x00aa
   57 #define KBDC_TEST_KBD_PORT      0x00ab
   58 #define KBDC_DISABLE_KBD_PORT   0x00ad
   59 #define KBDC_ENABLE_KBD_PORT    0x00ae
   60 
   61 /* controller command byte (set by KBDC_SET_COMMAND_BYTE) */
   62 #define KBD_TRANSLATION         0x0040
   63 #define KBD_RESERVED_BITS       0x0004
   64 #define KBD_OVERRIDE_KBD_LOCK   0x0008
   65 #define KBD_ENABLE_KBD_PORT     0x0000
   66 #define KBD_DISABLE_KBD_PORT    0x0010
   67 #define KBD_ENABLE_AUX_PORT     0x0000
   68 #define KBD_DISABLE_AUX_PORT    0x0020
   69 #define KBD_ENABLE_AUX_INT      0x0002
   70 #define KBD_DISABLE_AUX_INT     0x0000
   71 #define KBD_ENABLE_KBD_INT      0x0001
   72 #define KBD_DISABLE_KBD_INT     0x0000
   73 #define KBD_KBD_CONTROL_BITS    (KBD_DISABLE_KBD_PORT | KBD_ENABLE_KBD_INT)
   74 #define KBD_AUX_CONTROL_BITS    (KBD_DISABLE_AUX_PORT | KBD_ENABLE_AUX_INT)
   75 
   76 /* keyboard device commands (sent to KBD_DATA_PORT) */
   77 #define KBDC_RESET_KBD          0x00ff
   78 #define KBDC_ENABLE_KBD         0x00f4
   79 #define KBDC_DISABLE_KBD        0x00f5
   80 #define KBDC_SET_DEFAULTS       0x00f6
   81 #define KBDC_SEND_DEV_ID        0x00f2
   82 #define KBDC_SET_LEDS           0x00ed
   83 #define KBDC_ECHO               0x00ee
   84 #define KBDC_SET_SCANCODE_SET   0x00f0
   85 #define KBDC_SET_TYPEMATIC      0x00f3
   86 
   87 /* aux device commands (sent to KBD_DATA_PORT) */
   88 #define PSMC_RESET_DEV          0x00ff
   89 #define PSMC_ENABLE_DEV         0x00f4
   90 #define PSMC_DISABLE_DEV        0x00f5
   91 #define PSMC_SET_DEFAULTS       0x00f6
   92 #define PSMC_SEND_DEV_ID        0x00f2
   93 #define PSMC_SEND_DEV_STATUS    0x00e9
   94 #define PSMC_SEND_DEV_DATA      0x00eb
   95 #define PSMC_SET_SCALING11      0x00e6
   96 #define PSMC_SET_SCALING21      0x00e7
   97 #define PSMC_SET_RESOLUTION     0x00e8
   98 #define PSMC_SET_STREAM_MODE    0x00ea
   99 #define PSMC_SET_REMOTE_MODE    0x00f0
  100 #define PSMC_SET_SAMPLING_RATE  0x00f3
  101 
  102 /* PSMC_SET_RESOLUTION argument */
  103 #define PSMD_RES_LOW            0       /* typically 25ppi */
  104 #define PSMD_RES_MEDIUM_LOW     1       /* typically 50ppi */
  105 #define PSMD_RES_MEDIUM_HIGH    2       /* typically 100ppi (default) */
  106 #define PSMD_RES_HIGH           3       /* typically 200ppi */
  107 #define PSMD_MAX_RESOLUTION     PSMD_RES_HIGH
  108 
  109 /* PSMC_SET_SAMPLING_RATE */
  110 #define PSMD_MAX_RATE           255     /* FIXME: not sure if it's possible */
  111 
  112 /* status bits (KBD_STATUS_PORT) */
  113 #define KBDS_BUFFER_FULL        0x0021
  114 #define KBDS_ANY_BUFFER_FULL    0x0001
  115 #define KBDS_KBD_BUFFER_FULL    0x0001
  116 #define KBDS_AUX_BUFFER_FULL    0x0021
  117 #define KBDS_INPUT_BUFFER_FULL  0x0002
  118 
  119 /* return code */
  120 #define KBD_ACK                 0x00fa
  121 #define KBD_RESEND              0x00fe
  122 #define KBD_RESET_DONE          0x00aa
  123 #define KBD_RESET_FAIL          0x00fc
  124 #define KBD_DIAG_DONE           0x0055
  125 #define KBD_DIAG_FAIL           0x00fd
  126 #define KBD_ECHO                0x00ee
  127 
  128 #define PSM_ACK                 0x00fa
  129 #define PSM_RESEND              0x00fe
  130 #define PSM_RESET_DONE          0x00aa
  131 #define PSM_RESET_FAIL          0x00fc
  132 
  133 /* aux device ID */
  134 #define PSM_MOUSE_ID            0
  135 #define PSM_BALLPOINT_ID        2
  136 #define PSM_INTELLI_ID          3
  137 #define PSM_EXPLORER_ID         4
  138 #define PSM_4DMOUSE_ID          6
  139 #define PSM_4DPLUS_ID           8
  140 #define PSM_4DPLUS_RFSW35_ID    24
  141 
  142 #ifdef _KERNEL
  143 
  144 #define ATKBDC_DRIVER_NAME      "atkbdc"
  145 
  146 /* 
  147  * driver specific options: the following options may be set by
  148  * `options' statements in the kernel configuration file. 
  149  */
  150 
  151 /* retry count */
  152 #ifndef KBD_MAXRETRY
  153 #define KBD_MAXRETRY    3
  154 #endif
  155 
  156 /* timing parameters */
  157 #ifndef KBD_RESETDELAY
  158 #define KBD_RESETDELAY  200     /* wait 200msec after kbd/mouse reset */
  159 #endif
  160 #ifndef KBD_MAXWAIT
  161 #define KBD_MAXWAIT     5       /* wait 5 times at most after reset */
  162 #endif
  163 
  164 /* I/O recovery time */
  165 #define KBDC_DELAYTIME  20
  166 #define KBDD_DELAYTIME  7
  167 
  168 /* debug option */
  169 #ifndef KBDIO_DEBUG
  170 #define KBDIO_DEBUG     0
  171 #endif
  172 
  173 /* end of driver specific options */
  174 
  175 /* types/structures */
  176 
  177 #define KBDQ_BUFSIZE    32
  178 
  179 typedef struct _kqueue {
  180     int head;
  181     int tail;
  182     unsigned char q[KBDQ_BUFSIZE];
  183 #if KBDIO_DEBUG >= 2
  184     int call_count;
  185     int qcount;
  186     int max_qcount;
  187 #endif
  188 } kqueue;
  189 
  190 struct resource;
  191 
  192 typedef struct atkbdc_softc {
  193     struct resource *port0;     /* data port */
  194     struct resource *port1;     /* status port */
  195     bus_space_tag_t iot;
  196     bus_space_handle_t ioh0;
  197     bus_space_handle_t ioh1;
  198     int command_byte;           /* current command byte value */
  199     int command_mask;           /* command byte mask bits for kbd/aux devices */
  200     int lock;                   /* FIXME: XXX not quite a semaphore... */
  201     kqueue kbd;                 /* keyboard data queue */
  202     kqueue aux;                 /* auxiliary data queue */
  203 } atkbdc_softc_t; 
  204 
  205 enum kbdc_device_ivar {
  206         KBDC_IVAR_VENDORID,
  207         KBDC_IVAR_SERIAL,
  208         KBDC_IVAR_LOGICALID,
  209         KBDC_IVAR_COMPATID, 
  210 };
  211 
  212 typedef caddr_t KBDC;
  213 
  214 #define KBDC_RID_KBD    0
  215 #define KBDC_RID_AUX    1
  216 
  217 /* function prototypes */
  218 
  219 atkbdc_softc_t *atkbdc_get_softc(int unit);
  220 int atkbdc_probe_unit(int unit, struct resource *port0, struct resource *port1);
  221 int atkbdc_attach_unit(int unit, atkbdc_softc_t *sc, struct resource *port0,
  222                        struct resource *port1);
  223 int atkbdc_configure(void);
  224 
  225 KBDC atkbdc_open(int unit);
  226 int kbdc_lock(KBDC kbdc, int lock);
  227 int kbdc_data_ready(KBDC kbdc);
  228 
  229 int write_controller_command(KBDC kbdc,int c);
  230 int write_controller_data(KBDC kbdc,int c);
  231 
  232 int write_kbd_command(KBDC kbdc,int c);
  233 int write_aux_command(KBDC kbdc,int c);
  234 int send_kbd_command(KBDC kbdc,int c);
  235 int send_aux_command(KBDC kbdc,int c);
  236 int send_kbd_command_and_data(KBDC kbdc,int c,int d);
  237 int send_aux_command_and_data(KBDC kbdc,int c,int d);
  238 
  239 int read_controller_data(KBDC kbdc);
  240 int read_kbd_data(KBDC kbdc);
  241 int read_kbd_data_no_wait(KBDC kbdc);
  242 int read_aux_data(KBDC kbdc);
  243 int read_aux_data_no_wait(KBDC kbdc);
  244 
  245 void empty_kbd_buffer(KBDC kbdc, int t);
  246 void empty_aux_buffer(KBDC kbdc, int t);
  247 void empty_both_buffers(KBDC kbdc, int t);
  248 
  249 int reset_kbd(KBDC kbdc);
  250 int reset_aux_dev(KBDC kbdc);
  251 
  252 int test_controller(KBDC kbdc);
  253 int test_kbd_port(KBDC kbdc);
  254 int test_aux_port(KBDC kbdc);
  255 
  256 int kbdc_get_device_mask(KBDC kbdc);
  257 void kbdc_set_device_mask(KBDC kbdc, int mask);
  258 
  259 int get_controller_command_byte(KBDC kbdc);
  260 int set_controller_command_byte(KBDC kbdc, int command, int flag);
  261 
  262 #endif /* _KERNEL */
  263 
  264 #endif /* !_DEV_ATKBDC_ATKBDCREG_H_ */

Cache object: 82e0d167f51917da52cfd5daac9e4f9c


[ 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.