Lines Matching refs:evdev
48 #define debugf(evdev, fmt, args...) printf("evdev: " fmt "\n", ##args) argument
50 #define debugf(evdev, fmt, args...) argument
54 FEATURE(evdev, "Input event devices support");
72 SYSCTL_NODE(_kern, OID_AUTO, evdev, CTLFLAG_RW, 0, "Evdev args");
104 evdev_free(struct evdev_dev *evdev) in evdev_free() argument
107 if (evdev != NULL && evdev->ev_cdev != NULL && in evdev_free()
108 evdev->ev_cdev->si_drv1 != NULL) in evdev_free()
109 evdev_unregister(evdev); in evdev_free()
111 free(evdev, M_EVDEV); in evdev_free()
130 evdev_set_report_size(struct evdev_dev *evdev, size_t report_size) in evdev_set_report_size() argument
136 evdev->ev_report_size = report_size; in evdev_set_report_size()
141 evdev_estimate_report_size(struct evdev_dev *evdev) in evdev_estimate_report_size() argument
150 bit_ffs_at(evdev->ev_key_flags, KEY_OK, KEY_CNT - KEY_OK, &res); in evdev_estimate_report_size()
152 bit_ffs(evdev->ev_key_flags, BTN_MISC, &res); in evdev_estimate_report_size()
154 bit_count(evdev->ev_key_flags, BTN_MISC, KEY_OK - BTN_MISC, &res); in evdev_estimate_report_size()
158 bit_count(evdev->ev_rel_flags, 0, REL_CNT, &res); in evdev_estimate_report_size()
165 if (evdev->ev_absinfo != NULL) { in evdev_estimate_report_size()
166 bit_count(evdev->ev_abs_flags, 0, ABS_CNT, &res); in evdev_estimate_report_size()
168 bit_count(evdev->ev_abs_flags, ABS_MT_FIRST, MT_CNT, &res); in evdev_estimate_report_size()
171 if (bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_estimate_report_size()
173 size += res * MAXIMAL_MT_SLOT(evdev); in evdev_estimate_report_size()
181 bit_count(evdev->ev_msc_flags, 0, MSC_CNT, &res); in evdev_estimate_report_size()
185 bit_count(evdev->ev_led_flags, 0, LED_CNT, &res); in evdev_estimate_report_size()
189 bit_ffs(evdev->ev_snd_flags, SND_CNT, &res); in evdev_estimate_report_size()
192 bit_ffs(evdev->ev_sw_flags, SW_CNT, &res); in evdev_estimate_report_size()
202 evdev_sysctl_create(struct evdev_dev *evdev) in evdev_sysctl_create() argument
207 snprintf(ev_unit_str, sizeof(ev_unit_str), "%d", evdev->ev_unit); in evdev_sysctl_create()
208 sysctl_ctx_init(&evdev->ev_sysctl_ctx); in evdev_sysctl_create()
210 ev_sysctl_tree = SYSCTL_ADD_NODE_WITH_LABEL(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
214 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
216 evdev->ev_name, 0, in evdev_sysctl_create()
219 SYSCTL_ADD_STRUCT(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
221 &evdev->ev_id, input_id, in evdev_sysctl_create()
225 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
227 evdev->ev_shortname, 0, in evdev_sysctl_create()
231 SYSCTL_ADD_STRING(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
233 evdev->ev_serial, 0, in evdev_sysctl_create()
236 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
238 evdev->ev_prop_flags, sizeof(evdev->ev_prop_flags), "", in evdev_sysctl_create()
241 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
243 evdev->ev_type_flags, sizeof(evdev->ev_type_flags), "", in evdev_sysctl_create()
246 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
248 evdev->ev_key_flags, sizeof(evdev->ev_key_flags), in evdev_sysctl_create()
251 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
253 evdev->ev_rel_flags, sizeof(evdev->ev_rel_flags), "", in evdev_sysctl_create()
256 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
258 evdev->ev_abs_flags, sizeof(evdev->ev_abs_flags), "", in evdev_sysctl_create()
261 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
263 evdev->ev_msc_flags, sizeof(evdev->ev_msc_flags), "", in evdev_sysctl_create()
266 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
268 evdev->ev_led_flags, sizeof(evdev->ev_led_flags), "", in evdev_sysctl_create()
271 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
273 evdev->ev_snd_flags, sizeof(evdev->ev_snd_flags), "", in evdev_sysctl_create()
276 SYSCTL_ADD_OPAQUE(&evdev->ev_sysctl_ctx, in evdev_sysctl_create()
278 evdev->ev_sw_flags, sizeof(evdev->ev_sw_flags), "", in evdev_sysctl_create()
283 evdev_register_common(struct evdev_dev *evdev) in evdev_register_common() argument
287 debugf(evdev, "%s: registered evdev provider: %s <%s>\n", in evdev_register_common()
288 evdev->ev_shortname, evdev->ev_name, evdev->ev_serial); in evdev_register_common()
291 LIST_INIT(&evdev->ev_clients); in evdev_register_common()
293 if (evdev_event_supported(evdev, EV_REP) && in evdev_register_common()
294 bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) { in evdev_register_common()
296 callout_init_mtx(&evdev->ev_rep_callout, &evdev->ev_mtx, 0); in evdev_register_common()
298 if (evdev->ev_rep[REP_DELAY] == 0 && in evdev_register_common()
299 evdev->ev_rep[REP_PERIOD] == 0) { in evdev_register_common()
301 evdev->ev_rep[REP_DELAY] = 250; in evdev_register_common()
302 evdev->ev_rep[REP_PERIOD] = 33; in evdev_register_common()
307 if (bit_test(evdev->ev_abs_flags, ABS_MT_SLOT) && in evdev_register_common()
308 evdev->ev_absinfo != NULL && MAXIMAL_MT_SLOT(evdev) > 0) in evdev_register_common()
309 evdev_mt_init(evdev); in evdev_register_common()
312 if (evdev->ev_report_size == 0) { in evdev_register_common()
313 ret = evdev_set_report_size(evdev, in evdev_register_common()
314 evdev_estimate_report_size(evdev)); in evdev_register_common()
320 ret = evdev_cdev_create(evdev); in evdev_register_common()
325 evdev_sysctl_create(evdev); in evdev_register_common()
332 evdev_register(struct evdev_dev *evdev) in evdev_register() argument
336 evdev->ev_lock_type = EV_LOCK_INTERNAL; in evdev_register()
337 evdev->ev_lock = &evdev->ev_mtx; in evdev_register()
338 mtx_init(&evdev->ev_mtx, "evmtx", NULL, MTX_DEF); in evdev_register()
340 ret = evdev_register_common(evdev); in evdev_register()
342 mtx_destroy(&evdev->ev_mtx); in evdev_register()
348 evdev_register_mtx(struct evdev_dev *evdev, struct mtx *mtx) in evdev_register_mtx() argument
351 evdev->ev_lock_type = EV_LOCK_MTX; in evdev_register_mtx()
352 evdev->ev_lock = mtx; in evdev_register_mtx()
353 return (evdev_register_common(evdev)); in evdev_register_mtx()
357 evdev_unregister(struct evdev_dev *evdev) in evdev_unregister() argument
361 debugf(evdev, "%s: unregistered evdev provider: %s\n", in evdev_unregister()
362 evdev->ev_shortname, evdev->ev_name); in evdev_unregister()
364 sysctl_ctx_free(&evdev->ev_sysctl_ctx); in evdev_unregister()
366 EVDEV_LOCK(evdev); in evdev_unregister()
367 evdev->ev_cdev->si_drv1 = NULL; in evdev_unregister()
369 LIST_FOREACH(client, &evdev->ev_clients, ec_link) { in evdev_unregister()
371 evdev_dispose_client(evdev, client); in evdev_unregister()
376 EVDEV_UNLOCK(evdev); in evdev_unregister()
379 ret = evdev_cdev_destroy(evdev); in evdev_unregister()
380 evdev->ev_cdev = NULL; in evdev_unregister()
381 if (ret == 0 && evdev->ev_lock_type == EV_LOCK_INTERNAL) in evdev_unregister()
382 mtx_destroy(&evdev->ev_mtx); in evdev_unregister()
384 evdev_free_absinfo(evdev->ev_absinfo); in evdev_unregister()
385 evdev_mt_free(evdev); in evdev_unregister()
391 evdev_set_name(struct evdev_dev *evdev, const char *name) in evdev_set_name() argument
394 snprintf(evdev->ev_name, NAMELEN, "%s", name); in evdev_set_name()
398 evdev_set_id(struct evdev_dev *evdev, uint16_t bustype, uint16_t vendor, in evdev_set_id() argument
402 evdev->ev_id = (struct input_id) { in evdev_set_id()
411 evdev_set_phys(struct evdev_dev *evdev, const char *name) in evdev_set_phys() argument
414 snprintf(evdev->ev_shortname, NAMELEN, "%s", name); in evdev_set_phys()
418 evdev_set_serial(struct evdev_dev *evdev, const char *serial) in evdev_set_serial() argument
421 snprintf(evdev->ev_serial, NAMELEN, "%s", serial); in evdev_set_serial()
425 evdev_set_methods(struct evdev_dev *evdev, void *softc, in evdev_set_methods() argument
429 evdev->ev_methods = methods; in evdev_set_methods()
430 evdev->ev_softc = softc; in evdev_set_methods()
434 evdev_get_softc(struct evdev_dev *evdev) in evdev_get_softc() argument
437 return (evdev->ev_softc); in evdev_get_softc()
441 evdev_support_prop(struct evdev_dev *evdev, uint16_t prop) in evdev_support_prop() argument
445 bit_set(evdev->ev_prop_flags, prop); in evdev_support_prop()
449 evdev_support_event(struct evdev_dev *evdev, uint16_t type) in evdev_support_event() argument
453 bit_set(evdev->ev_type_flags, type); in evdev_support_event()
457 evdev_support_key(struct evdev_dev *evdev, uint16_t code) in evdev_support_key() argument
461 bit_set(evdev->ev_key_flags, code); in evdev_support_key()
465 evdev_support_rel(struct evdev_dev *evdev, uint16_t code) in evdev_support_rel() argument
469 bit_set(evdev->ev_rel_flags, code); in evdev_support_rel()
473 evdev_support_abs(struct evdev_dev *evdev, uint16_t code, int32_t value, in evdev_support_abs() argument
489 evdev_set_abs_bit(evdev, code); in evdev_support_abs()
490 evdev_set_absinfo(evdev, code, &absinfo); in evdev_support_abs()
494 evdev_set_abs_bit(struct evdev_dev *evdev, uint16_t code) in evdev_set_abs_bit() argument
498 if (evdev->ev_absinfo == NULL) in evdev_set_abs_bit()
499 evdev->ev_absinfo = evdev_alloc_absinfo(); in evdev_set_abs_bit()
500 bit_set(evdev->ev_abs_flags, code); in evdev_set_abs_bit()
504 evdev_support_msc(struct evdev_dev *evdev, uint16_t code) in evdev_support_msc() argument
508 bit_set(evdev->ev_msc_flags, code); in evdev_support_msc()
513 evdev_support_led(struct evdev_dev *evdev, uint16_t code) in evdev_support_led() argument
517 bit_set(evdev->ev_led_flags, code); in evdev_support_led()
521 evdev_support_snd(struct evdev_dev *evdev, uint16_t code) in evdev_support_snd() argument
525 bit_set(evdev->ev_snd_flags, code); in evdev_support_snd()
529 evdev_support_sw(struct evdev_dev *evdev, uint16_t code) in evdev_support_sw() argument
533 bit_set(evdev->ev_sw_flags, code); in evdev_support_sw()
537 evdev_event_supported(struct evdev_dev *evdev, uint16_t type) in evdev_event_supported() argument
541 return (bit_test(evdev->ev_type_flags, type)); in evdev_event_supported()
545 evdev_set_absinfo(struct evdev_dev *evdev, uint16_t axis, in evdev_set_absinfo() argument
555 if (evdev->ev_absinfo == NULL) in evdev_set_absinfo()
556 evdev->ev_absinfo = evdev_alloc_absinfo(); in evdev_set_absinfo()
559 evdev->ev_absinfo[ABS_MT_SLOT].maximum = absinfo->maximum; in evdev_set_absinfo()
561 memcpy(&evdev->ev_absinfo[axis], absinfo, in evdev_set_absinfo()
566 evdev_set_repeat_params(struct evdev_dev *evdev, uint16_t property, int value) in evdev_set_repeat_params() argument
570 evdev->ev_rep[property] = value; in evdev_set_repeat_params()
574 evdev_set_flag(struct evdev_dev *evdev, uint16_t flag) in evdev_set_flag() argument
578 bit_set(evdev->ev_flags, flag); in evdev_set_flag()
582 evdev_check_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_check_event() argument
590 if (type != EV_SYN && !evdev_event_supported(evdev, type)) in evdev_check_event()
602 if (!bit_test(evdev->ev_key_flags, code)) in evdev_check_event()
609 if (!bit_test(evdev->ev_rel_flags, code)) in evdev_check_event()
616 if (!bit_test(evdev->ev_abs_flags, code)) in evdev_check_event()
619 (value < 0 || value > MAXIMAL_MT_SLOT(evdev))) in evdev_check_event()
621 if (ABS_IS_MT(code) && evdev->ev_mt == NULL && in evdev_check_event()
622 bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_check_event()
629 if (!bit_test(evdev->ev_msc_flags, code)) in evdev_check_event()
636 if (!bit_test(evdev->ev_led_flags, code)) in evdev_check_event()
643 if (!bit_test(evdev->ev_snd_flags, code)) in evdev_check_event()
650 if (!bit_test(evdev->ev_sw_flags, code)) in evdev_check_event()
667 evdev_modify_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_modify_event() argument
671 EVDEV_LOCK_ASSERT(evdev); in evdev_modify_event()
675 if (!evdev_event_supported(evdev, EV_REP)) in evdev_modify_event()
678 if (!bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) { in evdev_modify_event()
680 if (bit_test(evdev->ev_key_states, code) && in evdev_modify_event()
685 if (bit_test(evdev->ev_key_states, code) == !*value && in evdev_modify_event()
686 !LIST_EMPTY(&evdev->ev_clients)) { in evdev_modify_event()
688 evdev_start_repeat(evdev, code); in evdev_modify_event()
690 evdev_stop_repeat(evdev); in evdev_modify_event()
702 evdev_sparse_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_sparse_event() argument
707 EVDEV_LOCK_ASSERT(evdev); in evdev_sparse_event()
718 if (bit_test(evdev->ev_key_states, code) == value) in evdev_sparse_event()
720 bit_change(evdev->ev_key_states, code, value); in evdev_sparse_event()
724 if (bit_test(evdev->ev_key_states, code) == 0 || in evdev_sparse_event()
725 !evdev_event_supported(evdev, EV_REP)) in evdev_sparse_event()
735 if (bit_test(evdev->ev_led_states, code) == value) in evdev_sparse_event()
737 bit_change(evdev->ev_led_states, code, value); in evdev_sparse_event()
741 bit_change(evdev->ev_snd_states, code, value); in evdev_sparse_event()
745 if (bit_test(evdev->ev_sw_states, code) == value) in evdev_sparse_event()
747 bit_change(evdev->ev_sw_states, code, value); in evdev_sparse_event()
751 if (evdev->ev_rep[code] == value) in evdev_sparse_event()
753 evdev_set_repeat_params(evdev, code, value); in evdev_sparse_event()
766 evdev_set_last_mt_slot(evdev, value); in evdev_sparse_event()
771 if (!bit_test(evdev->ev_abs_flags, ABS_MT_SLOT)) in evdev_sparse_event()
774 last_mt_slot = evdev_get_last_mt_slot(evdev); in evdev_sparse_event()
775 if (evdev_get_mt_value(evdev, last_mt_slot, code) in evdev_sparse_event()
778 evdev_set_mt_value(evdev, last_mt_slot, code, value); in evdev_sparse_event()
779 if (last_mt_slot != CURRENT_MT_SLOT(evdev)) { in evdev_sparse_event()
780 CURRENT_MT_SLOT(evdev) = last_mt_slot; in evdev_sparse_event()
781 evdev->ev_report_opened = true; in evdev_sparse_event()
787 if (evdev->ev_absinfo[code].value == value) in evdev_sparse_event()
789 evdev->ev_absinfo[code].value = value; in evdev_sparse_event()
796 evdev->ev_report_count++; in evdev_sparse_event()
798 if (!evdev->ev_report_opened) in evdev_sparse_event()
800 evdev->ev_report_opened = false; in evdev_sparse_event()
806 evdev->ev_report_opened = true; in evdev_sparse_event()
811 evdev_propagate_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_propagate_event() argument
816 debugf(evdev, "%s pushed event %d/%d/%d", in evdev_propagate_event()
817 evdev->ev_shortname, type, code, value); in evdev_propagate_event()
819 EVDEV_LOCK_ASSERT(evdev); in evdev_propagate_event()
822 LIST_FOREACH(client, &evdev->ev_clients, ec_link) { in evdev_propagate_event()
823 if (evdev->ev_grabber != NULL && evdev->ev_grabber != client) in evdev_propagate_event()
833 evdev->ev_event_count++; in evdev_propagate_event()
837 evdev_send_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_send_event() argument
842 EVDEV_LOCK_ASSERT(evdev); in evdev_send_event()
844 sparse = evdev_sparse_event(evdev, type, code, value); in evdev_send_event()
848 evdev_propagate_event(evdev, EV_ABS, ABS_MT_SLOT, in evdev_send_event()
849 CURRENT_MT_SLOT(evdev)); in evdev_send_event()
852 evdev_propagate_event(evdev, type, code, value); in evdev_send_event()
860 evdev_restore_after_kdb(struct evdev_dev *evdev) in evdev_restore_after_kdb() argument
864 EVDEV_LOCK_ASSERT(evdev); in evdev_restore_after_kdb()
868 if (bit_test(evdev->ev_kdb_led_states, code)) in evdev_restore_after_kdb()
869 evdev_send_event(evdev, EV_LED, code, in evdev_restore_after_kdb()
870 !bit_test(evdev->ev_led_states, code)); in evdev_restore_after_kdb()
871 bit_nclear(evdev->ev_kdb_led_states, 0, LED_MAX); in evdev_restore_after_kdb()
874 evdev_stop_repeat(evdev); in evdev_restore_after_kdb()
876 if (bit_test(evdev->ev_key_states, code)) { in evdev_restore_after_kdb()
877 evdev_send_event(evdev, EV_KEY, code, KEY_EVENT_UP); in evdev_restore_after_kdb()
878 evdev_send_event(evdev, EV_SYN, SYN_REPORT, 1); in evdev_restore_after_kdb()
884 evdev_push_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_push_event() argument
888 if (evdev_check_event(evdev, type, code, value) != 0) in evdev_push_event()
896 evdev->ev_kdb_active = true; in evdev_push_event()
898 bit_set(evdev->ev_kdb_led_states, in evdev_push_event()
899 bit_test(evdev->ev_led_states, code) != value); in evdev_push_event()
903 EVDEV_ENTER(evdev); in evdev_push_event()
906 if (evdev->ev_kdb_active) { in evdev_push_event()
907 evdev->ev_kdb_active = false; in evdev_push_event()
908 evdev_restore_after_kdb(evdev); in evdev_push_event()
911 evdev_modify_event(evdev, type, code, &value); in evdev_push_event()
913 bit_test(evdev->ev_flags, EVDEV_FLAG_MT_AUTOREL)) in evdev_push_event()
914 evdev_send_mt_autorel(evdev); in evdev_push_event()
915 if (type == EV_SYN && code == SYN_REPORT && evdev->ev_report_opened && in evdev_push_event()
916 bit_test(evdev->ev_flags, EVDEV_FLAG_MT_STCOMPAT)) in evdev_push_event()
917 evdev_send_mt_compat(evdev); in evdev_push_event()
918 evdev_send_event(evdev, type, code, value); in evdev_push_event()
920 EVDEV_EXIT(evdev); in evdev_push_event()
926 evdev_inject_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_inject_event() argument
934 if (bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) in evdev_inject_event()
941 if (evdev->ev_methods != NULL && in evdev_inject_event()
942 evdev->ev_methods->ev_event != NULL) in evdev_inject_event()
943 evdev->ev_methods->ev_event(evdev, type, code, value); in evdev_inject_event()
959 if (evdev->ev_lock_type != EV_LOCK_INTERNAL) in evdev_inject_event()
960 EVDEV_LOCK(evdev); in evdev_inject_event()
961 ret = evdev_push_event(evdev, type, code, value); in evdev_inject_event()
962 if (evdev->ev_lock_type != EV_LOCK_INTERNAL) in evdev_inject_event()
963 EVDEV_UNLOCK(evdev); in evdev_inject_event()
974 evdev_register_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_register_client() argument
978 debugf(evdev, "adding new client for device %s", evdev->ev_shortname); in evdev_register_client()
980 EVDEV_LOCK_ASSERT(evdev); in evdev_register_client()
982 if (LIST_EMPTY(&evdev->ev_clients) && evdev->ev_methods != NULL && in evdev_register_client()
983 evdev->ev_methods->ev_open != NULL) { in evdev_register_client()
984 debugf(evdev, "calling ev_open() on device %s", in evdev_register_client()
985 evdev->ev_shortname); in evdev_register_client()
986 ret = evdev->ev_methods->ev_open(evdev); in evdev_register_client()
989 LIST_INSERT_HEAD(&evdev->ev_clients, client, ec_link); in evdev_register_client()
994 evdev_dispose_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_dispose_client() argument
996 debugf(evdev, "removing client for device %s", evdev->ev_shortname); in evdev_dispose_client()
998 EVDEV_LOCK_ASSERT(evdev); in evdev_dispose_client()
1001 if (LIST_EMPTY(&evdev->ev_clients)) { in evdev_dispose_client()
1002 if (evdev->ev_methods != NULL && in evdev_dispose_client()
1003 evdev->ev_methods->ev_close != NULL) in evdev_dispose_client()
1004 (void)evdev->ev_methods->ev_close(evdev); in evdev_dispose_client()
1005 if (evdev_event_supported(evdev, EV_REP) && in evdev_dispose_client()
1006 bit_test(evdev->ev_flags, EVDEV_FLAG_SOFTREPEAT)) in evdev_dispose_client()
1007 evdev_stop_repeat(evdev); in evdev_dispose_client()
1009 evdev_release_client(evdev, client); in evdev_dispose_client()
1013 evdev_grab_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_grab_client() argument
1016 EVDEV_LOCK_ASSERT(evdev); in evdev_grab_client()
1018 if (evdev->ev_grabber != NULL) in evdev_grab_client()
1021 evdev->ev_grabber = client; in evdev_grab_client()
1027 evdev_release_client(struct evdev_dev *evdev, struct evdev_client *client) in evdev_release_client() argument
1030 EVDEV_LOCK_ASSERT(evdev); in evdev_release_client()
1032 if (evdev->ev_grabber != client) in evdev_release_client()
1035 evdev->ev_grabber = NULL; in evdev_release_client()
1043 struct evdev_dev *evdev = (struct evdev_dev *)arg; in evdev_repeat_callout() local
1045 evdev_send_event(evdev, EV_KEY, evdev->ev_rep_key, KEY_EVENT_REPEAT); in evdev_repeat_callout()
1046 evdev_send_event(evdev, EV_SYN, SYN_REPORT, 1); in evdev_repeat_callout()
1048 if (evdev->ev_rep[REP_PERIOD]) in evdev_repeat_callout()
1049 callout_reset(&evdev->ev_rep_callout, in evdev_repeat_callout()
1050 evdev->ev_rep[REP_PERIOD] * hz / 1000, in evdev_repeat_callout()
1051 evdev_repeat_callout, evdev); in evdev_repeat_callout()
1053 evdev->ev_rep_key = KEY_RESERVED; in evdev_repeat_callout()
1057 evdev_start_repeat(struct evdev_dev *evdev, uint16_t key) in evdev_start_repeat() argument
1060 EVDEV_LOCK_ASSERT(evdev); in evdev_start_repeat()
1062 if (evdev->ev_rep[REP_DELAY]) { in evdev_start_repeat()
1063 evdev->ev_rep_key = key; in evdev_start_repeat()
1064 callout_reset(&evdev->ev_rep_callout, in evdev_start_repeat()
1065 evdev->ev_rep[REP_DELAY] * hz / 1000, in evdev_start_repeat()
1066 evdev_repeat_callout, evdev); in evdev_start_repeat()
1071 evdev_stop_repeat(struct evdev_dev *evdev) in evdev_stop_repeat() argument
1074 EVDEV_LOCK_ASSERT(evdev); in evdev_stop_repeat()
1076 if (evdev->ev_rep_key != KEY_RESERVED) { in evdev_stop_repeat()
1077 callout_stop(&evdev->ev_rep_callout); in evdev_stop_repeat()
1078 evdev->ev_rep_key = KEY_RESERVED; in evdev_stop_repeat()
1082 MODULE_VERSION(evdev, 1);