Lines Matching refs:state

179 kbdmux_kbd_putc(kbdmux_state_t *state, char c)  in kbdmux_kbd_putc()  argument
183 if (state->ks_inq_length == KBDMUX_Q_SIZE) in kbdmux_kbd_putc()
186 p = (state->ks_inq_start + state->ks_inq_length) % KBDMUX_Q_SIZE; in kbdmux_kbd_putc()
187 state->ks_inq[p] = c; in kbdmux_kbd_putc()
188 state->ks_inq_length++; in kbdmux_kbd_putc()
192 kbdmux_kbd_getc(kbdmux_state_t *state) in kbdmux_kbd_getc() argument
196 if (state->ks_inq_length == 0) in kbdmux_kbd_getc()
199 c = state->ks_inq[state->ks_inq_start]; in kbdmux_kbd_getc()
200 state->ks_inq_start = (state->ks_inq_start + 1) % KBDMUX_Q_SIZE; in kbdmux_kbd_getc()
201 state->ks_inq_length--; in kbdmux_kbd_getc()
223 kbdmux_state_t *state = (kbdmux_state_t *) xstate; in kbdmux_kbd_intr_timo() local
226 if (state->ks_inq_length > 0) in kbdmux_kbd_intr_timo()
227 taskqueue_enqueue(taskqueue_swi_giant, &state->ks_task); in kbdmux_kbd_intr_timo()
230 callout_schedule(&state->ks_timo, TICKS); in kbdmux_kbd_intr_timo()
239 kbdmux_state_t *state = (kbdmux_state_t *) arg; in kbdmux_kbd_event() local
245 KBDMUX_LOCK(state); in kbdmux_kbd_event()
266 kbdmux_kbd_putc(state, c); in kbdmux_kbd_event()
270 if (state->ks_inq_length > 0) in kbdmux_kbd_event()
271 taskqueue_enqueue(taskqueue_swi_giant, &state->ks_task); in kbdmux_kbd_event()
273 KBDMUX_UNLOCK(state); in kbdmux_kbd_event()
279 KBDMUX_LOCK(state); in kbdmux_kbd_event()
281 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_kbd_event()
287 SLIST_REMOVE(&state->ks_kbds, k, kbdmux_kbd, next); in kbdmux_kbd_event()
294 KBDMUX_UNLOCK(state); in kbdmux_kbd_event()
325 static void kbdmux_clear_state_locked(kbdmux_state_t *state);
387 kbdmux_state_t *state = NULL; in kbdmux_init() local
399 state = malloc(sizeof(*state), M_KBDMUX, M_NOWAIT | M_ZERO); in kbdmux_init()
406 if ((kbd == NULL) || (state == NULL) || (keymap == NULL) || in kbdmux_init()
412 KBDMUX_LOCK_INIT(state); in kbdmux_init()
413 TASK_INIT(&state->ks_task, 0, kbdmux_kbd_intr, (void *) kbd); in kbdmux_init()
414 callout_init(&state->ks_timo, 1); in kbdmux_init()
415 SLIST_INIT(&state->ks_kbds); in kbdmux_init()
420 state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_init()
436 kbd->kb_data = (void *)state; in kbdmux_init()
441 KBDMUX_LOCK(state); in kbdmux_init()
442 kbdmux_clear_state_locked(state); in kbdmux_init()
443 state->ks_mode = K_XLATE; in kbdmux_init()
444 KBDMUX_UNLOCK(state); in kbdmux_init()
450 kbdmux_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state); in kbdmux_init()
476 state->ks_evdev = evdev; in kbdmux_init()
477 state->ks_evdev_state = 0; in kbdmux_init()
491 callout_reset(&state->ks_timo, TICKS, kbdmux_kbd_intr_timo, state); in kbdmux_init()
497 if (state != NULL) in kbdmux_init()
498 free(state, M_KBDMUX); in kbdmux_init()
520 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_term() local
524 KBDMUX_LOCK(state); in kbdmux_term()
525 while ((k = SLIST_FIRST(&state->ks_kbds)) != NULL) { in kbdmux_term()
527 SLIST_REMOVE_HEAD(&state->ks_kbds, next); in kbdmux_term()
533 KBDMUX_UNLOCK(state); in kbdmux_term()
535 callout_drain(&state->ks_timo); in kbdmux_term()
536 taskqueue_drain(taskqueue_swi_giant, &state->ks_task); in kbdmux_term()
541 evdev_free(state->ks_evdev); in kbdmux_term()
544 KBDMUX_LOCK_DESTROY(state); in kbdmux_term()
545 bzero(state, sizeof(*state)); in kbdmux_term()
546 free(state, M_KBDMUX); in kbdmux_term()
614 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_read() local
617 KBDMUX_LOCK(state); in kbdmux_read()
618 c = kbdmux_kbd_getc(state); in kbdmux_read()
619 KBDMUX_UNLOCK(state); in kbdmux_read()
633 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_check() local
639 KBDMUX_LOCK(state); in kbdmux_check()
640 ready = (state->ks_inq_length > 0) ? TRUE : FALSE; in kbdmux_check()
641 KBDMUX_UNLOCK(state); in kbdmux_check()
652 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_read_char() local
656 KBDMUX_LOCK(state); in kbdmux_read_char()
661 if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char > 0)) { in kbdmux_read_char()
662 action = state->ks_composed_char; in kbdmux_read_char()
663 state->ks_composed_char = 0; in kbdmux_read_char()
665 KBDMUX_UNLOCK(state); in kbdmux_read_char()
670 KBDMUX_UNLOCK(state); in kbdmux_read_char()
676 scancode = kbdmux_kbd_getc(state); in kbdmux_read_char()
678 if (state->ks_polling != 0) { in kbdmux_read_char()
681 SLIST_FOREACH(k, &state->ks_kbds, next) { in kbdmux_read_char()
691 kbdmux_kbd_putc(state, scancode); in kbdmux_read_char()
695 if (state->ks_inq_length > 0) in kbdmux_read_char()
699 KBDMUX_UNLOCK(state); in kbdmux_read_char()
708 if (evdev_rcpt_mask & EVDEV_RCPT_KBDMUX && state->ks_evdev != NULL) { in kbdmux_read_char()
709 uint16_t key = evdev_scancode2key(&state->ks_evdev_state, in kbdmux_read_char()
713 evdev_push_event(state->ks_evdev, EV_KEY, in kbdmux_read_char()
715 evdev_sync(state->ks_evdev); in kbdmux_read_char()
721 if (state->ks_mode == K_RAW) { in kbdmux_read_char()
722 KBDMUX_UNLOCK(state); in kbdmux_read_char()
728 switch (state->ks_prefix) { in kbdmux_read_char()
732 if (state->ks_flags & COMPOSE) { in kbdmux_read_char()
733 state->ks_flags &= ~COMPOSE; in kbdmux_read_char()
734 if (state->ks_composed_char > UCHAR_MAX) in kbdmux_read_char()
735 state->ks_composed_char = 0; in kbdmux_read_char()
739 if (!(state->ks_flags & COMPOSE)) { in kbdmux_read_char()
740 state->ks_flags |= COMPOSE; in kbdmux_read_char()
741 state->ks_composed_char = 0; in kbdmux_read_char()
746 state->ks_prefix = scancode; in kbdmux_read_char()
751 state->ks_prefix = 0; in kbdmux_read_char()
834 state->ks_prefix = 0; in kbdmux_read_char()
836 state->ks_prefix = 0x1D; in kbdmux_read_char()
840 state->ks_prefix = 0; in kbdmux_read_char()
850 if (state->ks_flags & ALTS) in kbdmux_read_char()
854 if (state->ks_flags & CTLS) in kbdmux_read_char()
860 if (state->ks_mode == K_CODE) { in kbdmux_read_char()
861 KBDMUX_UNLOCK(state); in kbdmux_read_char()
866 if (state->ks_flags & COMPOSE) { in kbdmux_read_char()
870 state->ks_composed_char *= 10; in kbdmux_read_char()
871 state->ks_composed_char += keycode - 0x40; in kbdmux_read_char()
872 if (state->ks_composed_char > UCHAR_MAX) { in kbdmux_read_char()
873 KBDMUX_UNLOCK(state); in kbdmux_read_char()
878 state->ks_composed_char *= 10; in kbdmux_read_char()
879 state->ks_composed_char += keycode - 0x47; in kbdmux_read_char()
880 if (state->ks_composed_char > UCHAR_MAX) { in kbdmux_read_char()
881 KBDMUX_UNLOCK(state); in kbdmux_read_char()
886 state->ks_composed_char *= 10; in kbdmux_read_char()
887 state->ks_composed_char += keycode - 0x4E; in kbdmux_read_char()
888 if (state->ks_composed_char > UCHAR_MAX) { in kbdmux_read_char()
889 KBDMUX_UNLOCK(state); in kbdmux_read_char()
894 state->ks_composed_char *= 10; in kbdmux_read_char()
895 if (state->ks_composed_char > UCHAR_MAX) { in kbdmux_read_char()
896 KBDMUX_UNLOCK(state); in kbdmux_read_char()
912 if (state->ks_composed_char > 0) { in kbdmux_read_char()
913 state->ks_flags &= ~COMPOSE; in kbdmux_read_char()
914 state->ks_composed_char = 0; in kbdmux_read_char()
915 KBDMUX_UNLOCK(state); in kbdmux_read_char()
924 &state->ks_state, &state->ks_accents); in kbdmux_read_char()
928 KBDMUX_UNLOCK(state); in kbdmux_read_char()
939 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_check_char() local
945 KBDMUX_LOCK(state); in kbdmux_check_char()
947 if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char != 0)) in kbdmux_check_char()
950 ready = (state->ks_inq_length > 0) ? TRUE : FALSE; in kbdmux_check_char()
952 KBDMUX_UNLOCK(state); in kbdmux_check_char()
974 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_ioctl() local
982 if (state == NULL) in kbdmux_ioctl()
993 KBDMUX_LOCK(state); in kbdmux_ioctl()
995 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1001 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1008 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1018 kbdmux_kbd_event, (void *) state)); in kbdmux_ioctl()
1020 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1034 mode = state->ks_state & LOCK_MASK; in kbdmux_ioctl()
1039 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1049 SLIST_INSERT_HEAD(&state->ks_kbds, k, next); in kbdmux_ioctl()
1051 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1061 KBDMUX_LOCK(state); in kbdmux_ioctl()
1063 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1071 SLIST_REMOVE(&state->ks_kbds, k, kbdmux_kbd, next); in kbdmux_ioctl()
1080 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1084 KBDMUX_LOCK(state); in kbdmux_ioctl()
1085 *(int *)arg = state->ks_mode; in kbdmux_ioctl()
1086 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1096 KBDMUX_LOCK(state); in kbdmux_ioctl()
1100 if (state->ks_mode != K_XLATE) { in kbdmux_ioctl()
1102 state->ks_state &= ~LOCK_MASK; in kbdmux_ioctl()
1103 state->ks_state |= KBD_LED_VAL(kbd); in kbdmux_ioctl()
1109 if (state->ks_mode != *(int *)arg) { in kbdmux_ioctl()
1110 kbdmux_clear_state_locked(state); in kbdmux_ioctl()
1111 state->ks_mode = *(int *)arg; in kbdmux_ioctl()
1120 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1124 KBDMUX_LOCK(state); in kbdmux_ioctl()
1126 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1136 KBDMUX_LOCK(state); in kbdmux_ioctl()
1140 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1147 if (state->ks_evdev != NULL && in kbdmux_ioctl()
1149 evdev_push_leds(state->ks_evdev, *(int *)arg); in kbdmux_ioctl()
1152 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1155 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1159 KBDMUX_LOCK(state); in kbdmux_ioctl()
1160 *(int *)arg = state->ks_state & LOCK_MASK; in kbdmux_ioctl()
1161 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1171 KBDMUX_LOCK(state); in kbdmux_ioctl()
1174 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1179 state->ks_state &= ~LOCK_MASK; in kbdmux_ioctl()
1180 state->ks_state |= *(int *)arg; in kbdmux_ioctl()
1183 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1186 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1200 KBDMUX_LOCK(state); in kbdmux_ioctl()
1220 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1228 if (state->ks_evdev != NULL && in kbdmux_ioctl()
1230 evdev_push_repeats(state->ks_evdev, kbd); in kbdmux_ioctl()
1233 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1236 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1243 KBDMUX_LOCK(state); in kbdmux_ioctl()
1244 state->ks_accents = 0; in kbdmux_ioctl()
1247 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_ioctl()
1250 KBDMUX_UNLOCK(state); in kbdmux_ioctl()
1274 kbdmux_clear_state_locked(kbdmux_state_t *state) in kbdmux_clear_state_locked() argument
1276 KBDMUX_LOCK_ASSERT(state, MA_OWNED); in kbdmux_clear_state_locked()
1278 state->ks_flags &= ~COMPOSE; in kbdmux_clear_state_locked()
1279 state->ks_polling = 0; in kbdmux_clear_state_locked()
1280 state->ks_state &= LOCK_MASK; /* preserve locking key state */ in kbdmux_clear_state_locked()
1281 state->ks_accents = 0; in kbdmux_clear_state_locked()
1282 state->ks_composed_char = 0; in kbdmux_clear_state_locked()
1284 state->ks_inq_length = 0; in kbdmux_clear_state_locked()
1290 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_clear_state() local
1292 KBDMUX_LOCK(state); in kbdmux_clear_state()
1293 kbdmux_clear_state_locked(state); in kbdmux_clear_state()
1294 KBDMUX_UNLOCK(state); in kbdmux_clear_state()
1333 kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; in kbdmux_poll() local
1336 KBDMUX_LOCK(state); in kbdmux_poll()
1339 state->ks_polling++; in kbdmux_poll()
1341 state->ks_polling--; in kbdmux_poll()
1344 SLIST_FOREACH(k, &state->ks_kbds, next) in kbdmux_poll()
1347 KBDMUX_UNLOCK(state); in kbdmux_poll()