Lines Matching defs:idt

60 static void idm_buf_bind_in_locked(idm_task_t *idt, idm_buf_t *buf);
61 static void idm_buf_bind_out_locked(idm_task_t *idt, idm_buf_t *buf);
62 static void idm_buf_unbind_in_locked(idm_task_t *idt, idm_buf_t *buf);
63 static void idm_buf_unbind_out_locked(idm_task_t *idt, idm_buf_t *buf);
64 static void idm_task_abort_one(idm_conn_t *ic, idm_task_t *idt,
66 static void idm_task_aborted(idm_task_t *idt, idm_status_t status);
677 * transferred to the initiator associated with task 'idt'. The connection
691 idm_buf_tx_to_ini(idm_task_t *idt, idm_buf_t *idb,
709 mutex_enter(&idt->idt_mutex);
710 switch (idt->idt_state) {
712 idt->idt_tx_to_ini_start++;
713 idm_task_hold(idt);
714 idm_buf_bind_in_locked(idt, idb);
716 rc = (*idt->idt_ic->ic_transport_ops->it_buf_tx_to_ini)
717 (idt, idb);
726 idm_buf_bind_in_locked(idt, idb);
727 mutex_exit(&idt->idt_mutex);
738 mutex_exit(&idt->idt_mutex);
745 mutex_exit(&idt->idt_mutex);
773 idm_buf_rx_from_ini(idm_task_t *idt, idm_buf_t *idb,
789 mutex_enter(&idt->idt_mutex);
790 switch (idt->idt_state) {
792 idt->idt_rx_from_ini_start++;
793 idm_task_hold(idt);
794 idm_buf_bind_out_locked(idt, idb);
796 rc = (*idt->idt_ic->ic_transport_ops->it_buf_rx_from_ini)
797 (idt, idb);
807 idm_buf_bind_out_locked(idt, idb);
808 mutex_exit(&idt->idt_mutex);
814 mutex_exit(&idt->idt_mutex);
825 * Caller holds idt->idt_mutex, idt->idt_mutex is released before returning.
826 * idt may be freed after the call to idb->idb_buf_cb.
829 idm_buf_tx_to_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status)
831 ASSERT(mutex_owned(&idt->idt_mutex));
834 idt->idt_tx_to_ini_done++;
842 idm_task_rele(idt);
845 switch (idt->idt_state) {
847 idt->idt_ic->ic_timestamp = ddi_get_lbolt();
848 idm_buf_unbind_in_locked(idt, idb);
849 mutex_exit(&idt->idt_mutex);
880 mutex_exit(&idt->idt_mutex);
889 * Caller holds idt->idt_mutex, idt->idt_mutex is released before returning.
890 * idt may be freed after the call to idb->idb_buf_cb.
893 idm_buf_rx_from_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status)
895 ASSERT(mutex_owned(&idt->idt_mutex));
897 idt->idt_rx_from_ini_done++;
905 idm_task_rele(idt);
916 switch (idt->idt_state) {
918 idt->idt_ic->ic_timestamp = ddi_get_lbolt();
919 idm_buf_unbind_out_locked(idt, idb);
920 mutex_exit(&idt->idt_mutex);
951 mutex_exit(&idt->idt_mutex);
1086 idm_buf_bind_in(idm_task_t *idt, idm_buf_t *buf)
1088 mutex_enter(&idt->idt_mutex);
1089 idm_buf_bind_in_locked(idt, buf);
1090 mutex_exit(&idt->idt_mutex);
1094 idm_buf_bind_in_locked(idm_task_t *idt, idm_buf_t *buf)
1096 buf->idb_task_binding = idt;
1097 buf->idb_ic = idt->idt_ic;
1098 idm_listbuf_insert(&idt->idt_inbufv, buf);
1102 idm_buf_bind_out(idm_task_t *idt, idm_buf_t *buf)
1112 mutex_enter(&idt->idt_mutex);
1113 idm_buf_bind_out_locked(idt, buf);
1114 mutex_exit(&idt->idt_mutex);
1118 idm_buf_bind_out_locked(idm_task_t *idt, idm_buf_t *buf)
1120 buf->idb_task_binding = idt;
1121 buf->idb_ic = idt->idt_ic;
1122 idm_listbuf_insert(&idt->idt_outbufv, buf);
1126 idm_buf_unbind_in(idm_task_t *idt, idm_buf_t *buf)
1136 mutex_enter(&idt->idt_mutex);
1137 idm_buf_unbind_in_locked(idt, buf);
1138 mutex_exit(&idt->idt_mutex);
1142 idm_buf_unbind_in_locked(idm_task_t *idt, idm_buf_t *buf)
1144 list_remove(&idt->idt_inbufv, buf);
1148 idm_buf_unbind_out(idm_task_t *idt, idm_buf_t *buf)
1150 mutex_enter(&idt->idt_mutex);
1151 idm_buf_unbind_out_locked(idt, buf);
1152 mutex_exit(&idt->idt_mutex);
1156 idm_buf_unbind_out_locked(idm_task_t *idt, idm_buf_t *buf)
1158 list_remove(&idt->idt_outbufv, buf);
1256 idm_task_t *idt;
1264 idt = kmem_cache_alloc(idm.idm_task_cache, KM_NOSLEEP);
1265 if (idt == NULL) {
1269 ASSERT(list_is_empty(&idt->idt_inbufv));
1270 ASSERT(list_is_empty(&idt->idt_outbufv));
1275 kmem_cache_free(idm.idm_task_cache, idt);
1281 idt->idt_state = TASK_IDLE;
1282 idt->idt_ic = ic;
1283 idt->idt_private = NULL;
1284 idt->idt_exp_datasn = 0;
1285 idt->idt_exp_rttsn = 0;
1286 idt->idt_flags = 0;
1287 return (idt);
1300 idm_task_start(idm_task_t *idt, uintptr_t handle)
1302 ASSERT(idt != NULL);
1305 idt->idt_state = TASK_ACTIVE;
1306 idt->idt_client_handle = handle;
1307 idt->idt_tx_to_ini_start = idt->idt_tx_to_ini_done =
1308 idt->idt_rx_from_ini_start = idt->idt_rx_from_ini_done =
1309 idt->idt_tx_bytes = idt->idt_rx_bytes = 0;
1318 idm_task_done(idm_task_t *idt)
1320 ASSERT(idt != NULL);
1322 mutex_enter(&idt->idt_mutex);
1323 idt->idt_state = TASK_IDLE;
1324 mutex_exit(&idt->idt_mutex);
1336 idm_refcnt_wait_ref(&idt->idt_refcnt);
1337 idm_refcnt_reset(&idt->idt_refcnt);
1347 idm_task_free(idm_task_t *idt)
1351 ASSERT(idt != NULL);
1352 ASSERT(idt->idt_refcnt.ir_refcnt == 0);
1353 ASSERT(idt->idt_state == TASK_IDLE);
1355 ic = idt->idt_ic;
1365 list_create(&idt->idt_inbufv, sizeof (idm_buf_t),
1367 list_create(&idt->idt_outbufv, sizeof (idm_buf_t),
1370 kmem_cache_free(idm.idm_task_cache, idt);
1385 idm_task_t *idt;
1405 idt = idm.idm_taskid_table[tt];
1407 if (idt != NULL) {
1408 mutex_enter(&idt->idt_mutex);
1409 if ((idt->idt_state != TASK_ACTIVE) ||
1410 (idt->idt_ic != ic) ||
1412 (idt->idt_client_handle != client_handle))) {
1417 if ((idt->idt_ic != ic) &&
1418 (idt->idt_state == TASK_ACTIVE) &&
1419 (IDM_CONN_ISINI(ic) || idt->idt_client_handle ==
1423 (void *)ic, (void *)idt->idt_ic);
1425 mutex_exit(&idt->idt_mutex);
1429 idm_task_hold(idt);
1435 idt->idt_state = TASK_COMPLETE;
1436 mutex_exit(&idt->idt_mutex);
1440 return (idt);
1474 idm_task_t *idt = NULL;
1480 idt = idm.idm_taskid_table[idx];
1482 if (idt == NULL)
1485 mutex_enter(&idt->idt_mutex);
1487 if (idt->idt_state != TASK_ACTIVE) {
1492 mutex_exit(&idt->idt_mutex);
1496 if (idt->idt_client_handle == handle) {
1497 idm_task_hold(idt);
1498 mutex_exit(&idt->idt_mutex);
1502 mutex_exit(&idt->idt_mutex);
1507 if ((idt == NULL) || (idx == idm.idm_taskid_max))
1510 return (idt->idt_private);
1514 idm_task_hold(idm_task_t *idt)
1516 idm_refcnt_hold(&idt->idt_refcnt);
1520 idm_task_rele(idm_task_t *idt)
1522 idm_refcnt_rele(&idt->idt_refcnt);
1526 idm_task_abort(idm_conn_t *ic, idm_task_t *idt, idm_abort_type_t abort_type)
1535 if (idt == NULL) {
1558 mutex_enter(&idt->idt_mutex);
1559 idm_task_abort_one(ic, idt, abort_type);
1566 idm_task_t *idt = ref;
1568 mutex_enter(&idt->idt_mutex);
1569 switch (idt->idt_state) {
1571 idt->idt_state = TASK_SUSPENDED;
1572 mutex_exit(&idt->idt_mutex);
1573 idm_task_aborted(idt, IDM_STATUS_SUSPENDED);
1576 idt->idt_state = TASK_ABORTED;
1577 mutex_exit(&idt->idt_mutex);
1578 idm_task_aborted(idt, IDM_STATUS_ABORTED);
1581 mutex_exit(&idt->idt_mutex);
1592 idm_task_abort_one(idm_conn_t *ic, idm_task_t *idt, idm_abort_type_t abort_type)
1595 ASSERT(mutex_owned(&idt->idt_mutex));
1596 switch (idt->idt_state) {
1601 idt->idt_state = TASK_SUSPENDING;
1602 mutex_exit(&idt->idt_mutex);
1603 ic->ic_transport_ops->it_free_task_rsrc(idt);
1610 idm_refcnt_async_wait_ref(&idt->idt_refcnt,
1615 idt->idt_state = TASK_ABORTING;
1616 mutex_exit(&idt->idt_mutex);
1617 ic->ic_transport_ops->it_free_task_rsrc(idt);
1624 idm_refcnt_async_wait_ref(&idt->idt_refcnt,
1639 idt->idt_state = TASK_ABORTING;
1653 idt->idt_state = TASK_ABORTING;
1654 mutex_exit(&idt->idt_mutex);
1664 idm_refcnt_async_wait_ref(&idt->idt_refcnt,
1695 mutex_exit(&idt->idt_mutex);
1699 idm_task_aborted(idm_task_t *idt, idm_status_t status)
1701 (*idt->idt_ic->ic_conn_ops.icb_task_aborted)(idt, status);