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); 4421d16631SKyle Evans 4521d16631SKyle Evans /* keyboard function table */ 4621d16631SKyle Evans typedef int kbd_probe_t(int unit, void *arg, int flags); 4721d16631SKyle Evans typedef int kbd_init_t(int unit, keyboard_t **kbdp, void *arg, 4821d16631SKyle Evans int flags); 4921d16631SKyle Evans typedef int kbd_term_t(keyboard_t *kbd); 5021d16631SKyle Evans typedef int kbd_intr_t(keyboard_t *kbd, void *arg); 5121d16631SKyle Evans typedef int kbd_test_if_t(keyboard_t *kbd); 5221d16631SKyle Evans typedef int kbd_enable_t(keyboard_t *kbd); 5321d16631SKyle Evans typedef int kbd_disable_t(keyboard_t *kbd); 5421d16631SKyle Evans typedef int kbd_read_t(keyboard_t *kbd, int wait); 5521d16631SKyle Evans typedef int kbd_check_t(keyboard_t *kbd); 5621d16631SKyle Evans typedef u_int kbd_read_char_t(keyboard_t *kbd, int wait); 5721d16631SKyle Evans typedef int kbd_check_char_t(keyboard_t *kbd); 5821d16631SKyle Evans typedef int kbd_ioctl_t(keyboard_t *kbd, u_long cmd, caddr_t data); 5921d16631SKyle Evans typedef int kbd_lock_t(keyboard_t *kbd, int lock); 6021d16631SKyle Evans typedef void kbd_clear_state_t(keyboard_t *kbd); 6121d16631SKyle Evans typedef int kbd_get_state_t(keyboard_t *kbd, void *buf, size_t len); 6221d16631SKyle Evans typedef int kbd_set_state_t(keyboard_t *kbd, void *buf, size_t len); 6321d16631SKyle Evans typedef u_char *kbd_get_fkeystr_t(keyboard_t *kbd, int fkey, 6421d16631SKyle Evans size_t *len); 6521d16631SKyle Evans typedef int kbd_poll_mode_t(keyboard_t *kbd, int on); 6621d16631SKyle Evans typedef void kbd_diag_t(keyboard_t *kbd, int level); 6721d16631SKyle Evans 68617b9080SKazutaka YOKOTA /* event types */ 69617b9080SKazutaka YOKOTA #define KBDIO_KEYINPUT 0 70617b9080SKazutaka YOKOTA #define KBDIO_UNLOADING 1 71617b9080SKazutaka YOKOTA 72617b9080SKazutaka YOKOTA typedef struct keyboard_callback { 73617b9080SKazutaka YOKOTA kbd_callback_func_t *kc_func; 74617b9080SKazutaka YOKOTA void *kc_arg; 75617b9080SKazutaka YOKOTA } keyboard_callback_t; 76617b9080SKazutaka YOKOTA 7721d16631SKyle Evans typedef struct keyboard_switch { 7821d16631SKyle Evans kbd_probe_t *probe; 7921d16631SKyle Evans kbd_init_t *init; 8021d16631SKyle Evans kbd_term_t *term; 8121d16631SKyle Evans kbd_intr_t *intr; 8221d16631SKyle Evans kbd_test_if_t *test_if; 8321d16631SKyle Evans kbd_enable_t *enable; 8421d16631SKyle Evans kbd_disable_t *disable; 8521d16631SKyle Evans kbd_read_t *read; 8621d16631SKyle Evans kbd_check_t *check; 8721d16631SKyle Evans kbd_read_char_t *read_char; 8821d16631SKyle Evans kbd_check_char_t *check_char; 8921d16631SKyle Evans kbd_ioctl_t *ioctl; 9021d16631SKyle Evans kbd_lock_t *lock; 9121d16631SKyle Evans kbd_clear_state_t *clear_state; 9221d16631SKyle Evans kbd_get_state_t *get_state; 9321d16631SKyle Evans kbd_set_state_t *set_state; 9421d16631SKyle Evans kbd_get_fkeystr_t *get_fkeystr; 9521d16631SKyle Evans kbd_poll_mode_t *poll; 9621d16631SKyle Evans kbd_diag_t *diag; 9721d16631SKyle Evans } keyboard_switch_t; 9821d16631SKyle Evans 9979876290SKyle Evans /* 10079876290SKyle Evans * Keyboard driver definition. Some of these be immutable after definition 10179876290SKyle Evans * time, e.g. one shouldn't be able to rename a driver or use a different kbdsw 10279876290SKyle Evans * entirely, but patching individual methods is acceptable. 10379876290SKyle Evans */ 10421d16631SKyle Evans typedef struct keyboard_driver { 10521d16631SKyle Evans SLIST_ENTRY(keyboard_driver) link; 10679876290SKyle Evans const char * const name; 10779876290SKyle Evans keyboard_switch_t * const kbdsw; 10879876290SKyle Evans /* backdoor for the console driver */ 10979876290SKyle Evans int (* const configure)(int); 1103ed7166aSKyle Evans int flags; 11121d16631SKyle Evans } keyboard_driver_t; 11221d16631SKyle Evans 1133ed7166aSKyle Evans #define KBDF_REGISTERED 0x0001 1143ed7166aSKyle Evans 115617b9080SKazutaka YOKOTA /* keyboard */ 116617b9080SKazutaka YOKOTA struct keyboard { 117617b9080SKazutaka YOKOTA /* the following fields are managed by kbdio */ 118617b9080SKazutaka YOKOTA int kb_index; /* kbdio index# */ 119617b9080SKazutaka YOKOTA int kb_minor; /* minor number of the sub-device */ 120617b9080SKazutaka YOKOTA int kb_flags; /* internal flags */ 121617b9080SKazutaka YOKOTA #define KB_VALID (1 << 16) /* this entry is valid */ 122617b9080SKazutaka YOKOTA #define KB_NO_DEVICE (1 << 17) /* device not present */ 123617b9080SKazutaka YOKOTA #define KB_PROBED (1 << 18) /* device probed */ 124617b9080SKazutaka YOKOTA #define KB_INITIALIZED (1 << 19) /* device initialized */ 125617b9080SKazutaka YOKOTA #define KB_REGISTERED (1 << 20) /* device registered to kbdio */ 126617b9080SKazutaka YOKOTA #define KB_BUSY (1 << 21) /* device used by a client */ 127a449b18aSMaksim Yevmenkin #define KB_POLLED (1 << 22) /* device is polled */ 128617b9080SKazutaka YOKOTA int kb_active; /* 0: inactive */ 129617b9080SKazutaka YOKOTA void *kb_token; /* id of the current client */ 130617b9080SKazutaka YOKOTA keyboard_callback_t kb_callback;/* callback function */ 131617b9080SKazutaka YOKOTA 132617b9080SKazutaka YOKOTA /* 133617b9080SKazutaka YOKOTA * Device configuration flags: 134617b9080SKazutaka YOKOTA * The upper 16 bits are common between various keyboard devices. 135617b9080SKazutaka YOKOTA * The lower 16 bits are device-specific. 136617b9080SKazutaka YOKOTA */ 137617b9080SKazutaka YOKOTA int kb_config; 138617b9080SKazutaka YOKOTA #define KB_CONF_PROBE_ONLY (1 << 16) /* probe only, don't initialize */ 139617b9080SKazutaka YOKOTA 140617b9080SKazutaka YOKOTA /* the following fields are set up by the driver */ 141617b9080SKazutaka YOKOTA char *kb_name; /* driver name */ 142617b9080SKazutaka YOKOTA int kb_unit; /* unit # */ 143617b9080SKazutaka YOKOTA int kb_type; /* KB_84, KB_101, KB_OTHER,... */ 144617b9080SKazutaka YOKOTA int kb_io_base; /* port# if any */ 145617b9080SKazutaka YOKOTA int kb_io_size; /* # of occupied port */ 146617b9080SKazutaka YOKOTA int kb_led; /* LED status */ 147617b9080SKazutaka YOKOTA struct keymap *kb_keymap; /* key map */ 148617b9080SKazutaka YOKOTA struct accentmap *kb_accentmap; /* accent map */ 149617b9080SKazutaka YOKOTA struct fkeytab *kb_fkeytab; /* function key strings */ 150617b9080SKazutaka YOKOTA int kb_fkeytab_size;/* # of function key strings */ 151617b9080SKazutaka YOKOTA void *kb_data; /* the driver's private data */ 152e9deda23SKazutaka YOKOTA int kb_delay1; 153e9deda23SKazutaka YOKOTA int kb_delay2; 154*c51978f4SMichael Paepcke #ifndef KBD_DELAY1 155*c51978f4SMichael Paepcke #define KBD_DELAY1 500 156*c51978f4SMichael Paepcke #endif 157*c51978f4SMichael Paepcke #ifndef KBD_DELAY2 158*c51978f4SMichael Paepcke #define KBD_DELAY2 100 159*c51978f4SMichael Paepcke #endif 16082d654e8SKazutaka YOKOTA unsigned long kb_count; /* # of processed key strokes */ 16176495257SKazutaka YOKOTA u_char kb_lastact[NUM_KEYS/2]; 16289c9c53dSPoul-Henning Kamp struct cdev *kb_dev; 16321d16631SKyle Evans const keyboard_driver_t *kb_drv; 164617b9080SKazutaka YOKOTA }; 165617b9080SKazutaka YOKOTA 166617b9080SKazutaka YOKOTA #define KBD_IS_VALID(k) ((k)->kb_flags & KB_VALID) 167617b9080SKazutaka YOKOTA #define KBD_VALID(k) ((k)->kb_flags |= KB_VALID) 168617b9080SKazutaka YOKOTA #define KBD_INVALID(k) ((k)->kb_flags &= ~KB_VALID) 169617b9080SKazutaka YOKOTA #define KBD_HAS_DEVICE(k) (!((k)->kb_flags & KB_NO_DEVICE)) 170617b9080SKazutaka YOKOTA #define KBD_FOUND_DEVICE(k) ((k)->kb_flags &= ~KB_NO_DEVICE) 171617b9080SKazutaka YOKOTA #define KBD_IS_PROBED(k) ((k)->kb_flags & KB_PROBED) 172617b9080SKazutaka YOKOTA #define KBD_PROBE_DONE(k) ((k)->kb_flags |= KB_PROBED) 173617b9080SKazutaka YOKOTA #define KBD_IS_INITIALIZED(k) ((k)->kb_flags & KB_INITIALIZED) 174617b9080SKazutaka YOKOTA #define KBD_INIT_DONE(k) ((k)->kb_flags |= KB_INITIALIZED) 175617b9080SKazutaka YOKOTA #define KBD_IS_CONFIGURED(k) ((k)->kb_flags & KB_REGISTERED) 176617b9080SKazutaka YOKOTA #define KBD_CONFIG_DONE(k) ((k)->kb_flags |= KB_REGISTERED) 177617b9080SKazutaka YOKOTA #define KBD_IS_BUSY(k) ((k)->kb_flags & KB_BUSY) 178617b9080SKazutaka YOKOTA #define KBD_BUSY(k) ((k)->kb_flags |= KB_BUSY) 179617b9080SKazutaka YOKOTA #define KBD_UNBUSY(k) ((k)->kb_flags &= ~KB_BUSY) 180a449b18aSMaksim Yevmenkin #define KBD_IS_POLLED(k) ((k)->kb_flags & KB_POLLED) 181a449b18aSMaksim Yevmenkin #define KBD_POLL(k) ((k)->kb_flags |= KB_POLLED) 182a449b18aSMaksim Yevmenkin #define KBD_UNPOLL(k) ((k)->kb_flags &= ~KB_POLLED) 183617b9080SKazutaka YOKOTA #define KBD_IS_ACTIVE(k) ((k)->kb_active) 184617b9080SKazutaka YOKOTA #define KBD_ACTIVATE(k) (++(k)->kb_active) 185617b9080SKazutaka YOKOTA #define KBD_DEACTIVATE(k) (--(k)->kb_active) 186617b9080SKazutaka YOKOTA #define KBD_LED_VAL(k) ((k)->kb_led) 187617b9080SKazutaka YOKOTA 18858b22b9dSKyle Evans /* 18958b22b9dSKyle Evans * Keyboard disciplines: call actual handlers via kbdsw[]. 19058b22b9dSKyle Evans */ 19158b22b9dSKyle Evans static __inline int 19258b22b9dSKyle Evans kbdd_probe(keyboard_t *kbd, int unit, void *arg, int flags) 19358b22b9dSKyle Evans { 19458b22b9dSKyle Evans 19521d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->probe)(unit, arg, flags)); 19658b22b9dSKyle Evans } 19758b22b9dSKyle Evans 19858b22b9dSKyle Evans static __inline int 19958b22b9dSKyle Evans kbdd_init(keyboard_t *kbd, int unit, keyboard_t **kbdpp, void *arg, int flags) 20058b22b9dSKyle Evans { 20158b22b9dSKyle Evans 20221d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->init)(unit, kbdpp, arg, flags)); 20358b22b9dSKyle Evans } 20458b22b9dSKyle Evans 20558b22b9dSKyle Evans static __inline int 20658b22b9dSKyle Evans kbdd_term(keyboard_t *kbd) 20758b22b9dSKyle Evans { 20858b22b9dSKyle Evans 20921d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->term)(kbd)); 21058b22b9dSKyle Evans } 21158b22b9dSKyle Evans 21258b22b9dSKyle Evans static __inline int 21358b22b9dSKyle Evans kbdd_intr(keyboard_t *kbd, void *arg) 21458b22b9dSKyle Evans { 21558b22b9dSKyle Evans 21621d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->intr)(kbd, arg)); 21758b22b9dSKyle Evans } 21858b22b9dSKyle Evans 21958b22b9dSKyle Evans static __inline int 22058b22b9dSKyle Evans kbdd_test_if(keyboard_t *kbd) 22158b22b9dSKyle Evans { 22258b22b9dSKyle Evans 22321d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->test_if)(kbd)); 22458b22b9dSKyle Evans } 22558b22b9dSKyle Evans 22658b22b9dSKyle Evans static __inline int 22758b22b9dSKyle Evans kbdd_enable(keyboard_t *kbd) 22858b22b9dSKyle Evans { 22958b22b9dSKyle Evans 23021d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->enable)(kbd)); 23158b22b9dSKyle Evans } 23258b22b9dSKyle Evans 23358b22b9dSKyle Evans static __inline int 23458b22b9dSKyle Evans kbdd_disable(keyboard_t *kbd) 23558b22b9dSKyle Evans { 23658b22b9dSKyle Evans 23721d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->disable)(kbd)); 23858b22b9dSKyle Evans } 23958b22b9dSKyle Evans 24058b22b9dSKyle Evans static __inline int 24158b22b9dSKyle Evans kbdd_read(keyboard_t *kbd, int wait) 24258b22b9dSKyle Evans { 24358b22b9dSKyle Evans 24421d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->read)(kbd, wait)); 24558b22b9dSKyle Evans } 24658b22b9dSKyle Evans 24758b22b9dSKyle Evans static __inline int 24858b22b9dSKyle Evans kbdd_check(keyboard_t *kbd) 24958b22b9dSKyle Evans { 25058b22b9dSKyle Evans 25121d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->check)(kbd)); 25258b22b9dSKyle Evans } 25358b22b9dSKyle Evans 25458b22b9dSKyle Evans static __inline u_int 25558b22b9dSKyle Evans kbdd_read_char(keyboard_t *kbd, int wait) 25658b22b9dSKyle Evans { 25758b22b9dSKyle Evans 25821d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->read_char)(kbd, wait)); 25958b22b9dSKyle Evans } 26058b22b9dSKyle Evans 26158b22b9dSKyle Evans static __inline int 26258b22b9dSKyle Evans kbdd_check_char(keyboard_t *kbd) 26358b22b9dSKyle Evans { 26458b22b9dSKyle Evans 26521d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->check_char)(kbd)); 26658b22b9dSKyle Evans } 26758b22b9dSKyle Evans 26858b22b9dSKyle Evans static __inline int 26958b22b9dSKyle Evans kbdd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data) 27058b22b9dSKyle Evans { 27158b22b9dSKyle Evans 27258b22b9dSKyle Evans if (kbd == NULL) 27358b22b9dSKyle Evans return (ENODEV); 27421d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->ioctl)(kbd, cmd, data)); 27558b22b9dSKyle Evans } 27658b22b9dSKyle Evans 27758b22b9dSKyle Evans static __inline int 27858b22b9dSKyle Evans kbdd_lock(keyboard_t *kbd, int lock) 27958b22b9dSKyle Evans { 28058b22b9dSKyle Evans 28121d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->lock)(kbd, lock)); 28258b22b9dSKyle Evans } 28358b22b9dSKyle Evans 28458b22b9dSKyle Evans static __inline void 28558b22b9dSKyle Evans kbdd_clear_state(keyboard_t *kbd) 28658b22b9dSKyle Evans { 28758b22b9dSKyle Evans 28821d16631SKyle Evans (*kbd->kb_drv->kbdsw->clear_state)(kbd); 28958b22b9dSKyle Evans } 29058b22b9dSKyle Evans 29158b22b9dSKyle Evans static __inline int 29258b22b9dSKyle Evans kbdd_get_state(keyboard_t *kbd, void *buf, int len) 29358b22b9dSKyle Evans { 29458b22b9dSKyle Evans 29521d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->get_state)(kbd, buf, len)); 29658b22b9dSKyle Evans } 29758b22b9dSKyle Evans 29858b22b9dSKyle Evans static __inline int 29958b22b9dSKyle Evans kbdd_set_state(keyboard_t *kbd, void *buf, int len) 30058b22b9dSKyle Evans { 30158b22b9dSKyle Evans 30221d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->set_state)(kbd, buf, len)); 30358b22b9dSKyle Evans } 30458b22b9dSKyle Evans 30558b22b9dSKyle Evans static __inline u_char * 30658b22b9dSKyle Evans kbdd_get_fkeystr(keyboard_t *kbd, int fkey, size_t *len) 30758b22b9dSKyle Evans { 30858b22b9dSKyle Evans 30921d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->get_fkeystr)(kbd, fkey, len)); 31058b22b9dSKyle Evans } 31158b22b9dSKyle Evans 31258b22b9dSKyle Evans static __inline int 31358b22b9dSKyle Evans kbdd_poll(keyboard_t *kbd, int on) 31458b22b9dSKyle Evans { 31558b22b9dSKyle Evans 31621d16631SKyle Evans return ((*kbd->kb_drv->kbdsw->poll)(kbd, on)); 31758b22b9dSKyle Evans } 31858b22b9dSKyle Evans 31958b22b9dSKyle Evans static __inline void 32058b22b9dSKyle Evans kbdd_diag(keyboard_t *kbd, int level) 32158b22b9dSKyle Evans { 32258b22b9dSKyle Evans 32321d16631SKyle Evans (*kbd->kb_drv->kbdsw->diag)(kbd, level); 32458b22b9dSKyle Evans } 32558b22b9dSKyle Evans 326617b9080SKazutaka YOKOTA #define KEYBOARD_DRIVER(name, sw, config) \ 327e9deda23SKazutaka YOKOTA static struct keyboard_driver name##_kbd_driver = { \ 3287a4803c7SKazutaka YOKOTA { NULL }, #name, &sw, config \ 329617b9080SKazutaka YOKOTA }; \ 330e9deda23SKazutaka YOKOTA DATA_SET(kbddriver_set, name##_kbd_driver); 331617b9080SKazutaka YOKOTA 332617b9080SKazutaka YOKOTA /* functions for the keyboard driver */ 3337a4803c7SKazutaka YOKOTA int kbd_add_driver(keyboard_driver_t *driver); 3347a4803c7SKazutaka YOKOTA int kbd_delete_driver(keyboard_driver_t *driver); 335617b9080SKazutaka YOKOTA int kbd_register(keyboard_t *kbd); 336617b9080SKazutaka YOKOTA int kbd_unregister(keyboard_t *kbd); 337617b9080SKazutaka YOKOTA keyboard_switch_t *kbd_get_switch(char *driver); 338617b9080SKazutaka YOKOTA void kbd_init_struct(keyboard_t *kbd, char *name, int type, 339617b9080SKazutaka YOKOTA int unit, int config, int port, 340617b9080SKazutaka YOKOTA int port_size); 341617b9080SKazutaka YOKOTA void kbd_set_maps(keyboard_t *kbd, struct keymap *keymap, 342617b9080SKazutaka YOKOTA struct accentmap *accmap, 343617b9080SKazutaka YOKOTA struct fkeytab *fkeymap, int fkeymap_size); 344617b9080SKazutaka YOKOTA 345617b9080SKazutaka YOKOTA /* functions for the keyboard client */ 346617b9080SKazutaka YOKOTA int kbd_allocate(char *driver, int unit, void *id, 347617b9080SKazutaka YOKOTA kbd_callback_func_t *func, void *arg); 348617b9080SKazutaka YOKOTA int kbd_release(keyboard_t *kbd, void *id); 349617b9080SKazutaka YOKOTA int kbd_change_callback(keyboard_t *kbd, void *id, 350617b9080SKazutaka YOKOTA kbd_callback_func_t *func, void *arg); 351617b9080SKazutaka YOKOTA int kbd_find_keyboard(char *driver, int unit); 35204551c6cSMaksim Yevmenkin int kbd_find_keyboard2(char *driver, int unit, int index); 353617b9080SKazutaka YOKOTA keyboard_t *kbd_get_keyboard(int index); 354617b9080SKazutaka YOKOTA 355617b9080SKazutaka YOKOTA /* a back door for the console driver to tickle the keyboard driver XXX */ 356617b9080SKazutaka YOKOTA int kbd_configure(int flags); 357617b9080SKazutaka YOKOTA /* see `kb_config' above for flag bit definitions */ 358617b9080SKazutaka YOKOTA 35948f2b006SVladimir Kondratyev /* evdev2kbd mappings */ 36048f2b006SVladimir Kondratyev void kbd_ev_event(keyboard_t *kbd, uint16_t type, 36148f2b006SVladimir Kondratyev uint16_t code, int32_t value); 36248f2b006SVladimir Kondratyev 363617b9080SKazutaka YOKOTA #ifdef KBD_INSTALL_CDEV 364617b9080SKazutaka YOKOTA 365617b9080SKazutaka YOKOTA /* virtual keyboard cdev driver functions */ 366800da3b2SKazutaka YOKOTA int kbd_attach(keyboard_t *kbd); 367800da3b2SKazutaka YOKOTA int kbd_detach(keyboard_t *kbd); 368617b9080SKazutaka YOKOTA 369617b9080SKazutaka YOKOTA #endif /* KBD_INSTALL_CDEV */ 370617b9080SKazutaka YOKOTA 371617b9080SKazutaka YOKOTA /* generic low-level keyboard functions */ 372617b9080SKazutaka YOKOTA 373617b9080SKazutaka YOKOTA /* shift key state */ 374617b9080SKazutaka YOKOTA #define SHIFTS1 (1 << 16) 375617b9080SKazutaka YOKOTA #define SHIFTS2 (1 << 17) 376617b9080SKazutaka YOKOTA #define SHIFTS (SHIFTS1 | SHIFTS2) 377617b9080SKazutaka YOKOTA #define CTLS1 (1 << 18) 378617b9080SKazutaka YOKOTA #define CTLS2 (1 << 19) 379617b9080SKazutaka YOKOTA #define CTLS (CTLS1 | CTLS2) 380617b9080SKazutaka YOKOTA #define ALTS1 (1 << 20) 381617b9080SKazutaka YOKOTA #define ALTS2 (1 << 21) 382617b9080SKazutaka YOKOTA #define ALTS (ALTS1 | ALTS2) 383617b9080SKazutaka YOKOTA #define AGRS1 (1 << 22) 384617b9080SKazutaka YOKOTA #define AGRS2 (1 << 23) 385617b9080SKazutaka YOKOTA #define AGRS (AGRS1 | AGRS2) 386617b9080SKazutaka YOKOTA #define METAS1 (1 << 24) 387617b9080SKazutaka YOKOTA #define METAS2 (1 << 25) 388617b9080SKazutaka YOKOTA #define METAS (METAS1 | METAS2) 389617b9080SKazutaka YOKOTA #define NLKDOWN (1 << 26) 390617b9080SKazutaka YOKOTA #define SLKDOWN (1 << 27) 391617b9080SKazutaka YOKOTA #define CLKDOWN (1 << 28) 392617b9080SKazutaka YOKOTA #define ALKDOWN (1 << 29) 3937642cc82SKazutaka YOKOTA #define SHIFTAON (1 << 30) 39400d25f51SPoul-Henning Kamp /* lock key state (defined in sys/kbio.h) */ 395617b9080SKazutaka YOKOTA /* 396617b9080SKazutaka YOKOTA #define CLKED LED_CAP 397617b9080SKazutaka YOKOTA #define NLKED LED_NUM 398617b9080SKazutaka YOKOTA #define SLKED LED_SCR 399617b9080SKazutaka YOKOTA #define ALKED (1 << 3) 400617b9080SKazutaka YOKOTA #define LOCK_MASK (CLKED | NLKED | SLKED | ALKED) 401617b9080SKazutaka YOKOTA #define LED_CAP (1 << 0) 402617b9080SKazutaka YOKOTA #define LED_NUM (1 << 1) 403617b9080SKazutaka YOKOTA #define LED_SCR (1 << 2) 404617b9080SKazutaka YOKOTA #define LED_MASK (LED_CAP | LED_NUM | LED_SCR) 405617b9080SKazutaka YOKOTA */ 406617b9080SKazutaka YOKOTA 4073ed7166aSKyle Evans /* Initialization for the kbd layer, performed by cninit. */ 4083ed7166aSKyle Evans void kbdinit(void); 4093ed7166aSKyle Evans 410617b9080SKazutaka YOKOTA int genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg); 4119a1d7da7SKazutaka YOKOTA int genkbd_keyaction(keyboard_t *kbd, int keycode, int up, 412617b9080SKazutaka YOKOTA int *shiftstate, int *accents); 413617b9080SKazutaka YOKOTA 414617b9080SKazutaka YOKOTA #endif /* !_DEV_KBD_KBDREG_H_ */ 415