Lines Matching refs:cmd
45 static void s1394_handle_lock(cmd1394_cmd_t *cmd);
51 static boolean_t s1394_pending_q_helper(s1394_hal_t *hal, cmd1394_cmd_t *cmd);
53 static int s1394_process_split_lock(cmd1394_cmd_t *cmd,
56 static int s1394_finish_split_lock(cmd1394_cmd_t *cmd,
156 s1394_xfer_asynch_command(s1394_hal_t *hal, cmd1394_cmd_t *cmd, int *err) in s1394_xfer_asynch_command() argument
171 *err = s1394_HAL_asynch_error(hal, cmd, state); in s1394_xfer_asynch_command()
178 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_xfer_asynch_command()
184 switch (cmd->cmd_type) { in s1394_xfer_asynch_command()
215 (cmd1394_cmd_t *)cmd, in s1394_xfer_asynch_command()
223 (cmd1394_cmd_t *)cmd, in s1394_xfer_asynch_command()
231 (cmd1394_cmd_t *)cmd, in s1394_xfer_asynch_command()
305 cmd1394_cmd_t *cmd, uint32_t xfer_type, int *err) in s1394_setup_asynch_command() argument
319 switch (cmd->cmd_type) { in s1394_setup_asynch_command()
334 if (s1394_address_rollover(cmd) != B_FALSE) { in s1394_setup_asynch_command()
340 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_setup_asynch_command()
349 if (cmd->cmd_options & CMD1394_OVERRIDE_ADDR) { in s1394_setup_asynch_command()
355 to_node = IEEE1394_ADDR_PHY_ID(cmd->cmd_addr); 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()
383 cmd->cmd_addr = (cmd->cmd_addr & IEEE1394_ADDR_OFFSET_MASK); in s1394_setup_asynch_command()
384 cmd->cmd_addr = (cmd->cmd_addr | in s1394_setup_asynch_command()
386 cmd->cmd_addr = (cmd->cmd_addr | IEEE1394_ADDR_BUS_ID_MASK); in s1394_setup_asynch_command()
397 h_priv->bus_generation = cmd->bus_generation; in s1394_setup_asynch_command()
400 cmd->nodeID = (cmd->cmd_addr & IEEE1394_ADDR_NODE_ID_MASK) >> in s1394_setup_asynch_command()
403 if (cmd->cmd_options & CMD1394_OVERRIDE_SPEED) { in s1394_setup_asynch_command()
404 if (cmd->cmd_speed > IEEE1394_S400) { in s1394_setup_asynch_command()
409 s_priv->hal_cmd_private.speed = (int)cmd->cmd_speed; in s1394_setup_asynch_command()
419 if ((cmd->cmd_type == CMD1394_ASYNCH_RD_BLOCK) || in s1394_setup_asynch_command()
420 (cmd->cmd_type == CMD1394_ASYNCH_WR_BLOCK)) { in s1394_setup_asynch_command()
422 if (cmd->cmd_u.b.data_block == NULL) { in s1394_setup_asynch_command()
428 if (s1394_mblk_too_small(cmd) != B_FALSE) { in s1394_setup_asynch_command()
434 cmd->cmd_u.b.bytes_transferred = 0; in s1394_setup_asynch_command()
437 if (cmd->cmd_options & CMD1394_OVERRIDE_ADDR) { in s1394_setup_asynch_command()
468 if (cmd->cmd_options & CMD1394_OVERRIDE_MAX_PAYLOAD) { in s1394_setup_asynch_command()
469 if (current_max_payload > cmd->cmd_u.b.max_payload) in s1394_setup_asynch_command()
470 current_max_payload = cmd->cmd_u.b.max_payload; in s1394_setup_asynch_command()
473 h_priv->mblk.curr_mblk = cmd->cmd_u.b.data_block; in s1394_setup_asynch_command()
475 if (cmd->cmd_type == CMD1394_ASYNCH_WR_BLOCK) { in s1394_setup_asynch_command()
477 cmd->cmd_u.b.data_block->b_rptr; in s1394_setup_asynch_command()
480 cmd->cmd_u.b.data_block->b_wptr; in s1394_setup_asynch_command()
483 if (cmd->cmd_u.b.blk_length > current_max_payload) { in s1394_setup_asynch_command()
485 s_priv->data_remaining = cmd->cmd_u.b.blk_length; in s1394_setup_asynch_command()
488 h_priv->mblk.length = cmd->cmd_u.b.blk_length; in s1394_setup_asynch_command()
489 s_priv->data_remaining = cmd->cmd_u.b.blk_length; 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
517 s_priv = S1394_GET_CMD_PRIV(cmd); 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()
535 c_priv->cmd_priv_prev = (cmd1394_cmd_t *)cmd; in s1394_insert_q_asynch_cmd()
537 hal->outstanding_q_head = (cmd1394_cmd_t *)cmd; 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
559 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_remove_q_asynch_cmd()
573 if (hal->outstanding_q_head == (cmd1394_cmd_t *)cmd) in s1394_remove_q_asynch_cmd()
583 if (hal->outstanding_q_tail == (cmd1394_cmd_t *)cmd) in s1394_remove_q_asynch_cmd()
1087 s1394_compare_swap(s1394_hal_t *hal, s1394_target_t *target, cmd1394_cmd_t *cmd) in s1394_compare_swap() argument
1099 ret = s1394_setup_asynch_command(hal, target, cmd, S1394_CMD_LOCK, in s1394_compare_swap()
1106 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_compare_swap()
1111 cmd->cmd_result = err; in s1394_compare_swap()
1122 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_compare_swap()
1127 if (cmd->cmd_options & CMD1394_BLOCKING) { in s1394_compare_swap()
1132 cmd->cmd_result = CMD1394_EINVALID_CONTEXT; in s1394_compare_swap()
1138 s1394_pending_q_insert(hal, cmd, S1394_PENDING_Q_FRONT); in s1394_compare_swap()
1142 s1394_block_on_asynch_cmd(cmd); 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()
1158 s1394_block_on_asynch_cmd(cmd); in s1394_compare_swap()
1164 s1394_remove_q_asynch_cmd(hal, cmd); in s1394_compare_swap()
1169 cmd->cmd_result = err; in s1394_compare_swap()
1175 s1394_block_on_asynch_cmd(cmd); in s1394_compare_swap()
1190 cmd1394_cmd_t *cmd) in s1394_split_lock_req() argument
1198 cmd->cmd_result = CMD1394_EUNKNOWN_ERROR; in s1394_split_lock_req()
1207 tmp_cmd->cmd_callback_arg = (opaque_t)cmd; in s1394_split_lock_req()
1208 tmp_cmd->cmd_type = cmd->cmd_type; in s1394_split_lock_req()
1209 tmp_cmd->cmd_addr = cmd->cmd_addr; in s1394_split_lock_req()
1210 tmp_cmd->cmd_options = cmd->cmd_options; in s1394_split_lock_req()
1211 tmp_cmd->bus_generation = cmd->bus_generation; in s1394_split_lock_req()
1221 s_priv->temp_num_retries = cmd->cmd_u.l32.num_retries; in s1394_split_lock_req()
1226 s_priv->temp_num_retries = cmd->cmd_u.l64.num_retries; in s1394_split_lock_req()
1233 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_split_lock_req()
1243 cmd->cmd_result = CMD1394_EUNKNOWN_ERROR; in s1394_split_lock_req()
1249 s1394_block_on_asynch_cmd(cmd); in s1394_split_lock_req()
1262 s1394_handle_lock(cmd1394_cmd_t *cmd) in s1394_handle_lock() argument
1273 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_handle_lock()
1278 target_cmd = (cmd1394_cmd_t *)cmd->cmd_callback_arg; in s1394_handle_lock()
1287 if (cmd->cmd_result == CMD1394_CMDSUCCESS) { in s1394_handle_lock()
1289 ret = s1394_process_split_lock(cmd, target_cmd); in s1394_handle_lock()
1300 if (s1394_compare_swap(to_hal, target, cmd) != in s1394_handle_lock()
1302 tcmd_result = cmd->cmd_result; in s1394_handle_lock()
1309 tcmd_result = cmd->cmd_result; in s1394_handle_lock()
1314 if (cmd->cmd_result == CMD1394_CMDSUCCESS) { in s1394_handle_lock()
1316 ret = s1394_finish_split_lock(cmd, target_cmd); in s1394_handle_lock()
1322 tcmd_result = cmd->cmd_result; in s1394_handle_lock()
1327 tcmd_result = cmd->cmd_result; in s1394_handle_lock()
1333 (void) s1394_free_cmd(to_hal, &cmd); in s1394_handle_lock()
1366 s1394_pending_q_insert(s1394_hal_t *hal, cmd1394_cmd_t *cmd, uint_t flags) in s1394_pending_q_insert() argument
1375 s_priv = S1394_GET_CMD_PRIV(cmd); 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()
1392 c_priv->cmd_priv_prev = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1394 hal->pending_q_head = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1403 c_priv->cmd_priv_next = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1405 hal->pending_q_tail = (cmd1394_cmd_t *)cmd; in s1394_pending_q_insert()
1424 cmd1394_cmd_t *cmd; in s1394_pending_q_remove() local
1429 cmd = (cmd1394_cmd_t *)hal->pending_q_tail; in s1394_pending_q_remove()
1430 if (cmd == NULL) { in s1394_pending_q_remove()
1436 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_pending_q_remove()
1455 return (cmd); in s1394_pending_q_remove()
1492 cmd1394_cmd_t *cmd; in s1394_process_pending_q() local
1502 cmd = s1394_pending_q_remove(hal); in s1394_process_pending_q()
1504 if (cmd == NULL) { in s1394_process_pending_q()
1509 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_process_pending_q()
1514 if ((cmd->cmd_options & CMD1394_OVERRIDE_ADDR) || in s1394_process_pending_q()
1515 (cmd->cmd_options & CMD1394_CANCEL_ON_BUS_RESET)) { in s1394_process_pending_q()
1517 ret = s1394_pending_q_helper(hal, cmd); in s1394_process_pending_q()
1523 cmd->cmd_result = CMD1394_EBUSRESET; in s1394_process_pending_q()
1526 if (cmd->cmd_options & CMD1394_BLOCKING) { in s1394_process_pending_q()
1537 if (cmd->completion_callback != NULL) { in s1394_process_pending_q()
1538 cmd->completion_callback(cmd); in s1394_process_pending_q()
1545 ret = s1394_pending_q_helper(hal, cmd); in s1394_process_pending_q()
1553 cmd->bus_generation = hal->generation_count; in s1394_process_pending_q()
1556 h_priv->bus_generation = cmd->bus_generation; in s1394_process_pending_q()
1574 cmd->cmd_result = CMD1394_EDEVICE_REMOVED; in s1394_process_pending_q()
1577 if (cmd->cmd_options & CMD1394_BLOCKING) { in s1394_process_pending_q()
1590 if (cmd->completion_callback != NULL) { in s1394_process_pending_q()
1592 cmd->completion_callback(cmd); in s1394_process_pending_q()
1601 cmd->cmd_addr = cmd->cmd_addr & in s1394_process_pending_q()
1603 cmd->cmd_addr = cmd->cmd_addr | in s1394_process_pending_q()
1605 cmd->cmd_addr = cmd->cmd_addr | in s1394_process_pending_q()
1613 cmd->nodeID = in s1394_process_pending_q()
1614 (cmd->cmd_addr & IEEE1394_ADDR_NODE_ID_MASK) >> in s1394_process_pending_q()
1617 if (cmd->cmd_options & CMD1394_OVERRIDE_SPEED) { in s1394_process_pending_q()
1619 (int)cmd->cmd_speed; in s1394_process_pending_q()
1628 if ((cmd->cmd_type == CMD1394_ASYNCH_RD_BLOCK) || in s1394_process_pending_q()
1629 (cmd->cmd_type == CMD1394_ASYNCH_WR_BLOCK)) { in s1394_process_pending_q()
1643 if (cmd->cmd_options & in s1394_process_pending_q()
1646 cmd->cmd_u.b.max_payload) in s1394_process_pending_q()
1648 cmd->cmd_u.b.max_payload; 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
1681 s_priv = S1394_GET_CMD_PRIV(cmd); 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()
1702 cmd->cmd_result = err; in s1394_pending_q_helper()
1705 if (cmd->cmd_options & CMD1394_BLOCKING) { in s1394_pending_q_helper()
1716 if (cmd->completion_callback != NULL) { in s1394_pending_q_helper()
1717 cmd->completion_callback(cmd); in s1394_pending_q_helper()
1735 s1394_process_split_lock(cmd1394_cmd_t *cmd, cmd1394_cmd_t *target_cmd) in s1394_process_split_lock() argument
1748 if (cmd->cmd_type == CMD1394_ASYNCH_LOCK_32) { in s1394_process_split_lock()
1749 old_value32 = cmd->cmd_u.l32.old_value; in s1394_process_split_lock()
1805 T1394_DATA32(cmd->cmd_u.l32.old_value); in s1394_process_split_lock()
1821 T1394_DATA32(cmd->cmd_u.l32.old_value); in s1394_process_split_lock()
1851 cmd->cmd_u.l32.arg_value = old_value32; in s1394_process_split_lock()
1852 cmd->cmd_u.l32.data_value = new_value32; in s1394_process_split_lock()
1854 old_value64 = cmd->cmd_u.l64.old_value; in s1394_process_split_lock()
1910 T1394_DATA64(cmd->cmd_u.l64.old_value); in s1394_process_split_lock()
1926 T1394_DATA64(cmd->cmd_u.l64.old_value); in s1394_process_split_lock()
1956 cmd->cmd_u.l64.arg_value = old_value64; in s1394_process_split_lock()
1957 cmd->cmd_u.l64.data_value = new_value64; in s1394_process_split_lock()
1969 s1394_finish_split_lock(cmd1394_cmd_t *cmd, cmd1394_cmd_t *target_cmd) in s1394_finish_split_lock() argument
1976 s_priv = S1394_GET_CMD_PRIV(cmd); in s1394_finish_split_lock()
1978 if (((cmd->cmd_type == CMD1394_ASYNCH_LOCK_32) && in s1394_finish_split_lock()
1979 (cmd->cmd_u.l32.old_value == cmd->cmd_u.l32.arg_value)) || in s1394_finish_split_lock()
1980 ((cmd->cmd_type == CMD1394_ASYNCH_LOCK_64) && in s1394_finish_split_lock()
1981 (cmd->cmd_u.l64.old_value == cmd->cmd_u.l64.arg_value))) { in s1394_finish_split_lock()
1983 if (cmd->cmd_type == CMD1394_ASYNCH_LOCK_32) { in s1394_finish_split_lock()
1984 switch (cmd->cmd_u.l32.lock_type) { in s1394_finish_split_lock()
1993 tmp_value32 = cmd->cmd_u.l32.old_value; in s1394_finish_split_lock()
1998 tmp_value32 = cmd->cmd_u.l32.old_value; in s1394_finish_split_lock()
2003 switch (cmd->cmd_u.l64.lock_type) { in s1394_finish_split_lock()
2012 tmp_value64 = cmd->cmd_u.l64.old_value; in s1394_finish_split_lock()
2017 tmp_value64 = cmd->cmd_u.l64.old_value; in s1394_finish_split_lock()