From aeb@cwi.nl  Fri Aug  3 10:16:54 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id KAA03296
	for <rubini@morgana>; Fri, 3 Aug 2001 10:16:54 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Fri, 03 Aug 2001 10:16:54 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id NAA12404 for <rubini@pop.systemy.it>; Thu, 2 Aug 2001 13:57:41 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id LAA15417
	for <rubini@systemy.it>; Thu, 2 Aug 2001 11:57:40 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 5CD8A197F0
	for <rubini@linux.it>; Thu,  2 Aug 2001 13:57:35 +0200 (CEST)
Received: from hera.cwi.nl (hera.cwi.nl [192.16.191.8])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id MAA29536
	for <rubini@vision.unipv.it>; Thu, 2 Aug 2001 12:21:26 +0200
Received: from vlet.cwi.nl (vlet.cwi.nl [192.16.191.67]) by hera.cwi.nl with ESMTP
	id NAA22247 for ; Thu, 2 Aug 2001 13:55:51 +0200 (MEST)
From: Andries.Brouwer@cwi.nl
Received: (from aeb@localhost)
	by vlet.cwi.nl (8.8.6/8.9.3) id LAA89271;
	Thu, 2 Aug 2001 11:55:51 GMT
Date: Thu, 2 Aug 2001 11:55:51 GMT
Message-Id: <200108021155.LAA89271@vlet.cwi.nl>
To: alan@lxorguk.ukuu.org.uk, garloff@suse.de, torvalds@transmeta.com
Subject: Re: [PATCH] make psaux reconnect adjustable
Cc: brent@linux1.org, linux-kernel@vger.kernel.org, mantel@suse.de,
        rubini@vision.unipv.it
X-UIDL: mH&!!69L!!)/N!!9H%!!
Status: RO

    From: Kurt Garloff <garloff@suse.de>

    working on notebooks I got used to the touchpads.
    Now, a lot of notebooks have a Synaptics touchpad.
    It offers a few additional features, such as tossing or the third mouse
    button (by a short click in the corner) ...

    Unfortunately, the synps2 generates nonstandard codes when in
    extended mode, amongst which the reconnect (170) token.
    The kernel (since 2.2.15) does interpret it as such and empties the queue.

    This seems to appropriate for a real plug event. For a synps2, it's not,
    but makes your mouse dead for a second. Instead the data should just
    be passed to userspace (gpm).

    So I made the behaviour switchable via a sysctl.=20

Hmm. I don't think there exists a "reconnect token" AA.
At power up or after a reset (FF) the mouse sends AA
(self test passed) followed by 00 (the ID: I am a PS/2 mouse).
During operation the value AA is entirely legal and has no special
significance.

Moreover, it seems that the specs say that the host should not react
to the AA but wait for the 00. The expected protocol at power up is:
Mouse: AA 00. Host: F4 (enable). Mouse: FA (ack).
Afterwards the host will send F3 to set the sample rate
(or to initialize a wheelmouse).

A quote [1]:
"At power-on, the PS/2 device performs a self-test and calibration,
then transmits the completion code $AA and ID code $00.  If the
device fails its self-test, it transmits error code $FC and ID code $00.
This processing also occurs when a software Reset ($FF) command is received.
The host should not attempt to send commands to the device until
the calibration/self-test is complete.
Power-on self-test and calibration takes 300­1000ms."

The reaction to FF (reset) from the host is an immediate FA (ack)
followed half a second later by AA 00.

Therefore, I think the kernel mouse handling was broken when this
strange AUX_RECONNECT stuff was introduced. It caused a tiny trickle
of complaints.
Bug 1: AA is not necessarily anything special
Bug 2: the sequence AA 00 from the mouse should not be interrupted

I don't think that it is a good idea to start building infrastructure
around it. By default this AUX_RECONNECT should be disabled, since
it is just plain wrong. Then the Synaptics touchpad will work.
In other words, no sysctl but #if 0 ... #endif.

For people who unplug and replug their PS/2 mouse with running
machine, or who use a KVM switch (I think it was only Brent Verner
who asked for this code): if what I say is correct you should
always see 00 following the AA. So, there may exist a more cautious
patch that will bite fewer people and does not react to AA but to
the sequence AA 00.

Andries

[1] See http://www.synaptics.com/decaf/utilities/tp-intf2-4.PDF

From garloff@garloff.de  Fri Aug  3 10:17:11 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id KAA03455
	for <rubini@morgana>; Fri, 3 Aug 2001 10:17:11 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Fri, 03 Aug 2001 10:17:11 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id SAA25088 for <rubini@pop.systemy.it>; Thu, 2 Aug 2001 18:20:32 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id QAA18370
	for <rubini@systemy.it>; Thu, 2 Aug 2001 16:20:29 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 526AF197FD
	for <rubini@linux.it>; Thu,  2 Aug 2001 18:20:28 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id QAA31115
	for <rubini@vision.unipv.it>; Thu, 2 Aug 2001 16:44:17 +0200
Received: from pckurt.casa-etp.nl (root@pckurt.casa-etp.nl [192.168.157.2])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id SAA28559;
	Thu, 2 Aug 2001 18:20:24 +0200
Received: (from garloff@localhost)
	by pckurt.casa-etp.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) id SAA15174;
	Thu, 2 Aug 2001 18:18:34 +0200
Date: Thu, 2 Aug 2001 18:18:34 +0200
From: Kurt Garloff <garloff@suse.de>
To: Andries.Brouwer@cwi.nl
Cc: alan@lxorguk.ukuu.org.uk, brent@linux1.org, linux-kernel@vger.kernel.org,
        mantel@suse.de, rubini@vision.unipv.it, torvalds@transmeta.com
Subject: Re: [PATCH] make psaux reconnect adjustable
Message-ID: <20010802181834.B14708@pckurt.casa-etp.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>, Andries.Brouwer@cwi.nl,
	alan@lxorguk.ukuu.org.uk, brent@linux1.org,
	linux-kernel@vger.kernel.org, mantel@suse.de,
	rubini@vision.unipv.it, torvalds@transmeta.com
References: <200108021602.QAA113498@vlet.cwi.nl>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="8GpibOaaTibBMecb"
Content-Disposition: inline
In-Reply-To: <200108021602.QAA113498@vlet.cwi.nl>
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7-SMP i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: D\h"!`_h!!Sci!!p3S"!
Status: RO


--8GpibOaaTibBMecb
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Aug 02, 2001 at 04:02:38PM +0000, Andries Brouwer wrote:
> From: Alan Cox <alan@lxorguk.ukuu.org.uk>:
>=20
> > 2.2 has had the sysctl for ages, and it defaults to off

I would definitely not object to defaulting to off.

> Not precisely - it is a boot parameter "psaux-reconnect".
> That is better than a sysctl.

Why should that be better than a sysctl? Boot parameters are ugly. You=20
need to reboot in order to change them ...

Your other mail implies that we can fix the problem without manual
intervention by parsing AA 00 instead of just AA. If it's true, I'd=20
consider that the best solution.=20
Otherwise, I'd like my patch to be applied maybe with a changed default.

Regards,
--=20
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, DE                                SCSI, Security

--8GpibOaaTibBMecb
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7aX1ZxmLh6hyYd04RApT9AKDHFa2hTt8CIkrzSQ2hLGjNUBBsugCgpXHZ
6yFa+mIM8HhuiH2NRCRhd04=
=5vOe
-----END PGP SIGNATURE-----

--8GpibOaaTibBMecb--

From aeb@cwi.nl  Fri Aug  3 10:17:13 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id KAA03487
	for <rubini@morgana>; Fri, 3 Aug 2001 10:17:12 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Fri, 03 Aug 2001 10:17:12 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id TAA26954 for <rubini@pop.systemy.it>; Thu, 2 Aug 2001 19:27:15 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id RAA18729
	for <rubini@systemy.it>; Thu, 2 Aug 2001 17:27:12 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 18E5119805
	for <rubini@linux.it>; Thu,  2 Aug 2001 19:27:11 +0200 (CEST)
Received: from hera.cwi.nl (hera.cwi.nl [192.16.191.8])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id RAA31523
	for <rubini@vision.unipv.it>; Thu, 2 Aug 2001 17:51:00 +0200
Received: from vlet.cwi.nl (vlet.cwi.nl [192.16.191.67]) by hera.cwi.nl with ESMTP
	id TAA28832 for ; Thu, 2 Aug 2001 19:27:08 +0200 (MEST)
From: Andries.Brouwer@cwi.nl
Received: (from aeb@localhost)
	by vlet.cwi.nl (8.8.6/8.9.3) id RAA113816;
	Thu, 2 Aug 2001 17:27:07 GMT
Date: Thu, 2 Aug 2001 17:27:07 GMT
Message-Id: <200108021727.RAA113816@vlet.cwi.nl>
To: Andries.Brouwer@cwi.nl, garloff@suse.de
Subject: Re: [PATCH] make psaux reconnect adjustable
Cc: alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org, mantel@suse.de,
        rubini@vision.unipv.it, torvalds@transmeta.com
X-UIDL: 8El!!!\_!![&!#!ZU<"!
Status: RO

    From: Kurt Garloff <garloff@suse.de>

    > Not precisely - it is a boot parameter "psaux-reconnect".
    > That is better than a sysctl.

    Why should that be better than a sysctl? Boot parameters are ugly. You
    need to reboot in order to change them ...

Of course I hope that we'll handle this correctly at some point,
without any options or parameters. In my eyes a sysctl is heavier
infrastructure than a boot parameter, so I prefer the latter
when a temporary fix is needed.

    Your other mail implies that we can fix the problem without manual
    intervention by parsing AA 00 instead of just AA. If it's true, I'd=20
    consider that the best solution.=20

Maybe precisely one person reported this, and his address
now bounces. If there exist people who need this "psaux-reconnect"
they can report on the codes they see. Note that just like AA is
a perfectly normal code, also the sequence AA 00 is perfectly
normal. Testing for that only diminishes the probability of
getting it by accident.

Instead of adding boot parameters or sysctls or heuristics,
probably we should just transfer the codes seen to user space,
e.g. to gpm.  Then it is up to gpm to recognize an AA 00 sequence
and decide whether that is something special.

Andries


From alan@lxorguk.ukuu.org.uk  Fri Aug  3 10:17:13 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id KAA03497
	for <rubini@morgana>; Fri, 3 Aug 2001 10:17:13 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Fri, 03 Aug 2001 10:17:13 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id TAA27204 for <rubini@pop.systemy.it>; Thu, 2 Aug 2001 19:34:02 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id RAA18757
	for <rubini@systemy.it>; Thu, 2 Aug 2001 17:33:59 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 7E3B219805
	for <rubini@linux.it>; Thu,  2 Aug 2001 19:33:59 +0200 (CEST)
Received: from the-village.bc.nu (router-100M.swansea.linux.org.uk [194.168.151.17])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id RAA31555
	for <rubini@vision.unipv.it>; Thu, 2 Aug 2001 17:57:46 +0200
Received: from alan by the-village.bc.nu with local (Exim 3.22 #1)
	id 15SMN6-00015y-00; Thu, 02 Aug 2001 18:34:56 +0100
Subject: Re: [PATCH] make psaux reconnect adjustable
To: Andries.Brouwer@cwi.nl
Date: Thu, 2 Aug 2001 18:34:56 +0100 (BST)
Cc: garloff@suse.de, alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org,
        mantel@suse.de, rubini@vision.unipv.it, torvalds@transmeta.com
In-Reply-To: <no.id> from "Andries.Brouwer@cwi.nl" at Aug 02, 2001 05:27:07 PM
X-Mailer: ELM [version 2.5 PL5]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E15SMN6-00015y-00@the-village.bc.nu>
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
X-UIDL: ,k9!!~k2!!E1k!!Ybi"!
Status: RO

> Of course I hope that we'll handle this correctly at some point,
> without any options or parameters. In my eyes a sysctl is heavier
> infrastructure than a boot parameter, so I prefer the latter
> when a temporary fix is needed.

The input device infrastructure pending for 2.5 already handles all of
these issues

From garloff@garloff.de  Thu Aug  2 10:27:44 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id KAA28565
	for <rubini@morgana>; Thu, 2 Aug 2001 10:27:43 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Thu, 02 Aug 2001 10:27:43 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id EAA25642 for <rubini@pop.systemy.it>; Thu, 2 Aug 2001 04:23:33 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id CAA11977
	for <rubini@systemy.it>; Thu, 2 Aug 2001 02:23:32 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 09411197E8
	for <rubini@linux.it>; Thu,  2 Aug 2001 04:23:29 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id CAA25998
	for <rubini@vision.unipv.it>; Thu, 2 Aug 2001 02:47:24 +0200
Received: from pckurt.casa-etp.nl (root@pckurt.casa-etp.nl [192.168.157.2])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id EAA18388;
	Thu, 2 Aug 2001 04:23:24 +0200
Received: (from garloff@localhost)
	by pckurt.casa-etp.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) id EAA15231;
	Thu, 2 Aug 2001 04:21:00 +0200
Date: Thu, 2 Aug 2001 04:21:00 +0200
From: Kurt Garloff <garloff@suse.de>
To: Linus Torvalds <torvalds@transmeta.com>,
        Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Alessandro Rubini <rubini@vision.unipv.it>, Hubert Mantel <mantel@suse.de>,
        Linux kernel list <linux-kernel@vger.kernel.org>
Subject: [PATCH] make psaux reconnect adjustable
Message-ID: <20010802042100.B14010@pckurt.casa-etp.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>,
	Linus Torvalds <torvalds@transmeta.com>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Alessandro Rubini <rubini@ipvvis.unipv.it>,
	Hubert Mantel <mantel@suse.de>,
	Linux kernel list <linux-kernel@vger.kernel.org>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="69pVuxX8awAiJ7fD"
Content-Disposition: inline
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7-SMP i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: 8JL"!c8N!!e'[!!jN;"!
Status: RO


--69pVuxX8awAiJ7fD
Content-Type: multipart/mixed; boundary="i9LlY+UWpKt15+FH"
Content-Disposition: inline


--i9LlY+UWpKt15+FH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Linus Alan,

working on notebooks I got used to the touchpads.
Now, a lot of notebooks have a Synaptics touchpad.
It offers a few additional features, such as tossing or the third mouse
button (by a short click in the corner) ...

gpm -t synps2 does support those additional features and via the -R epeater
mode you also get it under X11.

Unfortunately, the synps2 generates nonstandard codes when in extended mode,
amongst which the reconnect (170) token.
The kernel (since 2.2.15) does interpret it as such and empties the queue.

This seems to appropriate for a real plug event. For a synps2, it's not, but
makes your mouse dead for a second. Instead the data should just be passed
to userspace (gpm).

So I made the behaviour switchable via a sysctl.=20
/proc/sys/dev/ps2/psmouse_reconnect (defaults to 1 =3D the interpret behavi=
our)
Being at it, I also made the kbd error and unknown scancode reporting
switchable. (It used to be ifdefs.)

Please apply attached patch (against 2.4.7).

Allesandro, should I submit a patch for gpm to automatically handle this for
synps2 in case the kernel patch gets accepted?

Regards,
--=20
Kurt Garloff                   <kurt@garloff.de>         [Eindhoven, NL]
Physics: Plasma simulations  <K.Garloff@Phys.TUE.NL>  [TU Eindhoven, NL]
Linux: SCSI, Security          <garloff@suse.de>    [SuSE Nuernberg, DE]
 (See mail header or public key servers for PGP2 and GPG public keys.)

--i9LlY+UWpKt15+FH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="247-psaux-reconnect-sysctl.diff"
Content-Transfer-Encoding: quoted-printable

--- linux/include/linux/sysctl.h.orig	Tue Jul 31 23:49:42 2001
+++ linux/include/linux/sysctl.h	Thu Aug  2 03:41:34 2001
@@ -594,7 +594,8 @@
 	DEV_HWMON=3D2,
 	DEV_PARPORT=3D3,
 	DEV_RAID=3D4,
-	DEV_MAC_HID=3D5
+	DEV_MAC_HID=3D5,
+	DEV_PSAUX=3D6,
 };
=20
 /* /proc/sys/dev/cdrom */
@@ -653,6 +654,13 @@
 	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=3D4,
 	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=3D5,
 	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=3D6
+};
+
+/* /proc/sys/dev/psaux */
+enum {
+	DEV_PSMOUSE_RECONNECT=3D1,
+	DEV_KBD_REPORT_UNKN=3D2,
+	DEV_KBD_REPORT_TO=3D3,
 };
=20
 #ifdef __KERNEL__
--- linux/drivers/char/pc_keyb.c.orig	Fri Apr  6 19:42:55 2001
+++ linux/drivers/char/pc_keyb.c	Thu Aug  2 04:01:15 2001
@@ -92,8 +92,83 @@
 #define AUX_INTS_ON  (KBD_MODE_KCC | KBD_MODE_SYS | KBD_MODE_MOUSE_INT | K=
BD_MODE_KBD_INT)
=20
 #define MAX_RETRIES	60		/* some aux operations take long time*/
+
 #endif /* CONFIG_PSMOUSE */
