PERFORCE change 91523 for review
Warner Losh
imp at FreeBSD.org
Fri Feb 10 14:04:11 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=91523
Change 91523 by imp at imp_Speedy on 2006/02/10 22:03:27
fix ohci interrupt return value
rewrite most of ohci_atmelarm and claim copyright now
Affected files ...
.. //depot/projects/arm/src/sys/arm/at91/ohci_atmelarm.c#2 edit
.. //depot/projects/arm/src/sys/dev/usb/ohci.c#5 edit
.. //depot/projects/arm/src/sys/dev/usb/ohci_pci.c#5 edit
.. //depot/projects/arm/src/sys/dev/usb/ohcivar.h#4 edit
Differences ...
==== //depot/projects/arm/src/sys/arm/at91/ohci_atmelarm.c#2 (text+ko) ====
@@ -1,10 +1,5 @@
/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (augustss at carlstedt.se) at
- * Carlstedt Research & Technology.
+ * Copyright (c) 2006 M. Warner Losh. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -14,25 +9,17 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
@@ -58,8 +45,8 @@
#define MEM_RID 0
-static int ohci_atmelarm_attach(device_t self);
-static int ohci_atmelarm_detach(device_t self);
+static int ohci_atmelarm_attach(device_t dev);
+static int ohci_atmelarm_detach(device_t dev);
static int
ohci_atmelarm_probe(device_t self)
@@ -77,42 +64,37 @@
/* XXX where does it say so in the spec? */
sc->sc_bus.usbrev = USBREV_1_0;
+ strlcpy(sc->sc_vendor, "Atmel", sizeof(sc->sc_vendor));
rid = MEM_RID;
sc->io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,
RF_ACTIVE);
- if (!sc->io_res) {
- device_printf(self, "Could not map memory\n");
- return ENXIO;
+ if (sc->io_res == NULL) {
+ err = ENXIO;
+ goto error;
}
sc->iot = rman_get_bustag(sc->io_res);
sc->ioh = rman_get_bushandle(sc->io_res);
rid = 0;
sc->irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
- RF_SHAREABLE | RF_ACTIVE);
+ RF_ACTIVE);
if (sc->irq_res == NULL) {
- device_printf(self, "Could not allocate irq\n");
- ohci_atmelarm_detach(self);
- return ENXIO;
+ err = ENXIO;
+ goto error;
}
sc->sc_bus.bdev = device_add_child(self, "usb", -1);
- if (!sc->sc_bus.bdev) {
- device_printf(self, "Could not add USB device\n");
- ohci_atmelarm_detach(self);
- return ENOMEM;
+ if (sc->sc_bus.bdev == NULL) {
+ err = ENOMEM;
+ goto error;
}
device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
- strlcpy(sc->sc_vendor, "Atmel", sizeof(sc->sc_vendor))
-
- err = bus_setup_intr(self, sc->irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
- (driver_intr_t *) ohci_intr, sc, &sc->ih);
+ err = bus_setup_intr(self, sc->irq_res, INTR_TYPE_BIO, ohci_intr, sc,
+ &sc->ih);
if (err) {
- device_printf(self, "Could not setup irq, %d\n", err);
- sc->ih = NULL;
- ohci_atmelarm_detach(self);
- return ENXIO;
+ err = ENXIO;
+ goto error;
}
err = ohci_init(sc);
if (!err) {
@@ -120,12 +102,12 @@
err = device_probe_and_attach(sc->sc_bus.bdev);
}
+error:;
if (err) {
- device_printf(self, "USB init failed\n");
ohci_atmelarm_detach(self);
- return EIO;
+ return (err);
}
- return 0;
+ return (err);
}
static int
@@ -138,13 +120,8 @@
sc->sc_flags &= ~OHCI_SCFLG_DONEINIT;
}
- if (sc->irq_res && sc->ih) {
- int err = bus_teardown_intr(self, sc->irq_res, sc->ih);
-
- if (err)
- /* XXX or should we panic? */
- device_printf(self, "Could not tear down irq, %d\n",
- err);
+ if (sc->ih) {
+ bus_teardown_intr(self, sc->irq_res, sc->ih);
sc->ih = NULL;
}
if (sc->sc_bus.bdev) {
@@ -161,7 +138,7 @@
sc->iot = 0;
sc->ioh = 0;
}
- return 0;
+ return (0);
}
static device_method_t ohci_methods[] = {
==== //depot/projects/arm/src/sys/dev/usb/ohci.c#5 (text+ko) ====
@@ -1145,23 +1145,23 @@
Static int ohci_intr1(ohci_softc_t *);
-int
+void
ohci_intr(void *p)
{
ohci_softc_t *sc = p;
if (sc == NULL || sc->sc_dying)
- return (0);
+ return;
/* If we get an interrupt while polling, then just ignore it. */
if (sc->sc_bus.use_polling) {
#ifdef DIAGNOSTIC
printf("ohci_intr: ignored interrupt while polling\n");
#endif
- return (0);
+ return;
}
- return (ohci_intr1(sc));
+ ohci_intr1(sc);
}
Static int
==== //depot/projects/arm/src/sys/dev/usb/ohci_pci.c#5 (text+ko) ====
@@ -295,8 +295,8 @@
sprintf(sc->sc_vendor, "(0x%04x)", pci_get_vendor(self));
}
- err = bus_setup_intr(self, sc->irq_res, INTR_TYPE_BIO,
- (driver_intr_t *) ohci_intr, sc, &sc->ih);
+ err = bus_setup_intr(self, sc->irq_res, INTR_TYPE_BIO, ohci_intr, sc,
+ &sc->ih);
if (err) {
device_printf(self, "Could not setup irq, %d\n", err);
sc->ih = NULL;
==== //depot/projects/arm/src/sys/dev/usb/ohcivar.h#4 (text+ko) ====
@@ -164,7 +164,7 @@
#define OXFER(xfer) ((struct ohci_xfer *)(xfer))
usbd_status ohci_init(ohci_softc_t *);
-int ohci_intr(void *);
+void ohci_intr(void *);
int ohci_detach(ohci_softc_t *, int);
#if defined(__NetBSD__) || defined(__OpenBSD__)
int ohci_activate(device_ptr_t, enum devact);
More information about the p4-projects
mailing list