kbd
CFATTACH_DECL_NEW(kbd, 0,
CFATTACH_DECL_NEW(kbd, 0,
int kbd(int);
kbd(1); /* read out ugly data */
return (kbd(1));
return (kbd(1));
while ((c = kbd(0)) == 0)
goto kbd;
goto kbd;
kbd:
int kbd, crt, screen;
kbd = crt = screen = 0;
prom_findcons(&kbd, &crt, &screen);
dz_ibus_cnattach(kbd);
int kbd, crt, screen;
kbd = crt = screen = 0;
prom_findcons(&kbd, &crt, &screen);
if (kbd == 7 && tcfb_cnattach(crt) > 0) {
dz_ibus_cnattach(kbd);
int kbd, crt, screen;
kbd = crt = screen = 0;
prom_findcons(&kbd, &crt, &screen);
int kbd, crt, screen;
kbd = crt = screen = 0;
prom_findcons(&kbd, &crt, &screen);
int kbd, crt, screen;
kbd = crt = screen = 0;
prom_findcons(&kbd, &crt, &screen);
int kbd(int);
return (kbd(1));
while ((c = kbd(0)) == 0)
int kbd(int);
struct kbd_softc *kbd = &sc->sc_kbd;
kbd->k_dev = self;
kbd->k_ops = &kbd_ops_pckbport;
kbd->k_state.kbd_id = KB_SUN4; /* NB: type5 keyboards actually report type4 */
kbd->k_state.kbd_layout = 19; /* US101A */
if ((cc = kbd_cc_alloc(kbd)) == NULL)
kbd->k_isconsole = 1;
kbd_pckbport_open(struct kbd_softc *kbd)
struct kbd_pckbport_softc *sc = (struct kbd_pckbport_softc *)kbd;
if (kbd == NULL) {
ks = &kbd->k_state;
kbd_pckbport_close(struct kbd_softc *kbd)
struct kbd_pckbport_softc *k = (struct kbd_pckbport_softc *)kbd;
kbd_pckbport_do_cmd(struct kbd_softc *kbd, int suncmd, int isioctl)
device_xname(kbd->k_dev), suncmd));
kbd_pckbport_set_leds(struct kbd_softc *kbd, int sunleds, int isioctl)
struct kbd_pckbport_softc *sc = (struct kbd_pckbport_softc *)kbd;
struct kbd_softc *kbd = &sc->sc_kbd;
kbd_input(kbd, sunkey);
CFATTACH_DECL_NEW(kbd, sizeof(struct kbd_softc),
hidkbd_attach(device_t self, struct hidkbd *kbd, int console,
kbd->sc_var = NULL;
parserr = hidkbd_parse_desc(kbd, id, desc, dlen);
kbd->sc_nvar, kbd->sc_nkeycode);
kbd->sc_device = self;
kbd->sc_debounce = (qflags & HIDKBD_SPUR_BUT_UP) != 0;
kbd->sc_console_keyboard = hidkbd_is_console;
callout_init(&kbd->sc_delay, 0);
callout_setfunc(&kbd->sc_delay, hidkbd_delayed_decode, kbd);
hidkbd_attach_wskbd(struct hidkbd *kbd, kbd_t layout,
a.console = kbd->sc_console_keyboard;
a.accesscookie = device_private(kbd->sc_device);
kbd->sc_wskbddev = config_found(kbd->sc_device, &a,
hidkbd_detach(struct hidkbd *kbd, int flags)
DPRINTF(("hidkbd_detach: sc=%p flags=%d\n", device_private(kbd->sc_device), flags));
if (kbd->sc_console_keyboard) {
device_printf(kbd->sc_device, "was console keyboard\n");
if (kbd->sc_wskbddev != NULL)
rv = config_detach(kbd->sc_wskbddev, flags);
if (kbd->sc_var != NULL)
kmem_free(kbd->sc_var,
kbd->sc_nvar * sizeof(struct hidkbd_variable));
struct hidkbd *kbd = vsc;
spos = ibuf + kbd->sc_keycodeloc.pos / 8;
epos = spos + kbd->sc_nkeycode;
struct hidkbd *kbd = vsc;
if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
struct hidkbd *kbd = vsc;
if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
struct hidkbd *kbd = vsc;
if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
hidkbd_input(struct hidkbd *kbd, uint8_t *data, u_int len)
struct hidkbd_data *ud = &kbd->sc_ndata;
if (kbd->sc_munge != NULL)
(*kbd->sc_munge)(kbd, (uint8_t *)data, len);
for (i = 0; i < kbd->sc_nvar; i++)
&kbd->sc_var[i].loc);
&kbd->sc_var[i].loc);
if (kbd->sc_keycodeloc.pos / 8 + kbd->sc_nkeycode <= len)
memcpy(ud->keycode, data + kbd->sc_keycodeloc.pos / 8,
kbd->sc_nkeycode);
memset(ud->keycode, 0, kbd->sc_nkeycode);
if (kbd->sc_debounce && !kbd->sc_polling) {
kbd->sc_data = *ud;
callout_schedule(&kbd->sc_delay, mstohz(20));
hidkbd_decode(kbd, ud);
struct hidkbd *kbd = addr;
hidkbd_decode(kbd, &kbd->sc_data);
hidkbd_decode(struct hidkbd *kbd, struct hidkbd_data *ud)
p->unit = device_unit(kbd->sc_device);
for (i = 0; i < kbd->sc_nvar; i++)
if ((kbd->sc_odata.var[i] & kbd->sc_var[i].mask) !=
(ud->var[i] & kbd->sc_var[i].mask)) {
ADDKEY(kbd->sc_var[i].key |
((ud->var[i] & kbd->sc_var[i].mask) ?
if (memcmp(ud->keycode, kbd->sc_odata.keycode, kbd->sc_nkeycode) != 0) {
for (i = 0; i < kbd->sc_nkeycode; i++) {
key = kbd->sc_odata.keycode[i];
for (j = 0; j < kbd->sc_nkeycode; j++)
for (i = 0; i < kbd->sc_nkeycode; i++) {
for (j = 0; j < kbd->sc_nkeycode; j++)
if (key == kbd->sc_odata.keycode[j])
kbd->sc_odata = *ud;
if (kbd->sc_polling) {
memcpy(kbd->sc_pollchars, ibuf, nkeys * sizeof(u_int16_t));
kbd->sc_npollchar = nkeys;
if (kbd->sc_wskbddev == NULL)
if (kbd->sc_rawkbd) {
wskbd_rawinput(kbd->sc_wskbddev, cbuf, j);
wskbd_input(kbd->sc_wskbddev,
wskbd_input(kbd->sc_wskbddev,
hidkbd_enable(struct hidkbd *kbd, int on)
if (kbd->sc_enabled == on)
kbd->sc_enabled = on;
hidkbd_set_leds(struct hidkbd *kbd, int leds, uint8_t *report)
if (kbd->sc_leds == leds)
kbd->sc_leds = leds;
if ((leds & WSKBD_LED_SCROLL) && kbd->sc_scroloc.size == 1)
*report |= 1 << kbd->sc_scroloc.pos;
if ((leds & WSKBD_LED_NUM) && kbd->sc_numloc.size == 1)
*report |= 1 << kbd->sc_numloc.pos;
if ((leds & WSKBD_LED_CAPS) && kbd->sc_capsloc.size == 1)
*report |= 1 << kbd->sc_capsloc.pos;
if ((leds & WSKBD_LED_COMPOSE) && kbd->sc_compose.size == 1)
*report |= 1 << kbd->sc_compose.pos;
hidkbd_ioctl(struct hidkbd *kbd, u_long cmd, void *data, int flag,
*(int *)data = kbd->sc_leds;
kbd->sc_rawkbd = *(int *)data == WSKBD_RAW;
hidkbd_cngetc(struct hidkbd *kbd, u_int *type, int *data)
c = kbd->sc_pollchars[0];
kbd->sc_npollchar--;
memmove(kbd->sc_pollchars, kbd->sc_pollchars+1,
kbd->sc_npollchar * sizeof(u_int16_t));
hidkbd_parse_desc(struct hidkbd *kbd, int id, void *desc, int dlen)
kbd->sc_nkeycode = 0;
kbd->sc_nvar = ivar;
kbd->sc_var = kmem_zalloc(
kbd->sc_nvar * sizeof(struct hidkbd_variable),
kbd->sc_var[i].loc = h.loc;
kbd->sc_var[i].mask = 1 << (i % 8);
kbd->sc_var[i].key = HID_GET_USAGE(h.usage);
if (kbd->sc_nkeycode != 0) {
kbd->sc_keycodeloc = h.loc;
kbd->sc_nkeycode = MAXKEYCODE;
kbd->sc_nkeycode = h.loc.count;
if (kbd->sc_nkeycode == 0 && ivar == 0)
id, hid_output, &kbd->sc_numloc, NULL);
id, hid_output, &kbd->sc_capsloc, NULL);
id, hid_output, &kbd->sc_scroloc, NULL);
id, hid_output, &kbd->sc_compose, NULL);
if (hidkbd_attach(self, kbd, 1, 0, repid, desc, dlen) != 0)
if (kbd->sc_console_keyboard) {
hidkbd_attach_wskbd(kbd, KB_US, &ikbd_accessops);
struct hidkbd *kbd = &sc->sc_kbd;
return hidkbd_detach(kbd, flags);
struct hidkbd *kbd = &sc->sc_kbd;
if (kbd->sc_enabled != 0)
hidkbd_input(kbd, (uint8_t *)ibuf, len);
struct hidkbd *kbd = &sc->sc_kbd;
if ((rv = hidkbd_enable(kbd, on)) != 0)
struct hidkbd *kbd = &sc->sc_kbd;
return hidkbd_ioctl(kbd, cmd, data, flag, l);
struct hidkbd *kbd = &sc->sc_kbd;
kbd->sc_polling = 1;
while (kbd->sc_npollchar <= 0) {
kbd->sc_polling = 0;
hidkbd_cngetc(kbd, type, data);
struct hidkbd *kbd = &sc->sc_kbd;
kbd_sun_open(struct kbd_softc *kbd)
struct kbd_sun_softc *k = (struct kbd_sun_softc *)kbd;
if (kbd == NULL)
ks = &kbd->k_state;
log(LOG_ERR, "%s: reset failed\n", device_xname(kbd->k_dev));
device_xname(kbd->k_dev));
kbd_sun_close(struct kbd_softc *kbd)
kbd_sun_do_cmd(struct kbd_softc *kbd, int cmd, int isioctl)
struct kbd_sun_softc *k = (struct kbd_sun_softc *)kbd;
ks = &kbd->k_state;
kbd_sun_set_leds(struct kbd_softc *kbd, int leds, int isioctl)
struct kbd_sun_softc *k = (struct kbd_sun_softc *)kbd;
kbd_sun_set_leds1(kbd, leds);
kbd_sun_set_leds1(kbd, leds);
kbd_sun_set_leds1(struct kbd_softc *kbd, int new_leds)
struct kbd_sun_softc *k = (struct kbd_sun_softc *)kbd;
struct kbd_state *ks = &kbd->k_state;
struct kbd_softc *kbd = (struct kbd_softc *)k;
kbd->k_state.kbd_id = code;
kbd->k_state.kbd_layout = code;
device_xname(kbd->k_dev));
kbd_input(kbd, code);
u_char kbd = 0;
kbd += kbd2;
if (doio(ktent, &kbd, sizeof(kbd), IO_WRITE))
if (doio(ktent, &kbd, sizeof(kbd), IO_READ))
printf("%s=%d (%s)\n", ktent->kt_keyword, kbd, kbd ? "other" : "Sun");
const char *kbd, *mouse, *display;
kbd = _PATH_WSKBD;
kbd = _PATH_KEYBOARD;
add_dev(kbd, 0);
kbd++;
if ((kbd || swtch) ? (argc > 1) : (argc != 1))
} else if (kbd) {
int c, delete, kbd, idx, wsfd, swtch, get, mux;
kbd = 0;
kbd++;