Interrupt transfers and xHCI question

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

 



I'm working on adding interrupt transfer support to the xHCI host
controller driver, and I'm having a slight problem with device drivers
that submit an URB with a different interval than the endpoint
advertises.

I have a couple questions about driver behavior:
 1. Do drivers ever submit their first URB in interrupt context?
 2. Do drivers that use a different interval than the endpoint
    advertises stick with the same interval when submitting new URBs?

I'm grepping my way through the device drivers, but I figured that
someone else might know off the top of their head.


The main problem with URB intervals that don't match the endpoint
interval is that xHCI doesn't have a frame list like EHCI.  Instead, the
host controller uses the interval specified in the endpoint context (a
host controller data structure set up by the xHCI driver) to schedule
transfers.  To change an interval for an endpoint, I have to issue a
command to the hardware and wait for it to complete.

That has two consequences:
 - the xHCI driver can't honor a different interval if the interrupt URB
   is submitted in interrupt context, and has to fall back on the
   interval in the last submitted URB.
 - I can't change the interrupt interval for a newly submitted URB if
   another URB is still on the hardware queue.  That would be racey, and
   the first URB may or may not be scheduled for the interval it asked
   for.

If drivers do submit their first interrupt URB in an interrupt context,
and they use a consistent interval, then I could make a USB core API to
set the interrupt interval for an endpoint and make those drivers call
it in their probe functions.  Thoughts?

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux