Lines Matching refs:cmd

219 #define write_wd33c93_cmd(regs, cmd) \  argument
220 write_wd33c93((regs), WD_COMMAND, (cmd))
282 write_wd33c93_cmd(const wd33c93_regs regs, uchar cmd) in write_wd33c93_cmd() argument
286 *regs.SCMD = cmd; in write_wd33c93_cmd()
375 wd33c93_queuecommand_lck(struct scsi_cmnd *cmd, in wd33c93_queuecommand_lck() argument
381 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata; in wd33c93_queuecommand_lck()
384 printk("Q-%d-%02x( ", cmd->device->id, cmd->cmnd[0])) in wd33c93_queuecommand_lck()
391 cmd->host_scribble = NULL; in wd33c93_queuecommand_lck()
392 cmd->scsi_done = done; in wd33c93_queuecommand_lck()
393 cmd->result = 0; in wd33c93_queuecommand_lck()
410 if (scsi_bufflen(cmd)) { in wd33c93_queuecommand_lck()
411 cmd->SCp.buffer = scsi_sglist(cmd); in wd33c93_queuecommand_lck()
412 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; in wd33c93_queuecommand_lck()
413 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in wd33c93_queuecommand_lck()
414 cmd->SCp.this_residual = cmd->SCp.buffer->length; in wd33c93_queuecommand_lck()
416 cmd->SCp.buffer = NULL; in wd33c93_queuecommand_lck()
417 cmd->SCp.buffers_residual = 0; in wd33c93_queuecommand_lck()
418 cmd->SCp.ptr = NULL; in wd33c93_queuecommand_lck()
419 cmd->SCp.this_residual = 0; in wd33c93_queuecommand_lck()
439 cmd->SCp.Status = ILLEGAL_STATUS_BYTE; in wd33c93_queuecommand_lck()
449 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) { in wd33c93_queuecommand_lck()
450 cmd->host_scribble = (uchar *) hostdata->input_Q; in wd33c93_queuecommand_lck()
451 hostdata->input_Q = cmd; in wd33c93_queuecommand_lck()
456 tmp->host_scribble = (uchar *) cmd; in wd33c93_queuecommand_lck()
463 wd33c93_execute(cmd->device->host); in wd33c93_queuecommand_lck()
489 struct scsi_cmnd *cmd, *prev; in DEF_SCSI_QCMD() local
502 cmd = (struct scsi_cmnd *) hostdata->input_Q; in DEF_SCSI_QCMD()
504 while (cmd) { in DEF_SCSI_QCMD()
505 if (!(hostdata->busy[cmd->device->id] & in DEF_SCSI_QCMD()
506 (1 << (cmd->device->lun & 0xff)))) in DEF_SCSI_QCMD()
508 prev = cmd; in DEF_SCSI_QCMD()
509 cmd = (struct scsi_cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
514 if (!cmd) { in DEF_SCSI_QCMD()
522 prev->host_scribble = cmd->host_scribble; in DEF_SCSI_QCMD()
524 hostdata->input_Q = (struct scsi_cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
527 hostdata->cmd_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
534 if (cmd->sc_data_direction == DMA_TO_DEVICE) in DEF_SCSI_QCMD()
535 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id); in DEF_SCSI_QCMD()
537 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id | DSTID_DPD); in DEF_SCSI_QCMD()
562 cmd->SCp.phase = 0; /* assume no disconnect */ in DEF_SCSI_QCMD()
567 if (cmd->device->type == 1) /* tape drive? */ in DEF_SCSI_QCMD()
575 if ((prev->device->id != cmd->device->id) || in DEF_SCSI_QCMD()
576 (prev->device->lun != cmd->device->lun)) { in DEF_SCSI_QCMD()
587 cmd->SCp.phase = 1; in DEF_SCSI_QCMD()
590 hostdata->disc_allowed_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
595 write_wd33c93(regs, WD_SOURCE_ID, ((cmd->SCp.phase) ? SRCID_ER : 0)); in DEF_SCSI_QCMD()
597 write_wd33c93(regs, WD_TARGET_LUN, (u8)cmd->device->lun); in DEF_SCSI_QCMD()
599 hostdata->sync_xfer[cmd->device->id]); in DEF_SCSI_QCMD()
600 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF)); in DEF_SCSI_QCMD()
603 (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) { in DEF_SCSI_QCMD()
613 hostdata->selecting = cmd; in DEF_SCSI_QCMD()
627 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET) in DEF_SCSI_QCMD()
628 hostdata->sync_stat[cmd->device->id] = SS_FIRST; in DEF_SCSI_QCMD()
642 hostdata->connected = cmd; in DEF_SCSI_QCMD()
649 write_wd33c93_cdb(regs, cmd->cmd_len, cmd->cmnd); in DEF_SCSI_QCMD()
657 write_wd33c93(regs, WD_OWN_ID, cmd->cmd_len); in DEF_SCSI_QCMD()
664 if ((cmd->SCp.phase == 0) && (hostdata->no_dma == 0)) { in DEF_SCSI_QCMD()
665 if (hostdata->dma_setup(cmd, in DEF_SCSI_QCMD()
666 (cmd->sc_data_direction == DMA_TO_DEVICE) ? in DEF_SCSI_QCMD()
671 cmd->SCp.this_residual); in DEF_SCSI_QCMD()
691 printk("%s)EX-2 ", (cmd->SCp.phase) ? "d:" : "")) in DEF_SCSI_QCMD()
730 transfer_bytes(const wd33c93_regs regs, struct scsi_cmnd *cmd, in transfer_bytes() argument
736 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata; in transfer_bytes()
746 if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { in transfer_bytes()
747 ++cmd->SCp.buffer; in transfer_bytes()
748 --cmd->SCp.buffers_residual; in transfer_bytes()
749 cmd->SCp.this_residual = cmd->SCp.buffer->length; in transfer_bytes()
750 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in transfer_bytes()
752 if (!cmd->SCp.this_residual) /* avoid bogus setups */ in transfer_bytes()
756 hostdata->sync_xfer[cmd->device->id]); in transfer_bytes()
762 if (hostdata->no_dma || hostdata->dma_setup(cmd, data_in_dir)) { in transfer_bytes()
766 transfer_pio(regs, (uchar *) cmd->SCp.ptr, in transfer_bytes()
767 cmd->SCp.this_residual, data_in_dir, hostdata); in transfer_bytes()
768 length = cmd->SCp.this_residual; in transfer_bytes()
769 cmd->SCp.this_residual = read_wd33c93_count(regs); in transfer_bytes()
770 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in transfer_bytes()
787 write_wd33c93_count(regs, cmd->SCp.this_residual); in transfer_bytes()
790 (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) { in transfer_bytes()
807 struct scsi_cmnd *patch, *cmd; in wd33c93_intr() local
821 cmd = (struct scsi_cmnd *) hostdata->connected; /* assume we're connected */ in wd33c93_intr()
843 printk("[%p/%d:", cmd->SCp.ptr, cmd->SCp.this_residual)) in wd33c93_intr()
844 hostdata->dma_stop(cmd->device->host, cmd, 1); in wd33c93_intr()
846 length = cmd->SCp.this_residual; in wd33c93_intr()
847 cmd->SCp.this_residual = read_wd33c93_count(regs); in wd33c93_intr()
848 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in wd33c93_intr()
850 printk("%p/%d]", cmd->SCp.ptr, cmd->SCp.this_residual)) in wd33c93_intr()
861 cmd = (struct scsi_cmnd *) hostdata->selecting; /* get a valid cmd */ in wd33c93_intr()
865 cmd->result = DID_NO_CONNECT << 16; in wd33c93_intr()
866 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
868 cmd->scsi_done(cmd); in wd33c93_intr()
893 hostdata->connected = cmd = in wd33c93_intr()
899 hostdata->outgoing_msg[0] = IDENTIFY(0, cmd->device->lun); in wd33c93_intr()
900 if (cmd->SCp.phase) in wd33c93_intr()
903 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) { in wd33c93_intr()
905 hostdata->sync_stat[cmd->device->id] = SS_WAITING; in wd33c93_intr()
916 if (hostdata->no_sync & (1 << cmd->device->id)) { in wd33c93_intr()
942 printk("IN-%d.%d", cmd->SCp.this_residual, in wd33c93_intr()
943 cmd->SCp.buffers_residual)) in wd33c93_intr()
944 transfer_bytes(regs, cmd, DATA_IN_DIR); in wd33c93_intr()
954 printk("OUT-%d.%d", cmd->SCp.this_residual, in wd33c93_intr()
955 cmd->SCp.buffers_residual)) in wd33c93_intr()
956 transfer_bytes(regs, cmd, DATA_OUT_DIR); in wd33c93_intr()
967 DB(DB_INTR, printk("CMND-%02x", cmd->cmnd[0])) in wd33c93_intr()
968 transfer_pio(regs, cmd->cmnd, cmd->cmd_len, DATA_OUT_DIR, in wd33c93_intr()
978 cmd->SCp.Status = read_1_byte(regs); in wd33c93_intr()
979 DB(DB_INTR, printk("%02x", cmd->SCp.Status)) in wd33c93_intr()
1007 cmd->SCp.Message = msg; in wd33c93_intr()
1036 cmd->device->disconnect = 1; in wd33c93_intr()
1046 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) { in wd33c93_intr()
1047 hostdata->sync_stat[cmd->device->id] = SS_SET; in wd33c93_intr()
1049 hostdata->sync_xfer[cmd->device->id] = in wd33c93_intr()
1076 if (hostdata->sync_stat[cmd->device->id] != in wd33c93_intr()
1107 hostdata->sync_xfer[cmd->device->id] = id; in wd33c93_intr()
1110 hostdata->sync_xfer[cmd->device->id]); in wd33c93_intr()
1112 hostdata->sync_stat[cmd->device->id] = in wd33c93_intr()
1179 cmd->SCp.Message = COMMAND_COMPLETE; in wd33c93_intr()
1181 DB(DB_INTR, printk(":%d.%d", cmd->SCp.Status, lun)) in wd33c93_intr()
1183 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1185 if (cmd->SCp.Status == ILLEGAL_STATUS_BYTE) in wd33c93_intr()
1186 cmd->SCp.Status = lun; in wd33c93_intr()
1187 if (cmd->cmnd[0] == REQUEST_SENSE in wd33c93_intr()
1188 && cmd->SCp.Status != GOOD) in wd33c93_intr()
1189 cmd->result = in wd33c93_intr()
1190 (cmd-> in wd33c93_intr()
1193 cmd->result = in wd33c93_intr()
1194 cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1195 cmd->scsi_done(cmd); in wd33c93_intr()
1264 if (cmd == NULL) { in wd33c93_intr()
1272 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1274 if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD) in wd33c93_intr()
1275 cmd->result = in wd33c93_intr()
1276 (cmd->result & 0x00ffff) | (DID_ERROR << 16); in wd33c93_intr()
1278 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1279 cmd->scsi_done(cmd); in wd33c93_intr()
1297 if (cmd == NULL) { in wd33c93_intr()
1304 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1306 DB(DB_INTR, printk(":%d", cmd->SCp.Status)) in wd33c93_intr()
1307 if (cmd->cmnd[0] == REQUEST_SENSE in wd33c93_intr()
1308 && cmd->SCp.Status != GOOD) in wd33c93_intr()
1309 cmd->result = in wd33c93_intr()
1310 (cmd-> in wd33c93_intr()
1313 cmd->result = in wd33c93_intr()
1314 cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1315 cmd->scsi_done(cmd); in wd33c93_intr()
1319 cmd->host_scribble = (uchar *) hostdata->disconnected_Q; in wd33c93_intr()
1320 hostdata->disconnected_Q = cmd; in wd33c93_intr()
1325 hostdata->disc_done_cnt[cmd->device->id]++; in wd33c93_intr()
1355 cmd = (struct scsi_cmnd *) hostdata->selecting; in wd33c93_intr()
1357 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1358 cmd->host_scribble = in wd33c93_intr()
1360 hostdata->input_Q = cmd; in wd33c93_intr()
1366 if (cmd) { in wd33c93_intr()
1368 hostdata->busy[cmd->device->id] &= in wd33c93_intr()
1369 ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1370 cmd->host_scribble = in wd33c93_intr()
1372 hostdata->input_Q = cmd; in wd33c93_intr()
1449 cmd = (struct scsi_cmnd *) hostdata->disconnected_Q; in wd33c93_intr()
1451 while (cmd) { in wd33c93_intr()
1452 if (id == cmd->device->id && lun == (u8)cmd->device->lun) in wd33c93_intr()
1454 patch = cmd; in wd33c93_intr()
1455 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_intr()
1460 if (!cmd) { in wd33c93_intr()
1471 patch->host_scribble = cmd->host_scribble; in wd33c93_intr()
1474 (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_intr()
1475 hostdata->connected = cmd; in wd33c93_intr()
1482 if (cmd->sc_data_direction == DMA_TO_DEVICE) in wd33c93_intr()
1483 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id); in wd33c93_intr()
1486 cmd->device->id | DSTID_DPD); in wd33c93_intr()
1610 wd33c93_abort(struct scsi_cmnd * cmd) in wd33c93_abort() argument
1617 disable_irq(cmd->device->host->irq); in wd33c93_abort()
1619 instance = cmd->device->host; in wd33c93_abort()
1631 if (tmp == cmd) { in wd33c93_abort()
1633 prev->host_scribble = cmd->host_scribble; in wd33c93_abort()
1636 (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_abort()
1637 cmd->host_scribble = NULL; in wd33c93_abort()
1638 cmd->result = DID_ABORT << 16; in wd33c93_abort()
1642 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1643 cmd->scsi_done(cmd); in wd33c93_abort()
1661 if (hostdata->connected == cmd) { in wd33c93_abort()
1670 hostdata->dma_stop(instance, cmd, 0); in wd33c93_abort()
1709 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_abort()
1712 cmd->result = DID_ABORT << 16; in wd33c93_abort()
1717 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1718 cmd->scsi_done(cmd); in wd33c93_abort()
1730 if (tmp == cmd) { in wd33c93_abort()
1735 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1754 enable_irq(cmd->device->host->irq); in wd33c93_abort()
2132 struct scsi_cmnd *cmd; in wd33c93_show_info() local
2172 cmd = (struct scsi_cmnd *) hd->connected; in wd33c93_show_info()
2174 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2179 cmd = (struct scsi_cmnd *) hd->input_Q; in wd33c93_show_info()
2180 while (cmd) { in wd33c93_show_info()
2182 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2183 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_show_info()
2188 cmd = (struct scsi_cmnd *) hd->disconnected_Q; in wd33c93_show_info()
2189 while (cmd) { in wd33c93_show_info()
2191 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2192 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_show_info()