wskbd(9)
- NetBSD Manual Pages
WSKBD(9) NetBSD Kernel Developer's Manual WSKBD(9)
NAME
wskbd, wskbd_input, wskbd_rawinput, wskbd_cnattach, wskbd_cndetach,
wskbddevprint -- wscons keyboard support
SYNOPSIS
#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);
DESCRIPTION
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.
DATA TYPES
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
FUNCTIONS
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)).
AUTOCONFIGURATION
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.
OPERATION
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.
CODE REFERENCES
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.
SEE ALSO
ioctl(2), autoconf(9), driver(9), intro(9), wsdisplay(9), wsmouse(9)
NetBSD 9.0 December 20, 2005 NetBSD 9.0
Powered by man-cgi (2021-06-01).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.