Lines Matching refs:cmd

598 static inline int imm_send_command(struct scsi_cmnd *cmd)  in imm_send_command()  argument
600 imm_struct *dev = imm_dev(cmd->device->host); in imm_send_command()
604 for (k = 0; k < cmd->cmd_len; k += 2) in imm_send_command()
605 if (!imm_out(dev, &cmd->cmnd[k], 2)) in imm_send_command()
618 static int imm_completion(struct scsi_cmnd *cmd) in imm_completion() argument
625 imm_struct *dev = imm_dev(cmd->device->host); in imm_completion()
632 v = cmd->cmnd[0]; in imm_completion()
660 if (((r & 0x88) != 0x88) || (cmd->SCp.this_residual <= 0)) { in imm_completion()
667 && (cmd->SCp.this_residual >= in imm_completion()
669 status = imm_out(dev, cmd->SCp.ptr, fast); in imm_completion()
672 && (cmd->SCp.this_residual >= in imm_completion()
674 status = imm_in(dev, cmd->SCp.ptr, fast); in imm_completion()
677 cmd->SCp.ptr += fast; in imm_completion()
678 cmd->SCp.this_residual -= fast; in imm_completion()
684 if (cmd->SCp.buffer && !cmd->SCp.this_residual) { in imm_completion()
686 if (cmd->SCp.buffers_residual--) { in imm_completion()
687 cmd->SCp.buffer++; in imm_completion()
688 cmd->SCp.this_residual = in imm_completion()
689 cmd->SCp.buffer->length; in imm_completion()
690 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in imm_completion()
696 if (cmd->SCp.this_residual & 0x01) in imm_completion()
697 cmd->SCp.this_residual++; in imm_completion()
719 struct scsi_cmnd *cmd = dev->cur_cmd; in imm_interrupt() local
720 struct Scsi_Host *host = cmd->device->host; in imm_interrupt()
723 if (imm_engine(dev, cmd)) { in imm_interrupt()
729 switch ((cmd->result >> 16) & 0xff) { in imm_interrupt()
733 printk("imm: no device at SCSI ID %i\n", cmd->device->id); in imm_interrupt()
758 (cmd->result >> 16) & 0xff); in imm_interrupt()
762 if (cmd->SCp.phase > 1) in imm_interrupt()
769 cmd->scsi_done(cmd); in imm_interrupt()
774 static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd) in imm_engine() argument
786 switch (cmd->SCp.phase) { in imm_engine()
800 cmd->SCp.phase++; in imm_engine()
804 if (!imm_select(dev, scmd_id(cmd))) { in imm_engine()
808 cmd->SCp.phase++; in imm_engine()
816 if (!imm_send_command(cmd)) in imm_engine()
818 cmd->SCp.phase++; in imm_engine()
822 if (scsi_bufflen(cmd)) { in imm_engine()
823 cmd->SCp.buffer = scsi_sglist(cmd); in imm_engine()
824 cmd->SCp.this_residual = cmd->SCp.buffer->length; in imm_engine()
825 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in imm_engine()
827 cmd->SCp.buffer = NULL; in imm_engine()
828 cmd->SCp.this_residual = 0; in imm_engine()
829 cmd->SCp.ptr = NULL; in imm_engine()
831 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; in imm_engine()
832 cmd->SCp.phase++; in imm_engine()
833 if (cmd->SCp.this_residual & 0x01) in imm_engine()
834 cmd->SCp.this_residual++; in imm_engine()
850 cmd->SCp.phase++; in imm_engine()
860 retv = imm_completion(cmd); in imm_engine()
866 cmd->SCp.phase++; in imm_engine()
878 cmd->SCp.phase++; in imm_engine()
893 cmd->result = (DID_OK << 16) + (l & STATUS_MASK); in imm_engine()
910 static int imm_queuecommand_lck(struct scsi_cmnd *cmd, in imm_queuecommand_lck() argument
913 imm_struct *dev = imm_dev(cmd->device->host); in imm_queuecommand_lck()
921 dev->cur_cmd = cmd; in imm_queuecommand_lck()
922 cmd->scsi_done = done; in imm_queuecommand_lck()
923 cmd->result = DID_ERROR << 16; /* default return code */ in imm_queuecommand_lck()
924 cmd->SCp.phase = 0; /* bus free */ in imm_queuecommand_lck()
955 static int imm_abort(struct scsi_cmnd *cmd) in imm_abort() argument
957 imm_struct *dev = imm_dev(cmd->device->host); in imm_abort()
963 switch (cmd->SCp.phase) { in imm_abort()
987 static int imm_reset(struct scsi_cmnd *cmd) in imm_reset() argument
989 imm_struct *dev = imm_dev(cmd->device->host); in imm_reset()
991 if (cmd->SCp.phase) in imm_reset()
1008 static char cmd[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; in device_check() local
1032 status = imm_out(dev, &cmd[l << 1], 2); in device_check()