Ejemplo n.º 1
0
void
usba10_usb_unregister_event_cbs(
	dev_info_t	*dip,
	usb_event_t	*usb_evt_data)
{
	usb_unregister_event_cbs(dip, usb_evt_data);
}
Ejemplo n.º 2
0
/*
 * 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;
	}
}
Ejemplo n.º 3
0
/*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);

}
Ejemplo n.º 4
0
/*ARGSUSED*/
void
usb_unregister_hotplug_cbs(dev_info_t *dip)
{
	usb_unregister_event_cbs(dip, NULL);
}