Module Name:    src
Committed By:   matt
Date:           Thu Jun  9 19:08:33 UTC 2011

Modified Files:
        src/sys/dev/usb: ehci.c files.usb ohci.c uhci.c uhub.c usb.c usb_mem.c
            usb_subr.c usbdi.c

Log Message:
Move EHCI_DEBUG, OHCI_DEBUG, UHCI_DEBUG, USB_DEBUG, UHUB_DEBUG to opt_usb.h
(ya dependencies).
Cleanup usb_mem.c a little more and add block tracking code.  Help find
corruption problems.
Comment out the SPEED check for ETTF.  XXX why doesn't that work right?


To generate a diff of this commit:
cvs rdiff -u -r1.177 -r1.178 src/sys/dev/usb/ehci.c
cvs rdiff -u -r1.105 -r1.106 src/sys/dev/usb/files.usb
cvs rdiff -u -r1.215 -r1.216 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.238 -r1.239 src/sys/dev/usb/uhci.c
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/usb/uhub.c
cvs rdiff -u -r1.124 -r1.125 src/sys/dev/usb/usb.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/usb/usb_mem.c
cvs rdiff -u -r1.179 -r1.180 src/sys/dev/usb/usb_subr.c
cvs rdiff -u -r1.131 -r1.132 src/sys/dev/usb/usbdi.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/dev/usb/ehci.c
diff -u src/sys/dev/usb/ehci.c:1.177 src/sys/dev/usb/ehci.c:1.178
--- src/sys/dev/usb/ehci.c:1.177	Sat May 28 15:47:17 2011
+++ src/sys/dev/usb/ehci.c	Thu Jun  9 19:08:31 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehci.c,v 1.177 2011/05/28 15:47:17 tsutsui Exp $ */
+/*	$NetBSD: ehci.c,v 1.178 2011/06/09 19:08:31 matt Exp $ */
 
 /*
  * Copyright (c) 2004-2008 The NetBSD Foundation, Inc.
@@ -52,10 +52,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.177 2011/05/28 15:47:17 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.178 2011/06/09 19:08:31 matt Exp $");
 
 #include "ohci.h"
 #include "uhci.h"
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2270,9 +2271,10 @@
 			goto ret;
 		}
 		v = EOREAD4(sc, EHCI_PORTSC(index));
-		DPRINTFN(8,("ehci_root_ctrl_start: port status=0x%04x\n",
-			    v));
+		DPRINTFN(8,("ehci_root_ctrl_start: port status=0x%04x\n", v));
 
+		i = UPS_HIGH_SPEED;
+#if 0
 		if (sc->sc_flags & EHCIF_ETTF) {
 			/*
 			 * If we are doing embedded transaction translation,
@@ -2281,9 +2283,8 @@
 			 * the same way as in USBSTATUS. 
 			 */
 			i = __SHIFTOUT(v, EHCI_PS_PSPD) * UPS_LOW_SPEED;
-		} else {
-			i = UPS_HIGH_SPEED;
 		}
+#endif
 		if (v & EHCI_PS_CS)	i |= UPS_CURRENT_CONNECT_STATUS;
 		if (v & EHCI_PS_PE)	i |= UPS_PORT_ENABLED;
 		if (v & EHCI_PS_SUSP)	i |= UPS_SUSPEND;
@@ -2351,9 +2352,9 @@
 			 * terminate the reset sequence so there's no need to
 			 * it.
 			 */
