Lines Matching refs:cmd

223 static int mvumi_internal_cmd_sgl(struct mvumi_hba *mhba, struct mvumi_cmd *cmd,  in mvumi_internal_cmd_sgl()  argument
238 m_sg = (struct mvumi_sgl *) &cmd->frame->payload[0]; in mvumi_internal_cmd_sgl()
239 cmd->frame->sg_counts = 1; in mvumi_internal_cmd_sgl()
240 cmd->data_buf = virt_addr; in mvumi_internal_cmd_sgl()
253 struct mvumi_cmd *cmd; in mvumi_create_internal_cmd() local
255 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); in mvumi_create_internal_cmd()
256 if (!cmd) { in mvumi_create_internal_cmd()
260 INIT_LIST_HEAD(&cmd->queue_pointer); in mvumi_create_internal_cmd()
262 cmd->frame = dma_alloc_coherent(&mhba->pdev->dev, mhba->ib_max_size, in mvumi_create_internal_cmd()
263 &cmd->frame_phys, GFP_KERNEL); in mvumi_create_internal_cmd()
264 if (!cmd->frame) { in mvumi_create_internal_cmd()
267 kfree(cmd); in mvumi_create_internal_cmd()
272 if (mvumi_internal_cmd_sgl(mhba, cmd, buf_size)) { in mvumi_create_internal_cmd()
276 cmd->frame, cmd->frame_phys); in mvumi_create_internal_cmd()
277 kfree(cmd); in mvumi_create_internal_cmd()
281 cmd->frame->sg_counts = 0; in mvumi_create_internal_cmd()
283 return cmd; in mvumi_create_internal_cmd()
287 struct mvumi_cmd *cmd) in mvumi_delete_internal_cmd() argument
293 if (cmd && cmd->frame) { in mvumi_delete_internal_cmd()
294 if (cmd->frame->sg_counts) { in mvumi_delete_internal_cmd()
295 m_sg = (struct mvumi_sgl *) &cmd->frame->payload[0]; in mvumi_delete_internal_cmd()
301 dma_free_coherent(&mhba->pdev->dev, size, cmd->data_buf, in mvumi_delete_internal_cmd()
305 cmd->frame, cmd->frame_phys); in mvumi_delete_internal_cmd()
306 kfree(cmd); in mvumi_delete_internal_cmd()
318 struct mvumi_cmd *cmd = NULL; in mvumi_get_cmd() local
321 cmd = list_entry((&mhba->cmd_pool)->next, in mvumi_get_cmd()
323 list_del_init(&cmd->queue_pointer); in mvumi_get_cmd()
327 return cmd; in mvumi_get_cmd()
336 struct mvumi_cmd *cmd) in mvumi_return_cmd() argument
338 cmd->scmd = NULL; in mvumi_return_cmd()
339 list_add_tail(&cmd->queue_pointer, &mhba->cmd_pool); in mvumi_return_cmd()
348 struct mvumi_cmd *cmd; in mvumi_free_cmds() local
351 cmd = list_first_entry(&mhba->cmd_pool, struct mvumi_cmd, in mvumi_free_cmds()
353 list_del(&cmd->queue_pointer); in mvumi_free_cmds()
355 kfree(cmd->frame); in mvumi_free_cmds()
356 kfree(cmd); in mvumi_free_cmds()
368 struct mvumi_cmd *cmd; in mvumi_alloc_cmds() local
371 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); in mvumi_alloc_cmds()
372 if (!cmd) in mvumi_alloc_cmds()
375 INIT_LIST_HEAD(&cmd->queue_pointer); in mvumi_alloc_cmds()
376 list_add_tail(&cmd->queue_pointer, &mhba->cmd_pool); in mvumi_alloc_cmds()
378 cmd->frame = mhba->ib_frame + i * mhba->ib_max_size; in mvumi_alloc_cmds()
379 cmd->frame_phys = mhba->ib_frame_phys in mvumi_alloc_cmds()
382 cmd->frame = kzalloc(mhba->ib_max_size, GFP_KERNEL); in mvumi_alloc_cmds()
383 if (!cmd->frame) in mvumi_alloc_cmds()
392 cmd = list_first_entry(&mhba->cmd_pool, struct mvumi_cmd, in mvumi_alloc_cmds()
394 list_del(&cmd->queue_pointer); in mvumi_alloc_cmds()
396 kfree(cmd->frame); in mvumi_alloc_cmds()
397 kfree(cmd); in mvumi_alloc_cmds()
711 struct mvumi_cmd *cmd) in mvumi_issue_blocked_cmd() argument
715 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_issue_blocked_cmd()
717 if (atomic_read(&cmd->sync_cmd)) { in mvumi_issue_blocked_cmd()
720 atomic_read(&cmd->sync_cmd)); in mvumi_issue_blocked_cmd()
724 atomic_inc(&cmd->sync_cmd); in mvumi_issue_blocked_cmd()
726 mhba->instancet->fire_cmd(mhba, cmd); in mvumi_issue_blocked_cmd()
730 (cmd->cmd_status != REQ_STATUS_PENDING), in mvumi_issue_blocked_cmd()
734 if (atomic_read(&cmd->sync_cmd)) { in mvumi_issue_blocked_cmd()
736 atomic_dec(&cmd->sync_cmd); in mvumi_issue_blocked_cmd()
737 if (mhba->tag_cmd[cmd->frame->tag]) { in mvumi_issue_blocked_cmd()
738 mhba->tag_cmd[cmd->frame->tag] = NULL; in mvumi_issue_blocked_cmd()
740 cmd->frame->tag); in mvumi_issue_blocked_cmd()
741 tag_release_one(mhba, &mhba->tag_pool, cmd->frame->tag); in mvumi_issue_blocked_cmd()
743 if (!list_empty(&cmd->queue_pointer)) { in mvumi_issue_blocked_cmd()
746 list_del_init(&cmd->queue_pointer); in mvumi_issue_blocked_cmd()
768 struct mvumi_cmd *cmd; in mvumi_flush_cache() local
777 get_cmd: cmd = mvumi_create_internal_cmd(mhba, 0); in mvumi_flush_cache()
778 if (!cmd) { in mvumi_flush_cache()
788 cmd->scmd = NULL; in mvumi_flush_cache()
789 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_flush_cache()
790 atomic_set(&cmd->sync_cmd, 0); in mvumi_flush_cache()
791 frame = cmd->frame; in mvumi_flush_cache()
802 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_flush_cache()
803 if (cmd->cmd_status != SAM_STAT_GOOD) { in mvumi_flush_cache()
806 device_id, cmd->cmd_status); in mvumi_flush_cache()
809 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_flush_cache()
1300 static void mvumi_complete_cmd(struct mvumi_hba *mhba, struct mvumi_cmd *cmd, in mvumi_complete_cmd() argument
1303 struct scsi_cmnd *scmd = cmd->scmd; in mvumi_complete_cmd()
1305 mvumi_priv(cmd->scmd)->cmd_priv = NULL; in mvumi_complete_cmd()
1318 memcpy(cmd->scmd->sense_buffer, ob_frame->payload, in mvumi_complete_cmd()
1332 mvumi_return_cmd(mhba, cmd); in mvumi_complete_cmd()
1336 struct mvumi_cmd *cmd, in mvumi_complete_internal_cmd() argument
1339 if (atomic_read(&cmd->sync_cmd)) { in mvumi_complete_internal_cmd()
1340 cmd->cmd_status = ob_frame->req_status; in mvumi_complete_internal_cmd()
1344 cmd->data_buf) { in mvumi_complete_internal_cmd()
1345 memcpy(cmd->data_buf, ob_frame->payload, in mvumi_complete_internal_cmd()
1348 atomic_dec(&cmd->sync_cmd); in mvumi_complete_internal_cmd()
1412 unsigned int id, struct mvumi_cmd *cmd) in mvumi_inquiry() argument
1419 if (!cmd) { in mvumi_inquiry()
1420 cmd = mvumi_create_internal_cmd(mhba, data_buf_len); in mvumi_inquiry()
1421 if (cmd) in mvumi_inquiry()
1426 memset(cmd->data_buf, 0, data_buf_len); in mvumi_inquiry()
1428 cmd->scmd = NULL; in mvumi_inquiry()
1429 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_inquiry()
1430 atomic_set(&cmd->sync_cmd, 0); in mvumi_inquiry()
1431 frame = cmd->frame; in mvumi_inquiry()
1441 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_inquiry()
1443 if (cmd->cmd_status == SAM_STAT_GOOD) { in mvumi_inquiry()
1448 (cmd->data_buf + MVUMI_INQUIRY_UUID_OFF), in mvumi_inquiry()
1456 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_inquiry()
1553 struct mvumi_cmd *cmd = NULL; in mvumi_probe_devices() local
1556 cmd = mvumi_create_internal_cmd(mhba, 64); in mvumi_probe_devices()
1557 if (!cmd) in mvumi_probe_devices()
1566 wwid = mvumi_inquiry(mhba, id, cmd); in mvumi_probe_devices()
1599 if (cmd) in mvumi_probe_devices()
1600 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_probe_devices()
1701 struct mvumi_cmd *cmd; in mvumi_get_event() local
1704 cmd = mvumi_create_internal_cmd(mhba, 512); in mvumi_get_event()
1705 if (!cmd) in mvumi_get_event()
1707 cmd->scmd = NULL; in mvumi_get_event()
1708 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_get_event()
1709 atomic_set(&cmd->sync_cmd, 0); in mvumi_get_event()
1710 frame = cmd->frame; in mvumi_get_event()
1719 mvumi_issue_blocked_cmd(mhba, cmd); in mvumi_get_event()
1721 if (cmd->cmd_status != SAM_STAT_GOOD) in mvumi_get_event()
1723 cmd->cmd_status); in mvumi_get_event()
1725 mvumi_notification(mhba, cmd->frame->cdb[1], cmd->data_buf); in mvumi_get_event()
1727 mvumi_delete_internal_cmd(mhba, cmd); in mvumi_get_event()
1767 struct mvumi_cmd *cmd; in mvumi_handle_clob() local
1777 cmd = mhba->tag_cmd[ob_frame->tag]; in mvumi_handle_clob()
1782 if (cmd->scmd) in mvumi_handle_clob()
1783 mvumi_complete_cmd(mhba, cmd, ob_frame); in mvumi_handle_clob()
1785 mvumi_complete_internal_cmd(mhba, cmd, ob_frame); in mvumi_handle_clob()
1823 struct mvumi_cmd *cmd) in mvumi_send_command() argument
1829 ib_frame = cmd->frame; in mvumi_send_command()
1840 cmd->frame->tag = tag_get_one(mhba, &mhba->tag_pool); in mvumi_send_command()
1841 cmd->frame->request_id = mhba->io_seq++; in mvumi_send_command()
1842 cmd->request_id = cmd->frame->request_id; in mvumi_send_command()
1843 mhba->tag_cmd[cmd->frame->tag] = cmd; in mvumi_send_command()
1850 cpu_to_le32(lower_32_bits(cmd->frame_phys)); in mvumi_send_command()
1852 cpu_to_le32(upper_32_bits(cmd->frame_phys)); in mvumi_send_command()
1860 static void mvumi_fire_cmd(struct mvumi_hba *mhba, struct mvumi_cmd *cmd) in mvumi_fire_cmd() argument
1866 if (cmd) in mvumi_fire_cmd()
1867 list_add_tail(&cmd->queue_pointer, &mhba->waiting_req_list); in mvumi_fire_cmd()
1873 cmd = list_first_entry(&mhba->waiting_req_list, in mvumi_fire_cmd()
1875 list_del_init(&cmd->queue_pointer); in mvumi_fire_cmd()
1876 result = mvumi_send_command(mhba, cmd); in mvumi_fire_cmd()
1882 list_add(&cmd->queue_pointer, &mhba->waiting_req_list); in mvumi_fire_cmd()
2026 struct scsi_cmnd *scmd, struct mvumi_cmd *cmd) in mvumi_build_frame() argument
2030 cmd->scmd = scmd; in mvumi_build_frame()
2031 cmd->cmd_status = REQ_STATUS_PENDING; in mvumi_build_frame()
2032 pframe = cmd->frame; in mvumi_build_frame()
2082 struct mvumi_cmd *cmd; in mvumi_queue_command() local
2090 cmd = mvumi_get_cmd(mhba); in mvumi_queue_command()
2091 if (unlikely(!cmd)) { in mvumi_queue_command()
2096 if (unlikely(mvumi_build_frame(mhba, scmd, cmd))) in mvumi_queue_command()
2099 cmd->scmd = scmd; in mvumi_queue_command()
2100 mvumi_priv(scmd)->cmd_priv = cmd; in mvumi_queue_command()
2101 mhba->instancet->fire_cmd(mhba, cmd); in mvumi_queue_command()
2106 mvumi_return_cmd(mhba, cmd); in mvumi_queue_command()
2114 struct mvumi_cmd *cmd = mvumi_priv(scmd)->cmd_priv; in mvumi_timed_out() local
2121 if (mhba->tag_cmd[cmd->frame->tag]) { in mvumi_timed_out()
2122 mhba->tag_cmd[cmd->frame->tag] = NULL; in mvumi_timed_out()
2123 tag_release_one(mhba, &mhba->tag_pool, cmd->frame->tag); in mvumi_timed_out()
2125 if (!list_empty(&cmd->queue_pointer)) in mvumi_timed_out()
2126 list_del_init(&cmd->queue_pointer); in mvumi_timed_out()
2137 mvumi_return_cmd(mhba, cmd); in mvumi_timed_out()