Bekijk de volledige versie : USB streaming woes

11-12-2006, 09:36
Hey folks!

I'm getting lots of:

Jan 1 01:06:02 kernel: usb-uhci.c: iso_find_start: gap in seamless isochronous scheduling

in my syslog.log. Some of these (error?) messages result in a gap in the sound output from my usb sound card connected to my wl500g-P. This is really annoying and I want to get rid of it. I've described my problem in some length here: http://wl500g.info/showthread.php?t=4150&page=3.

MatB had the same problem here: http://wl500g.info/showthread.php?t=3388&highlight=isochronous, but no solution was found.

What's causing this?

From what I can tell from the printout at http://www.charmed.com/txt/usb-uhci.txt, there seems to be some timeout going on? Would adjusting that 10ms limit help me out in any way? If so, how would I do it? :confused: Would using another kernel (i.e. switching to OpenWRT) help?

From the usb-uhci.txt:

// adjust start_frame according to scheduling constraints (ASAP etc)

_static int iso_find_start (urb_t *urb)
uhci_t *s = (uhci_t*) urb->dev->bus->hcpriv;
unsigned int now;
unsigned int start_limit = 0, stop_limit = 0, queued_size;
int limits;

now = UHCI_GET_CURRENT_FRAME (s) & 1023;

if ((unsigned) urb->number_of_packets > 900)
return -EFBIG;

limits = find_iso_limits (urb, &start_limit, &stop_limit);
queued_size = (stop_limit - start_limit) & 1023;

if (urb->transfer_flags & USB_ISO_ASAP) {
// first iso
if (limits) {
// 10ms setup should be enough //FIXME!
urb->start_frame = (now + 10) & 1023;
else {
urb->start_frame = stop_limit; //seamless linkage

if (((now - urb->start_frame) & 1023) <= (unsigned) urb->number_of_packets) {
info("iso_find_start: gap in seamless isochronous scheduling");
dbg("iso_find_start: now %u start_frame %u number_of_packets %u pipe 0x%08x",
now, urb->start_frame, urb->number_of_packets, urb->pipe);
urb->start_frame = (now + 5) & 1023; // 5ms setup should be enough //FIXME!
else {

Greatful for anything you guys can come up with!

16-12-2006, 01:41

Maybe a fault in the usb soundcard driver in the kernel, or in the usb core driver.
Did you tried olegs latest firmware (7f) with has now patches for the usb core driver on 500gp?

Of course you can try openwrt, but its in no way as userfriendly :D.