summaryrefslogtreecommitdiff
path: root/sys/dev/evdev
Commit message (Collapse)AuthorAgeFilesLines
* kqueue: save space by using only one func pointer for assertionsMateusz Guzik2020-11-091-11/+6
| | | | Notes: svn path=/head/; revision=367498
* Allow evdev's rcpt_mask and sysmouse_t_axis parameters to be specified inHans Petter Selasky2020-10-081-2/+2
| | | | | | | | | | /boot/loader.conf . MFC after: 1 week Sponsored by: Mellanox Technologies // NVIDIA Networking Notes: svn path=/head/; revision=366533
* atkbd/evdev: recognize the Chromebook menu key as F13 like Linux does.Vladimir Kondratyev2020-06-251-1/+1
| | | | | | | | | | | | This is the key on the right side of the function keys, with the "hamburger menu" icon on it. Submitted by: GregV <greg@unrelenting.technology> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D25390 Notes: svn path=/head/; revision=362599
* evdev: Add AT translated set1 scancodes for 'Eisu' & 'Kana' keys.Vladimir Kondratyev2020-06-171-1/+1
| | | | | | | | | PR: 247292 Submitted by: Yuichiro NAITO <naito.yuichiro@gmail.com> MFC after: 1 week Notes: svn path=/head/; revision=362260
* [evdev] Sync event codes with Linux kernel 5.6Vladimir Kondratyev2020-05-042-6/+109
| | | | | | | MFC after: 2 weeks Notes: svn path=/head/; revision=360625
* [evdev] Add AT translated set1 scancodes for F-unlocked F1-12 keys.Vladimir Kondratyev2020-05-041-6/+6
| | | | | | | | | | | | | | | | | "F lock" is a switch between two sets of scancodes for function keys F1-F12 found on some Logitech and Microsoft PS/2 keyboards [1]. When "F lock" is pressed, then F1-F12 act as function keys and produce usual keyscans for these keys. When "F lock" is depressed, F1-F12 produced the same keyscans but prefixed with E0. Some laptops use [2] E0-prefixed F1-F12 scancodes for non-standard keys. [1] https://www.win.tue.nl/~aeb/linux/kbd/scancodes-6.html [2] https://reviews.freebsd.org/D21565 MFC after: 2 weeks Notes: svn path=/head/; revision=360624
* Fix kern.evdev.rcpt_mask on powerpcNiclas Zeising2020-04-201-1/+1
| | | | | | | | | | | | | | | 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
* Change kern.evdev.rcpt_mask to 12 by defaultNiclas Zeising2020-04-201-1/+6
| | | | | | | | | | | | | | | | | | | 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
* Use LIST_FOREACH_SAFE instead of LIST_FOREACH as we are removingXin LI2020-04-191-2/+2
| | | | | | | | | | | | | | 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
* [evdev] Use proper mutex reference in autorepeat callout initialization.Vladimir Kondratyev2020-04-131-1/+1
| | | | | | | | This fixes panic occuring when evdev key autorepeat is enabled by driver which initializes evdev with external mutex. Notes: svn path=/head/; revision=359905
* evdev: return error rather than zero-length data on blocked read()Vladimir Kondratyev2020-03-291-0/+2
| | | | | | | | | if blocked process has been woken up by evdev device destruction. MFC after: 2 weeks Notes: svn path=/head/; revision=359429
* evdev: Add COMPAT_FREEBSD32 support for amd64 archVladimir Kondratyev2020-03-291-12/+68
| | | | | | | | | | | | | | Incompatibility between i386 and amd64 evdev ABIs was caused by presence of 'struct timeval' in evdev protocol. Replace it with 'struct timeval32' for 32 bit binaries. Big-endian platforms may require additional work due to bitstr_t (array of unsigned longs) usage in ioctl interface. MFC after: 2 weeks Notes: svn path=/head/; revision=359428
* Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)Pawel Biernacki2020-02-261-3/+5
| | | | | | | | | | | | | | | | | | | 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
* Extract eventfilter declarations to sys/_eventfilter.hConrad Meyer2019-05-201-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | This allows replacing "sys/eventfilter.h" includes with "sys/_eventfilter.h" in other header files (e.g., sys/{bus,conf,cpu}.h) and reduces header pollution substantially. EVENTHANDLER_DECLARE and EVENTHANDLER_LIST_DECLAREs were moved out of .c files into appropriate headers (e.g., sys/proc.h, powernv/opal.h). As a side effect of reduced header pollution, many .c files and headers no longer contain needed definitions. The remainder of the patch addresses adding appropriate includes to fix those files. LOCK_DEBUG and LOCK_FILE_LINE_ARG are moved to sys/_lock.h, as required by sys/mutex.h since r326106 (but silently protected by header pollution prior to this change). No functional change (intended). Of course, any out of tree modules that relied on header pollution for sys/eventhandler.h, sys/lock.h, or sys/mutex.h inclusion need to be fixed. __FreeBSD_version has been bumped. Notes: svn path=/head/; revision=347984
* Fix build when EVDEV_SUPPORT is option disabled after r344494Vladimir Kondratyev2019-02-241-2/+2
| | | | | | | MFC with: 344494 Notes: svn path=/head/; revision=344495
* evdev: export event device properties through sysctl interfaceVladimir Kondratyev2019-02-242-0/+95
| | | | | | | | | | | | | | | | | | | 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
* evdev: Fix pause key release event in AT keyboard set 1 to evdev xlat-or.Vladimir Kondratyev2018-11-251-2/+5
| | | | | | | MFC after: 2 weeks Notes: svn path=/head/; revision=340926
* evdev: disable evdev if it is invoked from KDB or panic contextVladimir Kondratyev2018-10-273-0/+62
| | | | | | | | | | | | | | | 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
* evdev: Use console lock as evdev lock for all supported keyboard drivers.Vladimir Kondratyev2018-10-271-1/+6
| | | | | | | | | | | | Now evdev part of keyboard drivers does not take any locks if corresponding input/eventN device node is not opened by userland consumers. Do not assert console lock inside evdev to handle the cases when keyboard driver is called from some special single-threaded context like shutdown thread. Notes: svn path=/head/; revision=339823
* evdev: Remove evdev.ko linkage dependency on kbd driverVladimir Kondratyev2018-08-132-43/+0
| | | | | | | | | | | | | | | | | | Move evdev_ev_kbd_event() helper from evdev to kbd.c as otherwise evdev unconditionally requires all keyboard and console stuff to be compiled into the kernel. This dependency happens as evdev_ev_kbd_event() helper references kbdsw global variable defined in kbd.c through use of kbdd_ioctl() macro. While here make all keyboard drivers respect evdev_rcpt_mask while setting typematic rate and LEDs with evdev interface. Requested by: Milan Obuch <bsd@dino.sk> Reviewed by: hselasky, gonzo Differential Revision: https://reviews.freebsd.org/D16614 Notes: svn path=/head/; revision=337721
* evdev: remove soft context from evdev methods parameter list.Vladimir Kondratyev2018-08-135-17/+23
| | | | | | | | | | | | | 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
* [evdev] Sync event codes with Linux kernel 4.16Vladimir Kondratyev2018-06-032-0/+42
| | | | | | | MFC after: 2 weeks Notes: svn path=/head/; revision=334555
* uinput: Add FreeBSD specific ioctl to set unique identifier of input device.Vladimir Kondratyev2018-04-302-0/+16
| | | | | | | | Reviewed by: gonzo Differential Revision: https://reviews.freebsd.org/D13456 Notes: svn path=/head/; revision=333111
* evdev: change USB scancode 0x54 from KEY_SLASH to KEY_KPSLASHVladimir Kondratyev2017-11-201-1/+1
| | | | | | | | | | | Submitted by: dumbbell Reviewed by: gonzo, wulf Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12983 Notes: svn path=/head/; revision=326021
* Fix evdev codes for slash and asterisk numpad keys of AT-keyboardsVladimir Kondratyev2017-11-201-2/+2
| | | | | | | | | Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=326020
* evdev: Export EVDEV_SUPPORT kernel option through feature facilityVladimir Kondratyev2017-11-201-0/+3
| | | | | | | | | | Suggested by: netchild Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 1 week Notes: svn path=/head/; revision=326019
* evdev: Do not start/stop softrepeat callout if no clients attachedVladimir Kondratyev2017-11-011-1/+2
| | | | | | | | | | Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325299
* evdev: Disable value normalization and state filtering for SND events.Vladimir Kondratyev2017-11-012-3/+1
| | | | | | | | | | | | | | 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
* evdev: Take driver's lock in cdev write handler if necessaryVladimir Kondratyev2017-11-011-0/+4
| | | | | | | | | | Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325296
* evdev: Lock Giant around keyboard ioctlsVladimir Kondratyev2017-11-011-1/+10
| | | | | | | | | | | | This fixes turning ukbd(4) LEDs on/off with evdev interface as well Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D12676 Notes: svn path=/head/; revision=325295
* evdev: Hide "kern.evdev.rcpt_mask" sysctl if kernel is compiledVladimir Kondratyev2017-11-011-0/+2
| | | | | | | | | | | | | | | | 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
* evdev: Translate KEY_102ND in evdev_scancode2key()Jean-Sébastien Pédron2017-11-011-1/+1
| | | | | | | | | | | | | | | | | This is the extra key on 102/105-keys keyboards, located on the right of the Left Shift key. For instance on a French layout, this is the '<' key. This fixes an issue where the key fires no evdev event and thus remains inactive in an evdev/libinput-enabled X.Org server. The issue only occurred on an AT keyboard; the same key on a USB keyboard worked fine. PR: 222609 (only for reference) Approved by: wulf@ Differential Revision: https://reviews.freebsd.org/D12883 Notes: svn path=/head/; revision=325269
* Change my email address to wulf@FreeBSD.org in copyright headers.Vladimir Kondratyev2017-07-239-9/+9
| | | | | | | | Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321399
* evdev: Macroize common locking sequencesVladimir Kondratyev2017-07-233-19/+18
| | | | | | | | | Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321398
* evdev: style(9), sort headers alphabeticallyVladimir Kondratyev2017-07-237-34/+31
| | | | | | | | | | Pointed out by: bde Reviewed by: gonzo Approved by: gonzo (mentor) MFC after: 2 weeks Notes: svn path=/head/; revision=321397
* [evdev] Fix Right Alt and Keypad Enter event codes for atkbd(4) and ↵Oleksandr Tymoshenko2017-03-121-1/+1
| | | | | | | | | | | kbdmux(4) drivers Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D9320 Notes: svn path=/head/; revision=315178
* [evdev] Fix race condition between client's event queue reading and droppingOleksandr Tymoshenko2017-03-121-3/+4
| | | | | | | | | Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D9320 Notes: svn path=/head/; revision=315177
* [evdev] Do not ignore result evdev_register in UI_DEV_CREATE handlerOleksandr Tymoshenko2017-03-121-3/+4
| | | | | | | | | | | Make sure that uinput state field reflects actual state by checking evdev_register result for errors Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Differential Revision: https://reviews.freebsd.org/D9320 Notes: svn path=/head/; revision=315176
* [evdev] Fix build for older versions of clangOleksandr Tymoshenko2016-12-261-3/+3
| | | | | | | | | | | | | | | | There was report of stable/11 build failure on older versions of FreeBSD. The problem was a reference to static variable in inline function. Although fairly recent versions of clang can cope with this situation just fine there is no strict requirement to make functions in question inline, they're not in any time-critical codepath. So to keep HEAD and 11-STABLE buildable on older FreeBSDs some of the util functions were converted from inline to normal. Reported by: hselasky MFC after: 3 days Notes: svn path=/head/; revision=310612
* [evdev] Adds evdev support to sysmouse(4) driverOleksandr Tymoshenko2016-12-102-0/+19
| | | | | | | | | | | | | | | | | 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
* EVDEV: Add shortcut functions for event typesOleksandr Tymoshenko2016-10-223-21/+67
| | | | | | | | | | 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
* Implement EVDEV_FLAG_MT_AUTOREL flag (autorelease touchpoints)Oleksandr Tymoshenko2016-10-084-7/+27
| | | | | | | | | | | | | | | 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
* Allow using of driver's mutex instead internal one for evdev locking.Oleksandr Tymoshenko2016-10-084-13/+56
| | | | | | | | | | | | | | | 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
* const-ify struct evdev_methodsOleksandr Tymoshenko2016-10-033-3/+4
| | | | | | | | Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> Suggested by: hselasky Notes: svn path=/head/; revision=306647
* Modularize evdevOleksandr Tymoshenko2016-10-022-18/+2
| | | | | | | | | | | | | | | | | - 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
* Fix gcc compilation errorOleksandr Tymoshenko2016-10-021-1/+1
| | | | | | | input_absinfo.code is unsigned so condition is always false Notes: svn path=/head/; revision=306578
* Declare a module for evdev and add dependency to ukbd(4) and ums(4)Oleksandr Tymoshenko2016-09-301-0/+21
| | | | | | | | | | | 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
* Handle NULL argument in evdev_freeOleksandr Tymoshenko2016-09-231-1/+2
| | | | | | | | | | 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
* Remove semicolon from the end of the macro definitionOleksandr Tymoshenko2016-09-122-2/+2
| | | | | | | Reported by: hans Notes: svn path=/head/; revision=305749
* Add evdev protocol implementationOleksandr Tymoshenko2016-09-1110-0/+4608
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