summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usbdi.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2000-02-10 18:50:19 +0000
committern_hibma <n_hibma@FreeBSD.org>2000-02-10 18:50:19 +0000
commite8b624173afd0d3abbffcee785b504b298ae4b4b (patch)
treef52d0cdd18364528cfc25ca3ccdb2c2656d5aff8 /sys/dev/usb/usbdi.c
parentca6bc8a505ef28bf23c51720be7efccdec424c56 (diff)
downloadFreeBSD-src-e8b624173afd0d3abbffcee785b504b298ae4b4b.zip
FreeBSD-src-e8b624173afd0d3abbffcee785b504b298ae4b4b.tar.gz
Correctly handle the conversion from virtual to physical addresses. The
problem was basically (for offset > 4096): vtophys(addr) + offset != vtophys(addr + offset) Also, use TD's with a maximum size of 4k instead of 8kb for OHCI controllers. This problem occurs in drivers that use large transfer sizes: umass, host2host and ethernet with jumbo frames.
Diffstat (limited to 'sys/dev/usb/usbdi.c')
-rw-r--r--sys/dev/usb/usbdi.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c
index 23063df..2949b23 100644
--- a/sys/dev/usb/usbdi.c
+++ b/sys/dev/usb/usbdi.c
@@ -282,7 +282,7 @@ usbd_transfer(xfer)
/* Copy data if going out. */
if (!(xfer->flags & USBD_NO_COPY) && size != 0 &&
!usbd_xfer_isread(xfer))
- memcpy(KERNADDR(dmap), xfer->buffer, size);
+ memcpy(KERNADDR(dmap, 0), xfer->buffer, size);
err = pipe->methods->transfer(xfer);
@@ -348,7 +348,7 @@ usbd_alloc_buffer(xfer, size)
if (err)
return (0);
xfer->rqflags |= URQ_DEV_DMABUF;
- return (KERNADDR(&xfer->dmabuf));
+ return (KERNADDR(&xfer->dmabuf, 0));
}
void
@@ -371,7 +371,7 @@ usbd_get_buffer(xfer)
{
if (!(xfer->rqflags & URQ_DEV_DMABUF))
return (0);
- return (KERNADDR(&xfer->dmabuf));
+ return (KERNADDR(&xfer->dmabuf, 0));
}
usbd_xfer_handle
@@ -800,7 +800,7 @@ usb_transfer_complete(xfer)
xfer->actlen = xfer->length;
}
#endif
- memcpy(xfer->buffer, KERNADDR(dmap), xfer->actlen);
+ memcpy(xfer->buffer, KERNADDR(dmap, 0), xfer->actlen);
}
/* if we allocated the buffer in usbd_transfer() we free it here. */
OpenPOWER on IntegriCloud