Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/evdev/evdev.c
Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
/* adb keyboard driver used on powerpc does not support evdev yet */ | /* adb keyboard driver used on powerpc does not support evdev yet */ | ||||
#if defined(__powerpc__) && !defined(__powerpc64__) | #if defined(__powerpc__) && !defined(__powerpc64__) | ||||
int evdev_rcpt_mask = EVDEV_RCPT_KBDMUX | EVDEV_RCPT_HW_MOUSE; | int evdev_rcpt_mask = EVDEV_RCPT_KBDMUX | EVDEV_RCPT_HW_MOUSE; | ||||
#else | #else | ||||
int evdev_rcpt_mask = EVDEV_RCPT_HW_MOUSE | EVDEV_RCPT_HW_KBD; | int evdev_rcpt_mask = EVDEV_RCPT_HW_MOUSE | EVDEV_RCPT_HW_KBD; | ||||
#endif | #endif | ||||
int evdev_sysmouse_t_axis = 0; | int evdev_sysmouse_t_axis = 0; | ||||
bool evdev_allow_grab_syscons = true; | |||||
SYSCTL_NODE(_kern, OID_AUTO, evdev, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, | SYSCTL_NODE(_kern, OID_AUTO, evdev, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, | ||||
"Evdev args"); | "Evdev args"); | ||||
#ifdef EVDEV_SUPPORT | #ifdef EVDEV_SUPPORT | ||||
SYSCTL_INT(_kern_evdev, OID_AUTO, rcpt_mask, CTLFLAG_RWTUN, &evdev_rcpt_mask, 0, | SYSCTL_INT(_kern_evdev, OID_AUTO, rcpt_mask, CTLFLAG_RWTUN, &evdev_rcpt_mask, 0, | ||||
"Who is receiving events: bit0 - sysmouse, bit1 - kbdmux, " | "Who is receiving events: bit0 - sysmouse, bit1 - kbdmux, " | ||||
"bit2 - mouse hardware, bit3 - keyboard hardware"); | "bit2 - mouse hardware, bit3 - keyboard hardware"); | ||||
SYSCTL_INT(_kern_evdev, OID_AUTO, sysmouse_t_axis, CTLFLAG_RWTUN, | SYSCTL_INT(_kern_evdev, OID_AUTO, sysmouse_t_axis, CTLFLAG_RWTUN, | ||||
&evdev_sysmouse_t_axis, 0, "Extract T-axis from 0-none, 1-ums, 2-psm"); | &evdev_sysmouse_t_axis, 0, "Extract T-axis from 0-none, 1-ums, 2-psm"); | ||||
SYSCTL_BOOL(_kern_evdev, OID_AUTO, allow_grab_syscons, CTLFLAG_RWTUN, | |||||
&evdev_allow_grab_syscons, 0, "Evdev can grab system console input"); | |||||
#endif | #endif | ||||
SYSCTL_NODE(_kern_evdev, OID_AUTO, input, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | SYSCTL_NODE(_kern_evdev, OID_AUTO, input, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
"Evdev input devices"); | "Evdev input devices"); | ||||
static void evdev_start_repeat(struct evdev_dev *, uint16_t); | static void evdev_start_repeat(struct evdev_dev *, uint16_t); | ||||
static void evdev_stop_repeat(struct evdev_dev *); | static void evdev_stop_repeat(struct evdev_dev *); | ||||
static int evdev_check_event(struct evdev_dev *, uint16_t, uint16_t, int32_t); | static int evdev_check_event(struct evdev_dev *, uint16_t, uint16_t, int32_t); | ||||
▲ Show 20 Lines • Show All 994 Lines • ▼ Show 20 Lines | evdev_release_client(struct evdev_dev *evdev, struct evdev_client *client) | ||||
EVDEV_LOCK_ASSERT(evdev); | EVDEV_LOCK_ASSERT(evdev); | ||||
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) | |||||
{ | |||||
if (kdb_active || SCHEDULER_STOPPED() || !evdev_allow_grab_syscons) | |||||
return (false); | |||||
/* | |||||
* 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; | ||||
▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines |