void usba10_usb_unregister_event_cbs( dev_info_t *dip, usb_event_t *usb_evt_data) { usb_unregister_event_cbs(dip, usb_evt_data); }
/* * configuration clean up */ static void uftdi_cleanup(uftdi_state_t *uf, int level) { ASSERT(level > 0 && level <= UFTDI_CLEANUP_LEVEL_MAX); switch (level) { default: case 6: uftdi_close_pipes(uf); /*FALLTHROUGH*/ case 5: usb_unregister_event_cbs(uf->uf_dip, uf->uf_usb_events); /*FALLTHROUGH*/ case 4: uftdi_destroy_pm_components(uf); /*FALLTHROUGH*/ case 3: mutex_destroy(&uf->uf_lock); cv_destroy(&uf->uf_tx_cv); usb_free_log_hdl(uf->uf_lh); uf->uf_lh = NULL; usb_free_descr_tree(uf->uf_dip, uf->uf_dev_data); uf->uf_def_ph = NULL; /*FALLTHROUGH*/ case 2: usb_client_detach(uf->uf_dip, uf->uf_dev_data); /*FALLTHROUGH*/ case 1: kmem_free(uf, sizeof (*uf)); break; } }
/*ARGSUSED*/ int usb_register_event_cbs(dev_info_t *dip, usb_event_t *usb_evdata, usb_flags_t flags) { usba_device_t *usba_device; usba_evdata_t *evdata; if ((dip == NULL) || (usb_evdata == NULL)) { return (USB_FAILURE); } /* * The event list searches by ddi_get_eventcookie calls below, go * through hubd and so do not apply to host controllers. */ ASSERT(!usba_is_root_hub(dip)); usba_device = usba_get_usba_device(dip); evdata = usba_get_evdata(dip); if (usb_evdata->disconnect_event_handler != NULL) { if (usba_device->rm_cookie == NULL) { if (ddi_get_eventcookie(dip, DDI_DEVI_REMOVE_EVENT, &usba_device->rm_cookie) != DDI_SUCCESS) { goto fail; } } if (ddi_add_event_handler(dip, usba_device->rm_cookie, (peh_t)usb_evdata->disconnect_event_handler, NULL, &evdata->ev_rm_cb_id) != DDI_SUCCESS) { goto fail; } } if (usb_evdata->reconnect_event_handler != NULL) { if (usba_device->ins_cookie == NULL) { if (ddi_get_eventcookie(dip, DDI_DEVI_INSERT_EVENT, &usba_device->ins_cookie) != DDI_SUCCESS) { goto fail; } } if (ddi_add_event_handler(dip, usba_device->ins_cookie, (peh_t)usb_evdata->reconnect_event_handler, NULL, &evdata->ev_ins_cb_id) != DDI_SUCCESS) { goto fail; } } if (usb_evdata->post_resume_event_handler != NULL) { if (usba_device->resume_cookie == NULL) { if (ddi_get_eventcookie(dip, USBA_POST_RESUME_EVENT, &usba_device->resume_cookie) != DDI_SUCCESS) { goto fail; } } if (ddi_add_event_handler(dip, usba_device->resume_cookie, (peh_t)usb_evdata->post_resume_event_handler, NULL, &evdata->ev_resume_cb_id) != DDI_SUCCESS) { goto fail; } } if (usb_evdata->pre_suspend_event_handler != NULL) { if (usba_device->suspend_cookie == NULL) { if (ddi_get_eventcookie(dip, USBA_PRE_SUSPEND_EVENT, &usba_device->suspend_cookie) != DDI_SUCCESS) { goto fail; } } if (ddi_add_event_handler(dip, usba_device->suspend_cookie, (peh_t)usb_evdata->pre_suspend_event_handler, NULL, &evdata->ev_suspend_cb_id) != DDI_SUCCESS) { goto fail; } } mutex_enter(&usba_device->usb_mutex); usba_device->usb_client_flags[usba_get_ifno(dip)] |= USBA_CLIENT_FLAG_EV_CBS; usba_device->usb_client_ev_cb_list->dip = dip; usba_device->usb_client_ev_cb_list->ev_data = usb_evdata; mutex_exit(&usba_device->usb_mutex); return (USB_SUCCESS); fail: usb_unregister_event_cbs(dip, usb_evdata); return (USB_FAILURE); }
/*ARGSUSED*/ void usb_unregister_hotplug_cbs(dev_info_t *dip) { usb_unregister_event_cbs(dip, NULL); }