Lines Matching refs:kbd
67 static u_char *genkbd_get_fkeystr(keyboard_t *kbd, int fkey, size_t *len);
68 static void genkbd_diag(keyboard_t *kbd, int level);
88 static SYSCTL_NODE(_hw, OID_AUTO, kbd, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
128 kbd_init_struct(keyboard_t *kbd, char *name, int type, int unit, int config, in kbd_init_struct() argument
131 kbd->kb_flags = KB_NO_DEVICE; /* device has not been found */ in kbd_init_struct()
132 kbd->kb_name = name; in kbd_init_struct()
133 kbd->kb_type = type; in kbd_init_struct()
134 kbd->kb_unit = unit; in kbd_init_struct()
135 kbd->kb_config = config & ~KB_CONF_PROBE_ONLY; in kbd_init_struct()
136 kbd->kb_led = 0; /* unknown */ in kbd_init_struct()
137 kbd->kb_io_base = port; in kbd_init_struct()
138 kbd->kb_io_size = port_size; in kbd_init_struct()
139 kbd->kb_data = NULL; in kbd_init_struct()
140 kbd->kb_keymap = NULL; in kbd_init_struct()
141 kbd->kb_accentmap = NULL; in kbd_init_struct()
142 kbd->kb_fkeytab = NULL; in kbd_init_struct()
143 kbd->kb_fkeytab_size = 0; in kbd_init_struct()
144 kbd->kb_delay1 = KBD_DELAY1; /* these values are advisory only */ in kbd_init_struct()
145 kbd->kb_delay2 = KBD_DELAY2; in kbd_init_struct()
146 kbd->kb_count = 0L; in kbd_init_struct()
147 bzero(kbd->kb_lastact, sizeof(kbd->kb_lastact)); in kbd_init_struct()
151 kbd_set_maps(keyboard_t *kbd, keymap_t *keymap, accentmap_t *accmap, in kbd_set_maps() argument
154 kbd->kb_keymap = keymap; in kbd_set_maps()
155 kbd->kb_accentmap = accmap; in kbd_set_maps()
156 kbd->kb_fkeytab = fkeymap; in kbd_set_maps()
157 kbd->kb_fkeytab_size = fkeymap_size; in kbd_set_maps()
195 kbd_register(keyboard_t *kbd) in kbd_register() argument
213 kbd->kb_index = index; in kbd_register()
214 KBD_UNBUSY(kbd); in kbd_register()
215 KBD_VALID(kbd); in kbd_register()
216 kbd->kb_active = 0; /* disabled until someone calls kbd_enable() */ in kbd_register()
217 kbd->kb_token = NULL; in kbd_register()
218 kbd->kb_callback.kc_func = NULL; in kbd_register()
219 kbd->kb_callback.kc_arg = NULL; in kbd_register()
222 if (strcmp(p->name, kbd->kb_name) == 0) { in kbd_register()
223 kbd->kb_drv = p; in kbd_register()
224 keyboard[index] = kbd; in kbd_register()
228 strcpy(ki.kb_name, kbd->kb_name); in kbd_register()
229 ki.kb_unit = kbd->kb_unit; in kbd_register()
242 kbd_unregister(keyboard_t *kbd) in kbd_unregister() argument
247 if ((kbd->kb_index < 0) || (kbd->kb_index >= keyboards)) in kbd_unregister()
249 if (keyboard[kbd->kb_index] != kbd) in kbd_unregister()
252 if (KBD_IS_BUSY(kbd)) { in kbd_unregister()
253 error = (*kbd->kb_callback.kc_func)(kbd, KBDIO_UNLOADING, in kbd_unregister()
254 kbd->kb_callback.kc_arg); in kbd_unregister()
258 if (KBD_IS_BUSY(kbd)) { in kbd_unregister()
262 KBD_INVALID(kbd); in kbd_unregister()
263 keyboard[kbd->kb_index] = NULL; in kbd_unregister()
349 kbd_release(keyboard_t *kbd, void *id) in kbd_release() argument
354 if (!KBD_IS_VALID(kbd) || !KBD_IS_BUSY(kbd)) { in kbd_release()
356 } else if (kbd->kb_token != id) { in kbd_release()
359 kbd->kb_token = NULL; in kbd_release()
360 KBD_UNBUSY(kbd); in kbd_release()
361 kbd->kb_callback.kc_func = NULL; in kbd_release()
362 kbd->kb_callback.kc_arg = NULL; in kbd_release()
363 kbdd_clear_state(kbd); in kbd_release()
370 kbd_change_callback(keyboard_t *kbd, void *id, kbd_callback_func_t *func, in kbd_change_callback() argument
376 if (!KBD_IS_VALID(kbd) || !KBD_IS_BUSY(kbd)) { in kbd_change_callback()
378 } else if (kbd->kb_token != id) { in kbd_change_callback()
383 kbd->kb_callback.kc_func = func; in kbd_change_callback()
384 kbd->kb_callback.kc_arg = arg; in kbd_change_callback()
453 kbd_attach(keyboard_t *kbd) in kbd_attach() argument
456 if (kbd->kb_index >= keyboards) in kbd_attach()
458 if (keyboard[kbd->kb_index] != kbd) in kbd_attach()
461 kbd->kb_dev = make_dev(&kbd_cdevsw, kbd->kb_index, UID_ROOT, GID_WHEEL, in kbd_attach()
462 0600, "%s%r", kbd->kb_name, kbd->kb_unit); in kbd_attach()
463 make_dev_alias(kbd->kb_dev, "kbd%r", kbd->kb_index); in kbd_attach()
464 kbd->kb_dev->si_drv1 = malloc(sizeof(genkbd_softc_t), M_DEVBUF, in kbd_attach()
466 printf("kbd%d at %s%d\n", kbd->kb_index, kbd->kb_name, kbd->kb_unit); in kbd_attach()
471 kbd_detach(keyboard_t *kbd) in kbd_detach() argument
474 if (kbd->kb_index >= keyboards) in kbd_detach()
476 if (keyboard[kbd->kb_index] != kbd) in kbd_detach()
479 free(kbd->kb_dev->si_drv1, M_DEVBUF); in kbd_detach()
480 destroy_dev(kbd->kb_dev); in kbd_detach()
529 keyboard_t *kbd; in genkbdopen() local
535 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdopen()
536 if ((sc == NULL) || (kbd == NULL) || !KBD_IS_VALID(kbd)) { in genkbdopen()
539 i = kbd_allocate(kbd->kb_name, kbd->kb_unit, sc, in genkbdopen()
560 keyboard_t *kbd; in genkbdclose() local
569 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdclose()
570 if ((sc == NULL) || (kbd == NULL) || !KBD_IS_VALID(kbd)) { in genkbdclose()
573 kbd_release(kbd, (void *)sc); in genkbdclose()
581 keyboard_t *kbd; in genkbdread() local
590 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdread()
591 if ((sc == NULL) || (kbd == NULL) || !KBD_IS_VALID(kbd)) { in genkbdread()
600 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdread()
601 if ((kbd == NULL) || !KBD_IS_VALID(kbd)) { in genkbdread()
628 keyboard_t *kbd; in genkbdwrite() local
630 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdwrite()
631 if ((kbd == NULL) || !KBD_IS_VALID(kbd)) in genkbdwrite()
639 keyboard_t *kbd; in genkbdioctl() local
642 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdioctl()
643 if ((kbd == NULL) || !KBD_IS_VALID(kbd)) in genkbdioctl()
645 error = kbdd_ioctl(kbd, cmd, arg); in genkbdioctl()
654 keyboard_t *kbd; in genkbdpoll() local
661 kbd = kbd_get_keyboard(KBD_INDEX(dev)); in genkbdpoll()
662 if ((sc == NULL) || (kbd == NULL) || !KBD_IS_VALID(kbd)) { in genkbdpoll()
674 genkbd_event(keyboard_t *kbd, int event, void *arg) in genkbd_event() argument
690 kbd_release(kbd, (void *)sc); in genkbd_event()
702 if (kbdd_ioctl(kbd, KDGKBMODE, (caddr_t)&mode)) in genkbd_event()
706 while (kbdd_check_char(kbd)) { in genkbd_event()
707 c = kbdd_read_char(kbd, FALSE); in genkbd_event()
712 if (!KBD_IS_BUSY(kbd)) in genkbd_event()
750 cp = kbdd_get_fkeystr(kbd, KEYCHAR(c), &len); in genkbd_event()
787 genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) in genkbd_commonioctl() argument
805 ((keyboard_info_t *)arg)->kb_index = kbd->kb_index; in genkbd_commonioctl()
806 i = imin(strlen(kbd->kb_name) + 1, in genkbd_commonioctl()
808 bcopy(kbd->kb_name, ((keyboard_info_t *)arg)->kb_name, i); in genkbd_commonioctl()
809 ((keyboard_info_t *)arg)->kb_unit = kbd->kb_unit; in genkbd_commonioctl()
810 ((keyboard_info_t *)arg)->kb_type = kbd->kb_type; in genkbd_commonioctl()
811 ((keyboard_info_t *)arg)->kb_config = kbd->kb_config; in genkbd_commonioctl()
812 ((keyboard_info_t *)arg)->kb_flags = kbd->kb_flags; in genkbd_commonioctl()
816 *(int *)arg = kbd->kb_type; in genkbd_commonioctl()
820 ((int *)arg)[0] = kbd->kb_delay1; in genkbd_commonioctl()
821 ((int *)arg)[1] = kbd->kb_delay2; in genkbd_commonioctl()
825 error = copyout(kbd->kb_keymap, *(void **)arg, in genkbd_commonioctl()
830 mapp = kbd->kb_keymap; in genkbd_commonioctl()
869 error = keymap_change_ok(kbd->kb_keymap, mapp, curthread); in genkbd_commonioctl()
874 bzero(kbd->kb_accentmap, sizeof(*kbd->kb_accentmap)); in genkbd_commonioctl()
875 bcopy(mapp, kbd->kb_keymap, sizeof(*kbd->kb_keymap)); in genkbd_commonioctl()
884 if (keyp->keynum >= sizeof(kbd->kb_keymap->key) / in genkbd_commonioctl()
885 sizeof(kbd->kb_keymap->key[0])) { in genkbd_commonioctl()
888 bcopy(&kbd->kb_keymap->key[keyp->keynum], &keyp->key, in genkbd_commonioctl()
894 if (keyp->keynum >= sizeof(kbd->kb_keymap->key) / in genkbd_commonioctl()
895 sizeof(kbd->kb_keymap->key[0])) { in genkbd_commonioctl()
898 error = key_change_ok(&kbd->kb_keymap->key[keyp->keynum], in genkbd_commonioctl()
903 bcopy(&keyp->key, &kbd->kb_keymap->key[keyp->keynum], in genkbd_commonioctl()
911 error = copyout(kbd->kb_accentmap, *(void **)arg, in genkbd_commonioctl()
917 accentmapp = kbd->kb_accentmap; in genkbd_commonioctl()
963 error = accent_change_ok(kbd->kb_accentmap, accentmapp, curthread); in genkbd_commonioctl()
968 bcopy(accentmapp, kbd->kb_accentmap, sizeof(*kbd->kb_accentmap)); in genkbd_commonioctl()
977 if (fkeyp->keynum >= kbd->kb_fkeytab_size) { in genkbd_commonioctl()
980 bcopy(kbd->kb_fkeytab[fkeyp->keynum].str, fkeyp->keydef, in genkbd_commonioctl()
981 kbd->kb_fkeytab[fkeyp->keynum].len); in genkbd_commonioctl()
982 fkeyp->flen = kbd->kb_fkeytab[fkeyp->keynum].len; in genkbd_commonioctl()
987 if (fkeyp->keynum >= kbd->kb_fkeytab_size) { in genkbd_commonioctl()
990 error = fkey_change_ok(&kbd->kb_fkeytab[fkeyp->keynum], in genkbd_commonioctl()
995 kbd->kb_fkeytab[fkeyp->keynum].len = min(fkeyp->flen, MAXFK); in genkbd_commonioctl()
996 bcopy(fkeyp->keydef, kbd->kb_fkeytab[fkeyp->keynum].str, in genkbd_commonioctl()
997 kbd->kb_fkeytab[fkeyp->keynum].len); in genkbd_commonioctl()
1115 genkbd_get_fkeystr(keyboard_t *kbd, int fkey, size_t *len) in genkbd_get_fkeystr() argument
1117 if (kbd == NULL) in genkbd_get_fkeystr()
1120 if (fkey > kbd->kb_fkeytab_size) in genkbd_get_fkeystr()
1122 *len = kbd->kb_fkeytab[fkey].len; in genkbd_get_fkeystr()
1123 return (kbd->kb_fkeytab[fkey].str); in genkbd_get_fkeystr()
1148 genkbd_diag(keyboard_t *kbd, int level) in genkbd_diag() argument
1152 kbd->kb_index, kbd->kb_name, kbd->kb_unit, in genkbd_diag()
1153 get_kbd_type_name(kbd->kb_type), kbd->kb_type, in genkbd_diag()
1154 kbd->kb_config, kbd->kb_flags); in genkbd_diag()
1155 if (kbd->kb_io_base > 0) in genkbd_diag()
1156 printf(", port:0x%x-0x%x", kbd->kb_io_base, in genkbd_diag()
1157 kbd->kb_io_base + kbd->kb_io_size - 1); in genkbd_diag()
1172 save_accent_key(keyboard_t *kbd, u_int key, int *accents) in save_accent_key() argument
1178 if ((i > kbd->kb_accentmap->n_accs) in save_accent_key()
1179 || (kbd->kb_accentmap->acc[i - 1].accchar == 0)) { in save_accent_key()
1190 key = kbd->kb_accentmap->acc[i - 1].accchar; in save_accent_key()
1201 make_accent_char(keyboard_t *kbd, u_int ch, int *accents) in make_accent_char() argument
1206 acc = &kbd->kb_accentmap->acc[*accents - 1]; in make_accent_char()
1228 genkbd_keyaction(keyboard_t *kbd, int keycode, int up, int *shiftstate, in genkbd_keyaction() argument
1241 key = &kbd->kb_keymap->key[i]; in genkbd_keyaction()
1250 action = kbd->kb_lastact[keycode]; in genkbd_keyaction()
1251 kbd->kb_lastact[keycode] = NOP; in genkbd_keyaction()
1255 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1265 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1275 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1285 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1295 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1305 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1343 if (kbd->kb_lastact[keycode] == NOP) in genkbd_keyaction()
1344 kbd->kb_lastact[keycode] = action; in genkbd_keyaction()
1345 if (kbd->kb_lastact[keycode] != action) in genkbd_keyaction()
1350 set_lockkey_state(kbd, state, NLK); in genkbd_keyaction()
1353 set_lockkey_state(kbd, state, CLK); in genkbd_keyaction()
1356 set_lockkey_state(kbd, state, SLK); in genkbd_keyaction()
1359 set_lockkey_state(kbd, state, ALK); in genkbd_keyaction()
1426 action = save_accent_key(kbd, action, in genkbd_keyaction()
1454 kbd->kb_lastact[keycode] = NOP; in genkbd_keyaction()
1458 action = make_accent_char(kbd, action, accents); in genkbd_keyaction()
1471 kbd_ev_event(keyboard_t *kbd, uint16_t type, uint16_t code, int32_t value) in kbd_ev_event() argument
1476 leds = oleds = KBD_LED_VAL(kbd); in kbd_ev_event()
1495 kbdd_ioctl(kbd, KDSETLED, (caddr_t)&leds); in kbd_ev_event()
1499 delay[1] = kbd->kb_delay2; in kbd_ev_event()
1500 kbdd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay); in kbd_ev_event()
1502 delay[0] = kbd->kb_delay1; in kbd_ev_event()
1504 kbdd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay); in kbd_ev_event()