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_t
keysym_t
struct
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
.