Revised: 2004-Oct-21

This is the documentation of (hopefully) all possible error codes (and
their interpretation) that can be returned from usbcore.

Some of them are returned by the Host Controller Drivers (HCDs), which
device drivers only see through usbcore.  As a rule, all the HCDs should
behave the same except for transfer speed dependent behaviors and the
way certain faults are reported.


**************************************************************************
*                   Error codes returned by usb_submit_urb               *
**************************************************************************

Non-USB-specific:

0		URB submission went fine

-ENOMEM		no memory for allocation of internal structures	

USB-specific:

-ENODEV		specified USB-device or bus doesn't exist

-ENOENT		specified interface or endpoint does not exist or
		is not enabled

-ENXIO		host controller driver does not support queuing of this type
		of urb.  (treat as a host controller bug.)

-EINVAL		a) Invalid transfer type specified (or not supported)
		b) Invalid or unsupported periodic transfer interval
		c) ISO: attempted to change transfer interval
		d) ISO: number_of_packets is < 0
		e) various other cases

-EAGAIN		a) specified ISO start frame too early
		b) (using ISO-ASAP) too much scheduled for the future
		   wait some time and try again.

-EFBIG		Host controller driver can't schedule that many ISO frames.

-EPIPE		Specified endpoint is stalled.  For non-control endpoints,
		reset this status with usb_clear_halt().

-EMSGSIZE	(a) endpoint maxpacket size is zero; it is not usable
		    in the current interface altsetting.
		(b) ISO packet is larger than the endpoint maxpacket.
		(c) requested data transfer length is invalid: negative
		    or too large for the host controller.

-ENOSPC		This request would overcommit the usb bandwidth reserved
		for periodic transfers (interrupt, isochronous).

-ESHUTDOWN	The device or host controller has been disabled due to some
		problem that could not be worked around.

-EPERM		Submission failed because urb->reject was set.

-EHOSTUNREACH	URB was rejected because the device is suspended.


**************************************************************************
*                   Error codes returned by in urb->status               *
*                   or in iso_frame_desc[n].status (for ISO)             *
**************************************************************************

USB device drivers may only test urb status values in completion handlers.
This is because otherwise there would be a race between HCDs updating
these values on one CPU, and device drivers testing them on another CPU.

A transfer's actual_length may be positive even when an error has been
reported.  That's because transfers often involve several packets, so that
one or more packets could finish before an error stops further endpoint I/O.


0			Transfer completed successfully

-ENOENT			URB was synchronously unlinked by usb_unlink_urb

-EINPROGRESS		URB still pending, no results yet
			(That is, if drivers see this it's a bug.)

-EPROTO (*, **)		a) bitstuff error
			b) no response packet received within the
			   prescribed bus turn-around time
			c) unknown USB error 

-EILSEQ (*, **)		a) CRC mismatch
			b) no response packet received within the
			   prescribed bus turn-around time
			c) unknown USB error 

			Note that often the controller hardware does not
			distinguish among cases a), b), and c), so a
			driver cannot tell whether there was a protocol
			error, a failure to respond (often caused by
			device disconnect), or some other fault.

-ETIME (**)		No response packet received within the prescribed
			bus turn-around time.  This error may instead be
			reported as -EPROTO or -EILSEQ.

-ETIMEDOUT		Synchronous USB message functions use this code
			to indicate timeout expired before the transfer
			completed, and no other error was reported by HC.

-EPIPE (**)		Endpoint stalled.  For non-control endpoints,
			reset this status with usb_clear_halt().

-ECOMM			During an IN transfer, the host controller
			received data from an endpoint faster than it
			could be written to system memory

-ENOSR			During an OUT transfer, the host controller
			could not retrieve data from system memory fast
			enough to keep up with the USB data rate

-EOVERFLOW (*)		The amount of data returned by the endpoint was
			greater than either the max packet size of the
			endpoint or the remaining buffer size.  "Babble".

-EREMOTEIO		The data read from the endpoint did not fill the
			specified buffer, and URB_SHORT_NOT_OK was set in
			urb->transfer_flags.

-ENODEV			Device was removed.  Often preceded by a burst of
			other errors, since the hub driver does't detect
			device removal events immediately.

-EXDEV			ISO transfer only partially completed
			look at individual frame status for details

-EINVAL			ISO madness, if this happens: Log off and go home

-ECONNRESET		URB was asynchronously unlinked by usb_unlink_urb

-ESHUTDOWN		The device or host controller has been disabled due
			to some problem that could not be worked around,
			such as a physical disconnect.


(*) Error codes like -EPROTO, -EILSEQ and -EOVERFLOW normally indicate
hardware problems such as bad devices (including firmware) or cables.

(**) This is also one of several codes that different kinds of host
controller use to to indicate a transfer has failed because of device
disconnect.  In the interval before the hub driver starts disconnect
processing, devices may receive such fault reports for every request.



**************************************************************************
*              Error codes returned by usbcore-functions                 *
*           (expect also other submit and transfer status codes)         *
**************************************************************************

usb_register():
-EINVAL			error during registering new driver

usb_get_*/usb_set_*():
usb_control_msg():
usb_bulk_msg():
-ETIMEDOUT		Timeout expired before the transfer completed.
