stf_xl at wp.pl
Thu Nov 17 12:15:59 EST 2005
> On iso urb error status isn't keep in urb->status variable,
> it's in iso_frame_dest[i].status for every frame and (AFAIK) urb->status
> is equal to -EILSEQ allways. So to proper driver work in iso mode
> Matthieu condition change in usbatm_complete() is needed.
Hi all, hi Duncan, as you will work tomorrow on driver please take
into account iso support too.
I tried to take more deeply look at urb->status in iso mode.
Of course I was wrong telling urb->status is equal -EILSEQ
allways, it's only quite frequency situation on uhci host controller
(which I have on my machine). After my investigation on uhci driver code,
seems urb->status is equal last non zero iso_frame_desc[i].status or zero.
Eg: if all frames are ok there usb->status is 0. In iso mode if reserved bandwitch
is greater then real bandwitch, there are incoming frames without any data
and such with EILSEQ error. This is the reason why on uhci there
are lot of urb->status == -EILSEQ.
Otherwise situation is on ohci HCD where urb->status is allways 0
on isoc urb.
Generally it's not clear urb->status should be ignored on isoc urb
or not, in my opinion it should be ignored and something like this
is needed on usbatm_complete():
if (usb_pipebulk(urb->pipe) && unlikely(urb->status))
mod_timer(&channel->delay, jiffies + msecs_to_jiffies(THROTTLE_MSECS));
More information about the Usbatm