Lines Matching refs:scsi

3  *  linux/drivers/acorn/scsi/fas216.c
50 #include <scsi/scsi.h>
51 #include <scsi/scsi_cmnd.h>
52 #include <scsi/scsi_dbg.h>
53 #include <scsi/scsi_device.h>
54 #include <scsi/scsi_eh.h>
55 #include <scsi/scsi_host.h>
56 #include <scsi/scsi_tcq.h>
146 unsigned int off = reg << info->scsi.io_shift;
147 return readb(info->scsi.io_base + off);
152 unsigned int off = reg << info->scsi.io_shift;
153 writeb(val, info->scsi.io_base + off);
197 printk(" scsi={ io_shift=%X irq=%X cfg={ %X %X %X %X }\n",
198 info->scsi.io_shift, info->scsi.irq,
199 info->scsi.cfg[0], info->scsi.cfg[1], info->scsi.cfg[2],
200 info->scsi.cfg[3]);
202 info->scsi.type, info->scsi.phase);
203 print_SCp(&info->scsi.SCp, " SCp={ ", " }\n");
205 info->scsi.async_stp,
206 info->scsi.disconnectable, info->scsi.aborting);
242 panic("scsi memory space corrupted in %s", func);
278 if (info->scsi.phase < ARRAY_SIZE(phases) &&
279 phases[info->scsi.phase])
280 return phases[info->scsi.phase];
298 printk("scsi%d.%c: %s", info->host->host_no, target, buf);
421 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) {
478 cntl3 = info->scsi.cfg[2];
563 msgqueue_flush(&info->scsi.msgs);
564 msgqueue_addmsg(&info->scsi.msgs, 5,
567 info->scsi.phase = PHASE_MSGOUT_EXPECT;
606 msgqueue_flush(&info->scsi.msgs);
607 msgqueue_addmsg(&info->scsi.msgs, 1, MESSAGE_REJECT);
608 info->scsi.phase = PHASE_MSGOUT_EXPECT;
614 dev->stp = info->scsi.async_stp;
632 struct scsi_pointer *SCp = &info->scsi.SCp;
649 printk(KERN_WARNING "scsi%d.%c: out of buffers\n",
672 struct scsi_pointer *SCp = &info->scsi.SCp;
720 total = info->scsi.SCp.phase;
722 total = info->scsi.SCp.this_residual;
738 if (info->scsi.phase == PHASE_DATAOUT)
757 info->scsi.SCp.ptr, info->scsi.SCp.this_residual,
758 info->scsi.SCp.phase);
760 if (!info->scsi.SCp.ptr) {
763 print_SCp(&info->scsi.SCp, "SCp: ", "\n");
778 if (info->scsi.phase == PHASE_DATAOUT)
784 dmatype = info->dma.setup(info->host, &info->scsi.SCp,
789 fas216_set_stc(info, info->scsi.SCp.phase);
791 fas216_set_stc(info, info->scsi.SCp.this_residual);
797 fas216_writeb(info, REG_STP, info->scsi.async_stp);
805 info->dma.pseudo(info->host, &info->scsi.SCp,
838 info->dma.stop(info->host, &info->scsi.SCp);
842 if (info->scsi.phase == PHASE_DATAIN) {
851 while (fifo && info->scsi.SCp.ptr) {
852 *info->scsi.SCp.ptr = fas216_readb(info, REG_FF);
871 info->dma.stop(info->host, &info->scsi.SCp);
892 info->scsi.phase);
894 msgqueue_flush(&info->scsi.msgs);
896 switch (info->scsi.phase) {
903 info->scsi.disconnectable = 1;
904 info->scsi.phase = PHASE_IDLE;
907 if (info->scsi.phase == PHASE_IDLE)
917 if (fas216_get_last_msg(info, info->scsi.msgin_fifo) == ABORT) {
918 info->scsi.aborting = 0;
925 printk(KERN_ERR "scsi%d.%c: unexpected disconnect in phase %s\n",
949 WARN_ON(info->scsi.phase == PHASE_SELECTION ||
950 info->scsi.phase == PHASE_SELSTEPS);
955 info->scsi.phase, cfis);
960 printk(KERN_ERR "scsi%d.H: incorrect number of bytes after reselect\n",
987 msgqueue_flush(&info->scsi.msgs);
992 if (info->scsi.disconnectable && info->SCpnt) {
993 info->scsi.disconnectable = 0;
1014 info->scsi.SCp = *arm_scsi_pointer(info->SCpnt);
1017 info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
1018 info->scsi.phase = PHASE_MSGIN;
1030 msgqueue_addmsg(&info->scsi.msgs, 2, ABORT_TAG, tag);
1033 msgqueue_addmsg(&info->scsi.msgs, 1, ABORT);
1034 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1035 info->scsi.aborting = 1;
1042 printk(KERN_ERR "scsi%d.H: error during reselection: bytes",
1049 msgqueue_flush(&info->scsi.msgs);
1050 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR);
1051 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1065 printk(KERN_ERR "scsi%d.%c: command complete with no "
1083 *scsi_pointer = info->scsi.SCp;
1087 info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
1097 info->scsi.SCp = *arm_scsi_pointer(info->SCpnt);
1100 info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
1107 info->scsi.phase = PHASE_MSGIN_DISCONNECT;
1114 switch (fas216_get_last_msg(info, info->scsi.msgin_fifo)) {
1121 fas216_get_last_msg(info, info->scsi.msgin_fifo));
1149 printk("scsi%d.%c: message was", info->host->host_no, fas216_target(info));
1162 msgqueue_flush(&info->scsi.msgs);
1163 msgqueue_addmsg(&info->scsi.msgs, 1, MESSAGE_REJECT);
1164 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1233 unsigned char *message = info->scsi.message;
1265 printk("scsi%d.%c: message in: ",
1279 msgqueue_flush(&info->scsi.msgs);
1280 msgqueue_addmsg(&info->scsi.msgs, 1, MSG_PARITY_ERROR);
1281 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1302 for (i = info->scsi.SCp.sent_command; i < info->SCpnt->cmd_len; i++)
1307 info->scsi.phase = PHASE_COMMAND;
1319 unsigned int tot_msglen = msgqueue_msglength(&info->scsi.msgs);
1329 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) {
1343 info->scsi.phase = PHASE_MSGOUT;
1360 stat, is, info->scsi.phase);
1362 switch (info->scsi.phase) {
1395 switch (STATE(stat & STAT_BUSMASK, info->scsi.phase)) {
1400 info->scsi.phase = PHASE_DATAIN;
1415 info->scsi.phase = PHASE_DATAOUT;
1429 info->scsi.phase = PHASE_STATUS;
1440 info->scsi.msgin_fifo = fas216_readb(info, REG_CFIS) & CFIS_CF;
1443 info->scsi.phase = PHASE_MSGIN;
1447 info->scsi.msgin_fifo = fas216_readb(info, REG_CFIS) & CFIS_CF;
1454 info->scsi.phase = PHASE_COMMAND;
1483 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
1486 if (msgqueue_msglength(&info->scsi.msgs) > 1)
1508 printk(KERN_ERR "scsi%d.%c: "
1514 msgqueue_flush(&info->scsi.msgs);
1515 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR);
1516 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1520 if (info->scsi.phase == PHASE_MSGIN_DISCONNECT) {
1521 printk(KERN_ERR "scsi%d.%c: disconnect message received, but bus service %s?\n",
1524 msgqueue_flush(&info->scsi.msgs);
1526 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR);
1527 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1528 info->scsi.aborting = 1;
1532 printk(KERN_ERR "scsi%d.%c: bus phase %s after %s?\n",
1563 stat, is, info->scsi.phase);
1565 switch (info->scsi.phase) {
1573 info->scsi.SCp.Status = fas216_readb(info, REG_FF);
1574 info->scsi.SCp.Message = fas216_readb(info, REG_FF);
1575 info->scsi.phase = PHASE_DONE;
1586 info->scsi.msgin_fifo = fifo_len;
1604 msgqueue_flush(&info->scsi.msgs);
1613 info->scsi.phase = PHASE_IDLE;
1615 memset(&info->scsi.SCp, 0, sizeof(info->scsi.SCp));
1621 info->device[i].stp = info->scsi.async_stp;
1647 add_debug_list(stat, is, inst, info->scsi.phase);
1693 tot_msglen = msgqueue_msglength(&info->scsi.msgs);
1700 printk("scsi%d.%c: message out: ",
1702 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) {
1719 info->scsi.phase = PHASE_SELSTEPS;
1722 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) {
1742 struct message *msg = msgqueue_getmsg(&info->scsi.msgs, 0);
1774 info->scsi.phase = PHASE_SELECTION;
1775 info->scsi.SCp = *arm_scsi_pointer(SCpnt);
1780 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0] | CNTL1_PTE);
1782 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
1793 msgqueue_flush(&info->scsi.msgs);
1794 msgqueue_addmsg(&info->scsi.msgs, 1, IDENTIFY(disconnect_ok, SCpnt->device->lun));
1800 msgqueue_addmsg(&info->scsi.msgs, 2, SIMPLE_QUEUE_TAG,
1810 msgqueue_addmsg(&info->scsi.msgs, 5,
1853 info->scsi.phase = PHASE_SELECTION;
1854 info->scsi.SCp = *arm_scsi_pointer(SCpnt);
1860 msgqueue_flush(&info->scsi.msgs);
1861 msgqueue_addmsg(&info->scsi.msgs, 1, BUS_DEVICE_RESET);
1877 msg = msgqueue_getmsg(&info->scsi.msgs, 0);
1947 if (info->scsi.disconnectable && info->SCpnt) {
1952 info->scsi.disconnectable = 0;
1972 info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
2017 //printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->device->id);
2046 scsi_msg_to_host_byte(SCpnt, info->scsi.SCp.Message);
2047 set_status_byte(SCpnt, info->scsi.SCp.Status);
2080 if (info->scsi.SCp.ptr) {
2090 SCpnt->result, info->scsi.SCp.ptr,
2091 info->scsi.SCp.this_residual);
2104 panic("scsi%d.H: null scsi_done function in fas216_done",
2126 printk(KERN_WARNING "scsi%d.%c: losing request command\n",
2151 info->scsi.phase = PHASE_IDLE;
2153 if (info->scsi.aborting) {
2156 info->scsi.aborting = 0;
2163 if (info->scsi.SCp.ptr && info->scsi.SCp.this_residual == 0) {
2166 info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
2167 info->scsi.SCp.ptr = NULL;
2183 if (info->scsi.irq) {
2185 if (info->scsi.phase == PHASE_IDLE)
2192 panic("scsi%d.H: null command in fas216_done",
2236 if (result == 0 && info->scsi.phase == PHASE_IDLE)
2273 * Returns: scsi result code.
2286 BUG_ON(info->scsi.irq);
2384 switch (info->scsi.phase) {
2390 if (info->scsi.disconnectable) {
2391 info->scsi.disconnectable = 0;
2496 if (info->SCpnt && !info->scsi.disconnectable &&
2524 if (info->scsi.phase == PHASE_IDLE)
2577 fas216_writeb(info, REG_CNTL3, info->scsi.cfg[2]);
2610 info->scsi.phase = PHASE_IDLE;
2643 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
2644 fas216_writeb(info, REG_CNTL2, info->scsi.cfg[1]);
2645 fas216_writeb(info, REG_CNTL3, info->scsi.cfg[2]);
2648 fas216_writeb(info, REG_STP, info->scsi.async_stp);
2649 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
2814 info->scsi.disconnectable = 0;
2815 info->scsi.aborting = 0;
2850 info->scsi.cfg[0] = host->this_id | CNTL1_PERE;
2851 info->scsi.cfg[1] = CNTL2_ENF | CNTL2_S2FE;
2852 info->scsi.cfg[2] = info->ifcfg.cntl3 |
2854 info->scsi.async_stp = fas216_syncperiod(info, info->ifcfg.asyncperiod);
2865 msgqueue_initialise(&info->scsi.msgs);
2899 info->scsi.type = chip_types[type];
2913 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0] | CNTL1_DISR);
2917 * scsi standard says wait 250ms
2923 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
2970 info->scsi.type, info->scsi.io_base,
2971 info->scsi.irq, info->scsi.dma);