Lines Matching refs:cmd
210 #define write_wd33c93_cmd(regs, cmd) \ argument
211 write_wd33c93((regs), WD_COMMAND, (cmd))
273 write_wd33c93_cmd(const wd33c93_regs regs, uchar cmd) in write_wd33c93_cmd() argument
277 *regs.SCMD = cmd; in write_wd33c93_cmd()
366 wd33c93_queuecommand_lck(struct scsi_cmnd *cmd, in wd33c93_queuecommand_lck() argument
372 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata; in wd33c93_queuecommand_lck()
375 printk("Q-%d-%02x( ", cmd->device->id, cmd->cmnd[0])) in wd33c93_queuecommand_lck()
382 cmd->host_scribble = NULL; in wd33c93_queuecommand_lck()
383 cmd->scsi_done = done; in wd33c93_queuecommand_lck()
384 cmd->result = 0; in wd33c93_queuecommand_lck()
401 if (scsi_bufflen(cmd)) { in wd33c93_queuecommand_lck()
402 cmd->SCp.buffer = scsi_sglist(cmd); in wd33c93_queuecommand_lck()
403 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; in wd33c93_queuecommand_lck()
404 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in wd33c93_queuecommand_lck()
405 cmd->SCp.this_residual = cmd->SCp.buffer->length; in wd33c93_queuecommand_lck()
407 cmd->SCp.buffer = NULL; in wd33c93_queuecommand_lck()
408 cmd->SCp.buffers_residual = 0; in wd33c93_queuecommand_lck()
409 cmd->SCp.ptr = NULL; in wd33c93_queuecommand_lck()
410 cmd->SCp.this_residual = 0; in wd33c93_queuecommand_lck()
430 cmd->SCp.Status = ILLEGAL_STATUS_BYTE; in wd33c93_queuecommand_lck()
440 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) { in wd33c93_queuecommand_lck()
441 cmd->host_scribble = (uchar *) hostdata->input_Q; in wd33c93_queuecommand_lck()
442 hostdata->input_Q = cmd; in wd33c93_queuecommand_lck()
447 tmp->host_scribble = (uchar *) cmd; in wd33c93_queuecommand_lck()
454 wd33c93_execute(cmd->device->host); in wd33c93_queuecommand_lck()
480 struct scsi_cmnd *cmd, *prev; in DEF_SCSI_QCMD() local
493 cmd = (struct scsi_cmnd *) hostdata->input_Q; in DEF_SCSI_QCMD()
495 while (cmd) { in DEF_SCSI_QCMD()
496 if (!(hostdata->busy[cmd->device->id] & in DEF_SCSI_QCMD()
497 (1 << (cmd->device->lun & 0xff)))) in DEF_SCSI_QCMD()
499 prev = cmd; in DEF_SCSI_QCMD()
500 cmd = (struct scsi_cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
505 if (!cmd) { in DEF_SCSI_QCMD()
513 prev->host_scribble = cmd->host_scribble; in DEF_SCSI_QCMD()
515 hostdata->input_Q = (struct scsi_cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
518 hostdata->cmd_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
525 if (cmd->sc_data_direction == DMA_TO_DEVICE) in DEF_SCSI_QCMD()
526 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id); in DEF_SCSI_QCMD()
528 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id | DSTID_DPD); in DEF_SCSI_QCMD()
553 cmd->SCp.phase = 0; /* assume no disconnect */ in DEF_SCSI_QCMD()
558 if (cmd->device->type == 1) /* tape drive? */ in DEF_SCSI_QCMD()
566 if ((prev->device->id != cmd->device->id) || in DEF_SCSI_QCMD()
567 (prev->device->lun != cmd->device->lun)) { in DEF_SCSI_QCMD()
578 cmd->SCp.phase = 1; in DEF_SCSI_QCMD()
581 hostdata->disc_allowed_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
586 write_wd33c93(regs, WD_SOURCE_ID, ((cmd->SCp.phase) ? SRCID_ER : 0)); in DEF_SCSI_QCMD()
588 write_wd33c93(regs, WD_TARGET_LUN, (u8)cmd->device->lun); in DEF_SCSI_QCMD()
590 hostdata->sync_xfer[cmd->device->id]); in DEF_SCSI_QCMD()
591 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF)); in DEF_SCSI_QCMD()
594 (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) { in DEF_SCSI_QCMD()
604 hostdata->selecting = cmd; in DEF_SCSI_QCMD()
618 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET) in DEF_SCSI_QCMD()
619 hostdata->sync_stat[cmd->device->id] = SS_FIRST; in DEF_SCSI_QCMD()
633 hostdata->connected = cmd; in DEF_SCSI_QCMD()
640 write_wd33c93_cdb(regs, cmd->cmd_len, cmd->cmnd); in DEF_SCSI_QCMD()
648 write_wd33c93(regs, WD_OWN_ID, cmd->cmd_len); in DEF_SCSI_QCMD()
655 if ((cmd->SCp.phase == 0) && (hostdata->no_dma == 0)) { in DEF_SCSI_QCMD()
656 if (hostdata->dma_setup(cmd, in DEF_SCSI_QCMD()
657 (cmd->sc_data_direction == DMA_TO_DEVICE) ? in DEF_SCSI_QCMD()
662 cmd->SCp.this_residual); in DEF_SCSI_QCMD()
682 printk("%s)EX-2 ", (cmd->SCp.phase) ? "d:" : "")) in DEF_SCSI_QCMD()
721 transfer_bytes(const wd33c93_regs regs, struct scsi_cmnd *cmd, in transfer_bytes() argument
727 hostdata = (struct WD33C93_hostdata *) cmd->device->host->hostdata; in transfer_bytes()
737 if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { in transfer_bytes()
738 cmd->SCp.buffer = sg_next(cmd->SCp.buffer); in transfer_bytes()
739 --cmd->SCp.buffers_residual; in transfer_bytes()
740 cmd->SCp.this_residual = cmd->SCp.buffer->length; in transfer_bytes()
741 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in transfer_bytes()
743 if (!cmd->SCp.this_residual) /* avoid bogus setups */ in transfer_bytes()
747 hostdata->sync_xfer[cmd->device->id]); in transfer_bytes()
753 if (hostdata->no_dma || hostdata->dma_setup(cmd, data_in_dir)) { in transfer_bytes()
757 transfer_pio(regs, (uchar *) cmd->SCp.ptr, in transfer_bytes()
758 cmd->SCp.this_residual, data_in_dir, hostdata); in transfer_bytes()
759 length = cmd->SCp.this_residual; in transfer_bytes()
760 cmd->SCp.this_residual = read_wd33c93_count(regs); in transfer_bytes()
761 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in transfer_bytes()
778 write_wd33c93_count(regs, cmd->SCp.this_residual); in transfer_bytes()
781 (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) { in transfer_bytes()
798 struct scsi_cmnd *patch, *cmd; in wd33c93_intr() local
812 cmd = (struct scsi_cmnd *) hostdata->connected; /* assume we're connected */ in wd33c93_intr()
834 printk("[%p/%d:", cmd->SCp.ptr, cmd->SCp.this_residual)) in wd33c93_intr()
835 hostdata->dma_stop(cmd->device->host, cmd, 1); in wd33c93_intr()
837 length = cmd->SCp.this_residual; in wd33c93_intr()
838 cmd->SCp.this_residual = read_wd33c93_count(regs); in wd33c93_intr()
839 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in wd33c93_intr()
841 printk("%p/%d]", cmd->SCp.ptr, cmd->SCp.this_residual)) in wd33c93_intr()
852 cmd = (struct scsi_cmnd *) hostdata->selecting; /* get a valid cmd */ in wd33c93_intr()
856 cmd->result = DID_NO_CONNECT << 16; in wd33c93_intr()
857 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
859 cmd->scsi_done(cmd); in wd33c93_intr()
884 hostdata->connected = cmd = in wd33c93_intr()
890 hostdata->outgoing_msg[0] = IDENTIFY(0, cmd->device->lun); in wd33c93_intr()
891 if (cmd->SCp.phase) in wd33c93_intr()
894 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) { in wd33c93_intr()
896 hostdata->sync_stat[cmd->device->id] = SS_WAITING; in wd33c93_intr()
907 if (hostdata->no_sync & (1 << cmd->device->id)) { in wd33c93_intr()
933 printk("IN-%d.%d", cmd->SCp.this_residual, in wd33c93_intr()
934 cmd->SCp.buffers_residual)) in wd33c93_intr()
935 transfer_bytes(regs, cmd, DATA_IN_DIR); in wd33c93_intr()
945 printk("OUT-%d.%d", cmd->SCp.this_residual, in wd33c93_intr()
946 cmd->SCp.buffers_residual)) in wd33c93_intr()
947 transfer_bytes(regs, cmd, DATA_OUT_DIR); in wd33c93_intr()
958 DB(DB_INTR, printk("CMND-%02x", cmd->cmnd[0])) in wd33c93_intr()
959 transfer_pio(regs, cmd->cmnd, cmd->cmd_len, DATA_OUT_DIR, in wd33c93_intr()
969 cmd->SCp.Status = read_1_byte(regs); in wd33c93_intr()
970 DB(DB_INTR, printk("%02x", cmd->SCp.Status)) in wd33c93_intr()
998 cmd->SCp.Message = msg; in wd33c93_intr()
1027 cmd->device->disconnect = 1; in wd33c93_intr()
1037 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) { in wd33c93_intr()
1038 hostdata->sync_stat[cmd->device->id] = SS_SET; in wd33c93_intr()
1040 hostdata->sync_xfer[cmd->device->id] = in wd33c93_intr()
1067 if (hostdata->sync_stat[cmd->device->id] != in wd33c93_intr()
1098 hostdata->sync_xfer[cmd->device->id] = id; in wd33c93_intr()
1101 hostdata->sync_xfer[cmd->device->id]); in wd33c93_intr()
1103 hostdata->sync_stat[cmd->device->id] = in wd33c93_intr()
1170 cmd->SCp.Message = COMMAND_COMPLETE; in wd33c93_intr()
1172 DB(DB_INTR, printk(":%d.%d", cmd->SCp.Status, lun)) in wd33c93_intr()
1174 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1176 if (cmd->SCp.Status == ILLEGAL_STATUS_BYTE) in wd33c93_intr()
1177 cmd->SCp.Status = lun; in wd33c93_intr()
1178 if (cmd->cmnd[0] == REQUEST_SENSE in wd33c93_intr()
1179 && cmd->SCp.Status != GOOD) in wd33c93_intr()
1180 cmd->result = in wd33c93_intr()
1181 (cmd-> in wd33c93_intr()
1184 cmd->result = in wd33c93_intr()
1185 cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1186 cmd->scsi_done(cmd); in wd33c93_intr()
1255 if (cmd == NULL) { in wd33c93_intr()
1263 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1265 if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD) in wd33c93_intr()
1266 cmd->result = in wd33c93_intr()
1267 (cmd->result & 0x00ffff) | (DID_ERROR << 16); in wd33c93_intr()
1269 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1270 cmd->scsi_done(cmd); in wd33c93_intr()
1288 if (cmd == NULL) { in wd33c93_intr()
1295 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1297 DB(DB_INTR, printk(":%d", cmd->SCp.Status)) in wd33c93_intr()
1298 if (cmd->cmnd[0] == REQUEST_SENSE in wd33c93_intr()
1299 && cmd->SCp.Status != GOOD) in wd33c93_intr()
1300 cmd->result = in wd33c93_intr()
1301 (cmd-> in wd33c93_intr()
1304 cmd->result = in wd33c93_intr()
1305 cmd->SCp.Status | (cmd->SCp.Message << 8); in wd33c93_intr()
1306 cmd->scsi_done(cmd); in wd33c93_intr()
1310 cmd->host_scribble = (uchar *) hostdata->disconnected_Q; in wd33c93_intr()
1311 hostdata->disconnected_Q = cmd; in wd33c93_intr()
1316 hostdata->disc_done_cnt[cmd->device->id]++; in wd33c93_intr()
1346 cmd = (struct scsi_cmnd *) hostdata->selecting; in wd33c93_intr()
1348 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1349 cmd->host_scribble = in wd33c93_intr()
1351 hostdata->input_Q = cmd; in wd33c93_intr()
1357 if (cmd) { in wd33c93_intr()
1359 hostdata->busy[cmd->device->id] &= in wd33c93_intr()
1360 ~(1 << (cmd->device->lun & 0xff)); in wd33c93_intr()
1361 cmd->host_scribble = in wd33c93_intr()
1363 hostdata->input_Q = cmd; in wd33c93_intr()
1440 cmd = (struct scsi_cmnd *) hostdata->disconnected_Q; in wd33c93_intr()
1442 while (cmd) { in wd33c93_intr()
1443 if (id == cmd->device->id && lun == (u8)cmd->device->lun) in wd33c93_intr()
1445 patch = cmd; in wd33c93_intr()
1446 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_intr()
1451 if (!cmd) { in wd33c93_intr()
1462 patch->host_scribble = cmd->host_scribble; in wd33c93_intr()
1465 (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_intr()
1466 hostdata->connected = cmd; in wd33c93_intr()
1473 if (cmd->sc_data_direction == DMA_TO_DEVICE) in wd33c93_intr()
1474 write_wd33c93(regs, WD_DESTINATION_ID, cmd->device->id); in wd33c93_intr()
1477 cmd->device->id | DSTID_DPD); in wd33c93_intr()
1603 wd33c93_abort(struct scsi_cmnd * cmd) in wd33c93_abort() argument
1610 disable_irq(cmd->device->host->irq); in wd33c93_abort()
1612 instance = cmd->device->host; in wd33c93_abort()
1624 if (tmp == cmd) { in wd33c93_abort()
1626 prev->host_scribble = cmd->host_scribble; in wd33c93_abort()
1629 (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_abort()
1630 cmd->host_scribble = NULL; in wd33c93_abort()
1631 cmd->result = DID_ABORT << 16; in wd33c93_abort()
1635 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1636 cmd->scsi_done(cmd); in wd33c93_abort()
1654 if (hostdata->connected == cmd) { in wd33c93_abort()
1663 hostdata->dma_stop(instance, cmd, 0); in wd33c93_abort()
1702 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff)); in wd33c93_abort()
1705 cmd->result = DID_ABORT << 16; in wd33c93_abort()
1710 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1711 cmd->scsi_done(cmd); in wd33c93_abort()
1723 if (tmp == cmd) { in wd33c93_abort()
1728 enable_irq(cmd->device->host->irq); in wd33c93_abort()
1747 enable_irq(cmd->device->host->irq); in wd33c93_abort()
2126 struct scsi_cmnd *cmd; in wd33c93_show_info() local
2166 cmd = (struct scsi_cmnd *) hd->connected; in wd33c93_show_info()
2168 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2173 cmd = (struct scsi_cmnd *) hd->input_Q; in wd33c93_show_info()
2174 while (cmd) { in wd33c93_show_info()
2176 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2177 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_show_info()
2182 cmd = (struct scsi_cmnd *) hd->disconnected_Q; in wd33c93_show_info()
2183 while (cmd) { in wd33c93_show_info()
2185 cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in wd33c93_show_info()
2186 cmd = (struct scsi_cmnd *) cmd->host_scribble; in wd33c93_show_info()