Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.

PMS(4)                       Device Drivers Manual                      PMS(4)

     pms - PS/2 auxiliary port mouse driver

     pckbc* at isa?
     pms* at pckbc?
     wsmouse* at pms?

     options PMS_ALPS_TOUCHPAD

     The pms driver provides an interface to PS/2 auxiliary port mice within
     the wscons(4) framework.  Parent device in terms of the autoconfiguration
     framework is pckbc(4), the PC keyboard controller.  "pms" is a generic
     driver which supports mice using common variants of the PS/2 protocol,
     including wheel mice of the "IntelliMouse" breed.  Wheel movements are
     mapped to a third (z-) axis.  The driver is believed to work with both
     3-button and 5-button mice with scroll wheels.  Mice which use other
     protocol extensions are not currently supported, but might be if protocol
     documentation could be found.  Mouse related data are accessed by
     wsmouse(4) devices.

     The pms driver has been updated to attempt to renegotiate mouse protocol
     after seeing suspicious or defective mouse protocol packets, or unusual
     delays in the middle of a packet; this should improve the chances that a
     mouse will recover after being switched away or reset (for instance, by a
     console switch).

     The PMS_DISABLE_POWERHOOK kernel option disables PS/2 reset on resume.

     In addition, the pms driver supports the "Synaptics", "Elantech" and
     "ALPS" touchpads in native mode, enabled with the PMS_SYNAPTICS_TOUCHPAD,
     PMS_ELANTECH_TOUCHPAD and PMS_ALPS_TOUCHPAD kernel options.  This allows
     the driver to take advantage of extra features available on Synaptics,
     Elantech and ALPS Touchpads.

     The following sysctl(8) variables control behavior of Synaptics

               If the touchpad reports the existence of extra ("Up/Down")
               buttons, this value determines what kind of mouse events they
               should generate.  On certain clickpads, the Up/Down buttons may
               be physical buttons that can be used instead of pressing the
               pad down, or used as additional buttons.

                  If set to 0, Up/Down events generate button 4 and 5 clicks.

                  If set to 1, Up/Down events generate middle button clicks.

                  If set to 2, the Up and Down buttons are used for Z-axis
                   emulation, which more closely resembles how mouse wheels

                  If set to 3 (default), Up/Down events generate left/right

               When the Up/Down buttons are used for Z-axis emulation, this
               value specifies the emulated delta-Z value per click.

               Gestures will not be recognised if the finger moves by more
               than this amount between taps.

               Gestures will not be recognised if the number of packets (at 80
               packets per second) between taps exceeds this value.




               These values define a border around the touchpad which will be
               used for edge motion emulation during a drag gesture.  If a
               drag gesture is in progress and the finger moves into this
               border, the driver will behave as if the finger continues to
               move in the same direction beyond the edge of the touchpad.

               This specifies the pointer speed when edge motion is in effect.

               The driver will ignore new finger events until the reported
               pressure exceeds this value.

               The driver will assume a finger remains on the touchpad until
               the reported pressure drops below this value.

               More recent touchpads can report the presence of more than one
               finger on the pad.  This value determines how such events are

                  If set to 0 (default), two-finger events are ignored.

                  If set to 1, two-finger events generate a right button

                  If set to 2, two-finger events generate a middle button



               Scale factor used to divide movement deltas derived from
               Synaptics coordinates (0-6143) to yield more reasonable values
               (default 16 for x and y, 1 for z).



               Limits pointer rate of change (after scaling) per reported
               movement event (default 32 for x and y, 2 for z).

               Movements of less than this value (in Synaptics coordinates)
               are ignored (default 4).

               This value determines whether or not the touchpad will respond
               to touch.  If set to 1 then the touchpad will respond to touch,
               if set to 0 will not respond effectively disabling the

               This value determines if finger movement events will be
               reported for fingers that are located in the button emulation
               region defined by hw.synaptics.button_boundary If set to 0 (the
               default) finger movements will not be reported.  If set to 1
               finger movements will be reported.


               These two items are interrelated in that setting one will
               affect the value of the other.  Since a clickpad only reports
               left clicks this region is used to emulate two or three buttons
               by detecting the finger location and reporting either a button
               2 or button 3 click if the click occurs within the region
               bounded by button_boundary and the bottom of the clickpad.
               hw.synaptics.button_boundary sets the top edge of the button
               emulation region on a clickpad and the percentage that
               represents this value is calculated and stored in
               hw.synaptics.button_region_percent Conversely, if
               hw.synaptics.button_region_percent is set then the equivalent
               value for hw.synaptics.button_boundary is calculated and
               stored.  Using a percentage allows the button region for
               trackpads that are able to report their maximum and minimum
               values to be reliably set to occupy a defined portion of the
               trackpad area instead of the user having to tweak an arbitrary

               This defines the left hand edge of the button 3 region.  If a
               click occurs in the region bounded by button_boundary,
               button3_edge and the right hand edge of the click pad then the
               click will be reported as a button3 event.  Button 3 emulation
               can be disabled by setting button3_edge to the right hand edge
               of the clickpad.

               This defines the left hand edge of the button 2 region.  The
               button 2 region is bounded by button2_edge, button3_edge and
               button_boundary.  If a click occurs in this region then it will
               be reported as a button2 event.  For completeness, the region
               between the left hand side of the clickpad, button2_edge and
               button_boundary will be reported as a button1 event as will any
               clicks that occur outside the button emulation region.

               This causes Y-axis movement on the "passthrough device" (e.g.
               the TrackPoint on ThinkPads) to result in scrolling events
               instead of Y-axis movement when the middle button is held.

               Reserve this percentage of the trackpad for a vertical scroll
               region.  This will reduce hw.synaptics.edge_right by this

               Reserve this percentage of the trackpad for a horizontal scroll
               region.  This will reduce hw.synaptics.edge_bottom by this
               percentage.  The hw.synaptics.button_boundary will be
               recalculated as a result of the change.

     The following sysctl(8) variables control behavior of Elantech touchpads:


               Increased values improve the accuracy of X, Y, and Z-axis
               reporting at the expense of slower mouse movement (default 2
               for xy, and 3 for z).

     For Elantech touchpads, the Z-axis is emulated using two-finger Y-axis

     The following sysctl(8) variables control behavior of ALPS touchpads:


               Decreased values improve the accuracy of X and Y-axis reporting
               at the expense of slower mouse movement (default 2 for touchpad
               and 1 for TrackStick).

               Movements of less than this value (in ALPS coordinates) are
               ignored (default 4).

     pckbc(4), ums(4), wsmouse(4)

     The pms driver was originally written by Christopher G. Demetriou.  The
     changes to merge the "IntelliMouse" protocol in, and reset the mouse in
     the event of protocol problems, were contributed by Peter Seebach.
     Special thanks to Ray Trent, at Synaptics, who contributed valuable
     insight into how to identify bogus mouse data.  The changes to add
     "Synaptics" pad support were by Ales Krenek, Kentaro A. Kurahone, and
     Steve C. Woodford.  The changes to add "Elantech" pad support were by
     Jared D. McNeill.

     It is possible for the driver to mistakenly negotiate the non-scroll-
     wheel protocol, after which it is unlikely to recover until the device is
     closed and reopened.

     The "Elantech" pad code only supports trackpads with firmware version
     2.48 or above.

NetBSD 10.99                   October 21, 2021                   NetBSD 10.99