... or at least deserving of deletion in the 2.5 series. For starters, it's always been superfluous. "audio.c" has always done ISO streaming without using urb->next. It just queues a bunch of ISO urbs, and the completion handler resubmits them
Here's how the ISO transfers are handled today by device drivers
that use urb->next:
- Prepare a bunch of ISO urbs
- Set them up in a ring using urb->next
- Queue all the driver's ISO URBs at once
Host controller drivers, after issuing urb->complete for an ISO
urb with an urb->next value:
- Make sure the ring isn't broken (*)
- If not, resubmit the URB (**)
- Swallow all errors
(*) There are some minor differences in how the HCDs do this
check. Some have ring size limits, some don't insist on
having a ring. Portable drivers don't rely on such differences.
(**) This isn't like the interrupt case, which can get lots of short
circuiting.
PROBLEMS with that current scheme include:
- Clearly the urb->next is superfluous. The real work
is queuing ISO urbs (like for bulk, and often control).
- Swallowing errors is an evil principle. Better to have
clean reporting paths.
- Having that second mechanism for URB queuing has
just confused new developers.
- Those HCD differences aren't current problems, but
they should still go away.
- Removing urb->next support would simplify the host
controller drivers.
> It sounds like we should probably move some of the checks from
> hcd_submit_urb into usb_submit_urb so they cover all of the HCD's?
Ideally, _all_ of the checks would move. The ONLY trouble spots I know
of today relate to ISO.
My proposal is as follows:
- Drivers should stop using urb->next, and should instead
just re-queue ISO urbs in their completion handlers. They
can then at least detect the resubmit errors that would be
swallowed today.
- At the same time they should change to init urb->interval
correctly.
- In usbcore, delete the urb->next field. And make all the
HCDs stop using it.
- At some point move the hcd_submit_urb logic
into usb_submit_urb, geting rid of that particular
entry point in the hcd layer. (That will let the "old
style" hcds get rid of many/most submit-path error
checks ... roughly at the same time they start to
use urb->interval for iso.)
Right now, HCDs using hcd_submit_urb() will report errors if
there are urb->next values, or urb->interval isn't set.
So far as I know, these change would only affect the USB vide
drivers -- audio behaves already -- and the "old style" HCD.
("ohci-hcd" is set already.)
So you can see how small the effect on device drivers is, I
attach a patch showing how to make the 2.4 version of
"cpia_usb" work this way. (I've got a 2.5 version too, but
nobody would see that work because of the other issues
preventing USB video from working on 2.5 ... :)
- Dave
cpia24-0513.patch
Description: Binary data