=20
+/* We want to be able to handle the psmouse reconnect token; unfortunately=
 the
+ * Synaptics touchpads (and probably others too) use it for their extented
+ * functionality and produce them in extended mode (as set by gpm -t synps=
2).
+ * So we make this adjustable via a sysctl.  garloff@suse.de, 2001-08-01 */
+
+#ifdef CONFIG_SYSCTL
+#include <linux/sysctl.h>
+#ifdef CONFIG_PSMOUSE
+int sysctl_psmouse_reconnect =3D 1;
+#endif
+int sysctl_kbd_report_unkn =3D 0;
+int sysctl_kbd_report_to =3D 0;
+
+static int psaux_sysctl_handler (ctl_table *ctl, int write, struct file *f=
ilp,
+				 void *buffer, size_t *lenp)
+{
+	int *valp =3D ctl->data;
+	int ret =3D proc_dointvec(ctl, write, filp, buffer, lenp);=20
+	if (write) {
+		if (*valp)
+			*valp =3D 1;
+	}
+	return ret;
+}
+		=09
+
+ctl_table psaux_table[] =3D {
+#ifdef CONFIG_PSMOUSE  =20
+        {DEV_PSMOUSE_RECONNECT, "psmouse_reconnect", &sysctl_psmouse_recon=
nect,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+#endif  =20
+	{DEV_KBD_REPORT_UNKN, "kbd_report_unknown", &sysctl_kbd_report_unkn,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+        {DEV_KBD_REPORT_TO, "kbd_report_timeout", &sysctl_kbd_report_to,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+	{0}
+};
+
+ctl_table psaux_psaux_table[] =3D {
+        {DEV_CDROM, "ps2", NULL, 0, 0555, psaux_table},
+        {0}
+        };
+
+ctl_table psaux_root_table[] =3D {
+#ifdef CONFIG_PROC_FS
+        {CTL_DEV, "dev", NULL, 0, 0555, psaux_psaux_table},
+#endif /* CONFIG_PROC_FS */
+        {0}
+        };
+static struct ctl_table_header *psaux_sysctl_header;
+
+static void psaux_sysctl_register (void)
+{
+	static int initialized;
+	if (initialized) return;
+=09
+	psaux_sysctl_header =3D register_sysctl_table (psaux_root_table, 1);
+	/*psaux_root_table->child->de->owner =3D THIS_MODULE;*/
+	initialized++;
+}
+
+/*
+static void psaux_sysctl_unregister (void)
+{
+	if (psaux_sysctl_header)
+		unregister_sysctl_table (psaux_sysctl_header);
+}
+ */
+#else /* CONFIG_SYSCTL */
+#define sysctl_psmouse_reconnect 1
+#define sysctl_kbd_report_unkn 0
+#define sysctl_kbd_report_to 0
+#endif /* CONFIG_SYSCTL */
+
 /*
  * Wait for keyboard controller input buffer to drain.
  *
@@ -123,9 +198,8 @@
 		mdelay(1);
 		timeout--;
 	} while (timeout);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "Keyboard timed out[1]\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "Keyboard timed out[1]\n");
 }
=20
 /*
@@ -320,10 +394,8 @@
 		  *keycode =3D E1_PAUSE;
 		  prev_scancode =3D 0;
 	      } else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown e1 escape sequence\n");
-#endif
 		  prev_scancode =3D 0;
 		  return 0;
 	      }
@@ -348,11 +420,9 @@
 	      if (e0_keys[scancode])
 		*keycode =3D e0_keys[scancode];
 	      else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown scancode e0 %02x\n",
 			   scancode);
-#endif
 		  return 0;
 	      }
 	  }
@@ -370,11 +440,9 @@
 	  *keycode =3D high_keys[scancode - SC_LIM];
=20
 	  if (!*keycode) {
-	      if (!raw_mode) {
-#ifdef KBD_REPORT_UNKN
+	      if (!raw_mode && sysctl_kbd_report_unkn) {
 		  printk(KERN_INFO "keyboard: unrecognized scancode (%02x)"
 			 " - ignored\n", scancode);
-#endif
 	      }
 	      return 0;
 	  }
@@ -404,12 +472,15 @@
 		mouse_reply_expected =3D 0;
 	}
 	else if(scancode =3D=3D AUX_RECONNECT){
-		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
-		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
-		return;
+		if (sysctl_psmouse_reconnect) {
+			queue->head =3D queue->tail =3D 0;  /* Flush input queue */
+			__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
+			return;
+		}
 	}
+	else
+		add_mouse_randomness(scancode);
=20
-	add_mouse_randomness(scancode);
 	if (aux_count) {
 		int head =3D queue->head;
=20
@@ -511,17 +582,14 @@
 			if (resend)
 				break;
 			mdelay(1);
-			if (!--timeout) {
-#ifdef KBD_REPORT_TIMEOUTS
+			if (!--timeout && sysctl_kbd_report_to) {
 				printk(KERN_WARNING "keyboard: Timeout - AT keyboard not present?\n");
-#endif
 				return 0;
 			}
 		}
 	} while (retries-- > 0);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
 	return 0;
 }
=20
@@ -751,6 +819,7 @@
=20
 	/* Ok, finally allocate the IRQ, and off we go.. */
 	kbd_request_irq(keyboard_interrupt);
+	psaux_sysctl_register ();
 }
=20
 #if defined CONFIG_PSMOUSE

--i9LlY+UWpKt15+FH--

--69pVuxX8awAiJ7fD
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7aLkLxmLh6hyYd04RAtTfAJ0Y5pDpKz/cMablMNOe7Et6KOIYXQCg0hQ2
VP6sTljkegsAQX4fy5vGwzI=
=8pPh
-----END PGP SIGNATURE-----

--69pVuxX8awAiJ7fD--

From garloff@garloff.de  Wed Aug 15 15:40:12 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA12797
	for <rubini@morgana>; Wed, 15 Aug 2001 15:40:11 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:40:11 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id LAA04351 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 11:57:18 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id JAA25466
	for <rubini@systemy.it>; Tue, 14 Aug 2001 09:57:18 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 84F3C197E6
	for <rubini@linux.it>; Tue, 14 Aug 2001 11:08:53 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id KAA29979
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 10:18:46 +0200
Received: from garloff.etpnet.phys.tue.nl (gum01m.etpnet.phys.tue.nl [192.168.84.65])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id LAA30279;
	Tue, 14 Aug 2001 11:57:05 +0200
Received: (from garloff@localhost)
	by garloff.etpnet.phys.tue.nl (8.11.3/8.11.3/SuSE Linux 8.11.1-0.5) id f7E9v1S02420;
	Tue, 14 Aug 2001 11:57:01 +0200
Date: Tue, 14 Aug 2001 11:57:01 +0200
From: Kurt Garloff <garloff@suse.de>
To: Andries.Brouwer@cwi.nl
Cc: alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org, mantel@suse.de,
        rubini@vision.unipv.it, torvalds@transmeta.com
Subject: Re: [PATCH] make psaux reconnect adjustable
Message-ID: <20010814115701.A1952@gum01m.etpnet.phys.tue.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>, Andries.Brouwer@cwi.nl,
	alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org,
	mantel@suse.de, rubini@vision.unipv.it, torvalds@transmeta.com
References: <200108021727.RAA113816@vlet.cwi.nl>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="jho1yZJdad60DJr+"
Content-Disposition: inline
In-Reply-To: <200108021727.RAA113816@vlet.cwi.nl>
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7 i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: 481f3d3391eba7ce48596873968fe7df
Status: RO


--jho1yZJdad60DJr+
Content-Type: multipart/mixed; boundary="OgqxwSJOaUobr8KG"
Content-Disposition: inline


--OgqxwSJOaUobr8KG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Andries,

On Thu, Aug 02, 2001 at 05:27:07PM +0000, Andries Brouwer wrote:
>     Your other mail implies that we can fix the problem without manual
>     intervention by parsing AA 00 instead of just AA. If it's true, I'd=
=3D20
>     consider that the best solution.=3D20
>=20
> Maybe precisely one person reported this, and his address
> now bounces. If there exist people who need this "psaux-reconnect"
> they can report on the codes they see. Note that just like AA is
> a perfectly normal code, also the sequence AA 00 is perfectly
> normal. Testing for that only diminishes the probability of
> getting it by accident.

I can confirm what you suggest: My mouse (Logitech wheel USB/PS2) sends
indeed AA 00.=20
So, I extended my patch (which you will dislike even more, I know, as you're
against sysctls unlike me):
psmouse_reconnect =3D 0: Do nothing (just pass all to userspace)
psmouse_reconnect =3D 1: Flush Q & ping mouse on AA 00 (default)
psmouse_reconnect =3D 2: Flush Q & ping mouse on AA (old behaviour)

> Instead of adding boot parameters or sysctls or heuristics,
> probably we should just transfer the codes seen to user space,
> e.g. to gpm.  Then it is up to gpm to recognize an AA 00 sequence
> and decide whether that is something special.

