Lines Matching refs:hal
47 static cmd1394_cmd_t *s1394_pending_q_remove(s1394_hal_t *hal);
49 static boolean_t s1394_process_pending_q(s1394_hal_t *hal);
51 static boolean_t s1394_pending_q_helper(s1394_hal_t *hal, cmd1394_cmd_t *cmd);
64 s1394_alloc_cmd(s1394_hal_t *hal, uint_t flags, cmd1394_cmd_t **cmdp) in s1394_alloc_cmd() argument
86 *cmdp = kmem_cache_alloc(hal->hal_kmem_cachep, alloc_sleep); in s1394_alloc_cmd()
91 sizeof (s1394_cmd_priv_t) + hal->halinfo.hal_overhead; in s1394_alloc_cmd()
112 hal->hal_kstats->cmd_alloc++; in s1394_alloc_cmd()
123 s1394_free_cmd(s1394_hal_t *hal, cmd1394_cmd_t **cmdp) in s1394_free_cmd() argument
137 kmem_cache_free(hal->hal_kmem_cachep, *cmdp); in s1394_free_cmd()
143 hal->hal_kstats->cmd_free++; in s1394_free_cmd()
156 s1394_xfer_asynch_command(s1394_hal_t *hal, cmd1394_cmd_t *cmd, int *err) in s1394_xfer_asynch_command() argument
165 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_xfer_asynch_command()
167 mutex_enter(&hal->topology_tree_mutex); in s1394_xfer_asynch_command()
168 state = hal->hal_state; in s1394_xfer_asynch_command()
170 (hal->disable_requests_bit == 1)) { in s1394_xfer_asynch_command()
171 *err = s1394_HAL_asynch_error(hal, cmd, state); in s1394_xfer_asynch_command()
172 mutex_exit(&hal->topology_tree_mutex); in s1394_xfer_asynch_command()
175 mutex_exit(&hal->topology_tree_mutex); in s1394_xfer_asynch_command()
186 hal->hal_kstats->atreq_quad_rd++; in s1394_xfer_asynch_command()
190 hal->hal_kstats->atreq_blk_rd++; in s1394_xfer_asynch_command()
194 hal->hal_kstats->atreq_quad_wr++; in s1394_xfer_asynch_command()
198 hal->hal_kstats->atreq_blk_wr++; in s1394_xfer_asynch_command()
199 hal->hal_kstats->atreq_blk_wr_size += h_priv->mblk.length; in s1394_xfer_asynch_command()
203 hal->hal_kstats->atreq_lock32++; in s1394_xfer_asynch_command()
207 hal->hal_kstats->atreq_lock64++; in s1394_xfer_asynch_command()
214 ret = HAL_CALL(hal).read(hal->halinfo.hal_private, in s1394_xfer_asynch_command()
222 ret = HAL_CALL(hal).write(hal->halinfo.hal_private, in s1394_xfer_asynch_command()
230 ret = HAL_CALL(hal).lock(hal->halinfo.hal_private, in s1394_xfer_asynch_command()
260 dip = hal->halinfo.dip; in s1394_xfer_asynch_command()
267 s1394_hal_shutdown(hal, B_TRUE); in s1394_xfer_asynch_command()
273 dip = hal->halinfo.dip; in s1394_xfer_asynch_command()
280 s1394_hal_shutdown(hal, B_TRUE); in s1394_xfer_asynch_command()
304 s1394_setup_asynch_command(s1394_hal_t *hal, s1394_target_t *target, in s1394_setup_asynch_command() argument
317 ASSERT(MUTEX_HELD(&hal->topology_tree_mutex)); in s1394_setup_asynch_command()
344 s_priv->sent_on_hal = (s1394_hal_t *)hal; in s1394_setup_asynch_command()
354 from_node = IEEE1394_NODE_NUM(hal->node_id); in s1394_setup_asynch_command()
357 if (cmd->bus_generation != hal->generation_count) { in s1394_setup_asynch_command()
364 cmd->bus_generation = hal->generation_count; in s1394_setup_asynch_command()
369 rw_enter(&hal->target_list_rwlock, RW_READER); in s1394_setup_asynch_command()
373 rw_exit(&hal->target_list_rwlock); in s1394_setup_asynch_command()
380 rw_exit(&hal->target_list_rwlock); in s1394_setup_asynch_command()
389 from_node = IEEE1394_NODE_NUM(hal->node_id); in s1394_setup_asynch_command()
414 s_priv->hal_cmd_private.speed = (int)s1394_speed_map_get(hal, in s1394_setup_asynch_command()
441 if (hal->topology_tree[to_node].cfgrom) { in s1394_setup_asynch_command()
443 hal->topology_tree[to_node].cfgrom[ in s1394_setup_asynch_command()
463 rw_enter(&hal->target_list_rwlock, RW_READER); in s1394_setup_asynch_command()
465 rw_exit(&hal->target_list_rwlock); in s1394_setup_asynch_command()
497 s1394_insert_q_asynch_cmd(hal, cmd); in s1394_setup_asynch_command()
508 s1394_insert_q_asynch_cmd(s1394_hal_t *hal, cmd1394_cmd_t *cmd) in s1394_insert_q_asynch_cmd() argument
514 mutex_enter(&hal->outstanding_q_mutex); in s1394_insert_q_asynch_cmd()
520 if ((hal->outstanding_q_head == NULL) && in s1394_insert_q_asynch_cmd()
521 (hal->outstanding_q_tail == NULL)) { in s1394_insert_q_asynch_cmd()
523 hal->outstanding_q_head = (cmd1394_cmd_t *)cmd; in s1394_insert_q_asynch_cmd()
524 hal->outstanding_q_tail = (cmd1394_cmd_t *)cmd; in s1394_insert_q_asynch_cmd()
529 s_priv->cmd_priv_next = hal->outstanding_q_head; in s1394_insert_q_asynch_cmd()
532 temp_cmd = (cmd1394_cmd_t *)hal->outstanding_q_head; in s1394_insert_q_asynch_cmd()
537 hal->outstanding_q_head = (cmd1394_cmd_t *)cmd; in s1394_insert_q_asynch_cmd()
540 mutex_exit(&hal->outstanding_q_mutex); in s1394_insert_q_asynch_cmd()
549 s1394_remove_q_asynch_cmd(s1394_hal_t *hal, cmd1394_cmd_t *cmd) in s1394_remove_q_asynch_cmd() argument
556 mutex_enter(&hal->outstanding_q_mutex); in s1394_remove_q_asynch_cmd()
573 if (hal->outstanding_q_head == (cmd1394_cmd_t *)cmd) in s1394_remove_q_asynch_cmd()
574 hal->outstanding_q_head = (cmd1394_cmd_t *)next_cmd; in s1394_remove_q_asynch_cmd()
583 if (hal->outstanding_q_tail == (cmd1394_cmd_t *)cmd) in s1394_remove_q_asynch_cmd()
584 hal->outstanding_q_tail = (cmd1394_cmd_t *)prev_cmd; in s1394_remove_q_asynch_cmd()
587 mutex_exit(&hal->outstanding_q_mutex); in s1394_remove_q_asynch_cmd()
599 s1394_atreq_cmd_complete(s1394_hal_t *hal, cmd1394_cmd_t *req, int status) in s1394_atreq_cmd_complete() argument
616 hal->hal_kstats->atresp_quad_rd_fail++; in s1394_atreq_cmd_complete()
620 hal->hal_kstats->atresp_blk_rd_fail++; in s1394_atreq_cmd_complete()
624 hal->hal_kstats->atresp_quad_wr_fail++; in s1394_atreq_cmd_complete()
628 hal->hal_kstats->atresp_blk_wr_fail++; in s1394_atreq_cmd_complete()
632 hal->hal_kstats->atresp_lock32_fail++; in s1394_atreq_cmd_complete()
636 hal->hal_kstats->atresp_lock64_fail++; in s1394_atreq_cmd_complete()
655 s1394_remove_q_asynch_cmd(hal, req); in s1394_atreq_cmd_complete()
656 s1394_pending_q_insert(hal, req, S1394_PENDING_Q_REAR); in s1394_atreq_cmd_complete()
705 dip = hal->halinfo.dip; in s1394_atreq_cmd_complete()
712 s1394_hal_shutdown(hal, B_TRUE); in s1394_atreq_cmd_complete()
718 s1394_remove_q_asynch_cmd(hal, req); in s1394_atreq_cmd_complete()
759 hal->hal_kstats->atreq_blk_rd_size += in s1394_atreq_cmd_complete()
786 ret = s1394_xfer_asynch_command(hal, req, &err); in s1394_atreq_cmd_complete()
793 s1394_remove_q_asynch_cmd(hal, req); in s1394_atreq_cmd_complete()
794 s1394_pending_q_insert(hal, req, in s1394_atreq_cmd_complete()
803 s1394_remove_q_asynch_cmd(hal, req); in s1394_atreq_cmd_complete()
839 s1394_atresp_cmd_complete(s1394_hal_t *hal, cmd1394_cmd_t *resp, int status) in s1394_atresp_cmd_complete() argument
906 dip = hal->halinfo.dip; in s1394_atresp_cmd_complete()
913 s1394_hal_shutdown(hal, B_TRUE); in s1394_atresp_cmd_complete()
941 dip = hal->halinfo.dip; in s1394_atresp_cmd_complete()
948 s1394_hal_shutdown(hal, B_TRUE); in s1394_atresp_cmd_complete()
955 HAL_CALL(hal).response_complete(hal->halinfo.hal_private, resp, h_priv); in s1394_atresp_cmd_complete()
971 s1394_send_response(s1394_hal_t *hal, cmd1394_cmd_t *resp) in s1394_send_response() argument
994 HAL_CALL(hal).response_complete(hal->halinfo.hal_private, in s1394_send_response()
1004 hal->hal_kstats->arresp_quad_rd_fail++; in s1394_send_response()
1008 hal->hal_kstats->arresp_blk_rd_fail++; in s1394_send_response()
1012 hal->hal_kstats->arresp_quad_wr_fail++; in s1394_send_response()
1016 hal->hal_kstats->arresp_blk_wr_fail++; in s1394_send_response()
1020 hal->hal_kstats->arresp_lock32_fail++; in s1394_send_response()
1024 hal->hal_kstats->arresp_lock64_fail++; in s1394_send_response()
1029 hal->hal_kstats->arreq_blk_rd_size += in s1394_send_response()
1041 ret = HAL_CALL(hal).read_response(hal->halinfo.hal_private, in s1394_send_response()
1046 ret = HAL_CALL(hal).write_response(hal->halinfo.hal_private, in s1394_send_response()
1051 ret = HAL_CALL(hal).lock_response(hal->halinfo.hal_private, in s1394_send_response()
1056 dip = hal->halinfo.dip; in s1394_send_response()
1063 s1394_hal_shutdown(hal, B_TRUE); in s1394_send_response()
1071 HAL_CALL(hal).response_complete(hal->halinfo.hal_private, in s1394_send_response()
1087 s1394_compare_swap(s1394_hal_t *hal, s1394_target_t *target, cmd1394_cmd_t *cmd) in s1394_compare_swap() argument
1094 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_compare_swap()
1097 mutex_enter(&hal->topology_tree_mutex); in s1394_compare_swap()
1099 ret = s1394_setup_asynch_command(hal, target, cmd, S1394_CMD_LOCK, in s1394_compare_swap()
1103 mutex_exit(&hal->topology_tree_mutex); in s1394_compare_swap()
1116 mutex_enter(&hal->topology_tree_mutex); in s1394_compare_swap()
1117 state = hal->hal_state; in s1394_compare_swap()
1122 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_compare_swap()
1125 if (s1394_on_br_thread(hal) == B_TRUE) { in s1394_compare_swap()
1128 mutex_exit(&hal->topology_tree_mutex); in s1394_compare_swap()
1138 s1394_pending_q_insert(hal, cmd, S1394_PENDING_Q_FRONT); in s1394_compare_swap()
1139 mutex_exit(&hal->topology_tree_mutex); in s1394_compare_swap()
1146 mutex_exit(&hal->topology_tree_mutex); in s1394_compare_swap()
1149 ret = s1394_xfer_asynch_command(hal, cmd, &err); in s1394_compare_swap()
1154 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_compare_swap()
1155 s1394_pending_q_insert(hal, cmd, S1394_PENDING_Q_FRONT); in s1394_compare_swap()
1164 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_compare_swap()
1189 s1394_split_lock_req(s1394_hal_t *hal, s1394_target_t *target, in s1394_split_lock_req() argument
1196 if (s1394_alloc_cmd(hal, T1394_ALLOC_CMD_NOSLEEP, &tmp_cmd) != in s1394_split_lock_req()
1238 if (s1394_compare_swap(hal, target, tmp_cmd) != DDI_SUCCESS) { in s1394_split_lock_req()
1242 if (s1394_free_cmd(hal, &tmp_cmd) != DDI_SUCCESS) in s1394_split_lock_req()
1366 s1394_pending_q_insert(s1394_hal_t *hal, cmd1394_cmd_t *cmd, uint_t flags) in s1394_pending_q_insert() argument
1372 mutex_enter(&hal->pending_q_mutex); in s1394_pending_q_insert()
1378 if ((hal->pending_q_head == NULL) && (hal->pending_q_tail == NULL)) { in s1394_pending_q_insert()
1380 hal->pending_q_head = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1381 hal->pending_q_tail = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1386 s_priv->cmd_priv_next = hal->pending_q_head; in s1394_pending_q_insert()
1389 temp_cmd = (cmd1394_cmd_t *)hal->pending_q_head; in s1394_pending_q_insert()
1394 hal->pending_q_head = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1397 s_priv->cmd_priv_prev = hal->pending_q_tail; in s1394_pending_q_insert()
1400 temp_cmd = (cmd1394_cmd_t *)hal->pending_q_tail; in s1394_pending_q_insert()
1405 hal->pending_q_tail = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1408 mutex_exit(&hal->pending_q_mutex); in s1394_pending_q_insert()
1411 hal->hal_kstats->pending_q_insert++; in s1394_pending_q_insert()
1420 s1394_pending_q_remove(s1394_hal_t *hal) in s1394_pending_q_remove() argument
1427 mutex_enter(&hal->pending_q_mutex); in s1394_pending_q_remove()
1429 cmd = (cmd1394_cmd_t *)hal->pending_q_tail; in s1394_pending_q_remove()
1431 mutex_exit(&hal->pending_q_mutex); in s1394_pending_q_remove()
1449 hal->pending_q_head = (cmd1394_cmd_t *)NULL; in s1394_pending_q_remove()
1451 hal->pending_q_tail = (cmd1394_cmd_t *)prev_cmd; in s1394_pending_q_remove()
1453 mutex_exit(&hal->pending_q_mutex); in s1394_pending_q_remove()
1464 s1394_resend_pending_cmds(s1394_hal_t *hal) in s1394_resend_pending_cmds() argument
1468 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_resend_pending_cmds()
1471 done = s1394_process_pending_q(hal); in s1394_resend_pending_cmds()
1474 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_resend_pending_cmds()
1487 s1394_process_pending_q(s1394_hal_t *hal) in s1394_process_pending_q() argument
1499 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_process_pending_q()
1502 cmd = s1394_pending_q_remove(hal); in s1394_process_pending_q()
1516 if (h_priv->bus_generation == hal->generation_count) { in s1394_process_pending_q()
1517 ret = s1394_pending_q_helper(hal, cmd); in s1394_process_pending_q()
1544 if (h_priv->bus_generation == hal->generation_count) { in s1394_process_pending_q()
1545 ret = s1394_pending_q_helper(hal, cmd); in s1394_process_pending_q()
1549 if (s1394_lock_tree(hal) != DDI_SUCCESS) in s1394_process_pending_q()
1553 cmd->bus_generation = hal->generation_count; in s1394_process_pending_q()
1563 rw_enter(&hal->target_list_rwlock, RW_READER); in s1394_process_pending_q()
1568 rw_exit(&hal->target_list_rwlock); in s1394_process_pending_q()
1570 rw_exit(&hal->target_list_rwlock); in s1394_process_pending_q()
1578 s1394_unlock_tree(hal); in s1394_process_pending_q()
1591 s1394_unlock_tree(hal); in s1394_process_pending_q()
1595 s1394_unlock_tree(hal); in s1394_process_pending_q()
1609 from_node = IEEE1394_NODE_NUM(hal->node_id); in s1394_process_pending_q()
1623 (int)s1394_speed_map_get(hal, from_node, in s1394_process_pending_q()
1659 s1394_unlock_tree(hal); in s1394_process_pending_q()
1660 ret = s1394_pending_q_helper(hal, cmd); in s1394_process_pending_q()
1672 s1394_pending_q_helper(s1394_hal_t *hal, cmd1394_cmd_t *cmd) in s1394_pending_q_helper() argument
1678 ASSERT(MUTEX_NOT_HELD(&hal->topology_tree_mutex)); in s1394_pending_q_helper()
1684 s1394_insert_q_asynch_cmd(hal, cmd); in s1394_pending_q_helper()
1687 ret = s1394_xfer_asynch_command(hal, cmd, &err); in s1394_pending_q_helper()
1692 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_pending_q_helper()
1693 s1394_pending_q_insert(hal, cmd, S1394_PENDING_Q_FRONT); in s1394_pending_q_helper()
1698 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_pending_q_helper()