Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/evdev/evdev.c
Show First 20 Lines • Show All 1,088 Lines • ▼ Show 20 Lines | evdev_release_client(struct evdev_dev *evdev, struct evdev_client *client) | ||||
if (evdev->ev_grabber != client) | if (evdev->ev_grabber != client) | ||||
return (EINVAL); | return (EINVAL); | ||||
evdev->ev_grabber = NULL; | evdev->ev_grabber = NULL; | ||||
return (0); | return (0); | ||||
} | } | ||||
bool | |||||
evdev_is_grabbed(struct evdev_dev *evdev) | |||||
{ | |||||
/* | |||||
* The function is intended to be called from evdev-unrelated parts of | |||||
* code like syscons-compatible parts of mouse and keyboard drivers. | |||||
* That makes unlocked read-only access acceptable. | |||||
*/ | |||||
return (evdev->ev_grabber != NULL); | |||||
} | |||||
static void | static void | ||||
evdev_repeat_callout(void *arg) | evdev_repeat_callout(void *arg) | ||||
{ | { | ||||
struct epoch_tracker et; | struct epoch_tracker et; | ||||
struct evdev_dev *evdev = (struct evdev_dev *)arg; | struct evdev_dev *evdev = (struct evdev_dev *)arg; | ||||
if (evdev->ev_lock_type == EV_LOCK_EXT_EPOCH) | if (evdev->ev_lock_type == EV_LOCK_EXT_EPOCH) | ||||
epoch_enter_preempt(INPUT_EPOCH, &et); | epoch_enter_preempt(INPUT_EPOCH, &et); | ||||
Show All 40 Lines |