With reconnect 1 or 2: After reconnecting, mouse behaves strange (jumping
			around the screen)
With reconnect 0:      Mouse is dead

In both cases restarting gpm gets the mouse back to work again.
It seems the imps2 driver does some initialization to the mouse.

If I use the plain ps2 driver, then finally, I see the benefit of the
reconnect code in the kernel:
With reconnect =3D 1 or 2: It works after replugging
With reconnect =3D 0:      Mouse is dead after replugging

In the latter case restarting gpm helps.

Patch is attached.
It adds the sysctls as the last patch did, but now the psmouse_reconnect has
3 possible values. Also, I added a printk, so the kernel logs detected mouse
reconnect events.

Linus, Alan, I'd like to have your input:

Do you like the patch as is? Should I remove the sysctls and just look for
AA 00 (as Andries may prefer)? Shouldn't the AA 00 be passed to userspace
as well in any case (to allow e.g. the imps2 driver to do reinitialization)?

Regards,
--=20
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, DE                                SCSI, Security

--OgqxwSJOaUobr8KG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="247-psaux-reconnect-sysctl2.diff"
Content-Transfer-Encoding: quoted-printable

diff -uNr linux-2.4.7.kurt-1/drivers/char/pc_keyb.c linux-2.4.7.kurt-1-psau=
x/drivers/char/pc_keyb.c
--- linux-2.4.7.kurt-1/drivers/char/pc_keyb.c	Tue Jul 24 18:42:36 2001
+++ linux-2.4.7.kurt-1-psaux/drivers/char/pc_keyb.c	Tue Aug 14 10:44:50 2001
@@ -81,8 +81,9 @@
=20
 static int __init psaux_init(void);
=20
-#define AUX_RECONNECT 170 /* scancode when ps2 device is plugged (back) in=
 */
-=20
+#define AUX_RECONNECT1 170 /* scancode when ps2 device is plugged (back) i=
n */
+#define AUX_RECONNECT2 0   /* scancode when ps2 device is plugged (back) i=
n */
+
 static struct aux_queue *queue;	/* Mouse data buffer. */
 static int aux_count;
 /* used when we send commands to the mouse that expect an ACK. */
@@ -92,8 +93,83 @@
 #define AUX_INTS_ON  (KBD_MODE_KCC | KBD_MODE_SYS | KBD_MODE_MOUSE_INT | K=
BD_MODE_KBD_INT)
=20
 #define MAX_RETRIES	60		/* some aux operations take long time*/
+
 #endif /* CONFIG_PSMOUSE */
=20
+/* We want to be able to handle the psmouse reconnect token; unfortunately=
 the
+ * Synaptics touchpads (and probably others too) use it for their extented
+ * functionality and produce them in extended mode (as set by gpm -t synps=
2).
+ * So we make this adjustable via a sysctl.  garloff@suse.de, 2001-08-01 */
+
+#ifdef CONFIG_SYSCTL
+#include <linux/sysctl.h>
+#ifdef CONFIG_PSMOUSE
+int sysctl_psmouse_reconnect =3D 1;
+#endif
+int sysctl_kbd_report_unkn =3D 0;
+int sysctl_kbd_report_to =3D 0;
+
+static int psaux_sysctl_handler (ctl_table *ctl, int write, struct file *f=
ilp,
+				 void *buffer, size_t *lenp)
+{
+	int *valp =3D ctl->data;
+	int ret =3D proc_dointvec(ctl, write, filp, buffer, lenp);=20
+	if (write) {
+		if (*valp > 2)
+			*valp =3D 2;
+	}
+	return ret;
+}
+		=09
+
+ctl_table psaux_table[] =3D {
+#ifdef CONFIG_PSMOUSE  =20
+        {DEV_PSMOUSE_RECONNECT, "psmouse_reconnect", &sysctl_psmouse_recon=
nect,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+#endif  =20
+	{DEV_KBD_REPORT_UNKN, "kbd_report_unknown", &sysctl_kbd_report_unkn,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+        {DEV_KBD_REPORT_TO, "kbd_report_timeout", &sysctl_kbd_report_to,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+	{0}
+};
+
+ctl_table psaux_psaux_table[] =3D {
+        {DEV_CDROM, "ps2", NULL, 0, 0555, psaux_table},
+        {0}
+        };
+
+ctl_table psaux_root_table[] =3D {
+#ifdef CONFIG_PROC_FS
+        {CTL_DEV, "dev", NULL, 0, 0555, psaux_psaux_table},
+#endif /* CONFIG_PROC_FS */
+        {0}
+        };
+static struct ctl_table_header *psaux_sysctl_header;
+
+static void psaux_sysctl_register (void)
+{
+	static int initialized;
+	if (initialized) return;
+=09
+	psaux_sysctl_header =3D register_sysctl_table (psaux_root_table, 1);
+	/*psaux_root_table->child->de->owner =3D THIS_MODULE;*/
+	initialized++;
+}
+
+/*
+static void psaux_sysctl_unregister (void)
+{
+	if (psaux_sysctl_header)
+		unregister_sysctl_table (psaux_sysctl_header);
+}
+ */
+#else /* CONFIG_SYSCTL */
+#define sysctl_psmouse_reconnect 1
+#define sysctl_kbd_report_unkn 0
+#define sysctl_kbd_report_to 0
+#endif /* CONFIG_SYSCTL */
+
 /*
  * Wait for keyboard controller input buffer to drain.
  *
@@ -123,9 +199,8 @@
 		mdelay(1);
 		timeout--;
 	} while (timeout);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "Keyboard timed out[1]\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "Keyboard timed out[1]\n");
 }
=20
 /*
@@ -324,10 +399,8 @@
 		  *keycode =3D E1_PAUSE;
 		  prev_scancode =3D 0;
 	      } else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown e1 escape sequence\n");
-#endif
 		  prev_scancode =3D 0;
 		  return 0;
 	      }
@@ -352,11 +425,9 @@
 	      if (e0_keys[scancode])
 		*keycode =3D e0_keys[scancode];
 	      else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown scancode e0 %02x\n",
 			   scancode);
-#endif
 		  return 0;
 	      }
 	  }
@@ -374,11 +445,9 @@
 	  *keycode =3D high_keys[scancode - SC_LIM];
=20
 	  if (!*keycode) {
-	      if (!raw_mode) {
-#ifdef KBD_REPORT_UNKN
+	      if (!raw_mode && sysctl_kbd_report_unkn) {
 		  printk(KERN_INFO "keyboard: unrecognized scancode (%02x)"
 			 " - ignored\n", scancode);
-#endif
 	      }
 	      return 0;
 	  }
@@ -397,6 +466,7 @@
 	    return 0200;
 }
=20
+static unsigned char psaux_prev;
 static inline void handle_mouse_event(unsigned char scancode)
 {
 #ifdef CONFIG_PSMOUSE
@@ -407,13 +477,24 @@
 		}
 		mouse_reply_expected =3D 0;
 	}
-	else if(scancode =3D=3D AUX_RECONNECT){
+	else if(scancode =3D=3D AUX_RECONNECT1=20
+		&& sysctl_psmouse_reconnect =3D=3D 2) {
+		printk (KERN_DEBUG "PS2 mouse reconnect detected.\n");
+		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
+		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
+		return;
+	}
+	else if (scancode =3D=3D AUX_RECONNECT2 && psaux_prev =3D=3D AUX_RECONNEC=
T1
+		 && sysctl_psmouse_reconnect =3D=3D 1 ) {
+		printk (KERN_DEBUG "PS2 mouse reconnect detected.\n");
 		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
 		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
 		return;
 	}
=20
 	add_mouse_randomness(scancode);
+	psaux_prev =3D scancode;
+
 	if (aux_count) {
 		int head =3D queue->head;
=20
@@ -515,17 +596,14 @@
 			if (resend)
 				break;
 			mdelay(1);
-			if (!--timeout) {
-#ifdef KBD_REPORT_TIMEOUTS
+			if (!--timeout && sysctl_kbd_report_to) {
 				printk(KERN_WARNING "keyboard: Timeout - AT keyboard not present?\n");
-#endif
 				return 0;
 			}
 		}
 	} while (retries-- > 0);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
 	return 0;
 }
=20
@@ -755,6 +833,7 @@
=20
 	/* Ok, finally allocate the IRQ, and off we go.. */
 	kbd_request_irq(keyboard_interrupt);
+	psaux_sysctl_register ();
 }
=20
 #if defined CONFIG_PSMOUSE
diff -uNr linux-2.4.7.kurt-1/include/linux/sysctl.h linux-2.4.7.kurt-1-psau=
x/include/linux/sysctl.h
--- linux-2.4.7.kurt-1/include/linux/sysctl.h	Tue Jul 24 18:48:05 2001
+++ linux-2.4.7.kurt-1-psaux/include/linux/sysctl.h	Tue Aug 14 10:37:54 2001
@@ -594,7 +594,8 @@
 	DEV_HWMON=3D2,
 	DEV_PARPORT=3D3,
 	DEV_RAID=3D4,
-	DEV_MAC_HID=3D5
+	DEV_MAC_HID=3D5,
+	DEV_PSAUX=3D6,
 };
=20
 /* /proc/sys/dev/cdrom */
@@ -653,6 +654,13 @@
 	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=3D4,
 	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=3D5,
 	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=3D6
+};
+
+/* /proc/sys/dev/psaux */
+enum {
+	DEV_PSMOUSE_RECONNECT=3D1,
+	DEV_KBD_REPORT_UNKN=3D2,
+	DEV_KBD_REPORT_TO=3D3,
 };
