1/*	$NetBSD: msvar.h,v 1.8 2008/03/29 19:15:36 tsutsui Exp $	*/
2
3/*
4 * Copyright (c) 1992, 1993
5 *	The Regents of the University of California.  All rights reserved.
6 *
7 * This software was developed by the Computer Systems Engineering group
8 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9 * contributed to Berkeley.
10 *
11 * All advertising materials mentioning features or use of this software
12 * must display the following acknowledgement:
13 *	This product includes software developed by the University of
14 *	California, Lawrence Berkeley Laboratory.
15 *
16 * Redistribution and use in source and binary forms, with or without
17 * modification, are permitted provided that the following conditions
18 * are met:
19 * 1. Redistributions of source code must retain the above copyright
20 *    notice, this list of conditions and the following disclaimer.
21 * 2. Redistributions in binary form must reproduce the above copyright
22 *    notice, this list of conditions and the following disclaimer in the
23 *    documentation and/or other materials provided with the distribution.
24 * 3. Neither the name of the University nor the names of its contributors
25 *    may be used to endorse or promote products derived from this software
26 *    without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 *	@(#)ms.c	8.1 (Berkeley) 6/11/93
41 */
42
43/*
44 * How many input characters we can buffer.
45 * The port-specific var.h may override this.
46 * Note: must be a power of two!
47 */
48#define	MS_RX_RING_SIZE	256
49#define MS_RX_RING_MASK (MS_RX_RING_SIZE-1)
50/*
51 * Output buffer.  Only need a few chars.
52 */
53#define	MS_TX_RING_SIZE	16
54#define MS_TX_RING_MASK (MS_TX_RING_SIZE-1)
55/*
56 * mouse serial line speed defaults to 1200 bps.
57 */
58#define MS_DEFAULT_BPS 	1200
59
60/*
61 * Mouse state.  A Mouse Systems mouse is a fairly simple device,
62 * producing five-byte blobs of the form:
63 *
64 *	b dx dy dx dy
65 *
66 * where b is the button state, encoded as 0x80|(~buttons)---there are
67 * three buttons (4=left, 2=middle, 1=right)---and dx,dy are X and Y
68 * delta values, none of which have are in [0x80..0x87].  (This lets
69 * us sync up with the mouse after an error.)
70 */
71struct ms_softc {
72	device_t ms_dev;		/* required first: base device */
73	union {
74		void *msu_priv;
75		struct zs_chanstate *msu_cs;
76	} ms_u;
77#define ms_priv	ms_u.msu_priv
78#define ms_cs	ms_u.msu_cs
79
80	/*
81	 * The deviopen and deviclose routines are provided
82	 * by the lower level driver and used as a back door
83	 * when opening and closing the internal device.
84	 */
85	int	(*ms_deviopen)	(device_t, int);
86	int	(*ms_deviclose)	(device_t, int);
87
88	/* Flags to communicate with ms_softintr() */
89	volatile int ms_intr_flags;
90#define	INTR_RX_OVERRUN 1
91#define INTR_TX_EMPTY   2
92#define INTR_ST_CHECK   4
93
94	/*
95	 * The receive ring buffer.
96	 */
97	u_int	ms_rbget;	/* ring buffer `get' index */
98	volatile u_int	ms_rbput;	/* ring buffer `put' index */
99	u_short	ms_rbuf[MS_RX_RING_SIZE]; /* rr1, data pairs */
100
101	/*
102	 * State of input translator
103	 */
104	short	ms_byteno;		/* input byte number, for decode */
105	char	ms_mb;			/* mouse button state */
106	char	ms_ub;			/* user button state */
107	int	ms_dx;			/* delta-x */
108	int	ms_dy;			/* delta-y */
109
110	/*
111	 * State of upper interface.
112	 */
113	volatile int ms_ready;		/* event queue is ready */
114	struct	evvar ms_events;	/* event queue state */
115
116	device_t ms_wsmousedev;
117};
118
119/* front-end call back for mouse input */
120void ms_input(struct ms_softc *, int c);
121