Annotation of sys/arch/vax/dec/vsms_ws.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: vsms_ws.c,v 1.2 2007/04/10 22:37:17 miod Exp $ */
2: /* $NetBSD: dzms.c,v 1.1 2000/12/02 17:03:55 ragge Exp $ */
3:
4: /*
5: * Copyright (c) 1992, 1993
6: * The Regents of the University of California. All rights reserved.
7: *
8: * This software was developed by the Computer Systems Engineering group
9: * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
10: * contributed to Berkeley.
11: *
12: * All advertising materials mentioning features or use of this software
13: * must display the following acknowledgement:
14: * This product includes software developed by the University of
15: * California, Lawrence Berkeley Laboratory.
16: *
17: * Redistribution and use in source and binary forms, with or without
18: * modification, are permitted provided that the following conditions
19: * are met:
20: * 1. Redistributions of source code must retain the above copyright
21: * notice, this list of conditions and the following disclaimer.
22: * 2. Redistributions in binary form must reproduce the above copyright
23: * notice, this list of conditions and the following disclaimer in the
24: * documentation and/or other materials provided with the distribution.
25: * 3. Neither the name of the University nor the names of its contributors
26: * may be used to endorse or promote products derived from this software
27: * without specific prior written permission.
28: *
29: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39: * SUCH DAMAGE.
40: *
41: * @(#)ms.c 8.1 (Berkeley) 6/11/93
42: */
43:
44: #include <sys/param.h>
45: #include <sys/systm.h>
46: #include <sys/device.h>
47: #include <sys/ioctl.h>
48: #include <sys/syslog.h>
49: #include <sys/kernel.h>
50: #include <sys/proc.h>
51: #include <sys/tty.h>
52:
53: #include <machine/bus.h>
54:
55: #include <vax/qbus/dzreg.h>
56: #include <vax/qbus/dzvar.h>
57:
58: #include <vax/dec/dzkbdvar.h>
59: #include <vax/dec/vsmsvar.h>
60:
61: #include <dev/wscons/wsconsio.h>
62: #include <dev/wscons/wsmousevar.h>
63:
64: struct cfdriver lkms_cd = {
65: NULL, "lkms", DV_DULL
66: };
67:
68: int
69: lkms_ioctl(void *v, u_long cmd, caddr_t data, int flag, struct proc *p)
70: {
71: #if 0
72: struct lkms_softc *sc = v;
73: #endif
74:
75: switch (cmd) {
76: case WSMOUSEIO_GTYPE:
77: *(int *)data = WSMOUSE_TYPE_VSXXX;
78: return 0;
79: }
80:
81: return -1;
82: }
83:
84: int
85: lkms_input(void *vsc, int data)
86: {
87: struct lkms_softc *sc = vsc;
88:
89: if (!sc->sc_enabled) {
90: if (sc->sc_selftest > 0) {
91: sc->sc_selftest--;
92: if (sc->sc_selftest == 0)
93: wakeup(&sc->sc_enabled);
94: }
95: return (1);
96: }
97:
98: #define WSMS_BUTTON1 0x01
99: #define WSMS_BUTTON2 0x02
100: #define WSMS_BUTTON3 0x04
101:
102: if ((data & MOUSE_START_FRAME) != 0)
103: sc->inputstate = 1;
104: else
105: sc->inputstate++;
106:
107: if (sc->inputstate == 1) {
108: sc->buttons = 0;
109: if ((data & LEFT_BUTTON) != 0)
110: sc->buttons |= WSMS_BUTTON1;
111: if ((data & MIDDLE_BUTTON) != 0)
112: sc->buttons |= WSMS_BUTTON2;
113: if ((data & RIGHT_BUTTON) != 0)
114: sc->buttons |= WSMS_BUTTON3;
115:
116: sc->dx = data & MOUSE_X_SIGN;
117: sc->dy = data & MOUSE_Y_SIGN;
118: } else if (sc->inputstate == 2) {
119: if (sc->dx == 0)
120: sc->dx = -data;
121: else
122: sc->dx = data;
123: } else if (sc->inputstate == 3) {
124: sc->inputstate = 0;
125: if (sc->dy == 0)
126: sc->dy = -data;
127: else
128: sc->dy = data;
129: wsmouse_input(sc->sc_wsmousedev, sc->buttons,
130: sc->dx, sc->dy, 0, 0, WSMOUSE_INPUT_DELTA);
131: }
132:
133: return (1);
134: }
CVSweb