=20
 #ifdef __KERNEL__

--OgqxwSJOaUobr8KG--

--jho1yZJdad60DJr+
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7ePXtxmLh6hyYd04RAtjyAJ9yB7UclerJDTGLJ7/fRRuKKpt3UQCgv8lZ
DkKvb6jTel1rBPPB1U3zEwI=
=nhjD
-----END PGP SIGNATURE-----

--jho1yZJdad60DJr+--

From aeb@cwi.nl  Wed Aug 15 15:40:17 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA12838
	for <rubini@morgana>; Wed, 15 Aug 2001 15:40:16 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:40:16 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id NAA06534 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 13:12:41 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id LAA26110
	for <rubini@systemy.it>; Tue, 14 Aug 2001 11:12:39 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 1CDEC197B0
	for <rubini@linux.it>; Tue, 14 Aug 2001 12:24:16 +0200 (CEST)
Received: from hera.cwi.nl (hera.cwi.nl [192.16.191.8])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id LAA30422
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 11:34:09 +0200
Received: from vlet.cwi.nl (vlet.cwi.nl [192.16.191.54]) by hera.cwi.nl with ESMTP
	id NAA25182 for ; Tue, 14 Aug 2001 13:12:30 +0200 (MEST)
From: Andries.Brouwer@cwi.nl
Received: (from aeb@localhost)
	by vlet.cwi.nl (8.8.6/8.9.3) id LAA99888;
	Tue, 14 Aug 2001 11:12:29 GMT
Date: Tue, 14 Aug 2001 11:12:29 GMT
Message-Id: <200108141112.LAA99888@vlet.cwi.nl>
To: Andries.Brouwer@cwi.nl, garloff@suse.de
Subject: Re: [PATCH] make psaux reconnect adjustable
Cc: alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org, mantel@suse.de,
        rubini@vision.unipv.it, torvalds@transmeta.com
X-UIDL: 01036beb2df8ccc4bba2d0dc24296831
Status: RO

    From garloff@garloff.de Tue Aug 14 11:57:23 2001

    I can confirm what you suggest:
	My mouse (Logitech wheel USB/PS2) sends indeed AA 00.
    So, I extended my patch:
    psmouse_reconnect = 0: Do nothing (just pass all to userspace)
    psmouse_reconnect = 1: Flush Q & ping mouse on AA 00 (default)
    psmouse_reconnect = 2: Flush Q & ping mouse on AA (old behaviour)

    With reconnect 1 or 2: After reconnecting, mouse behaves strange
	(jumping around the screen)
    With reconnect 0:      Mouse is dead

    In both cases restarting gpm gets the mouse back to work again.
    It seems the imps2 driver does some initialization to the mouse.

    If I use the plain ps2 driver, then finally, I see the benefit of the
    reconnect code in the kernel:
    With reconnect = 1 or 2: It works after replugging
    With reconnect = 0:      Mouse is dead after replugging

    In the latter case restarting gpm helps.

Before having an opinion about what would be appropriate,
let me make sure that I understand the facts that you report.

You talk about reconnect, but what is your definition of reconnect?
Is it that the mouse sends AA or AA 00, or is it that you unplug
and replug the mouse?

Andries

From garloff@garloff.de  Wed Aug 15 15:40:27 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA12966
	for <rubini@morgana>; Wed, 15 Aug 2001 15:40:27 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:40:27 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id RAA11366 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 17:06:23 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id PAA27516
	for <rubini@systemy.it>; Tue, 14 Aug 2001 15:06:22 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 3A388197B0
	for <rubini@linux.it>; Tue, 14 Aug 2001 16:16:44 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id PAA31732
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 15:26:35 +0200
Received: from garloff.etpnet.phys.tue.nl (gum01m.etpnet.phys.tue.nl [192.168.84.65])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id RAA01811;
	Tue, 14 Aug 2001 17:03:47 +0200
Received: (from garloff@localhost)
	by garloff.etpnet.phys.tue.nl (8.11.3/8.11.3/SuSE Linux 8.11.1-0.5) id f7EF36O05943;
	Tue, 14 Aug 2001 17:03:06 +0200
Date: Tue, 14 Aug 2001 17:03:06 +0200
From: Kurt Garloff <garloff@suse.de>
To: Andries.Brouwer@cwi.nl, alan@lxorguk.ukuu.org.uk,
        linux-kernel@vger.kernel.org, mantel@suse.de, rubini@vision.unipv.it,
        torvalds@transmeta.com
Subject: Re: [PATCH] make psaux reconnect adjustable
Message-ID: <20010814170306.Q1085@gum01m.etpnet.phys.tue.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>, Andries.Brouwer@cwi.nl,
	alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org,
	mantel@suse.de, rubini@vision.unipv.it, torvalds@transmeta.com
References: <200108021727.RAA113816@vlet.cwi.nl> <20010814115701.A1952@gum01m.etpnet.phys.tue.nl>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="GFHULmA0mO3kKGOo"
Content-Disposition: inline
In-Reply-To: <20010814115701.A1952@gum01m.etpnet.phys.tue.nl>
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7 i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: 2657c8b50ec315e0f9505a3199547b77
Status: RO


--GFHULmA0mO3kKGOo
Content-Type: multipart/mixed; boundary="+S4DbcR7QPeSsP0V"
Content-Disposition: inline


--+S4DbcR7QPeSsP0V
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Aug 14, 2001 at 11:57:01AM +0200, Kurt Garloff wrote:
> Linus, Alan, I'd like to have your input:
>=20
> Do you like the patch as is?=20

Well, probably not, as it contains a typo which lets machines without kbd
hang. Fixed version attached. Sorry!

Regards,
--=20
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, DE                                SCSI, Security

--+S4DbcR7QPeSsP0V
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="247-psaux-reconnect-sysctl3.diff"
Content-Transfer-Encoding: quoted-printable

diff -uNr linux-2.4.7.kurt-1/drivers/char/pc_keyb.c linux-2.4.7.kurt-1-psau=
x/drivers/char/pc_keyb.c
--- linux-2.4.7.kurt-1/drivers/char/pc_keyb.c	Tue Jul 24 18:42:36 2001
+++ linux-2.4.7.kurt-1-psaux/drivers/char/pc_keyb.c	Tue Aug 14 16:56:58 2001
@@ -81,8 +81,9 @@
=20
 static int __init psaux_init(void);
=20
-#define AUX_RECONNECT 170 /* scancode when ps2 device is plugged (back) in=
 */
-=20
+#define AUX_RECONNECT1 170 /* scancode when ps2 device is plugged (back) i=
n */
+#define AUX_RECONNECT2 0   /* scancode when ps2 device is plugged (back) i=
n */
+
 static struct aux_queue *queue;	/* Mouse data buffer. */
 static int aux_count;
 /* used when we send commands to the mouse that expect an ACK. */
@@ -92,8 +93,83 @@
 #define AUX_INTS_ON  (KBD_MODE_KCC | KBD_MODE_SYS | KBD_MODE_MOUSE_INT | K=
BD_MODE_KBD_INT)
=20
 #define MAX_RETRIES	60		/* some aux operations take long time*/
+
 #endif /* CONFIG_PSMOUSE */
