Lines Matching refs:cmd

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