Lines Matching refs:cmd
251 static int mvumi_internal_cmd_sgl(struct mvumi_hba *mhba, struct mvumi_cmd *cmd, in mvumi_internal_cmd_sgl() argument
265 m_sg = (struct mvumi_sgl *) &cmd->frame->payload[0]; in mvumi_internal_cmd_sgl()
266 cmd->frame->sg_counts = 1; in mvumi_internal_cmd_sgl()
267 cmd->data_buf = virt_addr; in mvumi_internal_cmd_sgl()
280 struct mvumi_cmd *cmd; in mvumi_create_internal_cmd() local
282 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); in mvumi_create_internal_cmd()
283 if (!cmd) { in mvumi_create_internal_cmd()
287 INIT_LIST_HEAD(&cmd->queue_pointer); in mvumi_create_internal_cmd()
289 cmd->frame = pci_alloc_consistent(mhba->pdev, in mvumi_create_internal_cmd()
290 mhba->ib_max_size, &cmd->frame_phys); in mvumi_create_internal_cmd()
291 if (!cmd->frame) { in mvumi_create_internal_cmd()
294 kfree(cmd); in mvumi_create_internal_cmd()
299 if (mvumi_internal_cmd_sgl(mhba, cmd, buf_size)) { in mvumi_create_internal_cmd()
303 cmd->frame, cmd->frame_phys); in mvumi_create_internal_cmd()
304 kfree(cmd); in mvumi_create_internal_cmd()
308 cmd->frame->sg_counts = 0; in mvumi_create_internal_cmd()
310 return cmd; in mvumi_create_internal_cmd()
314 struct mvumi_cmd *cmd) in mvumi_delete_internal_cmd() argument
320 if (cmd && cmd->frame) { in mvumi_delete_internal_cmd()
321 if (cmd->frame->sg_counts) { in mvumi_delete_internal_cmd()
322 m_sg = (struct mvumi_sgl *) &cmd->frame->payload[0]; in mvumi_delete_internal_cmd()
328 pci_free_consistent(mhba->pdev, size, cmd->data_buf, in mvumi_delete_internal_cmd()
332 cmd->frame, cmd->frame_phys); in mvumi_delete_internal_cmd()
333 kfree(cmd); in mvumi_delete_internal_cmd()
345 struct mvumi_cmd *cmd = NULL; in mvumi_get_cmd() local
348 cmd = list_entry((&mhba->cmd_pool)->next, in mvumi_get_cmd()
350 list_del_init(&cmd->queue_pointer); in mvumi_get_cmd()
354 return cmd; in mvumi_get_cmd()
363 struct mvumi_cmd *cmd) in mvumi_return_cmd() argument
365 cmd->scmd = NULL; in mvumi_return_cmd()
366 list_add_tail(&cmd->queue_pointer, &mhba->cmd_pool); in mvumi_return_cmd()
375 struct mvumi_cmd *cmd; in mvumi_free_cmds() local
378 cmd = list_first_entry(&mhba->cmd_pool, struct mvumi_cmd, in mvumi_free_cmds()
380 list_del(&cmd->queue_pointer); in mvumi_free_cmds()
382 kfree(cmd->frame); in mvumi_free_cmds()
383 kfree(cmd); in mvumi_free_cmds()
395 struct mvumi_cmd *cmd; in mvumi_alloc_cmds() local
398 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); in mvumi_alloc_cmds()
399 if (!cmd) in mvumi_alloc_cmds()
402 INIT_LIST_HEAD(&cmd->queue_pointer); in mvumi_alloc_cmds()
403 list_add_tail(&cmd->queue_pointer, &mhba->cmd_pool); in mvumi_alloc_cmds()
405 cmd->frame = mhba->ib_frame + i * mhba->ib_max_size; in mvumi_alloc_cmds()
406 cmd->frame_phys = mhba->ib_frame_phys in mvumi_alloc_cmds()
409 cmd->frame = kzalloc(mhba->ib_max_size, GFP_KERNEL); in mvumi_alloc_cmds()
410 if (!cmd->frame) in mvumi_alloc_cmds()
419 cmd = list_first_entry(&mhba->cmd_pool, struct mvumi_cmd, in mvumi_alloc_cmds()
421 list_del(&cmd->queue_pointer); in mvumi_alloc_cmds()
423 kfree(cmd->frame); in mvumi_alloc_cmds()
424 kfree(cmd); in mvumi_alloc_cmds()
737 struct mvumi_cmd *cmd) in mvumi_issue_blocked_cmd() argument
741 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_issue_blocked_cmd()
743 if (atomic_read(&cmd->sync_cmd)) { in mvumi_issue_blocked_cmd()
746 atomic_read(&cmd->sync_cmd)); in mvumi_issue_blocked_cmd()
750 atomic_inc(&cmd->sync_cmd); in mvumi_issue_blocked_cmd()
752 mhba->instancet->fire_cmd(mhba, cmd); in mvumi_issue_blocked_cmd()
756 (cmd->cmd_status != REQ_STATUS_PENDING), in mvumi_issue_blocked_cmd()
760 if (atomic_read(&cmd->sync_cmd)) { in mvumi_issue_blocked_cmd()
762 atomic_dec(&cmd->sync_cmd); in mvumi_issue_blocked_cmd()
763 if (mhba->tag_cmd[cmd->frame->tag]) { in mvumi_issue_blocked_cmd()
764 mhba->tag_cmd[cmd->frame->tag] = 0; in mvumi_issue_blocked_cmd()
766 cmd->frame->tag); in mvumi_issue_blocked_cmd()
767 tag_release_one(mhba, &mhba->tag_pool, cmd->frame->tag); in mvumi_issue_blocked_cmd()
769 if (!list_empty(&cmd->queue_pointer)) { in mvumi_issue_blocked_cmd()
772 list_del_init(&cmd->queue_pointer); in mvumi_issue_blocked_cmd()
794 struct mvumi_cmd *cmd; in mvumi_flush_cache() local
803 get_cmd: cmd = mvumi_create_internal_cmd(mhba, 0); in mvumi_flush_cache()
804 if (!cmd) { in mvumi_flush_cache()
814 cmd->scmd = NULL; in mvumi_flush_cache()
815 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_flush_cache()
816 atomic_set(&cmd->sync_cmd, 0); in mvumi_flush_cache()
817 frame = cmd->frame; in mvumi_flush_cache()
828 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_flush_cache()
829 if (cmd->cmd_status != SAM_STAT_GOOD) { in mvumi_flush_cache()
832 device_id, cmd->cmd_status); in mvumi_flush_cache()
835 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_flush_cache()
1325 static void mvumi_complete_cmd(struct mvumi_hba *mhba, struct mvumi_cmd *cmd, in mvumi_complete_cmd() argument
1328 struct scsi_cmnd *scmd = cmd->scmd; in mvumi_complete_cmd()
1330 cmd->scmd->SCp.ptr = NULL; in mvumi_complete_cmd()
1343 memcpy(cmd->scmd->sense_buffer, ob_frame->payload, in mvumi_complete_cmd()
1368 cmd->scmd->scsi_done(scmd); in mvumi_complete_cmd()
1369 mvumi_return_cmd(mhba, cmd); in mvumi_complete_cmd()
1373 struct mvumi_cmd *cmd, in mvumi_complete_internal_cmd() argument
1376 if (atomic_read(&cmd->sync_cmd)) { in mvumi_complete_internal_cmd()
1377 cmd->cmd_status = ob_frame->req_status; in mvumi_complete_internal_cmd()
1381 cmd->data_buf) { in mvumi_complete_internal_cmd()
1382 memcpy(cmd->data_buf, ob_frame->payload, in mvumi_complete_internal_cmd()
1385 atomic_dec(&cmd->sync_cmd); in mvumi_complete_internal_cmd()
1449 unsigned int id, struct mvumi_cmd *cmd) in mvumi_inquiry() argument
1456 if (!cmd) { in mvumi_inquiry()
1457 cmd = mvumi_create_internal_cmd(mhba, data_buf_len); in mvumi_inquiry()
1458 if (cmd) in mvumi_inquiry()
1463 memset(cmd->data_buf, 0, data_buf_len); in mvumi_inquiry()
1465 cmd->scmd = NULL; in mvumi_inquiry()
1466 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_inquiry()
1467 atomic_set(&cmd->sync_cmd, 0); in mvumi_inquiry()
1468 frame = cmd->frame; in mvumi_inquiry()
1478 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_inquiry()
1480 if (cmd->cmd_status == SAM_STAT_GOOD) { in mvumi_inquiry()
1485 (cmd->data_buf + MVUMI_INQUIRY_UUID_OFF), in mvumi_inquiry()
1493 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_inquiry()
1590 struct mvumi_cmd *cmd = NULL; in mvumi_probe_devices() local
1593 cmd = mvumi_create_internal_cmd(mhba, 64); in mvumi_probe_devices()
1594 if (!cmd) in mvumi_probe_devices()
1603 wwid = mvumi_inquiry(mhba, id, cmd); in mvumi_probe_devices()
1636 if (cmd) in mvumi_probe_devices()
1637 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_probe_devices()
1738 struct mvumi_cmd *cmd; in mvumi_get_event() local
1741 cmd = mvumi_create_internal_cmd(mhba, 512); in mvumi_get_event()
1742 if (!cmd) in mvumi_get_event()
1744 cmd->scmd = NULL; in mvumi_get_event()
1745 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_get_event()
1746 atomic_set(&cmd->sync_cmd, 0); in mvumi_get_event()
1747 frame = cmd->frame; in mvumi_get_event()
1756 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_get_event()
1758 if (cmd->cmd_status != SAM_STAT_GOOD) in mvumi_get_event()
1760 cmd->cmd_status); in mvumi_get_event()
1762 mvumi_notification(mhba, cmd->frame->cdb[1], cmd->data_buf); in mvumi_get_event()
1764 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_get_event()
1804 struct mvumi_cmd *cmd; in mvumi_handle_clob() local
1814 cmd = mhba->tag_cmd[ob_frame->tag]; in mvumi_handle_clob()
1819 if (cmd->scmd) in mvumi_handle_clob()
1820 mvumi_complete_cmd(mhba, cmd, ob_frame); in mvumi_handle_clob()
1822 mvumi_complete_internal_cmd(mhba, cmd, ob_frame); in mvumi_handle_clob()
1860 struct mvumi_cmd *cmd) in mvumi_send_command() argument
1866 ib_frame = cmd->frame; in mvumi_send_command()
1877 cmd->frame->tag = tag_get_one(mhba, &mhba->tag_pool); in mvumi_send_command()
1878 cmd->frame->request_id = mhba->io_seq++; in mvumi_send_command()
1879 cmd->request_id = cmd->frame->request_id; in mvumi_send_command()
1880 mhba->tag_cmd[cmd->frame->tag] = cmd; in mvumi_send_command()
1887 cpu_to_le32(lower_32_bits(cmd->frame_phys)); in mvumi_send_command()
1889 cpu_to_le32(upper_32_bits(cmd->frame_phys)); in mvumi_send_command()
1897 static void mvumi_fire_cmd(struct mvumi_hba *mhba, struct mvumi_cmd *cmd) in mvumi_fire_cmd() argument
1903 if (cmd) in mvumi_fire_cmd()
1904 list_add_tail(&cmd->queue_pointer, &mhba->waiting_req_list); in mvumi_fire_cmd()
1910 cmd = list_first_entry(&mhba->waiting_req_list, in mvumi_fire_cmd()
1912 list_del_init(&cmd->queue_pointer); in mvumi_fire_cmd()
1913 result = mvumi_send_command(mhba, cmd); in mvumi_fire_cmd()
1919 list_add(&cmd->queue_pointer, &mhba->waiting_req_list); in mvumi_fire_cmd()
2063 struct scsi_cmnd *scmd, struct mvumi_cmd *cmd) in mvumi_build_frame() argument
2067 cmd->scmd = scmd; in mvumi_build_frame()
2068 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_build_frame()
2069 pframe = cmd->frame; in mvumi_build_frame()
2122 struct mvumi_cmd *cmd; in mvumi_queue_command() local
2131 cmd = mvumi_get_cmd(mhba); in mvumi_queue_command()
2132 if (unlikely(!cmd)) { in mvumi_queue_command()
2137 if (unlikely(mvumi_build_frame(mhba, scmd, cmd))) in mvumi_queue_command()
2140 cmd->scmd = scmd; in mvumi_queue_command()
2141 scmd->SCp.ptr = (char *) cmd; in mvumi_queue_command()
2142 mhba->instancet->fire_cmd(mhba, cmd); in mvumi_queue_command()
2147 mvumi_return_cmd(mhba, cmd); in mvumi_queue_command()
2155 struct mvumi_cmd *cmd = (struct mvumi_cmd *) scmd->SCp.ptr; in mvumi_timed_out() local
2162 if (mhba->tag_cmd[cmd->frame->tag]) { in mvumi_timed_out()
2163 mhba->tag_cmd[cmd->frame->tag] = 0; in mvumi_timed_out()
2164 tag_release_one(mhba, &mhba->tag_pool, cmd->frame->tag); in mvumi_timed_out()
2166 if (!list_empty(&cmd->queue_pointer)) in mvumi_timed_out()
2167 list_del_init(&cmd->queue_pointer); in mvumi_timed_out()
2188 mvumi_return_cmd(mhba, cmd); in mvumi_timed_out()