692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Use is subject to license terms.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Copyright (c) 2007, 2008 Bartosz Fabianowski <freebsd@chillt.de>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * All rights reserved.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Financed by the "Irish Research Council for Science, Engineering and
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Technology: funded by the National Development Plan"
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Redistribution and use in source and binary forms, with or without
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * modification, are permitted provided that the following conditions
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * are met:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 1. Redistributions of source code must retain the above copyright
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * notice, this list of conditions, and the following disclaimer.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 2. Redistributions in binary form must reproduce the above copyright
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * notice, this list of conditions and the following disclaimer in the
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * documentation and/or other materials provided with the distribution.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * SUCH DAMAGE.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Copyright (c) 1998 The NetBSD Foundation, Inc.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * All rights reserved.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * This code is derived from software contributed to The NetBSD Foundation
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * by Lennart Augustsson (lennart@augustsson.net) at
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Carlstedt Research & Technology.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Redistribution and use in source and binary forms, with or without
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * modification, are permitted provided that the following conditions
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * are met:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 1. Redistributions of source code must retain the above copyright
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * notice, this list of conditions and the following disclaimer.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 2. Redistributions in binary form must reproduce the above copyright
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * notice, this list of conditions and the following disclaimer in the
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * documentation and/or other materials provided with the distribution.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 3. All advertising materials mentioning features or use of this software
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * must display the following acknowledgement:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * This product includes software developed by the NetBSD
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Foundation, Inc. and its contributors.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * 4. Neither the name of The NetBSD Foundation nor the names of its
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * contributors may be used to endorse or promote products derived
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * from this software without specific prior written permission.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * POSSIBILITY OF SUCH DAMAGE.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/stropts.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/strsun.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/termios.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/termio.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/strtty.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/systm.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/usb/usba/usbai_version.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/usb/usba.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/usb/usba/usbai_private.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/usb/clients/hid/hid.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China#include <sys/usb/clients/usbinput/usbwcm/usbwcm.h>
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* debugging information */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauint_t usbwcm_errmask = (uint_t)PRINT_MASK_ALL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauint_t usbwcm_errlevel = USB_LOG_L2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic usb_log_handle_t usbwcm_log_handle;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_event(usbwcm_state_t *usbwcmp, uint_t type, uint_t idx, int val)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *mp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (type) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EVT_SYN:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_sync)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EVT_BTN:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_btn[idx] == val)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_btn[idx] = val;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EVT_ABS:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_abs[idx].fuzz) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int dist = abs(val - sc->sc_abs[idx].value);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (dist < sc->sc_abs[idx].fuzz >> 1) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (dist < sc->sc_abs[idx].fuzz) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China val = (7 * sc->sc_abs[idx].value + val) >> 3;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (dist < sc->sc_abs[idx].fuzz << 1) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China val = (sc->sc_abs[idx].value + val) >> 1;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_abs[idx].value == val) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs[idx].value = val;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EVT_REL:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (!val)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EVT_MSC:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if ((mp = allocb(sizeof (struct event_input), BPRI_HI)) != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct event_input *ev = (struct event_input *)mp->b_wptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ev->type = (uint16_t)type;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ev->code = (uint16_t)idx;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ev->value = (int32_t)val;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uniqtime32(&ev->time);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_wptr += sizeof (struct event_input);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(usbwcmp->usbwcm_rq, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_sync = (type == EVT_SYN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pos_events_graphire(usbwcm_state_t *usbwcmp, int x, int y)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_X, x);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_Y, y);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pen_events_graphire(usbwcm_state_t *usbwcmp, int prs, int stl1, int stl2)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_PRESSURE, prs);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_TIP, prs);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_STYLUS_1, stl1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_STYLUS_2, stl2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_mouse_events_graphire(usbwcm_state_t *usbwcmp, int left, int middle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int right, int wheel, int distance)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_LEFT, left);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MIDDLE, middle);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_RIGHT, right);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_REL, REL_WHEEL, wheel);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_DISTANCE, distance);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_tool_events_graphire(usbwcm_state_t *usbwcmp, int idx, int proximity)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, sc->sc_tool[idx], proximity);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_MISC, sc->sc_tool_id[idx]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_serial[idx]) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_MSC, MSC_SERIAL, sc->sc_serial[idx]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_SYN, SYN_REPORT, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pad_events_graphire4(usbwcm_state_t *usbwcmp, int b0, int b1, int b4,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int b5, int rel, int abs)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_0, b0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_1, b1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_4, b4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_5, b5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_REL, REL_WHEEL, rel);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_WHEEL, abs);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_graphire(usbwcmp, 1, b0 | b1 | b4 | b5 | rel | abs);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_input_graphire(usbwcm_state_t *usbwcmp, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uint8_t *packet = mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (PACKET_BITS(0, 0, 8) != 0x02) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL, usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "unknown report type %02x received\n",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(0, 0, 8));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool in proximity */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (PACKET_BIT(1, 7)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pos_events_graphire(usbwcmp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BITS(3, 0, 8) << 8) | PACKET_BITS(2, 0, 8),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BITS(5, 0, 8) << 8) | PACKET_BITS(4, 0, 8));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (!PACKET_BIT(1, 6)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (!PACKET_BIT(1, 5)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_PEN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = TOOL_ID_PEN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_ERASER;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = TOOL_ID_ERASER;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pen_events_graphire(usbwcmp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BIT(7, 0) << 8) | PACKET_BITS(6, 0, 8),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BIT(1, 1), PACKET_BIT(1, 2));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int wheel, distance;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_type->protocol == GRAPHIRE) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China wheel = (PACKET_BIT(1, 5) ?
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 0 : -(int8_t)PACKET_BITS(6, 0, 8));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China distance = PACKET_BITS(7, 0, 6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China wheel = (PACKET_BIT(7, 2) << 2) -
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(7, 0, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China distance = PACKET_BITS(6, 0, 6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_MOUSE;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = TOOL_ID_MOUSE;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_mouse_events_graphire(usbwcmp, PACKET_BIT(1, 0),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BIT(1, 2), PACKET_BIT(1, 1), wheel,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China distance);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_graphire(usbwcmp, 0, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool leaving proximity */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (sc->sc_tool_id[0]) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pos_events_graphire(usbwcmp, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_tool[0] == BTN_TOOL_MOUSE)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_mouse_events_graphire(usbwcmp, 0, 0, 0, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China else
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pen_events_graphire(usbwcmp, 0, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_graphire(usbwcmp, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Finger on pad: Graphire4 */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if ((sc->sc_type->protocol == GRAPHIRE4) && PACKET_BITS(7, 3, 5)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[1] = TOOL_ID_PAD;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pad_events_graphire4(usbwcmp, PACKET_BIT(7, 6), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BIT(7, 7), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(7, 3, 2) - (PACKET_BIT(7, 5) << 2), 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Finger on pad: MyOffice */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if ((sc->sc_type->protocol == MYOFFICE) &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BITS(7, 3, 4) || PACKET_BITS(8, 0, 8))) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[1] = TOOL_ID_PAD;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pad_events_graphire4(usbwcmp, PACKET_BIT(7, 3),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BIT(7, 4), PACKET_BIT(7, 5), PACKET_BIT(7, 6), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(8, 0, 7));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Finger leaving pad */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (sc->sc_tool_id[1]) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[1] = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pad_events_graphire4(usbwcmp, 0, 0, 0, 0, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pos_events_intuos(usbwcm_state_t *usbwcmp, int x, int y, int distance)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_X, x);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_Y, y);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_DISTANCE, distance);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pen_events_intuos(usbwcm_state_t *usbwcmp, uint8_t *packet)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int press, tilt_x, tilt_y, stl1, stl2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_type->protocol) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China press = PACKET_BITS(7, 6, 10) << 1 | PACKET_BIT(1, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China press = PACKET_BITS(7, 6, 10);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China tilt_x = PACKET_BITS(8, 7, 7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China tilt_y = PACKET_BITS(8, 0, 7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China stl1 = PACKET_BIT(1, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China stl2 = PACKET_BIT(1, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_PRESSURE, press);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_TILT_X, tilt_x);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_TILT_Y, tilt_y);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_TIP, press);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_STYLUS_1, stl1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_STYLUS_2, stl2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_mouse_events_intuos(usbwcm_state_t *usbwcmp, uint8_t *packet)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int left, middle, right, extra, side, wheel;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_type->protocol) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China left = PACKET_BIT(6, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China middle = PACKET_BIT(6, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China right = PACKET_BIT(6, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China side = PACKET_BIT(6, 3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China extra = PACKET_BIT(6, 4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China wheel = PACKET_BIT(7, 7) - PACKET_BIT(7, 6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China left = PACKET_BIT(8, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China middle = PACKET_BIT(8, 3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China right = PACKET_BIT(8, 4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China extra = PACKET_BIT(8, 5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China side = PACKET_BIT(8, 6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China wheel = PACKET_BIT(8, 0) - PACKET_BIT(8, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_LEFT, left);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MIDDLE, middle);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_RIGHT, right);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_EXTRA, extra);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_SIDE, side);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_REL, REL_WHEEL, wheel);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_tool_events_intuos(usbwcm_state_t *usbwcmp, int idx, int proximity)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, sc->sc_tool[idx], proximity);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_MISC, sc->sc_tool_id[idx]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_MSC, MSC_SERIAL, sc->sc_serial[idx]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_SYN, SYN_REPORT, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_pad_events_intuos(usbwcm_state_t *usbwcmp, uint8_t *packet)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int b0, b1, b2, b3, b4, b5, b6, b7;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int rx, ry, prox;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int b8, whl, rot;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_type->protocol) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b7 = PACKET_BIT(3, 6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b8 = PACKET_BIT(3, 7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_7, b7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_8, b8);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b0 = PACKET_BIT(2, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b1 = PACKET_BIT(3, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b2 = PACKET_BIT(3, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b3 = PACKET_BIT(3, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b4 = PACKET_BIT(3, 3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b5 = PACKET_BIT(3, 4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b6 = PACKET_BIT(3, 5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_0, b0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_1, b1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_2, b2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_3, b3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_4, b4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_5, b5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_6, b6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China whl = PACKET_BIT(1, 7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (whl) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China rot = PACKET_BITS(1, 0, 7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_WHEEL, rot);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China prox = b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8 | whl;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_intuos(usbwcmp, 1, prox);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b0 = PACKET_BIT(5, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b1 = PACKET_BIT(5, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b2 = PACKET_BIT(5, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b3 = PACKET_BIT(5, 3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b4 = PACKET_BIT(6, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b5 = PACKET_BIT(6, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b6 = PACKET_BIT(6, 2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China b7 = PACKET_BIT(6, 3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China rx = PACKET_BITS(2, 0, 13);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ry = PACKET_BITS(4, 0, 13);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_0, b0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_1, b1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_2, b2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_3, b3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_4, b4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_5, b5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_6, b6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_BTN, BTN_MISC_7, b7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_RX, rx);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_RY, ry);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China prox = b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | rx | ry;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_intuos(usbwcmp, 1, prox);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_input_intuos(usbwcm_state_t *usbwcmp, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uint8_t *packet = mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (PACKET_BITS(0, 0, 8)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x02:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (PACKET_BITS(1, 5, 2)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool entering proximity */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x2:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = PACKET_BITS(3, 4, 12);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_serial[0] =
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BIT(1, 1) ? PACKET_BITS(7, 4, 32) : 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_tool_id[0]) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x802: /* Intuos4 Grip Pen */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x804: /* Intuos4 Art Marker */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x823: /* Intuos3 Grip Pen */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x885: /* Intuos3 Art Marker */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_PEN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x80a: /* Intuos4 Grip Pen eraser */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x82b: /* Intuos3 Grip Pen eraser */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_ERASER;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x017: /* Intuos3 2D mouse */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x806: /* Intuos4 2D mouse */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_MOUSE;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "unknown tool ID %03x seen\n",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[0] = BTN_TOOL_PEN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool leaving proximity */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x0:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pos_events_intuos(usbwcmp, 0, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_tool[0] == BTN_TOOL_MOUSE)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_mouse_events_intuos(usbwcmp, packet);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China else
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pen_events_intuos(usbwcmp, packet);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[0] = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_intuos(usbwcmp, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool motion, outbound */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x1:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Outbound tracking is unreliable on the Cintiq */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sc->sc_type->protocol == CINTIQ)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Tool motion */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x3:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pos_events_intuos(usbwcmp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BITS(3, 0, 16) << 1) | PACKET_BIT(9, 1),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (PACKET_BITS(5, 0, 16) << 1) | PACKET_BIT(9, 0),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(9, 2, 6));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (PACKET_BITS(1, 3, 2) == 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pen_events_intuos(usbwcmp, packet);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (PACKET_BITS(1, 1, 4) == 0x5) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int angle = 450 - PACKET_BITS(7, 6, 10);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (PACKET_BIT(7, 5)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China angle = (angle > 0 ? 900 : -900) -
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China angle;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_event(usbwcmp, EVT_ABS, ABS_Z, angle);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (PACKET_BITS(1, 1, 4) == 0x8) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_mouse_events_intuos(usbwcmp, packet);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "unsupported motion packet type %x "
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "received\n", PACKET_BITS(1, 1, 4));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_tool_events_intuos(usbwcmp, 0, 1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case 0x0c:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_pad_events_intuos(usbwcmp, packet);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL, usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "unknown report type %02x received\n",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China PACKET_BITS(0, 0, 8));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_abs(usbwcm_state_t *usbwcmp, int axis, int32_t min, int32_t max,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int32_t fuzz, int32_t flat)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs[axis].min = min;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs[axis].max = max;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs[axis].fuzz = fuzz;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs[axis].flat = flat;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_graphire4(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_MSC);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TOOL_PAD);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[4], MSC_SERIAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[1] = BTN_TOOL_PAD;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_serial[1] = SERIAL_PAD_GRAPHIRE4;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_myoffice(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_WHEEL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_WHEEL, 0, 71, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_intuos(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_MSC);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_3);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_SIDE);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_EXTRA);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TOOL_PAD);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_TILT_X);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_TILT_Y);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[4], MSC_SERIAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool[1] = BTN_TOOL_PAD;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_tool_id[1] = TOOL_ID_PAD;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_serial[1] = SERIAL_PAD_INTUOS;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_intuos3(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_Z);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_RX);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_Z, -900, 899, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_RX, 0, 4096, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_intuos3_large(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_RY);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_RY, 0, 4096, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_intuos4(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_4);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_5);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_6);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_Z);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_Z, -900, 899, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init_intuos4_large(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_7);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MISC_8);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinauwacom_init(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_id.bus = ID_BUS_USB;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_id.vendor = usbwcmp->usbwcm_devid.VendorId;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_id.product = usbwcmp->usbwcm_devid.ProductId;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_id.version = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China for (int i = 0; i < EVT_USED; ++i)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_bm[i] = kmem_zalloc(bm_size[i], KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_btn = kmem_zalloc(BTN_USED * sizeof (int), KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc->sc_abs = kmem_zalloc(ABS_USED * sizeof (struct event_abs_axis),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_SYN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_BTN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_REL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[0], EVT_ABS);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_LEFT);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_RIGHT);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_MIDDLE);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TOOL_PEN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TOOL_ERASER);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TOOL_MOUSE);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_TIP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_STYLUS_1);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[1], BTN_STYLUS_2);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[2], REL_WHEEL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_X);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_Y);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_PRESSURE);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_DISTANCE);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China BM_SET_BIT(sc->sc_bm[3], ABS_MISC);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_X, 0, sc->sc_type->x_max, 4, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_Y, 0, sc->sc_type->y_max, 4, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_PRESSURE, 0, sc->sc_type->pressure_max,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_abs(usbwcmp, ABS_DISTANCE, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_protocols[sc->sc_type->protocol].distance_max, 0, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_type->protocol) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case CINTIQ:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS3L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos3_large(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS3S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos3(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos4_large(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos4(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_intuos(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case MYOFFICE:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_myoffice(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case GRAPHIRE4:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uwacom_init_graphire4(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*FALLTHRU*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case GRAPHIRE:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_match() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Match device with it's parameters.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic const struct uwacom_type *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_match(uint16_t vid, uint16_t pid)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China const struct uwacom_type *dev;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China dev = uwacom_devs;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China while (dev->devno.vid != 0 && dev->devno.pid != 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (dev->devno.vid == vid && dev->devno.pid == pid) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (dev);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China dev++;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (NULL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_probe() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Check the device type and protocol.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_probe(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China queue_t *q = usbwcmp->usbwcm_rq;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *mctl_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk mctlmsg;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China hid_req_t *featr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* check device IDs */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_cmd = HID_GET_VID_PID;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_count = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctl_ptr = usba_mk_mctl(mctlmsg, NULL, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mctl_ptr == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (ENOMEM);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(usbwcmp->usbwcm_wq, mctl_ptr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags |= USBWCM_QWAIT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China while (usbwcmp->usbwcm_flags & USBWCM_QWAIT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (qwait_sig(q) == 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EINTR);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_softc.sc_type =
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_match(usbwcmp->usbwcm_devid.VendorId,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_devid.ProductId);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (!usbwcmp->usbwcm_softc.sc_type) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL, usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "unsupported tablet model\n");
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (ENXIO);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (uwacom_init(usbwcmp) != 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (ENXIO);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* set feature: tablet mode */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr = kmem_zalloc(sizeof (hid_req_t), KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_version_no = HID_VERSION_V_0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_wValue = REPORT_TYPE_FEATURE | 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_wLength = sizeof (uint8_t) * 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_data[0] = 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_data[1] = 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_cmd = HID_SET_REPORT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_count = sizeof (featr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctl_ptr = usba_mk_mctl(mctlmsg, featr, sizeof (hid_req_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mctl_ptr != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(usbwcmp->usbwcm_wq, mctl_ptr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Waiting for response of HID_SET_REPORT
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * mctl for setting the feature.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags |= USBWCM_QWAIT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China while (usbwcmp->usbwcm_flags & USBWCM_QWAIT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qwait(q);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL, usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "enable tablet mode failed\n");
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(featr, sizeof (hid_req_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_copyreq() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * helper function for usbwcm ioctls
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_copyreq(mblk_t *mp, uint_t pvtsize, uint_t state, uint_t reqsize,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China uint_t contsize, uint_t copytype)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_copyin_t *copystat;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *iocmp, *contmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct copyreq *cq;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct copyresp *cr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if ((pvtsize == 0) && (state != 0)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cr = (struct copyresp *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocmp = cr->cp_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq = (struct copyreq *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EINVAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_addr = *((caddr_t *)mp->b_cont->b_rptr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_size = reqsize;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_flag = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (pvtsize) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocmp = (mblk_t *)allocb(pvtsize, BPRI_MED);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (iocmp == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EAGAIN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_private = iocmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocmp = cq->cq_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Here we need to set cq_private even if there's
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * no private data, otherwise its value will be
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * TRANSPARENT (-1) on 64bit systems because it
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * overlaps iocp->ioc_count. If user address (cq_addr)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * is invalid, it would cause panic later in
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_copyin:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * freemsg((mblk_t *)copyresp->cp_private);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_private = NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (state) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat = (usbwcm_copyin_t *)iocmp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat->state = state;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (pvtsize) { /* M_COPYIN */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat->addr = cq->cq_addr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_addr = copystat->addr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China cq->cq_private = iocmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocmp->b_wptr = iocmp->b_rptr + sizeof (usbwcm_copyin_t);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (contsize) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China contmp = (mblk_t *)allocb(contsize, BPRI_MED);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (contmp == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EAGAIN);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = contmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_datap->db_type = (unsigned char)copytype;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_wptr = mp->b_rptr + sizeof (struct copyreq);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_miocack(queue_t *q, mblk_t *mp, int rval)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk *iocbp = (struct iocblk *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_datap->db_type = M_IOCACK;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_wptr = mp->b_rptr + sizeof (struct iocblk);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp->ioc_error = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp->ioc_count = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp->ioc_rval = rval;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_iocpy() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * M_IOCDATA processing for IOCTL's
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_iocpy(queue_t *q, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp = (usbwcm_state_t *)q->q_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct copyresp *copyresp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_copyin_t *copystat;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *datap, *ioctmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk *iocbp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int err = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copyresp = (struct copyresp *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp = (struct iocblk *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copyresp->cp_rval) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EAGAIN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China goto out;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (copyresp->cp_cmd) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default: {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int num = copyresp->cp_cmd & 0xff;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int len = IOCPARM_MASK & (copyresp->cp_cmd >> 16);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (((copyresp->cp_cmd >> 8) & 0xFF) != 'E') {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(q, mp); /* pass it down the line */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if ((copyresp->cp_cmd & IOC_INOUT) != IOC_OUT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (num) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EUWACOMGETVERSION:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ioctmp = copyresp->cp_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat = (usbwcm_copyin_t *)ioctmp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copystat->state == USBWCM_GETSTRUCT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = (mblk_t *)mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *(int *)datap->b_rptr = 0x00010000;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT, sizeof (int), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYOUT)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China goto out;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (copystat->state == USBWCM_GETRESULT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(ioctmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_miocack(q, mp, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EUWACOMGETID:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ioctmp = copyresp->cp_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat = (usbwcm_copyin_t *)ioctmp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copystat->state == USBWCM_GETSTRUCT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = (mblk_t *)mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(&sc->sc_id, datap->b_rptr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_dev_id));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_dev_id), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYOUT)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China goto out;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (copystat->state == USBWCM_GETRESULT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(ioctmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_miocack(q, mp, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (num >= EUWACOMGETBM &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China num < EUWACOMGETBM + EVT_USED) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int idx = num - EUWACOMGETBM;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China size_t length = min(bm_size[idx], len);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ioctmp = copyresp->cp_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat = (usbwcm_copyin_t *)ioctmp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copystat->state == USBWCM_GETSTRUCT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = (mblk_t *)mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(sc->sc_bm[idx], datap->b_rptr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China length);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT, length, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYOUT)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China goto out;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (copystat->state ==
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(ioctmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_miocack(q, mp, length);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (num >= EUWACOMGETABS &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China num < EUWACOMGETABS + ABS_USED) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int idx = num - EUWACOMGETABS;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China ioctmp = copyresp->cp_private;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copystat = (usbwcm_copyin_t *)ioctmp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copystat->state == USBWCM_GETSTRUCT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = (mblk_t *)mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(&sc->sc_abs[idx], datap->b_rptr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_abs_axis));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_abs_axis), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYOUT)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China goto out;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (copystat->state ==
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETRESULT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(ioctmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_miocack(q, mp, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinaout:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_datap->db_type = M_IOCNAK;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (copyresp->cp_private) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg((mblk_t *)copyresp->cp_private);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China copyresp->cp_private = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp->ioc_count = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocbp->ioc_error = err;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_ioctl() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Process ioctls we recognize and own. Otherwise, NAK.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_ioctl(queue_t *q, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp = (usbwcm_state_t *)q->q_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *datap;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk *iocp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int err = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (usbwcmp == NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China miocnak(q, mp, 0, EINVAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp = (struct iocblk *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (iocp->ioc_cmd) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default: {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int num = iocp->ioc_cmd & 0xff;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int len = IOCPARM_MASK & (iocp->ioc_cmd >> 16);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (((iocp->ioc_cmd >> 8) & 0xFF) != 'E') {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(q, mp); /* pass it down the line */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if ((iocp->ioc_cmd & IOC_INOUT) != IOC_OUT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (num) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EUWACOMGETVERSION:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (iocp->ioc_count == TRANSPARENT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (usbwcm_copyin_t), USBWCM_GETSTRUCT,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (int), 0, M_COPYIN)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL ||
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_count != sizeof (int)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *(int *)datap->b_rptr = 0x00010000;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case EUWACOMGETID:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (iocp->ioc_count == TRANSPARENT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (usbwcm_copyin_t), USBWCM_GETSTRUCT,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_dev_id), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYIN)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL ||
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_count != sizeof (struct event_dev_id)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(&sc->sc_id, datap->b_rptr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_dev_id));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (num >= EUWACOMGETBM &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China num < EUWACOMGETBM + EVT_USED) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int idx = num - EUWACOMGETBM;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China size_t length = min(bm_size[idx], len);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (iocp->ioc_count == TRANSPARENT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (usbwcm_copyin_t),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETSTRUCT, length, 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYIN)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL ||
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_count != length) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(sc->sc_bm[idx], datap->b_rptr, length);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else if (num >= EUWACOMGETABS &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China num < EUWACOMGETABS + ABS_USED) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int idx = num - EUWACOMGETABS;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (iocp->ioc_count == TRANSPARENT) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err = usbwcm_copyreq(mp,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (usbwcm_copyin_t),
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USBWCM_GETSTRUCT,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_abs_axis), 0,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China M_COPYIN)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp->b_cont);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_cont = (mblk_t *)NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont == NULL ||
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_count !=
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_abs_axis)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China datap = mp->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(&sc->sc_abs[idx], datap->b_rptr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China sizeof (struct event_abs_axis));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China err = EINVAL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (err != 0)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China miocnak(q, mp, 0, err);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_rval = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp->ioc_error = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp->b_datap->db_type = M_IOCACK;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qreply(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* REMOVE */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_input() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Wacom input routine; process data received from a device and
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * assemble into a input event for the window system.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China *
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Watch out for overflow!
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_input(usbwcm_state_t *usbwcmp, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (sc->sc_type->protocol) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case GRAPHIRE:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case GRAPHIRE4:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case MYOFFICE:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_input_graphire(usbwcmp, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS3S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS3L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4S:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case INTUOS4L:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case CINTIQ:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_input_intuos(usbwcmp, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_flush() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Resets the soft state to default values
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * and sends M_FLUSH above.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_flush(usbwcm_state_t *usbwcmp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China queue_t *q;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if ((q = usbwcmp->usbwcm_rq) != NULL && q->q_next != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (void) putnextctl1(q, M_FLUSH, FLUSHR);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_mctl() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Handle M_CTL messages from hid. If
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * we don't understand the command, free message.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_mctl(queue_t *q, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp = (usbwcm_state_t *)q->q_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk *iocp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China caddr_t data = NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct iocblk mctlmsg;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *mctl_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China hid_req_t *featr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China iocp = (struct iocblk *)mp->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mp->b_cont != NULL)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China data = (caddr_t)mp->b_cont->b_rptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (iocp->ioc_cmd) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case HID_GET_VID_PID:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if ((data != NULL) &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (iocp->ioc_count == sizeof (hid_vid_pid_t)) &&
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (MBLKL(mp->b_cont) == iocp->ioc_count)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China bcopy(data, &usbwcmp->usbwcm_devid, iocp->ioc_count);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags &= ~USBWCM_QWAIT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case HID_CONNECT_EVENT:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* set feature: tablet mode */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr = kmem_zalloc(sizeof (hid_req_t), KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_version_no = HID_VERSION_V_0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_wValue = REPORT_TYPE_FEATURE | 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_wLength = sizeof (uint8_t) * 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_data[0] = 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China featr->hid_req_data[1] = 2;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_cmd = HID_SET_REPORT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctlmsg.ioc_count = sizeof (featr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mctl_ptr = usba_mk_mctl(mctlmsg, featr, sizeof (hid_req_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (mctl_ptr != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(usbwcmp->usbwcm_wq, mctl_ptr);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } else {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China USB_DPRINTF_L1(PRINT_MASK_ALL, usbwcm_log_handle,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "enable tablet mode failed\n");
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(featr, sizeof (hid_req_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case HID_SET_REPORT:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* FALLTHRU */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case HID_SET_PROTOCOL:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags &= ~USBWCM_QWAIT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* FALLTHRU */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_open() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * open() entry point for the USB wacom module.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*ARGSUSED*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_open(queue_t *q, dev_t *devp, int flag, int sflag, cred_t *credp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* Clone opens are not allowed */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (sflag != MODOPEN)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EINVAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* If the module is already open, just return */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (q->q_ptr) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* allocate usbwcm state structure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp = kmem_zalloc(sizeof (usbwcm_state_t), KM_SLEEP);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China q->q_ptr = usbwcmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China WR(q)->q_ptr = usbwcmp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_rq = q;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_wq = WR(q);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qprocson(q);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (usbwcm_probe(usbwcmp) != 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qprocsoff(q);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(usbwcmp, sizeof (usbwcm_state_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (EINVAL);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_flush(usbwcmp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags |= USBWCM_OPEN;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_close() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * close() entry point for the USB wacom module.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*ARGSUSED*/
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_close(queue_t *q, int flag, cred_t *credp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp = q->q_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qprocsoff(q);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (usbwcmp->usbwcm_bufcall) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China qunbufcall(q, (bufcall_id_t)(long)usbwcmp->usbwcm_bufcall);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_bufcall = 0;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (usbwcmp->usbwcm_mioctl != NULL) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * We were holding an "ioctl" response pending the
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * availability of an "mblk" to hold data to be passed up;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * another "ioctl" came through, which means that "ioctl"
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * must have timed out or been aborted.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(usbwcmp->usbwcm_mioctl);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_mioctl = NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China for (int i = 0; i < EVT_USED; i++)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(sc->sc_bm[i], bm_size[i]);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(sc->sc_btn, BTN_USED * sizeof (int));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(sc->sc_abs, ABS_USED * sizeof (struct event_abs_axis));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China kmem_free(usbwcmp, sizeof (usbwcm_state_t));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China q->q_ptr = WR(q)->q_ptr = NULL;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_wput() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * wput() routine for the wacom module.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Module below : hid, module above : consms
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic int
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_wput(queue_t *q, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (mp->b_datap->db_type) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_FLUSH: /* Canonical flush handling */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (*mp->b_rptr & FLUSHW) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China flushq(q, FLUSHDATA);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (*mp->b_rptr & FLUSHR) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China flushq(RD(q), FLUSHDATA);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(q, mp); /* pass it down the line. */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_IOCTL:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_ioctl(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_IOCDATA:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_iocpy(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(q, mp); /* pass it down the line. */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * usbwcm_rput() :
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Put procedure for input from driver end of stream (read queue).
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic void
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinausbwcm_rput(queue_t *q, mblk_t *mp)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_state_t *usbwcmp = q->q_ptr;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China struct uwacom_softc *sc = &usbwcmp->usbwcm_softc;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mblk_t *mp0 = mp;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int limit;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (usbwcmp == 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp); /* nobody's listening */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China switch (mp->b_datap->db_type) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_FLUSH:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (*mp->b_rptr & FLUSHW)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China flushq(WR(q), FLUSHDATA);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (*mp->b_rptr & FLUSHR)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China flushq(q, FLUSHDATA);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_BREAK:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * We don't have to handle this
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * because nothing is sent from the downstream
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_DATA:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (!(usbwcmp->usbwcm_flags & USBWCM_OPEN)) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp); /* not ready to listen */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /*
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China * Make sure there are at least "limit" number of bytes.
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China limit = uwacom_protocols[sc->sc_type->protocol].packet_size;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (MBLKL(mp0) == limit) { /* REMOVE */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China do {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* REMOVE */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_input(usbwcmp, mp0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China mp0 = mp0->b_cont;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China } while (mp0 != NULL); /* next block, if any */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China break;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_CTL:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_mctl(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China case M_ERROR:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China /* REMOVE */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcmp->usbwcm_flags &= ~USBWCM_QWAIT;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China freemsg(mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China default:
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China putnext(q, mp);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct module_info modinfo;
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* STREAMS entry points */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* read side queue */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct qinit rinit = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (int (*)())usbwcm_rput, /* put procedure not needed */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* service procedure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_open, /* called on startup */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_close, /* called on finish */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* for future use */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &modinfo, /* module information structure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL /* module statistics structure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* write side queue */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct qinit winit = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_wput, /* put procedure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* no service proecedure needed */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* open not used on write side */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* close not used on write side */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* for future use */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &modinfo, /* module information structure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL /* module statistics structure */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* STREAMS table */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct streamtab strtab = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &rinit,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &winit,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL, /* not a MUX */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL /* not a MUX */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* Module linkage information */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct fmodsw modsw = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "usbwcm",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &strtab,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China D_MP | D_MTPERMOD
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct modlstrmod modlstr = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &mod_strmodops,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "USB Wacom STRMOD",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &modsw
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct modlinkage modlink = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China MODREV_1,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China (void *)&modlstr,
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China NULL
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinastatic struct module_info modinfo = {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 0x0ffff, /* module id number */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China "usbwcm", /* module name */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 0, /* min packet size accepted */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China INFPSZ, /* max packet size accepted */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 512, /* hi-water mark */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China 128 /* lo-water mark */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China};
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China/* Module entry points */
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinaint
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China_init(void)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int rval = mod_install(&modlink);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (rval == 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usbwcm_log_handle = usb_alloc_log_hdl(NULL, "usbwcm",
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China &usbwcm_errlevel, &usbwcm_errmask, NULL, 0);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (rval);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinaint
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China_fini(void)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China int rval = mod_remove(&modlink);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China if (rval == 0) {
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China usb_free_log_hdl(usbwcm_log_handle);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China }
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (rval);
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing Chinaint
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China_info(struct modinfo *modinfop)
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China{
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China return (mod_info(&modlink, modinfop));
692d834dec3070f47507bc0f44d3d92620b49cfaPengcheng Chen - Sun Microsystems - Beijing China}