=20
+/* We want to be able to handle the psmouse reconnect token; unfortunately=
 the
+ * Synaptics touchpads (and probably others too) use it for their extented
+ * functionality and produce them in extended mode (as set by gpm -t synps=
2).
+ * So we make this adjustable via a sysctl.  garloff@suse.de, 2001-08-01 */
+
+#ifdef CONFIG_SYSCTL
+#include <linux/sysctl.h>
+#ifdef CONFIG_PSMOUSE
+int sysctl_psmouse_reconnect =3D 1;
+#endif
+int sysctl_kbd_report_unkn =3D 1;
+int sysctl_kbd_report_to =3D 1;
+
+static int psaux_sysctl_handler (ctl_table *ctl, int write, struct file *f=
ilp,
+				 void *buffer, size_t *lenp)
+{
+	int *valp =3D ctl->data;
+	int ret =3D proc_dointvec(ctl, write, filp, buffer, lenp);=20
+	if (write) {
+		if (*valp > 2)
+			*valp =3D 2;
+	}
+	return ret;
+}
+		=09
+
+ctl_table psaux_table[] =3D {
+#ifdef CONFIG_PSMOUSE  =20
+        {DEV_PSMOUSE_RECONNECT, "psmouse_reconnect", &sysctl_psmouse_recon=
nect,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+#endif  =20
+	{DEV_KBD_REPORT_UNKN, "kbd_report_unknown", &sysctl_kbd_report_unkn,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+        {DEV_KBD_REPORT_TO, "kbd_report_timeout", &sysctl_kbd_report_to,
+                sizeof(int), 0644, NULL, &psaux_sysctl_handler},
+	{0}
+};
+
+ctl_table psaux_psaux_table[] =3D {
+        {DEV_CDROM, "ps2", NULL, 0, 0555, psaux_table},
+        {0}
+        };
+
+ctl_table psaux_root_table[] =3D {
+#ifdef CONFIG_PROC_FS
+        {CTL_DEV, "dev", NULL, 0, 0555, psaux_psaux_table},
+#endif /* CONFIG_PROC_FS */
+        {0}
+        };
+static struct ctl_table_header *psaux_sysctl_header;
+
+static void psaux_sysctl_register (void)
+{
+	static int initialized;
+	if (initialized) return;
+=09
+	psaux_sysctl_header =3D register_sysctl_table (psaux_root_table, 1);
+	/*psaux_root_table->child->de->owner =3D THIS_MODULE;*/
+	initialized++;
+}
+
+/*
+static void psaux_sysctl_unregister (void)
+{
+	if (psaux_sysctl_header)
+		unregister_sysctl_table (psaux_sysctl_header);
+}
+ */
+#else /* CONFIG_SYSCTL */
+#define sysctl_psmouse_reconnect 1
+#define sysctl_kbd_report_unkn 1
+#define sysctl_kbd_report_to 1
+#endif /* CONFIG_SYSCTL */
+
 /*
  * Wait for keyboard controller input buffer to drain.
  *
@@ -123,9 +199,8 @@
 		mdelay(1);
 		timeout--;
 	} while (timeout);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "Keyboard timed out[1]\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "Keyboard timed out[1]\n");
 }
=20
 /*
@@ -324,10 +399,8 @@
 		  *keycode =3D E1_PAUSE;
 		  prev_scancode =3D 0;
 	      } else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown e1 escape sequence\n");
-#endif
 		  prev_scancode =3D 0;
 		  return 0;
 	      }
@@ -352,11 +425,9 @@
 	      if (e0_keys[scancode])
 		*keycode =3D e0_keys[scancode];
 	      else {
-#ifdef KBD_REPORT_UNKN
-		  if (!raw_mode)
+		  if (!raw_mode && sysctl_kbd_report_unkn)
 		    printk(KERN_INFO "keyboard: unknown scancode e0 %02x\n",
 			   scancode);
-#endif
 		  return 0;
 	      }
 	  }
@@ -374,11 +445,9 @@
 	  *keycode =3D high_keys[scancode - SC_LIM];
=20
 	  if (!*keycode) {
-	      if (!raw_mode) {
-#ifdef KBD_REPORT_UNKN
+	      if (!raw_mode && sysctl_kbd_report_unkn) {
 		  printk(KERN_INFO "keyboard: unrecognized scancode (%02x)"
 			 " - ignored\n", scancode);
-#endif
 	      }
 	      return 0;
 	  }
@@ -397,6 +466,7 @@
 	    return 0200;
 }
=20
+static unsigned char psaux_prev;
 static inline void handle_mouse_event(unsigned char scancode)
 {
 #ifdef CONFIG_PSMOUSE
@@ -407,13 +477,24 @@
 		}
 		mouse_reply_expected =3D 0;
 	}
-	else if(scancode =3D=3D AUX_RECONNECT){
+	else if(scancode =3D=3D AUX_RECONNECT1=20
+		&& sysctl_psmouse_reconnect =3D=3D 2) {
+		printk (KERN_DEBUG "PS2 mouse reconnect detected.\n");
+		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
+		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
+		return;
+	}
+	else if (scancode =3D=3D AUX_RECONNECT2 && psaux_prev =3D=3D AUX_RECONNEC=
T1
+		 && sysctl_psmouse_reconnect =3D=3D 1 ) {
+		printk (KERN_DEBUG "PS2 mouse reconnect detected.\n");
 		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
 		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
 		return;
 	}
=20
 	add_mouse_randomness(scancode);
+	psaux_prev =3D scancode;
+
 	if (aux_count) {
 		int head =3D queue->head;
=20
@@ -516,16 +597,14 @@
 				break;
 			mdelay(1);
 			if (!--timeout) {
-#ifdef KBD_REPORT_TIMEOUTS
-				printk(KERN_WARNING "keyboard: Timeout - AT keyboard not present?\n");
-#endif
+				if (sysctl_kbd_report_to)
+					printk(KERN_WARNING "keyboard: Timeout - AT keyboard not present?\n");
 				return 0;
 			}
 		}
 	} while (retries-- > 0);
-#ifdef KBD_REPORT_TIMEOUTS
-	printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
-#endif
+	if (sysctl_kbd_report_to)
+		printk(KERN_WARNING "keyboard: Too many NACKs -- noisy kbd cable?\n");
 	return 0;
 }
=20
@@ -755,6 +834,7 @@
=20
 	/* Ok, finally allocate the IRQ, and off we go.. */
 	kbd_request_irq(keyboard_interrupt);
+	psaux_sysctl_register ();
 }
=20
 #if defined CONFIG_PSMOUSE
diff -uNr linux-2.4.7.kurt-1/include/linux/sysctl.h linux-2.4.7.kurt-1-psau=
x/include/linux/sysctl.h
--- linux-2.4.7.kurt-1/include/linux/sysctl.h	Tue Jul 24 18:48:05 2001
+++ linux-2.4.7.kurt-1-psaux/include/linux/sysctl.h	Tue Aug 14 10:37:54 2001
@@ -594,7 +594,8 @@
 	DEV_HWMON=3D2,
 	DEV_PARPORT=3D3,
 	DEV_RAID=3D4,
-	DEV_MAC_HID=3D5
+	DEV_MAC_HID=3D5,
+	DEV_PSAUX=3D6,
 };
=20
 /* /proc/sys/dev/cdrom */
@@ -653,6 +654,13 @@
 	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=3D4,
 	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=3D5,
 	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=3D6
+};
+
+/* /proc/sys/dev/psaux */
+enum {
+	DEV_PSMOUSE_RECONNECT=3D1,
+	DEV_KBD_REPORT_UNKN=3D2,
+	DEV_KBD_REPORT_TO=3D3,
 };
=20
 #ifdef __KERNEL__

--+S4DbcR7QPeSsP0V--

--GFHULmA0mO3kKGOo
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7eT2qxmLh6hyYd04RAkdVAKDWsk64qjIijqnd7OhfUabDk93DuwCeNs8v
2N8GBj91DmP0Sxgh6OamUaw=
=F2r7
-----END PGP SIGNATURE-----

--GFHULmA0mO3kKGOo--

From torvalds@transmeta.com  Wed Aug 15 15:40:51 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA13043
	for <rubini@morgana>; Wed, 15 Aug 2001 15:40:51 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:40:51 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id TAA12956 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 19:01:01 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id RAA27985
	for <rubini@systemy.it>; Tue, 14 Aug 2001 17:00:58 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 1C28219853
	for <rubini@linux.it>; Tue, 14 Aug 2001 18:11:20 +0200 (CEST)
Received: from neon-gw.transmeta.com (neon-gw-l3.transmeta.com [63.209.4.196])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id RAA32362
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 17:21:08 +0200
Received: (from root@localhost)
	by neon-gw.transmeta.com (8.9.3/8.9.3) id JAA00580;
	Tue, 14 Aug 2001 09:59:33 -0700
Received: from mailhost.transmeta.com(10.1.1.15) by neon-gw.transmeta.com via smap (V2.1)
	id xma000571; Tue, 14 Aug 01 09:59:28 -0700
Received: from penguin.transmeta.com (penguin.transmeta.com [10.10.27.78])
	by deepthought.transmeta.com (8.9.3/8.9.3) with ESMTP id JAA13406;
	Tue, 14 Aug 2001 09:59:30 -0700 (PDT)
