diff options
Diffstat (limited to 'static/freebsd/man4/psm.4 3.html')
| -rw-r--r-- | static/freebsd/man4/psm.4 3.html | 663 |
1 files changed, 663 insertions, 0 deletions
diff --git a/static/freebsd/man4/psm.4 3.html b/static/freebsd/man4/psm.4 3.html new file mode 100644 index 00000000..f3e8781e --- /dev/null +++ b/static/freebsd/man4/psm.4 3.html @@ -0,0 +1,663 @@ +<table class="head"> + <tr> + <td class="head-ltitle">PSM(4)</td> + <td class="head-vol">Device Drivers Manual</td> + <td class="head-rtitle">PSM(4)</td> + </tr> +</table> +<div class="manual-text"> +<section class="Sh"> +<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> +<p class="Pp"><code class="Nm">psm</code> — <span class="Nd">PS/2 mouse + style pointing device driver</span></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> +<p class="Pp"><code class="Cd">options KBD_RESETDELAY=N</code> + <br/> + <code class="Cd">options KBD_MAXWAIT=N</code> + <br/> + <code class="Cd">options PSM_DEBUG=N</code> + <br/> + <code class="Cd">options KBDIO_DEBUG=N</code> + <br/> + <code class="Cd">device psm</code></p> +<p class="Pp">In <span class="Pa">/boot/device.hints</span>: + <br/> + <code class="Cd">hint.psm.0.at="atkbdc"</code> + <br/> + <code class="Cd">hint.psm.0.irq="12"</code></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<p class="Pp">The <code class="Nm">psm</code> driver provides support for the + PS/2 mouse style pointing device. Currently there can be only one + <code class="Nm">psm</code> 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, <code class="Nm">atkbdc</code>, must also be + configured in the kernel. Note that there is currently no provision of + changing the + <a class="permalink" href="#irq"><i class="Em" id="irq">irq</i></a> + number.</p> +<p class="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.</p> +<section class="Ss"> +<h2 class="Ss" id="Device_Resolution"><a class="permalink" href="#Device_Resolution">Device + Resolution</a></h2> +<p class="Pp">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 <code class="Nm">psm</code> driver + allows the user to initially set the resolution via the driver flag (see + <a class="Sx" href="#DRIVER_CONFIGURATION">DRIVER CONFIGURATION</a>) or + change it later via the <a class="Xr">ioctl(2)</a> command + <code class="Dv">MOUSE_SETMODE</code> (see + <a class="Sx" href="#IOCTLS">IOCTLS</a>).</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Report_Rate"><a class="permalink" href="#Report_Rate">Report + Rate</a></h2> +<p class="Pp">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.</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Operation_Levels"><a class="permalink" href="#Operation_Levels">Operation + Levels</a></h2> +<p class="Pp">The <code class="Nm">psm</code> driver has three levels of + operation. The current operation level can be set via an ioctl call.</p> +<p class="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 + <a class="Sx" href="#Data_Packet_Format">Data Packet Format</a>). This is + the default level of operation and the driver is initially at this level + when opened by the user program.</p> +<p class="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.</p> +<p class="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.</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Data_Packet_Format"><a class="permalink" href="#Data_Packet_Format">Data + Packet Format</a></h2> +<p class="Pp">Data packets read from the <code class="Nm">psm</code> driver are + formatted differently at each operation level.</p> +<p class="Pp">A data packet from the PS/2 mouse style pointing device is three + bytes long at the operation level zero:</p> +<p class="Pp"></p> +<dl class="Bl-tag Bl-compact"> + <dt>Byte 1</dt> + <dd> + <dl class="Bl-tag Bl-compact"> + <dt>bit 7</dt> + <dd>One indicates overflow in the vertical movement count.</dd> + <dt>bit 6</dt> + <dd>One indicates overflow in the horizontal movement count.</dd> + <dt>bit 5</dt> + <dd>Set if the vertical movement count is negative.</dd> + <dt>bit 4</dt> + <dd>Set if the horizontal movement count is negative.</dd> + <dt>bit 3</dt> + <dd>Always one.</dd> + <dt>bit 2</dt> + <dd>Middle button status; set if pressed. For devices without the middle + button, this bit is always zero.</dd> + <dt>bit 1</dt> + <dd>Right button status; set if pressed.</dd> + <dt>bit 0</dt> + <dd>Left button status; set if pressed.</dd> + </dl> + </dd> + <dt>Byte 2</dt> + <dd>Horizontal movement count in two's complement; -256 through 255. Note that + the sign bit is in the first byte.</dd> + <dt>Byte 3</dt> + <dd>Vertical movement count in two's complement; -256 through 255. Note that + the sign bit is in the first byte.</dd> +</dl> +<p class="Pp">At the level one, a data packet is encoded in the standard format + <code class="Dv">MOUSE_PROTO_SYSMOUSE</code> as defined in + <a class="Xr">mouse(4)</a>.</p> +<p class="Pp">At the level two, native level, there is no standard on the size + and format of the data packet.</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Acceleration"><a class="permalink" href="#Acceleration">Acceleration</a></h2> +<p class="Pp">The <code class="Nm">psm</code> 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.</p> +</section> +</section> +<section class="Sh"> +<h1 class="Sh" id="DRIVER_CONFIGURATION"><a class="permalink" href="#DRIVER_CONFIGURATION">DRIVER + CONFIGURATION</a></h1> +<section class="Ss"> +<h2 class="Ss" id="Kernel_Configuration_Options"><a class="permalink" href="#Kernel_Configuration_Options">Kernel + Configuration Options</a></h2> +<p class="Pp">There are following kernel configuration options to control the + <code class="Nm">psm</code> driver. They may be set in the kernel + configuration file (see <a class="Xr">config(8)</a>).</p> +<dl class="Bl-tag"> + <dt id="KBD_RESETDELAY=X"><a class="permalink" href="#KBD_RESETDELAY=X"><i class="Em">KBD_RESETDELAY=X</i></a>, + <a class="permalink" href="#KBD_MAXWAIT=Y"><i class="Em" id="KBD_MAXWAIT=Y">KBD_MAXWAIT=Y</i></a></dt> + <dd>The <code class="Nm">psm</code> 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 + <var class="Fa">X</var> * <var class="Fa">Y</var> 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 + <var class="Fa">X</var> and 5 for <var class="Fa">Y</var>.</dd> + <dt id="PSM_DEBUG=N"><a class="permalink" href="#PSM_DEBUG=N"><i class="Em">PSM_DEBUG=N</i></a>, + <a class="permalink" href="#KBDIO_DEBUG=N"><i class="Em" id="KBDIO_DEBUG=N">KBDIO_DEBUG=N</i></a></dt> + <dd>Sets the debug level to <var class="Fa">N</var>. The default debug level + is zero. See <a class="Sx" href="#DIAGNOSTICS">DIAGNOSTICS</a> for debug + logging.</dd> +</dl> +</section> +<section class="Ss"> +<h2 class="Ss" id="Driver_Flags"><a class="permalink" href="#Driver_Flags">Driver + Flags</a></h2> +<p class="Pp">The <code class="Nm">psm</code> driver accepts the following + driver flags. Set them in <span class="Pa">/boot/device.hints</span> (see + <a class="Sx" href="#EXAMPLES">EXAMPLES</a> below).</p> +<dl class="Bl-tag"> + <dt>bit 0..3 RESOLUTION</dt> + <dd>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: + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="1"><a class="permalink" href="#1"><i class="Em">1 + (low)</i></a></dt> + <dd>25 pulse per inch (ppi)</dd> + <dt><i class="Em">2 (medium low)</i></dt> + <dd>50 ppi</dd> + <dt><i class="Em">3 (medium high)</i></dt> + <dd>100 ppi</dd> + <dt id="4"><a class="permalink" href="#4"><i class="Em">4 + (high)</i></a></dt> + <dd>200 ppi</dd> + </dl> + <p class="Pp">Leaving this flag zero will selects the default resolution for + the device (whatever it is).</p> + </dd> + <dt>bit 4..7 ACCELERATION</dt> + <dd>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.</dd> + <dt>bit 8 NOCHECKSYNC</dt> + <dd>The <code class="Nm">psm</code> 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, + <div class="Bd Pp Bd-indent Li"> + <pre>psmintr: out of sync (xxxx != yyyy).</pre> + </div> + <p class="Pp">set this flag to disable synchronization check and see if it + helps.</p> + </dd> + <dt>bit 9 NOIDPROBE</dt> + <dd>The <code class="Nm">psm</code> 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 <code class="Nm">psm</code> + driver.</dd> + <dt>bit 10 NORESET</dt> + <dd>When this flag is set, the <code class="Nm">psm</code> driver will not + reset the pointing device when initializing the device. If the + <span class="Ux">FreeBSD</span> 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 <code class="Nm">psm</code> + driver to know the settings, the device and the driver may not work + correctly. The flag should never be necessary under normal + circumstances.</dd> + <dt>bit 11 FORCETAP</dt> + <dd>Some pad devices report as if the fourth button is pressed when the user + `taps' the surface of the device (see + <a class="Sx" href="#CAVEATS">CAVEATS</a>). This flag will make the + <code class="Nm">psm</code> driver assume that the device behaves this + way. Without the flag, the driver will assume this behavior for ALPS + GlidePoint models only.</dd> + <dt>bit 12 IGNOREPORTERROR</dt> + <dd>This flag makes <code class="Nm">psm</code> driver ignore certain error + conditions when probing the PS/2 mouse port. It should never be necessary + under normal circumstances.</dd> + <dt>bit 13 HOOKRESUME</dt> + <dd>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 + <code class="Nm">psm</code> driver to hook the `resume' event and exercise + some harmless I/O operations on the device.</dd> + <dt>bit 14 INITAFTERSUSPEND</dt> + <dd>This flag adds more drastic action for the above problem. It will cause + the <code class="Nm">psm</code> driver to reset and re-initialize the + pointing device after the `resume' event.</dd> +</dl> +</section> +</section> +<section class="Sh"> +<h1 class="Sh" id="LOADER_TUNABLES"><a class="permalink" href="#LOADER_TUNABLES">LOADER + TUNABLES</a></h1> +<p class="Pp">Extended support for Synaptics touchpads can be enabled by setting + <var class="Va">hw.psm.synaptics_support</var> to <i class="Em">1</i> at + boot-time. This will enable <code class="Nm">psm</code> to handle packets + from guest devices (sticks) and extra buttons. Similarly, extended support + for IBM/Lenovo TrackPoint and Elantech touchpads can be enabled by setting + <var class="Va">hw.psm.trackpoint_support</var> or + <var class="Va">hw.psm.elantech_support</var>, respectively, to + <i class="Em">1</i> at boot-time.</p> +<p class="Pp">Tap and drag gestures can be disabled by setting + <var class="Va">hw.psm.tap_enabled</var> to <i class="Em">0</i> at + boot-time. Currently, this is supported on Synaptics touchpads regardless of + Extended support state and on Elantech touchpads with Extended support + enabled. The behaviour may be changed after boot by setting the sysctl with + the same name and by restarting <a class="Xr">moused(8)</a> using + <span class="Pa">/etc/rc.d/moused</span>.</p> +<p class="Pp">Active multiplexing support can be disabled by setting + <var class="Va">hw.psm.mux_disabled</var> to <i class="Em">1</i> at + boot-time. This will prevent <code class="Nm">psm</code> from enabling + active multiplexing mode needed for some Synaptics touchpads.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="IOCTLS"><a class="permalink" href="#IOCTLS">IOCTLS</a></h1> +<p class="Pp">There are a few <a class="Xr">ioctl(2)</a> commands for mouse + drivers. These commands and related structures and constants are defined in + <code class="In"><<a class="In">sys/mouse.h</a>></code>. General + description of the commands is given in <a class="Xr">mouse(4)</a>. This + section explains the features specific to the <code class="Nm">psm</code> + driver.</p> +<p class="Pp"></p> +<dl class="Bl-tag Bl-compact"> + <dt id="MOUSE_GETLEVEL"><a class="permalink" href="#MOUSE_GETLEVEL"><code class="Dv">MOUSE_GETLEVEL</code></a> + <var class="Ar">int *level</var></dt> + <dd style="width: auto;"> </dd> + <dt id="MOUSE_SETLEVEL"><a class="permalink" href="#MOUSE_SETLEVEL"><code class="Dv">MOUSE_SETLEVEL</code></a> + <var class="Ar">int *level</var></dt> + <dd>These commands manipulate the operation level of the + <code class="Nm">psm</code> driver. + <p class="Pp"></p> + </dd> + <dt id="MOUSE_GETHWINFO"><a class="permalink" href="#MOUSE_GETHWINFO"><code class="Dv">MOUSE_GETHWINFO</code></a> + <var class="Ar">mousehw_t *hw</var></dt> + <dd>Returns the hardware information of the attached device in the following + structure. + <div class="Bd Pp Li"> + <pre>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;</pre> + </div> + <p class="Pp">The <code class="Dv">buttons</code> field holds the number of + buttons on the device. The <code class="Nm">psm</code> 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.</p> + <p class="Pp">The <code class="Dv">iftype</code> is always + <code class="Dv">MOUSE_IF_PS2</code>.</p> + <p class="Pp">The <code class="Dv">type</code> tells the device type: + <code class="Dv">MOUSE_MOUSE</code>, + <code class="Dv">MOUSE_TRACKBALL</code>, + <code class="Dv">MOUSE_STICK</code>, <code class="Dv">MOUSE_PAD</code>, + or <code class="Dv">MOUSE_UNKNOWN</code>. 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.</p> + <p class="Pp">The <code class="Dv">model</code> is always + <code class="Dv">MOUSE_MODEL_GENERIC</code> at the operation level 0. It + may be <code class="Dv">MOUSE_MODEL_GENERIC</code> or one of + <code class="Dv">MOUSE_MODEL_XXX</code> constants at higher operation + levels. Again the <code class="Nm">psm</code> driver may or may not set + an appropriate value in this field.</p> + <p class="Pp">The <code class="Dv">hwid</code> is the ID value returned by + the device. Known IDs include:</p> + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="0"><a class="permalink" href="#0"><i class="Em">0</i></a></dt> + <dd>Mouse (Microsoft, Logitech and many other manufacturers)</dd> + <dt id="2"><a class="permalink" href="#2"><i class="Em">2</i></a></dt> + <dd>Microsoft Ballpoint mouse</dd> + <dt id="3"><a class="permalink" href="#3"><i class="Em">3</i></a></dt> + <dd>Microsoft IntelliMouse</dd> + </dl> + <p class="Pp"></p> + </dd> + <dt id="MOUSE_SYN_GETHWINFO"><a class="permalink" href="#MOUSE_SYN_GETHWINFO"><code class="Dv">MOUSE_SYN_GETHWINFO</code></a> + <var class="Ar">synapticshw_t *synhw</var></dt> + <dd>Retrieves extra information associated with Synaptics Touchpad. Only + available when a supported device has been detected. + <div class="Bd Pp Li"> + <pre>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 infoSimplC; /* 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 */ + int capMiddle; /* has a physical middle button */ + int nExtendedButtons; /* has N additional buttons */ + int nExtendedQueries; /* supports N extended queries */ +} synapticshw_t;</pre> + </div> + <p class="Pp" id="Synaptics">See the + <a class="permalink" href="#Synaptics"><i class="Em">Synaptics TouchPad + Interfacing Guide</i></a> for more information about the fields in this + structure.</p> + <p class="Pp"></p> + </dd> + <dt id="MOUSE_GETMODE"><a class="permalink" href="#MOUSE_GETMODE"><code class="Dv">MOUSE_GETMODE</code></a> + <var class="Ar">mousemode_t *mode</var></dt> + <dd>The command gets the current operation parameters of the mouse driver. + <div class="Bd Pp Li"> + <pre>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;</pre> + </div> + <p class="Pp">The <code class="Dv">protocol</code> is + <code class="Dv">MOUSE_PROTO_PS2</code> at the operation level zero and + two. <code class="Dv">MOUSE_PROTO_SYSMOUSE</code> at the operation level + one.</p> + <p class="Pp">The <code class="Dv">rate</code> 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.</p> + <p class="Pp">The <code class="Dv">resolution</code> of the pointing device + must be one of <code class="Dv">MOUSE_RES_XXX</code> constants or a + positive value. The greater the value is, the finer resolution the mouse + will select. Actual resolution selected by the + <code class="Dv">MOUSE_RES_XXX</code> constant varies according to the + model of mouse. Typical resolutions are:</p> + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="MOUSE_RES_LOW"><a class="permalink" href="#MOUSE_RES_LOW"><code class="Dv">MOUSE_RES_LOW</code></a></dt> + <dd>25 ppi</dd> + <dt id="MOUSE_RES_MEDIUMLOW"><a class="permalink" href="#MOUSE_RES_MEDIUMLOW"><code class="Dv">MOUSE_RES_MEDIUMLOW</code></a></dt> + <dd>50 ppi</dd> + <dt id="MOUSE_RES_MEDIUMHIGH"><a class="permalink" href="#MOUSE_RES_MEDIUMHIGH"><code class="Dv">MOUSE_RES_MEDIUMHIGH</code></a></dt> + <dd>100 ppi</dd> + <dt id="MOUSE_RES_HIGH"><a class="permalink" href="#MOUSE_RES_HIGH"><code class="Dv">MOUSE_RES_HIGH</code></a></dt> + <dd>200 ppi</dd> + </dl> + <p class="Pp">The <code class="Dv">accelfactor</code> field holds a value to + control acceleration feature (see + <a class="Sx" href="#Acceleration">Acceleration</a>). It must be zero or + greater. If it is zero, acceleration is disabled.</p> + <p class="Pp">The <code class="Dv">packetsize</code> field specifies the + length of the data packet. It depends on the operation level and the + model of the pointing device.</p> + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="level"><a class="permalink" href="#level"><i class="Em">level + 0</i></a></dt> + <dd>3 bytes</dd> + <dt id="level~2"><a class="permalink" href="#level~2"><i class="Em">level + 1</i></a></dt> + <dd>8 bytes</dd> + <dt id="level~3"><a class="permalink" href="#level~3"><i class="Em">level + 2</i></a></dt> + <dd>Depends on the model of the device</dd> + </dl> + <p class="Pp">The array <code class="Dv">syncmask</code> holds a bit mask + and pattern to detect the first byte of the data packet. + <code class="Dv">syncmask[0]</code> is the bit mask to be ANDed with a + byte. If the result is equal to <code class="Dv">syncmask[1]</code>, 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.</p> + <p class="Pp"></p> + </dd> + <dt id="MOUSE_SETMODE"><a class="permalink" href="#MOUSE_SETMODE"><code class="Dv">MOUSE_SETMODE</code></a> + <var class="Ar">mousemode_t *mode</var></dt> + <dd>The command changes the current operation parameters of the mouse driver + as specified in <var class="Ar">mode</var>. Only + <code class="Dv">rate</code>, <code class="Dv">resolution</code>, + <code class="Dv">level</code> and <code class="Dv">accelfactor</code> may + be modifiable. Setting values in the other field does not generate error + and has no effect. + <p class="Pp">If you do not want to change the current setting of a field, + put -1 there. You may also put zero in + <code class="Dv">resolution</code> and <code class="Dv">rate</code>, and + the default value for the fields will be selected.</p> + <p class="Pp"></p> + </dd> + <dt id="MOUSE_READDATA"><a class="permalink" href="#MOUSE_READDATA"><code class="Dv">MOUSE_READDATA</code></a> + <var class="Ar">mousedata_t *data</var></dt> + <dd style="width: auto;"> </dd> + <dt id="MOUSE_READSTATE"><a class="permalink" href="#MOUSE_READSTATE"><code class="Dv">MOUSE_READSTATE</code></a> + <var class="Ar">mousedata_t *state</var></dt> + <dd>These commands are not currently supported by the + <code class="Nm">psm</code> driver. + <p class="Pp"></p> + </dd> + <dt id="MOUSE_GETSTATUS"><a class="permalink" href="#MOUSE_GETSTATUS"><code class="Dv">MOUSE_GETSTATUS</code></a> + <var class="Ar">mousestatus_t *status</var></dt> + <dd>The command returns the current state of buttons and movement counts as + described in <a class="Xr">mouse(4)</a>.</dd> +</dl> +</section> +<section class="Sh"> +<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> +<dl class="Bl-tag Bl-compact"> + <dt><span class="Pa">/dev/psm0</span></dt> + <dd>`non-blocking' device node</dd> + <dt><span class="Pa">/dev/bpsm0</span></dt> + <dd>`blocking' device node</dd> +</dl> +</section> +<section class="Sh"> +<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> +<p class="Pp">In order to install the <code class="Nm">psm</code> driver, you + need to add</p> +<p class="Pp"></p> +<div class="Bd Bd-indent"><code class="Li">device atkbdc</code></div> +<div class="Bd Bd-indent"><code class="Li">device psm</code></div> +<p class="Pp">to your kernel configuration file, and put the following lines to + <span class="Pa">/boot/device.hints</span>.</p> +<p class="Pp"></p> +<div class="Bd + Bd-indent"><code class="Li">hint.atkbdc.0.at="isa"</code></div> +<div class="Bd + Bd-indent"><code class="Li">hint.atkbdc.0.port="0x060"</code></div> +<div class="Bd + Bd-indent"><code class="Li">hint.psm.0.at="atkbdc"</code></div> +<div class="Bd + Bd-indent"><code class="Li">hint.psm.0.irq="12"</code></div> +<p class="Pp">If you add the following statement to + <span class="Pa">/boot/device.hints</span>,</p> +<p class="Pp"></p> +<div class="Bd + Bd-indent"><code class="Li">hint.psm.0.flags="0x2000"</code></div> +<p class="Pp">you will add the optional code to stimulate the pointing device + after the `resume' event.</p> +<p class="Pp"></p> +<div class="Bd + Bd-indent"><code class="Li">hint.psm.0.flags="0x24"</code></div> +<p class="Pp">The above line will set the device resolution high (4) and the + acceleration factor to 2.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1> +<p class="Pp">At debug level 0, little information is logged except for the + following line during boot process:</p> +<div class="Bd Pp Bd-indent Li"> +<pre>psm0: device ID X</pre> +</div> +<p class="Pp">where <var class="Fa">X</var> the device ID code returned by the + found pointing device. See <code class="Dv">MOUSE_GETINFO</code> for known + IDs.</p> +<p class="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 + <a class="Xr">syslogd(8)</a>).</p> +<div class="Bd Pp Bd-indent Li"> +<pre>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</pre> +</div> +<p class="Pp">The first line shows the command byte value of the keyboard + controller just before the auxiliary port is probed. It usually is 40, 45, + 47 or 65, depending on how the motherboard BIOS initialized the keyboard + controller upon power-up.</p> +<p class="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.</p> +<p class="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.</p> +<p class="Pp">The seventh line shows the current hardware settings. These bytes + are formatted as follows:</p> +<p class="Pp"></p> +<dl class="Bl-tag Bl-compact"> + <dt>Byte 1</dt> + <dd> + <dl class="Bl-tag Bl-compact"> + <dt>bit 7</dt> + <dd>Reserved.</dd> + <dt>bit 6</dt> + <dd>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 + <code class="Nm">psm</code> driver puts the device in the stream + mode.</dd> + <dt>bit 5</dt> + <dd>Set if the pointing device is currently enabled. Otherwise zero.</dd> + <dt>bit 4</dt> + <dd>0 - 1:1 scaling, 1 - 2:1 scaling. 1:1 scaling is the default.</dd> + <dt>bit 3</dt> + <dd>Reserved.</dd> + <dt>bit 2</dt> + <dd>Left button status; set if pressed.</dd> + <dt>bit 1</dt> + <dd>Middle button status; set if pressed.</dd> + <dt>bit 0</dt> + <dd>Right button status; set if pressed.</dd> + </dl> + </dd> + <dt>Byte 2</dt> + <dd> + <dl class="Bl-tag Bl-compact"> + <dt>bit 7</dt> + <dd>Reserved.</dd> + <dt>bit 6..0</dt> + <dd>Resolution code: zero through three. Actual resolution for the + resolution code varies from one device to another.</dd> + </dl> + </dd> + <dt>Byte 3</dt> + <dd>The status report rate (reports/sec) at which the device will send + movement report to the host computer.</dd> +</dl> +<p class="Pp">Note that the pointing device will not be enabled until the + <code class="Nm">psm</code> driver is opened by the user program.</p> +<p class="Pp">The rest of the lines show the device ID code, the number of + detected buttons and internal variables.</p> +<p class="Pp">At debug level 2, much more detailed information is logged.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE + ALSO</a></h1> +<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">syslog(3)</a>, + <a class="Xr">atkbdc(4)</a>, <a class="Xr">mouse(4)</a>, + <a class="Xr">sysmouse(4)</a>, <a class="Xr">moused(8)</a>, + <a class="Xr">syslogd(8)</a></p> +<p class="Pp"><cite class="Rs"><span class="RsT">Synaptics TouchPad Interfacing + Guide</span>, + <a class="RsU" href="http://www.synaptics.com/">http://www.synaptics.com/</a>.</cite></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> +<p class="Pp">The <code class="Nm">psm</code> driver is based on the work done + by quite a number of people, including <span class="An">Eric + Forsberg</span>, <span class="An">Sandi Donno</span>, <span class="An">Rick + Macklem</span>, <span class="An">Andrew Herbert</span>, + <span class="An">Charles Hannum</span>, <span class="An">Shoji Yuen</span> + and <span class="An">Kazutaka Yokota</span> to name the few.</p> +<p class="Pp">This manual page was written by <span class="An">Kazutaka + Yokota</span> + <<a class="Mt" href="mailto:yokota@FreeBSD.org">yokota@FreeBSD.org</a>>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> +<p class="Pp">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.</p> +<p class="Pp" id="INITAFTERSUSPEND">It is reported that ALPS GlidePoint, + Synaptics Touchpad, IBM/Lenovo TrackPoint, and Interlink VersaPad require + <a class="permalink" href="#INITAFTERSUSPEND"><i class="Em">INITAFTERSUSPEND</i></a> + flag in order to recover from suspended state. This flag is automatically + set when one of these devices is detected by the <code class="Nm">psm</code> + driver.</p> +<p class="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.</p> +<p class="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 <i>XFree86</i> 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 <a class="Xr">moused(8)</a>. + Clicking any button without moving the mouse may also work.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> +<p class="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.</p> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">June 2, 2020</td> + <td class="foot-os">FreeBSD 15.0</td> + </tr> +</table> |
