Lines Matching refs:idt

61 static void idm_buf_bind_in_locked(idm_task_t *idt, idm_buf_t *buf);
62 static void idm_buf_bind_out_locked(idm_task_t *idt, idm_buf_t *buf);
63 static void idm_buf_unbind_in_locked(idm_task_t *idt, idm_buf_t *buf);
64 static void idm_buf_unbind_out_locked(idm_task_t *idt, idm_buf_t *buf);
65 static stmf_status_t idm_task_abort_one(idm_conn_t *ic, idm_task_t *idt,
67 static void idm_task_aborted(idm_task_t *idt, idm_status_t status);
695 idm_buf_tx_to_ini(idm_task_t *idt, idm_buf_t *idb, in idm_buf_tx_to_ini() argument
713 mutex_enter(&idt->idt_mutex); in idm_buf_tx_to_ini()
714 switch (idt->idt_state) { in idm_buf_tx_to_ini()
716 idt->idt_tx_to_ini_start++; in idm_buf_tx_to_ini()
717 idm_task_hold(idt); in idm_buf_tx_to_ini()
718 idm_buf_bind_in_locked(idt, idb); in idm_buf_tx_to_ini()
720 rc = (*idt->idt_ic->ic_transport_ops->it_buf_tx_to_ini) in idm_buf_tx_to_ini()
721 (idt, idb); in idm_buf_tx_to_ini()
730 idm_buf_bind_in_locked(idt, idb); in idm_buf_tx_to_ini()
731 mutex_exit(&idt->idt_mutex); in idm_buf_tx_to_ini()
742 mutex_exit(&idt->idt_mutex); in idm_buf_tx_to_ini()
749 mutex_exit(&idt->idt_mutex); in idm_buf_tx_to_ini()
777 idm_buf_rx_from_ini(idm_task_t *idt, idm_buf_t *idb, in idm_buf_rx_from_ini() argument
793 mutex_enter(&idt->idt_mutex); in idm_buf_rx_from_ini()
794 switch (idt->idt_state) { in idm_buf_rx_from_ini()
796 idt->idt_rx_from_ini_start++; in idm_buf_rx_from_ini()
797 idm_task_hold(idt); in idm_buf_rx_from_ini()
798 idm_buf_bind_out_locked(idt, idb); in idm_buf_rx_from_ini()
800 rc = (*idt->idt_ic->ic_transport_ops->it_buf_rx_from_ini) in idm_buf_rx_from_ini()
801 (idt, idb); in idm_buf_rx_from_ini()
811 idm_buf_bind_out_locked(idt, idb); in idm_buf_rx_from_ini()
812 mutex_exit(&idt->idt_mutex); in idm_buf_rx_from_ini()
818 mutex_exit(&idt->idt_mutex); in idm_buf_rx_from_ini()
833 idm_buf_tx_to_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status) in idm_buf_tx_to_ini_done() argument
835 ASSERT(mutex_owned(&idt->idt_mutex)); in idm_buf_tx_to_ini_done()
838 idt->idt_tx_to_ini_done++; in idm_buf_tx_to_ini_done()
846 idm_task_rele(idt); in idm_buf_tx_to_ini_done()
849 switch (idt->idt_state) { in idm_buf_tx_to_ini_done()
851 idt->idt_ic->ic_timestamp = ddi_get_lbolt(); in idm_buf_tx_to_ini_done()
852 idm_buf_unbind_in_locked(idt, idb); in idm_buf_tx_to_ini_done()
853 mutex_exit(&idt->idt_mutex); in idm_buf_tx_to_ini_done()
884 mutex_exit(&idt->idt_mutex); in idm_buf_tx_to_ini_done()
897 idm_buf_rx_from_ini_done(idm_task_t *idt, idm_buf_t *idb, idm_status_t status) in idm_buf_rx_from_ini_done() argument
899 ASSERT(mutex_owned(&idt->idt_mutex)); in idm_buf_rx_from_ini_done()
901 idt->idt_rx_from_ini_done++; in idm_buf_rx_from_ini_done()
909 idm_task_rele(idt); in idm_buf_rx_from_ini_done()
920 switch (idt->idt_state) { in idm_buf_rx_from_ini_done()
922 idt->idt_ic->ic_timestamp = ddi_get_lbolt(); in idm_buf_rx_from_ini_done()
923 idm_buf_unbind_out_locked(idt, idb); in idm_buf_rx_from_ini_done()
924 mutex_exit(&idt->idt_mutex); in idm_buf_rx_from_ini_done()
955 mutex_exit(&idt->idt_mutex); in idm_buf_rx_from_ini_done()
1090 idm_buf_bind_in(idm_task_t *idt, idm_buf_t *buf) in idm_buf_bind_in() argument
1092 mutex_enter(&idt->idt_mutex); in idm_buf_bind_in()
1093 idm_buf_bind_in_locked(idt, buf); in idm_buf_bind_in()
1094 mutex_exit(&idt->idt_mutex); in idm_buf_bind_in()
1098 idm_buf_bind_in_locked(idm_task_t *idt, idm_buf_t *buf) in idm_buf_bind_in_locked() argument
1100 buf->idb_task_binding = idt; in idm_buf_bind_in_locked()
1101 buf->idb_ic = idt->idt_ic; in idm_buf_bind_in_locked()
1102 idm_listbuf_insert(&idt->idt_inbufv, buf); in idm_buf_bind_in_locked()
1106 idm_buf_bind_out(idm_task_t *idt, idm_buf_t *buf) in idm_buf_bind_out() argument
1116 mutex_enter(&idt->idt_mutex); in idm_buf_bind_out()
1117 idm_buf_bind_out_locked(idt, buf); in idm_buf_bind_out()
1118 mutex_exit(&idt->idt_mutex); in idm_buf_bind_out()
1122 idm_buf_bind_out_locked(idm_task_t *idt, idm_buf_t *buf) in idm_buf_bind_out_locked() argument
1124 buf->idb_task_binding = idt; in idm_buf_bind_out_locked()
1125 buf->idb_ic = idt->idt_ic; in idm_buf_bind_out_locked()
1126 idm_listbuf_insert(&idt->idt_outbufv, buf); in idm_buf_bind_out_locked()
1130 idm_buf_unbind_in(idm_task_t *idt, idm_buf_t *buf) in idm_buf_unbind_in() argument
1140 mutex_enter(&idt->idt_mutex); in idm_buf_unbind_in()
1141 idm_buf_unbind_in_locked(idt, buf); in idm_buf_unbind_in()
1142 mutex_exit(&idt->idt_mutex); in idm_buf_unbind_in()
1146 idm_buf_unbind_in_locked(idm_task_t *idt, idm_buf_t *buf) in idm_buf_unbind_in_locked() argument
1148 list_remove(&idt->idt_inbufv, buf); in idm_buf_unbind_in_locked()
1152 idm_buf_unbind_out(idm_task_t *idt, idm_buf_t *buf) in idm_buf_unbind_out() argument
1154 mutex_enter(&idt->idt_mutex); in idm_buf_unbind_out()
1155 idm_buf_unbind_out_locked(idt, buf); in idm_buf_unbind_out()
1156 mutex_exit(&idt->idt_mutex); in idm_buf_unbind_out()
1160 idm_buf_unbind_out_locked(idm_task_t *idt, idm_buf_t *buf) in idm_buf_unbind_out_locked() argument
1162 list_remove(&idt->idt_outbufv, buf); in idm_buf_unbind_out_locked()
1260 idm_task_t *idt; in idm_task_alloc() local
1268 idt = kmem_cache_alloc(idm.idm_task_cache, KM_NOSLEEP); in idm_task_alloc()
1269 if (idt == NULL) { in idm_task_alloc()
1273 ASSERT(list_is_empty(&idt->idt_inbufv)); in idm_task_alloc()
1274 ASSERT(list_is_empty(&idt->idt_outbufv)); in idm_task_alloc()
1279 kmem_cache_free(idm.idm_task_cache, idt); in idm_task_alloc()
1285 idt->idt_state = TASK_IDLE; in idm_task_alloc()
1286 idt->idt_ic = ic; in idm_task_alloc()
1287 idt->idt_private = NULL; in idm_task_alloc()
1288 idt->idt_exp_datasn = 0; in idm_task_alloc()
1289 idt->idt_exp_rttsn = 0; in idm_task_alloc()
1290 idt->idt_flags = 0; in idm_task_alloc()
1291 return (idt); in idm_task_alloc()
1304 idm_task_start(idm_task_t *idt, uintptr_t handle) in idm_task_start() argument
1306 ASSERT(idt != NULL); in idm_task_start()
1309 idt->idt_state = TASK_ACTIVE; in idm_task_start()
1310 idt->idt_client_handle = handle; in idm_task_start()
1311 idt->idt_tx_to_ini_start = idt->idt_tx_to_ini_done = in idm_task_start()
1312 idt->idt_rx_from_ini_start = idt->idt_rx_from_ini_done = in idm_task_start()
1313 idt->idt_tx_bytes = idt->idt_rx_bytes = 0; in idm_task_start()
1322 idm_task_done(idm_task_t *idt) in idm_task_done() argument
1324 ASSERT(idt != NULL); in idm_task_done()
1326 mutex_enter(&idt->idt_mutex); in idm_task_done()
1327 idt->idt_state = TASK_IDLE; in idm_task_done()
1328 mutex_exit(&idt->idt_mutex); in idm_task_done()
1340 idm_refcnt_wait_ref(&idt->idt_refcnt); in idm_task_done()
1341 idm_refcnt_reset(&idt->idt_refcnt); in idm_task_done()
1351 idm_task_free(idm_task_t *idt) in idm_task_free() argument
1355 ASSERT(idt != NULL); in idm_task_free()
1356 ASSERT(idt->idt_refcnt.ir_refcnt == 0); in idm_task_free()
1357 ASSERT(idt->idt_state == TASK_IDLE); in idm_task_free()
1359 ic = idt->idt_ic; in idm_task_free()
1369 list_create(&idt->idt_inbufv, sizeof (idm_buf_t), in idm_task_free()
1371 list_create(&idt->idt_outbufv, sizeof (idm_buf_t), in idm_task_free()
1374 kmem_cache_free(idm.idm_task_cache, idt); in idm_task_free()
1389 idm_task_t *idt; in idm_task_find_common() local
1409 idt = idm.idm_taskid_table[tt]; in idm_task_find_common()
1411 if (idt != NULL) { in idm_task_find_common()
1412 mutex_enter(&idt->idt_mutex); in idm_task_find_common()
1413 if ((idt->idt_state != TASK_ACTIVE) || in idm_task_find_common()
1414 (idt->idt_ic != ic) || in idm_task_find_common()
1416 (idt->idt_client_handle != client_handle))) { in idm_task_find_common()
1421 if ((idt->idt_ic != ic) && in idm_task_find_common()
1422 (idt->idt_state == TASK_ACTIVE) && in idm_task_find_common()
1423 (IDM_CONN_ISINI(ic) || idt->idt_client_handle == in idm_task_find_common()
1427 (void *)ic, (void *)idt->idt_ic); in idm_task_find_common()
1429 mutex_exit(&idt->idt_mutex); in idm_task_find_common()
1433 idm_task_hold(idt); in idm_task_find_common()
1439 idt->idt_state = TASK_COMPLETE; in idm_task_find_common()
1440 mutex_exit(&idt->idt_mutex); in idm_task_find_common()
1444 return (idt); in idm_task_find_common()
1478 idm_task_t *idt = NULL; in idm_task_find_by_handle() local
1484 idt = idm.idm_taskid_table[idx]; in idm_task_find_by_handle()
1486 if (idt == NULL) in idm_task_find_by_handle()
1489 mutex_enter(&idt->idt_mutex); in idm_task_find_by_handle()
1491 if (idt->idt_state != TASK_ACTIVE) { in idm_task_find_by_handle()
1496 mutex_exit(&idt->idt_mutex); in idm_task_find_by_handle()
1500 if (idt->idt_client_handle == handle) { in idm_task_find_by_handle()
1501 idm_task_hold(idt); in idm_task_find_by_handle()
1502 mutex_exit(&idt->idt_mutex); in idm_task_find_by_handle()
1506 mutex_exit(&idt->idt_mutex); in idm_task_find_by_handle()
1511 if ((idt == NULL) || (idx == idm.idm_taskid_max)) in idm_task_find_by_handle()
1514 return (idt->idt_private); in idm_task_find_by_handle()
1518 idm_task_hold(idm_task_t *idt) in idm_task_hold() argument
1520 idm_refcnt_hold(&idt->idt_refcnt); in idm_task_hold()
1524 idm_task_rele(idm_task_t *idt) in idm_task_rele() argument
1526 idm_refcnt_rele(&idt->idt_refcnt); in idm_task_rele()
1530 idm_task_abort(idm_conn_t *ic, idm_task_t *idt, idm_abort_type_t abort_type) in idm_task_abort() argument
1540 if (idt == NULL) { in idm_task_abort()
1563 mutex_enter(&idt->idt_mutex); in idm_task_abort()
1564 s = idm_task_abort_one(ic, idt, abort_type); in idm_task_abort()
1572 idm_task_t *idt = ref; in idm_task_abort_unref_cb() local
1574 mutex_enter(&idt->idt_mutex); in idm_task_abort_unref_cb()
1575 switch (idt->idt_state) { in idm_task_abort_unref_cb()
1577 idt->idt_state = TASK_SUSPENDED; in idm_task_abort_unref_cb()
1578 mutex_exit(&idt->idt_mutex); in idm_task_abort_unref_cb()
1579 idm_task_aborted(idt, IDM_STATUS_SUSPENDED); in idm_task_abort_unref_cb()
1582 idt->idt_state = TASK_ABORTED; in idm_task_abort_unref_cb()
1583 mutex_exit(&idt->idt_mutex); in idm_task_abort_unref_cb()
1584 idm_task_aborted(idt, IDM_STATUS_ABORTED); in idm_task_abort_unref_cb()
1587 mutex_exit(&idt->idt_mutex); in idm_task_abort_unref_cb()
1598 idm_task_abort_one(idm_conn_t *ic, idm_task_t *idt, idm_abort_type_t abort_type) in idm_task_abort_one() argument
1603 ASSERT(mutex_owned(&idt->idt_mutex)); in idm_task_abort_one()
1604 switch (idt->idt_state) { in idm_task_abort_one()
1609 idt->idt_state = TASK_SUSPENDING; in idm_task_abort_one()
1610 mutex_exit(&idt->idt_mutex); in idm_task_abort_one()
1611 ic->ic_transport_ops->it_free_task_rsrc(idt); in idm_task_abort_one()
1618 idm_refcnt_async_wait_ref(&idt->idt_refcnt, in idm_task_abort_one()
1623 idt->idt_state = TASK_ABORTING; in idm_task_abort_one()
1624 mutex_exit(&idt->idt_mutex); in idm_task_abort_one()
1625 ic->ic_transport_ops->it_free_task_rsrc(idt); in idm_task_abort_one()
1632 idm_refcnt_async_wait_ref(&idt->idt_refcnt, in idm_task_abort_one()
1647 idt->idt_state = TASK_ABORTING; in idm_task_abort_one()
1661 idt->idt_state = TASK_ABORTING; in idm_task_abort_one()
1662 mutex_exit(&idt->idt_mutex); in idm_task_abort_one()
1672 idm_refcnt_async_wait_ref(&idt->idt_refcnt, in idm_task_abort_one()
1693 idm_refcnt_wait_ref(&idt->idt_refcnt); in idm_task_abort_one()
1699 mutex_exit(&idt->idt_mutex); in idm_task_abort_one()
1705 idm_task_aborted(idm_task_t *idt, idm_status_t status) in idm_task_aborted() argument
1707 (*idt->idt_ic->ic_conn_ops.icb_task_aborted)(idt, status); in idm_task_aborted()