summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/mse.h
blob: 404bc36a6f32159085d2b5408cdc70361cc6fcb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*	Copyright (c) 1990, 1991 UNIX System Laboratories, Inc.	*/
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T	*/
/*	  All Rights Reserved  	*/

#ifndef	_SYS_MSE_H
#define	_SYS_MSE_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#define	MAX_MSE_UNIT	15

/* Hardware interface ports */
#define	DATA_PORT		BASE_IOA	/* Read only */
#define	SIGNATURE_PORT		BASE_IOA + 1	/* Read/write */
#define	INTERRUPT_PORT		BASE_IOA + 2	/* Read only */
#define	CONTROL_PORT		BASE_IOA + 2	/* Write only */
#define	CONFIGURATOR_PORT	BASE_IOA + 3	/* Read/write */

/* Control port bits */
#define	INTR_DISABLE	0x10
#define	HIGH_NIBBLE	0x20
#define	LOW_NIBBLE	0x00
#define	X_COUNTER	0x00
#define	Y_COUNTER	0x40
#define	HC		0x80

/* Macros to make accessing the BUS mouse ports easier */
#define	data_port	(inb(DATA_PORT) & 0xef)
#define	control_port(x)	(outb(CONTROL_PORT, (x)))

/*
 * This section describes the original mouse.h definitions
 * It is included here for the sake of compatibility.
 */


/* Base I/O addresses for primary and secondary BUS mouse InPort */
#define	MOUSE1	0x23c
#define	MOUSE2	0x238

/* Offsets of I/O registers from base */
#define	ADDRREG		0	/* Address register */
#define	DATAREG		1	/* Data register */
#define	IDENTREG	2	/* Identification register */
#define	TESTREG		3	/* Test register */

/* Address register definitions */
#define	REGSEL	7	/* Mask for register select bits */
#define	MSTATUS	0	/* Select mouse status register */
#define	DATA1	1	/* Select data register 1 */
#define	DATA2	2	/* Select data register 2 */
#define	DATA3	3	/* Select data register 3 */
#define	DATA4	4	/* Select data register 4 */
#define	ISTATUS	5	/* Select interface status register */
#define	ICNTRL	6	/* Select interface control register */
#define	MODE	7	/* Select mode register */
#define	TESTEN	0x40	/* Enable test register */
#define	RESET	0x80	/* Reset InPort chip */

/* Identification register definitions */
#define	SIGN	0xde			/* InPort chip signature */
#define	VERS(x)	(((x) >> 4) & 15)	/* InPort chip version number */
#define	REV(x)	((x) & 15)		/* InPort chip revision number */

/* Interface status/control register definitions */
#define	SW3	1
#define	SW2	2
#define	SW1	4
#define	XA	0x10
#define	XB	0x20
#define	YA	0x40
#define	YB	0x80

/* Mode register definitions */
#define	RATEMASK	7
#define	HZ0NOINTR	0
#define	HZ30		1
#define	HZ50		2
#define	HZ100		3
#define	HZ200		4
#define	HZ0INTR		6
#define	HZEXT		7
#define	DATAINT		8
#define	TIMERINT	0x10
#define	HOLD	0x20
/* #define	MODEMASK	0xc0 */
#define	QUADMODE	0
#define	SYNCHMODE	0x40
#define	ASYNMODE	0x80
#define	DIRMODE		0xc0

#define	MSE_UNIT(dev)	(getminor(dev) % 15)
#define	MSE_MINOR(unit, vt)	((((vt) & 7) << 5) | (((vt) & 8) << 1) | (unit))
#define	DISP_UNIT(dev)	(getminor(dev) / 15)

#define	MSE_CLONE	MSE_MINOR(0, VTMAX)
#define	MSE_MON		MSE_MINOR(1, VTMAX)
#define	MSE_CFG		MSE_MINOR(2, VTMAX)

#define	SNDERR		0xfe
#define	FAILED		(-1)

struct msecopy {
	int	state;
};

