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)
kbd_tkeysym_tstruct wskbd_accessops
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 keyboard-specific
ioctl calls.
There is a
void *
cookie provided by the keyboard driver associated with these
functions, which is passed to them when they are invoked.
struct wskbd_consops
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 associated with these
functions, which is passed to them when they are invoked.
struct wscons_keydesc
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
const struct wscons_keydesc *keydesc;
kbd_t layout;
struct wskbddev_attach_args
int console;
const struct wskbd_mapdata *keymap;
const struct wskbd_accessops *accessops;
void *accesscookie;
keysym_t.
A declaration has the following fields:
pos [cmd] normal [shift] [altgr] [shift-altgr]
The fields have the following meanings:
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
kbddev, type, value)value
and type
type
to wscons keyboard driver.
Valid values of
type
are:
kbddev, buf, len)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.
consops, conscookie, mapdata)consops
and the keyboard mapping table information in
mapdata.
The functions specified in
consops
will be called with
conscookie
as the first argument.
)aux, pnp)).
(see
autoconf(9)).
wskbddev_attach_args
structure with the supported operations and callbacks 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 keyboard will
be used for console input.
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
perform 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.
/usr/src.
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)
operations are listed in
sys/dev/wscons/wsconsio.h.