summaryrefslogtreecommitdiff
path: root/sys/dev/kbdmux
Commit message (Collapse)AuthorAgeFilesLines
* kbdmux(4): Make callout handler mpsafe.Alexander Motin2021-08-221-51/+10
| | | | | | | | | | | Both callout and taskqueue now have drain() routines not requiring external locking. It allows to remove TASK flag and manual drain, so the only thing remaining for lock to protect inside the callout handler is ks_inq_length zero comparison, that can be lockless. MFC after: 2 weeks (cherry picked from commit e5018628e76a27e0f61ca03e2aa2247b3c62a158)
* kbdmux: simplify modevent handlerKyle Evans2019-12-261-16/+7
| | | | | | | | | | | | | | In the event of a MOD_LOAD failure, MOD_UNLOAD will be invoked to unwind module load. Most of the reversion in MOD_LOAD can just be deferred to normal MOD_UNLOAD cleanup, rather than duplicating the effort. A NULL return of kbd_get_switch in the MOD_UNLOAD handler has been downgraded from a panic to a successful return, as that certainly just means that kbd_add_driver failed (not possible at the moment) and we have no work to do. Notes: svn path=/head/; revision=356092
* Revert r355806: kbd drivers: don't double register keyboard driversKyle Evans2019-12-261-12/+0
| | | | | | | | | | | r356087 made it rather innocuous to double-register built-in keyboard drivers; we now set a flag to indicate that it's been registered and only act once on a registration anyways. There is no misleading here, as the follow-up kbd_delete_driver will actually remove the driver as needed now that the linker set isn't also consulted after kbdinit. Notes: svn path=/head/; revision=356091
* kbd drivers: don't double register keyboard driversKyle Evans2019-12-161-0/+12
| | | | | | | | | | | | | | | | | | Keyboard drivers are generally registered via linker set. In these cases, they're also available as kmods which use KPI for registering/unregistering keyboard drivers outside of the linker set. For built-in modules, we still fire off MOD_LOAD and maybe even MOD_UNLOAD if an error occurs, leading to registration via linker set and at MOD_LOAD time. This is a minor optimization at best, but it keeps the internal kbd driver tidy as a future change will merge the linker set driver list into its internal keyboard_drivers list via SYSINIT and simplify driver lookup by removing the need to consult the linker set. Notes: svn path=/head/; revision=355806
* kbd: provide default implementations of get_fkeystr/diagKyle Evans2019-12-161-2/+0
| | | | | | | | | Most keyboard drivers are using the genkbd implementations as it is; formally use them for any that aren't set and make genkbd_get_fkeystr/genkbd_diag private. Notes: svn path=/head/; revision=355796
* Use callout_func_t instead of the deprecated timeout_t.John Baldwin2019-12-101-1/+1
| | | | | | | | Reviewed by: kib, imp Differential Revision: https://reviews.freebsd.org/D22752 Notes: svn path=/head/; revision=355601
* evdev: Use console lock as evdev lock for all supported keyboard drivers.Vladimir Kondratyev2018-10-271-1/+1
| | | | | | | | | | | | 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-131-1/+19
| | | | | | | | | | | | | | | | | | 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
* Move most of the contents of opt_compat.h to opt_global.h.Brooks Davis2018-04-061-1/+0
| | | | | | | | | | | | | | | | | | | | | opt_compat.h is mentioned in nearly 180 files. In-progress network driver compabibility improvements may add over 100 more so this is closer to "just about everywhere" than "only some files" per the guidance in sys/conf/options. Keep COMPAT_LINUX32 in opt_compat.h as it is confined to a subset of sys/compat/linux/*.c. A fake _COMPAT_LINUX option ensure opt_compat.h is created on all architectures. Move COMPAT_LINUXKPI to opt_dontuse.h as it is only used to control the set of compiled files. Reviewed by: kib, cem, jhb, jtl Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D14941 Notes: svn path=/head/; revision=332122
* sys/dev: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-271-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326255
* [evdev] Add evdev support to kbdmux(4) driverOleksandr Tymoshenko2016-11-151-3/+76
| | | | | | | | | | | | To enable event sourcing from kbdmux(4) kern.evdev.rcpt_mask value should have bit 1 set (this is default) Submitted by: Vladimir Kondratiev <wulf@cicgroup.ru> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D8437 Notes: svn path=/head/; revision=308668
* Fix keyboard polling "on/off" to support recursion. vt depends onBruce Evans2016-08-301-5/+6
| | | | | | | | | | | | | | | | | | | | | | this, and sc will soon depend on it again. The on/off request is passed without modification to lower layers, so the bug was smaller in this layer than in in lower layers (the sequence on;on;off left polling off when it should be on, but the sequence on;on;off;on;off... doesn't allow the interrupt handler to eat the input after an "off" that should't turn off polled mode, provided lower layers don't have the bug, since this layer is virtual. The bug was small in lower layers too. Normally everything is Giant locked for keyboards, and this locks out the interrupt handler in on;on;off;on;off... sequences. However, PR 211884 says that fixing this bug in ukbd in r303765 apparently causes the eating-by-interrupt behaviour that the fix is to prevent. Discussed with: emax Notes: svn path=/head/; revision=305060
* Add option to specify built-in keymap for kbdmuxEd Maste2016-04-071-0/+8
| | | | | | | | PR: 153459 Submitted by: swell.k@gmail.com Notes: svn path=/head/; revision=297685
* Revert r281889:Pedro F. Giffuni2015-04-291-4/+0
| | | | | | | | | | | The change would appease the static analyzers but it is pretty much a no-op. I need to trust static analyzers much less, especially for the kernel. Requested by: jkim Notes: svn path=/head/; revision=282246
* Plug memory leaks in kbdmux(4) (take 2)Pedro F. Giffuni2015-04-291-0/+4
| | | | | | | | | | | | | | | This is a fix to the previous attempt in r281889, which some (most?) keyboards. Discussed with: emaste, jkim Found by: clang static analyzer CID: 1007072 CID: 1007073 CID: 1007074 Notes: svn path=/head/; revision=282226
* Revert r281889, it broke keyboard inputEd Maste2015-04-231-5/+0
| | | | Notes: svn path=/head/; revision=281901
* Plug memory leaks in kbdmux(4)Pedro F. Giffuni2015-04-231-0/+5
| | | | | | | | | | | | | | | Al kudos here for the Clang static analyzer which, unlike Coverity, failed to flag a false positive. Found by: clang static analyzer CID: 1007072 CID: 1007073 CID: 1007074 MFC after: 1 week Notes: svn path=/head/; revision=281889
* This isn't functionally identical. In some cases a hint to disableEitan Adler2012-10-221-0/+2
| | | | | | | | | | | unit 0 would in fact disable all units. This reverts r241856 Approved by: cperciva (implicit) Notes: svn path=/head/; revision=241885
* Now that device disabling is generic, remove extraneous code from theEitan Adler2012-10-221-2/+0
| | | | | | | | | | | device drivers that used to provide this feature. Reviewed by: des Approved by: cperciva MFC after: 1 week Notes: svn path=/head/; revision=241856
* Restore binary compatibility for GIO_KEYMAP and PIO_KEYMAP.Ed Schouten2011-07-171-0/+1
| | | | | | | | | | | | Back in 2009 I changed the ABI of the GIO_KEYMAP and PIO_KEYMAP ioctls to support wide characters. I created a patch to add ABI compatibility for the old calls, but I didn't get any feedback to that. It seems now people are upgrading from 8 to 9 they experience this issue, so add it anyway. Notes: svn path=/head/; revision=224126
* Explicitly tell the compiler that we don't care about the return valueRui Paulo2010-10-131-4/+4
| | | | | | | of kbdd_ioctl(). Notes: svn path=/head/; revision=213770
* Use proper types in kbdmux_kbd_getc():Ed Schouten2009-06-081-2/+2
| | | | | | | | | | | - The return value should be a signed integer, because -1 means failure. - The c variable should be unsigned, to force it to be zero-extended when returned. Reported by: Andreas Tobler <andreast-list fgznet ch> Notes: svn path=/head/; revision=193752
* Move buffer management into kbd and kbdmux drivers.Ed Schouten2009-06-051-22/+42
| | | | | | | | | | | These two drivers seem to be the last consumers of clists. clists are quite overengineered for simple circular buffers, so I'm adding similar buffer management routines to the kbd and kbdmux drivers. The input buffer is now part of the softc structures, instead of having dynamically allocated cblocks. Notes: svn path=/head/; revision=193512
* Undo SVN rev 183283Maksim Yevmenkin2009-04-081-4/+4
| | | | | | | | | | | | | | | Do not use Giant for kbdmux(4) locking. This is wrong and apparently causing more problems than it solves. This will re-open the issue where interrupt handlers may race with kbdmux(4) in polling mode. Typical symptoms include (but not limited to) duplicated and/or missing characters when low level console functions (such as gets) are used while interrupts are enabled (for example geli password prompt, mountroot prompt etc.) MFC after: 3 days Notes: svn path=/head/; revision=190857
* Since r188030 the error value for attach is returned, this means if kbdmuxAndrew Thompson2009-02-131-7/+6
| | | | | | | | | fails to attach (possibly due to disable hints) then we get called back for unload. Correctly handle the case where the keyboard isnt found rather than calling panic. Notes: svn path=/head/; revision=188603
* Properly retun error core from kbdmux_modevent()Maksim Yevmenkin2009-02-021-1/+1
| | | | | | | | Reported by: Christoph Mallon < christoph -dot- mallon -at- gmx -dot- de > MFC after: 1 week Notes: svn path=/head/; revision=188030
* Use Giant for kbdmux(4) locking. This is to workaround the problemMaksim Yevmenkin2008-09-221-4/+4
| | | | | | | | | | | | where interrupt handlers may race with kbdmux(4) in polling mode. PR: kern/127446 Reported by: Eygene Ryabinkin rea-fbsd at codelabs dot ru Tested by: Eygene Ryabinkin rea-fbsd at codelabs dot ru MFC after: 1 week Notes: svn path=/head/; revision=183283
* Don't include <sys/tty.h> in non-TTY drivers.Ed Schouten2008-07-241-1/+1
| | | | | | | | | | | | | The kbd, kbdmux, ugen and uhid drivers included <sys/tty.h>, because they needed clists, which have been moved to <sys/clist.h> some time ago. In the MPSAFE TTY branch, <sys/tty.h> does not include <sys/clist.h>, which means we have to teach these drivers to include this header file directly. Approved by: philip (mentor, implicit) Notes: svn path=/head/; revision=180777
* Remove explicit calls to keyboard methods with their respective variantsWojciech A. Koszek2007-12-291-35/+14
| | | | | | | | | | | | | | | | | | implemented with macros. This patch improves code readability. Reasoning behind kbdd_* is a "keyboard discipline". List of macros is supposed to be complete--all methods of keyboard_switch should have their respective macros from now on. Functionally, this code should be no-op. My intention is to leave current behaviour of code as is. Glanced at by: rwatson Reviewed by: emax, marcel Approved by: cognet Notes: svn path=/head/; revision=174984
* Fix kbdmux(4) issue with backslash/underscore key not working onMaksim Yevmenkin2007-07-111-0/+3
| | | | | | | | | | | | Japanese 106/109 keyboard. PR: kern/112214, kern/99090 Submitted by: TOMITA Yoshinori, TAKAHASHI Yoshihiro Approved by: re (hrs) MFC after: 3 days Notes: svn path=/head/; revision=171373
* Fix our ioctl(2) implementation when the argument is "int". NewRuslan Ermilov2006-09-271-0/+29
| | | | | | | | | | | | | | | | ioctls passing integer arguments should use the _IOWINT() macro. This fixes a lot of ioctl's not working on sparc64, most notable being keyboard/syscons ioctls. Full ABI compatibility is provided, with the bonus of fixing the handling of old ioctls on sparc64. Reviewed by: bde (with contributions) Tested by: emax, marius MFC after: 1 week Notes: svn path=/head/; revision=162711
* Revert back to always using *(int *)arg for now. While thisRuslan Ermilov2006-09-201-8/+8
| | | | | | | | | | | | | is incorrect, and causes endianness bugs on 64-bit big-endian machines (sparc64), it's the best choice for now, as many of these IOCTLs are used inside the kernel, and bogusly pass an argument as "int *" which results in unaligned access panics on sparc64 when attempting to dereference them via *(intptr_t *). (Several of us are working on a real fix, which is uneasy.) Notes: svn path=/head/; revision=162461
* Make typecast expressions comply with style(9).Ruslan Ermilov2006-09-191-5/+5
| | | | Notes: svn path=/head/; revision=162441
* This time, really fix endian bugs accessing ioctl arguments thatRuslan Ermilov2006-09-191-8/+8
| | | | | | | | | | are passed by value. These are KDSKBMODE, KDSETLED, KDSKBSTATE, and KDSETRAD. Tested on: amd64, sparc64 (demo code) Notes: svn path=/head/; revision=162440
* Back out revision 1.8. The only thing it did was to break LEDs (andRuslan Ermilov2006-09-191-13/+13
| | | | | | | | | | | | some other less noticeable things) on little-endian 64-bit platforms such as amd64. PR: kern/101931 Discussed with: emax, marius MFC after: 1 day Notes: svn path=/head/; revision=162428
* Add extra code into kbdmux(4)s read_char() method toMaksim Yevmenkin2006-07-271-0/+21
| | | | | | | | | | | | poll (i.e. call read_char() method) slave keyboards. This workaround should fix problem with kbdmux(4) and atkbd(4) not working in ddb(4) and mid-boot. MFC after: 1 week Notes: svn path=/head/; revision=160768
* Fix endian bugs accessing ioctl arguments that are passed by value.Maksim Yevmenkin2006-03-031-13/+13
| | | | | | | | Pointed out by: marius MFC after: 1 day Notes: svn path=/head/; revision=156226
* Provide ability to disable kbdmux(4) with the hint.kbdmux.0.disabled="1" hint.Maksim Yevmenkin2006-03-011-0/+4
| | | | | | | | | | Document hint in the kbdmux(4) man page. Requested by: scottl MFC after: 1 day Notes: svn path=/head/; revision=156167
* Plug memory leakMaksim Yevmenkin2006-02-271-0/+4
| | | | | | | MFC after: 1 day Notes: svn path=/head/; revision=156086
* Put a comment, explaining why kbdmux(4) had to be fixed.Maksim Yevmenkin2006-02-251-3/+12
| | | | | | | | | | While I'm here fix a couple of whitespaces. Requested by: netchild MFC after: 1 day Notes: svn path=/head/; revision=156013
* Fix hard lockup caused by kbdmux(4) when kbdmux(4), PS/2 keyboardMaksim Yevmenkin2006-02-251-1/+1
| | | | | | | | | | | | | | | | | | | | | (atkbd(4)) and PS/2 mouse (psm(4)) are used together. Turns out that atkbd(4) check_char() method may return "true" while read_char() method returns NOKEY. When this happens kbdmux(4) was simply stuck in the dead loop. Avoid dead loop in kbdmux(4) by breaking out of the loop if read_char() method returns NOKEY. It almost seems like a bug in atkkbd(4), atkbd_check_char() calls kbdc_data_ready(), and, the later will return "true" if there are pending data in either kbd or aux queue. However, because both aux and kbd are on the same controller, I'm not sure if this is a bug or feature. Tested by: markus MFC after: 1 day Notes: svn path=/head/; revision=156010
* Spotted a call to a cdev-related function not wrappedYaroslav Tykhiy2005-10-181-0/+2
| | | | | | | | | | in "#ifdef KBD_INSTALL_CDEV". Noticed by: glebius Uncovered by: recent change to modules' Makefiles Notes: svn path=/head/; revision=151440
* kbdmux(4) keyboard multiplexer integrationMaksim Yevmenkin2005-07-141-19/+24
| | | | | | | | | | | | | | | | | | | | | | | o Slightly change KBADDKBD and KBRELKBD ioctl() interface. Instead of passing keyboard index pass keyboard_info_t structure with populated 'kb_unit' and 'kb_name' fields. Keyboard index is not very user-friendly and is not very easy to obtain. Keyboard driver name and unit, on the other hand, is much more user friendly and known almost all the time; o Move definition of keyboard_info_t structure up; o Teach kbdcontrol(1) how to attach/detach keyboards to/from the keyboard multiplexor; o Update kbdcontrol(1) man page and document new functionality. To attach/detach keyboard to/from keyboard multiplexor one needs to use keyboard device name (i.e. ukbd0). MFC after: 1 week Notes: svn path=/head/; revision=148017
* kbdmux(4) keyboard multiplexer integrationMaksim Yevmenkin2005-07-141-0/+1314
o Add sys/dev/kbdmux/kbdmux.c to the source tree o Add sys/modules/kbdmux/Makefile to the source tree These are not yet connected to the build. Man page and other changes to follow. MFC after: 1 week Notes: svn path=/head/; revision=147999