1617b9080SKazutaka YOKOTA /*- 2718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3718cf2ccSPedro F. Giffuni * 4617b9080SKazutaka YOKOTA * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> 5617b9080SKazutaka YOKOTA * All rights reserved. 6617b9080SKazutaka YOKOTA * 7617b9080SKazutaka YOKOTA * Redistribution and use in source and binary forms, with or without 8617b9080SKazutaka YOKOTA * modification, are permitted provided that the following conditions 9617b9080SKazutaka YOKOTA * are met: 10617b9080SKazutaka YOKOTA * 1. Redistributions of source code must retain the above copyright 11617b9080SKazutaka YOKOTA * notice, this list of conditions and the following disclaimer as 12617b9080SKazutaka YOKOTA * the first lines of this file unmodified. 13617b9080SKazutaka YOKOTA * 2. Redistributions in binary form must reproduce the above copyright 14617b9080SKazutaka YOKOTA * notice, this list of conditions and the following disclaimer in the 15617b9080SKazutaka YOKOTA * documentation and/or other materials provided with the distribution. 16617b9080SKazutaka YOKOTA * 17617b9080SKazutaka YOKOTA * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 18617b9080SKazutaka YOKOTA * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19617b9080SKazutaka YOKOTA * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20617b9080SKazutaka YOKOTA * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21617b9080SKazutaka YOKOTA * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22617b9080SKazutaka YOKOTA * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23617b9080SKazutaka YOKOTA * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24617b9080SKazutaka YOKOTA * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25617b9080SKazutaka YOKOTA * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26617b9080SKazutaka YOKOTA * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27617b9080SKazutaka YOKOTA * 28c3aac50fSPeter Wemm * $FreeBSD$ 29617b9080SKazutaka YOKOTA */ 30617b9080SKazutaka YOKOTA 31617b9080SKazutaka YOKOTA #ifndef _DEV_KBD_KBDREG_H_ 32617b9080SKazutaka YOKOTA #define _DEV_KBD_KBDREG_H_ 33617b9080SKazutaka YOKOTA 34617b9080SKazutaka YOKOTA /* forward declarations */ 35617b9080SKazutaka YOKOTA typedef struct keyboard keyboard_t; 36617b9080SKazutaka YOKOTA struct keymap; 37617b9080SKazutaka YOKOTA struct accentmap; 38617b9080SKazutaka YOKOTA struct fkeytab; 39800da3b2SKazutaka YOKOTA struct cdevsw; 40617b9080SKazutaka YOKOTA 41617b9080SKazutaka YOKOTA /* call back funcion */ 42617b9080SKazutaka YOKOTA typedef int kbd_callback_func_t(keyboard_t *kbd, int event, 43617b9080SKazutaka YOKOTA void *arg); 44617b9080SKazutaka YOKOTA /* event types */ 45617b9080SKazutaka YOKOTA #define KBDIO_KEYINPUT 0 46617b9080SKazutaka YOKOTA #define KBDIO_UNLOADING 1 47617b9080SKazutaka YOKOTA 48617b9080SKazutaka YOKOTA typedef struct keyboard_callback { 49617b9080SKazutaka YOKOTA kbd_callback_func_t *kc_func; 50617b9080SKazutaka YOKOTA void *kc_arg; 51617b9080SKazutaka YOKOTA } keyboard_callback_t; 52617b9080SKazutaka YOKOTA 53617b9080SKazutaka YOKOTA /* keyboard */ 54617b9080SKazutaka YOKOTA struct keyboard { 55617b9080SKazutaka YOKOTA /* the following fields are managed by kbdio */ 56617b9080SKazutaka YOKOTA int kb_index; /* kbdio index# */ 57617b9080SKazutaka YOKOTA int kb_minor; /* minor number of the sub-device */ 58617b9080SKazutaka YOKOTA int kb_flags; /* internal flags */ 59617b9080SKazutaka YOKOTA #define KB_VALID (1 << 16) /* this entry is valid */ 60617b9080SKazutaka YOKOTA #define KB_NO_DEVICE (1 << 17) /* device not present */ 61617b9080SKazutaka YOKOTA #define KB_PROBED (1 << 18) /* device probed */ 62617b9080SKazutaka YOKOTA #define KB_INITIALIZED (1 << 19) /* device initialized */ 63617b9080SKazutaka YOKOTA #define KB_REGISTERED (1 << 20) /* device registered to kbdio */ 64617b9080SKazutaka YOKOTA #define KB_BUSY (1 << 21) /* device used by a client */ 65a449b18aSMaksim Yevmenkin #define KB_POLLED (1 << 22) /* device is polled */ 66617b9080SKazutaka YOKOTA int kb_active; /* 0: inactive */ 67617b9080SKazutaka YOKOTA void *kb_token; /* id of the current client */ 68617b9080SKazutaka YOKOTA keyboard_callback_t kb_callback;/* callback function */ 69617b9080SKazutaka YOKOTA 70617b9080SKazutaka YOKOTA /* 71617b9080SKazutaka YOKOTA * Device configuration flags: 72617b9080SKazutaka YOKOTA * The upper 16 bits are common between various keyboard devices. 73617b9080SKazutaka YOKOTA * The lower 16 bits are device-specific. 74617b9080SKazutaka YOKOTA */ 75617b9080SKazutaka YOKOTA int kb_config; 76617b9080SKazutaka YOKOTA #define KB_CONF_PROBE_ONLY (1 << 16) /* probe only, don't initialize */ 77617b9080SKazutaka YOKOTA 78617b9080SKazutaka YOKOTA /* the following fields are set up by the driver */ 79617b9080SKazutaka YOKOTA char *kb_name; /* driver name */ 80617b9080SKazutaka YOKOTA int kb_unit; /* unit # */ 81617b9080SKazutaka YOKOTA int kb_type; /* KB_84, KB_101, KB_OTHER,... */ 82617b9080SKazutaka YOKOTA int kb_io_base; /* port# if any */ 83617b9080SKazutaka YOKOTA int kb_io_size; /* # of occupied port */ 84617b9080SKazutaka YOKOTA int kb_led; /* LED status */ 85617b9080SKazutaka YOKOTA struct keymap *kb_keymap; /* key map */ 86617b9080SKazutaka YOKOTA struct accentmap *kb_accentmap; /* accent map */ 87617b9080SKazutaka YOKOTA struct fkeytab *kb_fkeytab; /* function key strings */ 88617b9080SKazutaka YOKOTA int kb_fkeytab_size;/* # of function key strings */ 89617b9080SKazutaka YOKOTA void *kb_data; /* the driver's private data */ 90e9deda23SKazutaka YOKOTA int kb_delay1; 91e9deda23SKazutaka YOKOTA int kb_delay2; 92e9deda23SKazutaka YOKOTA #define KB_DELAY1 500 93e9deda23SKazutaka YOKOTA #define KB_DELAY2 100 9482d654e8SKazutaka YOKOTA unsigned long kb_count; /* # of processed key strokes */ 9576495257SKazutaka YOKOTA u_char kb_lastact[NUM_KEYS/2]; 9689c9c53dSPoul-Henning Kamp struct cdev *kb_dev; 97617b9080SKazutaka YOKOTA }; 98617b9080SKazutaka YOKOTA 99617b9080SKazutaka YOKOTA #define KBD_IS_VALID(k) ((k)->kb_flags & KB_VALID) 100617b9080SKazutaka YOKOTA #define KBD_VALID(k) ((k)->kb_flags |= KB_VALID) 101617b9080SKazutaka YOKOTA #define KBD_INVALID(k) ((k)->kb_flags &= ~KB_VALID) 102617b9080SKazutaka YOKOTA #define KBD_HAS_DEVICE(k) (!((k)->kb_flags & KB_NO_DEVICE)) 103617b9080SKazutaka YOKOTA #define KBD_FOUND_DEVICE(k) ((k)->kb_flags &= ~KB_NO_DEVICE) 104617b9080SKazutaka YOKOTA #define KBD_IS_PROBED(k) ((k)->kb_flags & KB_PROBED) 105617b9080SKazutaka YOKOTA #define KBD_PROBE_DONE(k) ((k)->kb_flags |= KB_PROBED) 106617b9080SKazutaka YOKOTA #define KBD_IS_INITIALIZED(k) ((k)->kb_flags & KB_INITIALIZED) 107617b9080SKazutaka YOKOTA #define KBD_INIT_DONE(k) ((k)->kb_flags |= KB_INITIALIZED) 108617b9080SKazutaka YOKOTA #define KBD_IS_CONFIGURED(k) ((k)->kb_flags & KB_REGISTERED) 109617b9080SKazutaka YOKOTA #define KBD_CONFIG_DONE(k) ((k)->kb_flags |= KB_REGISTERED) 110617b9080SKazutaka YOKOTA #define KBD_IS_BUSY(k) ((k)->kb_flags & KB_BUSY) 111617b9080SKazutaka YOKOTA #define KBD_BUSY(k) ((k)->kb_flags |= KB_BUSY) 112617b9080SKazutaka YOKOTA #define KBD_UNBUSY(k) ((k)->kb_flags &= ~KB_BUSY) 113a449b18aSMaksim Yevmenkin #define KBD_IS_POLLED(k) ((k)->kb_flags & KB_POLLED) 114a449b18aSMaksim Yevmenkin #define KBD_POLL(k) ((k)->kb_flags |= KB_POLLED) 115a449b18aSMaksim Yevmenkin #define KBD_UNPOLL(k) ((k)->kb_flags &= ~KB_POLLED) 116617b9080SKazutaka YOKOTA #define KBD_IS_ACTIVE(k) ((k)->kb_active) 117617b9080SKazutaka YOKOTA #define KBD_ACTIVATE(k) (++(k)->kb_active) 118617b9080SKazutaka YOKOTA #define KBD_DEACTIVATE(k) (--(k)->kb_active) 119617b9080SKazutaka YOKOTA #define KBD_LED_VAL(k) ((k)->kb_led) 120617b9080SKazutaka YOKOTA 121617b9080SKazutaka YOKOTA /* keyboard function table */ 122e9deda23SKazutaka YOKOTA typedef int kbd_probe_t(int unit, void *arg, int flags); 123e9deda23SKazutaka YOKOTA typedef int kbd_init_t(int unit, keyboard_t **kbdp, void *arg, 124617b9080SKazutaka YOKOTA int flags); 125617b9080SKazutaka YOKOTA typedef int kbd_term_t(keyboard_t *kbd); 126e9deda23SKazutaka YOKOTA typedef int kbd_intr_t(keyboard_t *kbd, void *arg); 127617b9080SKazutaka YOKOTA typedef int kbd_test_if_t(keyboard_t *kbd); 128617b9080SKazutaka YOKOTA typedef int kbd_enable_t(keyboard_t *kbd); 129617b9080SKazutaka YOKOTA typedef int kbd_disable_t(keyboard_t *kbd); 130617b9080SKazutaka YOKOTA typedef int kbd_read_t(keyboard_t *kbd, int wait); 131617b9080SKazutaka YOKOTA typedef int kbd_check_t(keyboard_t *kbd); 132617b9080SKazutaka YOKOTA typedef u_int kbd_read_char_t(keyboard_t *kbd, int wait); 133617b9080SKazutaka YOKOTA typedef int kbd_check_char_t(keyboard_t *kbd); 134617b9080SKazutaka YOKOTA typedef int kbd_ioctl_t(keyboard_t *kbd, u_long cmd, caddr_t data); 135617b9080SKazutaka YOKOTA typedef int kbd_lock_t(keyboard_t *kbd, int lock); 136617b9080SKazutaka YOKOTA typedef void kbd_clear_state_t(keyboard_t *kbd); 137617b9080SKazutaka YOKOTA typedef int kbd_get_state_t(keyboard_t *kbd, void *buf, size_t len); 138617b9080SKazutaka YOKOTA typedef int kbd_set_state_t(keyboard_t *kbd, void *buf, size_t len); 139617b9080SKazutaka YOKOTA typedef u_char *kbd_get_fkeystr_t(keyboard_t *kbd, int fkey, 140617b9080SKazutaka YOKOTA size_t *len); 141e9deda23SKazutaka YOKOTA typedef int kbd_poll_mode_t(keyboard_t *kbd, int on); 142617b9080SKazutaka YOKOTA typedef void kbd_diag_t(keyboard_t *kbd, int level); 143617b9080SKazutaka YOKOTA 144617b9080SKazutaka YOKOTA typedef struct keyboard_switch { 145617b9080SKazutaka YOKOTA kbd_probe_t *probe; 146617b9080SKazutaka YOKOTA kbd_init_t *init; 147617b9080SKazutaka YOKOTA kbd_term_t *term; 148617b9080SKazutaka YOKOTA kbd_intr_t *intr; 149617b9080SKazutaka YOKOTA kbd_test_if_t *test_if; 150617b9080SKazutaka YOKOTA kbd_enable_t *enable; 151617b9080SKazutaka YOKOTA kbd_disable_t *disable; 152617b9080SKazutaka YOKOTA kbd_read_t *read; 153617b9080SKazutaka YOKOTA kbd_check_t *check; 154617b9080SKazutaka YOKOTA kbd_read_char_t *read_char; 155617b9080SKazutaka YOKOTA kbd_check_char_t *check_char; 156617b9080SKazutaka YOKOTA kbd_ioctl_t *ioctl; 157617b9080SKazutaka YOKOTA kbd_lock_t *lock; 158617b9080SKazutaka YOKOTA kbd_clear_state_t *clear_state; 159617b9080SKazutaka YOKOTA kbd_get_state_t *get_state; 160617b9080SKazutaka YOKOTA kbd_set_state_t *set_state; 161617b9080SKazutaka YOKOTA kbd_get_fkeystr_t *get_fkeystr; 162e9deda23SKazutaka YOKOTA kbd_poll_mode_t *poll; 163617b9080SKazutaka YOKOTA kbd_diag_t *diag; 164617b9080SKazutaka YOKOTA } keyboard_switch_t; 165617b9080SKazutaka YOKOTA 166617b9080SKazutaka YOKOTA /* keyboard driver */ 167617b9080SKazutaka YOKOTA typedef struct keyboard_driver { 168e3975643SJake Burkholder SLIST_ENTRY(keyboard_driver) link; 169617b9080SKazutaka YOKOTA char *name; 170617b9080SKazutaka YOKOTA keyboard_switch_t *kbdsw; 171617b9080SKazutaka YOKOTA int (*configure)(int); /* backdoor for the console driver */ 172617b9080SKazutaka YOKOTA } keyboard_driver_t; 173617b9080SKazutaka YOKOTA 174*58b22b9dSKyle Evans extern keyboard_switch_t **kbdsw; 175*58b22b9dSKyle Evans 176*58b22b9dSKyle Evans /* 177*58b22b9dSKyle Evans * Keyboard disciplines: call actual handlers via kbdsw[]. 178*58b22b9dSKyle Evans */ 179*58b22b9dSKyle Evans static __inline int 180*58b22b9dSKyle Evans kbdd_probe(keyboard_t *kbd, int unit, void *arg, int flags) 181*58b22b9dSKyle Evans { 182*58b22b9dSKyle Evans 183*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->probe)(unit, arg, flags)); 184*58b22b9dSKyle Evans } 185*58b22b9dSKyle Evans 186*58b22b9dSKyle Evans static __inline int 187*58b22b9dSKyle Evans kbdd_init(keyboard_t *kbd, int unit, keyboard_t **kbdpp, void *arg, int flags) 188*58b22b9dSKyle Evans { 189*58b22b9dSKyle Evans 190*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->init)(unit, kbdpp, arg, flags)); 191*58b22b9dSKyle Evans } 192*58b22b9dSKyle Evans 193*58b22b9dSKyle Evans static __inline int 194*58b22b9dSKyle Evans kbdd_term(keyboard_t *kbd) 195*58b22b9dSKyle Evans { 196*58b22b9dSKyle Evans 197*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->term)(kbd)); 198*58b22b9dSKyle Evans } 199*58b22b9dSKyle Evans 200*58b22b9dSKyle Evans static __inline int 201*58b22b9dSKyle Evans kbdd_intr(keyboard_t *kbd, void *arg) 202*58b22b9dSKyle Evans { 203*58b22b9dSKyle Evans 204*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->intr)(kbd, arg)); 205*58b22b9dSKyle Evans } 206*58b22b9dSKyle Evans 207*58b22b9dSKyle Evans static __inline int 208*58b22b9dSKyle Evans kbdd_test_if(keyboard_t *kbd) 209*58b22b9dSKyle Evans { 210*58b22b9dSKyle Evans 211*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->test_if)(kbd)); 212*58b22b9dSKyle Evans } 213*58b22b9dSKyle Evans 214*58b22b9dSKyle Evans static __inline int 215*58b22b9dSKyle Evans kbdd_enable(keyboard_t *kbd) 216*58b22b9dSKyle Evans { 217*58b22b9dSKyle Evans 218*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->enable)(kbd)); 219*58b22b9dSKyle Evans } 220*58b22b9dSKyle Evans 221*58b22b9dSKyle Evans static __inline int 222*58b22b9dSKyle Evans kbdd_disable(keyboard_t *kbd) 223*58b22b9dSKyle Evans { 224*58b22b9dSKyle Evans 225*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->disable)(kbd)); 226*58b22b9dSKyle Evans } 227*58b22b9dSKyle Evans 228*58b22b9dSKyle Evans static __inline int 229*58b22b9dSKyle Evans kbdd_read(keyboard_t *kbd, int wait) 230*58b22b9dSKyle Evans { 231*58b22b9dSKyle Evans 232*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->read)(kbd, wait)); 233*58b22b9dSKyle Evans } 234*58b22b9dSKyle Evans 235*58b22b9dSKyle Evans static __inline int 236*58b22b9dSKyle Evans kbdd_check(keyboard_t *kbd) 237*58b22b9dSKyle Evans { 238*58b22b9dSKyle Evans 239*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->check)(kbd)); 240*58b22b9dSKyle Evans } 241*58b22b9dSKyle Evans 242*58b22b9dSKyle Evans static __inline u_int 243*58b22b9dSKyle Evans kbdd_read_char(keyboard_t *kbd, int wait) 244*58b22b9dSKyle Evans { 245*58b22b9dSKyle Evans 246*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->read_char)(kbd, wait)); 247*58b22b9dSKyle Evans } 248*58b22b9dSKyle Evans 249*58b22b9dSKyle Evans static __inline int 250*58b22b9dSKyle Evans kbdd_check_char(keyboard_t *kbd) 251*58b22b9dSKyle Evans { 252*58b22b9dSKyle Evans 253*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->check_char)(kbd)); 254*58b22b9dSKyle Evans } 255*58b22b9dSKyle Evans 256*58b22b9dSKyle Evans static __inline int 257*58b22b9dSKyle Evans kbdd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data) 258*58b22b9dSKyle Evans { 259*58b22b9dSKyle Evans 260*58b22b9dSKyle Evans if (kbd == NULL) 261*58b22b9dSKyle Evans return (ENODEV); 262*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->ioctl)(kbd, cmd, data)); 263*58b22b9dSKyle Evans } 264*58b22b9dSKyle Evans 265*58b22b9dSKyle Evans static __inline int 266*58b22b9dSKyle Evans kbdd_lock(keyboard_t *kbd, int lock) 267*58b22b9dSKyle Evans { 268*58b22b9dSKyle Evans 269*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->lock)(kbd, lock)); 270*58b22b9dSKyle Evans } 271*58b22b9dSKyle Evans 272*58b22b9dSKyle Evans static __inline void 273*58b22b9dSKyle Evans kbdd_clear_state(keyboard_t *kbd) 274*58b22b9dSKyle Evans { 275*58b22b9dSKyle Evans 276*58b22b9dSKyle Evans (*kbdsw[kbd->kb_index]->clear_state)(kbd); 277*58b22b9dSKyle Evans } 278*58b22b9dSKyle Evans 279*58b22b9dSKyle Evans static __inline int 280*58b22b9dSKyle Evans kbdd_get_state(keyboard_t *kbd, void *buf, int len) 281*58b22b9dSKyle Evans { 282*58b22b9dSKyle Evans 283*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->get_state)(kbd, buf, len)); 284*58b22b9dSKyle Evans } 285*58b22b9dSKyle Evans 286*58b22b9dSKyle Evans static __inline int 287*58b22b9dSKyle Evans kbdd_set_state(keyboard_t *kbd, void *buf, int len) 288*58b22b9dSKyle Evans { 289*58b22b9dSKyle Evans 290*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->set_state)(kbd, buf, len)); 291*58b22b9dSKyle Evans } 292*58b22b9dSKyle Evans 293*58b22b9dSKyle Evans static __inline u_char * 294*58b22b9dSKyle Evans kbdd_get_fkeystr(keyboard_t *kbd, int fkey, size_t *len) 295*58b22b9dSKyle Evans { 296*58b22b9dSKyle Evans 297*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->get_fkeystr)(kbd, fkey, len)); 298*58b22b9dSKyle Evans } 299*58b22b9dSKyle Evans 300*58b22b9dSKyle Evans static __inline int 301*58b22b9dSKyle Evans kbdd_poll(keyboard_t *kbd, int on) 302*58b22b9dSKyle Evans { 303*58b22b9dSKyle Evans 304*58b22b9dSKyle Evans return ((*kbdsw[kbd->kb_index]->poll)(kbd, on)); 305*58b22b9dSKyle Evans } 306*58b22b9dSKyle Evans 307*58b22b9dSKyle Evans static __inline void 308*58b22b9dSKyle Evans kbdd_diag(keyboard_t *kbd, int level) 309*58b22b9dSKyle Evans { 310*58b22b9dSKyle Evans 311*58b22b9dSKyle Evans (*kbdsw[kbd->kb_index]->diag)(kbd, level); 312*58b22b9dSKyle Evans } 313*58b22b9dSKyle Evans 314617b9080SKazutaka YOKOTA #define KEYBOARD_DRIVER(name, sw, config) \ 315e9deda23SKazutaka YOKOTA static struct keyboard_driver name##_kbd_driver = { \ 3167a4803c7SKazutaka YOKOTA { NULL }, #name, &sw, config \ 317617b9080SKazutaka YOKOTA }; \ 318e9deda23SKazutaka YOKOTA DATA_SET(kbddriver_set, name##_kbd_driver); 319617b9080SKazutaka YOKOTA 320617b9080SKazutaka YOKOTA /* functions for the keyboard driver */ 3217a4803c7SKazutaka YOKOTA int kbd_add_driver(keyboard_driver_t *driver); 3227a4803c7SKazutaka YOKOTA int kbd_delete_driver(keyboard_driver_t *driver); 323617b9080SKazutaka YOKOTA int kbd_register(keyboard_t *kbd); 324617b9080SKazutaka YOKOTA int kbd_unregister(keyboard_t *kbd); 325617b9080SKazutaka YOKOTA keyboard_switch_t *kbd_get_switch(char *driver); 326617b9080SKazutaka YOKOTA void kbd_init_struct(keyboard_t *kbd, char *name, int type, 327617b9080SKazutaka YOKOTA int unit, int config, int port, 328617b9080SKazutaka YOKOTA int port_size); 329617b9080SKazutaka YOKOTA void kbd_set_maps(keyboard_t *kbd, struct keymap *keymap, 330617b9080SKazutaka YOKOTA struct accentmap *accmap, 331617b9080SKazutaka YOKOTA struct fkeytab *fkeymap, int fkeymap_size); 332617b9080SKazutaka YOKOTA 333617b9080SKazutaka YOKOTA /* functions for the keyboard client */ 334617b9080SKazutaka YOKOTA int kbd_allocate(char *driver, int unit, void *id, 335617b9080SKazutaka YOKOTA kbd_callback_func_t *func, void *arg); 336617b9080SKazutaka YOKOTA int kbd_release(keyboard_t *kbd, void *id); 337617b9080SKazutaka YOKOTA int kbd_change_callback(keyboard_t *kbd, void *id, 338617b9080SKazutaka YOKOTA kbd_callback_func_t *func, void *arg); 339617b9080SKazutaka YOKOTA int kbd_find_keyboard(char *driver, int unit); 34004551c6cSMaksim Yevmenkin int kbd_find_keyboard2(char *driver, int unit, int index); 341617b9080SKazutaka YOKOTA keyboard_t *kbd_get_keyboard(int index); 342617b9080SKazutaka YOKOTA 343617b9080SKazutaka YOKOTA /* a back door for the console driver to tickle the keyboard driver XXX */ 344617b9080SKazutaka YOKOTA int kbd_configure(int flags); 345617b9080SKazutaka YOKOTA /* see `kb_config' above for flag bit definitions */ 346617b9080SKazutaka YOKOTA 34748f2b006SVladimir Kondratyev /* evdev2kbd mappings */ 34848f2b006SVladimir Kondratyev void kbd_ev_event(keyboard_t *kbd, uint16_t type, 34948f2b006SVladimir Kondratyev uint16_t code, int32_t value); 35048f2b006SVladimir Kondratyev 351617b9080SKazutaka YOKOTA #ifdef KBD_INSTALL_CDEV 352617b9080SKazutaka YOKOTA 353617b9080SKazutaka YOKOTA /* virtual keyboard cdev driver functions */ 354800da3b2SKazutaka YOKOTA int kbd_attach(keyboard_t *kbd); 355800da3b2SKazutaka YOKOTA int kbd_detach(keyboard_t *kbd); 356617b9080SKazutaka YOKOTA 357617b9080SKazutaka YOKOTA #endif /* KBD_INSTALL_CDEV */ 358617b9080SKazutaka YOKOTA 359617b9080SKazutaka YOKOTA /* generic low-level keyboard functions */ 360617b9080SKazutaka YOKOTA 361617b9080SKazutaka YOKOTA /* shift key state */ 362617b9080SKazutaka YOKOTA #define SHIFTS1 (1 << 16) 363617b9080SKazutaka YOKOTA #define SHIFTS2 (1 << 17) 364617b9080SKazutaka YOKOTA #define SHIFTS (SHIFTS1 | SHIFTS2) 365617b9080SKazutaka YOKOTA #define CTLS1 (1 << 18) 366617b9080SKazutaka YOKOTA #define CTLS2 (1 << 19) 367617b9080SKazutaka YOKOTA #define CTLS (CTLS1 | CTLS2) 368617b9080SKazutaka YOKOTA #define ALTS1 (1 << 20) 369617b9080SKazutaka YOKOTA #define ALTS2 (1 << 21) 370617b9080SKazutaka YOKOTA #define ALTS (ALTS1 | ALTS2) 371617b9080SKazutaka YOKOTA #define AGRS1 (1 << 22) 372617b9080SKazutaka YOKOTA #define AGRS2 (1 << 23) 373617b9080SKazutaka YOKOTA #define AGRS (AGRS1 | AGRS2) 374617b9080SKazutaka YOKOTA #define METAS1 (1 << 24) 375617b9080SKazutaka YOKOTA #define METAS2 (1 << 25) 376617b9080SKazutaka YOKOTA #define METAS (METAS1 | METAS2) 377617b9080SKazutaka YOKOTA #define NLKDOWN (1 << 26) 378617b9080SKazutaka YOKOTA #define SLKDOWN (1 << 27) 379617b9080SKazutaka YOKOTA #define CLKDOWN (1 << 28) 380617b9080SKazutaka YOKOTA #define ALKDOWN (1 << 29) 3817642cc82SKazutaka YOKOTA #define SHIFTAON (1 << 30) 38200d25f51SPoul-Henning Kamp /* lock key state (defined in sys/kbio.h) */ 383617b9080SKazutaka YOKOTA /* 384617b9080SKazutaka YOKOTA #define CLKED LED_CAP 385617b9080SKazutaka YOKOTA #define NLKED LED_NUM 386617b9080SKazutaka YOKOTA #define SLKED LED_SCR 387617b9080SKazutaka YOKOTA #define ALKED (1 << 3) 388617b9080SKazutaka YOKOTA #define LOCK_MASK (CLKED | NLKED | SLKED | ALKED) 389617b9080SKazutaka YOKOTA #define LED_CAP (1 << 0) 390617b9080SKazutaka YOKOTA #define LED_NUM (1 << 1) 391617b9080SKazutaka YOKOTA #define LED_SCR (1 << 2) 392617b9080SKazutaka YOKOTA #define LED_MASK (LED_CAP | LED_NUM | LED_SCR) 393617b9080SKazutaka YOKOTA */ 394617b9080SKazutaka YOKOTA 395617b9080SKazutaka YOKOTA kbd_get_fkeystr_t genkbd_get_fkeystr; 396617b9080SKazutaka YOKOTA kbd_diag_t genkbd_diag; 397617b9080SKazutaka YOKOTA 398617b9080SKazutaka YOKOTA int genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg); 3999a1d7da7SKazutaka YOKOTA int genkbd_keyaction(keyboard_t *kbd, int keycode, int up, 400617b9080SKazutaka YOKOTA int *shiftstate, int *accents); 401617b9080SKazutaka YOKOTA 402617b9080SKazutaka YOKOTA #endif /* !_DEV_KBD_KBDREG_H_ */ 403