Last active
September 2, 2021 09:15
-
-
Save moveccr/affded12286cb9013222ad251a4ec129 to your computer and use it in GitHub Desktop.
NetBSD/luna68k NWSMOUSE=0 のときにマウスが接続されているとキーボードに誤入力が発生する問題のパッチ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/sys/arch/luna68k/dev/lunaws.c b/sys/arch/luna68k/dev/lunaws.c | |
index 06379fdf4..edf2d9c8f 100644 | |
--- a/sys/arch/luna68k/dev/lunaws.c | |
+++ b/sys/arch/luna68k/dev/lunaws.c | |
@@ -77,9 +77,9 @@ struct ws_softc { | |
u_int sc_rxqtail; | |
#if NWSMOUSE > 0 | |
device_t sc_wsmousedev; | |
- int sc_msreport; | |
int sc_msbuttons, sc_msdx, sc_msdy; | |
#endif | |
+ int sc_msreport; | |
void *sc_si; | |
int sc_rawkbd; | |
}; | |
@@ -183,9 +183,9 @@ wsattach(device_t parent, device_t self, void *aux) | |
b.accesscookie = (void *)sc; | |
sc->sc_wsmousedev = | |
config_found_ia(self, "wsmousedev", &b, wsmousedevprint); | |
- sc->sc_msreport = 0; | |
} | |
#endif | |
+ sc->sc_msreport = 0; | |
} | |
/*ARGSUSED*/ | |
@@ -224,7 +224,6 @@ wssoftintr(void *arg) | |
while (sc->sc_rxqhead != sc->sc_rxqtail) { | |
code = sc->sc_rxq[sc->sc_rxqhead]; | |
sc->sc_rxqhead = OMKBD_NEXTRXQ(sc->sc_rxqhead); | |
-#if NWSMOUSE > 0 | |
/* | |
* if (code >= 0x80 && code <= 0x87), then | |
* it's the first byte of 3 byte long mouse report | |
@@ -232,33 +231,34 @@ wssoftintr(void *arg) | |
* code[1], [2] -> x,y delta | |
* otherwise, key press or release event. | |
*/ | |
- if (sc->sc_msreport == 0) { | |
- if (code < 0x80 || code > 0x87) { | |
- omkbd_input(sc, code); | |
- continue; | |
+ if (sc->sc_msreport != 0) { | |
+ sc->sc_msreport--; | |
+#if NWSMOUSE > 0 | |
+ if (sc->sc_msreport != 0) { | |
+ sc->sc_msdx = (int8_t)code; | |
+ } else { | |
+ sc->sc_msdy = (int8_t)code; | |
+ wsmouse_input(sc->sc_wsmousedev, | |
+ sc->sc_msbuttons, sc->sc_msdx, sc->sc_msdy, 0, 0, | |
+ WSMOUSE_INPUT_DELTA); | |
+ | |
} | |
- code = (code & 07) ^ 07; | |
- /* LMR->RML: wsevent counts 0 for leftmost */ | |
- sc->sc_msbuttons = (code & 02); | |
- if ((code & 01) != 0) | |
- sc->sc_msbuttons |= 04; | |
- if ((code & 04) != 0) | |
- sc->sc_msbuttons |= 01; | |
- sc->sc_msreport = 1; | |
- } else if (sc->sc_msreport == 1) { | |
- sc->sc_msdx = (int8_t)code; | |
+#endif | |
+ continue; | |
+ } | |
+ if ((code & 0xf8) == 0x80) { | |
+ /* remain bytes for mouse data */ | |
sc->sc_msreport = 2; | |
- } else if (sc->sc_msreport == 2) { | |
- sc->sc_msdy = (int8_t)code; | |
- wsmouse_input(sc->sc_wsmousedev, | |
- sc->sc_msbuttons, sc->sc_msdx, sc->sc_msdy, 0, 0, | |
- WSMOUSE_INPUT_DELTA); | |
- | |
- sc->sc_msreport = 0; | |
+#if NWSMOUSE > 0 | |
+ /* buttons: Negative logic to positive */ | |
+ code = ~code; | |
+ /* LMR->RML: wsevent counts 0 for leftmost */ | |
+ sc->sc_msbuttons = ((code & 1) << 2) | (code & 2) | |
+ | ((code & 4) >> 2); | |
+#endif | |
+ continue; | |
} | |
-#else | |
omkbd_input(sc, code); | |
-#endif | |
} | |
} | |
@@ -379,10 +379,7 @@ omkbd_ioctl(void *v, u_long cmd, void *data, int flag, struct lwp *l) | |
static int | |
omms_enable(void *v) | |
{ | |
- struct ws_softc *sc = v; | |
- | |
syscnputc((dev_t)1, 0x60); /* enable 3 byte long mouse reporting */ | |
- sc->sc_msreport = 0; | |
return 0; | |
} | |
@@ -401,9 +398,6 @@ omms_ioctl(void *v, u_long cmd, void *data, int flag, struct lwp *l) | |
static void | |
omms_disable(void *v) | |
{ | |
- struct ws_softc *sc = v; | |
- | |
syscnputc((dev_t)1, 0x20); /* quiet mouse */ | |
- sc->sc_msreport = 0; | |
} | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment