Subject: wsmouse for sun mouse
To: None <port-sparc@netbsd.org, port-sparc64@netbsd.org>
From: Andrey Petrov <petrov@netbsd.org>
List: port-sparc
Date: 05/20/2003 23:51:41
Hi,
This patch implements wsmouse fro sun's mouse. I tested it on sparc64,
and am going to do test build for sparc. As usually I appreciate comments.
Thanks,
Andrey
Index: ms.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/ms.c,v
retrieving revision 1.23
diff -u -p -r1.23 ms.c
--- ms.c 2002/10/23 09:13:56 1.23
+++ ms.c 2003/05/20 23:46:01
@@ -79,7 +79,11 @@ __KERNEL_RCSID(0, "$NetBSD: ms.c,v 1.23
#include <dev/sun/event_var.h>
#include <dev/sun/msvar.h>
+#include <dev/wscons/wsconsio.h>
+#include <dev/wscons/wsmousevar.h>
+
#include "locators.h"
+#include "wsmouse.h"
extern struct cfdriver ms_cd;
@@ -315,6 +319,19 @@ ms_input(ms, c)
/* NOTREACHED */
}
+#if NWSMOUSE > 0
+ if (ms->ms_wsmousedev != NULL && ms->ms_ready == 2) {
+ mb = ((ms->ms_mb & 4) >> 2) |
+ (ms->ms_mb & 2) |
+ ((ms->ms_mb & 1) << 2);
+ wsmouse_input(ms->ms_wsmousedev,
+ mb, ms->ms_dx, ms->ms_dy, 0,
+ WSMOUSE_INPUT_DELTA);
+ ms->ms_dx = 0;
+ ms->ms_dy = 0;
+ return;
+ }
+#endif
/*
* We have at least one event (mouse button, delta-X, or
* delta-Y; possibly all three, and possibly three separate
Index: msvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/msvar.h,v
retrieving revision 1.3
diff -u -p -r1.3 msvar.h
--- msvar.h 2001/12/09 12:02:06 1.3
+++ msvar.h 2003/05/20 23:46:01
@@ -111,6 +111,8 @@ struct ms_softc {
*/
volatile int ms_ready; /* event queue is ready */
struct evvar ms_events; /* event queue state */
+
+ struct device *ms_wsmousedev;
};
/* front-end call back for mouse input */
Index: sunms.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/sunms.c,v
retrieving revision 1.13
diff -u -p -r1.13 sunms.c
--- sunms.c 2003/01/19 16:53:53 1.13
+++ sunms.c 2003/05/20 23:46:01
@@ -80,7 +80,11 @@ __KERNEL_RCSID(0, "$NetBSD: sunms.c,v 1.
#include <dev/sun/msvar.h>
#include <dev/sun/kbd_ms_ttyvar.h>
+#include <dev/wscons/wsconsio.h>
+#include <dev/wscons/wsmousevar.h>
+
#include "ms.h"
+#include "wsmouse.h"
#if NMS > 0
#ifdef SUN_MS_BPS
@@ -101,6 +105,16 @@ struct linesw sunms_disc =
{ "sunms", 8, ttylopen, ttylclose, ttyerrio, ttyerrio, ttynullioctl,
sunmsinput, ttstart, nullmodem, ttpoll }; /* 8- SUNMOUSEDISC */
+int sunms_enable(void *);
+int sunms_ioctl(void *, u_long, caddr_t, int, struct proc *);
+void sunms_disable(void *);
+
+const struct wsmouse_accessops sunms_accessops = {
+ sunms_enable,
+ sunms_ioctl,
+ sunms_disable,
+};
+
/*
* ms_match: how is this zs channel configured?
*/
@@ -132,6 +146,9 @@ sunms_attach(parent, self, aux)
struct cfdata *cf;
struct tty *tp = args->kmta_tp;
int ms_unit;
+#if NWSMOUSE > 0
+ struct wsmousedev_attach_args a;
+#endif
cf = ms->ms_dev.dv_cfdata;
ms_unit = ms->ms_dev.dv_unit;
@@ -151,6 +168,16 @@ sunms_attach(parent, self, aux)
/* Initialize translator. */
ms->ms_byteno = -1;
+
+#if NWSMOUSE > 0
+ /*
+ * attach wsmouse
+ */
+ a.accessops = &sunms_accessops;
+ a.accesscookie = ms;
+
+ ms->ms_wsmousedev = config_found(self, &a, wsmousedevprint);
+#endif
}
/*
@@ -202,5 +229,60 @@ sunmsinput(c, tp)
/* Pass this up to the "middle" layer. */
ms_input(ms, c);
return (0);
+}
+
+int
+sunms_ioctl(v, cmd, data, flag, p)
+ void *v;
+ u_long cmd;
+ caddr_t data;
+ int flag;
+ struct proc *p;
+{
+/* struct ms_softc *sc = v; */
+
+ switch (cmd) {
+ case WSMOUSEIO_GTYPE:
+ *(u_int *)data = WSMOUSE_TYPE_PS2; /* XXX */
+ break;
+
+ default:
+ return (EPASSTHROUGH);
+ }
+ return (0);
+}
+
+int
+sunms_enable(v)
+ void *v;
+{
+ struct ms_softc *ms = v;
+ int err;
+ int s;
+
+ if (ms->ms_ready)
+ return EBUSY;
+
+ err = sunmsiopen(v, 0);
+ if (err)
+ return err;
+
+ s = spltty();
+ ms->ms_ready = 2;
+ splx(s);
+
+ return 0;
+}
+
+void
+sunms_disable(v)
+ void *v;
+{
+ struct ms_softc *ms = v;
+ int s;
+
+ s = spltty();
+ ms->ms_ready = 0;
+ splx(s);
}
#endif
Index: files.sun
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/files.sun,v
retrieving revision 1.7
diff -u -p -r1.7 files.sun
--- files.sun 2003/01/24 16:54:35 1.7
+++ files.sun 2003/05/20 23:46:01
@@ -35,7 +35,7 @@ file dev/sun/wskbdmap_sun.c kbd & wskbd
# upper layer of sun ms driver
# XXX: middle layer for sun serial mice (split out?)
-device ms: firm_events
+device ms: firm_events, wsmousedev
file dev/sun/ms.c ms needs-flag
# e.g. - lower layer: sun (mouse systems) mouse at zs