| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: ohci.c,v 1.254.2.59 2016/03/17 09:04:53 skrll Exp $ */ | | 1 | /* $NetBSD: ohci.c,v 1.254.2.60 2016/03/24 15:30:17 skrll Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1998, 2004, 2005, 2012 The NetBSD Foundation, Inc. | | 4 | * Copyright (c) 1998, 2004, 2005, 2012 The NetBSD Foundation, Inc. |
5 | * All rights reserved. | | 5 | * All rights reserved. |
6 | * | | 6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation | | 7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Lennart Augustsson (lennart@augustsson.net) at | | 8 | * by Lennart Augustsson (lennart@augustsson.net) at |
9 | * Carlstedt Research & Technology, Jared D. McNeill (jmcneill@invisible.ca) | | 9 | * Carlstedt Research & Technology, Jared D. McNeill (jmcneill@invisible.ca) |
10 | * and Matthew R. Green (mrg@eterna.com.au). | | 10 | * and Matthew R. Green (mrg@eterna.com.au). |
11 | * This code is derived from software contributed to The NetBSD Foundation | | 11 | * This code is derived from software contributed to The NetBSD Foundation |
12 | * by Charles M. Hannum. | | 12 | * by Charles M. Hannum. |
13 | * | | 13 | * |
14 | * Redistribution and use in source and binary forms, with or without | | 14 | * Redistribution and use in source and binary forms, with or without |
| @@ -31,27 +31,27 @@ | | | @@ -31,27 +31,27 @@ |
31 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 31 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
32 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 32 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
33 | * POSSIBILITY OF SUCH DAMAGE. | | 33 | * POSSIBILITY OF SUCH DAMAGE. |
34 | */ | | 34 | */ |
35 | | | 35 | |
36 | /* | | 36 | /* |
37 | * USB Open Host Controller driver. | | 37 | * USB Open Host Controller driver. |
38 | * | | 38 | * |
39 | * OHCI spec: http://www.compaq.com/productinfo/development/openhci.html | | 39 | * OHCI spec: http://www.compaq.com/productinfo/development/openhci.html |
40 | * USB spec: http://www.usb.org/developers/docs/ | | 40 | * USB spec: http://www.usb.org/developers/docs/ |
41 | */ | | 41 | */ |
42 | | | 42 | |
43 | #include <sys/cdefs.h> | | 43 | #include <sys/cdefs.h> |
44 | __KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.59 2016/03/17 09:04:53 skrll Exp $"); | | 44 | __KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.60 2016/03/24 15:30:17 skrll Exp $"); |
45 | | | 45 | |
46 | #include "opt_usb.h" | | 46 | #include "opt_usb.h" |
47 | | | 47 | |
48 | #include <sys/param.h> | | 48 | #include <sys/param.h> |
49 | | | 49 | |
50 | #include <sys/cpu.h> | | 50 | #include <sys/cpu.h> |
51 | #include <sys/device.h> | | 51 | #include <sys/device.h> |
52 | #include <sys/kernel.h> | | 52 | #include <sys/kernel.h> |
53 | #include <sys/kmem.h> | | 53 | #include <sys/kmem.h> |
54 | #include <sys/proc.h> | | 54 | #include <sys/proc.h> |
55 | #include <sys/queue.h> | | 55 | #include <sys/queue.h> |
56 | #include <sys/select.h> | | 56 | #include <sys/select.h> |
57 | #include <sys/sysctl.h> | | 57 | #include <sys/sysctl.h> |
| @@ -3718,36 +3718,36 @@ ohci_device_isoc_abort(struct usbd_xfer | | | @@ -3718,36 +3718,36 @@ ohci_device_isoc_abort(struct usbd_xfer |
3718 | xfer->ux_status = USBD_CANCELLED; | | 3718 | xfer->ux_status = USBD_CANCELLED; |
3719 | | | 3719 | |
3720 | sed = opipe->sed; | | 3720 | sed = opipe->sed; |
3721 | usb_syncmem(&sed->dma, sed->offs, sizeof(sed->ed), | | 3721 | usb_syncmem(&sed->dma, sed->offs, sizeof(sed->ed), |
3722 | BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD); | | 3722 | BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD); |
3723 | sed->ed.ed_flags |= HTOO32(OHCI_ED_SKIP); /* force hardware skip */ | | 3723 | sed->ed.ed_flags |= HTOO32(OHCI_ED_SKIP); /* force hardware skip */ |
3724 | usb_syncmem(&sed->dma, sed->offs + offsetof(ohci_ed_t, ed_flags), | | 3724 | usb_syncmem(&sed->dma, sed->offs + offsetof(ohci_ed_t, ed_flags), |
3725 | sizeof(sed->ed.ed_flags), | | 3725 | sizeof(sed->ed.ed_flags), |
3726 | BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD); | | 3726 | BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD); |
3727 | | | 3727 | |
3728 | sitd = xfer->ux_hcpriv; | | 3728 | sitd = xfer->ux_hcpriv; |
3729 | KASSERT(sitd); | | 3729 | KASSERT(sitd); |
3730 | | | 3730 | |
| | | 3731 | usb_delay_ms_locked(&sc->sc_bus, OHCI_ITD_NOFFSET, &sc->sc_lock); |
| | | 3732 | |
3731 | for (; sitd->xfer == xfer; sitd = sitd->nextitd) { | | 3733 | for (; sitd->xfer == xfer; sitd = sitd->nextitd) { |
3732 | ohci_hash_rem_itd(sc, sitd); | | 3734 | ohci_hash_rem_itd(sc, sitd); |
3733 | #ifdef DIAGNOSTIC | | 3735 | #ifdef DIAGNOSTIC |
3734 | DPRINTFN(1, "abort sets done sitd=%p", sitd, 0, 0, 0); | | 3736 | DPRINTFN(1, "abort sets done sitd=%p", sitd, 0, 0, 0); |
3735 | sitd->isdone = true; | | 3737 | sitd->isdone = true; |
3736 | #endif | | 3738 | #endif |
3737 | } | | 3739 | } |
3738 | | | 3740 | |
3739 | usb_delay_ms_locked(&sc->sc_bus, OHCI_ITD_NOFFSET, &sc->sc_lock); | | | |
3740 | | | | |
3741 | /* Run callback. */ | | 3741 | /* Run callback. */ |
3742 | usb_transfer_complete(xfer); | | 3742 | usb_transfer_complete(xfer); |
3743 | | | 3743 | |
3744 | sed->ed.ed_headp = HTOO32(sitd->physaddr); /* unlink TDs */ | | 3744 | sed->ed.ed_headp = HTOO32(sitd->physaddr); /* unlink TDs */ |
3745 | sed->ed.ed_flags &= HTOO32(~OHCI_ED_SKIP); /* remove hardware skip */ | | 3745 | sed->ed.ed_flags &= HTOO32(~OHCI_ED_SKIP); /* remove hardware skip */ |
3746 | usb_syncmem(&sed->dma, sed->offs, sizeof(sed->ed), | | 3746 | usb_syncmem(&sed->dma, sed->offs, sizeof(sed->ed), |
3747 | BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD); | | 3747 | BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD); |
3748 | | | 3748 | |
3749 | done: | | 3749 | done: |
3750 | KASSERT(mutex_owned(&sc->sc_lock)); | | 3750 | KASSERT(mutex_owned(&sc->sc_lock)); |
3751 | } | | 3751 | } |
3752 | | | 3752 | |
3753 | void | | 3753 | void |