diff options
Diffstat (limited to 'sys/dev/usb/uhci.c')
-rw-r--r-- | sys/dev/usb/uhci.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/dev/usb/uhci.c b/sys/dev/usb/uhci.c index bae6c1b81a9..ff4eb530fcb 100644 --- a/sys/dev/usb/uhci.c +++ b/sys/dev/usb/uhci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uhci.c,v 1.151 2020/03/21 12:08:31 patrick Exp $ */ +/* $OpenBSD: uhci.c,v 1.152 2020/04/03 20:11:47 patrick Exp $ */ /* $NetBSD: uhci.c,v 1.172 2003/02/23 04:19:26 simonb Exp $ */ /* $FreeBSD: src/sys/dev/usb/uhci.c,v 1.33 1999/11/17 22:33:41 n_hibma Exp $ */ @@ -1236,6 +1236,9 @@ uhci_idone(struct usbd_xfer *xfer) actlen += len; } upipe->u.iso.inuse -= nframes; + usb_syncmem(&xfer->dmabuf, 0, xfer->length, + usbd_xfer_isread(xfer) ? + BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE); xfer->actlen = actlen; xfer->status = USBD_NORMAL_COMPLETION; goto end; @@ -1299,6 +1302,10 @@ uhci_idone(struct usbd_xfer *xfer) else xfer->status = USBD_IOERROR; /* more info XXX */ } else { + if (xfer->actlen) + usb_syncmem(&xfer->dmabuf, 0, xfer->actlen, + usbd_xfer_isread(xfer) ? + BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE); xfer->status = USBD_NORMAL_COMPLETION; } @@ -1527,6 +1534,10 @@ uhci_alloc_std_chain(struct uhci_softc *sc, u_int len, struct usbd_xfer *xfer, __func__, addr, UE_GET_ADDR(endpt), len, xfer->device->speed, flags)); + usb_syncmem(&xfer->dmabuf, 0, xfer->length, + usbd_xfer_isread(xfer) ? + BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE); + mps = UGETW(xfer->pipe->endpoint->edesc->wMaxPacketSize); if (mps == 0) { printf("uhci_alloc_std_chain: mps=0\n"); @@ -2127,6 +2138,10 @@ uhci_device_isoc_enter(struct usbd_xfer *xfer) printf("uhci_device_isoc_enter: overflow!\n"); #endif + usb_syncmem(&xfer->dmabuf, 0, xfer->length, + usbd_xfer_isread(xfer) ? + BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE); + next = iso->next; if (next == -1) { /* Not in use yet, schedule it a few frames ahead. */ |