git: c7c037fad186 - main - bhnd: Remove orphaned driver for the BHND USB core

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Sat, 01 Jun 2024 20:25:44 UTC
The branch main has been updated by jhb:

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

commit c7c037fad1862c18e3e9635b06194a4ca00ac3c1
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-06-01 20:25:12 +0000
Commit:     John Baldwin <jhb@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 <ray@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 <ray@ddteam.net>
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (augustss@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 <ray@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 ***