[PATCH:] psm(4) IntelliMouse Explorer KVM hack breaks my mouse

From: Juergen Lock <nox_at_jelal.kn-bremen.de>
Date: Tue, 11 May 2010 20:41:41 +0200
(..and older vbox versions.)

Hi!

 I just saw this vbox ticket:

	http://www.virtualbox.org/ticket/6488

(`Mouse wheel scrolling interpredted as click events in guest -> fixed
  after the 3.1.6 release')

 ..which sounded just like what a physical mouse I have (MS `IntelliMouse
Optical 1.1A' according to whats printed on the bottom) did outside of
a VM too, so I got curious and patched my psm driver to disable the KVM
hack mentioned in that ticket which was introduced back in Apr 2000 by
this commit:

	http://svn.freebsd.org/viewvc/base?view=revision&revision=58923

(`Add temporary workaround to fool some "clever" KVM switch products
  which think they know the IntelliMouse 4-byte packet and believe,
  wrongly, that any other protocols use 3-byte packets.')

 ..and indeed, now the stray click events are gone for me too! :)

 So now I made a patch that allows disabling that KVM hack via device
hints, appended below.  (hint.psm.0.flags="0x10000" - or do you guys
think the hack should be disabled by default instead?)

 Cheers,
	Juergen

Index: src/sys/dev/atkbdc/psm.c
===================================================================
RCS file: /home/scvs/src/sys/dev/atkbdc/psm.c,v
retrieving revision 1.104.2.2
diff -u -p -r1.104.2.2 psm.c
--- src/sys/dev/atkbdc/psm.c	20 Aug 2009 20:23:28 -0000	1.104.2.2
+++ src/sys/dev/atkbdc/psm.c	11 May 2010 18:06:01 -0000
_at__at_ -326,6 +326,7 _at__at_ static devclass_t psm_devclass;
 #define	PSM_CONFIG_HOOKRESUME	0x2000	/* hook the system resume event */
 #define	PSM_CONFIG_INITAFTERSUSPEND 0x4000 /* init the device at the resume event */
 #define	PSM_CONFIG_SYNCHACK	0x8000	/* enable `out-of-sync' hack */
+#define	PSM_CONFIG_NOKVMHACK	0x10000	/* disable IntelliMouse Explorer KVM hack */
 
 #define	PSM_CONFIG_FLAGS	\
     (PSM_CONFIG_RESOLUTION |	\
_at__at_ -337,7 +338,8 _at__at_ static devclass_t psm_devclass;
     PSM_CONFIG_FORCETAP |	\
     PSM_CONFIG_IGNPORTERROR |	\
     PSM_CONFIG_HOOKRESUME |	\
-    PSM_CONFIG_INITAFTERSUSPEND)
+    PSM_CONFIG_INITAFTERSUSPEND | \
+    PSM_CONFIG_NOKVMHACK)
 
 /* other flags (flags) */
 #define	PSM_FLAGS_FINGERDOWN	0x0001	/* VersaPad finger down */
_at__at_ -3779,20 +3781,23 _at__at_ enable_msexplorer(struct psm_softc *sc)
 	sc->hw.hwid = id;
 	sc->hw.buttons = 5;		/* IntelliMouse Explorer XXX */
 
-	/*
-	 * XXX: this is a kludge to fool some KVM switch products
-	 * which think they are clever enough to know the 4-byte IntelliMouse
-	 * protocol, and assume any other protocols use 3-byte packets.
-	 * They don't convey 4-byte data packets from the IntelliMouse Explorer
-	 * correctly to the host computer because of this!
-	 * The following sequence is actually IntelliMouse's "wake up"
-	 * sequence; it will make the KVM think the mouse is IntelliMouse
-	 * when it is in fact IntelliMouse Explorer.
-	 */
-	for (i = 0; i < sizeof(rate0)/sizeof(rate0[0]); ++i)
-		if (set_mouse_sampling_rate(kbdc, rate0[i]) != rate0[i])
-			break;
-	id = get_aux_id(kbdc);
+	if (!(sc->config & PSM_CONFIG_NOKVMHACK)) {
+		/*
+		 * XXX: this is a kludge to fool some KVM switch products
+		 * which think they are clever enough to know the 4-byte
+		 * IntelliMouse protocol, and assume any other protocols
+		 * use 3-byte packets.
+		 * They don't convey 4-byte data packets from the IntelliMouse
+		 * Explorer correctly to the host computer because of this!
+		 * The following sequence is actually IntelliMouse's "wake up"
+		 * sequence; it will make the KVM think the mouse is
+		 * IntelliMouse when it is in fact IntelliMouse Explorer.
+		 */
+		for (i = 0; i < sizeof(rate0)/sizeof(rate0[0]); ++i)
+			if (set_mouse_sampling_rate(kbdc, rate0[i]) != rate0[i])
+				break;
+		id = get_aux_id(kbdc);
+	}
 
 	return (TRUE);
 }
Index: src/share/man/man4/psm.4
===================================================================
RCS file: /home/scvs/src/share/man/man4/psm.4,v
retrieving revision 1.49.2.1
diff -u -p -r1.49.2.1 psm.4
--- src/share/man/man4/psm.4	3 Aug 2009 08:13:06 -0000	1.49.2.1
+++ src/share/man/man4/psm.4	11 May 2010 18:04:16 -0000
_at__at_ -349,6 +349,11 _at__at_ after the `resume' event.
 It has no effect unless the
 .Em HOOKRESUME
 flag is set as well.
+.It bit 16 NOKVMHACK
+This flag disables the IntelliMouse Explorer protocol KVM switch
+workaround that makes some virtual machine's mouse emulations as well
+as at least one physical IntelliMouse Optical model misbehave
+(causing the scroll wheel to produce stray click events.)
 .El
 .Sh LOADER TUNABLES
 Extended support for Synaptics touchpads can be enabled by setting
Received on Tue May 11 2010 - 16:46:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:03 UTC