summaryrefslogtreecommitdiffstats
path: root/sys/dev/atkbdc/psm.c
Commit message (Collapse)AuthorAgeFilesLines
* Significantly reduce the "jitter" that is typical for PS/2 micealfred2003-12-111-110/+256
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | when using a KVM. There is no actual solution possible, but this gets us pretty close. Typically when switching back to a FreeBSD box and moving the mouse wild data is produced, because the protocol's validation/checksum system is extremely weak it is impossible to determine that we're out of sync before dropping several bogus packets to user land. The actual solution that appears to offer the best clamping of jitter is to buffer the mouse packets if we've not seen mouse activity for more than .5 seconds. Then waiting to flush that data for 1/20th of a second. If within that 20th of a second we get any packets that do fail the weak test we drop the entire queue and back off accepting data from the mouse for 2 seconds and then repeat the whole deal. You can still get _some_ jitter, notably if you switch to the FreeBSD box, then move the mouse just enough to generate one or two packets. Those packets may be bogus, but may still pass the validity check. One way to finally kill the problem once and for all is to check the initial packets for "wild" values. Typically one sees packets in the +/-60 range during normal operation, however when bogus data is generated it's typically near the outer range of +/-120 or more, those packets would be a good candidate for dropping or clamping. I've been running with this for several weeks now and it has significantly helped me stay sane even with a piece of junk Belkin KVM causing wild jitter each and every time I switch. Lastly I'd like to note that my experience with Windows shows me that somehow the Microsoft PS/2 driver typically avoids this problem, but that may only be possible when running the mouse in a dumb-ed down PS/2 mode that Belkin recommends on their site.
* - Implement selwakeuppri() which allows raising the priority of atanimura2003-11-091-1/+1
| | | | | | | | | | | | | thread being waken up. The thread waken up can run at a priority as high as after tsleep(). - Replace selwakeup()s with selwakeuppri()s and pass appropriate priorities. - Add cv_broadcastpri() which raises the priority of the broadcast threads. Used by selwakeuppri() if collision occurs. Not objected in: -arch, -current
* Add support for the A4 Tech RFSW-35 mouse wheel. Probe is similar tomikeh2003-07-121-3/+10
| | | | | | 4D Plus. PR: 44333
* Reset the PSM aux device twice to help pierce through some KVM's tomikeh2003-07-071-0/+9
| | | | | | get the correct data from the attached mouse. Multiple resets should be harmless, but just in case, the second one is non-fatal and is just ignored.
* Add PnP PS/2 id for Dell Latitude X200.mikeh2003-07-011-0/+1
| | | | | PR: 48516 MFC after: 2 weeks
* Use __FBSDID().obrien2003-06-111-3/+3
|
* wrap macro in do {...} while(0)phk2003-05-311-2/+2
|
* Remove extra ';'phk2003-05-311-1/+1
| | | | Found by: FlexeLint
* Fix some easy, global, lint warnings. In most cases, this meansmarkm2003-04-301-1/+1
| | | | | making some local variables static. In a couple of cases, this means removing an unused variable.
* Deprecate machine/limits.h in favor of new sys/limits.h.kan2003-04-291-1/+1
| | | | | | | Change all in-tree consumers to include <sys/limits.h> Discussed on: standards@ Partially submitted by: Craig Rodrigues <rodrigc@attbi.com>
* Gigacommit to improve device-driver source compatibility betweenphk2003-03-031-13/+7
| | | | | | | | | | | | | branches: Initialize struct cdevsw using C99 sparse initializtion and remove all initializations to default values. This patch is automatically generated and has been tested by compiling LINT with all the fields in struct cdevsw in reverse order on alpha, sparc64 and i386. Approved by: re(scottl)
* More low-hanging fruit: kill caddr_t in calls to wakeup(9) / [mt]sleep(9).des2003-03-021-3/+3
|
* YAM: This id is found in a Sony Vaio GRX-670. When will this end?marcel2003-01-221-0/+1
| | | | Submitted by: Chuck McCrobie <mccrobie2000@yahoo.com>
* Add yet another Sony Vaio PS/2 mouse ID. This one is found on a VX88.hsu2003-01-221-2/+3
| | | | Submitted by: marcel
* Add yet another Sony Vaio PS/2 mouse ID. This one is found in a R505GL.marcel2003-01-211-0/+1
| | | | | The ACPI data for the mouse includes the compatibility ID, but we apparently don't make use of it.
* - GC a few more hand-rolled 'abs' macros.mdodd2003-01-151-16/+7
| | | | - GC a few hand-rolled min()/max() macros while I'm here.
* Replace various spelling with FALLTHROUGH which is lint()ablecharnier2002-08-251-3/+3
|
* Remove __P.alfred2002-03-201-29/+29
|
* Fixes to make select/poll mpsafe.alfred2002-03-141-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: selwakeup required calling pfind which would cause lock order reversals with the allproc_lock and the per-process filedesc lock. Solution: Instead of recording the pid of the select()'ing process into the selinfo structure, actually record a pointer to the thread. To avoid dereferencing a bad address all the selinfo structures that are in use by a thread are kept in a list hung off the thread (protected by sellock). When a selwakeup occurs the selinfo is removed from that threads list, it is also removed on the way out of select or poll where the thread will traverse its list removing all the selinfos from its own list. Problem: Previously the PROC_LOCK was used to provide the mutual exclusion needed to ensure proper locking, this couldn't work because there was a single condvar used for select and poll and condvars can only be used with a single mutex. Solution: Introduce a global mutex 'sellock' which is used to provide mutual exclusion when recording events to wait on as well as performing notification when an event occurs. Interesting note: schedlock is required to manipulate the per-thread TDF_SELECT flag, however if given its own field it would not need schedlock, also because TDF_SELECT is only manipulated under sellock one doesn't actually use schedlock for syncronization, only to protect against corruption. Proc locks are no longer used in select/poll. Portions contributed by: davidc
* Add SONY VAIO psm controller ISA-PnP ID.takawata2002-03-101-0/+1
|
* Add another PS2 PNP id.sheldonh2001-12-191-0/+1
| | | | | PR: 32973 Submitted by: KT Sin <ktsin@acm.org>
* Hack for the "out-of-sync" error.yokota2001-10-131-109/+152
| | | | | | | | | | | | | | | | | | | | | | | | | | - Count the number of this error. - When the error is detected for the first time, the psm driver will throw few data bytes (up to entire packet size) and see if it can get back to sync. - If the error still persists, the psm driver disable/enable the mouse and see if it works. - If the error still persists and the count goes up to 20, the psm driver reset and reinitialize the mouse. The counter is reset to zero. - It also discards an incomplete data packet when the interval between two consequtive bytes are longer than pre-defined timeout (2 seconds). The last byte which arrived late will be regarded as the first byte of a new packet. This is louie's idea. You may see the following error logs during the above operations: "psmintr: delay too long; resetting byte count" "psmintr: out of sync (%04x != %04x)" "psmintr: discard a byte (%d)" "psmintr: re-enable the mouse" "psmintr: reset the mouse" MFC after: 1 month
* Add PnP ID 'IBM3781' for TP240 mouse.takawata2001-10-031-0/+1
|
* Yet another turn of workaround for psm/ACPI/PnP BIOSyokota2001-09-251-38/+83
| | | | | | | problems currently experienced in -CURRENT. This should fix the problem that the PS/2 mouse is detected twice if the acpi module is not loaded on some systems.
* Refine ACPI/PnP BIOS probe/attach routines a bit.yokota2001-09-151-13/+36
| | | | | | | | | | | - Add workaround for the problematic PnP BIOS which does not assign irq resource for the PS/2 mouse device node; if there is no irq assigned for the PS/2 mouse node, refer to device.hints for an irq number. If we still don't find an irq number in the hints database, use a hard-coded value. - Delete unused ivars. - Bit of clean up in probe/attach. - Add PnP ID for the PS/2 mouse port on some IBM ThinkPad models.
* KSE Milestone 2julian2001-09-121-5/+5
| | | | | | | | | | | | | | Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
* Update the atkbdc, atkbd, and psm drivers to probe/attachyokota2001-09-061-40/+115
| | | | | | | | more cleanly and consistently in all APCI, PnP BIOS, and "hint" cases. NOTE: this doesn't necessarily solve the problem that the PS/2 mouse is not detected after the recent ACPI update.
* Send the remains (such as I have located) of "block major numbers" tophk2001-03-261-1/+0
| | | | the bit-bucket.
* select() DKI is now in <sys/selinfo.h>.wollman2001-01-091-1/+1
|
* - Add a hack for "psmintr: out of sync.." This is NOT a fix,yokota2000-12-011-0/+11
| | | | | | | | | | | but a hack! Add `flags 0x8000' to the psm driver to enable it. The psm driver will try to get out of out-of-sync situation by disabling the mouse and immediately enable it again. If you are seeing this out-of-sync problem because of an incompetent(?!) KVM switch, this hack will NOT be good for you. However, if you are occasionally seeing the problem because of lost mouse interrupt, this might help.
* - Slightly rearrnage IntelliMouse Explorer and Logitechyokota2000-12-011-30/+39
| | | | | MouseMan+ identification routines for efficiency. No functional change.
* Remove unneeded #include <machine/clock.h>phk2000-10-151-1/+0
|
* Initiate deorbit burn sequence for <machine/mouse.h>.phk2000-10-091-1/+1
| | | | | | | | | | Replace all in-tree uses with <sys/mouse.h> which repo-copied a few moments ago from src/sys/i386/include/mouse.h by peter. This is also the appropriate fix for exo-tree sources. Put warnings in <machine/mouse.h> to discourage use. November 15th 2000 the warnings will be converted to errors. January 15th 2001 the <machine/mouse.h> files will be removed.
* Fix several 64-bit-ism warnings due to sizeof(int) != sizeof(void *) onjhb2000-09-221-6/+6
| | | | the alpha.
* Add spltty()/splx() in the watchdog timer routine.yokota2000-08-241-0/+3
|
* Fix GENERIC_MOUSE_ENTRY.yokota2000-07-281-1/+1
| | | | Submitted by: Graham Wheeler <gram@cequrux.com> and gibbs
* This is yet another attempt to fix "psmintr out of sync.." problems.yokota2000-07-221-13/+9
| | | | | | - Properly protect the watchdog timer routine. - Relocate the sync check statement so that we don't see too many error messages.
* Remove ~25 unneeded #include <sys/conf.h>phk2000-04-191-1/+0
| | | | Remove ~60 unneeded #include <sys/malloc.h>
* - Add temporary workaround to fool some "clever" KVM switch productsyokota2000-04-021-5/+22
| | | | | | which think they know the IntelliMouse 4-byte packet and believe, wrongly, that any other protocols use 3-byte packets. - Update a couple of comment lines for A4 Tech mice.
* - Add Support for the following PS/2 mice:yokota2000-03-181-87/+395
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Microsoft IntelliMouse Explorer: 2 buttons on top, 2 side buttons and a wheel which also acts as the middle button. The mouse is recognized as "IntelliMouse Explorer". - Genius NetScroll Optical: 2 buttons on top, 2 side buttons and a wheel which also acts as the middle button. The mouse is recognized as "NetMouse/NetScroll Optical". - MouseSystems SmartScroll Mouse (OEM from Genius?): 3 buttons on top, 1 side button and a wheel. The mouse is recognized as Genius "NetScroll". - IBM ScrollPoint: 2 buttons on top and a stick between the buttons. The stick can perform "horizontal scroll" in W*ndows environment. The horizontal movement of the stick is detected. It is currently mapped to the Z axis movement in the same way as the first wheel. The mouse is recognized as "MouseMan+", as it is considered to be a variation of MouseMan. - A4 Tech 4D and 4D+ mice. These mice have two wheels! The movement of the second wheel is reported as the Z axis movement in the same way as the first wheel. These mice are recognized as "4D Mouse" and "4D+ Mouse". - Tweak IntelliMouse support code a bit so that less-than-compatible wheel mice can work properly with the psm driver. - Add driver configuration flags which correspond to the kernel options PSM_HOOKRESUME and PSM_RESETAFTERSUSPEND, so that we don't need to recompile the kernel when we need these functions. - Properly keep track of the irq resource. - Add a watchdog timer in case interrupts are lost (experimental). - Add `detach' function (experimental).
* Don't free(sc) before returning an error from probe, it does not "belong"peter2000-03-011-1/+0
| | | | | | | | to us, subr_bus.c will free it. This bug (panic: freeing already free) was exposed by kern/subr_bus.c rev 1.54 Not explicitly approved by: jkh (but this is a showstopper and fallout of the above approved change)
* Use config's conditional compilation rather than using #ifdefs that makepeter2000-01-291-9/+0
| | | | | modular compilation harder. I'm doing this because people seem to like cut/pasting examples of bad practices in existing code.
* - Add the device resume method. It supercedes the existing resumeyokota1999-12-151-36/+18
| | | | | | routine which hooks the apm driver. - Rename the PSM_HOOKAPM option to PSM_HOOKRESUME. - Delete unnecessary #include.
* Use DEVICE_MODULE() directly instead of DEV_DRIVER_MODULE. psm.c usespeter1999-11-081-1/+1
| | | | make_dev() already.
* Remove five now unused fields from struct cdevsw. They should neverphk1999-09-251-5/+0
| | | | | | | | have been there in the first place. A GENERIC kernel shrinks almost 1k. Add a slightly different safetybelt under nostop for tty drivers. Add some missing FreeBSD tags
* $Id$ -> $FreeBSD$peter1999-08-281-1/+1
|
* Convert DEVFS hooks in (most) drivers to make_dev().phk1999-08-231-17/+3
| | | | | | | | | | | | | | | | Diskslice/label code not yet handled. Vinum, i4b, alpha, pc98 not dealt with (left to respective Maintainers) Add the correct hook for devfs to kern_conf.c The net result of this excercise is that a lot less files depends on DEVFS, and devtoname() gets more sensible output in many cases. A few drivers had minor additional cleanups performed relating to cdevsw registration. A few drivers don't register a cdevsw{} anymore, but only use make_dev().
* Improve the detection code for GlidePoint. This is still a kludge,yokota1999-08-221-2/+4
| | | | | | but better than before... PR: kern/13215
* Recognize Interlink VersaPad. `Tap' action will be recognizedyokota1999-08-171-4/+100
| | | | | | as the button 4. Submitted by: Masachika ISHIZUKA <ishizuka@ish.org>
* Improve Logitech MouseMan+ protocol support.yokota1999-07-121-19/+101
|
OpenPOWER on IntegriCloud