[alsa-devel] Use of start_frame in usbusx2yaudio.c

Clemens Ladisch clemens at ladisch.de
Wed May 12 14:51:52 CEST 2010


Sarah Sharp wrote:
> Are there any drivers in the kernel that set urb->start_frame on every
> URB?
> 
> Could those drivers handle it if only the first URB they submitted to
> the host controller was scheduled for that frame ID, and all the rest of
> the URBs were scheduled ASAP?
> 
> I see there are three drivers that set start_frame (while not setting
> URB_ISO_ASAP):
>  - drivers/isdn/hisax/st5481_d.c
>  - drivers/usb/core/devio.c
>  - sound/usb/usx2y/usbusx2yaudio.c
> 
> I'm not really sure what usbusx2yaudio.c is doing.  I think when one URB
> completes, it sets the next URB's start_frame to the previous URB's
> start_frame plus the number of URBs (2 by default) times the number of
> packets (4 by default).  Isn't this basically like setting URB_ISO_ASAP?

For an audio driver, anything except ASAP (or the equivalent computation)
would not make sense because then there would be a gap in the audio
output.

> What is usbusx2yaudio.c attempting to do?  I've tried to get an overall
> picture of what it expects the isochronous scheduling to look like, but
> I'm finding the driver a bit hard to read.

AFAIK it just wants a continuous stream of packets, like the other
audio drivers.

> I really can't tell what fall back method is if this submission fails.

So I guess xHCI does not support start_frame?  A few other, seldom-used
HC drivers get away with silently ignoring start_frame:

ohci-hcd.c:             /* yes, only URB_ISO_ASAP is supported, and
                         * urb->start_frame is never used as input.
                         */
ehci-sched.c: /* NOTE: assumes URB_ISO_ASAP, to limit complexity/bugs */
 

Regards,
Clemens


More information about the Alsa-devel mailing list