/*
 * Mouse button number definitions.
 */

#define	MSE_3_BUTTON	3	/* mouse talks logitech MM data format */
#define	MSE_DEFAULT	4	/* no button definition needed */

#ifdef _KERNEL

/* STREAMS mouse info structure */
struct strmseinfo {
	int	msetimeid;
	queue_t	*rqp;
	queue_t	*wqp;
	struct msecopy	copystate;
	char 	state;
	uchar_t	type;
	struct mouseinfo mseinfo;
	ddi_iblock_cookie_t iblock;
	uchar_t	button;
	char 	x;
	char	y;
	char 	old_buttons;
	dev_t	dev;
	kmutex_t lock;
};

#endif

#define	BUS_MAJOR	0
#define	MCA_MAJOR	1

#define	MBUS		1
#define	M320		2
#define	MSERIAL		3

/* Mouse configuration */

struct mse_cfg {
	struct mousemap	*mapping;	/* Pointer to mapping table */
	unsigned	count;		/* # of entries in mapping table */
};


/* Mouse monitor daemon */

struct mse_mon {
	int		cmd;		/* Command from driver to monitor */
	dev_t		dev;		/* Display station for mouse */
	dev_t		mdev;		/* Mouse Device */
	uchar_t		Errno;		/* Error status from action */
};

#define	MSE_MGR_OPEN	1		/* Command to open device */
#define	MSE_MGR_CLOSE	2		/* Command to close device */
#define	MSE_MGR_LCLOSE	4		/* Command to last close device */
#define	MGR_WAITING	8

/* Structure for mouse information pseudo-ioctl (from mse to display driver) */

#define	MOUSE_INFO	(('M'<<16)|('I'<<8)|99)


struct mcastat {
	int mode;		/* stream or prompt mode */
	int present;
	int map_unit;
};

/* Per-unit bus mouse configuration info (in mse/space.c) */

struct mouseconfig {
	unsigned	io_addr;	/* Base I/O address */
	unsigned	ivect;		/* Interrupt vector */
	int		present;	/* Set by detection routine */
	int		map_unit;	/* Index into mse_mapping[] */
};
typedef struct mouseconfig MOUSECNF;

/* Display-to-mouse mapping table (sent by mouseadmin) */

struct mousemap {
	dev_t	disp_dev,	/* Display device id */
		mse_dev;	/* Serial mouse device id; */
				/*	or makedev(0,unit #) for bus mouse */
	int type;		/* type of mouse (MBUS, M320, etc) */
};

typedef struct mousemap MOUSEMAP;


/*
 * AT&T 320 mouse (8042 controller) I/O port addresses
 */
#define	MSE_OUT		 0x60	/* output buffer R/O */
#define	MSE_IDAT	 0x60	/* input buffer data write W/O */
#define	MSE_STAT	 0x64	/* 8042 controller status R/O */
#define	MSE_ICMD	 0x64	/* input buffer command write W/O */

/* Mouse driver internal status structure kept for each virtual mouse */
typedef struct {
	struct proc *u_procp;
	int	mse_pid;
	int	rupted;
	int	isopen;
	char	old_buttons;
} MOUSE_STRUCT;

/* Mouse driver internal status structure kept for each physical mouse */
typedef struct {
	MOUSEMAP	map;		/* Device assignment info */
	int		n_vts;
	MOUSE_STRUCT	*ms;		/* Mouse structs for this mouse */
	struct tty	*ttyp;		/* TTY struct of serial mouse */
	int		old;		/* Save old line discipline here */
	int		state;		/* Serial mse input parsing state */
	int		x_ovr;		/* 320 overflow state */
	int		y_ovr;		/* 320 overflow state */
	int		status;		/* Status of manager command */
} MOUSE_UNIT;
/* bits in data port indicating button state */
#define	LEFT		0200		/* left button */
#define	MIDDLE		0100		/* middle button */
#define	RIGHT		0040		/* right button */

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_MSE_H */