static int ndis_detach_usb(device_t dev) { struct ndis_softc *sc; struct ndisusb_ep *ne; int i; sc = device_get_softc(dev); sc->ndisusb_status |= NDISUSB_STATUS_DETACH; ndis_pnp_event_nic(sc, NDIS_DEVICE_PNP_EVENT_SURPRISE_REMOVED, 0); if (sc->ndisusb_status & NDISUSB_STATUS_SETUP_EP) { usbd_transfer_unsetup(sc->ndisusb_dread_ep.ne_xfer, 1); usbd_transfer_unsetup(sc->ndisusb_dwrite_ep.ne_xfer, 1); } for (i = 0; i < NDISUSB_ENDPT_MAX; i++) { ne = &sc->ndisusb_ep[i]; usbd_transfer_unsetup(ne->ne_xfer, 1); } ndis_detach(dev); mtx_destroy(&sc->ndisusb_mtx); return (0); }
static int ndisusb_detach(device_t self) { int i, error; struct ndis_softc *sc = device_get_softc(self); struct usb_attach_arg *uaa = device_get_ivars(self); wlan_serialize_enter(); sc->ndisusb_status |= NDISUSB_STATUS_DETACH; for (i = 0; i < NDISUSB_ENDPT_MAX; i++) { if (sc->ndisusb_ep[i] == NULL) continue; usbd_abort_pipe(sc->ndisusb_ep[i]); usbd_close_pipe(sc->ndisusb_ep[i]); sc->ndisusb_ep[i] = NULL; } if (sc->ndisusb_iin_buf != NULL) { kfree(sc->ndisusb_iin_buf, M_USBDEV); sc->ndisusb_iin_buf = NULL; } ndis_pnpevent_nic(self, NDIS_PNP_EVENT_SURPRISE_REMOVED); usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, uaa->device, self); error = ndis_detach(self); wlan_serialize_exit(); return error; }
static int ndisusb_detach(device_t self) { int i; struct ndis_softc *sc = device_get_softc(self); struct ndisusb_ep *ne; sc->ndisusb_status |= NDISUSB_STATUS_DETACH; ndis_pnpevent_nic(self, NDIS_PNP_EVENT_SURPRISE_REMOVED); if (sc->ndisusb_status & NDISUSB_STATUS_SETUP_EP) { usbd_transfer_unsetup(sc->ndisusb_dread_ep.ne_xfer, 1); usbd_transfer_unsetup(sc->ndisusb_dwrite_ep.ne_xfer, 1); } for (i = 0; i < NDISUSB_ENDPT_MAX; i++) { ne = &sc->ndisusb_ep[i]; usbd_transfer_unsetup(ne->ne_xfer, 1); } (void)ndis_detach(self); lockuninit(&sc->ndisusb_lock); return (0); }
static int ndis_detach_pccard(device_t dev) { int error = 0; wlan_serialize_enter(); error = ndis_detach(dev); wlan_serialize_exit(); return(error); }