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