Lines Matching defs:usb_ia

44 #include <sys/usb/usb_ia/usb_iavar.h>
218 rval = ddi_soft_state_init(&usb_ia_statep, sizeof (struct usb_ia),
261 usb_ia_t *usb_ia;
267 if ((usb_ia = ddi_get_soft_state(usb_ia_statep,
269 *result = (void *)usb_ia->ia_dip;
294 usb_ia_post_attach(usb_ia_t *usb_ia, uint8_t ifno, struct attachspec *as)
296 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,
303 usb_ia_post_detach(usb_ia_t *usb_ia, uint8_t ifno, struct detachspec *ds)
305 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,
325 usb_ia_t *usb_ia;
329 usb_ia = usb_ia_obtain_state(dip);
331 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,
343 USB_DPRINTF_L2(DPRINT_MASK_PM, usb_ia->ia_log_handle,
347 usb_ia_post_attach(usb_ia, usba_get_ifno(rdip),
359 USB_DPRINTF_L2(DPRINT_MASK_PM, usb_ia->ia_log_handle,
363 usb_ia_post_detach(usb_ia, usba_get_ifno(rdip),
386 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
388 USB_DPRINTF_L4(DPRINT_MASK_ALL, usb_ia->ia_log_handle,
398 mutex_enter(&usb_ia->ia_mutex);
399 usb_ia_create_children(usb_ia);
400 mutex_exit(&usb_ia->ia_mutex);
413 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
419 USB_DPRINTF_L4(DPRINT_MASK_ALL, usb_ia->ia_log_handle,
444 mutex_enter(&usb_ia->ia_mutex);
445 for (interface = 0; usb_ia->ia_children_dips &&
446 (interface < usb_ia->ia_n_ifs); interface++) {
447 mdip = usb_ia->ia_children_dips[interface];
455 usb_ia->ia_children_dips[interface] = NULL;
464 mutex_exit(&usb_ia->ia_mutex);
468 USB_DPRINTF_L4(DPRINT_MASK_ALL, usb_ia->ia_log_handle,
480 usb_ia_t *usb_ia;
484 usb_ia = usb_ia_obtain_state(dip);
486 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,
487 "usb_ia_power: Begin: usb_ia = %p, level = %d",
488 (void *)usb_ia, level);
490 mutex_enter(&usb_ia->ia_mutex);
491 pm = usb_ia->ia_pm;
495 USB_DPRINTF_L2(DPRINT_MASK_PM, usb_ia->ia_log_handle,
499 mutex_exit(&usb_ia->ia_mutex);
505 &(usb_ia->ia_dev_state), level);
507 mutex_exit(&usb_ia->ia_mutex);
519 usb_ia_t *usb_ia = NULL;
528 usb_ia = ddi_get_soft_state(usb_ia_statep, instance);
529 (void) usb_ia_restore_device_state(dip, usb_ia);
546 usb_ia = ddi_get_soft_state(usb_ia_statep, instance);
547 if (usb_ia == NULL) {
553 usb_ia->ia_log_handle = usb_alloc_log_hdl(dip, "ia",
558 usb_ia->ia_dip = dip;
559 usb_ia->ia_instance = instance;
560 usb_ia->ia_first_if = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
562 usb_ia->ia_n_ifs = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
565 if (usb_ia->ia_first_if < 0 || usb_ia->ia_n_ifs < 0) {
566 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
574 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
578 if (usb_get_dev_data(dip, &usb_ia->ia_dev_data, USB_PARSE_LVL_NONE,
580 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
585 mutex_init(&usb_ia->ia_mutex, NULL, MUTEX_DRIVER,
586 usb_ia->ia_dev_data->dev_iblock_cookie);
588 usb_free_dev_data(dip, usb_ia->ia_dev_data);
589 usb_ia->ia_dev_data = NULL;
591 usb_ia->ia_init_state |= USB_IA_LOCK_INIT;
593 if (ddi_create_minor_node(dip, "usb_ia", S_IFCHR, instance,
595 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
600 usb_ia->ia_init_state |= USB_IA_MINOR_NODE_CREATED;
605 n_ifs = usb_ia->ia_n_ifs;
606 usb_ia->ia_cd_list_length = size = (sizeof (dev_info_t *)) * n_ifs;
608 usb_ia->ia_children_dips = kmem_zalloc(size, KM_SLEEP);
609 usb_ia->ia_child_events = kmem_zalloc(sizeof (uint8_t) * n_ifs,
615 (void) ndi_event_alloc_hdl(dip, 0, &usb_ia->ia_ndi_event_hdl,
619 if (ndi_event_bind_set(usb_ia->ia_ndi_event_hdl, &usb_ia_ndi_events,
621 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
627 usb_ia->ia_dev_state = USB_DEV_ONLINE;
633 usb_ia_create_pm_components(dip, usb_ia);
638 usb_ia->ia_init_state |= USB_IA_EVENTS_REGISTERED;
645 USB_DPRINTF_L2(DPRINT_MASK_ATTA, NULL, "usb_ia%d cannot attach",
648 if (usb_ia) {
649 (void) usb_ia_cleanup(usb_ia);
660 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
662 USB_DPRINTF_L4(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
668 return (usb_ia_cleanup(usb_ia));
671 mutex_enter(&usb_ia->ia_mutex);
672 usb_ia->ia_dev_state = USB_DEV_SUSPENDED;
673 mutex_exit(&usb_ia->ia_mutex);
688 * cleanup usb_ia and deallocate. this function is called for
694 usb_ia_cleanup(usb_ia_t *usb_ia)
698 dev_info_t *dip = usb_ia->ia_dip;
700 USB_DPRINTF_L4(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
703 if ((usb_ia->ia_init_state & USB_IA_LOCK_INIT) == 0) {
712 if (usb_ia->ia_ndi_event_hdl &&
713 (ndi_event_free_hdl(usb_ia->ia_ndi_event_hdl) != NDI_SUCCESS)) {
715 USB_DPRINTF_L2(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
729 if (usb_ia->ia_init_state & USB_IA_EVENTS_REGISTERED) {
731 usba_common_unregister_events(usb_ia->ia_dip, usb_ia->ia_n_ifs);
734 iapm = usb_ia->ia_pm;
736 mutex_enter(&usb_ia->ia_mutex);
738 if ((iapm) && (usb_ia->ia_dev_state != USB_DEV_DISCONNECTED)) {
740 mutex_exit(&usb_ia->ia_mutex);
753 usb_ia->ia_log_handle,
759 (void) pm_lower_power(usb_ia->ia_dip, 0, USB_DEV_OS_PWR_OFF);
762 mutex_exit(&usb_ia->ia_mutex);
770 if (usb_ia->ia_children_dips) {
771 kmem_free(usb_ia->ia_children_dips,
772 usb_ia->ia_cd_list_length);
775 if (usb_ia->ia_child_events) {
776 kmem_free(usb_ia->ia_child_events, sizeof (uint8_t) *
777 usb_ia->ia_n_ifs);
780 if (usb_ia->ia_init_state & USB_IA_MINOR_NODE_CREATED) {
784 mutex_destroy(&usb_ia->ia_mutex);
787 usb_client_detach(dip, usb_ia->ia_dev_data);
789 usb_free_log_hdl(usb_ia->ia_log_handle);
801 usb_ia_create_children(usb_ia_t *usb_ia)
808 usba_device = usba_get_usba_device(usb_ia->ia_dip);
810 USB_DPRINTF_L4(DPRINT_MASK_ATTA, usb_ia->ia_log_handle,
814 n_ifs = usb_ia->ia_n_ifs;
815 first_if = usb_ia->ia_first_if;
821 if (usb_ia->ia_children_dips[i] != NULL) {
826 mutex_exit(&usb_ia->ia_mutex);
827 cdip = usba_ready_interface_node(usb_ia->ia_dip, first_if + i);
828 mutex_enter(&usb_ia->ia_mutex);
832 usb_ia->ia_children_dips[i] = cdip;
846 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
848 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
851 USB_DPRINTF_L3(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
857 return (ndi_event_retrieve_cookie(usb_ia->ia_ndi_event_hdl,
872 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
874 mutex_enter(&usb_ia->ia_mutex);
875 ifno = usba_get_ifno(rdip)- usb_ia->ia_first_if;
876 mutex_exit(&usb_ia->ia_mutex);
882 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
886 USB_DPRINTF_L3(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
890 ndi_event_cookie_to_name(usb_ia->ia_ndi_event_hdl, cookie));
893 switch (ndi_event_cookie_to_tag(usb_ia->ia_ndi_event_hdl, cookie)) {
895 mutex_enter(&usb_ia->ia_mutex);
896 usb_ia->ia_child_events[ifno] |=
898 mutex_exit(&usb_ia->ia_mutex);
902 mutex_enter(&usb_ia->ia_mutex);
903 usb_ia->ia_child_events[ifno] |=
905 mutex_exit(&usb_ia->ia_mutex);
913 return (ndi_event_add_callback(usb_ia->ia_ndi_event_hdl,
921 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
926 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
930 USB_DPRINTF_L3(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
935 ndi_event_cookie_to_name(usb_ia->ia_ndi_event_hdl,
939 return (ndi_event_remove_callback(usb_ia->ia_ndi_event_hdl, cb_id));
949 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
951 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
955 USB_DPRINTF_L3(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
959 ndi_event_cookie_to_name(usb_ia->ia_ndi_event_hdl, cookie));
962 return (ndi_event_run_callbacks(usb_ia->ia_ndi_event_hdl, rdip,
972 usb_ia_restore_device_state(dev_info_t *dip, usb_ia_t *usb_ia)
976 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
977 "usb_ia_restore_device_state: usb_ia = %p", (void *)usb_ia);
979 mutex_enter(&usb_ia->ia_mutex);
980 iapm = usb_ia->ia_pm;
981 mutex_exit(&usb_ia->ia_mutex);
987 if (usb_check_same_device(dip, usb_ia->ia_log_handle, USB_LOG_L0,
991 mutex_enter(&usb_ia->ia_mutex);
992 usb_ia->ia_dev_state = USB_DEV_DISCONNECTED;
993 mutex_exit(&usb_ia->ia_mutex);
1004 (void) usb_handle_remote_wakeup(usb_ia->ia_dip,
1008 mutex_enter(&usb_ia->ia_mutex);
1009 usb_ia->ia_dev_state = USB_DEV_ONLINE;
1010 mutex_exit(&usb_ia->ia_mutex);
1027 usb_ia_t *usb_ia = usb_ia_obtain_state(dip);
1031 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
1035 USB_DPRINTF_L4(DPRINT_MASK_EVENTS, usb_ia->ia_log_handle,
1038 ndi_event_cookie_to_name(usb_ia->ia_ndi_event_hdl, cookie));
1042 usb_ia->ia_ndi_event_hdl, USBA_EVENT_TAG_HOT_REMOVAL);
1044 usb_ia->ia_ndi_event_hdl, USBA_EVENT_TAG_PRE_SUSPEND);
1046 usb_ia->ia_ndi_event_hdl, USBA_EVENT_TAG_HOT_INSERTION);
1048 usb_ia->ia_ndi_event_hdl, USBA_EVENT_TAG_POST_RESUME);
1050 mutex_enter(&usb_ia->ia_mutex);
1053 if (usb_ia->ia_dev_state == USB_DEV_DISCONNECTED) {
1055 usb_ia->ia_log_handle,
1059 usb_ia->ia_dev_state = USB_DEV_DISCONNECTED;
1060 for (i = 0; i < usb_ia->ia_n_ifs; i++) {
1061 usb_ia->ia_child_events[i] &= ~
1064 mutex_exit(&usb_ia->ia_mutex);
1068 usb_ia->ia_ndi_event_hdl, NULL,
1071 mutex_enter(&usb_ia->ia_mutex);
1076 mutex_exit(&usb_ia->ia_mutex);
1079 (void) ndi_event_run_callbacks(usb_ia->ia_ndi_event_hdl,
1082 mutex_enter(&usb_ia->ia_mutex);
1083 for (i = 0; i < usb_ia->ia_n_ifs; i++) {
1084 usb_ia->ia_child_events[i] &= ~
1089 mutex_exit(&usb_ia->ia_mutex);
1090 if (usb_ia_restore_device_state(dip, usb_ia) == USB_SUCCESS) {
1096 mutex_enter(&usb_ia->ia_mutex);
1097 for (i = 0; i < usb_ia->ia_n_ifs; i++) {
1098 if (usb_ia->ia_child_events[i] &
1100 usb_ia->ia_child_events[i] &=
1103 usb_ia->ia_children_dips[i];
1104 mutex_exit(&usb_ia->ia_mutex);
1108 usb_ia->ia_ndi_event_hdl,
1112 mutex_enter(&usb_ia->ia_mutex);
1115 mutex_exit(&usb_ia->ia_mutex);
1119 usb_ia->ia_ndi_event_hdl, NULL,
1123 mutex_enter(&usb_ia->ia_mutex);
1130 for (i = 0; i < usb_ia->ia_n_ifs; i++) {
1131 if (usb_ia->ia_child_events[i] &
1133 usb_ia->ia_child_events[i] &=
1135 child_dip = usb_ia->ia_children_dips[i];
1136 mutex_exit(&usb_ia->ia_mutex);
1140 usb_ia->ia_ndi_event_hdl,
1143 mutex_enter(&usb_ia->ia_mutex);
1146 mutex_exit(&usb_ia->ia_mutex);
1149 (void) ndi_event_run_callbacks(usb_ia->ia_ndi_event_hdl,
1152 mutex_enter(&usb_ia->ia_mutex);
1155 mutex_exit(&usb_ia->ia_mutex);
1163 usb_ia_create_pm_components(dev_info_t *dip, usb_ia_t *usb_ia)
1168 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,
1174 mutex_enter(&usb_ia->ia_mutex);
1175 usb_ia->ia_pm = iapm;
1176 iapm->uc_usb_statep = usb_ia;
1179 mutex_exit(&usb_ia->ia_mutex);
1183 * "strict parental dependency" meaning, usb_ia won't
1191 * wakes up, usb_ia will wake up
1194 * the interfaces wakes up and usb_ia wakes up
1198 * In this case usb_ia should also go to sleep shortly
1206 USB_DPRINTF_L3(DPRINT_MASK_PM, usb_ia->ia_log_handle,
1218 USB_DPRINTF_L4(DPRINT_MASK_PM, usb_ia->ia_log_handle,