Module Name:    src
Committed By:   skrll
Date:           Fri May 15 06:15:42 UTC 2020

Modified Files:
        src/sys/dev/usb: ehci.c ohci.c uhci.c usbdi.c
        src/sys/external/bsd/dwc2: dwc2.c

Log Message:
Update ux_length in usbd_setup_isoc_xfer and use this to usb_syncmem
in the HCDs


To generate a diff of this commit:
cvs rdiff -u -r1.278 -r1.279 src/sys/dev/usb/ehci.c
cvs rdiff -u -r1.303 -r1.304 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.300 -r1.301 src/sys/dev/usb/uhci.c
cvs rdiff -u -r1.200 -r1.201 src/sys/dev/usb/usbdi.c
cvs rdiff -u -r1.73 -r1.74 src/sys/external/bsd/dwc2/dwc2.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.278 src/sys/dev/usb/ehci.c:1.279
--- src/sys/dev/usb/ehci.c:1.278	Sun Apr  5 20:59:38 2020
+++ src/sys/dev/usb/ehci.c	Fri May 15 06:15:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehci.c,v 1.278 2020/04/05 20:59:38 skrll Exp $ */
+/*	$NetBSD: ehci.c,v 1.279 2020/05/15 06:15:42 skrll Exp $ */
 
 /*
  * Copyright (c) 2004-2012 The NetBSD Foundation, Inc.
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.278 2020/04/05 20:59:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.279 2020/05/15 06:15:42 skrll Exp $");
 
 #include "ohci.h"
 #include "uhci.h"
@@ -4301,14 +4301,13 @@ ehci_device_fs_isoc_transfer(struct usbd
 	ehci_soft_sitd_t *sitd;
 	usb_dma_t *dma_buf;
 	int i, j, k, frames;
-	int offs, total_length;
+	int offs;
 	int frindex;
 	u_int dir;
 
 	EHCIHIST_FUNC(); EHCIHIST_CALLED();
 
 	sitd = NULL;
-	total_length = 0;
 
 	DPRINTF("xfer %#jx len %jd flags %jd", (uintptr_t)xfer, xfer->ux_length,
 	    xfer->ux_flags, 0);
@@ -4354,7 +4353,6 @@ ehci_device_fs_isoc_transfer(struct usbd
 		/* Set page0 index and offset - TP and T-offset are set below */
 		sitd->sitd.sitd_buffer[0] = htole32(DMAADDR(dma_buf, offs));
 
-		total_length += xfer->ux_frlengths[i];
 		offs += xfer->ux_frlengths[i];
 
 		sitd->sitd.sitd_buffer[1] =
@@ -4432,8 +4430,8 @@ ehci_device_fs_isoc_transfer(struct usbd
 	    sizeof(sitd->sitd.sitd_trans),
 	    BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
 
-	if (total_length)
-		usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, total_length,
+	if (xfer->ux_length)
+		usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length,
 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	/*
@@ -4672,7 +4670,7 @@ ehci_device_isoc_transfer(struct usbd_xf
 	usb_dma_t *dma_buf;
 	int i, j;
 	int frames, uframes, ufrperframe;
-	int trans_count, offs, total_length;
+	int trans_count, offs;
 	int frindex;
 
 	EHCIHIST_FUNC(); EHCIHIST_CALLED();
@@ -4680,7 +4678,6 @@ ehci_device_isoc_transfer(struct usbd_xf
 	prev = NULL;
 	itd = NULL;
 	trans_count = 0;
-	total_length = 0;
 
 	DPRINTF("xfer %#jx flags %jd", (uintptr_t)xfer, xfer->ux_flags, 0, 0);
 
@@ -4765,7 +4762,6 @@ ehci_device_isoc_transfer(struct usbd_xf
 			    EHCI_ITD_SET_PG(addr) |
 			    EHCI_ITD_SET_OFFS(EHCI_PAGE_OFFSET(DMAADDR(dma_buf,offs))));
 
-			total_length += xfer->ux_frlengths[trans_count];
 			offs += xfer->ux_frlengths[trans_count];
 			trans_count++;
 
@@ -4820,8 +4816,8 @@ ehci_device_isoc_transfer(struct usbd_xf
 		prev = itd;
 	} /* End of frame */
 
-	if (total_length)
-		usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, total_length,
+	if (xfer->ux_length)
+		usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length,
 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	/*

Index: src/sys/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.303 src/sys/dev/usb/ohci.c:1.304
--- src/sys/dev/usb/ohci.c:1.303	Wed May 13 19:33:48 2020
+++ src/sys/dev/usb/ohci.c	Fri May 15 06:15:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohci.c,v 1.303 2020/05/13 19:33:48 jakllsch Exp $	*/
+/*	$NetBSD: ohci.c,v 1.304 2020/05/15 06:15:42 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2005, 2012 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.303 2020/05/13 19:33:48 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.304 2020/05/15 06:15:42 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -3463,8 +3463,9 @@ ohci_device_isoc_enter(struct usbd_xfer 
 	int isread =
 	    (UE_GET_DIR(xfer->ux_pipe->up_endpoint->ue_edesc->bEndpointAddress) == UE_DIR_IN);
 
-	usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_bufsize,
-	    isread ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
+	if (xfer->ux_length)
+		usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_bufsize,
+		    isread ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
 
 	if (isoc->next == -1) {
 		/* Not in use yet, schedule it a few frames ahead. */

Index: src/sys/dev/usb/uhci.c
diff -u src/sys/dev/usb/uhci.c:1.300 src/sys/dev/usb/uhci.c:1.301
--- src/sys/dev/usb/uhci.c:1.300	Sun Apr  5 20:59:38 2020
+++ src/sys/dev/usb/uhci.c	Fri May 15 06:15:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhci.c,v 1.300 2020/04/05 20:59:38 skrll Exp $	*/
+/*	$NetBSD: uhci.c,v 1.301 2020/05/15 06:15:42 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2011, 2012 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.300 2020/04/05 20:59:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.301 2020/05/15 06:15:42 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -2918,8 +2918,9 @@ uhci_device_isoc_transfer(struct usbd_xf
 
 	KASSERT(xfer->ux_nframes != 0);
 
-	usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
-	    rd ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
+	if (xfer->ux_length)
+		usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length,
+		    rd ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
 
 	mutex_enter(&sc->sc_lock);
 	next = isoc->next;

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.200 src/sys/dev/usb/usbdi.c:1.201
--- src/sys/dev/usb/usbdi.c:1.200	Sun Apr  5 20:59:38 2020
+++ src/sys/dev/usb/usbdi.c	Fri May 15 06:15:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.200 2020/04/05 20:59:38 skrll Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.201 2020/05/15 06:15:42 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012, 2015 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.200 2020/04/05 20:59:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.201 2020/05/15 06:15:42 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -685,6 +685,9 @@ usbd_setup_isoc_xfer(struct usbd_xfer *x
 	xfer->ux_rqflags &= ~URQ_REQUEST;
 	xfer->ux_frlengths = frlengths;
 	xfer->ux_nframes = nframes;
+
+	for (size_t i = 0; i < xfer->ux_nframes; i++)
+		xfer->ux_length += xfer->ux_frlengths[i];
 }
 
 void

Index: src/sys/external/bsd/dwc2/dwc2.c
diff -u src/sys/external/bsd/dwc2/dwc2.c:1.73 src/sys/external/bsd/dwc2/dwc2.c:1.74
--- src/sys/external/bsd/dwc2/dwc2.c:1.73	Sun Apr  5 20:59:38 2020
+++ src/sys/external/bsd/dwc2/dwc2.c	Fri May 15 06:15:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: dwc2.c,v 1.73 2020/04/05 20:59:38 skrll Exp $	*/
+/*	$NetBSD: dwc2.c,v 1.74 2020/05/15 06:15:42 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.73 2020/04/05 20:59:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.74 2020/05/15 06:15:42 skrll Exp $");
 
 #include "opt_usb.h"
 
@@ -1017,9 +1017,15 @@ dwc2_device_start(struct usbd_xfer *xfer
 		    " mps=%d dir %s\n", xfer, xfer->ux_nframes, xfer->ux_flags, addr,
 		    epnum, mps, dir == UT_READ ? "in" :"out");
 
+#ifdef DIAGNOSTIC
 		len = 0;
 		for (size_t i = 0; i < xfer->ux_nframes; i++)
 			len += xfer->ux_frlengths[i];
+		if (len != xfer->ux_length)
+			panic("len (%d) != xfer->ux_length (%d)", len,
+			    xfer->ux_length);
+#endif
+		len = xfer->ux_length;
 	} else {
 		DPRINTFN(3, "xfer=%p len=%d flags=%d addr=%d endpt=%d,"
 		    " mps=%d dir %s\n", xfer, xfer->ux_length, xfer->ux_flags, addr,

Reply via email to