Lines Matching refs:state

203 	vkbd_state_t		*state = (vkbd_state_t *) dev->si_drv1;  in vkbd_dev_open()  local
206 if (state == NULL) { in vkbd_dev_open()
214 state = (vkbd_state_t *) kbd->kb_data; in vkbd_dev_open()
232 VKBD_LOCK(state); in vkbd_dev_open()
234 if (state->ks_flags & OPEN) { in vkbd_dev_open()
235 VKBD_UNLOCK(state); in vkbd_dev_open()
239 state->ks_flags |= OPEN; in vkbd_dev_open()
240 state->ks_dev = dev; in vkbd_dev_open()
242 VKBD_UNLOCK(state); in vkbd_dev_open()
252 vkbd_state_t *state = NULL; in vkbd_dev_close() local
260 state = (vkbd_state_t *) kbd->kb_data; in vkbd_dev_close()
262 VKBD_LOCK(state); in vkbd_dev_close()
265 while (state->ks_flags & TASK) in vkbd_dev_close()
266 VKBD_SLEEP(state, ks_task, "vkbdc", 0); in vkbd_dev_close()
269 selwakeuppri(&state->ks_rsel, PZERO + 1); in vkbd_dev_close()
270 selwakeuppri(&state->ks_wsel, PZERO + 1); in vkbd_dev_close()
272 state->ks_flags &= ~OPEN; in vkbd_dev_close()
273 state->ks_dev = NULL; in vkbd_dev_close()
274 state->ks_inq.head = state->ks_inq.tail = state->ks_inq.cc = 0; in vkbd_dev_close()
276 VKBD_UNLOCK(state); in vkbd_dev_close()
295 vkbd_state_t *state = NULL; in vkbd_dev_read() local
308 state = (vkbd_state_t *) kbd->kb_data; in vkbd_dev_read()
310 VKBD_LOCK(state); in vkbd_dev_read()
312 if (state->ks_flags & READ) { in vkbd_dev_read()
313 VKBD_UNLOCK(state); in vkbd_dev_read()
317 state->ks_flags |= READ; in vkbd_dev_read()
319 if (state->ks_flags & STATUS) { in vkbd_dev_read()
320 state->ks_flags &= ~STATUS; in vkbd_dev_read()
322 status.mode = state->ks_mode; in vkbd_dev_read()
324 status.lock = state->ks_state & LOCK_MASK; in vkbd_dev_read()
336 error = VKBD_SLEEP(state, ks_flags, "vkbdr", 0); in vkbd_dev_read()
343 state->ks_flags &= ~READ; in vkbd_dev_read()
345 VKBD_UNLOCK(state); in vkbd_dev_read()
355 vkbd_state_t *state = NULL; in vkbd_dev_write() local
368 state = (vkbd_state_t *) kbd->kb_data; in vkbd_dev_write()
370 VKBD_LOCK(state); in vkbd_dev_write()
372 if (state->ks_flags & WRITE) { in vkbd_dev_write()
373 VKBD_UNLOCK(state); in vkbd_dev_write()
377 state->ks_flags |= WRITE; in vkbd_dev_write()
379 q = &state->ks_inq; in vkbd_dev_write()
398 error = VKBD_SLEEP(state, ks_inq, "vkbdw", 0); in vkbd_dev_write()
418 if (!(state->ks_flags & TASK) && in vkbd_dev_write()
419 taskqueue_enqueue(taskqueue_swi_giant, &state->ks_task) == 0) in vkbd_dev_write()
420 state->ks_flags |= TASK; in vkbd_dev_write()
424 state->ks_flags &= ~WRITE; in vkbd_dev_write()
426 VKBD_UNLOCK(state); in vkbd_dev_write()
444 vkbd_state_t *state = (vkbd_state_t *) dev->si_drv1; in vkbd_dev_poll() local
448 if (state == NULL) in vkbd_dev_poll()
451 VKBD_LOCK(state); in vkbd_dev_poll()
453 q = &state->ks_inq; in vkbd_dev_poll()
456 if (state->ks_flags & STATUS) in vkbd_dev_poll()
459 selrecord(td, &state->ks_rsel); in vkbd_dev_poll()
466 selrecord(td, &state->ks_wsel); in vkbd_dev_poll()
469 VKBD_UNLOCK(state); in vkbd_dev_poll()
479 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_dev_intr() local
483 VKBD_LOCK(state); in vkbd_dev_intr()
485 state->ks_flags &= ~TASK; in vkbd_dev_intr()
486 wakeup(&state->ks_task); in vkbd_dev_intr()
488 VKBD_UNLOCK(state); in vkbd_dev_intr()
493 vkbd_status_changed(vkbd_state_t *state) in vkbd_status_changed() argument
495 VKBD_LOCK_ASSERT(state, MA_OWNED); in vkbd_status_changed()
497 if (!(state->ks_flags & STATUS)) { in vkbd_status_changed()
498 state->ks_flags |= STATUS; in vkbd_status_changed()
499 selwakeuppri(&state->ks_rsel, PZERO + 1); in vkbd_status_changed()
500 wakeup(&state->ks_flags); in vkbd_status_changed()
506 vkbd_data_ready(vkbd_state_t *state) in vkbd_data_ready() argument
508 VKBD_LOCK_ASSERT(state, MA_OWNED); in vkbd_data_ready()
510 return (state->ks_inq.cc > 0); in vkbd_data_ready()
515 vkbd_data_read(vkbd_state_t *state, int wait) in vkbd_data_read() argument
517 vkbd_queue_t *q = &state->ks_inq; in vkbd_data_read()
520 VKBD_LOCK_ASSERT(state, MA_OWNED); in vkbd_data_read()
532 selwakeuppri(&state->ks_wsel, PZERO + 1); in vkbd_data_read()
558 static void vkbd_clear_state_locked(vkbd_state_t *state);
609 vkbd_state_t *state = NULL; in vkbd_init() local
618 state = malloc(sizeof(*state), M_VKBD, M_NOWAIT | M_ZERO); in vkbd_init()
624 if ((kbd == NULL) || (state == NULL) || (keymap == NULL) || in vkbd_init()
630 VKBD_LOCK_INIT(state); in vkbd_init()
631 state->ks_inq.head = state->ks_inq.tail = state->ks_inq.cc = 0; in vkbd_init()
632 TASK_INIT(&state->ks_task, 0, vkbd_dev_intr, (void *) kbd); in vkbd_init()
637 state = (vkbd_state_t *) kbd->kb_data; in vkbd_init()
652 kbd->kb_data = (void *)state; in vkbd_init()
657 VKBD_LOCK(state); in vkbd_init()
658 vkbd_clear_state_locked(state); in vkbd_init()
659 state->ks_mode = K_XLATE; in vkbd_init()
661 VKBD_UNLOCK(state); in vkbd_init()
666 vkbd_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state); in vkbd_init()
684 if (state != NULL) in vkbd_init()
685 free(state, M_VKBD); in vkbd_init()
704 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_term() local
708 VKBD_LOCK_DESTROY(state); in vkbd_term()
709 bzero(state, sizeof(*state)); in vkbd_term()
710 free(state, M_VKBD); in vkbd_term()
771 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_read() local
774 VKBD_LOCK(state); in vkbd_read()
775 c = vkbd_data_read(state, wait); in vkbd_read()
776 VKBD_UNLOCK(state); in vkbd_read()
788 vkbd_state_t *state = NULL; in vkbd_check() local
794 state = (vkbd_state_t *) kbd->kb_data; in vkbd_check()
796 VKBD_LOCK(state); in vkbd_check()
797 ready = vkbd_data_ready(state); in vkbd_check()
798 VKBD_UNLOCK(state); in vkbd_check()
807 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_read_char() local
811 VKBD_LOCK(state); in vkbd_read_char()
816 if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char > 0)) { in vkbd_read_char()
817 action = state->ks_composed_char; in vkbd_read_char()
818 state->ks_composed_char = 0; in vkbd_read_char()
820 VKBD_UNLOCK(state); in vkbd_read_char()
824 VKBD_UNLOCK(state); in vkbd_read_char()
829 scancode = vkbd_data_read(state, wait); in vkbd_read_char()
831 VKBD_UNLOCK(state); in vkbd_read_char()
839 if (state->ks_mode == K_RAW) { in vkbd_read_char()
840 VKBD_UNLOCK(state); in vkbd_read_char()
846 switch (state->ks_prefix) { in vkbd_read_char()
850 if (state->ks_flags & COMPOSE) { in vkbd_read_char()
851 state->ks_flags &= ~COMPOSE; in vkbd_read_char()
852 if (state->ks_composed_char > UCHAR_MAX) in vkbd_read_char()
853 state->ks_composed_char = 0; in vkbd_read_char()
857 if (!(state->ks_flags & COMPOSE)) { in vkbd_read_char()
858 state->ks_flags |= COMPOSE; in vkbd_read_char()
859 state->ks_composed_char = 0; in vkbd_read_char()
864 state->ks_prefix = scancode; in vkbd_read_char()
869 state->ks_prefix = 0; in vkbd_read_char()
949 state->ks_prefix = 0; in vkbd_read_char()
951 state->ks_prefix = 0x1D; in vkbd_read_char()
955 state->ks_prefix = 0; in vkbd_read_char()
965 if (state->ks_flags & SHIFTS) in vkbd_read_char()
969 if (state->ks_flags & CTLS) in vkbd_read_char()
973 if (state->ks_flags & CTLS) in vkbd_read_char()
980 if (state->ks_flags & ALTS) in vkbd_read_char()
984 if (state->ks_flags & CTLS) in vkbd_read_char()
991 if (state->ks_mode == K_CODE) { in vkbd_read_char()
992 VKBD_UNLOCK(state); in vkbd_read_char()
997 if (state->ks_flags & COMPOSE) { in vkbd_read_char()
1001 state->ks_composed_char *= 10; in vkbd_read_char()
1002 state->ks_composed_char += keycode - 0x40; in vkbd_read_char()
1003 if (state->ks_composed_char > UCHAR_MAX) { in vkbd_read_char()
1004 VKBD_UNLOCK(state); in vkbd_read_char()
1009 state->ks_composed_char *= 10; in vkbd_read_char()
1010 state->ks_composed_char += keycode - 0x47; in vkbd_read_char()
1011 if (state->ks_composed_char > UCHAR_MAX) { in vkbd_read_char()
1012 VKBD_UNLOCK(state); in vkbd_read_char()
1017 state->ks_composed_char *= 10; in vkbd_read_char()
1018 state->ks_composed_char += keycode - 0x4E; in vkbd_read_char()
1019 if (state->ks_composed_char > UCHAR_MAX) { in vkbd_read_char()
1020 VKBD_UNLOCK(state); in vkbd_read_char()
1025 state->ks_composed_char *= 10; in vkbd_read_char()
1026 if (state->ks_composed_char > UCHAR_MAX) { in vkbd_read_char()
1027 VKBD_UNLOCK(state); in vkbd_read_char()
1043 if (state->ks_composed_char > 0) { in vkbd_read_char()
1044 state->ks_flags &= ~COMPOSE; in vkbd_read_char()
1045 state->ks_composed_char = 0; in vkbd_read_char()
1046 VKBD_UNLOCK(state); in vkbd_read_char()
1055 &state->ks_state, &state->ks_accents); in vkbd_read_char()
1059 VKBD_UNLOCK(state); in vkbd_read_char()
1068 vkbd_state_t *state = NULL; in vkbd_check_char() local
1074 state = (vkbd_state_t *) kbd->kb_data; in vkbd_check_char()
1076 VKBD_LOCK(state); in vkbd_check_char()
1077 if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char > 0)) in vkbd_check_char()
1080 ready = vkbd_data_ready(state); in vkbd_check_char()
1081 VKBD_UNLOCK(state); in vkbd_check_char()
1090 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_ioctl() local
1096 VKBD_LOCK(state); in vkbd_ioctl()
1100 *(int *)arg = state->ks_mode; in vkbd_ioctl()
1112 if (state->ks_mode != K_XLATE) { in vkbd_ioctl()
1114 state->ks_state &= ~LOCK_MASK; in vkbd_ioctl()
1115 state->ks_state |= KBD_LED_VAL(kbd); in vkbd_ioctl()
1116 vkbd_status_changed(state); in vkbd_ioctl()
1122 if (state->ks_mode != *(int *)arg) { in vkbd_ioctl()
1123 vkbd_clear_state_locked(state); in vkbd_ioctl()
1124 state->ks_mode = *(int *)arg; in vkbd_ioctl()
1125 vkbd_status_changed(state); in vkbd_ioctl()
1130 VKBD_UNLOCK(state); in vkbd_ioctl()
1148 VKBD_UNLOCK(state); in vkbd_ioctl()
1154 if (state->ks_mode == K_XLATE && in vkbd_ioctl()
1163 vkbd_status_changed(state); in vkbd_ioctl()
1167 *(int *)arg = state->ks_state & LOCK_MASK; in vkbd_ioctl()
1178 VKBD_UNLOCK(state); in vkbd_ioctl()
1181 state->ks_state &= ~LOCK_MASK; in vkbd_ioctl()
1182 state->ks_state |= *(int *)arg; in vkbd_ioctl()
1183 vkbd_status_changed(state); in vkbd_ioctl()
1184 VKBD_UNLOCK(state); in vkbd_ioctl()
1192 vkbd_status_changed(state); in vkbd_ioctl()
1204 vkbd_status_changed(state); in vkbd_ioctl()
1211 state->ks_accents = 0; in vkbd_ioctl()
1215 VKBD_UNLOCK(state); in vkbd_ioctl()
1219 VKBD_UNLOCK(state); in vkbd_ioctl()
1233 vkbd_clear_state_locked(vkbd_state_t *state) in vkbd_clear_state_locked() argument
1235 VKBD_LOCK_ASSERT(state, MA_OWNED); in vkbd_clear_state_locked()
1237 state->ks_flags &= ~COMPOSE; in vkbd_clear_state_locked()
1238 state->ks_polling = 0; in vkbd_clear_state_locked()
1239 state->ks_state &= LOCK_MASK; /* preserve locking key state */ in vkbd_clear_state_locked()
1240 state->ks_accents = 0; in vkbd_clear_state_locked()
1241 state->ks_composed_char = 0; in vkbd_clear_state_locked()
1245 state->ks_inq.head = state->ks_inq.tail = state->ks_inq.cc = 0; in vkbd_clear_state_locked()
1246 selwakeuppri(&state->ks_wsel, PZERO + 1); in vkbd_clear_state_locked()
1247 wakeup(&state->ks_inq); in vkbd_clear_state_locked()
1253 vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data; in vkbd_clear_state() local
1255 VKBD_LOCK(state); in vkbd_clear_state()
1256 vkbd_clear_state_locked(state); in vkbd_clear_state()
1257 VKBD_UNLOCK(state); in vkbd_clear_state()
1286 vkbd_state_t *state = NULL; in vkbd_poll() local
1288 state = (vkbd_state_t *) kbd->kb_data; in vkbd_poll()
1290 VKBD_LOCK(state); in vkbd_poll()
1293 state->ks_polling ++; in vkbd_poll()
1295 state->ks_polling --; in vkbd_poll()
1297 VKBD_UNLOCK(state); in vkbd_poll()