# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.274   -> 1.275  
#	Documentation/usb/error-codes.txt	1.3     -> 1.4    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/02/11	greg@soap.kroah.net	1.275
# patch from David Probnell, updating the USB error-codes.txt file
# --------------------------------------------
#
diff -Nru a/Documentation/usb/error-codes.txt b/Documentation/usb/error-codes.txt
--- a/Documentation/usb/error-codes.txt	Mon Feb 11 14:03:02 2002
+++ b/Documentation/usb/error-codes.txt	Mon Feb 11 14:03:02 2002
@@ -1,8 +1,11 @@
-Revised: 2001-Dec-06.
+Revised: 2002-Feb-09.
 
 This is the documentation of (hopefully) all possible error codes (and
-their interpretation) that can be returned from the host controller drivers 
-and from usbcore.
+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.
 
 
 **************************************************************************
@@ -19,9 +22,9 @@
 
 -ENODEV		specified USB-device or bus doesn't exist
 
--ENXIO		a control or interrupt URB is already queued to this endpoint; or
-		  a bulk URB is already queued to this endpoint and
-		  USB_QUEUE_BULK wasn't used (UHCI HCDs only)
+-ENXIO		a control or interrupt URB is already queued to this endpoint;
+		or (UHCI only) a bulk URB is already queued to this endpoint
+		and USB_QUEUE_BULK wasn't used
 
 -EINVAL		a) Invalid transfer type specified (or not supported)
 		b) Invalid interrupt interval (0<=n<256)
@@ -34,7 +37,8 @@
 
 -EFBIG		too much ISO frames requested (currently uhci>900)
 
--EPIPE		specified pipe-handle is already stalled
+-EPIPE		Specified endpoint is stalled.  For non-control endpoints,
+		reset this status with usb_clear_halt().
 
 -EMSGSIZE	endpoint message size is zero, do interface/alternate setting
 
@@ -50,19 +54,29 @@
 *                   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 canceled by usb_unlink_urb
+-ENOENT			URB was synchronously unlinked by usb_unlink_urb
 
 -EINPROGRESS		URB still pending, no results yet
-			(actually no error until now;-)
+			(That is, if drivers see this it's a bug.)
 
--EPROTO			a) bitstuff error
+-EPROTO (*)		a) bitstuff error
 			b) unknown USB error 
 
--EILSEQ			CRC mismatch
+-EILSEQ (*)		CRC mismatch
 
--EPIPE			endpoint stalled
+-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
@@ -72,24 +86,35 @@
 			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
+-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 endpoint returned less than max packet size
 			and that amount did not fill the specified buffer
--ETIMEDOUT		transfer timed out, NAK
+			(and USB_DISBLE_SPD was not set in transfer_flags)
 
--ENODEV			device was removed
+-ETIMEDOUT		transfer timed out, NAK
 
--EREMOTEIO		short packet detected
+-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		the URB is being unlinked asynchronously
+-ECONNRESET		URB was asynchronously unlinked by usb_unlink_urb
+
+-ESHUTDOWN		The host controller has been disabled due to some
+			problem that could not be worked around.
+
+
+(*) Error codes like -EPROTO, -EILSEQ and -EOVERFLOW normally indicate
+hardware problems such as bad devices (including firmware) or cables.
+
+
 
 **************************************************************************
 *              Error codes returned by usbcore-functions                 *
@@ -100,4 +125,6 @@
 -EINVAL			error during registering new driver
 
 usb_get_*/usb_set_*():
+usb_control_msg():
+usb_bulk_msg():
 			All USB errors (submit/status) can occur