Lines Matching refs:cmd
207 static inline void write_3393_cmd(struct IN2000_hostdata *hostdata, uchar cmd) in write_3393_cmd() argument
212 write1_io(cmd, IO_WD_DATA); in write_3393_cmd()
257 static int is_dir_out(Scsi_Cmnd * cmd) in is_dir_out() argument
259 switch (cmd->cmnd[0]) { in is_dir_out()
336 static int in2000_queuecommand_lck(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) in in2000_queuecommand_lck() argument
342 instance = cmd->device->host; in in2000_queuecommand_lck()
345 DB(DB_QUEUE_COMMAND, scmd_printk(KERN_DEBUG, cmd, "Q-%02x(", cmd->cmnd[0])) in in2000_queuecommand_lck()
352 cmd->host_scribble = NULL; in in2000_queuecommand_lck()
353 cmd->scsi_done = done; in in2000_queuecommand_lck()
354 cmd->result = 0; in in2000_queuecommand_lck()
371 if (scsi_bufflen(cmd)) { in in2000_queuecommand_lck()
372 cmd->SCp.buffer = scsi_sglist(cmd); in in2000_queuecommand_lck()
373 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; in in2000_queuecommand_lck()
374 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in in2000_queuecommand_lck()
375 cmd->SCp.this_residual = cmd->SCp.buffer->length; in in2000_queuecommand_lck()
377 cmd->SCp.buffer = NULL; in in2000_queuecommand_lck()
378 cmd->SCp.buffers_residual = 0; in in2000_queuecommand_lck()
379 cmd->SCp.ptr = NULL; in in2000_queuecommand_lck()
380 cmd->SCp.this_residual = 0; in in2000_queuecommand_lck()
382 cmd->SCp.have_data_in = 0; in in2000_queuecommand_lck()
403 cmd->SCp.Status = ILLEGAL_STATUS_BYTE; in in2000_queuecommand_lck()
415 if (!(hostdata->input_Q) || (cmd->cmnd[0] == REQUEST_SENSE)) { in in2000_queuecommand_lck()
416 cmd->host_scribble = (uchar *) hostdata->input_Q; in in2000_queuecommand_lck()
417 hostdata->input_Q = cmd; in in2000_queuecommand_lck()
420 tmp->host_scribble = (uchar *) cmd; in in2000_queuecommand_lck()
427 in2000_execute(cmd->device->host); in in2000_queuecommand_lck()
448 Scsi_Cmnd *cmd, *prev; in DEF_SCSI_QCMD() local
471 cmd = (Scsi_Cmnd *) hostdata->input_Q; in DEF_SCSI_QCMD()
473 while (cmd) { in DEF_SCSI_QCMD()
474 if (!(hostdata->busy[cmd->device->id] & (1 << cmd->device->lun))) in DEF_SCSI_QCMD()
476 prev = cmd; in DEF_SCSI_QCMD()
477 cmd = (Scsi_Cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
482 if (!cmd) { in DEF_SCSI_QCMD()
492 prev->host_scribble = cmd->host_scribble; in DEF_SCSI_QCMD()
494 hostdata->input_Q = (Scsi_Cmnd *) cmd->host_scribble; in DEF_SCSI_QCMD()
497 hostdata->cmd_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
504 if (is_dir_out(cmd)) in DEF_SCSI_QCMD()
505 write_3393(hostdata, WD_DESTINATION_ID, cmd->device->id); in DEF_SCSI_QCMD()
507 write_3393(hostdata, WD_DESTINATION_ID, cmd->device->id | DSTID_DPD); in DEF_SCSI_QCMD()
532 cmd->SCp.phase = 0; /* assume no disconnect */ in DEF_SCSI_QCMD()
537 if (cmd->device->type == 1) /* tape drive? */ in DEF_SCSI_QCMD()
544 if ((prev->device->id != cmd->device->id) || (prev->device->lun != cmd->device->lun)) { in DEF_SCSI_QCMD()
553 cmd->SCp.phase = 1; in DEF_SCSI_QCMD()
556 hostdata->disc_allowed_cnt[cmd->device->id]++; in DEF_SCSI_QCMD()
560 write_3393(hostdata, WD_SOURCE_ID, ((cmd->SCp.phase) ? SRCID_ER : 0)); in DEF_SCSI_QCMD()
562 write_3393(hostdata, WD_TARGET_LUN, cmd->device->lun); in DEF_SCSI_QCMD()
563 write_3393(hostdata, WD_SYNCHRONOUS_TRANSFER, hostdata->sync_xfer[cmd->device->id]); in DEF_SCSI_QCMD()
564 hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun); in DEF_SCSI_QCMD()
566 if ((hostdata->level2 <= L2_NONE) || (hostdata->sync_stat[cmd->device->id] == SS_UNSET)) { in DEF_SCSI_QCMD()
576 hostdata->selecting = cmd; in DEF_SCSI_QCMD()
588 if (hostdata->sync_stat[cmd->device->id] == SS_UNSET) { in DEF_SCSI_QCMD()
589 if (hostdata->sync_off & (1 << cmd->device->id)) in DEF_SCSI_QCMD()
590 hostdata->sync_stat[cmd->device->id] = SS_SET; in DEF_SCSI_QCMD()
592 hostdata->sync_stat[cmd->device->id] = SS_FIRST; in DEF_SCSI_QCMD()
609 hostdata->connected = cmd; in DEF_SCSI_QCMD()
617 for (i = 0; i < cmd->cmd_len; i++) in DEF_SCSI_QCMD()
618 write1_io(cmd->cmnd[i], IO_WD_DATA); in DEF_SCSI_QCMD()
626 write_3393(hostdata, WD_OWN_ID, cmd->cmd_len); in DEF_SCSI_QCMD()
646 if (!(cmd->SCp.phase)) { in DEF_SCSI_QCMD()
647 write_3393_count(hostdata, cmd->SCp.this_residual); in DEF_SCSI_QCMD()
651 if (is_dir_out(cmd)) { in DEF_SCSI_QCMD()
653 if ((i = cmd->SCp.this_residual) > (IN2000_FIFO_SIZE - 16)) in DEF_SCSI_QCMD()
655 cmd->SCp.have_data_in = i; /* this much data in fifo */ in DEF_SCSI_QCMD()
657 sp = (unsigned short *) cmd->SCp.ptr; in DEF_SCSI_QCMD()
671 if (cmd->SCp.have_data_in <= ((IN2000_FIFO_SIZE - 16) - 32)) { in DEF_SCSI_QCMD()
690 cmd->SCp.have_data_in = 0; /* nothing transferred yet */ in DEF_SCSI_QCMD()
707 DB(DB_EXECUTE, printk("%s)EX-2 ", (cmd->SCp.phase) ? "d:" : "")) in DEF_SCSI_QCMD()
747 static void transfer_bytes(Scsi_Cmnd * cmd, int data_in_dir) in transfer_bytes() argument
754 hostdata = (struct IN2000_hostdata *) cmd->device->host->hostdata; in transfer_bytes()
764 if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { in transfer_bytes()
765 ++cmd->SCp.buffer; in transfer_bytes()
766 --cmd->SCp.buffers_residual; in transfer_bytes()
767 cmd->SCp.this_residual = cmd->SCp.buffer->length; in transfer_bytes()
768 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); in transfer_bytes()
773 write_3393(hostdata, WD_SYNCHRONOUS_TRANSFER, hostdata->sync_xfer[cmd->device->id]); in transfer_bytes()
774 write_3393_count(hostdata, cmd->SCp.this_residual); in transfer_bytes()
784 if ((hostdata->level2 >= L2_DATA) || (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) { in transfer_bytes()
791 cmd->SCp.have_data_in = 0; in transfer_bytes()
800 if ((hostdata->level2 >= L2_DATA) || (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) { in transfer_bytes()
807 sp = (unsigned short *) cmd->SCp.ptr; in transfer_bytes()
809 if ((i = cmd->SCp.this_residual) > IN2000_FIFO_SIZE) in transfer_bytes()
811 cmd->SCp.have_data_in = i; in transfer_bytes()
837 Scsi_Cmnd *patch, *cmd; in in2000_intr() local
913 cmd = (Scsi_Cmnd *) hostdata->connected; /* assume we're connected */ in in2000_intr()
914 CHECK_NULL(cmd, "fifo_int") in in2000_intr()
920 sp = (unsigned short *) (cmd->SCp.ptr + cmd->SCp.have_data_in); in in2000_intr()
934 i = sp - (unsigned short *) (cmd->SCp.ptr + cmd->SCp.have_data_in); in in2000_intr()
936 cmd->SCp.have_data_in += i; in in2000_intr()
953 if (cmd->SCp.this_residual == cmd->SCp.have_data_in) { in in2000_intr()
964 sp = (unsigned short *) (cmd->SCp.ptr + cmd->SCp.have_data_in); in in2000_intr()
965 i = cmd->SCp.this_residual - cmd->SCp.have_data_in; /* bytes yet to go */ in in2000_intr()
973 i = sp - (unsigned short *) (cmd->SCp.ptr + cmd->SCp.have_data_in); in in2000_intr()
975 cmd->SCp.have_data_in += i; in in2000_intr()
995 cmd = (Scsi_Cmnd *) hostdata->connected; /* assume we're connected */ in in2000_intr()
999 if (!cmd && (sr != CSR_RESEL_AM && sr != CSR_TIMEOUT && sr != CSR_SELECT)) { in in2000_intr()
1026 sp = (unsigned short *) (cmd->SCp.ptr + cmd->SCp.have_data_in); in in2000_intr()
1030 i = (cmd->SCp.this_residual - read_3393_count(hostdata)) - cmd->SCp.have_data_in; in in2000_intr()
1044 length = cmd->SCp.this_residual; in in2000_intr()
1045 cmd->SCp.this_residual = read_3393_count(hostdata); in in2000_intr()
1046 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in in2000_intr()
1048 DB(DB_TRANSFER, printk("(%p,%d)", cmd->SCp.ptr, cmd->SCp.this_residual)) in in2000_intr()
1054 length = cmd->SCp.this_residual; in in2000_intr()
1055 cmd->SCp.this_residual = read_3393_count(hostdata); in in2000_intr()
1056 cmd->SCp.ptr += (length - cmd->SCp.this_residual); in in2000_intr()
1058 DB(DB_TRANSFER, printk("(%p,%d)", cmd->SCp.ptr, cmd->SCp.this_residual)) in in2000_intr()
1072 cmd = (Scsi_Cmnd *) hostdata->selecting; /* get a valid cmd */ in in2000_intr()
1073 CHECK_NULL(cmd, "csr_timeout") in in2000_intr()
1077 cmd->result = DID_NO_CONNECT << 16; in in2000_intr()
1078 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1080 cmd->scsi_done(cmd); in in2000_intr()
1094 hostdata->connected = cmd = (Scsi_Cmnd *) hostdata->selecting; in in2000_intr()
1095 CHECK_NULL(cmd, "csr_select") in in2000_intr()
1100 hostdata->outgoing_msg[0] = (0x80 | 0x00 | cmd->device->lun); in in2000_intr()
1101 if (cmd->SCp.phase) in in2000_intr()
1104 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) { in in2000_intr()
1109 hostdata->sync_stat[cmd->device->id] = SS_WAITING; in in2000_intr()
1129 DB(DB_INTR, printk("IN-%d.%d", cmd->SCp.this_residual, cmd->SCp.buffers_residual)) in in2000_intr()
1130 transfer_bytes(cmd, DATA_IN_DIR); in in2000_intr()
1139 DB(DB_INTR, printk("OUT-%d.%d", cmd->SCp.this_residual, cmd->SCp.buffers_residual)) in in2000_intr()
1140 transfer_bytes(cmd, DATA_OUT_DIR); in in2000_intr()
1151 DB(DB_INTR, printk("CMND-%02x", cmd->cmnd[0])) in in2000_intr()
1152 transfer_pio(cmd->cmnd, cmd->cmd_len, DATA_OUT_DIR, hostdata); in in2000_intr()
1162 cmd->SCp.Status = read_1_byte(hostdata); in in2000_intr()
1163 DB(DB_INTR, printk("%02x", cmd->SCp.Status)) in in2000_intr()
1189 cmd->SCp.Message = msg; in in2000_intr()
1218 cmd->device->disconnect = 1; in in2000_intr()
1228 if (hostdata->sync_stat[cmd->device->id] == SS_WAITING) in in2000_intr()
1229 hostdata->sync_stat[cmd->device->id] = SS_SET; in in2000_intr()
1249 if (hostdata->sync_stat[cmd->device->id] != SS_WAITING) { in in2000_intr()
1267 hostdata->sync_xfer[cmd->device->id] = calc_sync_xfer(hostdata->default_sx_per / 4, 0); in in2000_intr()
1269 hostdata->sync_xfer[cmd->device->id] = id; in in2000_intr()
1272 printk("sync_xfer=%02x", hostdata->sync_xfer[cmd->device->id]); in in2000_intr()
1274 hostdata->sync_stat[cmd->device->id] = SS_SET; in in2000_intr()
1332 cmd->SCp.Message = COMMAND_COMPLETE; in in2000_intr()
1334 DB(DB_INTR, printk(":%d.%d", cmd->SCp.Status, lun)) in in2000_intr()
1336 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1338 if (cmd->SCp.Status == ILLEGAL_STATUS_BYTE) in in2000_intr()
1339 cmd->SCp.Status = lun; in in2000_intr()
1340 if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD) in in2000_intr()
1341 cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); in in2000_intr()
1343 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); in in2000_intr()
1344 cmd->scsi_done(cmd); in in2000_intr()
1411 if (cmd == NULL) { in in2000_intr()
1421 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1423 if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD) in in2000_intr()
1424 cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); in in2000_intr()
1426 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); in in2000_intr()
1427 cmd->scsi_done(cmd); in in2000_intr()
1445 if (cmd == NULL) { in in2000_intr()
1452 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1454 DB(DB_INTR, printk(":%d", cmd->SCp.Status)) in in2000_intr()
1455 if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != GOOD) in in2000_intr()
1456 cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); in in2000_intr()
1458 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); in in2000_intr()
1459 cmd->scsi_done(cmd); in in2000_intr()
1463 cmd->host_scribble = (uchar *) hostdata->disconnected_Q; in in2000_intr()
1464 hostdata->disconnected_Q = cmd; in in2000_intr()
1469 hostdata->disc_done_cnt[cmd->device->id]++; in in2000_intr()
1495 cmd = (Scsi_Cmnd *) hostdata->selecting; in in2000_intr()
1497 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1498 cmd->host_scribble = (uchar *) hostdata->input_Q; in in2000_intr()
1499 hostdata->input_Q = cmd; in in2000_intr()
1505 if (cmd) { in in2000_intr()
1507 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in in2000_intr()
1508 cmd->host_scribble = (uchar *) hostdata->input_Q; in in2000_intr()
1509 hostdata->input_Q = cmd; in in2000_intr()
1536 cmd = (Scsi_Cmnd *) hostdata->disconnected_Q; in in2000_intr()
1538 while (cmd) { in in2000_intr()
1539 if (id == cmd->device->id && lun == cmd->device->lun) in in2000_intr()
1541 patch = cmd; in in2000_intr()
1542 cmd = (Scsi_Cmnd *) cmd->host_scribble; in in2000_intr()
1547 if (!cmd) { in in2000_intr()
1555 patch->host_scribble = cmd->host_scribble; in in2000_intr()
1557 hostdata->disconnected_Q = (Scsi_Cmnd *) cmd->host_scribble; in in2000_intr()
1558 hostdata->connected = cmd; in in2000_intr()
1565 if (is_dir_out(cmd)) in in2000_intr()
1566 write_3393(hostdata, WD_DESTINATION_ID, cmd->device->id); in in2000_intr()
1568 write_3393(hostdata, WD_DESTINATION_ID, cmd->device->id | DSTID_DPD); in in2000_intr()
1642 static int in2000_bus_reset(Scsi_Cmnd * cmd) in in2000_bus_reset() argument
1649 instance = cmd->device->host; in in2000_bus_reset()
1672 cmd->result = DID_RESET << 16; in in2000_bus_reset()
1678 static int __in2000_abort(Scsi_Cmnd * cmd) in __in2000_abort() argument
1686 instance = cmd->device->host; in __in2000_abort()
1690 …- ", READ_AUX_STAT(), read_3393_count(hostdata), cmd->SCp.this_residual, cmd->SCp.buffers_residual… in __in2000_abort()
1700 if (tmp == cmd) { in __in2000_abort()
1702 prev->host_scribble = cmd->host_scribble; in __in2000_abort()
1703 cmd->host_scribble = NULL; in __in2000_abort()
1704 cmd->result = DID_ABORT << 16; in __in2000_abort()
1706 cmd->scsi_done(cmd); in __in2000_abort()
1724 if (hostdata->connected == cmd) { in __in2000_abort()
1760 hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); in __in2000_abort()
1763 cmd->result = DID_ABORT << 16; in __in2000_abort()
1764 cmd->scsi_done(cmd); in __in2000_abort()
1778 if (cmd == tmp) { in __in2000_abort()
1799 static int in2000_abort(Scsi_Cmnd * cmd) in in2000_abort() argument
1803 spin_lock_irq(cmd->device->host->host_lock); in in2000_abort()
1804 rc = __in2000_abort(cmd); in in2000_abort()
1805 spin_unlock_irq(cmd->device->host->host_lock); in in2000_abort()
2218 Scsi_Cmnd *cmd; in in2000_show_info() local
2253 cmd = (Scsi_Cmnd *) hd->connected; in in2000_show_info()
2254 seq_printf(m, " %d:%llu(%02x)", cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in in2000_show_info()
2259 cmd = (Scsi_Cmnd *) hd->input_Q; in in2000_show_info()
2260 while (cmd) { in in2000_show_info()
2261 seq_printf(m, " %d:%llu(%02x)", cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in in2000_show_info()
2262 cmd = (Scsi_Cmnd *) cmd->host_scribble; in in2000_show_info()
2267 cmd = (Scsi_Cmnd *) hd->disconnected_Q; in in2000_show_info()
2268 while (cmd) { in in2000_show_info()
2269 seq_printf(m, " %d:%llu(%02x)", cmd->device->id, cmd->device->lun, cmd->cmnd[0]); in in2000_show_info()
2270 cmd = (Scsi_Cmnd *) cmd->host_scribble; in in2000_show_info()