Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/mrg-ohci-jmcneill-usbmp]: src/sys/dev/usb partial sync with main branch
details: https://anonhg.NetBSD.org/src/rev/4f2d70b1da92
branches: mrg-ohci-jmcneill-usbmp
changeset: 771771:4f2d70b1da92
user: mrg <mrg%NetBSD.org@localhost>
date: Thu Dec 08 09:09:30 2011 +0000
description:
partial sync with main branch
diffstat:
sys/dev/usb/ohci.c | 138 +++++++++++++++++++++++++++-------------------------
1 files changed, 72 insertions(+), 66 deletions(-)
diffs (truncated from 311 to 300 lines):
diff -r c47903cb3b7c -r 4f2d70b1da92 sys/dev/usb/ohci.c
--- a/sys/dev/usb/ohci.c Thu Dec 08 08:56:57 2011 +0000
+++ b/sys/dev/usb/ohci.c Thu Dec 08 09:09:30 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ohci.c,v 1.218.6.2.2.3 2011/12/08 08:52:25 mrg Exp $ */
+/* $NetBSD: ohci.c,v 1.218.6.2.2.4 2011/12/08 09:09:30 mrg Exp $ */
/* $FreeBSD: src/sys/dev/usb/ohci.c,v 1.22 1999/11/17 22:33:40 n_hibma Exp $ */
/*
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.218.6.2.2.3 2011/12/08 08:52:25 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.218.6.2.2.4 2011/12/08 09:09:30 mrg Exp $");
#include "opt_usb.h"
@@ -120,7 +120,8 @@
Static void ohci_add_ed(ohci_softc_t *, ohci_soft_ed_t *,
ohci_soft_ed_t *);
-Static void ohci_rem_ed(ohci_soft_ed_t *, ohci_soft_ed_t *);
+Static void ohci_rem_ed(ohci_softc_t *, ohci_soft_ed_t *,
+ ohci_soft_ed_t *);
Static void ohci_hash_add_td(ohci_softc_t *, ohci_soft_td_t *);
Static void ohci_hash_rem_td(ohci_softc_t *, ohci_soft_td_t *);
Static ohci_soft_td_t *ohci_hash_find_td(ohci_softc_t *, ohci_physaddr_t);
@@ -271,68 +272,68 @@
#define OHCI_INTR_ENDPT 1
Static const struct usbd_bus_methods ohci_bus_methods = {
- ohci_open,
- ohci_softintr,
- ohci_poll,
- ohci_allocm,
- ohci_freem,
- ohci_allocx,
- ohci_freex,
- ohci_get_locks,
+ .open_pipe = ohci_open,
+ .soft_intr = ohci_softintr,
+ .do_poll = ohci_poll,
+ .allocm = ohci_allocm,
+ .freem = ohci_freem,
+ .allocx = ohci_allocx,
+ .freex = ohci_freex,
+ .get_locks = ohci_get_locks,
};
Static const struct usbd_pipe_methods ohci_root_ctrl_methods = {
- ohci_root_ctrl_transfer,
- ohci_root_ctrl_start,
- ohci_root_ctrl_abort,
- ohci_root_ctrl_close,
- ohci_noop,
- ohci_root_ctrl_done,
+ .transfer = ohci_root_ctrl_transfer,
+ .start = ohci_root_ctrl_start,
+ .abort = ohci_root_ctrl_abort,
+ .close = ohci_root_ctrl_close,
+ .cleartoggle = ohci_noop,
+ .done = ohci_root_ctrl_done,
};
Static const struct usbd_pipe_methods ohci_root_intr_methods = {
- ohci_root_intr_transfer,
- ohci_root_intr_start,
- ohci_root_intr_abort,
- ohci_root_intr_close,
- ohci_noop,
- ohci_root_intr_done,
+ .transfer = ohci_root_intr_transfer,
+ .start = ohci_root_intr_start,
+ .abort = ohci_root_intr_abort,
+ .close = ohci_root_intr_close,
+ .cleartoggle = ohci_noop,
+ .done = ohci_root_intr_done,
};
Static const struct usbd_pipe_methods ohci_device_ctrl_methods = {
- ohci_device_ctrl_transfer,
- ohci_device_ctrl_start,
- ohci_device_ctrl_abort,
- ohci_device_ctrl_close,
- ohci_noop,
- ohci_device_ctrl_done,
+ .transfer = ohci_device_ctrl_transfer,
+ .start = ohci_device_ctrl_start,
+ .abort = ohci_device_ctrl_abort,
+ .close = ohci_device_ctrl_close,
+ .cleartoggle = ohci_noop,
+ .done = ohci_device_ctrl_done,
};
Static const struct usbd_pipe_methods ohci_device_intr_methods = {
- ohci_device_intr_transfer,
- ohci_device_intr_start,
- ohci_device_intr_abort,
- ohci_device_intr_close,
- ohci_device_clear_toggle,
- ohci_device_intr_done,
+ .transfer = ohci_device_intr_transfer,
+ .start = ohci_device_intr_start,
+ .abort = ohci_device_intr_abort,
+ .close = ohci_device_intr_close,
+ .cleartoggle = ohci_device_clear_toggle,
+ .done = ohci_device_intr_done,
};
Static const struct usbd_pipe_methods ohci_device_bulk_methods = {
- ohci_device_bulk_transfer,
- ohci_device_bulk_start,
- ohci_device_bulk_abort,
- ohci_device_bulk_close,
- ohci_device_clear_toggle,
- ohci_device_bulk_done,
+ .transfer = ohci_device_bulk_transfer,
+ .start = ohci_device_bulk_start,
+ .abort = ohci_device_bulk_abort,
+ .close = ohci_device_bulk_close,
+ .cleartoggle = ohci_device_clear_toggle,
+ .done = ohci_device_bulk_done,
};
Static const struct usbd_pipe_methods ohci_device_isoc_methods = {
- ohci_device_isoc_transfer,
- ohci_device_isoc_start,
- ohci_device_isoc_abort,
- ohci_device_isoc_close,
- ohci_noop,
- ohci_device_isoc_done,
+ .transfer = ohci_device_isoc_transfer,
+ .start = ohci_device_isoc_start,
+ .abort = ohci_device_isoc_abort,
+ .close = ohci_device_isoc_close,
+ .cleartoggle = ohci_noop,
+ .done = ohci_device_isoc_done,
};
int
@@ -1497,7 +1498,9 @@
ohci_device_ctrl_done(usbd_xfer_handle xfer)
{
struct ohci_pipe *opipe = (struct ohci_pipe *)xfer->pipe;
+#ifdef DIAGNOSTIC
ohci_softc_t *sc = xfer->pipe->device->bus->hci_private;
+#endif
int len = UGETW(xfer->request.wLength);
int isread = (xfer->request.bmRequestType & UT_READ);
@@ -1573,7 +1576,9 @@
void
ohci_device_bulk_done(usbd_xfer_handle xfer)
{
+#ifdef DIAGNOSTIC
ohci_softc_t *sc = xfer->pipe->device->bus->hci_private;
+#endif
int isread =
(UE_GET_DIR(xfer->pipe->endpoint->edesc->bEndpointAddress) == UE_DIR_IN);
@@ -1865,12 +1870,13 @@
/*
* Add an ED to the schedule. Called at splusb().
*/
-void
+Static void
ohci_add_ed(ohci_softc_t *sc, ohci_soft_ed_t *sed, ohci_soft_ed_t *head)
{
DPRINTFN(8,("ohci_add_ed: sed=%p head=%p\n", sed, head));
- SPLUSBCHECK;
+ KASSERT(mutex_owned(&sc->sc_lock));
+
usb_syncmem(&head->dma, head->offs + offsetof(ohci_ed_t, ed_nexted),
sizeof(head->ed.ed_nexted),
BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD);
@@ -1889,12 +1895,12 @@
/*
* Remove an ED from the schedule. Called at splusb().
*/
-void
-ohci_rem_ed(ohci_soft_ed_t *sed, ohci_soft_ed_t *head)
+Static void
+ohci_rem_ed(ohci_softc_t *sc, ohci_soft_ed_t *sed, ohci_soft_ed_t *head)
{
ohci_soft_ed_t *p;
- SPLUSBCHECK;
+ //KASSERT(mutex_owned(&sc->sc_lock));
/* XXX */
for (p = head; p != NULL && p->next != sed; p = p->next)
@@ -1928,7 +1934,7 @@
{
int h = HASH(std->physaddr);
- SPLUSBCHECK;
+ //KASSERT(mutex_owned(&sc->sc_lock));
LIST_INSERT_HEAD(&sc->sc_hash_tds[h], std, hnext);
}
@@ -1937,7 +1943,8 @@
void
ohci_hash_rem_td(ohci_softc_t *sc, ohci_soft_td_t *std)
{
- SPLUSBCHECK;
+
+ //KASSERT(mutex_owned(&sc->sc_lock));
LIST_REMOVE(std, hnext);
}
@@ -1962,7 +1969,7 @@
{
int h = HASH(sitd->physaddr);
- SPLUSBCHECK;
+ //KASSERT(mutex_owned(&sc->sc_lock));
DPRINTFN(10,("ohci_hash_add_itd: sitd=%p physaddr=0x%08lx\n",
sitd, (u_long)sitd->physaddr));
@@ -1974,7 +1981,7 @@
void
ohci_hash_rem_itd(ohci_softc_t *sc, ohci_soft_itd_t *sitd)
{
- SPLUSBCHECK;
+ //KASSERT(mutex_owned(&sc->sc_lock));
DPRINTFN(10,("ohci_hash_rem_itd: sitd=%p physaddr=0x%08lx\n",
sitd, (u_long)sitd->physaddr));
@@ -2225,7 +2232,6 @@
if (sed != NULL)
ohci_free_sed(sc, sed);
bad0:
- mutex_exit(&sc->sc_lock);
return err;
}
@@ -2241,7 +2247,7 @@
ohci_softc_t *sc = pipe->device->bus->hci_private;
ohci_soft_ed_t *sed = opipe->sed;
-// KASSERT(mutex_owned(&sc->sc_lock));
+ KASSERT(mutex_owned(&sc->sc_lock));
#ifdef DIAGNOSTIC
sed->ed.ed_flags |= HTOO32(OHCI_ED_SKIP);
@@ -2268,7 +2274,7 @@
printf("ohci_close_pipe: pipe still not empty\n");
}
#endif
- ohci_rem_ed(sed, head);
+ ohci_rem_ed(sc, sed, head);
/* Make sure the host controller is not touching this ED */
usb_delay_ms(&sc->sc_bus, 1);
pipe->endpoint->datatoggle =
@@ -3359,15 +3365,15 @@
usbd_status
ohci_device_isoc_transfer(usbd_xfer_handle xfer)
{
- //ohci_softc_t *sc = xfer->pipe->device->bus->hci_private;
+ ohci_softc_t *sc = xfer->pipe->device->bus->hci_private;
usbd_status err;
DPRINTFN(5,("ohci_device_isoc_transfer: xfer=%p\n", xfer));
/* Put it on our queue, */
- //mutex_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_lock);
err = usb_insert_transfer(xfer);
- //mutex_exit(&sc->sc_lock);
+ mutex_exit(&sc->sc_lock);
/* bail out on error, */
if (err && err != USBD_IN_PROGRESS)
@@ -3492,7 +3498,7 @@
}
#endif
- //mutex_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_lock);
usb_syncmem(&sed->dma, sed->offs, sizeof(sed->ed),
BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD);
sed->ed.ed_tailp = HTOO32(nsitd->physaddr);
@@ -3501,7 +3507,7 @@
usb_syncmem(&sed->dma, sed->offs + offsetof(ohci_ed_t, ed_flags),
sizeof(sed->ed.ed_flags),
BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
- //mutex_exit(&sc->sc_lock);
+ mutex_exit(&sc->sc_lock);
#ifdef OHCI_DEBUG
if (ohcidebug > 5) {
@@ -3549,7 +3555,7 @@
ohci_soft_ed_t *sed;
ohci_soft_itd_t *sitd;
- DPRINTFN(1,("ohci_device_isoc_abort: xfer=%p\n", xfer));
+ DPRINTFN(1,("ohci_device_isoc_abort: xfer=%p lock=%p\n", xfer, &sc->sc_lock));
Home |
Main Index |
Thread Index |
Old Index