Lines Matching refs:scsa2usbp
587 scsa2usb_state_t *scsa2usbp = NULL; in scsa2usb_info() local
593 if (((scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_info()
595 scsa2usbp->scsa2usb_dip) { in scsa2usb_info()
596 *result = scsa2usbp->scsa2usb_dip; in scsa2usb_info()
636 scsa2usb_state_t *scsa2usbp; in scsa2usb_attach() local
668 if ((scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_attach()
677 scsa2usbp->scsa2usb_dip = dip; in scsa2usb_attach()
678 scsa2usbp->scsa2usb_instance = instance; in scsa2usb_attach()
681 scsa2usbp->scsa2usb_log_handle = log_handle = in scsa2usb_attach()
703 mutex_init(&scsa2usbp->scsa2usb_mutex, NULL, MUTEX_DRIVER, in scsa2usb_attach()
705 cv_init(&scsa2usbp->scsa2usb_transport_busy_cv, NULL, CV_DRIVER, NULL); in scsa2usb_attach()
708 usba_init_list(&scsa2usbp->scsa2usb_waitQ[lun], NULL, in scsa2usb_attach()
711 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
712 scsa2usbp->scsa2usb_dip = dip; in scsa2usb_attach()
713 scsa2usbp->scsa2usb_instance = instance; in scsa2usb_attach()
719 scsa2usbp->scsa2usb_attrs = SCSA2USB_ALL_ATTRS; in scsa2usb_attach()
720 scsa2usbp->scsa2usb_dev_data = dev_data; in scsa2usb_attach()
723 scsa2usbp->scsa2usb_default_pipe = dev_data->dev_default_ph; in scsa2usb_attach()
726 scsa2usbp->scsa2usb_flags |= SCSA2USB_FLAGS_LOCKS_INIT; in scsa2usb_attach()
734 scsa2usbp->scsa2usb_intfc_num = dev_data->dev_curr_if; in scsa2usb_attach()
742 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
754 scsa2usbp->scsa2usb_intfc_descr = altif_data->altif_descr; in scsa2usb_attach()
760 dip, ep_data, &scsa2usbp->scsa2usb_bulkout_xept) != in scsa2usb_attach()
763 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
771 dip, ep_data, &scsa2usbp->scsa2usb_bulkin_xept) != in scsa2usb_attach()
774 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
782 dip, ep_data, &scsa2usbp->scsa2usb_intr_xept) != in scsa2usb_attach()
785 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
797 scsa2usb_override(scsa2usbp); in scsa2usb_attach()
801 scsa2usbp->scsa2usb_intfc_descr.bInterfaceProtocol, in scsa2usb_attach()
802 scsa2usbp->scsa2usb_protocol_override, in scsa2usb_attach()
803 scsa2usbp->scsa2usb_intfc_descr.bInterfaceSubClass, in scsa2usb_attach()
804 scsa2usbp->scsa2usb_subclass_override); in scsa2usb_attach()
806 switch (scsa2usbp->scsa2usb_intfc_descr.bInterfaceProtocol) { in scsa2usb_attach()
808 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_CB_PROTOCOL; in scsa2usb_attach()
811 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_CBI_PROTOCOL; in scsa2usb_attach()
815 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_BULK_ONLY_PROTOCOL; in scsa2usb_attach()
818 if (scsa2usbp->scsa2usb_protocol_override) { in scsa2usb_attach()
819 scsa2usbp->scsa2usb_cmd_protocol |= in scsa2usb_attach()
820 scsa2usbp->scsa2usb_protocol_override; in scsa2usb_attach()
823 scsa2usbp->scsa2usb_intfc_descr.bInterfaceProtocol); in scsa2usb_attach()
829 scsa2usbp->scsa2usb_intfc_descr.bInterfaceProtocol); in scsa2usb_attach()
830 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
835 switch (scsa2usbp->scsa2usb_intfc_descr.bInterfaceSubClass) { in scsa2usb_attach()
837 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_SCSI_CMDSET; in scsa2usb_attach()
841 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_ATAPI_CMDSET; in scsa2usb_attach()
844 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_UFI_CMDSET; in scsa2usb_attach()
847 if (scsa2usbp->scsa2usb_subclass_override) { in scsa2usb_attach()
848 scsa2usbp->scsa2usb_cmd_protocol |= in scsa2usb_attach()
849 scsa2usbp->scsa2usb_subclass_override; in scsa2usb_attach()
852 scsa2usbp->scsa2usb_intfc_descr.bInterfaceSubClass); in scsa2usb_attach()
858 scsa2usbp->scsa2usb_intfc_descr.bInterfaceSubClass); in scsa2usb_attach()
859 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
865 if (SCSA2USB_IS_BULK_ONLY(scsa2usbp) || SCSA2USB_IS_CB(scsa2usbp)) { in scsa2usb_attach()
866 if ((scsa2usbp->scsa2usb_bulkout_ept.bLength == 0) || in scsa2usb_attach()
867 (scsa2usbp->scsa2usb_bulkin_ept.bLength == 0)) { in scsa2usb_attach()
870 } else if (SCSA2USB_IS_CBI(scsa2usbp)) { in scsa2usb_attach()
871 if ((scsa2usbp->scsa2usb_bulkout_ept.bLength == 0) || in scsa2usb_attach()
872 (scsa2usbp->scsa2usb_bulkin_ept.bLength == 0) || in scsa2usb_attach()
873 (scsa2usbp->scsa2usb_intr_ept.bLength == 0)) { in scsa2usb_attach()
882 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
887 scsa2usb_detect_quirks(scsa2usbp); in scsa2usb_attach()
890 if (scsa2usbp->scsa2usb_dev_data->dev_serial) { in scsa2usb_attach()
892 scsa2usbp->scsa2usb_log_handle, "Serial Number = %s", in scsa2usb_attach()
893 scsa2usbp->scsa2usb_dev_data->dev_serial); in scsa2usb_attach()
900 scsa2usbp->scsa2usb_tran = tran; in scsa2usb_attach()
905 tran->tran_hba_private = scsa2usbp; in scsa2usb_attach()
939 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
944 scsa2usbp->scsa2usb_flags |= SCSA2USB_FLAGS_HBA_ATTACH_SETUP; in scsa2usb_attach()
950 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_attach()
952 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
958 if (scsa2usb_open_usb_pipes(scsa2usbp) == USB_FAILURE) { in scsa2usb_attach()
961 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
968 scsa2usbp->scsa2usb_lbasize[lun] = DEV_BSIZE; in scsa2usb_attach()
971 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
974 scsa2usb_panic_callb_init(scsa2usbp); in scsa2usb_attach()
977 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
978 scsa2usbp->scsa2usb_dev_state = USB_DEV_ONLINE; in scsa2usb_attach()
981 scsa2usb_create_pm_components(dip, scsa2usbp); in scsa2usb_attach()
982 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_attach()
985 if (usb_register_event_cbs(scsa2usbp->scsa2usb_dip, &scsa2usb_events, in scsa2usb_attach()
995 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_attach()
998 if (scsa2usbp->scsa2usb_override_str) { in scsa2usb_attach()
999 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_attach()
1001 scsa2usbp->scsa2usb_override_str); in scsa2usb_attach()
1012 scsa2usbp->scsa2usb_ugen_hdl = in scsa2usb_attach()
1015 if (usb_ugen_attach(scsa2usbp->scsa2usb_ugen_hdl, cmd) != in scsa2usb_attach()
1018 scsa2usbp->scsa2usb_log_handle, in scsa2usb_attach()
1021 usb_ugen_release_hdl(scsa2usbp->scsa2usb_ugen_hdl); in scsa2usb_attach()
1022 scsa2usbp->scsa2usb_ugen_hdl = NULL; in scsa2usb_attach()
1032 if (scsa2usbp) { in scsa2usb_attach()
1033 (void) scsa2usb_cleanup(dip, scsa2usbp); in scsa2usb_attach()
1048 scsa2usb_state_t *scsa2usbp; in scsa2usb_detach() local
1054 scsa2usbp = (scsa2usb_state_t *)tran->tran_hba_private; in scsa2usb_detach()
1055 ASSERT(scsa2usbp); in scsa2usb_detach()
1057 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_detach()
1063 if (scsa2usb_cleanup(dip, scsa2usbp) != USB_SUCCESS) { in scsa2usb_detach()
1090 scsa2usb_state_t *scsa2usbp; in scsa2usb_ugen_open() local
1093 if ((scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_ugen_open()
1100 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_open()
1103 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1106 if (scsa2usbp->scsa2usb_busy_proc != curproc) { in scsa2usb_ugen_open()
1107 while (scsa2usbp->scsa2usb_transport_busy || in scsa2usb_ugen_open()
1108 (scsa2usb_all_waitQs_empty(scsa2usbp) != in scsa2usb_ugen_open()
1111 &scsa2usbp->scsa2usb_transport_busy_cv, in scsa2usb_ugen_open()
1112 &scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1114 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1119 scsa2usbp->scsa2usb_transport_busy++; in scsa2usb_ugen_open()
1120 scsa2usbp->scsa2usb_busy_proc = curproc; in scsa2usb_ugen_open()
1123 scsa2usbp->scsa2usb_ugen_open_count++; in scsa2usb_ugen_open()
1125 scsa2usb_raise_power(scsa2usbp); in scsa2usb_ugen_open()
1127 scsa2usb_close_usb_pipes(scsa2usbp); in scsa2usb_ugen_open()
1129 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1131 rval = usb_ugen_open(scsa2usbp->scsa2usb_ugen_hdl, devp, flag, in scsa2usb_ugen_open()
1145 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1148 (usb_ugen_hdl_impl_t *)scsa2usbp->scsa2usb_ugen_hdl; in scsa2usb_ugen_open()
1154 if (!scsa2usbp->scsa2usb_clones[clone]) in scsa2usb_ugen_open()
1161 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1167 (scsa2usbp->scsa2usb_instance in scsa2usb_ugen_open()
1172 scsa2usbp->scsa2usb_clones[clone] = (uint8_t)ugen_minor; in scsa2usb_ugen_open()
1173 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_open()
1177 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1183 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1186 if (--scsa2usbp->scsa2usb_ugen_open_count == 0) { in scsa2usb_ugen_open()
1187 scsa2usbp->scsa2usb_transport_busy--; in scsa2usb_ugen_open()
1188 scsa2usbp->scsa2usb_busy_proc = NULL; in scsa2usb_ugen_open()
1189 cv_signal(&scsa2usbp->scsa2usb_transport_busy_cv); in scsa2usb_ugen_open()
1191 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_open()
1193 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_ugen_open()
1209 scsa2usb_state_t *scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_ugen_close() local
1212 if (scsa2usbp == NULL) { in scsa2usb_ugen_close()
1217 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_close()
1221 ugen_minor = scsa2usbp->scsa2usb_clones[clone]; in scsa2usb_ugen_close()
1223 (scsa2usbp->scsa2usb_instance << SCSA2USB_MINOR_INSTANCE_SHIFT) in scsa2usb_ugen_close()
1225 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_close()
1227 rval = usb_ugen_close(scsa2usbp->scsa2usb_ugen_hdl, dev, flag, in scsa2usb_ugen_close()
1231 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_close()
1233 scsa2usbp->scsa2usb_clones[clone] = 0; in scsa2usb_ugen_close()
1235 if (--scsa2usbp->scsa2usb_ugen_open_count == 0) { in scsa2usb_ugen_close()
1236 scsa2usbp->scsa2usb_transport_busy--; in scsa2usb_ugen_close()
1237 scsa2usbp->scsa2usb_busy_proc = NULL; in scsa2usb_ugen_close()
1238 cv_signal(&scsa2usbp->scsa2usb_transport_busy_cv); in scsa2usb_ugen_close()
1240 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_ugen_close()
1242 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_ugen_close()
1257 scsa2usb_state_t *scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_ugen_read() local
1260 if (scsa2usbp == NULL) { in scsa2usb_ugen_read()
1265 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_read()
1269 ugen_minor = scsa2usbp->scsa2usb_clones[clone]; in scsa2usb_ugen_read()
1271 (scsa2usbp->scsa2usb_instance << SCSA2USB_MINOR_INSTANCE_SHIFT) in scsa2usb_ugen_read()
1274 return (usb_ugen_read(scsa2usbp->scsa2usb_ugen_hdl, dev, in scsa2usb_ugen_read()
1284 scsa2usb_state_t *scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_ugen_write() local
1287 if (scsa2usbp == NULL) { in scsa2usb_ugen_write()
1292 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_write()
1296 ugen_minor = scsa2usbp->scsa2usb_clones[clone]; in scsa2usb_ugen_write()
1298 (scsa2usbp->scsa2usb_instance << SCSA2USB_MINOR_INSTANCE_SHIFT) in scsa2usb_ugen_write()
1301 return (usb_ugen_write(scsa2usbp->scsa2usb_ugen_hdl, in scsa2usb_ugen_write()
1314 scsa2usb_state_t *scsa2usbp = ddi_get_soft_state(scsa2usb_statep, in scsa2usb_ugen_poll() local
1317 if (scsa2usbp == NULL) { in scsa2usb_ugen_poll()
1322 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_ugen_poll()
1326 ugen_minor = scsa2usbp->scsa2usb_clones[clone]; in scsa2usb_ugen_poll()
1328 (scsa2usbp->scsa2usb_instance << SCSA2USB_MINOR_INSTANCE_SHIFT) in scsa2usb_ugen_poll()
1331 return (usb_ugen_poll(scsa2usbp->scsa2usb_ugen_hdl, dev, events, in scsa2usb_ugen_poll()
1341 scsa2usb_cleanup(dev_info_t *dip, scsa2usb_state_t *scsa2usbp) in scsa2usb_cleanup() argument
1347 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_cleanup()
1351 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1353 if (scsa2usbp->scsa2usb_work_thread_id == NULL) { in scsa2usb_cleanup()
1357 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1359 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1361 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1375 usb_unregister_event_cbs(scsa2usbp->scsa2usb_dip, &scsa2usb_events); in scsa2usb_cleanup()
1377 if (scsa2usbp->scsa2usb_flags & SCSA2USB_FLAGS_LOCKS_INIT) { in scsa2usb_cleanup()
1382 scsa2usb_flush_waitQ(scsa2usbp, lun, CMD_TRAN_ERR); in scsa2usb_cleanup()
1383 usba_destroy_list(&scsa2usbp->scsa2usb_waitQ[lun]); in scsa2usb_cleanup()
1386 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1387 if (scsa2usbp->scsa2usb_flags & in scsa2usb_cleanup()
1390 scsi_hba_tran_free(scsa2usbp->scsa2usb_tran); in scsa2usb_cleanup()
1393 if (scsa2usbp->scsa2usb_flags & in scsa2usb_cleanup()
1395 scsa2usb_close_usb_pipes(scsa2usbp); in scsa2usb_cleanup()
1399 pm = scsa2usbp->scsa2usb_pm; in scsa2usb_cleanup()
1401 if (pm && (scsa2usbp->scsa2usb_dev_state != in scsa2usb_cleanup()
1404 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1412 scsa2usbp->scsa2usb_log_handle, in scsa2usb_cleanup()
1417 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1422 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1429 if (scsa2usbp->scsa2usb_override_str) { in scsa2usb_cleanup()
1430 kmem_free(scsa2usbp->scsa2usb_override_str, in scsa2usb_cleanup()
1431 strlen(scsa2usbp->scsa2usb_override_str) + 1); in scsa2usb_cleanup()
1432 scsa2usbp->scsa2usb_override_str = NULL; in scsa2usb_cleanup()
1439 scsa2usb_panic_callb_fini(scsa2usbp); in scsa2usb_cleanup()
1441 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1443 mutex_destroy(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cleanup()
1444 cv_destroy(&scsa2usbp->scsa2usb_transport_busy_cv); in scsa2usb_cleanup()
1447 usb_client_detach(scsa2usbp->scsa2usb_dip, in scsa2usb_cleanup()
1448 scsa2usbp->scsa2usb_dev_data); in scsa2usb_cleanup()
1450 if (scsa2usbp->scsa2usb_ugen_hdl) { in scsa2usb_cleanup()
1451 (void) usb_ugen_detach(scsa2usbp->scsa2usb_ugen_hdl, in scsa2usb_cleanup()
1453 usb_ugen_release_hdl(scsa2usbp->scsa2usb_ugen_hdl); in scsa2usb_cleanup()
1456 usb_free_log_hdl(scsa2usbp->scsa2usb_log_handle); in scsa2usb_cleanup()
1474 scsa2usb_override(scsa2usb_state_t *scsa2usbp) in scsa2usb_override() argument
1481 usb_dev_descr_t *descr = scsa2usbp->scsa2usb_dev_data->dev_descr; in scsa2usb_override()
1483 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_override()
1485 scsa2usbp->scsa2usb_subclass_override = in scsa2usb_override()
1486 scsa2usbp->scsa2usb_protocol_override = 0; in scsa2usb_override()
1488 if (ddi_prop_lookup_string_array(DDI_DEV_T_ANY, scsa2usbp->scsa2usb_dip, in scsa2usb_override()
1498 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_override()
1512 scsa2usbp) == USB_FAILURE) { in scsa2usb_override()
1525 scsa2usbp->scsa2usb_subclass_override = ov.subclass; in scsa2usb_override()
1526 scsa2usbp->scsa2usb_protocol_override = ov.protocol; in scsa2usb_override()
1529 scsa2usbp->scsa2usb_log_handle, in scsa2usb_override()
1539 scsa2usbp->scsa2usb_attrs &= ~SCSA2USB_ATTRS_PM; in scsa2usb_override()
1542 scsa2usbp->scsa2usb_attrs &= in scsa2usb_override()
1546 scsa2usbp->scsa2usb_attrs &= in scsa2usb_override()
1550 scsa2usbp->scsa2usb_attrs &= in scsa2usb_override()
1553 scsa2usbp->scsa2usb_override_str = override_str_cpy; in scsa2usb_override()
1572 scsa2usb_state_t *scsa2usbp) in scsa2usb_parse_input_str() argument
1586 scsa2usb_override_error("format", scsa2usbp); in scsa2usb_parse_input_str()
1596 scsa2usb_override_error("vendor id", scsa2usbp); in scsa2usb_parse_input_str()
1604 scsa2usbp); in scsa2usb_parse_input_str()
1612 scsa2usbp); in scsa2usb_parse_input_str()
1627 scsa2usb_override_error("subclass", scsa2usbp); in scsa2usb_parse_input_str()
1641 scsa2usb_override_error("protocol", scsa2usbp); in scsa2usb_parse_input_str()
1650 scsa2usb_override_error("pm", scsa2usbp); in scsa2usb_parse_input_str()
1659 scsa2usb_override_error("removable", scsa2usbp); in scsa2usb_parse_input_str()
1669 scsa2usbp); in scsa2usb_parse_input_str()
1680 "reduced-cmd-support", scsa2usbp); in scsa2usb_parse_input_str()
1685 scsa2usb_override_error(input_field, scsa2usbp); in scsa2usb_parse_input_str()
1700 scsa2usb_override_error(char *input_field, scsa2usb_state_t *scsa2usbp) in scsa2usb_override_error() argument
1702 USB_DPRINTF_L1(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_override_error()
1713 scsa2usb_detect_quirks(scsa2usb_state_t *scsa2usbp) in scsa2usb_detect_quirks() argument
1716 usb_dev_descr_t *desc = scsa2usbp->scsa2usb_dev_data->dev_descr; in scsa2usb_detect_quirks()
1718 if (!SCSA2USB_IS_BULK_ONLY(scsa2usbp)) { in scsa2usb_detect_quirks()
1719 scsa2usbp->scsa2usb_attrs &= ~SCSA2USB_ATTRS_GET_LUN; in scsa2usb_detect_quirks()
1735 scsa2usbp->scsa2usb_attrs &= ~(q->q_attr); in scsa2usb_detect_quirks()
1746 mask = scsa2usbp->scsa2usb_cmd_protocol & SCSA2USB_CMDSET_MASK; in scsa2usb_detect_quirks()
1748 scsa2usbp->scsa2usb_cmd_protocol &= ~mask; in scsa2usb_detect_quirks()
1750 scsa2usbp->scsa2usb_cmd_protocol |= SCSA2USB_UFI_CMDSET; in scsa2usb_detect_quirks()
1753 if (scsa2usbp->scsa2usb_attrs != SCSA2USB_ALL_ATTRS) { in scsa2usb_detect_quirks()
1755 scsa2usbp->scsa2usb_log_handle, in scsa2usb_detect_quirks()
1757 scsa2usbp->scsa2usb_attrs); in scsa2usb_detect_quirks()
1768 scsa2usb_create_luns(scsa2usb_state_t *scsa2usbp) in scsa2usb_create_luns() argument
1777 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1780 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_luns()
1783 scsa2usbp->scsa2usb_n_luns = 1; in scsa2usb_create_luns()
1790 if ((scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_GET_LUN) == 0) { in scsa2usb_create_luns()
1791 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1794 if (SCSA2USB_IS_BULK_ONLY(scsa2usbp)) { in scsa2usb_create_luns()
1795 scsa2usbp->scsa2usb_n_luns = in scsa2usb_create_luns()
1796 scsa2usb_bulk_only_get_max_lun(scsa2usbp); in scsa2usb_create_luns()
1800 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1801 "scsa2usb_create_luns: %d luns found", scsa2usbp->scsa2usb_n_luns); in scsa2usb_create_luns()
1806 for (lun = 0; lun < scsa2usbp->scsa2usb_n_luns; lun++) { in scsa2usb_create_luns()
1807 ASSERT(scsa2usbp->scsa2usb_lun_dip[lun] == NULL); in scsa2usb_create_luns()
1810 scsa2usb_do_inquiry(scsa2usbp, 0, lun); in scsa2usb_create_luns()
1812 dtype = scsa2usbp->scsa2usb_lun_inquiry[lun]. in scsa2usb_create_luns()
1815 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1876 ndi_devi_alloc_sleep(scsa2usbp->scsa2usb_dip, node_name, in scsa2usb_create_luns()
1883 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1893 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1908 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1918 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1931 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1946 scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_luns()
1953 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_luns()
1954 (void) ddi_initchild(scsa2usbp->scsa2usb_dip, cdip); in scsa2usb_create_luns()
1955 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_luns()
1958 usba_get_usba_device(scsa2usbp->scsa2usb_dip)); in scsa2usb_create_luns()
1960 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_luns()
1986 scsa2usb_panic_callb_init(scsa2usb_state_t *scsa2usbp) in scsa2usb_panic_callb_init() argument
2001 scsa2usbp->scsa2usb_panic_info = in scsa2usb_panic_callb_init()
2003 mutex_init(&scsa2usbp->scsa2usb_panic_info->lockp, in scsa2usb_panic_callb_init()
2005 scsa2usbp->scsa2usb_dev_data->dev_iblock_cookie); in scsa2usb_panic_callb_init()
2006 scsa2usbp->scsa2usb_panic_info->statep = scsa2usbp; in scsa2usb_panic_callb_init()
2007 scsa2usbp->scsa2usb_panic_info->cpr.cc_lockp = in scsa2usb_panic_callb_init()
2008 &scsa2usbp->scsa2usb_panic_info->lockp; in scsa2usb_panic_callb_init()
2009 scsa2usbp->scsa2usb_panic_info->cpr.cc_id = in scsa2usb_panic_callb_init()
2011 (void *)scsa2usbp->scsa2usb_panic_info, in scsa2usb_panic_callb_init()
2021 scsa2usb_panic_callb_fini(scsa2usb_state_t *scsa2usbp) in scsa2usb_panic_callb_fini() argument
2023 if (scsa2usbp->scsa2usb_panic_info) { in scsa2usb_panic_callb_fini()
2024 SCSA2USB_CANCEL_CB(scsa2usbp->scsa2usb_panic_info->cpr.cc_id); in scsa2usb_panic_callb_fini()
2025 mutex_destroy(&scsa2usbp->scsa2usb_panic_info->lockp); in scsa2usb_panic_callb_fini()
2026 scsa2usbp->scsa2usb_panic_info->statep = NULL; in scsa2usb_panic_callb_fini()
2027 kmem_free(scsa2usbp->scsa2usb_panic_info, in scsa2usb_panic_callb_fini()
2029 scsa2usbp->scsa2usb_panic_info = NULL; in scsa2usb_panic_callb_fini()
2043 scsa2usb_state_t *scsa2usbp; in scsa2usb_panic_callb() local
2048 scsa2usbp = (scsa2usb_state_t *)cpr_infop->statep; in scsa2usb_panic_callb()
2050 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_panic_callb()
2059 if (scsa2usbp->scsa2usb_cur_pkt) { in scsa2usb_panic_callb()
2066 scsa2usbp->scsa2usb_cur_pkt->pkt_reason = CMD_CMPLT; in scsa2usb_panic_callb()
2067 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_panic_callb()
2068 scsa2usb_pkt_completion(scsa2usbp, scsa2usbp->scsa2usb_cur_pkt); in scsa2usb_panic_callb()
2069 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_panic_callb()
2074 scsa2usb_flush_waitQ(scsa2usbp, lun, CMD_CMPLT); in scsa2usb_panic_callb()
2093 scsa2usb_state_t *scsa2usbp; in scsa2usb_cpr_suspend() local
2097 scsa2usbp = ddi_get_soft_state(scsa2usb_statep, ddi_get_instance(dip)); in scsa2usb_cpr_suspend()
2099 ASSERT(scsa2usbp != NULL); in scsa2usb_cpr_suspend()
2101 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_cpr_suspend()
2104 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cpr_suspend()
2105 switch (scsa2usbp->scsa2usb_dev_state) { in scsa2usb_cpr_suspend()
2109 prev_state = scsa2usbp->scsa2usb_dev_state; in scsa2usb_cpr_suspend()
2110 scsa2usbp->scsa2usb_dev_state = USB_DEV_SUSPENDED; in scsa2usb_cpr_suspend()
2115 if (SCSA2USB_BUSY(scsa2usbp)) { in scsa2usb_cpr_suspend()
2117 scsa2usbp->scsa2usb_log_handle, in scsa2usb_cpr_suspend()
2121 scsa2usbp->scsa2usb_dev_state = prev_state; in scsa2usb_cpr_suspend()
2129 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_cpr_suspend()
2131 scsa2usbp->scsa2usb_dev_state); in scsa2usb_cpr_suspend()
2135 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_cpr_suspend()
2137 if ((rval == USB_SUCCESS) && scsa2usbp->scsa2usb_ugen_hdl) { in scsa2usb_cpr_suspend()
2138 rval = usb_ugen_detach(scsa2usbp->scsa2usb_ugen_hdl, in scsa2usb_cpr_suspend()
2153 scsa2usb_state_t *scsa2usbp = in scsa2usb_cpr_resume() local
2156 ASSERT(scsa2usbp != NULL); in scsa2usb_cpr_resume()
2158 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_cpr_resume()
2161 scsa2usb_restore_device_state(dip, scsa2usbp); in scsa2usb_cpr_resume()
2163 if (scsa2usbp->scsa2usb_ugen_hdl) { in scsa2usb_cpr_resume()
2164 (void) usb_ugen_attach(scsa2usbp->scsa2usb_ugen_hdl, in scsa2usb_cpr_resume()
2176 scsa2usb_restore_device_state(dev_info_t *dip, scsa2usb_state_t *scsa2usbp) in scsa2usb_restore_device_state() argument
2180 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_restore_device_state()
2183 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2184 prev_state = scsa2usbp->scsa2usb_dev_state; in scsa2usb_restore_device_state()
2186 scsa2usb_raise_power(scsa2usbp); in scsa2usb_restore_device_state()
2191 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2194 if (usb_check_same_device(dip, scsa2usbp->scsa2usb_log_handle, in scsa2usb_restore_device_state()
2198 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2199 scsa2usbp->scsa2usb_dev_state = USB_DEV_DISCONNECTED; in scsa2usb_restore_device_state()
2200 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2202 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_restore_device_state()
2211 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2212 if (scsa2usbp->scsa2usb_pm && in scsa2usb_restore_device_state()
2213 scsa2usbp->scsa2usb_pm->scsa2usb_wakeup_enabled) { in scsa2usb_restore_device_state()
2214 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2215 (void) usb_handle_remote_wakeup(scsa2usbp->scsa2usb_dip, in scsa2usb_restore_device_state()
2217 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2220 scsa2usbp->scsa2usb_dev_state = USB_DEV_ONLINE; in scsa2usb_restore_device_state()
2221 scsa2usbp->scsa2usb_pkt_state = SCSA2USB_PKT_NONE; in scsa2usb_restore_device_state()
2222 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_restore_device_state()
2224 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_restore_device_state()
2240 scsa2usb_state_t *scsa2usbp; in scsa2usb_scsi_tgt_probe() local
2248 scsa2usbp = (scsa2usb_state_t *)tran->tran_hba_private; in scsa2usb_scsi_tgt_probe()
2249 ASSERT(scsa2usbp); in scsa2usb_scsi_tgt_probe()
2251 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_probe()
2255 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_probe()
2256 if (!(SCSA2USB_DEVICE_ACCESS_OK(scsa2usbp))) { in scsa2usb_scsi_tgt_probe()
2257 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_probe()
2261 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_probe()
2263 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_probe()
2271 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_probe()
2272 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_RMB)) { in scsa2usb_scsi_tgt_probe()
2276 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_probe()
2292 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *) in scsa2usb_scsi_tgt_init() local
2304 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_init()
2310 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_init()
2321 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_init()
2328 usba_get_usba_device(scsa2usbp->scsa2usb_dip)); in scsa2usb_scsi_tgt_init()
2338 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_init()
2339 if ((lun >= scsa2usbp->scsa2usb_n_luns) || in scsa2usb_scsi_tgt_init()
2340 (scsa2usbp->scsa2usb_lun_dip[lun] != NULL)) { in scsa2usb_scsi_tgt_init()
2341 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_init()
2346 scsa2usbp->scsa2usb_lun_dip[lun] = cdip; in scsa2usb_scsi_tgt_init()
2347 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_init()
2361 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *) in scsa2usb_scsi_tgt_free() local
2379 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_tgt_free()
2382 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_free()
2383 if (lun < scsa2usbp->scsa2usb_n_luns) { in scsa2usb_scsi_tgt_free()
2384 if (scsa2usbp->scsa2usb_lun_dip[lun] == cdip) { in scsa2usb_scsi_tgt_free()
2385 scsa2usbp->scsa2usb_lun_dip[lun] = NULL; in scsa2usb_scsi_tgt_free()
2388 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_tgt_free()
2401 scsa2usb_state_t *scsa2usbp = in scsa2usb_scsi_bus_config() local
2404 ASSERT(scsa2usbp != NULL); in scsa2usb_scsi_bus_config()
2406 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_bus_config()
2416 scsa2usb_create_luns(scsa2usbp); in scsa2usb_scsi_bus_config()
2431 scsa2usb_state_t *scsa2usbp = in scsa2usb_scsi_bus_unconfig() local
2437 ASSERT(scsa2usbp != NULL); in scsa2usb_scsi_bus_unconfig()
2439 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_bus_unconfig()
2470 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_bus_unconfig()
2471 if (scsa2usbp->scsa2usb_warning_given != B_TRUE) { in scsa2usb_scsi_bus_unconfig()
2473 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_bus_unconfig()
2476 scsa2usbp->scsa2usb_warning_given = B_TRUE; in scsa2usb_scsi_bus_unconfig()
2478 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_bus_unconfig()
2481 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_bus_unconfig()
2501 scsa2usb_state_t *scsa2usbp; in scsa2usb_scsi_init_pkt() local
2506 scsa2usbp = (scsa2usb_state_t *)ADDR2SCSA2USB(ap); in scsa2usb_scsi_init_pkt()
2510 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_init_pkt()
2511 SCSA2USB_PRINT_SYNC_MSG(scsa2usb_sync_message, scsa2usbp); in scsa2usb_scsi_init_pkt()
2512 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_init_pkt()
2522 pkt = scsi_hba_pkt_alloc(scsa2usbp->scsa2usb_dip, ap, cmdlen, in scsa2usb_scsi_init_pkt()
2535 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_init_pkt()
2536 cmd->cmd_tag = scsa2usbp->scsa2usb_tag++; in scsa2usb_scsi_init_pkt()
2537 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_init_pkt()
2550 scsa2usbp->scsa2usb_dev_data->dev_iblock_cookie); in scsa2usb_scsi_init_pkt()
2552 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_init_pkt()
2569 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_init_pkt()
2574 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_init_pkt()
2592 scsa2usb_state_t *scsa2usbp = ADDR2SCSA2USB(ap); in scsa2usb_scsi_destroy_pkt() local
2594 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_destroy_pkt()
2613 scsa2usb_state_t *scsa2usbp = ADDR2SCSA2USB(ap); in scsa2usb_scsi_start() local
2616 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2619 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2624 pkt->pkt_time, pkt->pkt_cdbp[0], scsa2usbp->scsa2usb_dev_state, in scsa2usb_scsi_start()
2625 scsa2usbp->scsa2usb_pkt_state, scsa2usbp->scsa2usb_flags, in scsa2usb_scsi_start()
2626 scsa2usbp->scsa2usb_pipe_state); in scsa2usb_scsi_start()
2629 USB_DPRINTF_L1(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2644 scsa2usb_prepare_pkt(scsa2usbp, pkt); in scsa2usb_scsi_start()
2645 SCSA2USB_PRINT_SYNC_MSG(scsa2usb_sync_message, scsa2usbp); in scsa2usb_scsi_start()
2646 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2653 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2655 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2661 scsa2usb_prepare_pkt(scsa2usbp, pkt); in scsa2usb_scsi_start()
2664 if (usba_list_entry_count(&scsa2usbp->scsa2usb_waitQ[lun]) > in scsa2usb_scsi_start()
2667 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2670 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2675 usba_add_to_list(&scsa2usbp->scsa2usb_waitQ[lun], &cmd->cmd_waitQ); in scsa2usb_scsi_start()
2677 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2679 (void *)scsa2usbp->scsa2usb_work_thread_id, in scsa2usb_scsi_start()
2680 usba_list_entry_count(&scsa2usbp->scsa2usb_waitQ[lun]), lun); in scsa2usb_scsi_start()
2683 if (scsa2usbp->scsa2usb_work_thread_id == 0) { in scsa2usb_scsi_start()
2684 if ((usb_async_req(scsa2usbp->scsa2usb_dip, in scsa2usb_scsi_start()
2686 (void *)scsa2usbp, USB_FLAGS_SLEEP)) != USB_SUCCESS) { in scsa2usb_scsi_start()
2688 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_start()
2692 &scsa2usbp->scsa2usb_waitQ[lun], in scsa2usb_scsi_start()
2694 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2699 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2704 scsa2usbp->scsa2usb_work_thread_id = (kthread_t *)1; in scsa2usb_scsi_start()
2707 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_start()
2721 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *)ADDR2SCSA2USB(ap); in scsa2usb_scsi_abort() local
2723 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_abort()
2727 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_abort()
2728 if (!(SCSA2USB_DEVICE_ACCESS_OK(scsa2usbp))) { in scsa2usb_scsi_abort()
2729 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_abort()
2737 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_abort()
2738 scsa2usb_flush_waitQ(scsa2usbp, ap->a_lun, CMD_ABORTED); in scsa2usb_scsi_abort()
2739 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_abort()
2741 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_abort()
2758 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *)ADDR2SCSA2USB(ap); in scsa2usb_scsi_reset() local
2760 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_reset()
2764 scsa2usb_flush_waitQ(scsa2usbp, ap->a_lun, CMD_RESET); in scsa2usb_scsi_reset()
2781 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *)ADDR2SCSA2USB(ap); in scsa2usb_scsi_getcap() local
2782 ASSERT(scsa2usbp); in scsa2usb_scsi_getcap()
2785 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_getcap()
2792 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_getcap()
2795 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_getcap()
2798 if (!(SCSA2USB_DEVICE_ACCESS_OK(scsa2usbp))) { in scsa2usb_scsi_getcap()
2800 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_getcap()
2809 if (scsa2usbp->scsa2usb_secsz[ap->a_lun] == 0) { in scsa2usb_scsi_getcap()
2811 scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_getcap()
2814 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_getcap()
2819 dev_bsize_cap = scsa2usbp->scsa2usb_totalsec[ap->a_lun]; in scsa2usb_scsi_getcap()
2821 if (scsa2usbp->scsa2usb_secsz[ap->a_lun] > DEV_BSIZE) { in scsa2usb_scsi_getcap()
2823 scsa2usbp->scsa2usb_secsz[ap->a_lun] / DEV_BSIZE; in scsa2usb_scsi_getcap()
2824 } else if (scsa2usbp->scsa2usb_secsz[ap->a_lun] < in scsa2usb_scsi_getcap()
2827 DEV_BSIZE / scsa2usbp->scsa2usb_secsz[ap->a_lun]; in scsa2usb_scsi_getcap()
2846 rval = scsa2usbp->scsa2usb_max_bulk_xfer_size; in scsa2usb_scsi_getcap()
2860 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_getcap()
2865 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_getcap()
2868 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_getcap()
2884 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *)ADDR2SCSA2USB(ap); in scsa2usb_scsi_setcap() local
2885 ASSERT(scsa2usbp); in scsa2usb_scsi_setcap()
2888 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_setcap()
2894 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_setcap()
2896 if (!(SCSA2USB_DEVICE_ACCESS_OK(scsa2usbp))) { in scsa2usb_scsi_setcap()
2897 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_setcap()
2903 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_setcap()
2910 scsa2usbp->scsa2usb_secsz[ap->a_lun] = value; in scsa2usb_scsi_setcap()
2915 scsa2usbp->scsa2usb_totalsec[ap->a_lun] = value; in scsa2usb_scsi_setcap()
2929 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_scsi_setcap()
2934 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_scsi_setcap()
2949 scsa2usb_prepare_pkt(scsa2usb_state_t *scsa2usbp, struct scsi_pkt *pkt) in scsa2usb_prepare_pkt() argument
2953 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_prepare_pkt()
2981 scsa2usb_force_invalid_request(scsa2usb_state_t *scsa2usbp, in scsa2usb_force_invalid_request() argument
2986 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_force_invalid_request()
3008 scsa2usbp->scsa2usb_log_handle, in scsa2usb_force_invalid_request()
3025 scsa2usb_cmd_transport(scsa2usb_state_t *scsa2usbp, scsa2usb_cmd_t *cmd) in scsa2usb_cmd_transport() argument
3030 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_cmd_transport()
3032 (void *)cmd->cmd_pkt, (void *)scsa2usbp->scsa2usb_cur_pkt); in scsa2usb_cmd_transport()
3034 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_cmd_transport()
3035 ASSERT(scsa2usbp->scsa2usb_cur_pkt == NULL); in scsa2usb_cmd_transport()
3037 pkt = scsa2usbp->scsa2usb_cur_pkt = cmd->cmd_pkt; in scsa2usb_cmd_transport()
3042 if (SCSA2USB_IS_BULK_ONLY(scsa2usbp)) { in scsa2usb_cmd_transport()
3043 transport = scsa2usb_check_bulkonly_quirks(scsa2usbp, cmd); in scsa2usb_cmd_transport()
3044 } else if (SCSA2USB_IS_CB(scsa2usbp) || SCSA2USB_IS_CBI(scsa2usbp)) { in scsa2usb_cmd_transport()
3045 transport = scsa2usb_check_ufi_quirks(scsa2usbp, cmd); in scsa2usb_cmd_transport()
3052 SCSA2USB_SET_PKT_DO_COMP_STATE(scsa2usbp); in scsa2usb_cmd_transport()
3060 if (SCSA2USB_IS_SCSI_CMDSET(scsa2usbp) || in scsa2usb_cmd_transport()
3061 SCSA2USB_IS_ATAPI_CMDSET(scsa2usbp)) { in scsa2usb_cmd_transport()
3063 scsa2usb_handle_scsi_cmd_sub_class(scsa2usbp, cmd, pkt); in scsa2usb_cmd_transport()
3064 } else if (SCSA2USB_IS_UFI_CMDSET(scsa2usbp)) { in scsa2usb_cmd_transport()
3066 scsa2usb_handle_ufi_subclass_cmd(scsa2usbp, cmd, pkt); in scsa2usb_cmd_transport()
3073 if (SCSA2USB_IS_BULK_ONLY(scsa2usbp)) { in scsa2usb_cmd_transport()
3074 rval = scsa2usb_bulk_only_transport(scsa2usbp, cmd); in scsa2usb_cmd_transport()
3075 } else if (SCSA2USB_IS_CB(scsa2usbp) || in scsa2usb_cmd_transport()
3076 SCSA2USB_IS_CBI(scsa2usbp)) { in scsa2usb_cmd_transport()
3077 rval = scsa2usb_cbi_transport(scsa2usbp, cmd); in scsa2usb_cmd_transport()
3083 SCSA2USB_SET_PKT_DO_COMP_STATE(scsa2usbp); in scsa2usb_cmd_transport()
3099 scsa2usb_check_bulkonly_quirks(scsa2usb_state_t *scsa2usbp, scsa2usb_cmd_t *cmd) in scsa2usb_check_bulkonly_quirks() argument
3102 &scsa2usbp->scsa2usb_lun_inquiry[cmd->cmd_pkt->pkt_address.a_lun]; in scsa2usb_check_bulkonly_quirks()
3104 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_check_bulkonly_quirks()
3112 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_DOORLOCK)) { in scsa2usb_check_bulkonly_quirks()
3139 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_START_STOP)) { in scsa2usb_check_bulkonly_quirks()
3162 } else if (!scsa2usbp->scsa2usb_rcvd_not_ready) { in scsa2usb_check_bulkonly_quirks()
3178 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_INQUIRY)) { in scsa2usb_check_bulkonly_quirks()
3186 scsa2usb_fake_inquiry(scsa2usbp, inq); in scsa2usb_check_bulkonly_quirks()
3199 } else if (!(scsa2usbp->scsa2usb_attrs & in scsa2usb_check_bulkonly_quirks()
3217 scsa2usb_force_invalid_request(scsa2usbp, cmd); in scsa2usb_check_bulkonly_quirks()
3238 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_MODE_SENSE)) { in scsa2usb_check_bulkonly_quirks()
3243 scsa2usb_force_invalid_request(scsa2usbp, cmd); in scsa2usb_check_bulkonly_quirks()
3264 scsa2usb_handle_scsi_cmd_sub_class(scsa2usb_state_t *scsa2usbp, in scsa2usb_handle_scsi_cmd_sub_class() argument
3268 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_scsi_cmd_sub_class()
3272 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_handle_scsi_cmd_sub_class()
3355 switch (scsa2usbp-> in scsa2usb_handle_scsi_cmd_sub_class()
3362 scsa2usbp, pkt)); in scsa2usb_handle_scsi_cmd_sub_class()
3440 scsa2usb_force_invalid_request(scsa2usbp, cmd); in scsa2usb_handle_scsi_cmd_sub_class()
3460 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_scsi_cmd_sub_class()
3476 scsa2usb_do_tur(scsa2usb_state_t *scsa2usbp, struct scsi_address *ap) in scsa2usb_do_tur() argument
3482 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_tur()
3485 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_do_tur()
3487 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_tur()
3490 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_tur()
3492 scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_tur()
3505 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_tur()
3506 scsa2usb_prepare_pkt(scsa2usbp, turcmd->cmd_pkt); in scsa2usb_do_tur()
3508 if (scsa2usb_cmd_transport(scsa2usbp, turcmd) != TRAN_ACCEPT) { in scsa2usb_do_tur()
3510 scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_tur()
3527 scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_tur()
3533 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_tur()
3535 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_tur()
3546 scsa2usb_check_ufi_quirks(scsa2usb_state_t *scsa2usbp, scsa2usb_cmd_t *cmd) in scsa2usb_check_ufi_quirks() argument
3550 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_check_ufi_quirks()
3562 scsa2usb_force_invalid_request(scsa2usbp, cmd); in scsa2usb_check_ufi_quirks()
3566 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_GET_CONF)) { in scsa2usb_check_ufi_quirks()
3571 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_GET_PERF)) { in scsa2usb_check_ufi_quirks()
3581 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_START_STOP)) { in scsa2usb_check_ufi_quirks()
3591 if (!(scsa2usbp->scsa2usb_attrs & in scsa2usb_check_ufi_quirks()
3595 ASSERT(scsa2usbp->scsa2usb_cur_pkt == pkt); in scsa2usb_check_ufi_quirks()
3596 scsa2usbp->scsa2usb_cur_pkt = NULL; in scsa2usb_check_ufi_quirks()
3598 if (scsa2usb_do_tur(scsa2usbp, in scsa2usb_check_ufi_quirks()
3605 scsa2usb_force_invalid_request(scsa2usbp, cmd); in scsa2usb_check_ufi_quirks()
3609 scsa2usbp->scsa2usb_cur_pkt = pkt; in scsa2usb_check_ufi_quirks()
3626 scsa2usb_handle_ufi_subclass_cmd(scsa2usb_state_t *scsa2usbp, in scsa2usb_handle_ufi_subclass_cmd() argument
3631 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_ufi_subclass_cmd()
3635 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_handle_ufi_subclass_cmd()
3695 return (scsa2usb_rw_transport(scsa2usbp, pkt)); in scsa2usb_handle_ufi_subclass_cmd()
3717 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_BIG_TIMEOUT)) { in scsa2usb_handle_ufi_subclass_cmd()
3736 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_ufi_subclass_cmd()
3778 scsa2usb_rw_transport(scsa2usb_state_t *scsa2usbp, struct scsi_pkt *pkt) in scsa2usb_rw_transport() argument
3788 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_rw_transport()
3791 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_rw_transport()
3794 blk_size = scsa2usbp->scsa2usb_lbasize[pkt->pkt_address.a_lun]; in scsa2usb_rw_transport()
3867 xfer_count > scsa2usbp->scsa2usb_max_bulk_xfer_size) { in scsa2usb_rw_transport()
3880 xfer_count = (scsa2usbp->scsa2usb_max_bulk_xfer_size / in scsa2usb_rw_transport()
3885 xfer_count = scsa2usbp->scsa2usb_max_bulk_xfer_size; in scsa2usb_rw_transport()
3922 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_rw_transport()
3940 scsa2usbp->scsa2usb_log_handle, in scsa2usb_rw_transport()
3944 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_rw_transport()
3966 scsa2usb_setup_next_xfer(scsa2usb_state_t *scsa2usbp, scsa2usb_cmd_t *cmd) in scsa2usb_setup_next_xfer() argument
3968 int xfer_len = min(scsa2usbp->scsa2usb_max_bulk_xfer_size, in scsa2usb_setup_next_xfer()
3973 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_setup_next_xfer()
3975 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_setup_next_xfer()
3982 blk_size = scsa2usbp->scsa2usb_lbasize[ in scsa2usb_setup_next_xfer()
4047 cmd->cmd_lba += scsa2usbp->scsa2usb_max_bulk_xfer_size / in scsa2usb_setup_next_xfer()
4053 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_setup_next_xfer()
4064 scsa2usb_transport_request(scsa2usb_state_t *scsa2usbp, uint_t lun) in scsa2usb_transport_request() argument
4072 &scsa2usbp->scsa2usb_waitQ[lun])) == NULL) { in scsa2usb_transport_request()
4081 if (scsa2usbp->scsa2usb_dev_state == USB_DEV_DISCONNECTED) { in scsa2usb_transport_request()
4082 USB_DPRINTF_L2(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_transport_request()
4085 SCSA2USB_SET_PKT_DO_COMP_STATE(scsa2usbp); in scsa2usb_transport_request()
4086 scsa2usb_pkt_completion(scsa2usbp, pkt); in scsa2usb_transport_request()
4092 scsa2usbp->scsa2usb_log_handle, in scsa2usb_transport_request()
4097 rval = scsa2usb_cmd_transport(scsa2usbp, cmd); in scsa2usb_transport_request()
4100 scsa2usbp->scsa2usb_log_handle, in scsa2usb_transport_request()
4104 if (scsa2usbp->scsa2usb_cur_pkt == NULL) { in scsa2usb_transport_request()
4109 ASSERT(pkt == scsa2usbp->scsa2usb_cur_pkt); in scsa2usb_transport_request()
4113 scsa2usb_pkt_completion(scsa2usbp, pkt); in scsa2usb_transport_request()
4127 (scsa2usb_create_arq_pkt(scsa2usbp, in scsa2usb_transport_request()
4129 arqcmd = scsa2usbp->scsa2usb_arq_cmd; in scsa2usb_transport_request()
4137 scsa2usb_prepare_pkt(scsa2usbp, in scsa2usb_transport_request()
4140 scsa2usbp->scsa2usb_cur_pkt = NULL; in scsa2usb_transport_request()
4142 scsa2usbp, arqcmd) == TRAN_ACCEPT) { in scsa2usb_transport_request()
4146 scsa2usbp, arqcmd->cmd_pkt, cmd, in scsa2usb_transport_request()
4147 scsa2usbp->scsa2usb_arq_bp); in scsa2usb_transport_request()
4155 scsa2usbp->scsa2usb_cur_pkt = pkt; in scsa2usb_transport_request()
4156 scsa2usb_delete_arq_pkt(scsa2usbp); in scsa2usb_transport_request()
4164 SCSA2USB_SET_PKT_DO_COMP_STATE(scsa2usbp); in scsa2usb_transport_request()
4165 scsa2usb_pkt_completion(scsa2usbp, pkt); in scsa2usb_transport_request()
4167 ASSERT(scsa2usbp->scsa2usb_cur_pkt == NULL); in scsa2usb_transport_request()
4178 scsa2usb_state_t *scsa2usbp = (scsa2usb_state_t *)arg; in scsa2usb_work_thread() local
4182 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_work_thread()
4183 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_work_thread()
4185 (void *)scsa2usbp->scsa2usb_work_thread_id); in scsa2usb_work_thread()
4187 ASSERT(scsa2usbp->scsa2usb_work_thread_id == (kthread_t *)1); in scsa2usb_work_thread()
4188 scsa2usbp->scsa2usb_work_thread_id = curthread; in scsa2usb_work_thread()
4191 while (scsa2usbp->scsa2usb_transport_busy) { in scsa2usb_work_thread()
4192 cv_wait(&scsa2usbp->scsa2usb_transport_busy_cv, in scsa2usb_work_thread()
4193 &scsa2usbp->scsa2usb_mutex); in scsa2usb_work_thread()
4195 ASSERT(scsa2usbp->scsa2usb_ugen_open_count == 0); in scsa2usb_work_thread()
4196 scsa2usbp->scsa2usb_transport_busy++; in scsa2usb_work_thread()
4197 scsa2usbp->scsa2usb_busy_proc = curproc; in scsa2usb_work_thread()
4199 scsa2usb_raise_power(scsa2usbp); in scsa2usb_work_thread()
4202 (void) scsa2usb_open_usb_pipes(scsa2usbp); in scsa2usb_work_thread()
4205 ASSERT(scsa2usbp->scsa2usb_ugen_open_count == 0); in scsa2usb_work_thread()
4206 for (lun = 0; lun < scsa2usbp->scsa2usb_n_luns; lun++) { in scsa2usb_work_thread()
4207 scsa2usb_transport_request(scsa2usbp, lun); in scsa2usb_work_thread()
4212 &scsa2usbp->scsa2usb_waitQ[lun]); in scsa2usb_work_thread()
4221 scsa2usbp->scsa2usb_work_thread_id = 0; in scsa2usb_work_thread()
4223 ASSERT(scsa2usbp->scsa2usb_ugen_open_count == 0); in scsa2usb_work_thread()
4225 scsa2usbp->scsa2usb_transport_busy--; in scsa2usb_work_thread()
4226 scsa2usbp->scsa2usb_busy_proc = NULL; in scsa2usb_work_thread()
4227 cv_signal(&scsa2usbp->scsa2usb_transport_busy_cv); in scsa2usb_work_thread()
4229 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_work_thread()
4232 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_work_thread()
4234 scsa2usb_pm_idle_component(scsa2usbp); in scsa2usb_work_thread()
4250 scsa2usb_flush_waitQ(scsa2usb_state_t *scsa2usbp, uint_t lun, in scsa2usb_flush_waitQ() argument
4257 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_flush_waitQ()
4259 usba_move_list(&scsa2usbp->scsa2usb_waitQ[lun], &head, in scsa2usb_flush_waitQ()
4260 scsa2usbp->scsa2usb_dev_data->dev_iblock_cookie); in scsa2usb_flush_waitQ()
4261 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_flush_waitQ()
4268 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_flush_waitQ()
4269 scsa2usbp->scsa2usb_pkt_state = SCSA2USB_PKT_DO_COMP; in scsa2usb_flush_waitQ()
4270 scsa2usb_pkt_completion(scsa2usbp, pkt); in scsa2usb_flush_waitQ()
4271 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_flush_waitQ()
4281 scsa2usb_do_inquiry(scsa2usb_state_t *scsa2usbp, uint_t target, uint_t lun) in scsa2usb_do_inquiry() argument
4288 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_inquiry()
4292 if (!(scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_INQUIRY)) { in scsa2usb_do_inquiry()
4293 scsa2usb_fake_inquiry(scsa2usbp, in scsa2usb_do_inquiry()
4294 &scsa2usbp->scsa2usb_lun_inquiry[lun]); in scsa2usb_do_inquiry()
4298 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_do_inquiry()
4301 ap.a_hba_tran = scsa2usbp->scsa2usb_tran; in scsa2usb_do_inquiry()
4306 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_inquiry()
4309 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_inquiry()
4311 scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_inquiry()
4326 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_inquiry()
4333 scsa2usbp->scsa2usb_log_handle, in scsa2usb_do_inquiry()
4338 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_inquiry()
4339 scsa2usbp->scsa2usb_attrs &= in scsa2usb_do_inquiry()
4341 scsa2usb_fake_inquiry(scsa2usbp, in scsa2usb_do_inquiry()
4342 &scsa2usbp->scsa2usb_lun_inquiry[lun]); in scsa2usb_do_inquiry()
4343 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_inquiry()
4349 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_do_inquiry()
4359 scsa2usb_fake_inquiry(scsa2usb_state_t *scsa2usbp, struct scsi_inquiry *inqp) in scsa2usb_fake_inquiry() argument
4361 usb_client_dev_data_t *dev_data = scsa2usbp->scsa2usb_dev_data; in scsa2usb_fake_inquiry()
4364 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_fake_inquiry()
4416 scsa2usb_create_arq_pkt(scsa2usb_state_t *scsa2usbp, struct scsi_address *ap) in scsa2usb_create_arq_pkt() argument
4421 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_arq_pkt()
4423 (void *)scsa2usbp, (void *)ap); in scsa2usb_create_arq_pkt()
4425 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_create_arq_pkt()
4427 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_arq_pkt()
4430 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_arq_pkt()
4437 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_arq_pkt()
4444 scsa2usbp->scsa2usb_arq_cmd = arq_cmd; in scsa2usb_create_arq_pkt()
4445 scsa2usbp->scsa2usb_arq_bp = bp; in scsa2usb_create_arq_pkt()
4458 scsa2usb_delete_arq_pkt(scsa2usb_state_t *scsa2usbp) in scsa2usb_delete_arq_pkt() argument
4460 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_delete_arq_pkt()
4462 (void *)scsa2usbp->scsa2usb_arq_cmd); in scsa2usb_delete_arq_pkt()
4464 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_delete_arq_pkt()
4466 if (scsa2usbp->scsa2usb_arq_cmd != NULL) { in scsa2usb_delete_arq_pkt()
4467 scsi_destroy_pkt(scsa2usbp->scsa2usb_arq_cmd->cmd_pkt); in scsa2usb_delete_arq_pkt()
4468 scsi_free_consistent_buf(scsa2usbp->scsa2usb_arq_bp); in scsa2usb_delete_arq_pkt()
4470 scsa2usbp->scsa2usb_arq_cmd = NULL; in scsa2usb_delete_arq_pkt()
4471 scsa2usbp->scsa2usb_arq_bp = NULL; in scsa2usb_delete_arq_pkt()
4480 scsa2usb_complete_arq_pkt(scsa2usb_state_t *scsa2usbp, in scsa2usb_complete_arq_pkt() argument
4486 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_complete_arq_pkt()
4503 scsa2usbp->scsa2usb_rcvd_not_ready = B_TRUE; in scsa2usb_complete_arq_pkt()
4518 scsa2usb_open_usb_pipes(scsa2usb_state_t *scsa2usbp) in scsa2usb_open_usb_pipes() argument
4524 ASSERT(scsa2usbp); in scsa2usb_open_usb_pipes()
4525 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_open_usb_pipes()
4527 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4529 (void *)scsa2usbp->scsa2usb_dip, scsa2usbp->scsa2usb_flags); in scsa2usb_open_usb_pipes()
4531 if (!(scsa2usbp->scsa2usb_flags & SCSA2USB_FLAGS_PIPES_OPENED)) { in scsa2usb_open_usb_pipes()
4540 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4543 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4546 if ((rval = usb_pipe_xopen(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4547 &scsa2usbp->scsa2usb_bulkin_xept, &policy, USB_FLAGS_SLEEP, in scsa2usb_open_usb_pipes()
4548 &scsa2usbp->scsa2usb_bulkin_pipe)) != USB_SUCCESS) { in scsa2usb_open_usb_pipes()
4549 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4551 scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4559 if ((rval = usb_pipe_xopen(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4560 &scsa2usbp->scsa2usb_bulkout_xept, &policy, USB_FLAGS_SLEEP, in scsa2usb_open_usb_pipes()
4561 &scsa2usbp->scsa2usb_bulkout_pipe)) != USB_SUCCESS) { in scsa2usb_open_usb_pipes()
4562 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4563 scsa2usbp->scsa2usb_bulkin_pipe, in scsa2usb_open_usb_pipes()
4566 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4567 scsa2usbp->scsa2usb_bulkin_pipe = NULL; in scsa2usb_open_usb_pipes()
4570 scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4577 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4580 if (SCSA2USB_IS_CBI(scsa2usbp)) { in scsa2usb_open_usb_pipes()
4581 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4583 if ((rval = usb_pipe_xopen(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4584 &scsa2usbp->scsa2usb_intr_xept, &policy, in scsa2usb_open_usb_pipes()
4585 USB_FLAGS_SLEEP, &scsa2usbp->scsa2usb_intr_pipe)) != in scsa2usb_open_usb_pipes()
4587 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4588 scsa2usbp->scsa2usb_bulkin_pipe, in scsa2usb_open_usb_pipes()
4591 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4592 scsa2usbp->scsa2usb_bulkout_pipe, in scsa2usb_open_usb_pipes()
4595 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4596 scsa2usbp->scsa2usb_bulkin_pipe = NULL; in scsa2usb_open_usb_pipes()
4597 scsa2usbp->scsa2usb_bulkout_pipe = NULL; in scsa2usb_open_usb_pipes()
4600 scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4607 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4610 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4613 if (usb_pipe_get_max_bulk_transfer_size(scsa2usbp->scsa2usb_dip, in scsa2usb_open_usb_pipes()
4615 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4616 scsa2usbp->scsa2usb_max_bulk_xfer_size = sz; in scsa2usb_open_usb_pipes()
4618 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_open_usb_pipes()
4619 scsa2usbp->scsa2usb_max_bulk_xfer_size = DEV_BSIZE; in scsa2usb_open_usb_pipes()
4623 scsa2usbp->scsa2usb_max_bulk_xfer_size = min( in scsa2usb_open_usb_pipes()
4624 scsa2usbp->scsa2usb_max_bulk_xfer_size, in scsa2usb_open_usb_pipes()
4627 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_open_usb_pipes()
4629 scsa2usbp->scsa2usb_max_bulk_xfer_size); in scsa2usb_open_usb_pipes()
4632 scsa2usbp->scsa2usb_flags |= SCSA2USB_FLAGS_PIPES_OPENED; in scsa2usb_open_usb_pipes()
4634 scsa2usbp->scsa2usb_pipe_state = SCSA2USB_PIPE_NORMAL; in scsa2usb_open_usb_pipes()
4637 scsa2usbp->scsa2usb_pkt_state = SCSA2USB_PKT_NONE; in scsa2usb_open_usb_pipes()
4649 scsa2usb_close_usb_pipes(scsa2usb_state_t *scsa2usbp) in scsa2usb_close_usb_pipes() argument
4653 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_close_usb_pipes()
4655 (void *)scsa2usbp); in scsa2usb_close_usb_pipes()
4657 ASSERT(scsa2usbp); in scsa2usb_close_usb_pipes()
4658 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_close_usb_pipes()
4660 if ((scsa2usbp->scsa2usb_flags & SCSA2USB_FLAGS_PIPES_OPENED) == 0) { in scsa2usb_close_usb_pipes()
4665 scsa2usbp->scsa2usb_pipe_state = SCSA2USB_PIPE_CLOSING; in scsa2usb_close_usb_pipes()
4667 scsa2usbp->scsa2usb_flags &= ~SCSA2USB_FLAGS_PIPES_OPENED; in scsa2usb_close_usb_pipes()
4669 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_close_usb_pipes()
4671 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_close_usb_pipes()
4672 scsa2usbp->scsa2usb_bulkout_pipe, flags, NULL, NULL); in scsa2usb_close_usb_pipes()
4674 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_close_usb_pipes()
4675 scsa2usbp->scsa2usb_bulkin_pipe, flags, NULL, NULL); in scsa2usb_close_usb_pipes()
4677 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_close_usb_pipes()
4678 if (SCSA2USB_IS_CBI(scsa2usbp)) { in scsa2usb_close_usb_pipes()
4679 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_close_usb_pipes()
4680 usb_pipe_close(scsa2usbp->scsa2usb_dip, in scsa2usb_close_usb_pipes()
4681 scsa2usbp->scsa2usb_intr_pipe, flags, NULL, NULL); in scsa2usb_close_usb_pipes()
4682 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_close_usb_pipes()
4684 scsa2usbp->scsa2usb_bulkout_pipe = NULL; in scsa2usb_close_usb_pipes()
4685 scsa2usbp->scsa2usb_bulkin_pipe = NULL; in scsa2usb_close_usb_pipes()
4686 scsa2usbp->scsa2usb_intr_pipe = NULL; in scsa2usb_close_usb_pipes()
4688 scsa2usbp->scsa2usb_pipe_state = SCSA2USB_PIPE_NORMAL; in scsa2usb_close_usb_pipes()
4829 scsa2usb_bp_to_mblk(scsa2usb_state_t *scsa2usbp) in scsa2usb_bp_to_mblk() argument
4834 scsa2usb_cmd_t *cmd = PKT2CMD(scsa2usbp->scsa2usb_cur_pkt); in scsa2usb_bp_to_mblk()
4836 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_bp_to_mblk()
4839 ASSERT(scsa2usbp->scsa2usb_cur_pkt); in scsa2usb_bp_to_mblk()
4840 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_bp_to_mblk()
4855 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_bp_to_mblk()
4858 (void *)mp, (void *)bp, (void *)scsa2usbp->scsa2usb_cur_pkt, in scsa2usb_bp_to_mblk()
4899 scsa2usb_handle_data_start(scsa2usb_state_t *scsa2usbp, in scsa2usb_handle_data_start() argument
4911 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
4915 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_handle_data_start()
4929 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
4936 scsa2usbp->scsa2usb_bulkin_pipe, req, flags); in scsa2usb_handle_data_start()
4937 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
4939 scsa2usbp->scsa2usb_log_handle, "rval = %x", rval); in scsa2usb_handle_data_start()
4941 req2 = scsa2usb_init_bulk_req(scsa2usbp, in scsa2usb_handle_data_start()
4945 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
4949 scsa2usbp->scsa2usb_bulkin_pipe, req2, flags); in scsa2usb_handle_data_start()
4950 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
4953 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
4967 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
4969 scsa2usb_test_mblk(scsa2usbp, B_TRUE); in scsa2usb_handle_data_start()
4976 ept_addr = scsa2usbp->scsa2usb_bulkin_ept.bEndpointAddress; in scsa2usb_handle_data_start()
4980 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
4988 rval = usb_pipe_bulk_xfer(scsa2usbp->scsa2usb_bulkin_pipe, in scsa2usb_handle_data_start()
4990 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
5004 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
5008 scsa2usbp->scsa2usb_bulkin_pipe, req, flags); in scsa2usb_handle_data_start()
5009 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
5012 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
5020 req->bulk_data = scsa2usb_bp_to_mblk(scsa2usbp); in scsa2usb_handle_data_start()
5033 scsa2usbp->scsa2usb_log_handle, "TEST 11: Ho > Do"); in scsa2usb_handle_data_start()
5035 scsa2usb_test_mblk(scsa2usbp, B_FALSE); in scsa2usb_handle_data_start()
5040 ept_addr = scsa2usbp->scsa2usb_bulkout_ept.bEndpointAddress; in scsa2usb_handle_data_start()
5043 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
5046 rval = usb_pipe_bulk_xfer(scsa2usbp->scsa2usb_bulkout_pipe, in scsa2usb_handle_data_start()
5048 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_handle_data_start()
5053 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
5062 scsa2usbp, ept_addr, in scsa2usb_handle_data_start()
5063 scsa2usbp-> scsa2usb_bulkin_pipe, in scsa2usb_handle_data_start()
5067 scsa2usbp, ept_addr, in scsa2usb_handle_data_start()
5068 scsa2usbp-> scsa2usb_bulkout_pipe, in scsa2usb_handle_data_start()
5077 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_start()
5092 scsa2usb_handle_data_done(scsa2usb_state_t *scsa2usbp, in scsa2usb_handle_data_done() argument
5096 struct scsi_pkt *pkt = scsa2usbp->scsa2usb_cur_pkt; in scsa2usb_handle_data_done()
5101 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_handle_data_done()
5103 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_done()
5147 bzero(&scsa2usbp->scsa2usb_lun_inquiry in scsa2usb_handle_data_done()
5151 &scsa2usbp->scsa2usb_lun_inquiry in scsa2usb_handle_data_done()
5156 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_done()
5158 scsa2usbp->scsa2usb_lun_inquiry in scsa2usb_handle_data_done()
5170 scsa2usbp-> in scsa2usb_handle_data_done()
5189 if (max_lba > 0 && (scsa2usbp->scsa2usb_attrs & in scsa2usb_handle_data_done()
5203 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_done()
5206 scsa2usbp-> in scsa2usb_handle_data_done()
5216 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_done()
5226 scsa2usbp->scsa2usb_last_cmd.status = p[2]; in scsa2usb_handle_data_done()
5243 scsa2usbp->scsa2usb_log_handle, in scsa2usb_handle_data_done()
5278 scsa2usb_init_bulk_req(scsa2usb_state_t *scsa2usbp, size_t length, in scsa2usb_init_bulk_req() argument
5283 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_init_bulk_req()
5285 req = usb_alloc_bulk_req(scsa2usbp->scsa2usb_dip, length, in scsa2usb_init_bulk_req()
5291 req->bulk_client_private = (usb_opaque_t)scsa2usbp; /* statep */ in scsa2usb_init_bulk_req()
5313 scsa2usb_clear_ept_stall(scsa2usb_state_t *scsa2usbp, uint_t ept_addr, in scsa2usb_clear_ept_stall() argument
5317 dev_info_t *dip = scsa2usbp->scsa2usb_dip; in scsa2usb_clear_ept_stall()
5319 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_clear_ept_stall()
5320 if (!(SCSA2USB_DEVICE_ACCESS_OK(scsa2usbp))) { in scsa2usb_clear_ept_stall()
5325 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_clear_ept_stall()
5331 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_clear_ept_stall()
5332 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_clear_ept_stall()
5345 scsa2usb_pkt_completion(scsa2usb_state_t *scsa2usbp, struct scsi_pkt *pkt) in scsa2usb_pkt_completion() argument
5351 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_pkt_completion()
5353 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_pkt_completion()
5356 (void *)scsa2usbp, pkt->pkt_reason, *(pkt->pkt_scbp), in scsa2usb_pkt_completion()
5374 if ((scsa2usbp->scsa2usb_cur_pkt == pkt) && !ddi_in_panic()) { in scsa2usb_pkt_completion()
5375 SCSA2USB_RESET_CUR_PKT(scsa2usbp); in scsa2usb_pkt_completion()
5377 len = sizeof (scsa2usbp->scsa2usb_last_cmd.cdb); in scsa2usb_pkt_completion()
5378 bzero(scsa2usbp->scsa2usb_last_cmd.cdb, len); in scsa2usb_pkt_completion()
5382 scsa2usbp->scsa2usb_log_handle, in scsa2usb_pkt_completion()
5386 bcopy(pkt->pkt_cdbp, scsa2usbp->scsa2usb_last_cmd.cdb, len); in scsa2usb_pkt_completion()
5391 scsa2usbp->scsa2usb_last_cmd.status = 0; in scsa2usb_pkt_completion()
5398 scsa2usbp->scsa2usb_pkt_state = SCSA2USB_PKT_NONE; in scsa2usb_pkt_completion()
5402 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pkt_completion()
5404 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pkt_completion()
5419 scsa2usb_state_t *scsa2usbp = in scsa2usb_reconnect_event_cb() local
5424 ASSERT(scsa2usbp != NULL); in scsa2usb_reconnect_event_cb()
5426 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_reconnect_event_cb()
5429 scsa2usb_restore_device_state(dip, scsa2usbp); in scsa2usb_reconnect_event_cb()
5431 USB_DPRINTF_L0(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_reconnect_event_cb()
5447 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_reconnect_event_cb()
5448 scsa2usbp->scsa2usb_warning_given = B_FALSE; in scsa2usb_reconnect_event_cb()
5449 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_reconnect_event_cb()
5451 if (scsa2usbp->scsa2usb_ugen_hdl) { in scsa2usb_reconnect_event_cb()
5453 scsa2usbp->scsa2usb_ugen_hdl); in scsa2usb_reconnect_event_cb()
5465 scsa2usb_all_waitQs_empty(scsa2usb_state_t *scsa2usbp) in scsa2usb_all_waitQs_empty() argument
5471 &scsa2usbp->scsa2usb_waitQ[lun])) { in scsa2usb_all_waitQs_empty()
5488 scsa2usb_state_t *scsa2usbp = in scsa2usb_disconnect_event_cb() local
5494 ASSERT(scsa2usbp != NULL); in scsa2usb_disconnect_event_cb()
5496 USB_DPRINTF_L4(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_disconnect_event_cb()
5499 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_disconnect_event_cb()
5500 scsa2usbp->scsa2usb_dev_state = USB_DEV_DISCONNECTED; in scsa2usb_disconnect_event_cb()
5507 if ((scsa2usbp->scsa2usb_work_thread_id == NULL) && in scsa2usb_disconnect_event_cb()
5508 (scsa2usbp->scsa2usb_cur_pkt == NULL) && in scsa2usb_disconnect_event_cb()
5509 (scsa2usb_all_waitQs_empty(scsa2usbp) == in scsa2usb_disconnect_event_cb()
5514 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_disconnect_event_cb()
5516 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_disconnect_event_cb()
5518 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_disconnect_event_cb()
5532 if (scsa2usbp->scsa2usb_ugen_hdl) { in scsa2usb_disconnect_event_cb()
5534 scsa2usbp->scsa2usb_ugen_hdl); in scsa2usb_disconnect_event_cb()
5549 scsa2usb_create_pm_components(dev_info_t *dip, scsa2usb_state_t *scsa2usbp) in scsa2usb_create_pm_components() argument
5554 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_create_pm_components()
5556 USB_DPRINTF_L4(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_pm_components()
5558 (void *)dip, (void *)scsa2usbp); in scsa2usb_create_pm_components()
5563 if ((scsa2usbp->scsa2usb_attrs & SCSA2USB_ATTRS_PM) == 0) { in scsa2usb_create_pm_components()
5564 USB_DPRINTF_L2(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_create_pm_components()
5572 scsa2usbp->scsa2usb_pm = pm; in scsa2usb_create_pm_components()
5574 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_pm_components()
5583 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_pm_components()
5585 scsa2usb_raise_power(scsa2usbp); in scsa2usb_create_pm_components()
5586 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_pm_components()
5589 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_create_pm_components()
5598 scsa2usb_raise_power(scsa2usb_state_t *scsa2usbp) in scsa2usb_raise_power() argument
5600 USB_DPRINTF_L4(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_raise_power()
5603 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_raise_power()
5605 if (scsa2usbp->scsa2usb_pm) { in scsa2usb_raise_power()
5606 scsa2usb_pm_busy_component(scsa2usbp); in scsa2usb_raise_power()
5607 if (scsa2usbp->scsa2usb_pm->scsa2usb_current_power != in scsa2usb_raise_power()
5609 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_raise_power()
5610 (void) pm_raise_power(scsa2usbp->scsa2usb_dip, in scsa2usb_raise_power()
5612 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_raise_power()
5622 scsa2usb_pwrlvl0(scsa2usb_state_t *scsa2usbp) in scsa2usb_pwrlvl0() argument
5626 switch (scsa2usbp->scsa2usb_dev_state) { in scsa2usb_pwrlvl0()
5629 if (scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy != 0) { in scsa2usb_pwrlvl0()
5637 scsa2usb_cbi_stop_intr_polling(scsa2usbp); in scsa2usb_pwrlvl0()
5640 rval = usb_set_device_pwrlvl3(scsa2usbp->scsa2usb_dip); in scsa2usb_pwrlvl0()
5643 scsa2usbp->scsa2usb_dev_state = USB_DEV_PWRED_DOWN; in scsa2usb_pwrlvl0()
5650 scsa2usbp->scsa2usb_pm->scsa2usb_current_power = in scsa2usb_pwrlvl0()
5659 scsa2usb_pwrlvl1(scsa2usb_state_t *scsa2usbp) in scsa2usb_pwrlvl1() argument
5664 rval = usb_set_device_pwrlvl2(scsa2usbp->scsa2usb_dip); in scsa2usb_pwrlvl1()
5672 scsa2usb_pwrlvl2(scsa2usb_state_t *scsa2usbp) in scsa2usb_pwrlvl2() argument
5677 rval = usb_set_device_pwrlvl1(scsa2usbp->scsa2usb_dip); in scsa2usb_pwrlvl2()
5685 scsa2usb_pwrlvl3(scsa2usb_state_t *scsa2usbp) in scsa2usb_pwrlvl3() argument
5694 if (scsa2usbp->scsa2usb_dev_state != USB_DEV_DISCONNECTED) { in scsa2usb_pwrlvl3()
5696 rval = usb_set_device_pwrlvl0(scsa2usbp->scsa2usb_dip); in scsa2usb_pwrlvl3()
5699 scsa2usbp->scsa2usb_dev_state = USB_DEV_ONLINE; in scsa2usb_pwrlvl3()
5701 scsa2usbp->scsa2usb_pm->scsa2usb_current_power = USB_DEV_OS_FULL_PWR; in scsa2usb_pwrlvl3()
5715 scsa2usb_state_t *scsa2usbp; in scsa2usb_power() local
5719 scsa2usbp = ddi_get_soft_state(scsa2usb_statep, ddi_get_instance(dip)); in scsa2usb_power()
5721 USB_DPRINTF_L3(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_power()
5723 (void *)scsa2usbp, level); in scsa2usb_power()
5725 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_power()
5726 if (SCSA2USB_BUSY(scsa2usbp)) { in scsa2usb_power()
5727 USB_DPRINTF_L2(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_power()
5729 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_power()
5734 pm = scsa2usbp->scsa2usb_pm; in scsa2usb_power()
5736 USB_DPRINTF_L2(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_power()
5738 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_power()
5745 USB_DPRINTF_L2(DPRINT_MASK_PM, scsa2usbp->scsa2usb_log_handle, in scsa2usb_power()
5748 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_power()
5755 rval = scsa2usb_pwrlvl0(scsa2usbp); in scsa2usb_power()
5758 rval = scsa2usb_pwrlvl1(scsa2usbp); in scsa2usb_power()
5761 rval = scsa2usb_pwrlvl2(scsa2usbp); in scsa2usb_power()
5764 rval = scsa2usb_pwrlvl3(scsa2usbp); in scsa2usb_power()
5768 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_power()
5775 scsa2usb_pm_busy_component(scsa2usb_state_t *scsa2usbp) in scsa2usb_pm_busy_component() argument
5777 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_pm_busy_component()
5779 if (scsa2usbp->scsa2usb_pm) { in scsa2usb_pm_busy_component()
5780 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy++; in scsa2usb_pm_busy_component()
5783 scsa2usbp->scsa2usb_log_handle, in scsa2usb_pm_busy_component()
5785 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy); in scsa2usb_pm_busy_component()
5787 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pm_busy_component()
5789 if (pm_busy_component(scsa2usbp->scsa2usb_dip, 0) != in scsa2usb_pm_busy_component()
5791 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pm_busy_component()
5792 ASSERT(scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy > 0); in scsa2usb_pm_busy_component()
5793 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy--; in scsa2usb_pm_busy_component()
5796 scsa2usbp->scsa2usb_log_handle, in scsa2usb_pm_busy_component()
5798 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy); in scsa2usb_pm_busy_component()
5802 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pm_busy_component()
5812 scsa2usb_pm_idle_component(scsa2usb_state_t *scsa2usbp) in scsa2usb_pm_idle_component() argument
5814 ASSERT(!mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_pm_idle_component()
5816 if (scsa2usbp->scsa2usb_pm) { in scsa2usb_pm_idle_component()
5817 if (pm_idle_component(scsa2usbp->scsa2usb_dip, 0) == in scsa2usb_pm_idle_component()
5819 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pm_idle_component()
5820 ASSERT(scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy > 0); in scsa2usb_pm_idle_component()
5821 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy--; in scsa2usb_pm_idle_component()
5824 scsa2usbp->scsa2usb_log_handle, in scsa2usb_pm_idle_component()
5826 scsa2usbp->scsa2usb_pm->scsa2usb_pm_busy); in scsa2usb_pm_idle_component()
5828 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_pm_idle_component()
5840 scsa2usb_print_cdb(scsa2usb_state_t *scsa2usbp, scsa2usb_cmd_t *cmd) in scsa2usb_print_cdb() argument
5844 USB_DPRINTF_L3(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_print_cdb()
5862 scsa2usb_test_mblk(scsa2usb_state_t *scsa2usbp, boolean_t large) in scsa2usb_test_mblk() argument
5869 ASSERT(mutex_owned(&scsa2usbp->scsa2usb_mutex)); in scsa2usb_test_mblk()
5874 req = scsa2usb_init_bulk_req(scsa2usbp, len, in scsa2usb_test_mblk()
5882 mutex_exit(&scsa2usbp->scsa2usb_mutex); in scsa2usb_test_mblk()
5884 rval = usb_pipe_bulk_xfer(scsa2usbp->scsa2usb_bulkout_pipe, req, flags); in scsa2usb_test_mblk()
5885 mutex_enter(&scsa2usbp->scsa2usb_mutex); in scsa2usb_test_mblk()
5887 USB_DPRINTF_L1(DPRINT_MASK_SCSA, scsa2usbp->scsa2usb_log_handle, in scsa2usb_test_mblk()