Module Name: src Committed By: jakllsch Date: Sun Feb 16 18:21:19 UTC 2025
Modified Files: src/sys/dev/usb: ehci.c Log Message: ehci(4): only sync isochronous DMA in the necessary direction To generate a diff of this commit: cvs rdiff -u -r1.329 -r1.330 src/sys/dev/usb/ehci.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/ehci.c diff -u src/sys/dev/usb/ehci.c:1.329 src/sys/dev/usb/ehci.c:1.330 --- src/sys/dev/usb/ehci.c:1.329 Fri Oct 4 10:25:51 2024 +++ src/sys/dev/usb/ehci.c Sun Feb 16 18:21:19 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: ehci.c,v 1.329 2024/10/04 10:25:51 skrll Exp $ */ +/* $NetBSD: ehci.c,v 1.330 2025/02/16 18:21:19 jakllsch Exp $ */ /* * Copyright (c) 2004-2012,2016,2020 The NetBSD Foundation, Inc. @@ -54,7 +54,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.329 2024/10/04 10:25:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.330 2025/02/16 18:21:19 jakllsch Exp $"); #include "ohci.h" #include "uhci.h" @@ -4397,6 +4397,7 @@ Static usbd_status ehci_device_fs_isoc_transfer(struct usbd_xfer *xfer) { ehci_softc_t *sc = EHCI_XFER2SC(xfer); + const bool isread = usbd_xfer_isread(xfer); struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer); struct usbd_device *dev = xfer->ux_pipe->up_dev; struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer); @@ -4540,7 +4541,7 @@ ehci_device_fs_isoc_transfer(struct usbd if (xfer->ux_length) usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + isread ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE); /* * Part 2: Transfer descriptors have now been set up, now they must @@ -4638,6 +4639,7 @@ ehci_device_fs_isoc_done(struct usbd_xfe struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer); ehci_softc_t *sc = EHCI_XFER2SC(xfer); struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer); + const bool isread = usbd_xfer_isread(xfer); KASSERT(mutex_owned(&sc->sc_lock)); @@ -4646,7 +4648,7 @@ ehci_device_fs_isoc_done(struct usbd_xfe if (xfer->ux_length) usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length, - BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD); + isread ? BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE); } /* -------------------------------------------------------------------------- */ @@ -4761,6 +4763,7 @@ Static usbd_status ehci_device_isoc_transfer(struct usbd_xfer *xfer) { ehci_softc_t *sc = EHCI_XFER2SC(xfer); + const bool isread = usbd_xfer_isread(xfer); struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer); struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer); ehci_soft_itd_t *itd, *prev; @@ -4917,7 +4920,7 @@ ehci_device_isoc_transfer(struct usbd_xf if (xfer->ux_length) usb_syncmem(&exfer->ex_xfer.ux_dmabuf, 0, xfer->ux_length, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + isread ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE); /* * Part 2: Transfer descriptors have now been set up, now they must @@ -5020,6 +5023,7 @@ ehci_device_isoc_done(struct usbd_xfer * struct ehci_xfer *exfer = EHCI_XFER2EXFER(xfer); ehci_softc_t *sc = EHCI_XFER2SC(xfer); struct ehci_pipe *epipe = EHCI_XFER2EPIPE(xfer); + const bool isread = usbd_xfer_isread(xfer); KASSERT(mutex_owned(&sc->sc_lock)); @@ -5027,5 +5031,5 @@ ehci_device_isoc_done(struct usbd_xfer * ehci_remove_itd_chain(sc, exfer->ex_sitdstart); if (xfer->ux_length) usb_syncmem(&xfer->ux_dmabuf, 0, xfer->ux_length, - BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD); + isread ? BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE); }