On Fri, 8 Feb 2008 10:48:54 -0500 (EST)
Alan Stern <[EMAIL PROTECTED]> wrote:
> On Fri, 8 Feb 2008, Mauro Carvalho Chehab wrote:
>
> > Hi Guys,
> >
> > There's currently an issue with isoc transfers made by em28xx driver[1] and
> > ehcd_hci. If I try to start isoc transfers on more than one hardware, the
> > second hardware fails at usb_submit_urb() with -ENOSPC.
>
> ENOSPC means that you are attempting to use more bandwidth than the bus
> allows. A high-speed isochronous transfer of length 3072 requires 41%
> of the total bandwidth (according to Table 5-5 in the USB 2.0 spec),
> and periodic transfers (isochronous and interrupt) on a high-speed bus
> are limited to no more than 80% of the total bandwidth.
>
> Performing transfers to two devices would require 82% of the bandwidth;
> hence it isn't allowed.
Thanks! I'll try to decrease the transfer length, using an alternative setting.
> > urb->transfer_flags = URB_ISO_ASAP;
>
> Since you have set urb->transfer_dma, you also need to set
> URB_NO_TRANSFER_DMA_MAP in urb->flags.
Added, thanks.
>
> > urb->interval = 1;
> > urb->transfer_buffer = dev->transfer_buffer[i];
> > urb->complete = em28xx_isocIrq;
> > urb->number_of_packets = 40;
> > urb->transfer_buffer_length = size;
> > for (j = 0; j < 40; j++)
> > urb->iso_frame_desc[j].offset = j * max_pkt_size;
>
> Where do you set urb->iso_frame_desc[i].length?
I've accidentally removed the code when cleaning the e-mail. The real code is
doing:
urb->iso_frame_desc[j].offset = max_pkt_size;
> You may need to put your two devices on separate USB buses.
Thanks. The tests I'm doing are on a notebook. Unfortunately, all 4 usb ports
shares the same USB host. I'll repeat the tests on a device with separate usb
hosts.
Cheers,
Mauro
-
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html