static int ralink_ohci_detach(device_t self, int flags) { struct ralink_ohci_softc *sc = device_private(self); int rv; pmf_device_deregister(self); rv = ohci_detach(&sc->sc_ohci, flags); if (rv != 0) return rv; if (sc->sc_ih != NULL) { ra_intr_disestablish(sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc_ohci.sc_size == 0) { bus_space_unmap(sc->sc_ohci.iot, sc->sc_ohci.ioh, sc->sc_ohci.sc_size); sc->sc_ohci.sc_size = 0; } #if NEHCI > 0 ralink_usb_hc_rem(&sc->sc_hc); #endif return 0; }
static int pxaohci_detach(device_t self, int flags) { struct pxaohci_softc *sc = device_private(self); int error; error = ohci_detach(&sc->sc, flags); if (error) return error; #if 0 if (sc->sc.sc_powerhook) { powerhook_disestablish(sc->sc.sc_powerhook); sc->sc.sc_powerhook = NULL; } #endif if (sc->sc_ih) { pxa2x0_intr_disestablish(sc->sc_ih); sc->sc_ih = NULL; } pxaohci_disable(sc); /* stop clock */ pxa2x0_clkman_config(CKEN_USBHC, 0); if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return 0; }
static int ohci_pci_detach(device_t self, int flags) { struct ohci_pci_softc *sc = device_private(self); int rv; rv = ohci_detach(&sc->sc, flags); if (rv) return rv; pmf_device_deregister(self); ohci_shutdown(self, flags); if (sc->sc.sc_size) { /* Disable interrupts, so we don't get any spurious ones. */ bus_space_write_4(sc->sc.iot, sc->sc.ioh, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS); } if (sc->sc_ih != NULL) { pci_intr_disestablish(sc->sc_pc, sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } #if NEHCI > 0 usb_pci_rem(&sc->sc_pci); #endif return 0; }
int pxaohci_detach(struct device *self, int flags) { struct pxaohci_softc *sc = (struct pxaohci_softc *)self; int rv; rv = ohci_detach(self, flags); if (rv) return (rv); if (sc->sc_ih != NULL) { pxa2x0_intr_disestablish(sc->sc_ih); sc->sc_ih = NULL; } pxaohci_disable(sc); /* stop clock */ pxa2x0_clkman_config(CKEN_USBHC, 0); if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return (0); }
static int ohci_pci_detach(device_t self) { ohci_softc_t *sc = device_get_softc(self); if (sc->sc_flags & OHCI_SCFLG_DONEINIT) { ohci_detach(sc, 0); 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); sc->ih = NULL; } if (sc->sc_bus.bdev) { device_delete_child(self, sc->sc_bus.bdev); sc->sc_bus.bdev = NULL; } if (sc->irq_res) { bus_release_resource(self, SYS_RES_IRQ, 0, sc->irq_res); sc->irq_res = NULL; } if (sc->io_res) { bus_release_resource(self, SYS_RES_MEMORY, PCI_CBMEM, sc->io_res); sc->io_res = NULL; sc->iot = 0; sc->ioh = 0; } return 0; }
static int ohci_atmelarm_detach(device_t dev) { struct at91_ohci_softc *sc = device_get_softc(dev); device_t bdev; int err; if (sc->sc_ohci.sc_bus.bdev) { bdev = sc->sc_ohci.sc_bus.bdev; device_detach(bdev); device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ device_delete_children(dev); /* * Put the controller into reset, then disable clocks and do * the MI tear down. We have to disable the clocks/hardware * after we do the rest of the teardown. We also disable the * clocks in the opposite order we acquire them, but that * doesn't seem to be absolutely necessary. We free up the * clocks after we disable them, so the system could, in * theory, reuse them. */ bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl, OHCI_CONTROL, 0); at91_pmc_clock_disable(sc->fclk); at91_pmc_clock_disable(sc->iclk); at91_pmc_clock_disable(sc->mclk); at91_pmc_clock_deref(sc->fclk); at91_pmc_clock_deref(sc->iclk); at91_pmc_clock_deref(sc->mclk); if (sc->sc_ohci.sc_irq_res && sc->sc_ohci.sc_intr_hdl) { /* * only call ohci_detach() after ohci_init() */ ohci_detach(&sc->sc_ohci); err = bus_teardown_intr(dev, sc->sc_ohci.sc_irq_res, sc->sc_ohci.sc_intr_hdl); sc->sc_ohci.sc_intr_hdl = NULL; } if (sc->sc_ohci.sc_irq_res) { bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_ohci.sc_irq_res); sc->sc_ohci.sc_irq_res = NULL; } if (sc->sc_ohci.sc_io_res) { bus_release_resource(dev, SYS_RES_MEMORY, MEM_RID, sc->sc_ohci.sc_io_res); sc->sc_ohci.sc_io_res = NULL; } usb_bus_mem_free_all(&sc->sc_ohci.sc_bus, &ohci_iterate_hw_softc); return (0); }
static int ohci_obio_detach(device_t self) { ohci_softc_t *sc = device_get_softc(self); device_t bdev; int err; if (sc->sc_bus.bdev) { bdev = sc->sc_bus.bdev; device_detach(bdev); device_delete_child(self, bdev); } /* 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); /* Stop OHCI clock */ rt305x_sysctl_set(SYSCTL_CLKCFG1, rt305x_sysctl_get(SYSCTL_CLKCFG1) & ~(SYSCTL_CLKCFG1_UPHY0_CLK_EN #ifdef MT7620 | SYSCTL_CLKCFG1_UPHY1_CLK_EN #endif )); err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl); if (err) 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 int bhnd_ohci_detach(device_t self) { ohci_softc_t *sc; device_t bdev; sc = device_get_softc(self); if (sc->sc_bus.bdev) { bdev = sc->sc_bus.bdev; device_detach(bdev); device_delete_child(self, bdev); } /* 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 int ohci_ec_detach(device_t dev) { struct ec_ohci_softc *sc = device_get_softc(dev); device_t bdev; int err; if (sc->sc_ohci.sc_bus.bdev) { bdev = sc->sc_ohci.sc_bus.bdev; device_detach(bdev); device_delete_child(dev, bdev); } /* during module unload there are lots of children leftover */ device_delete_children(dev); bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl, OHCI_CONTROL, 0); if (sc->sc_ohci.sc_irq_res && sc->sc_ohci.sc_intr_hdl) { /* * only call ohci_detach() after ohci_init() */ ohci_detach(&sc->sc_ohci); err = bus_teardown_intr(dev, sc->sc_ohci.sc_irq_res, sc->sc_ohci.sc_intr_hdl); sc->sc_ohci.sc_intr_hdl = NULL; } if (sc->sc_ohci.sc_irq_res) { bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_ohci.sc_irq_res); sc->sc_ohci.sc_irq_res = NULL; } if (sc->sc_ohci.sc_io_res) { bus_release_resource(dev, SYS_RES_MEMORY, MEM_RID, sc->sc_ohci.sc_io_res); sc->sc_ohci.sc_io_res = NULL; } usb_bus_mem_free_all(&sc->sc_ohci.sc_bus, &ohci_iterate_hw_softc); return (0); }
int ohci_pci_detach(struct device *self, int flags) { struct ohci_pci_softc *sc = (struct ohci_pci_softc *)self; int rv; rv = ohci_detach(&sc->sc, flags); if (rv) return (rv); if (sc->sc_ih != NULL) { pci_intr_disestablish(sc->sc_pc, sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return (0); }
static int ohci_pci_detach(device_ptr_t self, int flags) { struct ohci_pci_softc *sc = device_private(self); int rv; rv = ohci_detach(&sc->sc, flags); if (rv) return (rv); if (sc->sc_ih != NULL) { pci_intr_disestablish(sc->sc_pc, sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } #if NEHCI > 0 usb_pci_rem(&sc->sc_pci); #endif return (0); }
static int obioohci_detach(struct device *self, int flags) { struct obioohci_softc *sc = (struct obioohci_softc *)self; int error; error = ohci_detach(&sc->sc, flags); if (error) return error; if (sc->sc.sc_powerhook) { powerhook_disestablish(sc->sc.sc_powerhook); sc->sc.sc_powerhook = NULL; } if (sc->sc_ih) { #ifdef NOTYET obio_gpio_intr_disestablish(sc->sc_ih); #endif sc->sc_ih = NULL; } obioohci_disable(sc); #ifdef NOTYET /* stop clock */ #ifdef DEBUG pxa2x0_clkman_config(CKEN_USBHC, 0); #endif #endif if (sc->sc.sc_size) { bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return 0; }
int ohci_cardbus_detach(struct device *self, int flags) { struct ohci_cardbus_softc *sc = (struct ohci_cardbus_softc *)self; struct cardbus_devfunc *ct = sc->sc_ct; int rv; rv = ohci_detach(self, flags); if (rv) return (rv); if (sc->sc_ih != NULL) { cardbus_intr_disestablish(sc->sc_cc, sc->sc_cf, sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc.sc_size) { Cardbus_mapreg_unmap(ct, CARDBUS_CBMEM, sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return (0); }
int ohci_cardbus_detach(device_t self, int flags) { struct ohci_cardbus_softc *sc = device_private(self); struct cardbus_devfunc *ct = sc->sc_ct; int rv; rv = ohci_detach(&sc->sc, flags); if (rv) return (rv); if (sc->sc_ih != NULL) { Cardbus_intr_disestablish(ct, sc->sc_ih); sc->sc_ih = NULL; } if (sc->sc.sc_size) { Cardbus_mapreg_unmap(ct, PCI_CBMEM, sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } #if NEHCI_CARDBUS > 0 usb_cardbus_rem(&sc->sc_cardbus); #endif return (0); }