Module Name:    src
Committed By:   jmcneill
Date:           Fri Dec 30 20:08:36 UTC 2011

Modified Files:
        src/sys/arch/usermode/conf: GENERIC.common files.usermode
        src/sys/arch/usermode/dev: vncfb.c

Log Message:
add wsmouse support


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/usermode/conf/GENERIC.common
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/usermode/conf/files.usermode
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/usermode/dev/vncfb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/usermode/conf/GENERIC.common
diff -u src/sys/arch/usermode/conf/GENERIC.common:1.8 src/sys/arch/usermode/conf/GENERIC.common:1.9
--- src/sys/arch/usermode/conf/GENERIC.common:1.8	Fri Dec 30 12:14:04 2011
+++ src/sys/arch/usermode/conf/GENERIC.common	Fri Dec 30 20:08:36 2011
@@ -1,9 +1,9 @@
-# $NetBSD: GENERIC.common,v 1.8 2011/12/30 12:14:04 jmcneill Exp $
+# $NetBSD: GENERIC.common,v 1.9 2011/12/30 20:08:36 jmcneill Exp $
 
 include "arch/usermode/conf/std.usermode"
 
 options 	INCLUDE_CONFIG_FILE
-#ident 		"GENERIC-$Revision: 1.8 $"
+#ident 		"GENERIC-$Revision: 1.9 $"
 maxusers 	32
 
 makeoptions	DEBUG="-O1 -g3"
@@ -59,6 +59,7 @@ audio0		at vaudio0
 vncfb0		at thunkbus?
 wsdisplay0	at vncfb?
 wskbd0		at vncfb?
+wsmouse0	at vncfb? mux 0
 options 	WSEMUL_VT100
 options 	WS_KERNEL_FG=WSCOL_GREEN
 options 	WSKBD_DEFAULT_KEYREPEAT_DEL1=1000
@@ -70,6 +71,7 @@ pseudo-device	pty
 pseudo-device	bpfilter
 pseudo-device	drvctl
 pseudo-device	ksyms
+pseudo-device	wsmux
 
 # Pull in optional local configuration
 cinclude "arch/usermode/conf/GENERIC.local"

Index: src/sys/arch/usermode/conf/files.usermode
diff -u src/sys/arch/usermode/conf/files.usermode:1.15 src/sys/arch/usermode/conf/files.usermode:1.16
--- src/sys/arch/usermode/conf/files.usermode:1.15	Thu Dec 29 21:22:49 2011
+++ src/sys/arch/usermode/conf/files.usermode	Fri Dec 30 20:08:36 2011
@@ -1,4 +1,4 @@
-# $NetBSD: files.usermode,v 1.15 2011/12/29 21:22:49 jmcneill Exp $
+# $NetBSD: files.usermode,v 1.16 2011/12/30 20:08:36 jmcneill Exp $
 
 maxpartitions 8
 maxusers 8 16 64
@@ -37,7 +37,7 @@ file	arch/usermode/dev/vaudio.c		vaudio
 attach	ld at thunkbus with ld_thunkbus
 file	arch/usermode/dev/ld_thunkbus.c		ld_thunkbus
 
-device	vncfb { } : wsemuldisplaydev, rasops32, vcons, wskbddev
+device	vncfb { } : wsemuldisplaydev, rasops32, vcons, wskbddev, wsmousedev
 attach	vncfb at thunkbus
 file	arch/usermode/dev/vncfb.c		vncfb
 file	arch/usermode/dev/vnckbdmap.c		vncfb

