On Fri, 22 Mar 2002, Jean Tourrilhes wrote: > I was quickly scanning the BlueZ mail archive and found a few > comments regarding the support of Zero Packet with uhci.c. Johannes, > that is mostly for you ;-) > [...] > Know that at least somebody else has reporduce my problem with > a different harware and driver, I feel a bit better saying that there > must be a bug in uhci.c. [...] > uhci.c: f000: host controller process error. something bad happened
Yep, getting this too, with 2.5.7 on i82371. I've tried with your recent ir257_usb_disconnect_atomic patch applied and the box locked up really serious after the above error - which might be some secondary irda-usb issue. Anyway, for the HC processing error I'd like to point into the uhci direction. The good news however is, I think I've identified the cause in uhci's handling of USB_ZERO_PACKET. Patch below is the same I've just sent to the bluetooth thread where the same issue was reported. Jean, this solves the host controller processing error - but irda-usb is still not happy with it, apparently a number of tx transfers are just hanging and the dongle doesn't work. Despite it is working with usb-uhci, I don't think this is another uhci issue - simply because I don't see this problem with uhci and my alternative usb-irda approach I'm currently trying to create. But this one has still other fatal problems with both uhci, so I think it's not (yet) ready to give it a try. Martin ------------------------ --- linux-2.5.7/drivers/usb/uhci.c Sun Mar 10 03:45:21 2002 +++ v2.5.7-md/drivers/usb/uhci.c Sun Mar 24 23:20:35 2002 @@ -1270,14 +1270,21 @@ usb_pipeout(urb->pipe)); } while (len > 0); - if (usb_pipeout(urb->pipe) && (urb->transfer_flags & USB_ZERO_PACKET) && - urb->transfer_buffer_length) { + /* USB_ZERO_PACKET means adding a 0-length packet, if + * direction is OUT and the transfer_length was an + * exact multiple of maxsze, hence + * (len = transfer_length - N * maxsze) == 0 + * however, if transfer_length==0, the zero packet + * was already prepared above. + */ + if ((urb->transfer_flags&USB_ZERO_PACKET) && usb_pipeout(urb->pipe) + && len==0 && urb->transfer_buffer_length>0) { td = uhci_alloc_td(uhci, urb->dev); if (!td) return -ENOMEM; uhci_add_td_to_urb(urb, td); - uhci_fill_td(td, status, destination | UHCI_NULL_DATA_SIZE | + uhci_fill_td(td, status, destination | (UHCI_NULL_DATA_SIZE<<21) | (usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe)) << TD_TOKEN_TOGGLE), data); _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel