Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Nov 2010 21:17:53 +0000 (UTC)
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r215261 - user/weongyo/usb/sys/dev/usb
Message-ID:  <201011132117.oADLHr6v060109@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: weongyo
Date: Sat Nov 13 21:17:53 2010
New Revision: 215261
URL: http://svn.freebsd.org/changeset/base/215261

Log:
  For ISOC xfers it need to handle it specially because unlike other
  transfer modes it just use only one linear buffers.
  
  Reviewed by:	hps

Modified:
  user/weongyo/usb/sys/dev/usb/usb_pf.c

Modified: user/weongyo/usb/sys/dev/usb/usb_pf.c
==============================================================================
--- user/weongyo/usb/sys/dev/usb/usb_pf.c	Sat Nov 13 21:09:18 2010	(r215260)
+++ user/weongyo/usb/sys/dev/usb/usb_pf.c	Sat Nov 13 21:17:53 2010	(r215261)
@@ -1673,6 +1673,7 @@ usbpf_xfertap(struct usb_xfer *xfer, int
 	struct usb_xfer_root *info = xfer->xroot;
 	struct usb_bus *bus = info->bus;
 	struct usbpf_pkthdr *up;
+	usb_frlength_t isoc_offset = 0;
 	int i;
 	char *buf, *ptr, *end;
 
@@ -1730,7 +1731,11 @@ usbpf_xfertap(struct usb_xfer *xfer, int
 
 		if (ptr + xfer->frlengths[i] >= end)
 			goto done;
-		usbd_get_page(&xfer->frbuffers[i], 0, &res);
+		if ((xfer->status & XFER_STATUS_ISOCXFER) != 0) {
+			usbd_get_page(&xfer->frbuffers[0], isoc_offset, &res);
+			isoc_offset += xfer->frlengths[i];
+		} else
+			usbd_get_page(&xfer->frbuffers[i], 0, &res);
 		bcopy(res.buffer, ptr, xfer->frlengths[i]);
 		ptr += xfer->frlengths[i];
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011132117.oADLHr6v060109>