static int uhci_pci_detach(device_t self, int flags) { struct uhci_pci_softc *sc = device_private(self); int rv; if (sc->sc_initialized & SC_INIT_UHCI) { rv = uhci_detach(&sc->sc, flags); if (rv) return (rv); } if (sc->sc_initialized & SC_INIT_PMF) pmf_device_deregister(self); /* disable interrupts and acknowledge any pending */ bus_space_write_2(sc->sc.iot, sc->sc.ioh, UHCI_INTR, 0); bus_space_write_2(sc->sc.iot, sc->sc.ioh, UHCI_STS, bus_space_read_2(sc->sc.iot, sc->sc.ioh, UHCI_STS)); 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 uhci_pci_detach(struct device *self, int flags) { struct uhci_pci_softc *sc = (struct uhci_pci_softc *)self; int rv; rv = uhci_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 uhci_cardbus_detach(device_t self, int flags) { struct uhci_cardbus_softc *sc = device_private(self); struct cardbus_devfunc *ct = sc->sc_ct; int rv; rv = uhci_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_CBIO, 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); }
int uhci_cardbus_detach(struct device *self, int flags) { struct uhci_cardbus_softc *sc = (struct uhci_cardbus_softc *)self; struct cardbus_devfunc *ct = sc->sc_ct; int rv; rv = uhci_detach(&sc->sc, 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, PCI_CBIO, sc->sc.iot, sc->sc.ioh, sc->sc.sc_size); sc->sc.sc_size = 0; } return (0); }