summaryrefslogtreecommitdiff
path: root/sys/dev/evdev/evdev.c
AgeCommit message (Collapse)Author
2025-12-01evdev: Allow setting of character device ownership and access modeVladimir Kondratyev
by device driver. That is required as game pad and joystick events have to be accessible by ordinary users. MFC after: 1 month
2025-03-07sysmouse(4): Add wsp(4)-style T-Axis reporting.Joshua Rogers
Neither the ums(4) nor psm(4) reporting can be used by the wsp(4) driver, as they rely on static-length movements, while wsp(4) may need to scroll in large amounts per evdev event push. This style uses a false button-5 press as an indicator that the z-axis movement is a horizontal scroll, otherwise a vertical scroll. Signed-off-by: Joshua Rogers <Joshua@Joshua.Hu>
2023-08-16sys: Remove $FreeBSD$: two-line .h patternWarner Losh
Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
2022-11-19evdev: Extend EVIOCGRAB ioctl scope to cover kbd interfaceVladimir Kondratyev
of various keyboard drivers. EVIOCGRAB ioctl execution on /dev/input/event# device node gains exclusive access to this device to caller. It is used mostly for development purposes and remote control software. See e.g. https://reviews.freebsd.org/D30020 which is the reason of creation of this change. Keyboard grabbing is disabled in KDB and during panics. MFC with: 4a0db5e2920c Tested by: corvink Differential revision: https://reviews.freebsd.org/D30542
2022-11-18evdev: Extend EVIOCGRAB ioctl scope to cover sysmouse interfaceVladimir Kondratyev
of psm(4), ums(4) and sysmouse(4) drivers. EVIOCGRAB ioctl execution on /dev/input/event# device node gains exclusive access to this device to caller. It is used mostly for development purposes and remote control software. See e.g. https://reviews.freebsd.org/D30020 which is the reason of creation of this change. MFC after: 2 weeks Tested by: corvink Differential revision: https://reviews.freebsd.org/D30542
2021-08-25evdev: Add support for automatic MT protocol type A to type B conversion.Vladimir Kondratyev
MFC after: 2 weeks
2021-08-25evdev: Add implicit mode for touch tracking.Vladimir Kondratyev
In implicit mode assignment of slot number and tracking id is performed automatically on each synchronization requested by device driver. This is done with creation of intermediate buffer for multitouch events. This buffer holds untracked events until synchronization is requested by device driver. It is needed as touch assigment requires knowledges of all touch positions pushed in current and previous reports. MFC after: 2 weeks
2021-08-25evdev: Make MT tracking IDs monotonically increasing sequence.Vladimir Kondratyev
MFC after: 2 weeks
2021-08-25evdev: force no fuzz for autogenerated single touch compat events.Vladimir Kondratyev
As fuzz has already been applied on multitouch event processing. This allows to remove existing workaround for double fuzz procesing. MFC after: 2 weeks
2021-08-25evdev: Multitouch code style changes.Vladimir Kondratyev
1. Move touch count reporting helpers to utils. They are not multitouch. 2. Use evdev_mt prefix for private multitouch support routines. 3. Use int instead of int32_t where fixed size is not required. 4. Export some internal functions. This change should be no-op. MFC after: 2 weeks
2021-08-17evdev: Use bit_foreach helper macroVladimir Kondratyev
for traversing all bits set in the bitstring(9). While here move bit_change() definition to common header. MFC after: 1 week
2021-08-16evdev: Do not check maximal contact number for MT initializationVladimir Kondratyev
This allows singletouch devices which use multitouch protocols to work. Reported by: Mark Kane <mark_AT_kane_DOT_mn> MFC after: 1 week
2021-01-08evdev: Implement fuzz.Vladimir Kondratyev
Fuzz is used to filter noise from the event stream. Upcoming gamepad drivers use it. Reviewed by: hselasky (as part of D27993)
2021-01-08evdev: Make open(2) and close(3) handlers sleepable.Vladimir Kondratyev
At the beginning of evdev there was a LOR between hardware driver's and evdev client list locks as they were taken in different order at driver's interrupt and evdev open()/close() handlers. The LOR was fixed with introduction of evdev_register_mtx() function which allowed to use a hardware driver's lock as evdev client list lock. While this works good with PS/2 and USB, this does not work with I2C. Unlike PS/2 and USB, I2C open()/close() handlers do unbound sleeps while waiting for I2C bus to release and while performing IO. This change uses epoch(9) for traversing evdev client list in interrupt handler to avoid the LOR thus making possible to convert evdev client list lock to sleepable sx. While here add brief locking protocol description. Reviewed by: markj Differential revision: https://reviews.freebsd.org/D27865
2021-01-08evdev: Remove useless "initial value" parameter from evdev_support_abs()Vladimir Kondratyev
It can not be used for setting of state of multitouch events. If necessary, use evdev_push_event() instead of it.
2020-10-08Allow evdev's rcpt_mask and sysmouse_t_axis parameters to be specified inHans Petter Selasky
/boot/loader.conf . MFC after: 1 week Sponsored by: Mellanox Technologies // NVIDIA Networking Notes: svn path=/head/; revision=366533
2020-04-20Fix kern.evdev.rcpt_mask on powerpcNiclas Zeising
In r360126, I meant to have a different mask only on powerpc, not powerpc64. Update the check to check that we're not compiling for powerpc64. Reported by: jhibbits Approved by: wulf (implicit) MFC after: 2 weeks X-MFC-Note: 12 only X-MFC-With: r360126 Differential Revision: D24370 (followup) Notes: svn path=/head/; revision=360132
2020-04-20Change kern.evdev.rcpt_mask to 12 by defaultNiclas Zeising
Change kern.evdev.rcpt_mask from 3 to 12 by default. This makes us much more evdev-friendly, and will prevent everyone using xorg and wayland with evdev devices (the default) from needing to change this locally. powerpc32 still uses the old value for the keyboard part, becaues the adb keyboard driver used there is not evdev compatible. Reviewed by: wulf Approved by: wulf MFC after: 2 weeks X-MFC-Note: 12 only Relnotes: yes Differential Revision: https://reviews.freebsd.org/D24370 Notes: svn path=/head/; revision=360126
2020-04-19Use LIST_FOREACH_SAFE instead of LIST_FOREACH as we are removingXin LI
elements in the middle. This fixes a panic when detaching USB mouse. PR: 245732 Reviewed by: wulf MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D24500 Notes: svn path=/head/; revision=360104
2020-04-13[evdev] Use proper mutex reference in autorepeat callout initialization.Vladimir Kondratyev
This fixes panic occuring when evdev key autorepeat is enabled by driver which initializes evdev with external mutex. Notes: svn path=/head/; revision=359905
2020-02-26Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)Pawel Biernacki
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes. This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags. Mark all obvious cases as MPSAFE. All entries that haven't been marked as MPSAFE before are by default marked as NEEDGIANT Approved by: kib (mentor, blanket) Commented by: kib, gallatin, melifaro Differential Revision: https://reviews.freebsd.org/D23718 Notes: svn path=/head/; revision=358333
2019-02-24Fix build when EVDEV_SUPPORT is option disabled after r344494Vladimir Kondratyev
MFC with: 344494 Notes: svn path=/head/; revision=344495
2019-02-24evdev: export event device properties through sysctl interfaceVladimir Kondratyev
A big security advantage of Wayland is not allowing applications to read input devices all the time. Having /dev/input/* accessible to the user account subverts this advantage. libudev-devd was opening the evdev devices to detect their types (mouse, keyboard, touchpad, etc). This don't work if /dev/input/* is inaccessible. With the kernel exposing this information as sysctls (kern.evdev.input.*), we can work w/o /dev/input/* access, preserving the Wayland security model. Submitted by: Greg V <greg@unrelenting.technology> Reviewed by: wulf, imp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D18694 Notes: svn path=/head/; revision=344494
2018-10-27evdev: disable evdev if it is invoked from KDB or panic contextVladimir Kondratyev
This allow to prevent deadlock on entering KDB if one of evdev locks is already taken by userspace process. Also this change discards all but LED console events produced by KDB as unrelated to userspace. Tested by: dumbbell (as part of D15070) Objected by: bde (as 'KDB lock an already locked mutex' problem solution) MFC after: 1 month Notes: svn path=/head/; revision=339824
2018-08-13evdev: remove soft context from evdev methods parameter list.Vladimir Kondratyev
Now softc should be retrieved from struct edvev * pointer with evdev_get_softc() helper. wmt(4) is a sample of driver that support both KPI. Reviewed by: hselasky, gonzo Differential Revision: https://reviews.freebsd.org/D16614 Notes: svn path=/head/; revision=337720
2017-11-20evdev: Export EVDEV_SUPPORT kernel option through feature facilityVladimir Kondratyev
Suggested by: netchild Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 1 week Notes: svn path=/head/; revision=326019
2017-11-01evdev: Do not start/stop softrepeat callout if no clients attachedVladimir Kondratyev
Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325299
2017-11-01evdev: Disable value normalization and state filtering for SND events.Vladimir Kondratyev
Some events can take sound pitch as a value so can not be represented as binary on/off events. Tracking for on/off state is left in place as it is a part of the evdev API. Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325298
2017-11-01evdev: Take driver's lock in cdev write handler if necessaryVladimir Kondratyev
Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325296
2017-11-01evdev: Hide "kern.evdev.rcpt_mask" sysctl if kernel is compiledVladimir Kondratyev
w/o EVDEV_SUPPORT as it's value has no meaning in this case. Now presence of this sysctl can be used for discovery if evdev support for hybrid devices is compiled into kernel or not. Hide "kern.evdev.sysmouse_t_axis" sysctl for the same reason. Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325294
2017-07-23Change my email address to wulf@FreeBSD.org in copyright headers.Vladimir Kondratyev
Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321399
2017-07-23evdev: Macroize common locking sequencesVladimir Kondratyev
Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321398
2017-07-23evdev: style(9), sort headers alphabeticallyVladimir Kondratyev
Pointed out by: bde Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321397
2016-12-10[evdev] Adds evdev support to sysmouse(4) driverOleksandr Tymoshenko
For horizontal (T-axis) wheel reporting which is not supported by sysmouse protocol kern.evdev.sysmouse_t_axis sysctl is introduced. It can take following values: 0 - no T-axis events (default) 1 - T-axis events are originated in ums(4) driver. 2 - T-axis events are originated in psm(4) driver. Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D8597 Notes: svn path=/head/; revision=309823
2016-10-22EVDEV: Add shortcut functions for event typesOleksandr Tymoshenko
Add wrappers around generic evdev_push_event for specific event types: EV_KEY/EV_REL/EV_ABS etc... Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Notes: svn path=/head/; revision=307804
2016-10-08Implement EVDEV_FLAG_MT_AUTOREL flag (autorelease touchpoints)Oleksandr Tymoshenko
Automaticaly release (send ABS_MT_TRACKING_ID = -1) MT-slots that has not been listed in current MT protocol type B report. Slot is counted as listed if corresponding ABS_MT_SLOT event has been sent regardless of other MT events. Events are sent on SYN_REPORT event. Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Notes: svn path=/head/; revision=306857
2016-10-08Allow using of driver's mutex instead internal one for evdev locking.Oleksandr Tymoshenko
Add new API call: evdev_register_mtx which takes lock argument that should be used instead of internal one for evdev locking. Useful for cases if evdev_push_event() is always called with driver's lock taken and reduces amount of lock aquisitions. This allows to avoid LOR between ev_open/ev_close invocations and evdev_push_event() Such LOR can happen when ev_open/ev_close methods acquire driver lock and evdev_push_event() is called with this lock taken. Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Notes: svn path=/head/; revision=306855
2016-10-03const-ify struct evdev_methodsOleksandr Tymoshenko
Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Suggested by: hselasky Notes: svn path=/head/; revision=306647
2016-10-02Modularize evdevOleksandr Tymoshenko
- Convert "options EVDEV" to "device evdev" and "device uinput", add modules for both new devices. They are isolated subsystems and do not require any compile-time changes to general kernel subsytems - For hybrid drivers that have evdev as an optional way to deliver input events add option EVDEV_SUPPORT. Update all existing hybrid drivers to use it instead of EVDEV - Remove no-op DECLARE_MODULE in evdev, it's not required, MODULE_VERSION is enough - Add evdev module dependency to uinput Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Notes: svn path=/head/; revision=306579
2016-09-30Declare a module for evdev and add dependency to ukbd(4) and ums(4)Oleksandr Tymoshenko
Prepare for making evdev a module. "Pure" evdev device drivers (like touchscreen) and evdev itself can be built as a modules regardless of "options EVDEV" in kernel config. So if people does not require evdev functionality in hybrid drivers like ums and ukbd they can, for instance, kldload evdev and utouchscreen to run FreeBSD in kiosk mode. Notes: svn path=/head/; revision=306530
2016-09-23Handle NULL argument in evdev_freeOleksandr Tymoshenko
Add check for evdev argument of evdev_free being NULL. This is valid value and should not cause crash. In this case evdev_free does nothing Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Notes: svn path=/head/; revision=306274
2016-09-11Add evdev protocol implementationOleksandr Tymoshenko
evdev is a generic input event interface compatible with Linux evdev API at ioctl level. It allows using unmodified (apart from header name) input evdev drivers in Xorg, Wayland, Qt. This commit has only generic kernel API. evdev support for individual hardware drivers like ukbd, ums, atkbd, etc. will be committed later. Project was started by Jakub Klama as part of GSoC 2014. Jakub's evdev implementation was later used as a base, updated and finished by Vladimir Kondratiev. Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Reviewed by: adrian, hans Differential Revision: https://reviews.freebsd.org/D6998 Notes: svn path=/head/; revision=305706