Hi everybody,

        The USB stack is driving me nuts. I've found that changing the
transmit buffer from one place to another make the USB transfer
succedd or fail. This is absolutely crazy, so I would like someone to
explain me what's happening...

        Context :
        o kernel 2.4.2
        o usb-uhci
        o irda-usb

        The code look like this :
-----------------------------------------------
#define IRDA_USB_SPEED_MTU 128
#define USB_IRDA_HEADER   0x01

struct irda_usb_cb {
...
        char *speed_buff;               /* Buffer for speed changes */
        char spd_buff[IRDA_USB_SPEED_MTU];      /* Buffer for speed changes */
...
}

static int irda_usb_open(struct irda_usb_cb *self)
{
...
        self->speed_buff = (__u8 *) kmalloc(IRDA_USB_SPEED_MTU, GFP_KERNEL);
        memset(self->speed_buff, 0, IRDA_USB_SPEED_MTU);
        memset(self->spd_buff, 0, IRDA_USB_SPEED_MTU);
...
}

static void irda_usb_change_speed_xbofs(struct irda_usb_cb *self)
{
        __u8 *frame;
...
        frame = self->spd_buff;
        frame = self->speed_buff;       /* ### Line to comment ### */
        frame[0] = new_speed;

        FILL_BULK_URB(purb, self->usbdev,
                      usb_sndbulkpipe(self->usbdev, self->bulk_out_ep),
                      frame, IRDA_USB_SPEED_MTU,
                      speed_bulk_callback, self);
        purb->transfer_buffer_length = USB_IRDA_HEADER;
        purb->transfer_flags = USB_QUEUE_BULK;
        purb->timeout = MSECS_TO_JIFFIES(100);

        usb_submit_urb(purb);
}
-----------------------------------------------

        As it is above, the code works perfectly, and I never have any
trouble. Perfect.
        If I just comment the line mentioned above (all the rest
beeing equal), the callback is never called and after one full second
the transfer is still in progress (-115) and I have to cancel it. Any
subsequent retry also fail and I can never manage to get anything
through to the dongle.
        Of course, between each try, I restart fully the USB and the
IrDA stack. And guess what, it's 100% reproductible.

        This is beyond my comprehension. I'm open to suggestions...

        Jean

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to