Module Name: src Committed By: jmcneill Date: Fri Jan 11 18:52:39 UTC 2013
Modified Files: src/sys/dev/usb: dwc_otg.c Log Message: run repeat intr xfers in the workq To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/dev/usb/dwc_otg.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/dwc_otg.c diff -u src/sys/dev/usb/dwc_otg.c:1.9 src/sys/dev/usb/dwc_otg.c:1.10 --- src/sys/dev/usb/dwc_otg.c:1.9 Fri Jan 11 13:48:46 2013 +++ src/sys/dev/usb/dwc_otg.c Fri Jan 11 18:52:38 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: dwc_otg.c,v 1.9 2013/01/11 13:48:46 skrll Exp $ */ +/* $NetBSD: dwc_otg.c,v 1.10 2013/01/11 18:52:38 jmcneill Exp $ */ /*- * Copyright (c) 2012 Hans Petter Selasky. All rights reserved. @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dwc_otg.c,v 1.9 2013/01/11 13:48:46 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dwc_otg.c,v 1.10 2013/01/11 18:52:38 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1507,7 +1507,8 @@ dwc_otg_device_intr_close(usbd_pipe_hand Static void dwc_otg_device_intr_done(usbd_xfer_handle xfer) { - //struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private; + struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer; + struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private; DPRINTF("\n"); #if 0 @@ -1515,12 +1516,6 @@ dwc_otg_device_intr_done(usbd_xfer_handl #endif if (xfer->pipe->repeat) { - - //if (xfer->timeout && !sc->sc_bus.use_polling) { - // callout_reset(&xfer->timeout_handle, - // mstohz(xfer->timeout), dwc_otg_timeout, xfer); - //} - /* XXX JDM */ dwc_otg_xfer_end(xfer); dwc_otg_xfer_setup(xfer); @@ -1528,8 +1523,12 @@ dwc_otg_device_intr_done(usbd_xfer_handl xfer->actlen = 0; xfer->status = USBD_IN_PROGRESS; dwc_otg_setup_intr_chain(xfer); - dwc_otg_start_standard_chain(xfer); - + if (sc->sc_bus.use_polling) { + dwc_otg_start_standard_chain(xfer); + } else { + workqueue_enqueue(sc->sc_wq, + (struct work *)&dxfer->work, NULL); + } } else { dwc_otg_xfer_end(xfer); }