svn commit: r215261 - user/weongyo/usb/sys/dev/usb

Weongyo Jeong weongyo at FreeBSD.org
Sat Nov 13 21:17:53 UTC 2010


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];
 	}


More information about the svn-src-user mailing list