Module Name:    src
Committed By:   pooka
Date:           Sat Feb 20 13:56:29 UTC 2010

Modified Files:
        src/sys/rump/dev/lib/libugenhc: ugenhc.c

Log Message:
Fix snafu with error reporting in bulk transfers.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/dev/lib/libugenhc/ugenhc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/dev/lib/libugenhc/ugenhc.c
diff -u src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.5 src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.6
--- src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.5	Thu Feb 18 16:24:19 2010
+++ src/sys/rump/dev/lib/libugenhc/ugenhc.c	Sat Feb 20 13:56:29 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugenhc.c,v 1.5 2010/02/18 16:24:19 pooka Exp $	*/
+/*	$NetBSD: ugenhc.c,v 1.6 2010/02/20 13:56:29 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.5 2010/02/18 16:24:19 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.6 2010/02/20 13:56:29 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -707,7 +707,7 @@
 	bool isread;
 	int len, error, endpt;
 	uint8_t *buf;
-	int xfererr = 0;
+	int xfererr = USBD_NORMAL_COMPLETION;
 	int val;
 
 	endpt = xfer->pipe->endpoint->edesc->bEndpointAddress;
@@ -734,7 +734,7 @@
 				if (error == ETIMEDOUT)
 					continue;
 				n = 0;
-				xfer->status = USBD_IOERROR;
+				xfererr = USBD_IOERROR;
 				goto out;
 			}
 			done += n;
@@ -746,8 +746,11 @@
 			done = n;
 			if (done == len)
 				break;
-			else
+			else if (n != -1)
 				panic("short write");
+
+			xfererr = USBD_IOERROR;
+			goto out;
 		}
 
 		if (xfer->flags & USBD_SHORT_XFER_OK)
@@ -756,21 +759,12 @@
 
 	if (RUSB(xfer)->rusb_status == 0) {
 		xfer->actlen = done;
-		xfer->status = USBD_NORMAL_COMPLETION;
-		/* override */
-		if (xfererr) {
-			printf("err!\n");
-			xfer->status = xfererr;
-		}
 	} else {
-		xfer->status = USBD_CANCELLED;
+		xfererr = USBD_CANCELLED;
 		RUSB(xfer)->rusb_status = 2;
 	}
  out:
-	val = 0;
-	error = 0;
-	rumpuser_ioctl(sc->sc_ugenfd[endpt], USB_SET_SHORT_XFER, &val, &error);
-	xfer->status = error;
+	xfer->status = xfererr;
 	usb_transfer_complete(xfer);
 	return (USBD_IN_PROGRESS);
 }

Reply via email to