-			if (!(sc->sc_flags & EHCIF_ETTF)) {
+			v = EOREAD4(sc, port);
+			if (v & EHCI_PS_PR) {
 				/* Terminate reset sequence. */
-				v = EOREAD4(sc, port);
 				EOWRITE4(sc, port, v & ~EHCI_PS_PR);
 				/* Wait for HC to complete reset. */
 				usb_delay_ms(&sc->sc_bus,

Index: src/sys/dev/usb/files.usb
diff -u src/sys/dev/usb/files.usb:1.105 src/sys/dev/usb/files.usb:1.106
--- src/sys/dev/usb/files.usb:1.105	Sun Mar 20 17:54:03 2011
+++ src/sys/dev/usb/files.usb	Thu Jun  9 19:08:31 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.usb,v 1.105 2011/03/20 17:54:03 tsutsui Exp $
+#	$NetBSD: files.usb,v 1.106 2011/06/09 19:08:31 matt Exp $
 #
 # Config file and device description for machine-independent USB code.
 # Included by ports that need it.  Ports that use it must provide
@@ -6,6 +6,7 @@
 
 defflag	USBVERBOSE
 defflag	opt_usb.h	USB_FRAG_DMA_WORKAROUND
+defflag	opt_usb.h	EHCI_DEBUG OHCI_DEBUG UHCI_DEBUG UHUB_DEBUG USB_DEBUG
 
 defflag	opt_uvideo.h	UVIDEO_DEBUG
 

Index: src/sys/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.215 src/sys/dev/usb/ohci.c:1.216
--- src/sys/dev/usb/ohci.c:1.215	Sat May 28 15:47:17 2011
+++ src/sys/dev/usb/ohci.c	Thu Jun  9 19:08:31 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohci.c,v 1.215 2011/05/28 15:47:17 tsutsui Exp $	*/
+/*	$NetBSD: ohci.c,v 1.216 2011/06/09 19:08:31 matt Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/ohci.c,v 1.22 1999/11/17 22:33:40 n_hibma Exp $	*/
 
 /*
@@ -41,7 +41,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.215 2011/05/28 15:47:17 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.216 2011/06/09 19:08:31 matt Exp $");
+
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>

Index: src/sys/dev/usb/uhci.c
diff -u src/sys/dev/usb/uhci.c:1.238 src/sys/dev/usb/uhci.c:1.239
--- src/sys/dev/usb/uhci.c:1.238	Sat May 28 15:47:17 2011
+++ src/sys/dev/usb/uhci.c	Thu Jun  9 19:08:32 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhci.c,v 1.238 2011/05/28 15:47:17 tsutsui Exp $	*/
+/*	$NetBSD: uhci.c,v 1.239 2011/06/09 19:08:32 matt Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/uhci.c,v 1.33 1999/11/17 22:33:41 n_hibma Exp $	*/
 
 /*
@@ -42,7 +42,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.238 2011/05/28 15:47:17 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.239 2011/06/09 19:08:32 matt Exp $");
+
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>

Index: src/sys/dev/usb/uhub.c
diff -u src/sys/dev/usb/uhub.c:1.113 src/sys/dev/usb/uhub.c:1.114
--- src/sys/dev/usb/uhub.c:1.113	Sun May 29 12:37:09 2011
+++ src/sys/dev/usb/uhub.c	Thu Jun  9 19:08:32 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhub.c,v 1.113 2011/05/29 12:37:09 jmcneill Exp $	*/
+/*	$NetBSD: uhub.c,v 1.114 2011/06/09 19:08:32 matt Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/uhub.c,v 1.18 1999/11/17 22:33:43 n_hibma Exp $	*/
 
 /*
@@ -36,7 +36,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.113 2011/05/29 12:37:09 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.114 2011/06/09 19:08:32 matt Exp $");
+
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -546,7 +548,7 @@
 			  dev->depth + 1, speed, port, up);
 		/* XXX retry a few times? */
 		if (err) {
-			DPRINTFN(-1,("uhub_explore: usb_new_device failed, "
+			DPRINTFN(-1,("uhub_explore: usbd_new_device failed, "
 				     "error=%s\n", usbd_errstr(err)));
 			/* Avoid addressing problems by disabling. */
 			/* usbd_reset_port(dev, port, &up->status); */

Index: src/sys/dev/usb/usb.c
diff -u src/sys/dev/usb/usb.c:1.124 src/sys/dev/usb/usb.c:1.125
--- src/sys/dev/usb/usb.c:1.124	Mon May 23 21:50:44 2011
+++ src/sys/dev/usb/usb.c	Thu Jun  9 19:08:32 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb.c,v 1.124 2011/05/23 21:50:44 joerg Exp $	*/
+/*	$NetBSD: usb.c,v 1.125 2011/06/09 19:08:32 matt Exp $	*/
 
 /*
  * Copyright (c) 1998, 2002, 2008 The NetBSD Foundation, Inc.
@@ -37,9 +37,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.124 2011/05/23 21:50:44 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.125 2011/06/09 19:08:32 matt Exp $");
 
 #include "opt_compat_netbsd.h"
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>

Index: src/sys/dev/usb/usb_mem.c
diff -u src/sys/dev/usb/usb_mem.c:1.47 src/sys/dev/usb/usb_mem.c:1.48
--- src/sys/dev/usb/usb_mem.c:1.47	Thu Jun  9 07:17:02 2011
+++ src/sys/dev/usb/usb_mem.c	Thu Jun  9 19:08:32 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_mem.c,v 1.47 2011/06/09 07:17:02 matt Exp $	*/
+/*	$NetBSD: usb_mem.c,v 1.48 2011/06/09 19:08:32 matt Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_mem.c,v 1.47 2011/06/09 07:17:02 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_mem.c,v 1.48 2011/06/09 19:08:32 matt Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -90,9 +90,16 @@
 					   usb_dma_block_t **);
 Static void		usb_block_freemem(usb_dma_block_t *);
 
-Static LIST_HEAD(, usb_dma_block) usb_blk_freelist =
+LIST_HEAD(usb_dma_block_qh, usb_dma_block);
+Static struct usb_dma_block_qh usb_blk_freelist =
 	LIST_HEAD_INITIALIZER(usb_blk_freelist);
-Static int usb_blk_nfree = 0;
+#ifdef DEBUG
+Static struct usb_dma_block_qh usb_blk_fraglist =
+	LIST_HEAD_INITIALIZER(usb_blk_fraglist);
+Static struct usb_dma_block_qh usb_blk_fulllist =
+	LIST_HEAD_INITIALIZER(usb_blk_fulllist);
+#endif
+Static u_int usb_blk_nfree = 0;
 /* XXX should have different free list for different tags (for speed) */
 Static LIST_HEAD(, usb_frag_dma) usb_frag_freelist =
 	LIST_HEAD_INITIALIZER(usb_frag_freelist);
@@ -101,12 +108,11 @@
 usb_block_allocmem(bus_dma_tag_t tag, size_t size, size_t align,
 		   usb_dma_block_t **dmap)
 {
+	usb_dma_block_t *b;
 	int error;
-        usb_dma_block_t *p;
 	int s;
 
-	DPRINTFN(5, ("usb_block_allocmem: size=%lu align=%lu\n",
-		     (u_long)size, (u_long)align));
+	DPRINTFN(5, ("usb_block_allocmem: size=%zu align=%zu\n", size, align));
 
 #ifdef DIAGNOSTIC
 	if (cpu_intr_p()) {
@@ -117,14 +123,14 @@
 
 	s = splusb();
 	/* First check the free list. */
-	LIST_FOREACH(p, &usb_blk_freelist, next) {
-		if (p->tag == tag && p->size >= size && p->align >= align) {
-			LIST_REMOVE(p, next);
+	LIST_FOREACH(b, &usb_blk_freelist, next) {
+		if (b->tag == tag && b->size >= size && b->align >= align) {
+			LIST_REMOVE(b, next);
 			usb_blk_nfree--;
 			splx(s);
-			*dmap = p;
-			DPRINTFN(6,("usb_block_allocmem: free list size=%lu\n",
-				    (u_long)p->size));
+			*dmap = b;
+			DPRINTFN(6,("usb_block_allocmem: free list size=%zu\n",
+			    p->size));
 			return (USBD_NORMAL_COMPLETION);
 		}
 	}
@@ -138,54 +144,54 @@
 #endif
 
 	DPRINTFN(6, ("usb_block_allocmem: no free\n"));
-	p = malloc(sizeof *p, M_USB, M_NOWAIT);
-	if (p == NULL)
+	b = malloc(sizeof *b, M_USB, M_NOWAIT | M_ZERO);
+	if (b == NULL)
 		return (USBD_NOMEM);
 
-	p->tag = tag;
-	p->size = size;
-	p->align = align;
-	error = bus_dmamem_alloc(tag, p->size, align, 0,
-				 p->segs, __arraycount(p->segs),
-				 &p->nsegs, BUS_DMA_NOWAIT);
+	b->tag = tag;
+	b->size = size;
+	b->align = align;
+	error = bus_dmamem_alloc(tag, b->size, align, 0,
+				 b->segs, __arraycount(b->segs),
+				 &b->nsegs, BUS_DMA_NOWAIT);
 	if (error)
 		goto free0;
 
-	error = bus_dmamem_map(tag, p->segs, p->nsegs, p->size,
-			       &p->kaddr, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
+	error = bus_dmamem_map(tag, b->segs, b->nsegs, b->size,
+			       &b->kaddr, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
 	if (error)
 		goto free1;
 
-	error = bus_dmamap_create(tag, p->size, 1, p->size,
-				  0, BUS_DMA_NOWAIT, &p->map);
+	error = bus_dmamap_create(tag, b->size, 1, b->size,
+				  0, BUS_DMA_NOWAIT, &b->map);
 	if (error)
 		goto unmap;
 
-	error = bus_dmamap_load(tag, p->map, p->kaddr, p->size, NULL,
+	error = bus_dmamap_load(tag, b->map, b->kaddr, b->size, NULL,
 				BUS_DMA_NOWAIT);
 	if (error)
 		goto destroy;
 
-	*dmap = p;
+	*dmap = b;
 #ifdef USB_FRAG_DMA_WORKAROUND
-	memset(p->kaddr, 0, p->size);
+	memset(b->kaddr, 0, b->size);
 #endif
 	return (USBD_NORMAL_COMPLETION);
 
  destroy:
-	bus_dmamap_destroy(tag, p->map);
+	bus_dmamap_destroy(tag, b->map);
  unmap:
-	bus_dmamem_unmap(tag, p->kaddr, p->size);
+	bus_dmamem_unmap(tag, b->kaddr, b->size);
  free1:
-	bus_dmamem_free(tag, p->segs, p->nsegs);
+	bus_dmamem_free(tag, b->segs, b->nsegs);
  free0:
-	free(p, M_USB);
+	free(b, M_USB);
 	return (USBD_NOMEM);
 }
 
 #if 0
 void
-usb_block_real_freemem(usb_dma_block_t *p)
+usb_block_real_freemem(usb_dma_block_t *b)
 {
 #ifdef DIAGNOSTIC
 	if (cpu_intr_p()) {
@@ -193,27 +199,43 @@
 		return;
 	}
 #endif
-	bus_dmamap_unload(p->tag, p->map);
-	bus_dmamap_destroy(p->tag, p->map);
-	bus_dmamem_unmap(p->tag, p->kaddr, p->size);
-	bus_dmamem_free(p->tag, p->segs, p->nsegs);
+	bus_dmamap_unload(b->tag, b->map);
+	bus_dmamap_destroy(b->tag, b->map);
+	bus_dmamem_unmap(b->tag, b->kaddr, b->size);
+	bus_dmamem_free(b->tag, b->segs, b->nsegs);
 	free(p, M_USB);
 }
 #endif
 
+#ifdef DEBUG
+Static bool
+usb_valid_block_p(usb_dma_block_t *b, struct usb_dma_block_qh *qh)
+{
+	usb_dma_block_t *xb;
+	LIST_FOREACH(xb, qh, next) {
+		if (xb == b)
+			return true;
+	}
+	return false;
+}
+#endif
+
 /*
  * Do not free the memory unconditionally since we might be called
  * from an interrupt context and that is BAD.
  * XXX when should we really free?
  */
 Static void
-usb_block_freemem(usb_dma_block_t *p)
+usb_block_freemem(usb_dma_block_t *b)
 {
 	int s;
 
-	DPRINTFN(6, ("usb_block_freemem: size=%lu\n", (u_long)p->size));
+	DPRINTFN(6, ("usb_block_freemem: size=%zu\n", b->size));
 	s = splusb();
-	LIST_INSERT_HEAD(&usb_blk_freelist, p, next);
+#ifdef DEBUG
+	LIST_REMOVE(b, next);
+#endif
+	LIST_INSERT_HEAD(&usb_blk_freelist, b, next);
 	usb_blk_nfree++;
 	splx(s);
 }
@@ -234,6 +256,9 @@
 		size = (size + USB_MEM_BLOCK - 1) & ~(USB_MEM_BLOCK - 1);
 		err = usb_block_allocmem(tag, size, align, &p->block);
 		if (!err) {
+#ifdef DEBUG
+			LIST_INSERT_HEAD(&usb_blk_fulllist, p->block, next);
+#endif
 			p->block->flags = USB_DMA_FULLBLOCK;
 			p->offs = 0;
 		}
@@ -243,6 +268,9 @@
 	s = splusb();
 	/* Check for free fragments. */
 	LIST_FOREACH(f, &usb_frag_freelist, next) {
+		KDASSERTMSG(usb_valid_block_p(f->block, &usb_blk_fraglist),
+		    ("%s: usb frag %p: unknown block pointer %p",
+		     __func__, f, f->block));
 		if (f->block->tag == tag)
 			break;
 	}
@@ -253,6 +281,9 @@
 			splx(s);
 			return (err);
 		}
+#ifdef DEBUG
+		LIST_INSERT_HEAD(&usb_blk_fraglist, b, next);
+#endif
 		b->flags = 0;
 		for (i = 0; i < USB_MEM_BLOCK; i += USB_MEM_SMALL) {
 			f = (struct usb_frag_dma *)((char *)b->kaddr + i);
@@ -284,10 +315,16 @@
 	int s;
 
 	if (p->block->flags & USB_DMA_FULLBLOCK) {
+		KDASSERTMSG(usb_valid_block_p(p->block, &usb_blk_fulllist),
+		    ("%s: dma %p: invalid block pointer %p",
+		     __func__, p, p->block));
 		DPRINTFN(1, ("usb_freemem: large free\n"));
 		usb_block_freemem(p->block);
 		return;
 	}
+	KDASSERTMSG(usb_valid_block_p(p->block, &usb_blk_fraglist),
+	    ("%s: dma %p: invalid block pointer %p",
+	     __func__, p, p->block));
 	//usb_syncmem(p, 0, USB_MEM_SMALL, BUS_DMASYNC_POSTREAD);
 	f = KERNADDR(p, 0);
 #ifdef USB_FRAG_DMA_WORKAROUND

Index: src/sys/dev/usb/usb_subr.c
diff -u src/sys/dev/usb/usb_subr.c:1.179 src/sys/dev/usb/usb_subr.c:1.180
--- src/sys/dev/usb/usb_subr.c:1.179	Fri May 27 17:19:18 2011
+++ src/sys/dev/usb/usb_subr.c	Thu Jun  9 19:08:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_subr.c,v 1.179 2011/05/27 17:19:18 drochner Exp $	*/
+/*	$NetBSD: usb_subr.c,v 1.180 2011/06/09 19:08:33 matt Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.179 2011/05/27 17:19:18 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.180 2011/06/09 19:08:33 matt Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_usbverbose.h"
@@ -1161,7 +1161,7 @@
 	}
 	if (err) {
 		DPRINTFN(-1, ("usbd_new_device: addr=%d, getting first desc "
-			      "failed\n", addr));
+			      "failed: %d\n", addr, err));
 		usbd_remove_device(dev, up);
 		return (err);
 	}

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.131 src/sys/dev/usb/usbdi.c:1.132
--- src/sys/dev/usb/usbdi.c:1.131	Mon Dec 20 18:49:11 2010
+++ src/sys/dev/usb/usbdi.c	Thu Jun  9 19:08:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.131 2010/12/20 18:49:11 phx Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.132 2011/06/09 19:08:33 matt Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usbdi.c,v 1.28 1999/11/17 22:33:49 n_hibma Exp $	*/
 
 /*
@@ -32,9 +32,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.131 2010/12/20 18:49:11 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.132 2011/06/09 19:08:33 matt Exp $");
 
 #include "opt_compat_netbsd.h"
+#include "opt_usb.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -942,9 +943,9 @@
 	err = usbd_sync_transfer(xfer);
 #if defined(USB_DEBUG) || defined(DIAGNOSTIC)
 	if (xfer->actlen > xfer->length) {
-		DPRINTF(("usbd_do_request: overrun addr=%d type=0x%02x req=0x"
+		DPRINTF(("%s: overrun addr=%d type=0x%02x req=0x"
 			 "%02x val=%d index=%d rlen=%d length=%d actlen=%d\n",
-			 dev->address, xfer->request.bmRequestType,
+			 __func__, dev->address, xfer->request.bmRequestType,
 			 xfer->request.bRequest, UGETW(xfer->request.wValue),
 			 UGETW(xfer->request.wIndex),
 			 UGETW(xfer->request.wLength),
@@ -992,6 +993,9 @@
 	}
 
  bad:
+	if (err) {
+		DPRINTF(("%s: returning err=%s\n", __func__, usbd_errstr(err)));
+	}
 	usbd_free_xfer(xfer);
 	return (err);
 }

Reply via email to