Lines Matching refs:cmd

601 static inline int imm_send_command(struct scsi_cmnd *cmd)  in imm_send_command()  argument
603 imm_struct *dev = imm_dev(cmd->device->host); in imm_send_command()
607 for (k = 0; k < cmd->cmd_len; k += 2) in imm_send_command()
608 if (!imm_out(dev, &cmd->cmnd[k], 2)) in imm_send_command()
621 static int imm_completion(struct scsi_cmnd *cmd) in imm_completion() argument
628 imm_struct *dev = imm_dev(cmd->device->host); in imm_completion()
635 v = cmd->cmnd[0]; in imm_completion()
663 if (((r & 0x88) != 0x88) || (cmd->SCp.this_residual <= 0)) { in imm_completion()
670 && (cmd->SCp.this_residual >= in imm_completion()
672 status = imm_out(dev, cmd->SCp.ptr, fast); in imm_completion()
675 && (cmd->SCp.this_residual >= in imm_completion()
677 status = imm_in(dev, cmd->SCp.ptr, fast); in imm_completion()
680 cmd->SCp.ptr += fast; in imm_completion()
681 cmd->SCp.this_residual -= fast; in imm_completion()
687 if (cmd->SCp.buffer && !cmd->SCp.this_residual) { in imm_completion()
689 if (cmd->SCp.buffers_residual--) { in imm_completion()
690 cmd->SCp.buffer = sg_next(cmd->SCp.buffer); in imm_completion()
691 cmd->SCp.this_residual = in imm_completion()
692 cmd->SCp.buffer->length; in imm_completion()
693 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in imm_completion()
699 if (cmd->SCp.this_residual & 0x01) in imm_completion()
700 cmd->SCp.this_residual++; in imm_completion()
722 struct scsi_cmnd *cmd = dev->cur_cmd; in imm_interrupt() local
723 struct Scsi_Host *host = cmd->device->host; in imm_interrupt()
726 if (imm_engine(dev, cmd)) { in imm_interrupt()
732 switch ((cmd->result >> 16) & 0xff) { in imm_interrupt()
736 printk("imm: no device at SCSI ID %i\n", cmd->device->id); in imm_interrupt()
761 (cmd->result >> 16) & 0xff); in imm_interrupt()
765 if (cmd->SCp.phase > 1) in imm_interrupt()
772 cmd->scsi_done(cmd); in imm_interrupt()
777 static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd) in imm_engine() argument
789 switch (cmd->SCp.phase) { in imm_engine()
803 cmd->SCp.phase++; in imm_engine()
807 if (!imm_select(dev, scmd_id(cmd))) { in imm_engine()
811 cmd->SCp.phase++; in imm_engine()
819 if (!imm_send_command(cmd)) in imm_engine()
821 cmd->SCp.phase++; in imm_engine()
825 if (scsi_bufflen(cmd)) { in imm_engine()
826 cmd->SCp.buffer = scsi_sglist(cmd); in imm_engine()
827 cmd->SCp.this_residual = cmd->SCp.buffer->length; in imm_engine()
828 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in imm_engine()
830 cmd->SCp.buffer = NULL; in imm_engine()
831 cmd->SCp.this_residual = 0; in imm_engine()
832 cmd->SCp.ptr = NULL; in imm_engine()
834 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; in imm_engine()
835 cmd->SCp.phase++; in imm_engine()
836 if (cmd->SCp.this_residual & 0x01) in imm_engine()
837 cmd->SCp.this_residual++; in imm_engine()
854 cmd->SCp.phase++; in imm_engine()
864 retv = imm_completion(cmd); in imm_engine()
870 cmd->SCp.phase++; in imm_engine()
882 cmd->SCp.phase++; in imm_engine()
897 cmd->result = (DID_OK << 16) | (l & STATUS_MASK); in imm_engine()
913 static int imm_queuecommand_lck(struct scsi_cmnd *cmd, in imm_queuecommand_lck() argument
916 imm_struct *dev = imm_dev(cmd->device->host); in imm_queuecommand_lck()
924 dev->cur_cmd = cmd; in imm_queuecommand_lck()
925 cmd->scsi_done = done; in imm_queuecommand_lck()
926 cmd->result = DID_ERROR << 16; /* default return code */ in imm_queuecommand_lck()
927 cmd->SCp.phase = 0; /* bus free */ in imm_queuecommand_lck()
958 static int imm_abort(struct scsi_cmnd *cmd) in imm_abort() argument
960 imm_struct *dev = imm_dev(cmd->device->host); in imm_abort()
966 switch (cmd->SCp.phase) { in imm_abort()
988 static int imm_reset(struct scsi_cmnd *cmd) in imm_reset() argument
990 imm_struct *dev = imm_dev(cmd->device->host); in imm_reset()
992 if (cmd->SCp.phase) in imm_reset()
1009 static char cmd[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; in device_check() local
1033 status = imm_out(dev, &cmd[l << 1], 2); in device_check()