Lines Matching refs:SCpnt

192 	printk("  { magic_start=%lX host=%p SCpnt=%p origSCpnt=%p\n",
193 info->magic_start, info->host, info->SCpnt,
284 if (info->SCpnt)
285 return '0' + info->SCpnt->device->id;
300 struct scsi_cmnd *SCpnt, char *fmt, ...)
308 fas216_do_log(info, '0' + SCpnt->device->id, fmt, args);
312 __scsi_print_command(SCpnt->cmnd);
517 struct fas216_device *dev = &info->device[info->SCpnt->device->id];
600 fas216_set_sync(info, info->SCpnt->device->id);
613 fas216_set_sync(info, info->SCpnt->device->id);
648 info->host->host_no, '0' + info->SCpnt->device->id);
762 print_SCp(&info->SCpnt->SCp, "Cmnd SCp: ", "\n");
771 if (info->device[info->SCpnt->device->id].sof)
804 direction, info->SCpnt->transfersize);
989 if (info->scsi.disconnectable && info->SCpnt) {
991 if (info->SCpnt->device->id == target &&
992 info->SCpnt->device->lun == lun &&
993 info->SCpnt->tag == tag) {
996 queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt);
998 info->SCpnt = NULL;
1001 if (!info->SCpnt) {
1002 info->SCpnt = queue_remove_tgtluntag(&info->queues.disconnected,
1007 if (info->SCpnt) {
1011 info->scsi.SCp = info->SCpnt->SCp;
1078 info->SCpnt->SCp = info->scsi.SCp;
1079 info->SCpnt->SCp.sent_command = 0;
1092 info->scsi.SCp = info->SCpnt->SCp;
1297 for (i = info->scsi.SCp.sent_command; i < info->SCpnt->cmd_len; i++)
1298 fas216_writeb(info, REG_FF, info->SCpnt->cmnd[i]);
1466 if (info->device[info->SCpnt->device->id].parity_check) {
1471 info->device[info->SCpnt->device->id].parity_check = 0;
1472 info->device[info->SCpnt->device->id].parity_enabled = 1;
1603 info->SCpnt = NULL; /* bug! */
1664 static void __fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
1676 fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id));
1680 fas216_set_sync(info, SCpnt->device->id);
1690 info->host->host_no, '0' + SCpnt->device->id);
1718 for (i = 0; i < SCpnt->cmd_len; i++)
1719 fas216_writeb(info, REG_FF, SCpnt->cmnd[i]);
1756 static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt)
1764 info->scsi.SCp = SCpnt->SCp;
1765 info->SCpnt = SCpnt;
1768 if (parity_test(info, SCpnt->device->id))
1776 disconnect_ok = SCpnt->cmnd[0] != REQUEST_SENSE &&
1777 info->device[SCpnt->device->id].disconnect_ok;
1783 msgqueue_addmsg(&info->scsi.msgs, 1, IDENTIFY(disconnect_ok, SCpnt->device->lun));
1788 if (SCpnt->tag)
1789 msgqueue_addmsg(&info->scsi.msgs, 2, SIMPLE_QUEUE_TAG, SCpnt->tag);
1793 if ((info->device[SCpnt->device->id].sync_state == neg_wait ||
1794 info->device[SCpnt->device->id].sync_state == neg_complete) &&
1795 (SCpnt->cmnd[0] == REQUEST_SENSE ||
1796 SCpnt->cmnd[0] == INQUIRY)) {
1797 info->device[SCpnt->device->id].sync_state = neg_inprogress;
1807 __fas216_start_command(info, SCpnt);
1810 static void fas216_allocate_tag(FAS216_Info *info, struct scsi_cmnd *SCpnt)
1816 if (SCpnt->device->simple_tags && SCpnt->cmnd[0] != REQUEST_SENSE &&
1817 SCpnt->cmnd[0] != INQUIRY) {
1818 SCpnt->device->current_tag += 1;
1819 if (SCpnt->device->current_tag == 0)
1820 SCpnt->device->current_tag = 1;
1821 SCpnt->tag = SCpnt->device->current_tag;
1824 set_bit(SCpnt->device->id * 8 +
1825 (u8)(SCpnt->device->lun & 0x7), info->busyluns);
1828 switch (SCpnt->cmnd[0]) {
1846 struct scsi_cmnd *SCpnt)
1854 info->scsi.SCp = SCpnt->SCp;
1855 info->SCpnt = SCpnt;
1871 fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id));
1875 fas216_set_sync(info, SCpnt->device->id);
1894 struct scsi_cmnd *SCpnt = NULL;
1907 SCpnt = info->rstSCpnt;
1914 SCpnt = info->reqSCpnt;
1920 SCpnt = info->origSCpnt;
1926 if (!SCpnt) {
1927 SCpnt = queue_remove_exclude(&info->queues.issue,
1934 if (!SCpnt) {
1947 if (info->scsi.disconnectable && info->SCpnt) {
1950 info->SCpnt->device->id);
1951 queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt);
1953 info->SCpnt = NULL;
1956 fas216_log_command(info, LOG_CONNECT | LOG_MESSAGES, SCpnt,
1961 fas216_allocate_tag(info, SCpnt);
1963 fas216_start_command(info, SCpnt);
1966 fas216_do_bus_device_reset(info, SCpnt);
1982 static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
1995 * @SCpnt: command that completed
2000 static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt,
2003 fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
2005 result, SCpnt->SCp.Message, SCpnt->SCp.Status);
2007 if (result != DID_OK || SCpnt->SCp.Status != GOOD)
2013 memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
2014 //printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->device->id);
2015 //{ int i; for (i = 0; i < 32; i++) printk("%02x ", SCpnt->sense_buffer[i]); printk("\n"); }
2017 * Note that we don't set SCpnt->result, since that should
2022 scsi_eh_restore_cmnd(SCpnt, &info->ses);
2023 SCpnt->scsi_done(SCpnt);
2029 * @SCpnt: command that completed
2035 fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
2039 SCpnt->result = result << 16 | info->scsi.SCp.Message << 8 |
2042 fas216_log_command(info, LOG_CONNECT, SCpnt,
2043 "command complete, result=0x%08x", SCpnt->result);
2048 if (host_byte(SCpnt->result) != DID_OK ||
2049 msg_byte(SCpnt->result) != COMMAND_COMPLETE)
2056 if (status_byte(SCpnt->result) == CHECK_CONDITION ||
2057 status_byte(SCpnt->result) == COMMAND_TERMINATED)
2064 if (status_byte(SCpnt->result) != GOOD)
2075 switch (SCpnt->cmnd[0]) {
2084 info->host->host_no, '0' + SCpnt->device->id,
2085 SCpnt->result, info->scsi.SCp.ptr,
2087 __scsi_print_command(SCpnt->cmnd);
2088 SCpnt->result &= ~(255 << 16);
2089 SCpnt->result |= DID_BAD_TARGET << 16;
2095 if (SCpnt->scsi_done) {
2096 SCpnt->scsi_done(SCpnt);
2105 if (SCpnt->cmnd[0] == REQUEST_SENSE)
2108 scsi_eh_prep_cmnd(SCpnt, &info->ses, NULL, 0, ~0);
2109 fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
2111 init_SCp(SCpnt);
2112 SCpnt->SCp.Message = 0;
2113 SCpnt->SCp.Status = 0;
2114 SCpnt->tag = 0;
2115 SCpnt->host_scribble = (void *)fas216_rq_sns_done;
2124 info->host->host_no, '0' + SCpnt->device->id);
2125 info->reqSCpnt = SCpnt;
2138 struct scsi_cmnd *SCpnt;
2143 if (!info->SCpnt)
2146 SCpnt = info->SCpnt;
2147 info->SCpnt = NULL;
2163 info->host->host_no, '0' + SCpnt->device->id,
2166 __scsi_print_command(SCpnt->cmnd);
2174 info->device[SCpnt->device->id].parity_check = 0;
2175 clear_bit(SCpnt->device->id * 8 +
2176 (u8)(SCpnt->device->lun & 0x7), info->busyluns);
2178 fn = (void (*)(FAS216_Info *, struct scsi_cmnd *, unsigned int))SCpnt->host_scribble;
2179 fn(info, SCpnt, result);
2196 * @SCpnt: Command to queue
2203 static int fas216_queue_command_lck(struct scsi_cmnd *SCpnt,
2206 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2211 fas216_log_command(info, LOG_CONNECT, SCpnt,
2212 "received command (%p)", SCpnt);
2214 SCpnt->scsi_done = done;
2215 SCpnt->host_scribble = (void *)fas216_std_done;
2216 SCpnt->result = 0;
2218 init_SCp(SCpnt);
2221 SCpnt->tag = 0;
2229 result = !queue_add_cmd_ordered(&info->queues.issue, SCpnt);
2249 * @SCpnt: Command to wake
2253 static void fas216_internal_done(struct scsi_cmnd *SCpnt)
2255 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2264 * @SCpnt: Command to queue
2270 static int fas216_noqueue_command_lck(struct scsi_cmnd *SCpnt,
2273 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2284 fas216_queue_command_lck(SCpnt, fas216_internal_done);
2312 done(SCpnt);
2347 * @SCpnt: command to abort
2353 struct scsi_cmnd *SCpnt)
2357 if (queue_remove_cmd(&info->queues.issue, SCpnt)) {
2367 } else if (queue_remove_cmd(&info->queues.disconnected, SCpnt)) {
2376 } else if (info->SCpnt == SCpnt) {
2387 info->SCpnt = NULL;
2395 } else if (info->origSCpnt == SCpnt) {
2403 clear_bit(SCpnt->device->id * 8 +
2404 (u8)(SCpnt->device->lun & 0x7), info->busyluns);
2415 * @SCpnt: command to abort
2421 int fas216_eh_abort(struct scsi_cmnd *SCpnt)
2423 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2431 __scsi_print_command(SCpnt->cmnd);
2436 printk(KERN_WARNING "scsi%d: abort %p ", info->host->host_no, SCpnt);
2438 switch (fas216_find_command(info, SCpnt)) {
2471 * @SCpnt: command specifing device to reset
2478 int fas216_eh_device_reset(struct scsi_cmnd *SCpnt)
2480 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2482 int i, res = FAILED, target = SCpnt->device->id;
2495 if (info->SCpnt && !info->scsi.disconnectable &&
2496 info->SCpnt->device->id == SCpnt->device->id)
2518 SCpnt->host_scribble = (void *)fas216_devicereset_done;
2521 info->rstSCpnt = SCpnt;
2542 SCpnt->host_scribble = NULL;
2553 * @SCpnt: command specifing bus to reset
2559 int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt)
2561 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2603 info->SCpnt = NULL;
2653 * @SCpnt: command specifing host to reset
2659 int fas216_eh_host_reset(struct scsi_cmnd *SCpnt)
2661 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
2668 info->host->host_no, '0' + SCpnt->device->id, __func__);
2830 info->SCpnt = NULL;