Received: from localhost (torvalds@localhost) by penguin.transmeta.com (8.11.2/8.7.3) with ESMTP id f7EGwtS01753; Tue, 14 Aug 2001 09:58:55 -0700
X-Authentication-Warning: penguin.transmeta.com: torvalds owned process doing -bs
Date: Tue, 14 Aug 2001 09:58:55 -0700 (PDT)
From: Linus Torvalds <torvalds@transmeta.com>
To: Kurt Garloff <garloff@suse.de>
Cc: <Andries.Brouwer@cwi.nl>, <alan@lxorguk.ukuu.org.uk>,
        <linux-kernel@vger.kernel.org>, <mantel@suse.de>,
        <rubini@vision.unipv.it>
Subject: Re: [PATCH] make psaux reconnect adjustable
In-Reply-To: <20010814170306.Q1085@gum01m.etpnet.phys.tue.nl>
Message-ID: <Pine.LNX.4.33.0108140954390.1679-100000@penguin.transmeta.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
X-UIDL: ca99923198dca96e1919c7a0ca08e81b
Status: RO


> Well, probably not, as it contains a typo which lets machines without kbd
> hang. Fixed version attached. Sorry!

Hmm..

I really have two comments, but I haven't followed the whole discussion,
so feel free to just say that it's been hashed out already:

 - sysconf entries are suspicious for stuff like this. If some code really
   requires this to work correctly, that's exactly the kind of code that
   would run automatically at bootup. A sysconf doesn't really help people
   in that case - we'd be much better off with just a bootup switch.

 - do we actually need the config switch AT ALL, whether at bootup or not?
   What exactly breaks if we just always pass the AA 00 values through?
   Apparently nothing ever breaks, which makes me suspect that people are
   just being unnecessarily defensive.

In short, I'd prefer a patch that just unconditionally removes the code,
unless somebody KNOWS that it could break something. That failing, a
simple kernel command line option sounds better than more files in /proc.

Remember: the biggest mistake to do is to overdesign. The road to hell is
paved with good intentions.

		Linus

From garloff@garloff.de  Wed Aug 15 15:41:03 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA13073
	for <rubini@morgana>; Wed, 15 Aug 2001 15:41:03 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:41:03 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id TAA13510 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 19:38:57 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id RAA28130
	for <rubini@systemy.it>; Tue, 14 Aug 2001 17:38:55 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 4A6C719873
	for <rubini@linux.it>; Tue, 14 Aug 2001 18:49:18 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id RAA32525
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 17:57:53 +0200
Received: from garloff.etpnet.phys.tue.nl (gum01m.etpnet.phys.tue.nl [192.168.84.65])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id TAA03978;
	Tue, 14 Aug 2001 19:36:23 +0200
Received: (from garloff@localhost)
	by garloff.etpnet.phys.tue.nl (8.11.3/8.11.3/SuSE Linux 8.11.1-0.5) id f7EHZhq10174;
	Tue, 14 Aug 2001 19:35:43 +0200
Date: Tue, 14 Aug 2001 19:35:43 +0200
From: Kurt Garloff <garloff@suse.de>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Kurt Garloff <garloff@suse.de>, Andries.Brouwer@cwi.nl,
        alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org, mantel@suse.de,
        rubini@vision.unipv.it
Subject: Re: [PATCH] make psaux reconnect adjustable
Message-ID: <20010814193543.V1085@gum01m.etpnet.phys.tue.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>,
	Linus Torvalds <torvalds@transmeta.com>, Andries.Brouwer@cwi.nl,
	alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org,
	mantel@suse.de, rubini@vision.unipv.it
References: <20010814170306.Q1085@gum01m.etpnet.phys.tue.nl> <Pine.LNX.4.33.0108140954390.1679-100000@penguin.transmeta.com>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="GOaLjq+VdFesH+wR"
Content-Disposition: inline
In-Reply-To: <Pine.LNX.4.33.0108140954390.1679-100000@penguin.transmeta.com>
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7 i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: 0b1ef96a0d05d0b79e99084d0eba334c
Status: RO


--GOaLjq+VdFesH+wR
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Linus,

thanks for your comments.

On Tue, Aug 14, 2001 at 09:58:55AM -0700, Linus Torvalds wrote:
> I really have two comments, but I haven't followed the whole discussion,
> so feel free to just say that it's been hashed out already:
>=20
>  - sysconf entries are suspicious for stuff like this. If some code really
>    requires this to work correctly, that's exactly the kind of code that
>    would run automatically at bootup. A sysconf doesn't really help people
>    in that case - we'd be much better off with just a bootup switch.

Maybe that's the difference of whether you define the kernel behaviour by
deciding what goes in and the one that tries to avoid a breakage without
changing the default behaviour ...
Of course the sysctl is less intrusive (from a user's point of view).

>  - do we actually need the config switch AT ALL, whether at bootup or not?
>    What exactly breaks if we just always pass the AA 00 values through?
>    Apparently nothing ever breaks, which makes me suspect that people are
>    just being unnecessarily defensive.

PS2 mouses need this ping thing to be operational after being plugged.
But, there's no reason it needs to be done in the kernel.
* It works for plain PS2 only (not: imps2, synps2, ...)
* The userspace driver (gpm, X11) can do it as well, AFAICS

I guess the thing has been introduced because it was more convenient than
fixing userspace.
Maybe the kernel does it a bit more efficient by throwing away the queue ...

> In short, I'd prefer a patch that just unconditionally removes the code,
> unless somebody KNOWS that it could break something. That failing, a
> simple kernel command line option sounds better than more files in /proc.

I'd be happy with removing it.
Patch will follow!

> Remember: the biggest mistake to do is to overdesign. The road to hell is
> paved with good intentions.

A few sysctls don't qualify as overdesign yet, I hope.

Regards,
--=20
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, DE                                SCSI, Security

--GOaLjq+VdFesH+wR
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7eWFvxmLh6hyYd04RAid0AJkBRbQAelKjAXzaA8rRQifEPscH2ACfUUsp
BqZqeLRrmag8Bsup3yELdnY=
=dhec
-----END PGP SIGNATURE-----

--GOaLjq+VdFesH+wR--

From garloff@garloff.de  Wed Aug 15 15:41:42 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA13231
	for <rubini@morgana>; Wed, 15 Aug 2001 15:41:41 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:41:41 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id XAA17995 for <rubini@pop.systemy.it>; Tue, 14 Aug 2001 23:29:52 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id VAA28856
	for <rubini@systemy.it>; Tue, 14 Aug 2001 21:29:50 GMT
Received: from vision.unipv.it (vision.unipv.it [193.204.34.82])
	by spock.linux.it (Postfix) with ESMTP id 6CDD9197B0
	for <rubini@linux.it>; Tue, 14 Aug 2001 22:41:27 +0200 (CEST)
Received: from etpmod.phys.tue.nl (etpmod.phys.tue.nl [131.155.111.35])
	by vision.unipv.it (8.9.3/8.9.3) with ESMTP id VAA01350
	for <rubini@vision.unipv.it>; Tue, 14 Aug 2001 21:51:15 +0200
Received: from garloff.etpnet.phys.tue.nl (gum01m.etpnet.phys.tue.nl [192.168.84.65])
	by etpmod.phys.tue.nl (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) with ESMTP id XAA07270;
	Tue, 14 Aug 2001 23:29:48 +0200
Received: (from garloff@localhost)
	by garloff.etpnet.phys.tue.nl (8.11.3/8.11.3/SuSE Linux 8.11.1-0.5) id f7ELTlV16541;
	Tue, 14 Aug 2001 23:29:47 +0200
Date: Tue, 14 Aug 2001 23:29:47 +0200
From: Kurt Garloff <garloff@suse.de>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Andries.Brouwer@cwi.nl, alan@lxorguk.ukuu.org.uk,
        linux-kernel@vger.kernel.org, mantel@suse.de, rubini@vision.unipv.it
Subject: Re: [PATCH] make psaux reconnect adjustable
Message-ID: <20010814232947.A16332@gum01m.etpnet.phys.tue.nl>
Mail-Followup-To: Kurt Garloff <garloff@suse.de>,
	Linus Torvalds <torvalds@transmeta.com>, Andries.Brouwer@cwi.nl,
	alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org,
	mantel@suse.de, rubini@vision.unipv.it
References: <20010814170306.Q1085@gum01m.etpnet.phys.tue.nl> <Pine.LNX.4.33.0108140954390.1679-100000@penguin.transmeta.com>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="pAwQNkOnpTn9IO2O"
Content-Disposition: inline
In-Reply-To: <Pine.LNX.4.33.0108140954390.1679-100000@penguin.transmeta.com>
User-Agent: Mutt/1.3.20i
X-Operating-System: Linux 2.4.7 i686
X-PGP-Info: on http://www.garloff.de/kurt/mykeys.pgp
X-PGP-Key: 1024D/1C98774E, 1024R/CEFC9215
Organization: TU/e(NL), SuSE(DE)
X-UIDL: 186d845e4a17613c167f0da418f5f7f5
Status: RO


--pAwQNkOnpTn9IO2O
Content-Type: multipart/mixed; boundary="RASg3xLB4tUQ4RcS"
Content-Disposition: inline


--RASg3xLB4tUQ4RcS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Aug 14, 2001 at 09:58:55AM -0700, Linus Torvalds wrote:
>  - do we actually need the config switch AT ALL, whether at bootup or not?
>    What exactly breaks if we just always pass the AA 00 values through?
>    Apparently nothing ever breaks, which makes me suspect that people are
>    just being unnecessarily defensive.
>=20
> In short, I'd prefer a patch that just unconditionally removes the code,
> unless somebody KNOWS that it could break something. That failing, a
> simple kernel command line option sounds better than more files in /proc.

OK, here come two patches. The first one removes the special PSAUX reconnect
handling completely. So userspace should handle it. (Which is possible; just
not implemented in gpm/X11 at this time AFAIK.)

Second patch reintroduces the special handling again, but does
* react on AA 00 instead of just AA, thus much less likely breaking other
  drivers (such as synps2). All PS/2 mouses I could access (about 5
  different models) produced AA 00, so this seems OK.
* is disabled by default, and needs to be enabled by the psaux-reconnect
  boot parameter, like in 2.2.19.

Second patch depends on first. Please apply just the first or both.

(Current failure of gpm/X11 would make me choose for both, but then I'm=20
 more the one thinking of customers of a distro than the one trying to keep
 the kernel clean. On the long term, I'd drop the second in any case.)

Regards,
--=20
Kurt Garloff  <garloff@suse.de>                          Eindhoven, NL
GPG key: See mail header, key servers         Linux kernel development
SuSE GmbH, Nuernberg, DE                                SCSI, Security

--RASg3xLB4tUQ4RcS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="247-noreconnect.diff"
Content-Transfer-Encoding: quoted-printable

diff -uNr linux-2.4.7.kurt-1/drivers/char/pc_keyb.c linux-2.4.7.kurt-1-nore=
connect/drivers/char/pc_keyb.c
--- linux-2.4.7.kurt-1/drivers/char/pc_keyb.c	Tue Jul 24 18:42:36 2001
+++ linux-2.4.7.kurt-1-noreconnect/drivers/char/pc_keyb.c	Tue Aug 14 22:47:=
38 2001
@@ -81,8 +81,6 @@
=20
 static int __init psaux_init(void);
=20
-#define AUX_RECONNECT 170 /* scancode when ps2 device is plugged (back) in=
 */
-=20
 static struct aux_queue *queue;	/* Mouse data buffer. */
 static int aux_count;
 /* used when we send commands to the mouse that expect an ACK. */
@@ -406,11 +404,6 @@
 			return;
 		}
 		mouse_reply_expected =3D 0;
-	}
-	else if(scancode =3D=3D AUX_RECONNECT){
-		queue->head =3D queue->tail =3D 0;  /* Flush input queue */
-		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
-		return;
 	}
