xref: /onnv-gate/usr/src/uts/common/sys/usb/clients/usbinput/usbwcm/usbwcm.h (revision 11489:29bcdf3d8d8c)
1*11489SPengcheng.Chen@Sun.COM /*
2*11489SPengcheng.Chen@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
3*11489SPengcheng.Chen@Sun.COM  * Use is subject to license terms.
4*11489SPengcheng.Chen@Sun.COM  */
5*11489SPengcheng.Chen@Sun.COM 
6*11489SPengcheng.Chen@Sun.COM /*
7*11489SPengcheng.Chen@Sun.COM  * Copyright (c) 2007, 2008 Bartosz Fabianowski <freebsd@chillt.de>
8*11489SPengcheng.Chen@Sun.COM  * All rights reserved.
9*11489SPengcheng.Chen@Sun.COM  *
10*11489SPengcheng.Chen@Sun.COM  * Financed by the "Irish Research Council for Science, Engineering and
11*11489SPengcheng.Chen@Sun.COM  * Technology: funded by the National Development Plan"
12*11489SPengcheng.Chen@Sun.COM  *
13*11489SPengcheng.Chen@Sun.COM  * Redistribution and use in source and binary forms, with or without
14*11489SPengcheng.Chen@Sun.COM  * modification, are permitted provided that the following conditions
15*11489SPengcheng.Chen@Sun.COM  * are met:
16*11489SPengcheng.Chen@Sun.COM  * 1. Redistributions of source code must retain the above copyright
17*11489SPengcheng.Chen@Sun.COM  *    notice, this list of conditions, and the following disclaimer.
18*11489SPengcheng.Chen@Sun.COM  * 2. Redistributions in binary form must reproduce the above copyright
19*11489SPengcheng.Chen@Sun.COM  *    notice, this list of conditions and the following disclaimer in the
20*11489SPengcheng.Chen@Sun.COM  *    documentation and/or other materials provided with the distribution.
21*11489SPengcheng.Chen@Sun.COM  *
22*11489SPengcheng.Chen@Sun.COM  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23*11489SPengcheng.Chen@Sun.COM  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24*11489SPengcheng.Chen@Sun.COM  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*11489SPengcheng.Chen@Sun.COM  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
26*11489SPengcheng.Chen@Sun.COM  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*11489SPengcheng.Chen@Sun.COM  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28*11489SPengcheng.Chen@Sun.COM  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29*11489SPengcheng.Chen@Sun.COM  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30*11489SPengcheng.Chen@Sun.COM  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31*11489SPengcheng.Chen@Sun.COM  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32*11489SPengcheng.Chen@Sun.COM  * SUCH DAMAGE.
33*11489SPengcheng.Chen@Sun.COM  */
34*11489SPengcheng.Chen@Sun.COM 
35*11489SPengcheng.Chen@Sun.COM /*
36*11489SPengcheng.Chen@Sun.COM  * Copyright (c) 1998 The NetBSD Foundation, Inc.
37*11489SPengcheng.Chen@Sun.COM  * All rights reserved.
38*11489SPengcheng.Chen@Sun.COM  *
39*11489SPengcheng.Chen@Sun.COM  * This code is derived from software contributed to The NetBSD Foundation
40*11489SPengcheng.Chen@Sun.COM  * by Lennart Augustsson (lennart@augustsson.net) at
41*11489SPengcheng.Chen@Sun.COM  * Carlstedt Research & Technology.
42*11489SPengcheng.Chen@Sun.COM  *
43*11489SPengcheng.Chen@Sun.COM  * Redistribution and use in source and binary forms, with or without
44*11489SPengcheng.Chen@Sun.COM  * modification, are permitted provided that the following conditions
45*11489SPengcheng.Chen@Sun.COM  * are met:
46*11489SPengcheng.Chen@Sun.COM  * 1. Redistributions of source code must retain the above copyright
47*11489SPengcheng.Chen@Sun.COM  *    notice, this list of conditions and the following disclaimer.
48*11489SPengcheng.Chen@Sun.COM  * 2. Redistributions in binary form must reproduce the above copyright
49*11489SPengcheng.Chen@Sun.COM  *    notice, this list of conditions and the following disclaimer in the
50*11489SPengcheng.Chen@Sun.COM  *    documentation and/or other materials provided with the distribution.
51*11489SPengcheng.Chen@Sun.COM  * 3. All advertising materials mentioning features or use of this software
52*11489SPengcheng.Chen@Sun.COM  *    must display the following acknowledgement:
53*11489SPengcheng.Chen@Sun.COM  *        This product includes software developed by the NetBSD
54*11489SPengcheng.Chen@Sun.COM  *        Foundation, Inc. and its contributors.
55*11489SPengcheng.Chen@Sun.COM  * 4. Neither the name of The NetBSD Foundation nor the names of its
56*11489SPengcheng.Chen@Sun.COM  *    contributors may be used to endorse or promote products derived
57*11489SPengcheng.Chen@Sun.COM  *    from this software without specific prior written permission.
58*11489SPengcheng.Chen@Sun.COM  *
59*11489SPengcheng.Chen@Sun.COM  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
60*11489SPengcheng.Chen@Sun.COM  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
61*11489SPengcheng.Chen@Sun.COM  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
62*11489SPengcheng.Chen@Sun.COM  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
63*11489SPengcheng.Chen@Sun.COM  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
64*11489SPengcheng.Chen@Sun.COM  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
65*11489SPengcheng.Chen@Sun.COM  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
66*11489SPengcheng.Chen@Sun.COM  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
67*11489SPengcheng.Chen@Sun.COM  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
68*11489SPengcheng.Chen@Sun.COM  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
69*11489SPengcheng.Chen@Sun.COM  * POSSIBILITY OF SUCH DAMAGE.
70*11489SPengcheng.Chen@Sun.COM  */
71*11489SPengcheng.Chen@Sun.COM 
72*11489SPengcheng.Chen@Sun.COM #ifndef _SYS_USB_USBWCM_H
73*11489SPengcheng.Chen@Sun.COM #define	_SYS_USB_USBWCM_H
74*11489SPengcheng.Chen@Sun.COM 
75*11489SPengcheng.Chen@Sun.COM #ifdef __cplusplus
76*11489SPengcheng.Chen@Sun.COM extern "C" {
77*11489SPengcheng.Chen@Sun.COM #endif
78*11489SPengcheng.Chen@Sun.COM 
79*11489SPengcheng.Chen@Sun.COM #include <sys/ioccom.h>
80*11489SPengcheng.Chen@Sun.COM #if defined(_LP64) || defined(_I32LPx)
81*11489SPengcheng.Chen@Sun.COM #include <sys/types32.h>
82*11489SPengcheng.Chen@Sun.COM #else
83*11489SPengcheng.Chen@Sun.COM #include <sys/types.h>
84*11489SPengcheng.Chen@Sun.COM #endif
85*11489SPengcheng.Chen@Sun.COM #include <sys/time.h>
86*11489SPengcheng.Chen@Sun.COM 
87*11489SPengcheng.Chen@Sun.COM #define	EVTIOCGVERSION	_IOR('E', 0x1, int)
88*11489SPengcheng.Chen@Sun.COM #define	EVTIOCGDEVID	_IOR('E', 0x2, struct event_dev_id)
89*11489SPengcheng.Chen@Sun.COM #define	EVTIOCGBM(i, s)	_IORN('E', 0x20 + (i), (s))
90*11489SPengcheng.Chen@Sun.COM #define	EVTIOCGABS(i)	_IOR('E', 0x40 + (i), struct event_abs_axis)
91*11489SPengcheng.Chen@Sun.COM #define	EVTIOC		('E' << 8)
92*11489SPengcheng.Chen@Sun.COM 
93*11489SPengcheng.Chen@Sun.COM struct event_dev_id {
94*11489SPengcheng.Chen@Sun.COM 	uint16_t bus;
95*11489SPengcheng.Chen@Sun.COM #define	ID_BUS_USB 3
96*11489SPengcheng.Chen@Sun.COM 	uint16_t vendor;
97*11489SPengcheng.Chen@Sun.COM 	uint16_t product;
98*11489SPengcheng.Chen@Sun.COM 	uint16_t version;
99*11489SPengcheng.Chen@Sun.COM };
100*11489SPengcheng.Chen@Sun.COM 
101*11489SPengcheng.Chen@Sun.COM struct event_abs_axis {
102*11489SPengcheng.Chen@Sun.COM 	int32_t value;
103*11489SPengcheng.Chen@Sun.COM 	int32_t min;
104*11489SPengcheng.Chen@Sun.COM 	int32_t max;
105*11489SPengcheng.Chen@Sun.COM 	int32_t fuzz;
106*11489SPengcheng.Chen@Sun.COM 	int32_t flat;
107*11489SPengcheng.Chen@Sun.COM };
108*11489SPengcheng.Chen@Sun.COM 
109*11489SPengcheng.Chen@Sun.COM struct event_input {
110*11489SPengcheng.Chen@Sun.COM #if defined(_LP64) || defined(_I32LPx)
111*11489SPengcheng.Chen@Sun.COM 	struct timeval32 time;
112*11489SPengcheng.Chen@Sun.COM #else
113*11489SPengcheng.Chen@Sun.COM 	struct timeval time;
114*11489SPengcheng.Chen@Sun.COM #endif
115*11489SPengcheng.Chen@Sun.COM 	uint16_t type;
116*11489SPengcheng.Chen@Sun.COM 	uint16_t code;
117*11489SPengcheng.Chen@Sun.COM 	int32_t value;
118*11489SPengcheng.Chen@Sun.COM };
119*11489SPengcheng.Chen@Sun.COM 
120*11489SPengcheng.Chen@Sun.COM #define	EVT_SYN				0x0000
121*11489SPengcheng.Chen@Sun.COM #define	EVT_BTN				0x0001
122*11489SPengcheng.Chen@Sun.COM #define	EVT_REL				0x0002
123*11489SPengcheng.Chen@Sun.COM #define	EVT_ABS				0x0003
124*11489SPengcheng.Chen@Sun.COM #define	EVT_MSC				0x0004
125*11489SPengcheng.Chen@Sun.COM #define	EVT_USED			0x0005
126*11489SPengcheng.Chen@Sun.COM #define	EVT_MAX				0x001f
127*11489SPengcheng.Chen@Sun.COM 
128*11489SPengcheng.Chen@Sun.COM #define	SYN_REPORT			0x0000
129*11489SPengcheng.Chen@Sun.COM 
130*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_0			0x0100
131*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_1			0x0101
132*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_2			0x0102
133*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_3			0x0103
134*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_4			0x0104
135*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_5			0x0105
136*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_6			0x0106
137*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_7			0x0107
138*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_8			0x0108
139*11489SPengcheng.Chen@Sun.COM 
140*11489SPengcheng.Chen@Sun.COM #define	BTN_LEFT			0x0110
141*11489SPengcheng.Chen@Sun.COM #define	BTN_RIGHT			0x0111
142*11489SPengcheng.Chen@Sun.COM #define	BTN_MIDDLE			0x0112
143*11489SPengcheng.Chen@Sun.COM #define	BTN_SIDE			0x0113
144*11489SPengcheng.Chen@Sun.COM #define	BTN_EXTRA			0x0114
145*11489SPengcheng.Chen@Sun.COM #define	BTN_TOOL_PEN			0x0140
146*11489SPengcheng.Chen@Sun.COM #define	BTN_TOOL_ERASER			0x0141
147*11489SPengcheng.Chen@Sun.COM #define	BTN_TOOL_PAD			0x0145
148*11489SPengcheng.Chen@Sun.COM #define	BTN_TOOL_MOUSE			0x0146
149*11489SPengcheng.Chen@Sun.COM #define	BTN_TIP				0x014a
150*11489SPengcheng.Chen@Sun.COM #define	BTN_STYLUS_1			0x014b
151*11489SPengcheng.Chen@Sun.COM #define	BTN_STYLUS_2			0x014c
152*11489SPengcheng.Chen@Sun.COM #define	BTN_USED			0x014d
153*11489SPengcheng.Chen@Sun.COM #define	BTN_MISC_UND			0x01ff
154*11489SPengcheng.Chen@Sun.COM #define	BTN_MAX				0x01ff
155*11489SPengcheng.Chen@Sun.COM 
156*11489SPengcheng.Chen@Sun.COM #define	REL_WHEEL			0x0008
157*11489SPengcheng.Chen@Sun.COM #define	REL_MAX				0x000f
158*11489SPengcheng.Chen@Sun.COM 
159*11489SPengcheng.Chen@Sun.COM #define	ABS_X				0x0000
160*11489SPengcheng.Chen@Sun.COM #define	ABS_Y				0x0001
161*11489SPengcheng.Chen@Sun.COM #define	ABS_Z				0x0002
162*11489SPengcheng.Chen@Sun.COM #define	ABS_RX				0x0003
163*11489SPengcheng.Chen@Sun.COM #define	ABS_RY				0x0004
164*11489SPengcheng.Chen@Sun.COM #define	ABS_RZ				0x0005
165*11489SPengcheng.Chen@Sun.COM 
166*11489SPengcheng.Chen@Sun.COM #define	ABS_WHEEL			0x0008
167*11489SPengcheng.Chen@Sun.COM #define	ABS_PRESSURE			0x0018
168*11489SPengcheng.Chen@Sun.COM #define	ABS_DISTANCE			0x0019
169*11489SPengcheng.Chen@Sun.COM #define	ABS_TILT_X			0x001a
170*11489SPengcheng.Chen@Sun.COM #define	ABS_TILT_Y			0x001b
171*11489SPengcheng.Chen@Sun.COM #define	ABS_MISC			0x0028
172*11489SPengcheng.Chen@Sun.COM #define	ABS_USED			0x0029
173*11489SPengcheng.Chen@Sun.COM #define	ABS_MAX				0x003f
174*11489SPengcheng.Chen@Sun.COM 
175*11489SPengcheng.Chen@Sun.COM #define	MSC_SERIAL			0x0000
176*11489SPengcheng.Chen@Sun.COM #define	MSC_MAX				0x0007
177*11489SPengcheng.Chen@Sun.COM 
178*11489SPengcheng.Chen@Sun.COM #ifdef _KERNEL
179*11489SPengcheng.Chen@Sun.COM /* USB IDs */
180*11489SPengcheng.Chen@Sun.COM #define	USB_VENDOR_WACOM			0x056a
181*11489SPengcheng.Chen@Sun.COM 
182*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE		0x0010
183*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE2_4X5		0x0011
184*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE2_5X7		0x0012
185*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE3_4X5		0x0013
186*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE3_6X8		0x0014
187*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE4_4X5		0x0015
188*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_GRAPHIRE4_6X8		0x0016
189*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_BAMBOO_FUN_4X5	0x0017
190*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_BAMBOO_FUN_6X8	0x0018
191*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_BAMBOO_ONE_6X8	0x0019
192*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_CINTIQ_21UX		0x003f
193*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_VOLITO		0x0060
194*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_PENSTATION2		0x0061
195*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_VOLITO2_4X5		0x0062
196*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_VOLITO2_2X3		0x0063
197*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_PENPARTNER2		0x0064
198*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_BAMBOO		0x0065
199*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_BAMBOO_ONE_4X5	0x0069
200*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_4X5		0x00b0
201*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_6X8		0x00b1
202*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_9X12		0x00b2
203*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_12X12		0x00b3
204*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_12X19		0x00b4
205*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_6X11		0x00b5
206*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS3_4X6		0x00b7
207*11489SPengcheng.Chen@Sun.COM 
208*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS4_4X6		0x00b8
209*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS4_6X9		0x00b9
210*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS4_8X13		0x00ba
211*11489SPengcheng.Chen@Sun.COM #define	USB_PRODUCT_WACOM_INTUOS4_12X19		0x00bb
212*11489SPengcheng.Chen@Sun.COM 
213*11489SPengcheng.Chen@Sun.COM #define	TOOL_ID_PEN	0x0002
214*11489SPengcheng.Chen@Sun.COM #define	TOOL_ID_MOUSE	0x0006
215*11489SPengcheng.Chen@Sun.COM #define	TOOL_ID_ERASER	0x000a
216*11489SPengcheng.Chen@Sun.COM #define	TOOL_ID_PAD	0x000f
217*11489SPengcheng.Chen@Sun.COM 
218*11489SPengcheng.Chen@Sun.COM #define	SERIAL_PAD_INTUOS	0xffffffff
219*11489SPengcheng.Chen@Sun.COM #define	SERIAL_PAD_GRAPHIRE4	0x000000f0
220*11489SPengcheng.Chen@Sun.COM 
221*11489SPengcheng.Chen@Sun.COM #define	EUWACOMGETVERSION		0x01
222*11489SPengcheng.Chen@Sun.COM #define	EUWACOMGETID			0x02
223*11489SPengcheng.Chen@Sun.COM #define	EUWACOMGETBM			0x20
224*11489SPengcheng.Chen@Sun.COM #define	EUWACOMGETABS			0x40
225*11489SPengcheng.Chen@Sun.COM 
226*11489SPengcheng.Chen@Sun.COM /* Protocols */
227*11489SPengcheng.Chen@Sun.COM struct uwacom_protocol_type {
228*11489SPengcheng.Chen@Sun.COM 	int packet_size;
229*11489SPengcheng.Chen@Sun.COM 	int distance_max;
230*11489SPengcheng.Chen@Sun.COM };
231*11489SPengcheng.Chen@Sun.COM 
232*11489SPengcheng.Chen@Sun.COM enum uwacom_protocol {
233*11489SPengcheng.Chen@Sun.COM 	/* Graphire family */
234*11489SPengcheng.Chen@Sun.COM 	GRAPHIRE = 0,
235*11489SPengcheng.Chen@Sun.COM 	GRAPHIRE4,
236*11489SPengcheng.Chen@Sun.COM 	MYOFFICE,
237*11489SPengcheng.Chen@Sun.COM 
238*11489SPengcheng.Chen@Sun.COM 	/* Intuos family */
239*11489SPengcheng.Chen@Sun.COM 	INTUOS3S,
240*11489SPengcheng.Chen@Sun.COM 	INTUOS3L,
241*11489SPengcheng.Chen@Sun.COM 	INTUOS4S,
242*11489SPengcheng.Chen@Sun.COM 	INTUOS4L,
243*11489SPengcheng.Chen@Sun.COM 	CINTIQ
244*11489SPengcheng.Chen@Sun.COM };
245*11489SPengcheng.Chen@Sun.COM 
246*11489SPengcheng.Chen@Sun.COM struct uwacom_id {
247*11489SPengcheng.Chen@Sun.COM 	uint16_t	vid;
248*11489SPengcheng.Chen@Sun.COM 	uint16_t	pid;
249*11489SPengcheng.Chen@Sun.COM };
250*11489SPengcheng.Chen@Sun.COM 
251*11489SPengcheng.Chen@Sun.COM /* Models */
252*11489SPengcheng.Chen@Sun.COM struct uwacom_type {
253*11489SPengcheng.Chen@Sun.COM 	struct uwacom_id	devno;
254*11489SPengcheng.Chen@Sun.COM 	enum uwacom_protocol	protocol;
255*11489SPengcheng.Chen@Sun.COM 	int			x_max;
256*11489SPengcheng.Chen@Sun.COM 	int			y_max;
257*11489SPengcheng.Chen@Sun.COM 	int			pressure_max;
258*11489SPengcheng.Chen@Sun.COM };
259*11489SPengcheng.Chen@Sun.COM 
260*11489SPengcheng.Chen@Sun.COM static const struct uwacom_protocol_type uwacom_protocols[] = {
261*11489SPengcheng.Chen@Sun.COM 	{ 8, 63},
262*11489SPengcheng.Chen@Sun.COM 	{ 8, 63},
263*11489SPengcheng.Chen@Sun.COM 	{ 9, 63},
264*11489SPengcheng.Chen@Sun.COM 	{10, 63},
265*11489SPengcheng.Chen@Sun.COM 	{10, 63},
266*11489SPengcheng.Chen@Sun.COM 	{10, 63},
267*11489SPengcheng.Chen@Sun.COM 	{10, 63},
268*11489SPengcheng.Chen@Sun.COM 	{10, 63}
269*11489SPengcheng.Chen@Sun.COM };
270*11489SPengcheng.Chen@Sun.COM 
271*11489SPengcheng.Chen@Sun.COM struct uwacom_softc {
272*11489SPengcheng.Chen@Sun.COM 	const struct uwacom_type	*sc_type;
273*11489SPengcheng.Chen@Sun.COM 	struct event_dev_id		sc_id;
274*11489SPengcheng.Chen@Sun.COM 	unsigned long			*sc_bm[EVT_USED];
275*11489SPengcheng.Chen@Sun.COM 
276*11489SPengcheng.Chen@Sun.COM 	int				*sc_btn;
277*11489SPengcheng.Chen@Sun.COM 	struct event_abs_axis		*sc_abs;
278*11489SPengcheng.Chen@Sun.COM 	int				sc_tool[2];
279*11489SPengcheng.Chen@Sun.COM 	int				sc_tool_id[2];
280*11489SPengcheng.Chen@Sun.COM 	unsigned int			sc_serial[2];
281*11489SPengcheng.Chen@Sun.COM 	int				sc_sync;
282*11489SPengcheng.Chen@Sun.COM };
283*11489SPengcheng.Chen@Sun.COM 
284*11489SPengcheng.Chen@Sun.COM typedef struct usbwcm_state {
285*11489SPengcheng.Chen@Sun.COM 	queue_t		*usbwcm_rq;	/* pointer to read queue */
286*11489SPengcheng.Chen@Sun.COM 	queue_t		*usbwcm_wq;	/* pointer to write queue */
287*11489SPengcheng.Chen@Sun.COM 
288*11489SPengcheng.Chen@Sun.COM 	int32_t		usbwcm_flags;	/* open/qwait status */
289*11489SPengcheng.Chen@Sun.COM #define	USBWCM_OPEN    0x00000001	/* opened for business */
290*11489SPengcheng.Chen@Sun.COM #define	USBWCM_QWAIT   0x00000002	/* waiting for a response */
291*11489SPengcheng.Chen@Sun.COM 
292*11489SPengcheng.Chen@Sun.COM 	/* software state */
293*11489SPengcheng.Chen@Sun.COM 	struct uwacom_softc	usbwcm_softc;
294*11489SPengcheng.Chen@Sun.COM 
295*11489SPengcheng.Chen@Sun.COM 	/* device model data */
296*11489SPengcheng.Chen@Sun.COM 	hid_vid_pid_t	usbwcm_devid;
297*11489SPengcheng.Chen@Sun.COM 
298*11489SPengcheng.Chen@Sun.COM 	/*
299*11489SPengcheng.Chen@Sun.COM 	 * Is an ioctl fails because an mblk wasn't
300*11489SPengcheng.Chen@Sun.COM 	 * available, the mlbk is saved here.
301*11489SPengcheng.Chen@Sun.COM 	 */
302*11489SPengcheng.Chen@Sun.COM 	mblk_t		*usbwcm_mioctl;
303*11489SPengcheng.Chen@Sun.COM 	bufcall_id_t	usbwcm_bufcall;	/* id returned by bufcall() */
304*11489SPengcheng.Chen@Sun.COM } usbwcm_state_t;
305*11489SPengcheng.Chen@Sun.COM 
306*11489SPengcheng.Chen@Sun.COM #define	abs(x)		((x) < 0 ? -(x) : (x))
307*11489SPengcheng.Chen@Sun.COM 
308*11489SPengcheng.Chen@Sun.COM typedef struct usbwcm_copyin_s {
309*11489SPengcheng.Chen@Sun.COM 	caddr_t	addr;
310*11489SPengcheng.Chen@Sun.COM 	int	state;
311*11489SPengcheng.Chen@Sun.COM #define	USBWCM_GETSTRUCT 1
312*11489SPengcheng.Chen@Sun.COM #define	USBWCM_GETRESULT 2
313*11489SPengcheng.Chen@Sun.COM } usbwcm_copyin_t;
314*11489SPengcheng.Chen@Sun.COM 
315*11489SPengcheng.Chen@Sun.COM static const struct uwacom_type uwacom_devs[] = {
316*11489SPengcheng.Chen@Sun.COM 	{
317*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE},
318*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 10206, 7422, 511
319*11489SPengcheng.Chen@Sun.COM 	},
320*11489SPengcheng.Chen@Sun.COM 	{
321*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE2_4X5},
322*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 10206, 7422, 511
323*11489SPengcheng.Chen@Sun.COM 	},
324*11489SPengcheng.Chen@Sun.COM 	{
325*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE2_5X7},
326*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 13918, 10206, 511
327*11489SPengcheng.Chen@Sun.COM 	},
328*11489SPengcheng.Chen@Sun.COM 	{
329*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_4X5},
330*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 10208, 7424, 511
331*11489SPengcheng.Chen@Sun.COM 	},
332*11489SPengcheng.Chen@Sun.COM 	{
333*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE3_6X8},
334*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 16704, 12064, 511
335*11489SPengcheng.Chen@Sun.COM 	},
336*11489SPengcheng.Chen@Sun.COM 	{
337*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_4X5},
338*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE4, 10208, 7424, 511
339*11489SPengcheng.Chen@Sun.COM 	},
340*11489SPengcheng.Chen@Sun.COM 	{
341*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_GRAPHIRE4_6X8},
342*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE4, 16704, 12064, 511
343*11489SPengcheng.Chen@Sun.COM 	},
344*11489SPengcheng.Chen@Sun.COM 	{
345*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_BAMBOO_FUN_4X5},
346*11489SPengcheng.Chen@Sun.COM 		MYOFFICE, 14760, 9225, 511
347*11489SPengcheng.Chen@Sun.COM 	},
348*11489SPengcheng.Chen@Sun.COM 	{
349*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_BAMBOO_FUN_6X8},
350*11489SPengcheng.Chen@Sun.COM 		MYOFFICE, 21648, 13530, 511
351*11489SPengcheng.Chen@Sun.COM 	},
352*11489SPengcheng.Chen@Sun.COM 	{
353*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_BAMBOO_ONE_6X8},
354*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 16704, 12064, 511
355*11489SPengcheng.Chen@Sun.COM 	},
356*11489SPengcheng.Chen@Sun.COM 	{
357*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_CINTIQ_21UX},
358*11489SPengcheng.Chen@Sun.COM 		CINTIQ, 87200, 65600, 1023
359*11489SPengcheng.Chen@Sun.COM 	},
360*11489SPengcheng.Chen@Sun.COM 	{
361*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_VOLITO},
362*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 5104, 3712, 511
363*11489SPengcheng.Chen@Sun.COM 	},
364*11489SPengcheng.Chen@Sun.COM 	{
365*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_PENSTATION2},
366*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 3250, 2320, 255
367*11489SPengcheng.Chen@Sun.COM 	},
368*11489SPengcheng.Chen@Sun.COM 	{
369*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_VOLITO2_4X5},
370*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 5104, 3712, 511
371*11489SPengcheng.Chen@Sun.COM 	},
372*11489SPengcheng.Chen@Sun.COM 	{
373*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_VOLITO2_2X3},
374*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 3248, 2320, 511
375*11489SPengcheng.Chen@Sun.COM 	},
376*11489SPengcheng.Chen@Sun.COM 	{
377*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_PENPARTNER2},
378*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 3250, 2320, 511
379*11489SPengcheng.Chen@Sun.COM 	},
380*11489SPengcheng.Chen@Sun.COM 	{
381*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_BAMBOO},
382*11489SPengcheng.Chen@Sun.COM 		MYOFFICE, 14760, 9225, 511
383*11489SPengcheng.Chen@Sun.COM 	},
384*11489SPengcheng.Chen@Sun.COM 	{
385*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_BAMBOO_ONE_4X5},
386*11489SPengcheng.Chen@Sun.COM 		GRAPHIRE, 5104, 3712, 511
387*11489SPengcheng.Chen@Sun.COM 	},
388*11489SPengcheng.Chen@Sun.COM 	{
389*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_4X5},
390*11489SPengcheng.Chen@Sun.COM 		INTUOS3S, 25400, 20320, 1023
391*11489SPengcheng.Chen@Sun.COM 	},
392*11489SPengcheng.Chen@Sun.COM 	{
393*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_6X8},
394*11489SPengcheng.Chen@Sun.COM 		INTUOS3L, 40640, 30480, 1023
395*11489SPengcheng.Chen@Sun.COM 	},
396*11489SPengcheng.Chen@Sun.COM 	{
397*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_9X12},
398*11489SPengcheng.Chen@Sun.COM 		INTUOS3L, 60960, 45720, 1023
399*11489SPengcheng.Chen@Sun.COM 	},
400*11489SPengcheng.Chen@Sun.COM 	{
401*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_12X12},
402*11489SPengcheng.Chen@Sun.COM 		INTUOS3L, 60960, 60960, 1023
403*11489SPengcheng.Chen@Sun.COM 	},
404*11489SPengcheng.Chen@Sun.COM 	{
405*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_12X19},
406*11489SPengcheng.Chen@Sun.COM 		INTUOS3L, 97536, 60960, 1023
407*11489SPengcheng.Chen@Sun.COM 	},
408*11489SPengcheng.Chen@Sun.COM 	{
409*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_6X11},
410*11489SPengcheng.Chen@Sun.COM 		INTUOS3L, 54204, 31750, 1023
411*11489SPengcheng.Chen@Sun.COM 	},
412*11489SPengcheng.Chen@Sun.COM 	{
413*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS3_4X6},
414*11489SPengcheng.Chen@Sun.COM 		INTUOS3S, 31496, 19685, 1023
415*11489SPengcheng.Chen@Sun.COM 	},
416*11489SPengcheng.Chen@Sun.COM 	{
417*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS4_4X6},
418*11489SPengcheng.Chen@Sun.COM 		INTUOS4S, 31496, 19685, 2047
419*11489SPengcheng.Chen@Sun.COM 	},
420*11489SPengcheng.Chen@Sun.COM 	{
421*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS4_6X9},
422*11489SPengcheng.Chen@Sun.COM 		INTUOS4L, 44704, 27940, 2047
423*11489SPengcheng.Chen@Sun.COM 	},
424*11489SPengcheng.Chen@Sun.COM 	{
425*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS4_8X13},
426*11489SPengcheng.Chen@Sun.COM 		INTUOS4L, 65024, 40640, 2047
427*11489SPengcheng.Chen@Sun.COM 	},
428*11489SPengcheng.Chen@Sun.COM 	{
429*11489SPengcheng.Chen@Sun.COM 		{USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS4_12X19},
430*11489SPengcheng.Chen@Sun.COM 		INTUOS4L, 97536, 60960, 2047
431*11489SPengcheng.Chen@Sun.COM 	},
432*11489SPengcheng.Chen@Sun.COM 	{{0, 0},    0,  0, 0, 0}
433*11489SPengcheng.Chen@Sun.COM };
434*11489SPengcheng.Chen@Sun.COM 
435*11489SPengcheng.Chen@Sun.COM #define	PACKET_BIT(b, s)		((packet[b] >> (s)) & 1)
436*11489SPengcheng.Chen@Sun.COM #define	PACKET_BITS(b, s, n) \
437*11489SPengcheng.Chen@Sun.COM 	((((s) + (n) > 32 ? ((packet[(b) - 4]) << (32 - (s))) : 0) | \
438*11489SPengcheng.Chen@Sun.COM 	((s) + (n) > 24 ? ((packet[(b) - 3]) << (24 - (s))) : 0) | \
439*11489SPengcheng.Chen@Sun.COM 	((s) + (n) > 16 ? ((packet[(b) - 2]) << (16 - (s))) : 0) | \
440*11489SPengcheng.Chen@Sun.COM 	((s) + (n) >  8 ? ((packet[(b) - 1]) << (8 - (s))) : 0) | \
441*11489SPengcheng.Chen@Sun.COM 	((packet[(b)]) >> (s))) & \
442*11489SPengcheng.Chen@Sun.COM 	((n) == 32 ? 0xffffffff : (1 << (n)) - 1))
443*11489SPengcheng.Chen@Sun.COM 
444*11489SPengcheng.Chen@Sun.COM #define	BM_SIZE(x) \
445*11489SPengcheng.Chen@Sun.COM 	(((x) / (sizeof (long) * 8) + 1) * sizeof (long))
446*11489SPengcheng.Chen@Sun.COM #define	BM_SET_BIT(x, y) \
447*11489SPengcheng.Chen@Sun.COM 	((x)[(y) / (sizeof (long) * 8)] |= (1ul << ((y) % (sizeof (long) * 8))))
448*11489SPengcheng.Chen@Sun.COM 
449*11489SPengcheng.Chen@Sun.COM static const size_t bm_size[EVT_USED] = {
450*11489SPengcheng.Chen@Sun.COM 	BM_SIZE(EVT_MAX),
451*11489SPengcheng.Chen@Sun.COM 	BM_SIZE(BTN_MAX),
452*11489SPengcheng.Chen@Sun.COM 	BM_SIZE(REL_MAX),
453*11489SPengcheng.Chen@Sun.COM 	BM_SIZE(ABS_MAX),
454*11489SPengcheng.Chen@Sun.COM 	BM_SIZE(MSC_MAX),
455*11489SPengcheng.Chen@Sun.COM };
456*11489SPengcheng.Chen@Sun.COM 
457*11489SPengcheng.Chen@Sun.COM #define	PRINT_MASK_ALL	0xFFFFFFFF
458*11489SPengcheng.Chen@Sun.COM 
459*11489SPengcheng.Chen@Sun.COM #endif	/* _KERNEL */
460*11489SPengcheng.Chen@Sun.COM 
461*11489SPengcheng.Chen@Sun.COM #ifdef __cplusplus
462*11489SPengcheng.Chen@Sun.COM }
463*11489SPengcheng.Chen@Sun.COM #endif
464*11489SPengcheng.Chen@Sun.COM 
465*11489SPengcheng.Chen@Sun.COM #endif	/* _SYS_USB_USBWCM_H */
466