aboutsummaryrefslogtreecommitdiff
path: root/share/man/man4/psm.4
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man4/psm.4')
-rw-r--r--share/man/man4/psm.4877
1 files changed, 877 insertions, 0 deletions
diff --git a/share/man/man4/psm.4 b/share/man/man4/psm.4
new file mode 100644
index 000000000000..01cbd9c0e038
--- /dev/null
+++ b/share/man/man4/psm.4
@@ -0,0 +1,877 @@
+.\"
+.\" Copyright (c) 1997
+.\" Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer as
+.\" the first lines of this file unmodified.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd April 8, 2008
+.Dt PSM 4
+.Os
+.Sh NAME
+.Nm psm
+.Nd PS/2 mouse style pointing device driver
+.Sh SYNOPSIS
+.Cd "options KBD_RESETDELAY=N"
+.Cd "options KBD_MAXWAIT=N"
+.Cd "options PSM_DEBUG=N"
+.Cd "options KBDIO_DEBUG=N"
+.Cd "device psm"
+.Pp
+In
+.Pa /boot/device.hints :
+.Cd hint.psm.0.at="atkbdc"
+.Cd hint.psm.0.irq="12"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the PS/2 mouse style pointing device.
+Currently there can be only one
+.Nm
+device node in the system.
+As the PS/2 mouse port is located
+at the auxiliary port of the keyboard controller,
+the keyboard controller driver,
+.Nm atkbdc ,
+must also be configured in the kernel.
+Note that there is currently no provision of changing the
+.Em irq
+number.
+.Pp
+Basic PS/2 style pointing device has two or three buttons.
+Some devices may have a roller or a wheel and/or additional buttons.
+.Ss Device Resolution
+The PS/2 style pointing device usually has several grades of resolution,
+that is, sensitivity of movement.
+They are typically 25, 50, 100 and 200
+pulse per inch.
+Some devices may have finer resolution.
+The current resolution can be changed at runtime.
+The
+.Nm
+driver allows the user to initially set the resolution
+via the driver flag
+(see
+.Sx "DRIVER CONFIGURATION" )
+or change it later via the
+.Xr ioctl 2
+command
+.Dv MOUSE_SETMODE
+(see
+.Sx IOCTLS ) .
+.Ss Report Rate
+Frequency, or report rate, at which the device sends movement
+and button state reports to the host system is also configurable.
+The PS/2 style pointing device typically supports 10, 20, 40, 60, 80, 100
+and 200 reports per second.
+60 or 100 appears to be the default value for many devices.
+Note that when there is no movement and no button has changed its state,
+the device will not send anything to the host system.
+The report rate can be changed via an ioctl call.
+.Ss Operation Levels
+The
+.Nm
+driver has three levels of operation.
+The current operation level can be set via an ioctl call.
+.Pp
+At the level zero the basic support is provided; the device driver will report
+horizontal and vertical movement of the attached device
+and state of up to three buttons.
+The movement and status are encoded in a series of fixed-length data packets
+(see
+.Sx "Data Packet Format" ) .
+This is the default level of operation and the driver is initially
+at this level when opened by the user program.
+.Pp
+The operation level one, the `extended' level, supports a roller (or wheel),
+if any, and up to 11 buttons.
+The movement of the roller is reported as movement along the Z axis.
+8 byte data packets are sent to the user program at this level.
+.Pp
+At the operation level two, data from the pointing device is passed to the
+user program as is. Conversely, command from the user program is passed
+to the pointing device as is and the user program is responsible for
+status validation and error recovery.
+Modern PS/2 type pointing devices often use proprietary data format.
+Therefore, the user program is expected to have
+intimate knowledge about the format from a particular device when operating
+the driver at this level.
+This level is called `native' level.
+.Ss Data Packet Format
+Data packets read from the
+.Nm
+driver are formatted differently at each operation level.
+.Pp
+A data packet from the PS/2 mouse style pointing device
+is three bytes long at the operation level zero:
+.Pp
+.Bl -tag -width Byte_1 -compact
+.It Byte 1
+.Bl -tag -width bit_7 -compact
+.It bit 7
+One indicates overflow in the vertical movement count.
+.It bit 6
+One indicates overflow in the horizontal movement count.
+.It bit 5
+Set if the vertical movement count is negative.
+.It bit 4
+Set if the horizontal movement count is negative.
+.It bit 3
+Always one.
+.\" The ALPS GlidePoint clears this bit when the user `taps' the surface of
+.\" the pad, otherwise the bit is set.
+.\" Most, if not all, other devices always set this bit.
+.It bit 2
+Middle button status; set if pressed.
+For devices without the middle
+button, this bit is always zero.
+.It bit 1
+Right button status; set if pressed.
+.It bit 0
+Left button status; set if pressed.
+.El
+.It Byte 2
+Horizontal movement count in two's complement;
+-256 through 255.
+Note that the sign bit is in the first byte.
+.It Byte 3
+Vertical movement count in two's complement;
+-256 through 255.
+Note that the sign bit is in the first byte.
+.El
+.Pp
+At the level one, a data packet is encoded
+in the standard format
+.Dv MOUSE_PROTO_SYSMOUSE
+as defined in
+.Xr mouse 4 .
+.Pp
+At the level two, native level, there is no standard on the size and format
+of the data packet.
+.Ss Acceleration
+The
+.Nm
+driver can somewhat `accelerate' the movement of the pointing device.
+The faster you move the device, the further the pointer
+travels on the screen.
+The driver has an internal variable which governs the effect of
+the acceleration.
+Its value can be modified via the driver flag
+or via an ioctl call.
+.Ss Device Number
+The minor device number of the
+.Nm
+is made up of:
+.Bd -literal -offset indent
+minor = (`unit' << 1) | `non-blocking'
+.Ed
+.Pp
+where `unit' is the device number (usually 0) and the `non-blocking' bit
+is set to indicate ``do not block waiting for mouse input,
+return immediately''.
+The `non-blocking' bit should be set for \fIXFree86\fP,
+therefore the minor device number usually used for \fIXFree86\fP is 1.
+See
+.Sx FILES
+for device node names.
+.Sh DRIVER CONFIGURATION
+.Ss Kernel Configuration Options
+There are following kernel configuration options to control the
+.Nm
+driver.
+They may be set in the kernel configuration file
+(see
+.Xr config 8 ) .
+.Bl -tag -width MOUSE
+.It Em KBD_RESETDELAY=X , KBD_MAXWAIT=Y
+The
+.Nm
+driver will attempt to reset the pointing device during the boot process.
+It sometimes takes a long while before the device will respond after
+reset.
+These options control how long the driver should wait before
+it eventually gives up waiting.
+The driver will wait
+.Fa X
+*
+.Fa Y
+msecs at most.
+If the driver seems unable to detect your pointing
+device, you may want to increase these values.
+The default values are
+200 msec for
+.Fa X
+and 5
+for
+.Fa Y .
+.It Em PSM_DEBUG=N , KBDIO_DEBUG=N
+Sets the debug level to
+.Fa N .
+The default debug level is zero.
+See
+.Sx DIAGNOSTICS
+for debug logging.
+.El
+.Ss Driver Flags
+The
+.Nm
+driver accepts the following driver flags.
+Set them in
+.Pa /boot/device.hints
+(see
+.Sx EXAMPLES
+below).
+.Pp
+.Bl -tag -width MOUSE
+.It bit 0..3 RESOLUTION
+This flag specifies the resolution of the pointing device.
+It must be zero through four.
+The greater the value
+is, the finer resolution the device will select.
+Actual resolution selected by this field varies according to the model
+of the device.
+Typical resolutions are:
+.Pp
+.Bl -tag -width 0_(medium_high)__ -compact
+.It Em 1 (low)
+25 pulse per inch (ppi)
+.It Em 2 (medium low)
+50 ppi
+.It Em 3 (medium high)
+100 ppi
+.It Em 4 (high)
+200 ppi
+.El
+.Pp
+Leaving this flag zero will selects the default resolution for the
+device (whatever it is).
+.It bit 4..7 ACCELERATION
+This flag controls the amount of acceleration effect.
+The smaller the value of this flag is, more sensitive the movement becomes.
+The minimum value allowed, thus the value for the most sensitive setting,
+is one.
+Setting this flag to zero will completely disables the
+acceleration effect.
+.It bit 8 NOCHECKSYNC
+The
+.Nm
+driver tries to detect the first byte of the data packet by checking
+the bit pattern of that byte.
+Although this method should work with most
+PS/2 pointing devices, it may interfere with some devices which are not
+so compatible with known devices.
+If you think your pointing device is not functioning as expected,
+and the kernel frequently prints the following message to the console,
+.Bd -literal -offset indent
+psmintr: out of sync (xxxx != yyyy).
+.Ed
+.Pp
+set this flag to disable synchronization check and see if it helps.
+.It bit 9 NOIDPROBE
+The
+.Nm
+driver will not try to identify the model of the pointing device and
+will not carry out model-specific initialization.
+The device should always act like a standard PS/2 mouse without such
+initialization.
+Extra features, such as wheels and additional buttons, will not be
+recognized by the
+.Nm
+driver.
+.It bit 10 NORESET
+When this flag is set, the
+.Nm
+driver will not reset the pointing device when initializing the device.
+If the
+.Fx
+kernel
+is started after another OS has run, the pointing device will inherit
+settings from the previous OS.
+However, because there is no way for the
+.Nm
+driver to know the settings, the device and the driver may not
+work correctly.
+The flag should never be necessary under normal circumstances.
+.It bit 11 FORCETAP
+Some pad devices report as if the fourth button is pressed
+when the user `taps' the surface of the device (see
+.Sx CAVEATS ) .
+This flag will make the
+.Nm
+driver assume that the device behaves this way.
+Without the flag, the driver will assume this behavior
+for ALPS GlidePoint models only.
+.It bit 12 IGNOREPORTERROR
+This flag makes
+.Nm
+driver ignore certain error conditions when probing the PS/2 mouse port.
+It should never be necessary under normal circumstances.
+.It bit 13 HOOKRESUME
+The built-in PS/2 pointing device of some laptop computers is somehow
+not operable immediately after the system `resumes' from
+the power saving mode,
+though it will eventually become available.
+There are reports that
+stimulating the device by performing I/O will help
+waking up the device quickly.
+This flag will enable a piece of code in the
+.Nm
+driver to hook
+the `resume' event and exercise some harmless I/O operations on the
+device.
+.It bit 14 INITAFTERSUSPEND
+This flag adds more drastic action for the above problem.
+It will cause the
+.Nm
+driver to reset and re-initialize the pointing device
+after the `resume' event.
+It has no effect unless the
+.Em HOOKRESUME
+flag is set as well.
+.El
+.Sh LOADER TUNABLES
+Extended support for Synaptics touchpads can be enabled by setting
+.Va hw.psm.synaptics_support
+to
+.Em 1
+at boot-time.
+This will enable
+.Nm
+to handle packets from guest devices (sticks) and extra buttons.
+.Sh IOCTLS
+There are a few
+.Xr ioctl 2
+commands for mouse drivers.
+These commands and related structures and constants are defined in
+.In sys/mouse.h .
+General description of the commands is given in
+.Xr mouse 4 .
+This section explains the features specific to the
+.Nm
+driver.
+.Pp
+.Bl -tag -width MOUSE -compact
+.It Dv MOUSE_GETLEVEL Ar int *level
+.It Dv MOUSE_SETLEVEL Ar int *level
+These commands manipulate the operation level of the
+.Nm
+driver.
+.Pp
+.It Dv MOUSE_GETHWINFO Ar mousehw_t *hw
+Returns the hardware information of the attached device in the following
+structure.
+.Bd -literal
+typedef struct mousehw {
+ int buttons; /* number of buttons */
+ int iftype; /* I/F type */
+ int type; /* mouse/track ball/pad... */
+ int model; /* I/F dependent model ID */
+ int hwid; /* I/F dependent hardware ID */
+} mousehw_t;
+.Ed
+.Pp
+The
+.Dv buttons
+field holds the number of buttons on the device.
+The
+.Nm
+driver currently can detect the 3 button mouse from Logitech and report
+accordingly.
+The 3 button mouse from the other manufacturer may or may not be
+reported correctly.
+However, it will not affect the operation of
+the driver.
+.Pp
+The
+.Dv iftype
+is always
+.Dv MOUSE_IF_PS2 .
+.Pp
+The
+.Dv type
+tells the device type:
+.Dv MOUSE_MOUSE ,
+.Dv MOUSE_TRACKBALL ,
+.Dv MOUSE_STICK ,
+.Dv MOUSE_PAD ,
+or
+.Dv MOUSE_UNKNOWN .
+The user should not heavily rely on this field, as the
+driver may not always, in fact it is very rarely able to, identify
+the device type.
+.Pp
+The
+.Dv model
+is always
+.Dv MOUSE_MODEL_GENERIC
+at the operation level 0.
+It may be
+.Dv MOUSE_MODEL_GENERIC
+or one of
+.Dv MOUSE_MODEL_XXX
+constants at higher operation levels.
+Again the
+.Nm
+driver may or may not set an appropriate value in this field.
+.Pp
+The
+.Dv hwid
+is the ID value returned by the device.
+Known IDs include:
+.Pp
+.Bl -tag -width 0__ -compact
+.It Em 0
+Mouse (Microsoft, Logitech and many other manufacturers)
+.It Em 2
+Microsoft Ballpoint mouse
+.It Em 3
+Microsoft IntelliMouse
+.El
+.Pp
+.It Dv MOUSE_SYN_GETHWINFO Ar synapticshw_t *synhw
+Retrieves extra information associated with Synaptics Touchpads.
+Only available when
+.Va hw.psm.synaptics_support
+has been enabled.
+.Bd -literal
+typedef struct synapticshw {
+ int infoMajor; /* major hardware revision */
+ int infoMinor; /* minor hardware revision */
+ int infoRot180; /* touchpad is rotated */
+ int infoPortrait; /* touchpad is a portrait */
+ int infoSensor; /* sensor model */
+ int infoHardware; /* hardware model */
+ int infoNewAbs; /* supports the newabs format */
+ int capPen; /* can detect a pen */
+ int infoSimpleC; /* supports simple commands */
+ int infoGeometry; /* touchpad dimensions */
+ int capExtended; /* supports extended packets */
+ int capSleep; /* can be suspended/resumed */
+ int capFourButtons; /* has four buttons */
+ int capMultiFinger; /* can detect multiple fingers */
+ int capPalmDetect; /* can detect a palm */
+ int capPassthrough; /* can passthrough guest packets */
+} synapticshw_t;
+.Ed
+.Pp
+See the
+.Em Synaptics TouchPad Interfacing Guide
+for more information about the fields in this structure.
+.Pp
+.It Dv MOUSE_GETMODE Ar mousemode_t *mode
+The command gets the current operation parameters of the mouse
+driver.
+.Bd -literal
+typedef struct mousemode {
+ int protocol; /* MOUSE_PROTO_XXX */
+ int rate; /* report rate (per sec), -1 if unknown */
+ int resolution; /* MOUSE_RES_XXX, -1 if unknown */
+ int accelfactor; /* acceleration factor */
+ int level; /* driver operation level */
+ int packetsize; /* the length of the data packet */
+ unsigned char syncmask[2]; /* sync. bits */
+} mousemode_t;
+.Ed
+.Pp
+The
+.Dv protocol
+is
+.Dv MOUSE_PROTO_PS2
+at the operation level zero and two.
+.Dv MOUSE_PROTO_SYSMOUSE
+at the operation level one.
+.Pp
+The
+.Dv rate
+is the status report rate (reports/sec) at which the device will send
+movement report to the host computer.
+Typical supported values are 10, 20, 40, 60, 80, 100 and 200.
+Some mice may accept other arbitrary values too.
+.Pp
+The
+.Dv resolution
+of the pointing device must be one of
+.Dv MOUSE_RES_XXX
+constants or a positive value.
+The greater the value
+is, the finer resolution the mouse will select.
+Actual resolution selected by the
+.Dv MOUSE_RES_XXX
+constant varies according to the model of mouse.
+Typical resolutions are:
+.Pp
+.Bl -tag -width MOUSE_RES_MEDIUMHIGH__ -compact
+.It Dv MOUSE_RES_LOW
+25 ppi
+.It Dv MOUSE_RES_MEDIUMLOW
+50 ppi
+.It Dv MOUSE_RES_MEDIUMHIGH
+100 ppi
+.It Dv MOUSE_RES_HIGH
+200 ppi
+.El
+.Pp
+The
+.Dv accelfactor
+field holds a value to control acceleration feature
+(see
+.Sx Acceleration ) .
+It must be zero or greater.
+If it is zero, acceleration is disabled.
+.Pp
+The
+.Dv packetsize
+field specifies the length of the data packet.
+It depends on the
+operation level and the model of the pointing device.
+.Pp
+.Bl -tag -width level_0__ -compact
+.It Em level 0
+3 bytes
+.It Em level 1
+8 bytes
+.It Em level 2
+Depends on the model of the device
+.El
+.Pp
+The array
+.Dv syncmask
+holds a bit mask and pattern to detect the first byte of the
+data packet.
+.Dv syncmask[0]
+is the bit mask to be ANDed with a byte.
+If the result is equal to
+.Dv syncmask[1] ,
+the byte is likely to be the first byte of the data packet.
+Note that this detection method is not 100% reliable,
+thus, should be taken only as an advisory measure.
+.Pp
+.It Dv MOUSE_SETMODE Ar mousemode_t *mode
+The command changes the current operation parameters of the mouse driver
+as specified in
+.Ar mode .
+Only
+.Dv rate ,
+.Dv resolution ,
+.Dv level
+and
+.Dv accelfactor
+may be modifiable.
+Setting values in the other field does not generate
+error and has no effect.
+.Pp
+If you do not want to change the current setting of a field, put -1
+there.
+You may also put zero in
+.Dv resolution
+and
+.Dv rate ,
+and the default value for the fields will be selected.
+.\" .Pp
+.\" .It Dv MOUSE_GETVARS Ar mousevar_t *vars
+.\" .It Dv MOUSE_SETVARS Ar mousevar_t *vars
+.\" These commands are not supported by the
+.\" .Nm
+.\" driver.
+.Pp
+.It Dv MOUSE_READDATA Ar mousedata_t *data
+.\" The command reads the raw data from the device.
+.\" .Bd -literal
+.\" typedef struct mousedata {
+.\" int len; /* # of data in the buffer */
+.\" int buf[16]; /* data buffer */
+.\" } mousedata_t;
+.\" .Ed
+.\" .Pp
+.\" Upon returning to the user program, the driver will place the number
+.\" of valid data bytes in the buffer in the
+.\" .Dv len
+.\" field.
+.\" .Pp
+.It Dv MOUSE_READSTATE Ar mousedata_t *state
+.\" The command reads the hardware settings from the device.
+.\" Upon returning to the user program, the driver will place the number
+.\" of valid data bytes in the buffer in the
+.\" .Dv len
+.\" field. It is usually 3 bytes.
+.\" The buffer is formatted as follows:
+.\" .Pp
+.\" .Bl -tag -width Byte_1 -compact
+.\" .It Byte 1
+.\" .Bl -tag -width bit_6 -compact
+.\" .It bit 7
+.\" Reserved.
+.\" .It bit 6
+.\" 0 - stream mode, 1 - remote mode.
+.\" In the stream mode, the pointing device sends the device status
+.\" whenever its state changes. In the remote mode, the host computer
+.\" must request the status to be sent.
+.\" The
+.\" .Nm
+.\" driver puts the device in the stream mode.
+.\" .It bit 5
+.\" Set if the pointing device is currently enabled. Otherwise zero.
+.\" .It bit 4
+.\" 0 - 1:1 scaling, 1 - 2:1 scaling.
+.\" 1:1 scaling is the default.
+.\" .It bit 3
+.\" Reserved.
+.\" .It bit 2
+.\" Left button status; set if pressed.
+.\" .It bit 1
+.\" Middle button status; set if pressed.
+.\" .It bit 0
+.\" Right button status; set if pressed.
+.\" .El
+.\" .It Byte 2
+.\" .Bl -tag -width bit_6_0 -compact
+.\" .It bit 7
+.\" Reserved.
+.\" .It bit 6..0
+.\" Resolution code: zero through three. Actual resolution for
+.\" the resolution code varies from one device to another.
+.\" .El
+.\" .It Byte 3
+.\" The status report rate (reports/sec) at which the device will send
+.\" movement report to the host computer.
+.\" .El
+These commands are not currently supported by the
+.Nm
+driver.
+.Pp
+.It Dv MOUSE_GETSTATUS Ar mousestatus_t *status
+The command returns the current state of buttons and
+movement counts as described in
+.Xr mouse 4 .
+.El
+.Sh FILES
+.Bl -tag -width /dev/npsm0 -compact
+.It Pa /dev/psm0
+`non-blocking' device node
+.It Pa /dev/bpsm0
+`blocking' device node under
+.Em devfs .
+.El
+.Sh EXAMPLES
+In order to install the
+.Nm
+driver, you need to add
+.Pp
+.Dl "device atkbdc"
+.Dl "device psm"
+.Pp
+to your kernel configuration file, and put the following lines to
+.Pa /boot/device.hints .
+.Pp
+.Dl hint.atkbdc.0.at="isa"
+.Dl hint.atkbdc.0.port="0x060"
+.Dl hint.psm.0.at="atkbdc"
+.Dl hint.psm.0.irq="12"
+.Pp
+If you add the following statement to
+.Pa /boot/device.hints ,
+.Pp
+.Dl hint.psm.0.flags="0x2000"
+.Pp
+you will add the optional code to stimulate the pointing device
+after the `resume' event.
+.Pp
+.Dl hint.psm.0.flags="0x24"
+.Pp
+The above line will set the device resolution high (4)
+and the acceleration factor to 2.
+.Sh DIAGNOSTICS
+At debug level 0, little information is logged except for the following
+line during boot process:
+.Bd -literal -offset indent
+psm0: device ID X
+.Ed
+.Pp
+where
+.Fa X
+the device ID code returned by the found pointing device.
+See
+.Dv MOUSE_GETINFO
+for known IDs.
+.Pp
+At debug level 1 more information will be logged
+while the driver probes the auxiliary port (mouse port).
+Messages are logged with the LOG_KERN facility at the LOG_DEBUG level
+(see
+.Xr syslogd 8 ) .
+.Bd -literal -offset indent
+psm0: current command byte:xxxx
+kbdio: TEST_AUX_PORT status:0000
+kbdio: RESET_AUX return code:00fa
+kbdio: RESET_AUX status:00aa
+kbdio: RESET_AUX ID:0000
+[...]
+psm: status 00 02 64
+psm0 irq 12 on isa
+psm0: model AAAA, device ID X, N buttons
+psm0: config:00000www, flags:0000uuuu, packet size:M
+psm0: syncmask:xx, syncbits:yy
+.Ed
+.Pp
+The first line shows the command byte value of the keyboard
+controller just before the auxiliary port is probed.
+It usually is 4D, 45, 47 or 65, depending on how the motherboard BIOS
+initialized the keyboard controller upon power-up.
+.Pp
+The second line shows the result of the keyboard controller's
+test on the auxiliary port interface, with zero indicating
+no error; note that some controllers report no error even if
+the port does not exist in the system, however.
+.Pp
+The third through fifth lines show the reset status of the pointing device.
+The functioning device should return the sequence of FA AA <ID>.
+The ID code is described above.
+.Pp
+The seventh line shows the current hardware settings.
+.\" See
+.\" .Dv MOUSE_READSTATE
+.\" for definitions.
+These bytes are formatted as follows:
+.Pp
+.Bl -tag -width Byte_1 -compact
+.It Byte 1
+.Bl -tag -width bit_6 -compact
+.It bit 7
+Reserved.
+.It bit 6
+0 - stream mode, 1 - remote mode.
+In the stream mode, the pointing device sends the device status
+whenever its state changes.
+In the remote mode, the host computer
+must request the status to be sent.
+The
+.Nm
+driver puts the device in the stream mode.
+.It bit 5
+Set if the pointing device is currently enabled.
+Otherwise zero.
+.It bit 4
+0 - 1:1 scaling, 1 - 2:1 scaling.
+1:1 scaling is the default.
+.It bit 3
+Reserved.
+.It bit 2
+Left button status; set if pressed.
+.It bit 1
+Middle button status; set if pressed.
+.It bit 0
+Right button status; set if pressed.
+.El
+.It Byte 2
+.Bl -tag -width bit_6_0 -compact
+.It bit 7
+Reserved.
+.It bit 6..0
+Resolution code: zero through three.
+Actual resolution for
+the resolution code varies from one device to another.
+.El
+.It Byte 3
+The status report rate (reports/sec) at which the device will send
+movement report to the host computer.
+.El
+.Pp
+Note that the pointing device will not be enabled until the
+.Nm
+driver is opened by the user program.
+.Pp
+The rest of the lines show the device ID code, the number of detected
+buttons and internal variables.
+.Pp
+At debug level 2, much more detailed information is logged.
+.Sh CAVEATS
+Many pad devices behave as if the first (left) button were pressed if
+the user `taps' the surface of the pad.
+In contrast, some pad products, e.g.\& some versions of ALPS GlidePoint
+and Interlink VersaPad, treat the tapping action
+as fourth button events.
+.Pp
+It is reported that Interlink VersaPad requires both
+.Em HOOKRESUME
+and
+.Em INITAFTERSUSPEND
+flags in order to recover from suspended state.
+These flags are automatically set when VersaPad is detected by the
+.Nm
+driver.
+.Pp
+Some PS/2 mouse models from MouseSystems require to be put in the
+high resolution mode to work properly.
+Use the driver flag to
+set resolution.
+.Pp
+There is not a guaranteed way to re-synchronize with the first byte
+of the packet once we are out of synchronization with the data
+stream.
+However, if you are using the \fIXFree86\fP server and experiencing
+the problem, you may be able to make the X server synchronize with the mouse
+by switching away to a virtual terminal and getting back to the X server,
+unless the X server is accessing the mouse via
+.Xr moused 8 .
+Clicking any button without moving the mouse may also work.
+.Sh SEE ALSO
+.Xr ioctl 2 ,
+.Xr syslog 3 ,
+.Xr atkbdc 4 ,
+.Xr mouse 4 ,
+.Xr mse 4 ,
+.Xr sysmouse 4 ,
+.Xr moused 8 ,
+.Xr syslogd 8
+.Rs
+.%T Synaptics TouchPad Interfacing Guide
+.%O http://www.synaptics.com/
+.Re
+.\".Sh HISTORY
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver is based on the work done by quite a number of people, including
+.An Eric Forsberg ,
+.An Sandi Donno ,
+.An Rick Macklem ,
+.An Andrew Herbert ,
+.An Charles Hannum ,
+.An Shoji Yuen
+and
+.An Kazutaka Yokota
+to name the few.
+.Pp
+This manual page was written by
+.An Kazutaka Yokota Aq yokota@FreeBSD.org .
+.Sh BUGS
+The ioctl command
+.Dv MOUSEIOCREAD
+has been removed.
+It was never functional anyway.
+.Pp
+Enabling the extended support for Synaptics touchpads has been reported to
+cause problems with responsivity on some (newer) models of Synaptics
+hardware, particularly those with guest devices.