Index: src/sys/arch/usermode/dev/vncfb.c
diff -u src/sys/arch/usermode/dev/vncfb.c:1.9 src/sys/arch/usermode/dev/vncfb.c:1.10
--- src/sys/arch/usermode/dev/vncfb.c:1.9	Fri Dec 30 19:32:32 2011
+++ src/sys/arch/usermode/dev/vncfb.c	Fri Dec 30 20:08:36 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vncfb.c,v 1.9 2011/12/30 19:32:32 jmcneill Exp $ */
+/* $NetBSD: vncfb.c,v 1.10 2011/12/30 20:08:36 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <jmcne...@invisible.ca>
@@ -35,7 +35,7 @@
 #include "opt_wsemul.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vncfb.c,v 1.9 2011/12/30 19:32:32 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vncfb.c,v 1.10 2011/12/30 20:08:36 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -56,6 +56,8 @@ __KERNEL_RCSID(0, "$NetBSD: vncfb.c,v 1.
 #include <dev/wscons/wsksymdef.h>
 #include <dev/wscons/wsksymvar.h>
 
+#include <dev/wscons/wsmousevar.h>
+
 #include <machine/mainbus.h>
 #include <machine/thunk.h>
 
@@ -73,6 +75,7 @@ struct vncfb_fbops {
 struct vncfb_softc {
 	device_t		sc_dev;
 	device_t		sc_wskbddev;
+	device_t		sc_wsmousedev;
 	thunk_rfb_t		sc_rfb;
 	unsigned int		sc_width;
 	unsigned int		sc_height;
@@ -86,6 +89,7 @@ struct vncfb_softc {
 	struct vncfb_fbops	sc_ops;
 
 	int			sc_kbd_enable;
+	int			sc_mouse_enable;
 
 	void			*sc_ih;
 	void			*sc_sih;
@@ -128,6 +132,10 @@ static void	vncfb_kbd_cngetc(void *, u_i
 static void	vncfb_kbd_cnpollc(void *, int);
 static void	vncfb_kbd_bell(void *, u_int, u_int, u_int);
 
+static int	vncfb_mouse_enable(void *);
+static int	vncfb_mouse_ioctl(void *, u_long, void *, int, lwp_t *);
+static void	vncfb_mouse_disable(void *);
+
 static struct vcons_screen vncfb_console_screen;
 
 static struct wsscreen_descr vncfb_defaultscreen = {
@@ -170,6 +178,12 @@ static const struct wskbd_consops vncfb_
 	vncfb_kbd_bell,
 };
 
+static const struct wsmouse_accessops vncfb_mouse_accessops = {
+	vncfb_mouse_enable,
+	vncfb_mouse_ioctl,
+	vncfb_mouse_disable,
+};
+
 static int
 vncfb_match(device_t parent, cfdata_t match, void *priv)
 {
@@ -185,6 +199,7 @@ vncfb_attach(device_t parent, device_t s
 	struct thunkbus_attach_args *taa = priv;
 	struct wsemuldisplaydev_attach_args waa;
 	struct wskbddev_attach_args kaa;
+	struct wsmousedev_attach_args maa;
 	struct rasops_info *ri;
 	unsigned long defattr;
 
@@ -208,8 +223,6 @@ vncfb_attach(device_t parent, device_t s
 	aprint_naive("\n");
 	aprint_normal(": %ux%u %ubpp (port %u)\n",
 	    sc->sc_width, sc->sc_height, sc->sc_depth, taa->u.vnc.port);
-	aprint_normal_dev(self, "mem @ %p\n", sc->sc_mem);
-	aprint_normal_dev(self, "fb  @ %p\n", sc->sc_framebuf);
 
 	sc->sc_rfb.width = sc->sc_width;
 	sc->sc_rfb.height = sc->sc_height;
@@ -262,6 +275,12 @@ vncfb_attach(device_t parent, device_t s
 
 	sc->sc_wskbddev = config_found_ia(self, "wskbddev", &kaa,
 	    wskbddevprint);
+
+	maa.accessops = &vncfb_mouse_accessops;
+	maa.accesscookie = sc;
+
+	sc->sc_wsmousedev = config_found_ia(self, "wsmousedev", &maa,
+	    wsmousedevprint);
 }
 
 static void
@@ -555,6 +574,15 @@ vncfb_softintr(void *priv)
 			    event.data.key_event.keysym & 0xfff);
 			splx(s);
 			break;
+		case THUNK_RFB_POINTER_EVENT:
+			s = spltty();
+			wsmouse_input(sc->sc_wsmousedev,
+			    event.data.pointer_event.button_mask,
+			    event.data.pointer_event.absx,
+			    event.data.pointer_event.absy,
+			    0, 0, 
+			    WSMOUSE_INPUT_ABSOLUTE_X|WSMOUSE_INPUT_ABSOLUTE_Y);
+			splx(s);
 		default:
 			break;
 		}
@@ -638,3 +666,33 @@ vncfb_kbd_bell(void *priv, u_int pitch, 
 	thunk_rfb_bell(&sc->sc_rfb);
 	softint_schedule(sc->sc_sih);
 }
+
+static int
+vncfb_mouse_enable(void *priv)
+{
+	struct vncfb_softc *sc = priv;
+
+	sc->sc_mouse_enable = 1;
+
+	return 0;
+}
+
+static int
+vncfb_mouse_ioctl(void *priv, u_long cmd, void *data, int flag, lwp_t *l)
+{
+	switch (cmd) {
+	case WSMOUSEIO_GTYPE:
+		*(u_int *)data = WSMOUSE_TYPE_PSEUDO;
+		return 0;
+	default:
+		return EPASSTHROUGH;
+	}
+}
+
+static void
+vncfb_mouse_disable(void *priv)
+{
+	struct vncfb_softc *sc = priv;
+
+	sc->sc_mouse_enable = 0;
+}

Reply via email to