Solaris DDI specific (Solaris DDI)
If an error occurs during execution of a USB request, the USBA framework calls a client driver's exception callback handler to relay what happened. The host controller reports transport errors to the exception callback handler through the handler's request argument's completion reason (usb_cr_t) field. A completion reason of USB_CR_OK means the transfer completed with no errors detected.
The usb_cr_t enumerated type contains the following definitions:
The transfer completed without any errors being detected.
CRC error was detected.
Bit stuffing violation was detected.
Data toggle packet identifier did not match expected value.
The device endpoint indicated that it is stalled. If autoclearing is enabled for the request (request attributes has USB_ATTRS_AUTOCLEARING set), check the callback flags (usb_cb_flags_t) in the callback handler to determine whether the stall is a functional stall (USB_CB_FUNCTIONAL_STALL) or a protocol stall (USB_CB_PROTOCOL_STALL). Please see usb_request_attributes(9S) for more information on autoclearing.
Host controller timed out while waiting for device to respond.
Check bits on the packet identifier returned from the device were not as expected.
Packet identifier received was not valid.
Amount of data returned exceeded either the maximum packet size of the endpoint or the remaining buffer size.
Amount of data returned was not sufficient to fill the specified buffer and the USB_ATTRS_SHORT_XFER_OK attribute was not set. Please see usb_request_attributes(9S) for more information on allowance of short transfers.
A device sent data faster than the system could digest it.
The host controller could not get data from the system fast enough to keep up with the required USB data rate.
A timeout specified in a control, bulk, or one-time interrupt request has expired.
Request was not accessed nor processed by the host controller.
No resources were available to continue servicing a periodic interrupt or isochronous request.
Servicing of the current periodic request cannot continue because polling on an interrupt-IN or isochronous-IN endpoint has stopped.
Request was not started because the pipe to which it was queued was closing or closed.
Request was not started because the pipe to which it was queued was reset.
Request or command is not supported.
Request was not completed because the pipe to which it was queued went to an error state, became stalled, was reset or was closed.
Request could not be completed due to a general host controller hardware error.
See attributes(5) for descriptions of the following attributes:
usb_alloc_request(9F), usb_pipe_bulk_xfer (9F), usb_pipe_ctrl_xfer(9F), usb_pipe_intr_xfer(9F), usb_pipe_isoc_xfer(9F), usb_bulk_request(9S), usb_ctrl_request(9S), usb_intr_request(9S), usb_isoc_request(9S).