Hi
I have two questions regarding short transfers.
My questions are best illustrated by a scenario:
Lets say the Hosts Mass Storage driver wants to READ 12K:
I believe that the Host Controller driver (e.g. ehci_hcd) might see
something like this coming from usbcore:
1) BULK OUT urb (31 bytes) [Contains READ10 command]
2) BULK IN urb (4K) [data]
3) BULK IN urb (8K) [data]
4) BULK IN urb (13 bytes) [status]
I have two questions regarding what happens when the transfer gets
terminated early:
1) What happens if the device terminates the transfer after the 4KB
(with a zero-length packet)?
Does the HC driver...
- set status to 0 in the 4K urb (& actual_length=4096) and
- flush all other queued urbs for that EP (in this case the 8K urb) by
completing them with an error status ? If so what is the status ?
2) What happens if the device terminates the transfer during the 4KB
(after say 3700 bytes received, with a short packet)?
Thus:
urb->transfer_buffer_length = 4096
urb->actual_length = 3700
I believe that the HC driver should do the following test:
if( (urb->actual_length < urb->transfer_buffer_length) &&
(urb->transfer_flags & URB_SHORT_NOT_OK) )
urb->status = -EREMOTEIO;
So if URB_SHORT_NOT_OK is set then -EREMOTEIO will be returned And if
URB_SHORT_NOT_OK is not set the 0 will be returned.
Is this correct ?
Again I assume that the 8K urb should be completed immediately ?
If so with what status ?
I'm having trouble understand the EHCI code; In the EHCI driver where
are these situation handled ? qh_completions() ?
Thank you for your time
regards
dom
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel