The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c7c037fad1862c18e3e9635b06194a4ca00ac3c1

commit c7c037fad1862c18e3e9635b06194a4ca00ac3c1
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2024-06-01 20:25:12 +0000
Commit:     John Baldwin <j...@freebsd.org>
CommitDate: 2024-06-01 20:25:12 +0000

    bhnd: Remove orphaned driver for the BHND USB core
    
    This was only connected to the build for MIPS and has been
    disconnected from the build since MIPS was removed.
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D45432
---
 sys/dev/bhnd/cores/usb/bhnd_ehci.c   | 258 ----------------
 sys/dev/bhnd/cores/usb/bhnd_ohci.c   | 220 --------------
 sys/dev/bhnd/cores/usb/bhnd_usb.c    | 549 -----------------------------------
 sys/dev/bhnd/cores/usb/bhnd_usbvar.h |  60 ----
 4 files changed, 1087 deletions(-)

diff --git a/sys/dev/bhnd/cores/usb/bhnd_ehci.c 
b/sys/dev/bhnd/cores/usb/bhnd_ehci.c
deleted file mode 100644
index 765d7eaaa144..000000000000
--- a/sys/dev/bhnd/cores/usb/bhnd_ehci.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Copyright (C) 2008 MARVELL INTERNATIONAL LTD.
- * Copyright (c) 2010, Aleksandr Rybalko <r...@ddteam.net>
- * All rights reserved.
- *
- * Developed by Semihalf.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 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. Neither the name of MARVELL nor the names of contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
- */
-
-#include <sys/cdefs.h>
-/*
- * BHND attachment driver for the USB Enhanced Host Controller.
- * Ported from ZRouter with insignificant adaptations for FreeBSD11.
- */
-
-#include "opt_bus.h"
-
-#include <sys/stdint.h>
-#include <sys/stddef.h>
-#include <sys/param.h>
-#include <sys/queue.h>
-#include <sys/rman.h>
-#include <sys/types.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/bus.h>
-#include <sys/linker_set.h>
-#include <sys/module.h>
-#include <sys/lock.h>
-#include <sys/mutex.h>
-#include <sys/condvar.h>
-#include <sys/sysctl.h>
-#include <sys/sx.h>
-#include <sys/unistd.h>
-#include <sys/callout.h>
-#include <sys/malloc.h>
-#include <sys/priv.h>
-
-#include <dev/usb/usb.h>
-#include <dev/usb/usbdi.h>
-
-#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_process.h>
-#include <dev/usb/usb_util.h>
-
-#include <dev/usb/usb_controller.h>
-#include <dev/usb/usb_bus.h>
-#include <dev/usb/controller/ehci.h>
-#include <dev/usb/controller/ehcireg.h>
-
-#include <dev/bhnd/bhnd.h>
-
-#define        EHCI_HC_DEVSTR          "Broadcom EHCI"
-
-#define        USB_BRIDGE_INTR_CAUSE   0x210
-#define        USB_BRIDGE_INTR_MASK    0x214
-
-static device_attach_t bhnd_ehci_attach;
-static device_detach_t bhnd_ehci_detach;
-
-static int             bhnd_ehci_probe(device_t self);
-static void            bhnd_ehci_post_reset(struct ehci_softc *ehci_softc);
-
-static int
-bhnd_ehci_probe(device_t self)
-{
-
-       device_set_desc(self, EHCI_HC_DEVSTR);
-
-       return (BUS_PROBE_DEFAULT);
-}
-
-static void
-bhnd_ehci_post_reset(struct ehci_softc *ehci_softc)
-{
-        uint32_t       usbmode;
-
-        /* Force HOST mode */
-        usbmode = EOREAD4(ehci_softc, EHCI_USBMODE_NOLPM);
-        usbmode &= ~EHCI_UM_CM;
-        usbmode |= EHCI_UM_CM_HOST;
-        EOWRITE4(ehci_softc, EHCI_USBMODE_NOLPM, usbmode);
-}
-
-static int
-bhnd_ehci_attach(device_t self)
-{
-       ehci_softc_t    *sc;
-       int              err;
-       int              rid;
-
-       sc = device_get_softc(self);
-       /* initialise some bus fields */
-       sc->sc_bus.parent = self;
-       sc->sc_bus.devices = sc->sc_devices;
-       sc->sc_bus.devices_max = EHCI_MAX_DEVICES;
-       sc->sc_bus.usbrev = USB_REV_2_0;
-       sc->sc_bus.dma_bits = 32;
-
-       /* get all DMA memory */
-       if ((err = usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self),
-           &ehci_iterate_hw_softc)) != 0) {
-               BHND_ERROR_DEV(self, "can't allocate DMA memory: %d", err);
-               return (ENOMEM);
-       }
-
-       rid = 0;
-       sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, 
-           RF_ACTIVE);
-       if (!sc->sc_io_res) {
-               BHND_ERROR_DEV(self, "Could not map memory");
-               goto error;
-       }
-       sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);
-       sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);
-       sc->sc_io_size = rman_get_size(sc->sc_io_res);
-
-       rid = 0;
-       sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
-           RF_SHAREABLE | RF_ACTIVE);
-
-       if (sc->sc_irq_res == NULL) {
-               BHND_ERROR_DEV(self, "Could not allocate error irq");
-               bhnd_ehci_detach(self);
-               return (ENXIO);
-       }
-
-       sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
-       if (!sc->sc_bus.bdev) {
-               BHND_ERROR_DEV(self, "Could not add USB device");
-               goto error;
-       }
-       device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
-       device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);
-
-       sprintf(sc->sc_vendor, "Broadcom");
-
-       err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
-           NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);
-       if (err) {
-               BHND_ERROR_DEV(self, "Could not setup irq, %d", err);
-               sc->sc_intr_hdl = NULL;
-               goto error;
-       }
-
-       sc->sc_flags |= EHCI_SCFLG_LOSTINTRBUG;
-       sc->sc_vendor_post_reset = bhnd_ehci_post_reset;
-
-       err = ehci_init(sc);
-       if (!err) {
-               err = device_probe_and_attach(sc->sc_bus.bdev);
-       }
-       if (err) {
-               BHND_ERROR_DEV(self, "USB init failed err=%d", err);
-               goto error;
-       }
-       return (0);
-
-error:
-       bhnd_ehci_detach(self);
-       return (ENXIO);
-}
-
-static int
-bhnd_ehci_detach(device_t self)
-{
-       ehci_softc_t    *sc;
-       int              err;
-
-       sc = device_get_softc(self);
-
-       /* during module unload there are lots of children leftover */
-       device_delete_children(self);
-
-       /*
-        * disable interrupts that might have been switched on in ehci_init
-        */
-#ifdef notyet
-       if (sc->sc_io_res) {
-               EWRITE4(sc, EHCI_USBINTR, 0);
-               EWRITE4(sc, USB_BRIDGE_INTR_MASK, 0);
-       }
-#endif
-       if (sc->sc_irq_res && sc->sc_intr_hdl) {
-               /*
-                * only call ehci_detach() after ehci_init()
-                */
-               ehci_detach(sc);
-
-               err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl);
-
-               if (err)
-                       /* XXX or should we panic? */
-                       BHND_ERROR_DEV(self, "Could not tear down irq, %d", 
err);
-
-               sc->sc_intr_hdl = NULL;
-       }
-       if (sc->sc_irq_res) {
-               bus_release_resource(self, SYS_RES_IRQ, 0, sc->sc_irq_res);
-               sc->sc_irq_res = NULL;
-       }
-       if (sc->sc_io_res) {
-               bus_release_resource(self, SYS_RES_MEMORY, 0, sc->sc_io_res);
-               sc->sc_io_res = NULL;
-       }
-       usb_bus_mem_free_all(&sc->sc_bus, &ehci_iterate_hw_softc);
-
-       return (0);
-}
-
-static device_method_t ehci_methods[] = {
-       /* Device interface */
-       DEVMETHOD(device_probe,         bhnd_ehci_probe),
-       DEVMETHOD(device_attach,        bhnd_ehci_attach),
-       DEVMETHOD(device_detach,        bhnd_ehci_detach),
-       DEVMETHOD(device_suspend,       bus_generic_suspend),
-       DEVMETHOD(device_resume,        bus_generic_resume),
-       DEVMETHOD(device_shutdown,      bus_generic_shutdown),
-
-       /* Bus interface */
-       DEVMETHOD(bus_print_child,      bus_generic_print_child),
-       {0, 0}
-};
-
-static driver_t ehci_driver = {
-       "ehci",
-       ehci_methods,
-       sizeof(ehci_softc_t),
-};
-
-DRIVER_MODULE(ehci, bhnd_usb, ehci_driver, 0, 0);
-MODULE_DEPEND(ehci, usb, 1, 1, 1);
diff --git a/sys/dev/bhnd/cores/usb/bhnd_ohci.c 
b/sys/dev/bhnd/cores/usb/bhnd_ohci.c
deleted file mode 100644
index c72c50be4675..000000000000
--- a/sys/dev/bhnd/cores/usb/bhnd_ohci.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * Copyright (c) 2010, Aleksandr Rybalko <r...@ddteam.net>
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (augus...@carlstedt.se) at
- * Carlstedt Research & Technology.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 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.
- *
- * 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.
- */
-
-#include <sys/cdefs.h>
-/*
- * USB Open Host Controller driver.
- *
- * OHCI spec: http://www.intel.com/design/usb/ohci11d.pdf
- */
-
-/* The low level controller code for OHCI has been split into
- * SIBA probes and OHCI specific code. This was done to facilitate the
- * sharing of code between *BSD's
- */
-
-#include <sys/stdint.h>
-#include <sys/stddef.h>
-#include <sys/param.h>
-#include <sys/queue.h>
-#include <sys/rman.h>
-#include <sys/types.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/bus.h>
-#include <sys/linker_set.h>
-#include <sys/module.h>
-#include <sys/lock.h>
-#include <sys/mutex.h>
-#include <sys/condvar.h>
-#include <sys/sysctl.h>
-#include <sys/sx.h>
-#include <sys/unistd.h>
-#include <sys/callout.h>
-#include <sys/malloc.h>
-#include <sys/priv.h>
-
-#include <dev/usb/usb.h>
-#include <dev/usb/usbdi.h>
-
-#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_process.h>
-#include <dev/usb/usb_util.h>
-
-#include <dev/usb/usb_controller.h>
-#include <dev/usb/usb_bus.h>
-#include <dev/usb/controller/ohci.h>
-#include <dev/usb/controller/ohcireg.h>
-
-static device_probe_t bhnd_ohci_probe;
-static device_attach_t bhnd_ohci_attach;
-static device_detach_t bhnd_ohci_detach;
-
-static int
-bhnd_ohci_probe(device_t self)
-{
-       device_set_desc(self, "Broadcom OHCI");
-       return (0);
-}
-
-static int
-bhnd_ohci_attach(device_t self)
-{
-       ohci_softc_t    *sc;
-       int              rid;
-       int              err;
-
-       sc = device_get_softc(self);
-       /* initialise some bus fields */
-       sc->sc_bus.parent = self;
-       sc->sc_bus.devices = sc->sc_devices;
-       sc->sc_bus.devices_max = OHCI_MAX_DEVICES;
-       sc->sc_bus.dma_bits = 32;
-
-       /* get all DMA memory */
-       if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self),
-           &ohci_iterate_hw_softc)) {
-               return (ENOMEM);
-       }
-       sc->sc_dev = self;
-
-       rid = 0;
-       sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,
-           RF_ACTIVE);
-       if (!sc->sc_io_res) {
-               device_printf(self, "Could not map memory\n");
-               goto error;
-       }
-       sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);
-       sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);
-       sc->sc_io_size = rman_get_size(sc->sc_io_res);
-
-       rid = 0;
-       sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
-           RF_SHAREABLE | RF_ACTIVE);
-       if (sc->sc_irq_res == NULL) {
-               device_printf(self, "Could not allocate irq\n");
-               goto error;
-       }
-       sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
-       if (!sc->sc_bus.bdev) {
-               device_printf(self, "Could not add USB device\n");
-               goto error;
-       }
-       device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
-
-       strlcpy(sc->sc_vendor, "Broadcom", sizeof(sc->sc_vendor));
-
-       err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
-           NULL, (driver_intr_t *)ohci_interrupt, sc, &sc->sc_intr_hdl);
-
-       if (err) {
-               device_printf(self, "Could not setup irq, %d\n", err);
-               sc->sc_intr_hdl = NULL;
-               goto error;
-       }
-       err = ohci_init(sc);
-       if (!err) {
-               err = device_probe_and_attach(sc->sc_bus.bdev);
-       }
-       if (err) {
-               device_printf(self, "USB init failed\n");
-               goto error;
-       }
-       return (0);
-
-error:
-       bhnd_ohci_detach(self);
-       return (ENXIO);
-}
-
-static int
-bhnd_ohci_detach(device_t self)
-{
-       ohci_softc_t    *sc;
-
-       sc = device_get_softc(self);
-
-       /* during module unload there are lots of children leftover */
-       device_delete_children(self);
-
-       if (sc->sc_irq_res && sc->sc_intr_hdl) {
-               /*
-                * only call ohci_detach() after ohci_init()
-                */
-               ohci_detach(sc);
-
-               int err = bus_teardown_intr(self, sc->sc_irq_res, 
sc->sc_intr_hdl);
-
-               if (err) {
-                       /* XXX or should we panic? */
-                       device_printf(self, "Could not tear down irq, %d\n",
-                           err);
-               }
-               sc->sc_intr_hdl = NULL;
-       }
-       if (sc->sc_irq_res) {
-               bus_release_resource(self, SYS_RES_IRQ, 0, sc->sc_irq_res);
-               sc->sc_irq_res = NULL;
-       }
-       if (sc->sc_io_res) {
-               bus_release_resource(self, SYS_RES_MEMORY, 0,
-                   sc->sc_io_res);
-               sc->sc_io_res = NULL;
-       }
-       usb_bus_mem_free_all(&sc->sc_bus, &ohci_iterate_hw_softc);
-
-       return (0);
-}
-
-static device_method_t bhnd_ohci_methods[] = {
-       /* Device interface */
-       DEVMETHOD(device_probe,         bhnd_ohci_probe),
-       DEVMETHOD(device_attach,        bhnd_ohci_attach),
-       DEVMETHOD(device_detach,        bhnd_ohci_detach),
-       DEVMETHOD(device_suspend,       bus_generic_suspend),
-       DEVMETHOD(device_resume,        bus_generic_resume),
-       DEVMETHOD(device_shutdown,      bus_generic_shutdown),
-
-       DEVMETHOD_END
-};
-
-static driver_t ohci_driver = {
-       .name = "ohci",
-       .methods = bhnd_ohci_methods,
-       .size = sizeof(struct ohci_softc),
-};
-
-DRIVER_MODULE(ohci, bhnd_usb, ohci_driver, 0, 0);
-MODULE_DEPEND(ohci, usb, 1, 1, 1);
diff --git a/sys/dev/bhnd/cores/usb/bhnd_usb.c 
b/sys/dev/bhnd/cores/usb/bhnd_usb.c
deleted file mode 100644
index 7a86db79731f..000000000000
--- a/sys/dev/bhnd/cores/usb/bhnd_usb.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2010, Aleksandr Rybalko <r...@ddteam.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice unmodified, this list of conditions, and the following
- *    disclaimer.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
- */
-
-#include <sys/cdefs.h>
-/*
- * Ported version of BroadCom USB core driver from ZRouter project
- */
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/errno.h>
-#include <sys/bus.h>
-#include <sys/rman.h>
-#include <sys/malloc.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <dev/bhnd/bhnd.h>
-
-#include <dev/bhnd/cores/pmu/bhnd_pmureg.h>
-
-#include "bhnd_usbvar.h"
-
-/****************************** Variables ************************************/
-static const struct bhnd_device bhnd_usb_devs[] = {
-       BHND_DEVICE(BCM,        USB20H, "USB2.0 Host core",             NULL),
-       BHND_DEVICE_END
-};
-
-/****************************** Prototypes ***********************************/
-
-static int     bhnd_usb_attach(device_t);
-static int     bhnd_usb_probe(device_t);
-static device_t        bhnd_usb_add_child(device_t dev, u_int order, const 
char *name, 
-                   int unit);
-static int     bhnd_usb_print_all_resources(device_t dev);
-static int     bhnd_usb_print_child(device_t bus, device_t child);
-
-static struct resource *       bhnd_usb_alloc_resource(device_t bus,
-                                   device_t child, int type, int *rid,
-                                   rman_res_t start, rman_res_t end,
-                                   rman_res_t count, u_int flags);
-static int                     bhnd_usb_release_resource(device_t dev,
-                                   device_t child, struct resource *r);
-
-static struct resource_list *  bhnd_usb_get_reslist(device_t dev,
-                                   device_t child);
-
-static int
-bhnd_usb_probe(device_t dev)
-{
-       const struct bhnd_device        *id;
-
-       id = bhnd_device_lookup(dev, bhnd_usb_devs, sizeof(bhnd_usb_devs[0]));
-       if (id == NULL)
-               return (ENXIO);
-
-       device_set_desc(dev, id->desc);
-       return (BUS_PROBE_DEFAULT);
-}
-
-static int
-bhnd_usb_attach(device_t dev)
-{
-       struct bhnd_usb_softc   *sc;
-       int                      rid;
-       uint32_t                 tmp;
-       int                      tries, err;
-
-       sc = device_get_softc(dev);
-
-       bhnd_reset_hw(dev, 0, 0);
-
-       /*
-        * Allocate the resources which the parent bus has already
-        * determined for us.
-        * XXX: There are few windows (usually 2), RID should be chip-specific
-        */
-       rid = 0;
-       sc->sc_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, 
RF_ACTIVE);
-       if (sc->sc_mem == NULL) {
-               BHND_ERROR_DEV(dev, "unable to allocate memory");
-               return (ENXIO);
-       }
-
-       sc->sc_bt = rman_get_bustag(sc->sc_mem);
-       sc->sc_bh = rman_get_bushandle(sc->sc_mem);
-       sc->sc_maddr = rman_get_start(sc->sc_mem);
-       sc->sc_msize = rman_get_size(sc->sc_mem);
-
-       rid = 0;
-       sc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, 
-               RF_SHAREABLE | RF_ACTIVE);
-       if (sc->sc_irq == NULL) {
-               BHND_ERROR_DEV(dev, "unable to allocate IRQ");
-               return (ENXIO);
-       }
-
-       sc->sc_irqn = rman_get_start(sc->sc_irq);
-
-       sc->mem_rman.rm_start = sc->sc_maddr;
-       sc->mem_rman.rm_end = sc->sc_maddr + sc->sc_msize - 1;
-       sc->mem_rman.rm_type = RMAN_ARRAY;
-       sc->mem_rman.rm_descr = "BHND USB core I/O memory addresses";
-       if (rman_init(&sc->mem_rman) != 0 ||
-           rman_manage_region(&sc->mem_rman, sc->mem_rman.rm_start,
-           sc->mem_rman.rm_end) != 0) {
-               panic("%s: sc->mem_rman", __func__);
-       }
-
-       /* TODO: macros for registers */
-       bus_write_4(sc->sc_mem, 0x200, 0x7ff); 
-       DELAY(100); 
-
-#define        OHCI_CONTROL            0x04
-       bus_write_4(sc->sc_mem, OHCI_CONTROL, 0);
-
-       if ( bhnd_get_device(dev) == BHND_COREID_USB20H) {
-               uint32_t rev = bhnd_get_hwrev(dev);
-               BHND_INFO_DEV(dev, "USB HOST 2.0 setup for rev %d", rev);
-               if (rev == 1/* ? == 2 */) {
-                       /* SiBa code */
-
-                       /* Change Flush control reg */
-                       tmp = bus_read_4(sc->sc_mem, 0x400) & ~0x8;
-                       bus_write_4(sc->sc_mem, 0x400, tmp);
-                       tmp = bus_read_4(sc->sc_mem, 0x400);
-                       BHND_DEBUG_DEV(dev, "USB20H fcr: 0x%x", tmp);
-
-                       /* Change Shim control reg */
-                       tmp = bus_read_4(sc->sc_mem, 0x304) & ~0x100;
-                       bus_write_4(sc->sc_mem, 0x304, tmp);
-                       tmp = bus_read_4(sc->sc_mem, 0x304);
-                       BHND_DEBUG_DEV(dev, "USB20H shim: 0x%x", tmp);
-               } else if (rev >= 5) {
-                       /* BCMA code */
-                       err = bhnd_alloc_pmu(dev);
-                       if(err) {
-                               BHND_ERROR_DEV(dev, "can't alloc pmu: %d", err);
-                               return (err);
-                       }
-
-                       err = bhnd_request_ext_rsrc(dev, 1);
-                       if(err) {
-                               BHND_ERROR_DEV(dev, "can't req ext: %d", err);
-                               return (err);
-                       }
-                       /* Take out of resets */
-                       bus_write_4(sc->sc_mem, 0x200, 0x4ff);
-                       DELAY(25);
-                       bus_write_4(sc->sc_mem, 0x200, 0x6ff);
-                       DELAY(25);
-
-                       /* Make sure digital and AFE are locked in USB PHY */
-                       bus_write_4(sc->sc_mem, 0x524, 0x6b);
-                       DELAY(50);
-                       bus_read_4(sc->sc_mem, 0x524);
-                       DELAY(50);
-                       bus_write_4(sc->sc_mem, 0x524, 0xab);
-                       DELAY(50);
-                       bus_read_4(sc->sc_mem, 0x524);
-                       DELAY(50);
-                       bus_write_4(sc->sc_mem, 0x524, 0x2b);
-                       DELAY(50);
-                       bus_read_4(sc->sc_mem, 0x524);
-                       DELAY(50);
-                       bus_write_4(sc->sc_mem, 0x524, 0x10ab);
-                       DELAY(50);
-                       bus_read_4(sc->sc_mem, 0x524);
-
-                       tries = 10000;
-                       for (;;) {
-                               DELAY(10);
-                               tmp = bus_read_4(sc->sc_mem, 0x528);
-                               if (tmp & 0xc000)
-                                       break;
-                               if (--tries != 0)
-                                       continue;
-
-                               tmp = bus_read_4(sc->sc_mem, 0x528);
-                               BHND_ERROR_DEV(dev, "USB20H mdio_rddata 
0x%08x", tmp);
-                       }
-
-                       /* XXX: Puzzle code */
-                       bus_write_4(sc->sc_mem, 0x528, 0x80000000);
-                       bus_read_4(sc->sc_mem, 0x314);
-                       DELAY(265);
-                       bus_write_4(sc->sc_mem, 0x200, 0x7ff);
-                       DELAY(10);
-
-                       /* Take USB and HSIC out of non-driving modes */
-                       bus_write_4(sc->sc_mem, 0x510, 0);
-               }
-       }
-
-       bus_generic_probe(dev);
-
-       if (bhnd_get_device(dev) == BHND_COREID_USB20H &&
-           ( bhnd_get_hwrev(dev) > 0))
-               bhnd_usb_add_child(dev, 0, "ehci", -1);
-       bhnd_usb_add_child(dev, 1, "ohci", -1);
-
-       bus_generic_attach(dev);
-
-       return (0);
-}
-
-static struct rman *
-bhnd_usb_get_rman(device_t bus, int type, u_int flags)
-{
-       struct bhnd_usb_softc           *sc = device_get_softc(bus);
-
-       switch (type) {
-       case SYS_RES_MEMORY:
-               return (&sc->sc_mem_rman);
-       default:
-               return (NULL);
-       }
-}
-
-static struct resource *
-bhnd_usb_alloc_resource(device_t bus, device_t child, int type, int *rid,
-    rman_res_t start, rman_res_t end, rman_res_t count, u_int flags)
-{
-       struct resource                 *rv;
-       struct resource_list            *rl;
-       struct resource_list_entry      *rle;
-       int                              passthrough, isdefault;
-
-       isdefault = RMAN_IS_DEFAULT_RANGE(start,end);
-       passthrough = (device_get_parent(child) != bus);
-       rle = NULL;
-
-       if (!passthrough && isdefault) {
-               BHND_INFO_DEV(bus, "trying allocate def %d - %d for %s", type,
-                   *rid, device_get_nameunit(child) );
-
-               rl = BUS_GET_RESOURCE_LIST(bus, child);
-               rle = resource_list_find(rl, type, *rid);
-               if (rle == NULL)
-                       return (NULL);
-               if (rle->res != NULL)
-                       panic("%s: resource entry is busy", __func__);
-               start = rle->start;
-               end = rle->end;
-               count = rle->count;
-       } else {
-               BHND_INFO_DEV(bus, "trying allocate %d - %d (%jx-%jx) for %s", 
type,
-                  *rid, start, end, device_get_nameunit(child) );
-       }
-
-       /*
-        * If the request is for a resource which we manage,
-        * attempt to satisfy the allocation ourselves.
-        */
-       if (type == SYS_RES_MEMORY) {
-               rv = bus_generic_rman_alloc_resource(bus, child, type, rid,
-                   start, end, count, flags);
-               if (rv == NULL) {
-                       BHND_ERROR_DEV(bus, "could not allocate resource");
-                       return (NULL);
-               }
-
-               return (rv);
-       }
-
-       /*
-        * Pass the request to the parent.
-        */
-       return (bus_generic_rl_alloc_resource(bus, child, type, rid, start, end,
-           count, flags));
-}
-
-static struct resource_list *
-bhnd_usb_get_reslist(device_t dev, device_t child)
-{
-       struct bhnd_usb_devinfo *sdi;
-
-       sdi = device_get_ivars(child);
-
-       return (&sdi->sdi_rl);
-}
-
-static int
-bhnd_usb_release_resource(device_t dev, device_t child,
-    struct resource *r)
-{
-       struct bhnd_usb_softc           *sc;
-       struct resource_list_entry      *rle;
-       bool                             passthrough;
-       int                              error;
-
-       sc = device_get_softc(dev);
-       passthrough = (device_get_parent(child) != dev);
-
-       /* Delegate to our parent device's bus if the requested resource type
-        * isn't handled locally. */
-       if (type != SYS_RES_MEMORY) {
-               return (bus_generic_rl_release_resource(dev, child, r));
-       }
-
-       error = bus_generic_rman_release_resource(dev, child, r);
-       if (error != 0)
-               return (error);
-
-       if (!passthrough) {
-               /* Clean resource list entry */
-               rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child),
-                   rman_get_type(r), rman_get_rid(r));
-               if (rle != NULL)
-                       rle->res = NULL;
-       }
-
-       return (0);
-}
-
-static int
-bhnd_usb_activate_resource(device_t dev, device_t child, struct resource *r)
-{
-       if (type != SYS_RES_MEMORY)
-               return (bus_generic_activate_resource(dev, child, r));
-       return (bus_generic_rman_activate_resource(dev, child, r));
-}
-
-static int
-bhnd_usb_deactivate_resource(device_t dev, device_t child, struct resource *r)
-{
-       if (type != SYS_RES_MEMORY)
-               return (bus_generic_deactivate_resource(dev, child, r));
-       return (bus_generic_rman_deactivate_resource(dev, child, r));
-}
-
-static int
-bhnd_usb_map_resource(device_t dev, device_t child, int type,
-    struct resource *r, struct resource_map_request *argsp,
-    struct resource_map *map)
-{
-       struct bhnd_usb_softc *sc = device_get_softc(dev);
-       struct resource_map_request args;
-       rman_res_t length, start;
-       int error;
-
-       if (type != SYS_RES_MEMORY)
-               return (bus_generic_map_resource(dev, child, type, r, argsp,
-                   map));
-
-       /* Resources must be active to be mapped. */
-       if (!(rman_get_flags(r) & RF_ACTIVE))
-               return (ENXIO);
-
-       resource_init_map_request(&args);
-       error = resource_validate_map_request(r, argsp, &args, &start, &length);
-       if (error)
-               return (error);
-
-       args.offset = start - rman_get_start(sc->sc_mem);
-       args.length = length;
-       return (bus_generic_map_resource(dev, child, type, sc->sc_mem, &args,
-           map));
-}
-
-static int
-bhnd_usb_unmap_resource(device_t dev, device_t child, int type,
-    struct resource *r, struct resource_map *map)
-{
-       struct bhnd_usb_softc *sc = device_get_softc(dev);
-
-       if (type == SYS_RES_MEMORY)
-               r = sc->sc_mem;
-       return (bus_generic_unmap_resource(dev, child, type, r, map));
-}
-
-static int
-bhnd_usb_print_all_resources(device_t dev)
-{
-       struct bhnd_usb_devinfo *sdi;
-       struct resource_list    *rl;
-       int                      retval;
-
-       retval = 0;
-       sdi = device_get_ivars(dev);
-       rl = &sdi->sdi_rl;
-
-       if (STAILQ_FIRST(rl))
-               retval += printf(" at");
-
-       retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%jx");
-       retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
-
-       return (retval);
-}
-
-static int
-bhnd_usb_print_child(device_t bus, device_t child)
-{
-       int retval = 0;
-
-       retval += bus_print_child_header(bus, child);
-       retval += bhnd_usb_print_all_resources(child);
-       if (device_get_flags(child))
-               retval += printf(" flags %#x", device_get_flags(child));
-       retval += printf(" on %s\n", device_get_nameunit(bus));
-
-       return (retval);
-}
-
-static device_t
-bhnd_usb_add_child(device_t dev, u_int order, const char *name, int unit)
-{
-       struct bhnd_usb_softc           *sc;
-       struct bhnd_usb_devinfo         *sdi;
-       device_t                         child;
-       int                              error;
-
-       sc = device_get_softc(dev);
-
-       sdi = malloc(sizeof(struct bhnd_usb_devinfo), M_DEVBUF, 
M_NOWAIT|M_ZERO);
-       if (sdi == NULL)
-               return (NULL);
-
-       resource_list_init(&sdi->sdi_rl);
-       sdi->sdi_irq_mapped = false;
-
-       if (strncmp(name, "ohci", 4) == 0) 
-       {
-               sdi->sdi_maddr = sc->sc_maddr + 0x000;
-               sdi->sdi_msize = 0x200;
-       }
-       else if (strncmp(name, "ehci", 4) == 0) 
-       {
-               sdi->sdi_maddr = sc->sc_maddr + 0x000;
-               sdi->sdi_msize = 0x1000;
-       }
-       else
-       {
-               panic("Unknown subdevice");
-       }
-
*** 149 LINES SKIPPED ***

Reply via email to