Date: Thu, 5 Jul 2007 00:47:41 GMT From: Rui Paulo <rpaulo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 122894 for review Message-ID: <200707050047.l650lflO067558@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122894 Change 122894 by rpaulo@rpaulo_epsilon on 2007/07/05 00:47:29 Rename the softc sms variables to include a proper prefix. Pointed out by: attilio Affected files ... .. //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmc.c#17 edit .. //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmcvar.h#8 edit .. //depot/projects/soc2007/rpaulo-macbook/dev/usb/atp.c#4 edit Differences ... ==== //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmc.c#17 (text+ko) ==== @@ -23,7 +23,7 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmc.c#16 $ + * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmc.c#17 $ * */ @@ -374,11 +374,11 @@ * interrupt. An interrupt from the SMS means that the * disk heads should be turned off as quickly as possible. */ - TASK_INIT(&sc->sms_task, 0, asmc_sms_task, sc); - sc->sms_tq = taskqueue_create_fast("asmc_taskq", M_WAITOK, - taskqueue_thread_enqueue, - &sc->sms_tq); - taskqueue_start_threads(&sc->sms_tq, 1, PI_REALTIME, "%s sms taskq", + TASK_INIT(&sc->sc_sms_task, 0, asmc_sms_task, sc); + sc->sc_sms_tq = taskqueue_create_fast("asmc_taskq", M_WAITOK, + taskqueue_thread_enqueue, + &sc->sc_sms_tq); + taskqueue_start_threads(&sc->sc_sms_tq, 1, PI_REALTIME, "%s sms taskq", device_get_nameunit(dev)); @@ -390,7 +390,7 @@ ASMC_IRQ, ASMC_IRQ, 1, RF_ACTIVE); if (sc->sc_res == NULL) { device_printf(dev, "unable to allocate IRQ resource\n"); - taskqueue_free(sc->sms_tq); + taskqueue_free(sc->sc_sms_tq); goto out; } @@ -424,9 +424,9 @@ sysctl_ctx_free(&sc->sc_sysctl_ctx); - if (sc->sms_tq) { - taskqueue_drain(sc->sms_tq, &sc->sms_task); - taskqueue_free(sc->sms_tq); + if (sc->sc_sms_tq) { + taskqueue_drain(sc->sc_sms_tq, &sc->sc_sms_task); + taskqueue_free(sc->sc_sms_tq); } if (sc->sc_cookie) @@ -796,9 +796,9 @@ type = inb(ASMC_INTPORT); mtx_unlock_spin(&sc->sc_mtx); - sc->sms_intrtype = type; + sc->sc_sms_intrtype = type; asmc_sms_printintr(dev, type); - taskqueue_enqueue(sc->sms_tq, &sc->sms_task); + taskqueue_enqueue(sc->sc_sms_tq, &sc->sc_sms_task); return (FILTER_HANDLED); } @@ -814,9 +814,9 @@ type = inb(ASMC_INTPORT); mtx_unlock_spin(&sc->sc_mtx); - sc->sms_intrtype = type; + sc->sc_sms_intrtype = type; asmc_sms_printintr(dev, type); - taskqueue_enqueue_fast(sc->sms_tq, &sc->sms_task); + taskqueue_enqueue_fast(sc->sc_sms_tq, &sc->sc_sms_task); } @@ -846,7 +846,7 @@ char notify[16]; int type; - switch (sc->sms_intrtype) { + switch (sc->sc_sms_intrtype) { case ASMC_SMS_INTFF: type = 0; break; ==== //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmcvar.h#8 (text+ko) ==== @@ -23,7 +23,7 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmcvar.h#7 $ + * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/asmc/asmcvar.h#8 $ * */ @@ -45,9 +45,9 @@ int sc_rid; struct resource *sc_res; void *sc_cookie; - int sms_intrtype; - struct taskqueue *sms_tq; - struct task sms_task; + int sc_sms_intrtype; + struct taskqueue *sc_sms_tq; + struct task sc_sms_task; }; struct asmc_model { ==== //depot/projects/soc2007/rpaulo-macbook/dev/usb/atp.c#4 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/usb/atp.c#3 $ + * $P4: //depot/projects/soc2007/rpaulo-macbook/dev/usb/atp.c#4 $ */ #include <sys/cdefs.h> @@ -71,6 +71,10 @@ static int atp_attach(device_t); static int atp_detach(device_t); +static int atp_enable(device_t); +static int atp_disable(device_t); +static void atp_intr(usbd_xfer_handle, usbd_private_handle, usbd_status); + /* * char device interface. */ @@ -93,7 +97,19 @@ struct atp_softc { device_t sc_dev; + int sc_enabled; + + u_char *sc_ibuf; + int sc_isize; + usbd_interface_handle sc_iface; /* interface */ + usbd_pipe_handle sc_intrpipe; /* interrupt pipe */ + int sc_ep_addr; + + mousehw_t hw; + mousemode_t mode; + mousestatus_t status; + struct cdev *dev; /* specfs */ }; static device_method_t atp_methods[] = { @@ -169,17 +185,116 @@ static int atp_attach(device_t self) { + struct atp_softc *sc = device_get_softc(self); + struct usb_attach_arg *uaa = device_get_ivars(self); + usbd_interface_handle iface = uaa->iface; + usb_interface_descriptor_t *id; + usb_endpoint_descriptor_t *ed; + usbd_status err; + int size; + void *desc; + uint32_t flags; + + + struct hid_location a; + + sc->sc_dev = self; + + id = usbd_get_interface_descriptor(iface); + ed = usbd_interface2endpoint_descriptor(iface, 0); + if (!ed) { + printf("%s: could not read endpoint descriptor\n", + device_get_nameunit(sc->sc_dev)); + return (ENXIO); + } + + if (UE_GET_DIR(ed->bEndpointAddress) != UE_DIR_IN || + UE_GET_XFERTYPE(ed->bmAttributes) != UE_INTERRUPT) { + printf("%s: unexpected endpoint\n", + device_get_nameunit(sc->sc_dev)); + return (ENXIO); + } + + err = usbd_read_report_desc(uaa->iface, &desc, &size, M_TEMP); + if (err) + return (ENXIO); + + hid_locate(desc, size, 1, hid_input, &a, &flags); + + /* Equal to ums(4). */ + sc->hw.iftype = MOUSE_IF_USB; + sc->hw.type = MOUSE_MOUSE; + sc->hw.model = MOUSE_MODEL_GENERIC; + sc->hw.hwid = 0; + sc->mode.protocol = MOUSE_PROTO_MSC; + sc->mode.rate = -1; + sc->mode.resolution = MOUSE_RES_UNKNOWN; + sc->mode.accelfactor = 0; + sc->mode.level = 0; + sc->mode.packetsize = MOUSE_MSC_PACKETSIZE; + sc->mode.syncmask[0] = MOUSE_MSC_SYNCMASK; + sc->mode.syncmask[1] = MOUSE_MSC_SYNC; + + sc->dev = make_dev(&atp_cdevsw, device_get_unit(self), + UID_ROOT, GID_OPERATOR, + 0644, "atp%d", device_get_unit(self)); + + return 0; } static int atp_detach(device_t self) { + struct atp_softc *sc = device_get_softc(self); + destroy_dev(sc->dev); + return 0; } +static void +atp_intr(usbd_xfer_handle xfer, usbd_private_handle addr, usbd_status status) +{ + + +} + +static int +atp_enable(device_t self) +{ + struct atp_softc *sc = device_get_softc(self); + usbd_status err; + + sc->sc_enabled = 1; + + err = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ep_addr, + USBD_SHORT_XFER_OK, &sc->sc_intrpipe, sc, + sc->sc_ibuf, sc->sc_isize, atp_intr, + USBD_DEFAULT_INTERVAL); + if (err) { + device_printf(self, "usb_open_pipe_intr failed with error=%d\n", + err); + sc->sc_enabled = 0; + return (EIO); + } + + return (0); +} + +static int +atp_disable(device_t self) +{ + struct atp_softc *sc = device_get_softc(self); + + /* Disable interrupts. */ + usbd_abort_pipe(sc->sc_intrpipe); + usbd_close_pipe(sc->sc_intrpipe); + + sc->sc_enabled = 0; +} + static int atp_open(struct cdev *dev, int flag, int fmt, struct thread *p) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707050047.l650lflO067558>