=20
 	add_mouse_randomness(scancode);

--RASg3xLB4tUQ4RcS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="247-reconnect_bootpar.diff"
Content-Transfer-Encoding: quoted-printable

diff -uNr linux-2.4.7.kurt-1-noreconnect/drivers/char/pc_keyb.c linux-2.4.7=
.kurt-1-recon_bootpar/drivers/char/pc_keyb.c
--- linux-2.4.7.kurt-1-noreconnect/drivers/char/pc_keyb.c	Tue Aug 14 22:47:=
38 2001
+++ linux-2.4.7.kurt-1-recon_bootpar/drivers/char/pc_keyb.c	Tue Aug 14 23:1=
3:49 2001
@@ -63,6 +63,7 @@
 #ifdef CONFIG_PSMOUSE
 static void aux_write_ack(int val);
 static void __aux_write_ack(int val);
+static int aux_reconnect =3D 0;
 #endif
=20
 static spinlock_t kbd_controller_lock =3D SPIN_LOCK_UNLOCKED;
@@ -81,6 +82,9 @@
=20
 static int __init psaux_init(void);
=20
+#define AUX_RECONNECT1 0xaa	/* scancode1 when ps2 device is plugged (back)=
 in */
+#define AUX_RECONNECT2 0x00	/* scancode2 when ps2 device is plugged (back)=
 in */
+=20
 static struct aux_queue *queue;	/* Mouse data buffer. */
 static int aux_count;
 /* used when we send commands to the mouse that expect an ACK. */
@@ -398,6 +402,7 @@
 static inline void handle_mouse_event(unsigned char scancode)
 {
 #ifdef CONFIG_PSMOUSE
+	static unsigned char prev_code;
 	if (mouse_reply_expected) {
 		if (scancode =3D=3D AUX_ACK) {
 			mouse_reply_expected--;
@@ -405,7 +410,15 @@
 		}
 		mouse_reply_expected =3D 0;
 	}
+	else if(scancode =3D=3D AUX_RECONNECT2 && prev_code =3D=3D AUX_RECONNECT1
+		&& aux_reconnect) {
+		printk (KERN_INFO "PS/2 mouse reconnect detected\n");
+		queue->head =3D queue->tail =3D 0;	/* Flush input queue */
+		__aux_write_ack(AUX_ENABLE_DEV);  /* ping the mouse :) */
+		return;
+	}
=20
+	prev_code =3D scancode;
 	add_mouse_randomness(scancode);
 	if (aux_count) {
 		int head =3D queue->head;
@@ -751,6 +764,14 @@
 }
=20
 #if defined CONFIG_PSMOUSE
+
+static int __init aux_reconnect_setup (char *str)
+{
+	aux_reconnect =3D 1;
+	return 1;
+}
+
+__setup("psaux-reconnect", aux_reconnect_setup);
=20
 /*
  * Check if this is a dual port controller.

--RASg3xLB4tUQ4RcS--

--pAwQNkOnpTn9IO2O
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7eZhLxmLh6hyYd04RAnJTAJ9CyWixEyMZ8qkmapcBwl/73IM7DwCfRR5s
TJ1yuGaW+r28gNeBOI1sVP8=
=HZo+
-----END PGP SIGNATURE-----

--pAwQNkOnpTn9IO2O--

From aeb@cwi.nl  Wed Aug 15 15:41:58 2001
Received: from localhost (rubini@localhost [127.0.0.1])
	by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id PAA13289
	for <rubini@morgana>; Wed, 15 Aug 2001 15:41:58 +0200
Received: from pop
	by fetchmail-4.6.4 POP3
	for <rubini@morgana> (single-drop); Wed, 15 Aug 2001 15:41:58 MEST
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id CAA20482 for <rubini@pop.systemy.it>; Wed, 15 Aug 2001 02:21:05 +0200
Received: from spock.linux.it (spock.linux.it [62.177.1.105])
	by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id AAA29238
	for <rubini@systemy.it>; Wed, 15 Aug 2001 00:21:05 GMT
Received: from hera.cwi.nl (hera.cwi.nl [192.16.191.8])
	by spock.linux.it (Postfix) with ESMTP id 6A5D6197B0
	for <rubini@linux.it>; Wed, 15 Aug 2001 01:32:41 +0200 (CEST)
Received: from vlet.cwi.nl (vlet.cwi.nl [192.16.191.54]) by hera.cwi.nl with ESMTP
	id CAA29683 for <rubini@linux.it>; Wed, 15 Aug 2001 02:21:01 +0200 (MEST)
From: Andries.Brouwer@cwi.nl
Received: (from aeb@localhost)
	by vlet.cwi.nl (8.8.6/8.9.3) id AAA100247
	for rubini@linux.it; Wed, 15 Aug 2001 00:21:01 GMT
Date: Wed, 15 Aug 2001 00:21:01 GMT
Message-Id: <200108150021.AAA100247@vlet.cwi.nl>
To: rubini@linux.it
Subject: gpm
X-UIDL: 9ee7c4ae6dd7eb661b4e97eedfbe1025
Status: RO

Dear Alessandro,

[Long ago!]
There was some discussion on linux-kernel about the right way
to handle mouse disconnect and reconnect events.
A PS/2 mouse, and also the imps2 mouse, will send AA 00 after
reconnection (that is, at mouse power-on time).
At this moment the imps2 mouse needs an initialization sequence,
otherwise it reverts to being an ordinary ps2.

So, the right setup probably is to let gpm recognize this AA 00.
If it recognizes this, perhaps the fd should be closed and reopened,
somewhat like happens now in wait_text().

Any idea on how you would like this added to gpm.c / mice.c ?
It will be a bit messy in all cases, I am afraid.

Andries

