... 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