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