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