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.

The current code that initializes isoc transfers looks like this (I've removed
error handling and replaced some constants to make it cleaner to read):

        max_pkt_size = 3072;
        size = 40 * max_pkt_size;
        for (i = 0; i < 5; i++) {
                urb = usb_alloc_urb(40, GFP_KERNEL);
                dev->transfer_buffer[i] = usb_buffer_alloc(usb_dev, size, 
GFP_KERNEL, &urb->transfer_dma);

                memset(dev->transfer_buffer[i], 0, size);
                urb->dev = usb_udev;
                urb->context = v4l_dev;
                urb->pipe = usb_rcvisocpipe(usb_dev, 0x82);
                urb->transfer_flags = URB_ISO_ASAP;
                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;
                dev->urb[i] = urb;
        }

        for (i = 0; i < 5; i++)
                usb_submit_urb(dev->urb[i], GFP_KERNEL);

Any ideas on how this could work?

[1] The complete code is at:
http://linuxtv.org/hg/v4l-dvb/file/3be355e3e327/linux/drivers/media/video/em28xx/em28xx-core.c

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

Reply via email to