WSKBD(9) NetBSD Kernel Developer's Manual WSKBD(9)
wskbd, wskbd_input, wskbd_rawinput, wskbd_cnattach, wskbd_cndetach, wskbddevprint -- wscons keyboard support
#include <dev/wscons/wsconsio.h> #include <dev/wscons/wskbdvar.h> #include <dev/wscons/wsksymdef.h> #include <dev/wscons/wsksymvar.h> void wskbd_input(struct device *kbddev, u_int type, int value); void wskbd_rawinput(struct device *kbddev, u_char *buf, int len); void wskbd_cnattach(const struct wskbd_consops *consops, void *conscookie, const struct wskbd_mapdata *mapdata); void wskbd_cndetach(); int wskbddevprint(void *aux, const char *pnp);
The wskbd module is a component of the wscons(9) framework to provide machine-independent keyboard support. Most of the support is provided by the wskbd(4) device driver, which must be a child of the hardware device driver.
Keyboard drivers providing support for wscons keyboards will make use of the following data types: kbd_t An opaque type describing keyboard properties. keysym_t The wscons keyboard-independent symbolic representation of the keypress. struct wskbd_accessops A structure used to specify the keyboard access functions. All keyboards must provide this structure and pass it to the wskbd(4) child device. It has the following members: int (*enable)(void *, int); void (*set_leds)(void *, int); int (*ioctl)(void *v, u_long cmd, void *data, int flag, struct lwp *l); The enable member defines the function to be called to enable keypress passing to wscons. The set_leds member defined the function to be called to set the LEDs on the keyboard. The ioctl member defines the function to be called to perform key- board-specific ioctl calls. There is a void * cookie provided by the keyboard driver associ- ated with these functions, which is passed to them when they are invoked. struct wskbd_consops A structure used to specify the keyboard console operations. All keyboards which can operate as a console must provide this structure and pass it to the wskbd(4) child device. If the key- board cannot be a console, it is not necessary to specify this structure. It has the following members: void (*getc)(void *, u_int *, int *); void (*pollc)(void *, int); void (*bell)(void *, u_int, u_int, u_int); There is a void * cookie provided by the keyboard driver associ- ated with these functions, which is passed to them when they are invoked. struct wscons_keydesc A structure used to describe a keyboard mapping table to convert keyboard-specific keycodes to wscons keysyms. It has the fol- lowing members: kbd_t name; /* name of this map */ kbd_t base; /* map this one is based on */ int map_size; /* size of map */ const keysym_t *map; /* the map itself */ struct wskbd_mapdata A structure used to describe the keyboard layout and operation to interpret the keyboard layout. it contains the following members: const struct wscons_keydesc *keydesc; kbd_t layout; struct wskbddev_attach_args A structure used to attach the wskbd(4) child device. It has the following members: int console; const struct wskbd_mapdata *keymap; const struct wskbd_accessops *accessops; void *accesscookie; Keymaps Keymaps are a dense stream of keysym_t. A declaration has the following fields: pos [cmd] normal [shift] [altgr] [shift-altgr] The fields have the following meanings: pos Always specified as KC(pos) and starts the description of key pos. cmd If the command modifier (KS_Cmd_XXX) is active, the optional command cmd is invoked. normal The keysym if no modifiers are active. shift The keysym if the shift modifier is active. altgr The keysym if the alt-gr modifier is active. shift-altgr The keysym if the shift-alt-gr modifier is active. If the keysym after pos is not KS_Cmd_XXX, then cmd is empty. The shift, altgr and shift-altgr fields are determined from previous fields if they are not specified. Therefore, there are four valid keysym declarations: pos [cmd] normal pos [cmd] normal shift pos [cmd] normal shift altgr pos [cmd] normal shift altgr shift-altgr
wskbd_input(kbddev, type, value) Pass the keypress of value value and type type to wscons key- board driver. Valid values of type are: WSCONS_EVENT_KEY_UP Key released. WSCONS_EVENT_KEY_DOWN Key pressed. wskbd_rawinput(kbddev, buf, len) Pass the raw keypress in the buffer buf to the wscons keyboard driver. The buffer is len bytes long. This function should only be called if the kernel option WSDISPLAY_COMPAT_RAWKBD is enabled. wskbd_cnattach(consops, conscookie, mapdata) Attach this keyboard as the console input by specifying the con- sole operations consops and the keyboard mapping table informa- tion in mapdata. The functions specified in consops will be called with conscookie as the first argument. wskbd_cndetach() Detach this keyboard as the console input. wskbddevprint(aux, pnp) The default wskbd printing routine used by config_found(). (see autoconf(9)).
Keyboard drivers which want to use the wskbd module must be a parent to the wskbd(4) device and provide an attachment interface. To attach the wskbd(4) device, the keyboard driver must allocate and populate a wskbddev_attach_args structure with the supported operations and call- backs and call config_found() to perform the attach (see autoconf(9)). The keymap member points to the wskbd_mapdata structure which describes the keycode mapping operations. The accessops member points to the wskbd_accessops structure which describes the keyboard access operations. The console member is a boolean to indicate to wscons whether this key- board will be used for console input.
If the keyboard belongs to the system console, it must register the wskbd_consops structure specifying the console operations via wskbd_cnattach() at console attach time. When a keypress arrives from the keyboard, the keyboard driver must per- form any necessary character decoding to wscons events and pass the events to wscons via wskbd_input(). If the kernel is compiled with the option WSDISPLAY_COMPAT_RAWKBD, then the keyboard driver must also pass the raw keyboard data to wscons via wskbd_rawinput(). The wscons framework calls back into the hardware driver by invoking the functions that are specified in the accessops structure. The enable() and set_leds() functions are relatively simple and self-explanatory. The ioctl() function is called by the wscons interface to perform keyboard- specific ioctl operations (see ioctl(2)). The argument cmd to the ioctl() function specifies the specific command to perform using the data data. Valid commands are listed in sys/dev/wscons/wsconsio.h.
The wscons subsystem is implemented within the directory sys/dev/wscons. The wskbd module itself is implement within the files sys/dev/wscons/wskbd.c and sys/dev/wscons/wskbdutil.c. ioctl(2) opera- tions are listed in sys/dev/wscons/wsconsio.h.
ioctl(2), autoconf(9), driver(9), intro(9), wsdisplay(9), wsmouse(9) NetBSD 9.0 December 20, 2005 NetBSD 9.0
You can also request any man page by name and (optionally) by section: