1 /* $NetBSD: msvar.h,v 1.5 2003/08/07 16:31:26 agc 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 */ 71 struct ms_softc { 72 struct device ms_dev; /* required first: base device */ 73 struct zs_chanstate *ms_cs; 74 75 /* 76 * The deviopen and deviclose routines are provided 77 * by the lower level driver and used as a back door 78 * when opening and closing the internal device. 79 */ 80 int (*ms_deviopen) __P((struct device *, int)); 81 int (*ms_deviclose) __P((struct device *, int)); 82 83 /* Flags to communicate with ms_softintr() */ 84 volatile int ms_intr_flags; 85 #define INTR_RX_OVERRUN 1 86 #define INTR_TX_EMPTY 2 87 #define INTR_ST_CHECK 4 88 89 /* 90 * The receive ring buffer. 91 */ 92 u_int ms_rbget; /* ring buffer `get' index */ 93 volatile u_int ms_rbput; /* ring buffer `put' index */ 94 u_short ms_rbuf[MS_RX_RING_SIZE]; /* rr1, data pairs */ 95 96 /* 97 * State of input translator 98 */ 99 short ms_byteno; /* input byte number, for decode */ 100 char ms_mb; /* mouse button state */ 101 char ms_ub; /* user button state */ 102 int ms_dx; /* delta-x */ 103 int ms_dy; /* delta-y */ 104 105 /* 106 * State of upper interface. 107 */ 108 volatile int ms_ready; /* event queue is ready */ 109 struct evvar ms_events; /* event queue state */ 110 111 struct device *ms_wsmousedev; 112 }; 113 114 /* front-end call back for mouse input */ 115 void ms_input __P((struct ms_softc *, int c)); 116