Lines Matching refs:evdev

50 #define	debugf(evdev, fmt, args...)	kprintf("evdev: " fmt "\n", ##args)  argument
52 #define debugf(evdev, fmt, args...) argument
56 FEATURE(evdev, "Input event devices support");
91 SYSCTL_NODE(_kern, OID_AUTO, evdev, CTLFLAG_RW, 0, "Evdev args");
114 evdev_free(struct evdev_dev *evdev) in evdev_free() argument
116 if (evdev) { in evdev_free()
117 if (evdev->ev_cdev != NULL && evdev->ev_cdev->si_drv1 != NULL) in evdev_free()
118 evdev_unregister(evdev); in evdev_free()
119 kfree(evdev, M_EVDEV); in evdev_free()
139 evdev_set_report_size(struct evdev_dev *evdev, size_t report_size) in evdev_set_report_size() argument
145 evdev->ev_report_size = report_size; in evdev_set_report_size()
150 evdev_estimate_report_size(struct evdev_dev *evdev) in evdev_estimate_report_size() argument
159 bit_ffs_at(evdev->ev_key_flags, KEY_OK, KEY_CNT - KEY_OK, &res); in evdev_estimate_report_size()
161 bit_ffs(evdev->ev_key_flags, BTN_MISC, &res); in evdev_estimate_report_size()
163 bit_count(evdev->ev_key_flags, BTN_MISC, KEY_OK - BTN_MISC, &res); in evdev_estimate_report_size()
167 bit_count(evdev->ev_rel_flags, 0, REL_CNT, &res); in evdev_estimate_report_size()
174 if (evdev->ev_absinfo != NULL) { in evdev_estimate_report_size()
175 bit_count(evdev->ev_abs_flags, 0, ABS_CNT, &res); in evdev_estimate_report_size()
177 bit_count(evdev->ev_abs_flags, ABS_MT_FIRST, MT_CNT, &res); in evdev_estimate_report_size()
180 if (bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_estimate_report_size()
182 size += res * MAXIMAL_MT_SLOT(evdev); in evdev_estimate_report_size()
190 bit_count(evdev->ev_msc_flags, 0, MSC_CNT, &res); in evdev_estimate_report_size()
194 bit_count(evdev->ev_led_flags, 0, LED_CNT, &res); in evdev_estimate_report_size()
198 bit_ffs(evdev->ev_snd_flags, SND_CNT, &res); in evdev_estimate_report_size()
201 bit_ffs(evdev->ev_sw_flags, SW_CNT, &res); in evdev_estimate_report_size()
211 evdev_sysctl_create(struct evdev_dev *evdev) in evdev_sysctl_create() argument
216 ksnprintf(ev_unit_str, sizeof(ev_unit_str), "%d", evdev->ev_unit); in evdev_sysctl_create()
217 sysctl_ctx_init(&evdev->ev_sysctl_ctx); in evdev_sysctl_create()
219 ev_sysctl_tree = SYSCTL_ADD_NODE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
223 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
225 evdev->ev_name, 0, in evdev_sysctl_create()
228 SYSCTL_ADD_STRUCT(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
230 &evdev->ev_id, input_id, in evdev_sysctl_create()
234 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
236 evdev->ev_shortname, 0, in evdev_sysctl_create()
240 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
242 evdev->ev_serial, 0, in evdev_sysctl_create()
245 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
247 evdev->ev_prop_flags, sizeof(evdev->ev_prop_flags), "", in evdev_sysctl_create()
250 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
252 evdev->ev_type_flags, sizeof(evdev->ev_type_flags), "", in evdev_sysctl_create()
255 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
257 evdev->ev_key_flags, sizeof(evdev->ev_key_flags), in evdev_sysctl_create()
260 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
262 evdev->ev_rel_flags, sizeof(evdev->ev_rel_flags), "", in evdev_sysctl_create()
265 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
267 evdev->ev_abs_flags, sizeof(evdev->ev_abs_flags), "", in evdev_sysctl_create()
270 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
272 evdev->ev_msc_flags, sizeof(evdev->ev_msc_flags), "", in evdev_sysctl_create()
275 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
277 evdev->ev_led_flags, sizeof(evdev->ev_led_flags), "", in evdev_sysctl_create()
280 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
282 evdev->ev_snd_flags, sizeof(evdev->ev_snd_flags), "", in evdev_sysctl_create()
285 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
287 evdev->ev_sw_flags, sizeof(evdev->ev_sw_flags), "", in evdev_sysctl_create()
292 evdev_register_common(struct evdev_dev *evdev) in evdev_register_common() argument
296 debugf(evdev, "%s: registered evdev provider: %s <%s>\n", in evdev_register_common()
297 evdev->ev_shortname, evdev->ev_name, evdev->ev_serial); in evdev_register_common()
300 LIST_INIT(&evdev->ev_clients); in evdev_register_common()
302 if (evdev_event_supported(evdev, EV_REP) && in evdev_register_common()
303 bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) { in evdev_register_common()
305 callout_init_lk(&evdev->ev_rep_callout, evdev->ev_state_lock); in evdev_register_common()
307 if (evdev->ev_rep[REP_DELAY] == 0 && in evdev_register_common()
308 evdev->ev_rep[REP_PERIOD] == 0) { in evdev_register_common()
310 evdev->ev_rep[REP_DELAY] = 250; in evdev_register_common()
311 evdev->ev_rep[REP_PERIOD] = 33; in evdev_register_common()
316 if (bit_test(evdev->ev_abs_flags, ABS_MT_SLOT) || in evdev_register_common()
317 bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) in evdev_register_common()
318 evdev_mt_init(evdev); in evdev_register_common()
321 if (evdev->ev_report_size == 0) { in evdev_register_common()
322 ret = evdev_set_report_size(evdev, in evdev_register_common()
323 evdev_estimate_report_size(evdev)); in evdev_register_common()
329 ret = evdev_cdev_create(evdev); in evdev_register_common()
334 evdev_sysctl_create(evdev); in evdev_register_common()
341 evdev_register(struct evdev_dev *evdev) in evdev_register() argument
345 evdev->ev_lock_type = EV_LOCK_INTERNAL; in evdev_register()
346 evdev->ev_state_lock = &evdev->ev_mtx; in evdev_register()
347 lockinit(&evdev->ev_mtx, "evmtx", 0, 0); in evdev_register()
349 ret = evdev_register_common(evdev); in evdev_register()
351 lockuninit(&evdev->ev_mtx); in evdev_register()
357 evdev_register_mtx(struct evdev_dev *evdev, struct lock *mtx) in evdev_register_mtx() argument
360 evdev->ev_lock_type = EV_LOCK_MTX; in evdev_register_mtx()
361 evdev->ev_state_lock = mtx; in evdev_register_mtx()
362 return (evdev_register_common(evdev)); in evdev_register_mtx()
366 evdev_unregister(struct evdev_dev *evdev) in evdev_unregister() argument
370 debugf(evdev, "%s: unregistered evdev provider: %s\n", in evdev_unregister()
371 evdev->ev_shortname, evdev->ev_name); in evdev_unregister()
373 sysctl_ctx_free(&evdev->ev_sysctl_ctx); in evdev_unregister()
375 EVDEV_LOCK(evdev); in evdev_unregister()
376 evdev->ev_cdev->si_drv1 = NULL; in evdev_unregister()
378 LIST_FOREACH_MUTABLE(client, &evdev->ev_clients, ec_link, tmp) { in evdev_unregister()
380 evdev_dispose_client(evdev, client); in evdev_unregister()
384 if (evdev->ev_cdev) { in evdev_unregister()
385 devfs_assume_knotes(evdev->ev_cdev, &client->kqinfo); in evdev_unregister()
388 EVDEV_UNLOCK(evdev); in evdev_unregister()
390 ret = evdev_cdev_destroy(evdev); in evdev_unregister()
391 evdev->ev_cdev = NULL; in evdev_unregister()
392 if (ret == 0 && evdev->ev_lock_type == EV_LOCK_INTERNAL) { in evdev_unregister()
393 lockuninit(&evdev->ev_mtx); in evdev_unregister()
400 if (evdev->ev_absinfo != NULL) in evdev_unregister()
401 evdev_free_absinfo(evdev->ev_absinfo); in evdev_unregister()
402 if (evdev->ev_mt != NULL) in evdev_unregister()
403 evdev_mt_free(evdev); in evdev_unregister()
409 evdev_set_name(struct evdev_dev *evdev, const char *name) in evdev_set_name() argument
412 ksnprintf(evdev->ev_name, NAMELEN, "%s", name); in evdev_set_name()
416 evdev_set_id(struct evdev_dev *evdev, uint16_t bustype, uint16_t vendor, in evdev_set_id() argument
420 evdev->ev_id = (struct input_id) { in evdev_set_id()
429 evdev_set_phys(struct evdev_dev *evdev, const char *name) in evdev_set_phys() argument
432 ksnprintf(evdev->ev_shortname, NAMELEN, "%s", name); in evdev_set_phys()
436 evdev_set_serial(struct evdev_dev *evdev, const char *serial) in evdev_set_serial() argument
439 ksnprintf(evdev->ev_serial, NAMELEN, "%s", serial); in evdev_set_serial()
443 evdev_set_methods(struct evdev_dev *evdev, void *softc, in evdev_set_methods() argument
447 evdev->ev_methods = methods; in evdev_set_methods()
448 evdev->ev_softc = softc; in evdev_set_methods()
452 evdev_get_softc(struct evdev_dev *evdev) in evdev_get_softc() argument
455 return (evdev->ev_softc); in evdev_get_softc()
459 evdev_support_prop(struct evdev_dev *evdev, uint16_t prop) in evdev_support_prop() argument
463 bit_set(evdev->ev_prop_flags, prop); in evdev_support_prop()
467 evdev_support_event(struct evdev_dev *evdev, uint16_t type) in evdev_support_event() argument
471 bit_set(evdev->ev_type_flags, type); in evdev_support_event()
475 evdev_support_key(struct evdev_dev *evdev, uint16_t code) in evdev_support_key() argument
479 bit_set(evdev->ev_key_flags, code); in evdev_support_key()
483 evdev_support_rel(struct evdev_dev *evdev, uint16_t code) in evdev_support_rel() argument
487 bit_set(evdev->ev_rel_flags, code); in evdev_support_rel()
491 evdev_support_abs(struct evdev_dev *evdev, uint16_t code, int32_t minimum, in evdev_support_abs() argument
506 evdev_set_abs_bit(evdev, code); in evdev_support_abs()
507 evdev_set_absinfo(evdev, code, &absinfo); in evdev_support_abs()
511 evdev_set_abs_bit(struct evdev_dev *evdev, uint16_t code) in evdev_set_abs_bit() argument
515 if (evdev->ev_absinfo == NULL) in evdev_set_abs_bit()
516 evdev->ev_absinfo = evdev_alloc_absinfo(); in evdev_set_abs_bit()
517 bit_set(evdev->ev_abs_flags, code); in evdev_set_abs_bit()
521 evdev_support_msc(struct evdev_dev *evdev, uint16_t code) in evdev_support_msc() argument
525 bit_set(evdev->ev_msc_flags, code); in evdev_support_msc()
530 evdev_support_led(struct evdev_dev *evdev, uint16_t code) in evdev_support_led() argument
534 bit_set(evdev->ev_led_flags, code); in evdev_support_led()
538 evdev_support_snd(struct evdev_dev *evdev, uint16_t code) in evdev_support_snd() argument
542 bit_set(evdev->ev_snd_flags, code); in evdev_support_snd()
546 evdev_support_sw(struct evdev_dev *evdev, uint16_t code) in evdev_support_sw() argument
550 bit_set(evdev->ev_sw_flags, code); in evdev_support_sw()
554 evdev_event_supported(struct evdev_dev *evdev, uint16_t type) in evdev_event_supported() argument
558 return (bit_test(evdev->ev_type_flags, type)); in evdev_event_supported()
562 evdev_set_absinfo(struct evdev_dev *evdev, uint16_t axis, in evdev_set_absinfo() argument
572 if (evdev->ev_absinfo == NULL) in evdev_set_absinfo()
573 evdev->ev_absinfo = evdev_alloc_absinfo(); in evdev_set_absinfo()
576 evdev->ev_absinfo[ABS_MT_SLOT].maximum = absinfo->maximum; in evdev_set_absinfo()
578 memcpy(&evdev->ev_absinfo[axis], absinfo, in evdev_set_absinfo()
583 evdev_set_repeat_params(struct evdev_dev *evdev, uint16_t property, int value) in evdev_set_repeat_params() argument
587 evdev->ev_rep[property] = value; in evdev_set_repeat_params()
591 evdev_set_flag(struct evdev_dev *evdev, uint16_t flag) in evdev_set_flag() argument
595 bit_set(evdev->ev_flags, flag); in evdev_set_flag()
599 evdev_check_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_check_event() argument
607 if (type != EV_SYN && !evdev_event_supported(evdev, type)) in evdev_check_event()
619 if (!bit_test(evdev->ev_key_flags, code)) in evdev_check_event()
626 if (!bit_test(evdev->ev_rel_flags, code)) in evdev_check_event()
633 if (!bit_test(evdev->ev_abs_flags, code)) in evdev_check_event()
636 (value < 0 || value > MAXIMAL_MT_SLOT(evdev))) in evdev_check_event()
638 if (ABS_IS_MT(code) && evdev->ev_mt == NULL && in evdev_check_event()
639 bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_check_event()
646 if (!bit_test(evdev->ev_msc_flags, code)) in evdev_check_event()
653 if (!bit_test(evdev->ev_led_flags, code)) in evdev_check_event()
660 if (!bit_test(evdev->ev_snd_flags, code)) in evdev_check_event()
667 if (!bit_test(evdev->ev_sw_flags, code)) in evdev_check_event()
684 evdev_modify_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_modify_event() argument
689 EVDEV_LOCK_ASSERT(evdev); in evdev_modify_event()
693 if (!evdev_event_supported(evdev, EV_REP)) in evdev_modify_event()
696 if (!bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) { in evdev_modify_event()
698 if (bit_test(evdev->ev_key_states, code) && in evdev_modify_event()
703 if (bit_test(evdev->ev_key_states, code) == !*value && in evdev_modify_event()
704 !LIST_EMPTY(&evdev->ev_clients)) { in evdev_modify_event()
706 evdev_start_repeat(evdev, code); in evdev_modify_event()
708 evdev_stop_repeat(evdev); in evdev_modify_event()
717 old_value = evdev->ev_absinfo[code].value; in evdev_modify_event()
718 else if (!bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_modify_event()
722 *value = evdev_mt_reassign_id(evdev, in evdev_modify_event()
723 evdev_mt_get_last_slot(evdev), *value); in evdev_modify_event()
726 old_value = evdev_mt_get_value(evdev, in evdev_modify_event()
727 evdev_mt_get_last_slot(evdev), code); in evdev_modify_event()
729 fuzz = evdev->ev_absinfo[code].fuzz; in evdev_modify_event()
745 evdev_sparse_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_sparse_event() argument
750 EVDEV_LOCK_ASSERT(evdev); in evdev_sparse_event()
761 if (bit_test(evdev->ev_key_states, code) == value) in evdev_sparse_event()
763 bit_change(evdev->ev_key_states, code, value); in evdev_sparse_event()
767 if (bit_test(evdev->ev_key_states, code) == 0 || in evdev_sparse_event()
768 !evdev_event_supported(evdev, EV_REP)) in evdev_sparse_event()
778 if (bit_test(evdev->ev_led_states, code) == value) in evdev_sparse_event()
780 bit_change(evdev->ev_led_states, code, value); in evdev_sparse_event()
784 bit_change(evdev->ev_snd_states, code, value); in evdev_sparse_event()
788 if (bit_test(evdev->ev_sw_states, code) == value) in evdev_sparse_event()
790 bit_change(evdev->ev_sw_states, code, value); in evdev_sparse_event()
794 if (evdev->ev_rep[code] == value) in evdev_sparse_event()
796 evdev_set_repeat_params(evdev, code, value); in evdev_sparse_event()
809 evdev_mt_set_last_slot(evdev, value); in evdev_sparse_event()
814 if (!bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_sparse_event()
817 last_mt_slot = evdev_mt_get_last_slot(evdev); in evdev_sparse_event()
818 if (evdev_mt_get_value(evdev, last_mt_slot, code) in evdev_sparse_event()
821 evdev_mt_set_value(evdev, last_mt_slot, code, value); in evdev_sparse_event()
822 if (last_mt_slot != CURRENT_MT_SLOT(evdev)) { in evdev_sparse_event()
823 CURRENT_MT_SLOT(evdev) = last_mt_slot; in evdev_sparse_event()
824 evdev->ev_report_opened = true; in evdev_sparse_event()
830 if (evdev->ev_absinfo[code].value == value) in evdev_sparse_event()
832 evdev->ev_absinfo[code].value = value; in evdev_sparse_event()
839 evdev->ev_report_count++; in evdev_sparse_event()
841 if (!evdev->ev_report_opened) in evdev_sparse_event()
843 evdev->ev_report_opened = false; in evdev_sparse_event()
849 evdev->ev_report_opened = true; in evdev_sparse_event()
854 evdev_propagate_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_propagate_event() argument
859 debugf(evdev, "%s pushed event %d/%d/%d", in evdev_propagate_event()
860 evdev->ev_shortname, type, code, value); in evdev_propagate_event()
862 EVDEV_LOCK_ASSERT(evdev); in evdev_propagate_event()
865 LIST_FOREACH(client, &evdev->ev_clients, ec_link) { in evdev_propagate_event()
866 if (evdev->ev_grabber != NULL && evdev->ev_grabber != client) in evdev_propagate_event()
876 evdev->ev_event_count++; in evdev_propagate_event()
880 evdev_send_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_send_event() argument
885 EVDEV_LOCK_ASSERT(evdev); in evdev_send_event()
887 evdev_modify_event(evdev, type, code, &value); in evdev_send_event()
888 sparse = evdev_sparse_event(evdev, type, code, value); in evdev_send_event()
892 evdev_propagate_event(evdev, EV_ABS, ABS_MT_SLOT, in evdev_send_event()
893 CURRENT_MT_SLOT(evdev)); in evdev_send_event()
896 evdev_propagate_event(evdev, type, code, value); in evdev_send_event()
904 evdev_push_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_push_event() argument
908 if (evdev_check_event(evdev, type, code, value) != 0) in evdev_push_event()
911 EVDEV_ENTER(evdev); in evdev_push_event()
914 bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_push_event()
915 evdev_mt_sync_frame(evdev); in evdev_push_event()
917 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK) && in evdev_push_event()
918 evdev_mt_record_event(evdev, type, code, value)) in evdev_push_event()
921 evdev_send_event(evdev, type, code, value); in evdev_push_event()
923 EVDEV_EXIT(evdev); in evdev_push_event()
929 evdev_inject_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_inject_event() argument
937 if (bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) in evdev_inject_event()
944 if (evdev->ev_methods != NULL && in evdev_inject_event()
945 evdev->ev_methods->ev_event != NULL) in evdev_inject_event()
946 evdev->ev_methods->ev_event(evdev, in evdev_inject_event()
963 if (evdev->ev_lock_type != EV_LOCK_INTERNAL) in evdev_inject_event()
964 EVDEV_LOCK(evdev); in evdev_inject_event()
965 ret = evdev_push_event(evdev, type, code, value); in evdev_inject_event()
966 if (evdev->ev_lock_type != EV_LOCK_INTERNAL) in evdev_inject_event()
967 EVDEV_UNLOCK(evdev); in evdev_inject_event()
978 evdev_register_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_register_client() argument
982 debugf(evdev, "adding new client for device %s", evdev->ev_shortname); in evdev_register_client()
984 EVDEV_LOCK_ASSERT(evdev); in evdev_register_client()
986 if (LIST_EMPTY(&evdev->ev_clients) && evdev->ev_methods != NULL && in evdev_register_client()
987 evdev->ev_methods->ev_open != NULL) { in evdev_register_client()
988 debugf(evdev, "calling ev_open() on device %s", in evdev_register_client()
989 evdev->ev_shortname); in evdev_register_client()
990 ret = evdev->ev_methods->ev_open(evdev); in evdev_register_client()
993 LIST_INSERT_HEAD(&evdev->ev_clients, client, ec_link); in evdev_register_client()
998 evdev_dispose_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_dispose_client() argument
1000 debugf(evdev, "removing client for device %s", evdev->ev_shortname); in evdev_dispose_client()
1002 EVDEV_LOCK_ASSERT(evdev); in evdev_dispose_client()
1005 if (LIST_EMPTY(&evdev->ev_clients)) { in evdev_dispose_client()
1006 if (evdev->ev_methods != NULL && in evdev_dispose_client()
1007 evdev->ev_methods->ev_close != NULL) in evdev_dispose_client()
1008 (void)evdev->ev_methods->ev_close(evdev); in evdev_dispose_client()
1009 if (evdev_event_supported(evdev, EV_REP) && in evdev_dispose_client()
1010 bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) in evdev_dispose_client()
1011 evdev_stop_repeat(evdev); in evdev_dispose_client()
1013 evdev_release_client(evdev, client); in evdev_dispose_client()
1017 evdev_grab_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_grab_client() argument
1020 EVDEV_LOCK_ASSERT(evdev); in evdev_grab_client()
1022 if (evdev->ev_grabber != NULL) in evdev_grab_client()
1025 evdev->ev_grabber = client; in evdev_grab_client()
1031 evdev_release_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_release_client() argument
1034 EVDEV_LOCK_ASSERT(evdev); in evdev_release_client()
1036 if (evdev->ev_grabber != client) in evdev_release_client()
1039 evdev->ev_grabber = NULL; in evdev_release_client()
1045 evdev_is_grabbed(struct evdev_dev *evdev) in evdev_is_grabbed() argument
1056 return (evdev->ev_grabber != NULL); in evdev_is_grabbed()
1062 struct evdev_dev *evdev = (struct evdev_dev *)arg; in evdev_repeat_callout() local
1064 evdev_send_event(evdev, EV_KEY, evdev->ev_rep_key, KEY_EVENT_REPEAT); in evdev_repeat_callout()
1065 evdev_send_event(evdev, EV_SYN, SYN_REPORT, 1); in evdev_repeat_callout()
1067 if (evdev->ev_rep[REP_PERIOD]) in evdev_repeat_callout()
1068 callout_reset(&evdev->ev_rep_callout, in evdev_repeat_callout()
1069 evdev->ev_rep[REP_PERIOD] * hz / 1000, in evdev_repeat_callout()
1070 evdev_repeat_callout, evdev); in evdev_repeat_callout()
1072 evdev->ev_rep_key = KEY_RESERVED; in evdev_repeat_callout()
1076 evdev_start_repeat(struct evdev_dev *evdev, uint16_t key) in evdev_start_repeat() argument
1079 EVDEV_LOCK_ASSERT(evdev); in evdev_start_repeat()
1081 if (evdev->ev_rep[REP_DELAY]) { in evdev_start_repeat()
1082 evdev->ev_rep_key = key; in evdev_start_repeat()
1083 callout_reset(&evdev->ev_rep_callout, in evdev_start_repeat()
1084 evdev->ev_rep[REP_DELAY] * hz / 1000, in evdev_start_repeat()
1085 evdev_repeat_callout, evdev); in evdev_start_repeat()
1090 evdev_stop_repeat(struct evdev_dev *evdev) in evdev_stop_repeat() argument
1093 EVDEV_LOCK_ASSERT(evdev); in evdev_stop_repeat()
1095 if (evdev->ev_rep_key != KEY_RESERVED) { in evdev_stop_repeat()
1096 callout_stop(&evdev->ev_rep_callout); in evdev_stop_repeat()
1097 evdev->ev_rep_key = KEY_RESERVED; in evdev_stop_repeat()
1122 DEV_MODULE(evdev, evdev_load, NULL);
1123 MODULE_VERSION(evdev, 1);