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>