[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Patch RFC 2/4] usb: add flag to USBPacket to request complete callback after isoc transfer

On 07/17/2015 10:12 AM, Gerd Hoffmann wrote:
On Do, 2015-07-16 at 17:47 +0200, Juergen Gross wrote:
In order to avoid having to poll for the result of an iso transfer
add the possibility to request the "complete" callback which is being
used for bulk transfers as well.

Sorry for the late notice (didn't do much usb coding recently and forgot
about it):  We actually _have_ a notification mechanism already:
usb_wakeup(USBEndpoint *ep, int streamid). That will trigger a
USBPortOps->wakeup callback in the host adapter emulation.

So, the usb-host change should be as simple as this:

--- a/hw/usb/host-libusb.c
+++ b/hw/usb/host-libusb.c
@@ -451,6 +451,7 @@ static void usb_host_req_complete_iso(struct
libusb_transfer *transfer)
      if (xfer->ring->ep->pid == USB_TOKEN_IN) {
          QTAILQ_INSERT_TAIL(&xfer->ring->copy, xfer, next);
+        usb_wakeup(xfer->ring->ep, 0);
      } else {
          QTAILQ_INSERT_TAIL(&xfer->ring->unused, xfer, next);

Hmm, I can see the benefit of this call to avoid polling.

OTOH I don't see how to find the packages already processed via this
mechanism. To help in my case I'd need:

- the call being made in the else clause
- some way to have a package reference in the endpoint (assuming
  to use the bus .endpoint_wakeup callback which is called by
  usb_wakeup(), too).
  The problem here is that host-libusb.c would call usb_wakeup()
  not for each packet, but for each libusb I/O, which is combining
  multiple packets given to usb_handle_packet().


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.