]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - drivers/scsi/NCR5380.c
ncr5380: Remove references to linked commands
[mirror_ubuntu-artful-kernel.git] / drivers / scsi / NCR5380.c
CommitLineData
1da177e4
LT
1/*
2 * NCR 5380 generic driver routines. These should make it *trivial*
3 * to implement 5380 SCSI drivers under Linux with a non-trantor
4 * architecture.
5 *
6 * Note that these routines also work with NR53c400 family chips.
7 *
8 * Copyright 1993, Drew Eckhardt
9 * Visionary Computing
10 * (Unix and Linux consulting and custom programming)
11 * drew@colorado.edu
12 * +1 (303) 666-5836
13 *
1da177e4
LT
14 * For more information, please consult
15 *
16 * NCR 5380 Family
17 * SCSI Protocol Controller
18 * Databook
19 *
20 * NCR Microelectronics
21 * 1635 Aeroplaza Drive
22 * Colorado Springs, CO 80916
23 * 1+ (719) 578-3400
24 * 1+ (800) 334-5454
25 */
26
27/*
1da177e4 28 * Revision 1.10 1998/9/2 Alan Cox
fa195afe 29 * (alan@lxorguk.ukuu.org.uk)
1da177e4
LT
30 * Fixed up the timer lockups reported so far. Things still suck. Looking
31 * forward to 2.3 and per device request queues. Then it'll be possible to
32 * SMP thread this beast and improve life no end.
33
34 * Revision 1.9 1997/7/27 Ronald van Cuijlenborg
35 * (ronald.van.cuijlenborg@tip.nl or nutty@dds.nl)
36 * (hopefully) fixed and enhanced USLEEP
37 * added support for DTC3181E card (for Mustek scanner)
38 *
39
40 * Revision 1.8 Ingmar Baumgart
41 * (ingmar@gonzo.schwaben.de)
42 * added support for NCR53C400a card
43 *
44
45 * Revision 1.7 1996/3/2 Ray Van Tassle (rayvt@comm.mot.com)
46 * added proc_info
47 * added support needed for DTC 3180/3280
48 * fixed a couple of bugs
49 *
50
51 * Revision 1.5 1994/01/19 09:14:57 drew
52 * Fixed udelay() hack that was being used on DATAOUT phases
53 * instead of a proper wait for the final handshake.
54 *
55 * Revision 1.4 1994/01/19 06:44:25 drew
56 * *** empty log message ***
57 *
58 * Revision 1.3 1994/01/19 05:24:40 drew
59 * Added support for TCR LAST_BYTE_SENT bit.
60 *
61 * Revision 1.2 1994/01/15 06:14:11 drew
62 * REAL DMA support, bug fixes.
63 *
64 * Revision 1.1 1994/01/15 06:00:54 drew
65 * Initial revision
66 *
67 */
68
69/*
70 * Further development / testing that should be done :
71 * 1. Cleanup the NCR5380_transfer_dma function and DMA operation complete
72 * code so that everything does the same thing that's done at the
73 * end of a pseudo-DMA read operation.
74 *
75 * 2. Fix REAL_DMA (interrupt driven, polled works fine) -
76 * basically, transfer size needs to be reduced by one
77 * and the last byte read as is done with PSEUDO_DMA.
78 *
79 * 4. Test SCSI-II tagged queueing (I have no devices which support
80 * tagged queueing)
1da177e4 81 */
db9dff36 82#include <scsi/scsi_dbg.h>
1abfd370 83#include <scsi/scsi_transport_spi.h>
1da177e4
LT
84
85#if (NDEBUG & NDEBUG_LISTS)
86#define LIST(x,y) {printk("LINE:%d Adding %p to %p\n", __LINE__, (void*)(x), (void*)(y)); if ((x)==(y)) udelay(5); }
87#define REMOVE(w,x,y,z) {printk("LINE:%d Removing: %p->%p %p->%p \n", __LINE__, (void*)(w), (void*)(x), (void*)(y), (void*)(z)); if ((x)==(y)) udelay(5); }
88#else
89#define LIST(x,y)
90#define REMOVE(w,x,y,z)
91#endif
92
93#ifndef notyet
1da177e4
LT
94#undef REAL_DMA
95#endif
96
97#ifdef REAL_DMA_POLL
98#undef READ_OVERRUNS
99#define READ_OVERRUNS
100#endif
101
102#ifdef BOARD_REQUIRES_NO_DELAY
103#define io_recovery_delay(x)
104#else
105#define io_recovery_delay(x) udelay(x)
106#endif
107
108/*
109 * Design
110 *
111 * This is a generic 5380 driver. To use it on a different platform,
112 * one simply writes appropriate system specific macros (ie, data
113 * transfer - some PC's will use the I/O bus, 68K's must use
114 * memory mapped) and drops this file in their 'C' wrapper.
115 *
116 * (Note from hch: unfortunately it was not enough for the different
117 * m68k folks and instead of improving this driver they copied it
118 * and hacked it up for their needs. As a consequence they lost
119 * most updates to this driver. Maybe someone will fix all these
120 * drivers to use a common core one day..)
121 *
122 * As far as command queueing, two queues are maintained for
123 * each 5380 in the system - commands that haven't been issued yet,
124 * and commands that are currently executing. This means that an
125 * unlimited number of commands may be queued, letting
126 * more commands propagate from the higher driver levels giving higher
127 * throughput. Note that both I_T_L and I_T_L_Q nexuses are supported,
128 * allowing multiple commands to propagate all the way to a SCSI-II device
129 * while a command is already executing.
130 *
131 *
132 * Issues specific to the NCR5380 :
133 *
134 * When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
135 * piece of hardware that requires you to sit in a loop polling for
136 * the REQ signal as long as you are connected. Some devices are
137 * brain dead (ie, many TEXEL CD ROM drives) and won't disconnect
686f3990 138 * while doing long seek operations. [...] These
1da177e4
LT
139 * broken devices are the exception rather than the rule and I'd rather
140 * spend my time optimizing for the normal case.
141 *
142 * Architecture :
143 *
144 * At the heart of the design is a coroutine, NCR5380_main,
145 * which is started from a workqueue for each NCR5380 host in the
146 * system. It attempts to establish I_T_L or I_T_L_Q nexuses by
147 * removing the commands from the issue queue and calling
148 * NCR5380_select() if a nexus is not established.
149 *
150 * Once a nexus is established, the NCR5380_information_transfer()
151 * phase goes through the various phases as instructed by the target.
152 * if the target goes into MSG IN and sends a DISCONNECT message,
153 * the command structure is placed into the per instance disconnected
154 * queue, and NCR5380_main tries to find more work. If the target is
155 * idle for too long, the system will try to sleep.
156 *
157 * If a command has disconnected, eventually an interrupt will trigger,
158 * calling NCR5380_intr() which will in turn call NCR5380_reselect
159 * to reestablish a nexus. This will run main if necessary.
160 *
161 * On command termination, the done function will be called as
162 * appropriate.
163 *
164 * SCSI pointers are maintained in the SCp field of SCSI command
165 * structures, being initialized after the command is connected
166 * in NCR5380_select, and set as appropriate in NCR5380_information_transfer.
167 * Note that in violation of the standard, an implicit SAVE POINTERS operation
168 * is done, since some BROKEN disks fail to issue an explicit SAVE POINTERS.
169 */
170
171/*
172 * Using this file :
173 * This file a skeleton Linux SCSI driver for the NCR 5380 series
174 * of chips. To use it, you write an architecture specific functions
175 * and macros and include this file in your driver.
176 *
177 * These macros control options :
178 * AUTOPROBE_IRQ - if defined, the NCR5380_probe_irq() function will be
179 * defined.
180 *
181 * AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
182 * for commands that return with a CHECK CONDITION status.
183 *
184 * DIFFERENTIAL - if defined, NCR53c81 chips will use external differential
185 * transceivers.
186 *
187 * DONT_USE_INTR - if defined, never use interrupts, even if we probe or
188 * override-configure an IRQ.
189 *
1da177e4
LT
190 * PSEUDO_DMA - if defined, PSEUDO DMA is used during the data transfer phases.
191 *
192 * REAL_DMA - if defined, REAL DMA is used during the data transfer phases.
193 *
194 * REAL_DMA_POLL - if defined, REAL DMA is used but the driver doesn't
195 * rely on phase mismatch and EOP interrupts to determine end
196 * of phase.
197 *
198 * UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You
199 * only really want to use this if you're having a problem with
200 * dropped characters during high speed communications, and even
201 * then, you're going to be better off twiddling with transfersize
202 * in the high level code.
203 *
204 * Defaults for these will be provided although the user may want to adjust
205 * these to allocate CPU resources to the SCSI driver or "real" code.
206 *
1da177e4 207 * These macros MUST be defined :
1da177e4
LT
208 *
209 * NCR5380_read(register) - read from the specified register
210 *
211 * NCR5380_write(register, value) - write to the specific register
212 *
213 * NCR5380_implementation_fields - additional fields needed for this
214 * specific implementation of the NCR5380
215 *
216 * Either real DMA *or* pseudo DMA may be implemented
217 * REAL functions :
218 * NCR5380_REAL_DMA should be defined if real DMA is to be used.
219 * Note that the DMA setup functions should return the number of bytes
220 * that they were able to program the controller for.
221 *
222 * Also note that generic i386/PC versions of these macros are
223 * available as NCR5380_i386_dma_write_setup,
224 * NCR5380_i386_dma_read_setup, and NCR5380_i386_dma_residual.
225 *
226 * NCR5380_dma_write_setup(instance, src, count) - initialize
227 * NCR5380_dma_read_setup(instance, dst, count) - initialize
228 * NCR5380_dma_residual(instance); - residual count
229 *
230 * PSEUDO functions :
231 * NCR5380_pwrite(instance, src, count)
232 * NCR5380_pread(instance, dst, count);
233 *
234 * The generic driver is initialized by calling NCR5380_init(instance),
235 * after setting the appropriate host specific fields and ID. If the
236 * driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
237 * possible) function may be used.
238 */
239
54d8fe44
FT
240static int do_abort(struct Scsi_Host *);
241static void do_reset(struct Scsi_Host *);
1da177e4
LT
242
243/*
244 * initialize_SCp - init the scsi pointer field
245 * @cmd: command block to set up
246 *
247 * Set up the internal fields in the SCSI command.
248 */
249
710ddd0d 250static inline void initialize_SCp(struct scsi_cmnd *cmd)
1da177e4
LT
251{
252 /*
253 * Initialize the Scsi Pointer field so that all of the commands in the
254 * various queues are valid.
255 */
256
9e0fe44d
BH
257 if (scsi_bufflen(cmd)) {
258 cmd->SCp.buffer = scsi_sglist(cmd);
259 cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1;
45711f1a 260 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
1da177e4
LT
261 cmd->SCp.this_residual = cmd->SCp.buffer->length;
262 } else {
263 cmd->SCp.buffer = NULL;
264 cmd->SCp.buffers_residual = 0;
9e0fe44d
BH
265 cmd->SCp.ptr = NULL;
266 cmd->SCp.this_residual = 0;
1da177e4
LT
267 }
268}
269
270/**
2f854b82
FT
271 * NCR5380_poll_politely - wait for chip register value
272 * @instance: controller to poll
273 * @reg: 5380 register to poll
274 * @bit: Bitmask to check
275 * @val: Value required to exit
276 * @wait: Time-out in jiffies
277 *
278 * Polls the chip in a reasonably efficient manner waiting for an
279 * event to occur. After a short quick poll we begin to yield the CPU
280 * (if possible). In irq contexts the time-out is arbitrarily limited.
281 * Callers may hold locks as long as they are held in irq mode.
282 *
283 * Returns 0 if event occurred otherwise -ETIMEDOUT.
1da177e4 284 */
2f854b82
FT
285
286static int NCR5380_poll_politely(struct Scsi_Host *instance,
287 int reg, int bit, int val, int wait)
1da177e4 288{
2f854b82
FT
289 struct NCR5380_hostdata *hostdata = shost_priv(instance);
290 unsigned long deadline = jiffies + wait;
291 unsigned long n;
292
293 /* Busy-wait for up to 10 ms */
294 n = min(10000U, jiffies_to_usecs(wait));
295 n *= hostdata->accesses_per_ms;
296 n /= 1000;
297 do {
298 if ((NCR5380_read(reg) & bit) == val)
1da177e4
LT
299 return 0;
300 cpu_relax();
2f854b82
FT
301 } while (n--);
302
303 if (irqs_disabled() || in_interrupt())
304 return -ETIMEDOUT;
305
306 /* Repeatedly sleep for 1 ms until deadline */
307 while (time_is_after_jiffies(deadline)) {
308 schedule_timeout_uninterruptible(1);
309 if ((NCR5380_read(reg) & bit) == val)
1da177e4 310 return 0;
1da177e4 311 }
2f854b82 312
1da177e4
LT
313 return -ETIMEDOUT;
314}
315
316static struct {
317 unsigned char value;
318 const char *name;
702809ce 319} phases[] __maybe_unused = {
1da177e4
LT
320 {PHASE_DATAOUT, "DATAOUT"},
321 {PHASE_DATAIN, "DATAIN"},
322 {PHASE_CMDOUT, "CMDOUT"},
323 {PHASE_STATIN, "STATIN"},
324 {PHASE_MSGOUT, "MSGOUT"},
325 {PHASE_MSGIN, "MSGIN"},
326 {PHASE_UNKNOWN, "UNKNOWN"}
327};
328
185a7a1c 329#if NDEBUG
1da177e4
LT
330static struct {
331 unsigned char mask;
332 const char *name;
333} signals[] = {
334 {SR_DBP, "PARITY"},
335 {SR_RST, "RST"},
336 {SR_BSY, "BSY"},
337 {SR_REQ, "REQ"},
338 {SR_MSG, "MSG"},
339 {SR_CD, "CD"},
340 {SR_IO, "IO"},
341 {SR_SEL, "SEL"},
342 {0, NULL}
343},
344basrs[] = {
345 {BASR_ATN, "ATN"},
346 {BASR_ACK, "ACK"},
347 {0, NULL}
348},
349icrs[] = {
350 {ICR_ASSERT_RST, "ASSERT RST"},
351 {ICR_ASSERT_ACK, "ASSERT ACK"},
352 {ICR_ASSERT_BSY, "ASSERT BSY"},
353 {ICR_ASSERT_SEL, "ASSERT SEL"},
354 {ICR_ASSERT_ATN, "ASSERT ATN"},
355 {ICR_ASSERT_DATA, "ASSERT DATA"},
356 {0, NULL}
357},
358mrs[] = {
359 {MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"},
360 {MR_TARGET, "MODE TARGET"},
361 {MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"},
362 {MR_ENABLE_PAR_INTR, "MODE PARITY INTR"},
363 {MR_MONITOR_BSY, "MODE MONITOR BSY"},
364 {MR_DMA_MODE, "MODE DMA"},
365 {MR_ARBITRATE, "MODE ARBITRATION"},
366 {0, NULL}
367};
368
369/**
370 * NCR5380_print - print scsi bus signals
371 * @instance: adapter state to dump
372 *
373 * Print the SCSI bus signals for debugging purposes
374 *
375 * Locks: caller holds hostdata lock (not essential)
376 */
377
378static void NCR5380_print(struct Scsi_Host *instance)
379{
1da177e4 380 unsigned char status, data, basr, mr, icr, i;
1da177e4
LT
381
382 data = NCR5380_read(CURRENT_SCSI_DATA_REG);
383 status = NCR5380_read(STATUS_REG);
384 mr = NCR5380_read(MODE_REG);
385 icr = NCR5380_read(INITIATOR_COMMAND_REG);
386 basr = NCR5380_read(BUS_AND_STATUS_REG);
387
388 printk("STATUS_REG: %02x ", status);
389 for (i = 0; signals[i].mask; ++i)
390 if (status & signals[i].mask)
391 printk(",%s", signals[i].name);
392 printk("\nBASR: %02x ", basr);
393 for (i = 0; basrs[i].mask; ++i)
394 if (basr & basrs[i].mask)
395 printk(",%s", basrs[i].name);
396 printk("\nICR: %02x ", icr);
397 for (i = 0; icrs[i].mask; ++i)
398 if (icr & icrs[i].mask)
399 printk(",%s", icrs[i].name);
400 printk("\nMODE: %02x ", mr);
401 for (i = 0; mrs[i].mask; ++i)
402 if (mr & mrs[i].mask)
403 printk(",%s", mrs[i].name);
404 printk("\n");
405}
406
407
408/*
409 * NCR5380_print_phase - show SCSI phase
410 * @instance: adapter to dump
411 *
412 * Print the current SCSI phase for debugging purposes
413 *
414 * Locks: none
415 */
416
417static void NCR5380_print_phase(struct Scsi_Host *instance)
418{
1da177e4
LT
419 unsigned char status;
420 int i;
1da177e4
LT
421
422 status = NCR5380_read(STATUS_REG);
423 if (!(status & SR_REQ))
424 printk("scsi%d : REQ not asserted, phase unknown.\n", instance->host_no);
425 else {
426 for (i = 0; (phases[i].value != PHASE_UNKNOWN) && (phases[i].value != (status & PHASE_MASK)); ++i);
427 printk("scsi%d : phase %s\n", instance->host_no, phases[i].name);
428 }
429}
430#endif
431
1da177e4 432
d5f7e65d 433static int probe_irq __initdata;
1da177e4
LT
434
435/**
436 * probe_intr - helper for IRQ autoprobe
437 * @irq: interrupt number
438 * @dev_id: unused
439 * @regs: unused
440 *
441 * Set a flag to indicate the IRQ in question was received. This is
442 * used by the IRQ probe code.
443 */
444
7d12e780 445static irqreturn_t __init probe_intr(int irq, void *dev_id)
1da177e4
LT
446{
447 probe_irq = irq;
448 return IRQ_HANDLED;
449}
450
451/**
452 * NCR5380_probe_irq - find the IRQ of an NCR5380
453 * @instance: NCR5380 controller
454 * @possible: bitmask of ISA IRQ lines
455 *
456 * Autoprobe for the IRQ line used by the NCR5380 by triggering an IRQ
457 * and then looking to see what interrupt actually turned up.
458 *
459 * Locks: none, irqs must be enabled on entry
460 */
461
702809ce
AM
462static int __init __maybe_unused NCR5380_probe_irq(struct Scsi_Host *instance,
463 int possible)
1da177e4 464{
1da177e4
LT
465 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
466 unsigned long timeout;
467 int trying_irqs, i, mask;
1da177e4 468
22f5f10d 469 for (trying_irqs = 0, i = 1, mask = 2; i < 16; ++i, mask <<= 1)
4909cc2b 470 if ((mask & possible) && (request_irq(i, &probe_intr, 0, "NCR-probe", NULL) == 0))
1da177e4
LT
471 trying_irqs |= mask;
472
4e5a800c 473 timeout = jiffies + msecs_to_jiffies(250);
22f5f10d 474 probe_irq = NO_IRQ;
1da177e4
LT
475
476 /*
477 * A interrupt is triggered whenever BSY = false, SEL = true
478 * and a bit set in the SELECT_ENABLE_REG is asserted on the
479 * SCSI bus.
480 *
481 * Note that the bus is only driven when the phase control signals
482 * (I/O, C/D, and MSG) match those in the TCR, so we must reset that
483 * to zero.
484 */
485
486 NCR5380_write(TARGET_COMMAND_REG, 0);
487 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
488 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
489 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_SEL);
490
22f5f10d 491 while (probe_irq == NO_IRQ && time_before(jiffies, timeout))
a9a3047d 492 schedule_timeout_uninterruptible(1);
1da177e4
LT
493
494 NCR5380_write(SELECT_ENABLE_REG, 0);
495 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
496
22f5f10d 497 for (i = 1, mask = 2; i < 16; ++i, mask <<= 1)
1da177e4
LT
498 if (trying_irqs & mask)
499 free_irq(i, NULL);
500
501 return probe_irq;
502}
503
504/**
8c32513b
FT
505 * NCR58380_info - report driver and host information
506 * @instance: relevant scsi host instance
1da177e4 507 *
8c32513b 508 * For use as the host template info() handler.
1da177e4
LT
509 *
510 * Locks: none
511 */
512
8c32513b 513static const char *NCR5380_info(struct Scsi_Host *instance)
1da177e4 514{
8c32513b
FT
515 struct NCR5380_hostdata *hostdata = shost_priv(instance);
516
517 return hostdata->info;
518}
519
520static void prepare_info(struct Scsi_Host *instance)
521{
522 struct NCR5380_hostdata *hostdata = shost_priv(instance);
523
524 snprintf(hostdata->info, sizeof(hostdata->info),
525 "%s, io_port 0x%lx, n_io_port %d, "
526 "base 0x%lx, irq %d, "
527 "can_queue %d, cmd_per_lun %d, "
528 "sg_tablesize %d, this_id %d, "
9c3f0e2b 529 "flags { %s%s%s%s}, "
8c32513b
FT
530 "options { %s} ",
531 instance->hostt->name, instance->io_port, instance->n_io_port,
532 instance->base, instance->irq,
533 instance->can_queue, instance->cmd_per_lun,
534 instance->sg_tablesize, instance->this_id,
535 hostdata->flags & FLAG_NCR53C400 ? "NCR53C400 " : "",
536 hostdata->flags & FLAG_DTC3181E ? "DTC3181E " : "",
537 hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "",
9c3f0e2b 538 hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : "",
1da177e4 539#ifdef AUTOPROBE_IRQ
8c32513b 540 "AUTOPROBE_IRQ "
1da177e4 541#endif
1da177e4 542#ifdef DIFFERENTIAL
8c32513b 543 "DIFFERENTIAL "
1da177e4
LT
544#endif
545#ifdef REAL_DMA
8c32513b 546 "REAL_DMA "
1da177e4
LT
547#endif
548#ifdef REAL_DMA_POLL
8c32513b 549 "REAL_DMA_POLL "
1da177e4
LT
550#endif
551#ifdef PARITY
8c32513b 552 "PARITY "
1da177e4
LT
553#endif
554#ifdef PSEUDO_DMA
8c32513b 555 "PSEUDO_DMA "
1da177e4
LT
556#endif
557#ifdef UNSAFE
8c32513b 558 "UNSAFE "
8c32513b
FT
559#endif
560 "");
1da177e4
LT
561}
562
563/**
564 * NCR5380_print_status - dump controller info
565 * @instance: controller to dump
566 *
567 * Print commands in the various queues, called from NCR5380_abort
568 * and NCR5380_debug to aid debugging.
569 *
570 * Locks: called functions disable irqs
571 */
572
3be1b3ea 573static void __maybe_unused NCR5380_print_status(struct Scsi_Host *instance)
1da177e4
LT
574{
575 NCR5380_dprint(NDEBUG_ANY, instance);
576 NCR5380_dprint_phase(NDEBUG_ANY, instance);
577}
578
a9c2dc43 579#ifdef PSEUDO_DMA
1da177e4
LT
580/******************************************/
581/*
582 * /proc/scsi/[dtc pas16 t128 generic]/[0-ASC_NUM_BOARD_SUPPORTED]
583 *
584 * *buffer: I/O buffer
585 * **start: if inout == FALSE pointer into buffer where user read should start
586 * offset: current offset
587 * length: length of buffer
588 * hostno: Scsi_Host host_no
589 * inout: TRUE - user is writing; FALSE - user is reading
590 *
591 * Return the number of bytes read from or written
592 */
593
dd7ab71b
AV
594static int __maybe_unused NCR5380_write_info(struct Scsi_Host *instance,
595 char *buffer, int length)
596{
a9c2dc43
FT
597 struct NCR5380_hostdata *hostdata = shost_priv(instance);
598
599 hostdata->spin_max_r = 0;
600 hostdata->spin_max_w = 0;
601 return 0;
dd7ab71b 602}
a9c2dc43 603#endif
dd7ab71b 604
1da177e4 605static
710ddd0d 606void lprint_Scsi_Cmnd(struct scsi_cmnd *cmd, struct seq_file *m);
1da177e4 607static
dd7ab71b 608void lprint_command(unsigned char *cmd, struct seq_file *m);
1da177e4 609static
dd7ab71b 610void lprint_opcode(int opcode, struct seq_file *m);
1da177e4 611
dd7ab71b
AV
612static int __maybe_unused NCR5380_show_info(struct seq_file *m,
613 struct Scsi_Host *instance)
1da177e4 614{
1da177e4 615 struct NCR5380_hostdata *hostdata;
710ddd0d 616 struct scsi_cmnd *ptr;
1da177e4
LT
617
618 hostdata = (struct NCR5380_hostdata *) instance->hostdata;
619
a9c2dc43 620#ifdef PSEUDO_DMA
0c3de38f 621 seq_printf(m, "Highwater I/O busy spin counts: write %d, read %d\n",
a9c2dc43 622 hostdata->spin_max_w, hostdata->spin_max_r);
1da177e4
LT
623#endif
624 spin_lock_irq(instance->host_lock);
625 if (!hostdata->connected)
0c3de38f 626 seq_printf(m, "scsi%d: no currently connected command\n", instance->host_no);
1da177e4 627 else
710ddd0d 628 lprint_Scsi_Cmnd((struct scsi_cmnd *) hostdata->connected, m);
0c3de38f 629 seq_printf(m, "scsi%d: issue_queue\n", instance->host_no);
710ddd0d 630 for (ptr = (struct scsi_cmnd *) hostdata->issue_queue; ptr; ptr = (struct scsi_cmnd *) ptr->host_scribble)
dd7ab71b 631 lprint_Scsi_Cmnd(ptr, m);
1da177e4 632
0c3de38f 633 seq_printf(m, "scsi%d: disconnected_queue\n", instance->host_no);
710ddd0d 634 for (ptr = (struct scsi_cmnd *) hostdata->disconnected_queue; ptr; ptr = (struct scsi_cmnd *) ptr->host_scribble)
dd7ab71b 635 lprint_Scsi_Cmnd(ptr, m);
1da177e4 636 spin_unlock_irq(instance->host_lock);
dd7ab71b 637 return 0;
1da177e4
LT
638}
639
710ddd0d 640static void lprint_Scsi_Cmnd(struct scsi_cmnd *cmd, struct seq_file *m)
1da177e4 641{
0c3de38f 642 seq_printf(m, "scsi%d : destination target %d, lun %llu\n", cmd->device->host->host_no, cmd->device->id, cmd->device->lun);
91c40f24 643 seq_puts(m, " command = ");
dd7ab71b 644 lprint_command(cmd->cmnd, m);
1da177e4
LT
645}
646
dd7ab71b 647static void lprint_command(unsigned char *command, struct seq_file *m)
1da177e4
LT
648{
649 int i, s;
dd7ab71b 650 lprint_opcode(command[0], m);
1da177e4 651 for (i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i)
0c3de38f 652 seq_printf(m, "%02x ", command[i]);
f50332ff 653 seq_putc(m, '\n');
1da177e4
LT
654}
655
dd7ab71b 656static void lprint_opcode(int opcode, struct seq_file *m)
1da177e4 657{
0c3de38f 658 seq_printf(m, "%2d (0x%02x)", opcode, opcode);
1da177e4
LT
659}
660
661
662/**
663 * NCR5380_init - initialise an NCR5380
664 * @instance: adapter to configure
665 * @flags: control flags
666 *
667 * Initializes *instance and corresponding 5380 chip,
668 * with flags OR'd into the initial flags value.
669 *
670 * Notes : I assume that the host, hostno, and id bits have been
671 * set correctly. I don't care about the irq and other fields.
672 *
673 * Returns 0 for success
674 *
675 * Locks: interrupts must be enabled when we are called
676 */
677
6f039790 678static int NCR5380_init(struct Scsi_Host *instance, int flags)
1da177e4 679{
b6488f97 680 int i;
1da177e4 681 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
2f854b82 682 unsigned long deadline;
1da177e4
LT
683
684 if(in_interrupt())
685 printk(KERN_ERR "NCR5380_init called with interrupts off!\n");
1da177e4 686
1da177e4
LT
687 hostdata->id_mask = 1 << instance->this_id;
688 for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
689 if (i > hostdata->id_mask)
690 hostdata->id_higher_mask |= i;
691 for (i = 0; i < 8; ++i)
692 hostdata->busy[i] = 0;
693#ifdef REAL_DMA
694 hostdata->dmalen = 0;
695#endif
1da177e4
LT
696 hostdata->connected = NULL;
697 hostdata->issue_queue = NULL;
698 hostdata->disconnected_queue = NULL;
699
c4028958 700 INIT_DELAYED_WORK(&hostdata->coroutine, NCR5380_main);
0ad0eff9
FT
701 hostdata->work_q = alloc_workqueue("ncr5380_%d",
702 WQ_UNBOUND | WQ_MEM_RECLAIM,
703 1, instance->host_no);
704 if (!hostdata->work_q)
705 return -ENOMEM;
706
1da177e4
LT
707 /* The CHECK code seems to break the 53C400. Will check it later maybe */
708 if (flags & FLAG_NCR53C400)
709 hostdata->flags = FLAG_HAS_LAST_BYTE_SENT | flags;
710 else
711 hostdata->flags = FLAG_CHECK_LAST_BYTE_SENT | flags;
712
713 hostdata->host = instance;
1da177e4 714
8c32513b
FT
715 prepare_info(instance);
716
1da177e4
LT
717 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
718 NCR5380_write(MODE_REG, MR_BASE);
719 NCR5380_write(TARGET_COMMAND_REG, 0);
720 NCR5380_write(SELECT_ENABLE_REG, 0);
2f854b82
FT
721
722 /* Calibrate register polling loop */
723 i = 0;
724 deadline = jiffies + 1;
725 do {
726 cpu_relax();
727 } while (time_is_after_jiffies(deadline));
728 deadline += msecs_to_jiffies(256);
729 do {
730 NCR5380_read(STATUS_REG);
731 ++i;
732 cpu_relax();
733 } while (time_is_after_jiffies(deadline));
734 hostdata->accesses_per_ms = i / 256;
735
b6488f97
FT
736 return 0;
737}
1da177e4 738
b6488f97
FT
739/**
740 * NCR5380_maybe_reset_bus - Detect and correct bus wedge problems.
741 * @instance: adapter to check
742 *
743 * If the system crashed, it may have crashed with a connected target and
744 * the SCSI bus busy. Check for BUS FREE phase. If not, try to abort the
745 * currently established nexus, which we know nothing about. Failing that
746 * do a bus reset.
747 *
748 * Note that a bus reset will cause the chip to assert IRQ.
749 *
750 * Returns 0 if successful, otherwise -ENXIO.
751 */
752
753static int NCR5380_maybe_reset_bus(struct Scsi_Host *instance)
754{
9c3f0e2b 755 struct NCR5380_hostdata *hostdata = shost_priv(instance);
b6488f97 756 int pass;
1da177e4
LT
757
758 for (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {
759 switch (pass) {
760 case 1:
761 case 3:
762 case 5:
636b1ec8
FT
763 shost_printk(KERN_ERR, instance, "SCSI bus busy, waiting up to five seconds\n");
764 NCR5380_poll_politely(instance,
765 STATUS_REG, SR_BSY, 0, 5 * HZ);
1da177e4
LT
766 break;
767 case 2:
636b1ec8 768 shost_printk(KERN_ERR, instance, "bus busy, attempting abort\n");
1da177e4
LT
769 do_abort(instance);
770 break;
771 case 4:
636b1ec8 772 shost_printk(KERN_ERR, instance, "bus busy, attempting reset\n");
1da177e4 773 do_reset(instance);
9c3f0e2b
FT
774 /* Wait after a reset; the SCSI standard calls for
775 * 250ms, we wait 500ms to be on the safe side.
776 * But some Toshiba CD-ROMs need ten times that.
777 */
778 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
779 msleep(2500);
780 else
781 msleep(500);
1da177e4
LT
782 break;
783 case 6:
636b1ec8 784 shost_printk(KERN_ERR, instance, "bus locked solid\n");
1da177e4
LT
785 return -ENXIO;
786 }
787 }
788 return 0;
789}
790
791/**
792 * NCR5380_exit - remove an NCR5380
793 * @instance: adapter to remove
794 */
795
a43cf0f3 796static void NCR5380_exit(struct Scsi_Host *instance)
1da177e4
LT
797{
798 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
799
a684b8da 800 cancel_delayed_work_sync(&hostdata->coroutine);
0ad0eff9 801 destroy_workqueue(hostdata->work_q);
1da177e4
LT
802}
803
804/**
1bb40589
FT
805 * NCR5380_queue_command - queue a command
806 * @instance: the relevant SCSI adapter
807 * @cmd: SCSI command
1da177e4 808 *
1bb40589
FT
809 * cmd is added to the per-instance issue queue, with minor
810 * twiddling done to the host specific fields of cmd. If the
811 * main coroutine is not running, it is restarted.
1da177e4
LT
812 */
813
1bb40589
FT
814static int NCR5380_queue_command(struct Scsi_Host *instance,
815 struct scsi_cmnd *cmd)
1da177e4 816{
1bb40589 817 struct NCR5380_hostdata *hostdata = shost_priv(instance);
710ddd0d 818 struct scsi_cmnd *tmp;
1bb40589 819 unsigned long flags;
1da177e4
LT
820
821#if (NDEBUG & NDEBUG_NO_WRITE)
822 switch (cmd->cmnd[0]) {
823 case WRITE_6:
824 case WRITE_10:
825 printk("scsi%d : WRITE attempted with NO_WRITE debugging flag set\n", instance->host_no);
826 cmd->result = (DID_ERROR << 16);
1bb40589 827 cmd->scsi_done(cmd);
1da177e4
LT
828 return 0;
829 }
830#endif /* (NDEBUG & NDEBUG_NO_WRITE) */
831
1da177e4
LT
832 /*
833 * We use the host_scribble field as a pointer to the next command
834 * in a queue
835 */
836
837 cmd->host_scribble = NULL;
1da177e4
LT
838 cmd->result = 0;
839
1bb40589
FT
840 spin_lock_irqsave(instance->host_lock, flags);
841
1da177e4
LT
842 /*
843 * Insert the cmd into the issue queue. Note that REQUEST SENSE
844 * commands are added to the head of the queue since any command will
845 * clear the contingent allegiance condition that exists and the
846 * sense data is only guaranteed to be valid while the condition exists.
847 */
848
849 if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) {
850 LIST(cmd, hostdata->issue_queue);
851 cmd->host_scribble = (unsigned char *) hostdata->issue_queue;
852 hostdata->issue_queue = cmd;
853 } else {
710ddd0d 854 for (tmp = (struct scsi_cmnd *) hostdata->issue_queue; tmp->host_scribble; tmp = (struct scsi_cmnd *) tmp->host_scribble);
1da177e4
LT
855 LIST(cmd, tmp);
856 tmp->host_scribble = (unsigned char *) cmd;
857 }
1bb40589
FT
858 spin_unlock_irqrestore(instance->host_lock, flags);
859
52a6a1cb 860 dprintk(NDEBUG_QUEUES, "scsi%d : command added to %s of queue\n", instance->host_no, (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail");
1da177e4
LT
861
862 /* Run the coroutine if it isn't already running. */
863 /* Kick off command processing */
0ad0eff9 864 queue_delayed_work(hostdata->work_q, &hostdata->coroutine, 0);
1da177e4
LT
865 return 0;
866}
867
1da177e4
LT
868/**
869 * NCR5380_main - NCR state machines
870 *
871 * NCR5380_main is a coroutine that runs as long as more work can
872 * be done on the NCR5380 host adapters in a system. Both
873 * NCR5380_queue_command() and NCR5380_intr() will try to start it
874 * in case it is not running.
875 *
876 * Locks: called as its own thread with no locks held. Takes the
877 * host lock and called routines may take the isa dma lock.
878 */
879
c4028958 880static void NCR5380_main(struct work_struct *work)
1da177e4 881{
c4028958
DH
882 struct NCR5380_hostdata *hostdata =
883 container_of(work, struct NCR5380_hostdata, coroutine.work);
1da177e4 884 struct Scsi_Host *instance = hostdata->host;
710ddd0d 885 struct scsi_cmnd *tmp, *prev;
1da177e4
LT
886 int done;
887
888 spin_lock_irq(instance->host_lock);
889 do {
890 /* Lock held here */
891 done = 1;
ae753a33 892 if (!hostdata->connected) {
52a6a1cb 893 dprintk(NDEBUG_MAIN, "scsi%d : not connected\n", instance->host_no);
1da177e4
LT
894 /*
895 * Search through the issue_queue for a command destined
896 * for a target that's not busy.
897 */
710ddd0d 898 for (tmp = (struct scsi_cmnd *) hostdata->issue_queue, prev = NULL; tmp; prev = tmp, tmp = (struct scsi_cmnd *) tmp->host_scribble)
1da177e4
LT
899 {
900 if (prev != tmp)
9cb78c16 901 dprintk(NDEBUG_LISTS, "MAIN tmp=%p target=%d busy=%d lun=%llu\n", tmp, tmp->device->id, hostdata->busy[tmp->device->id], tmp->device->lun);
1da177e4 902 /* When we find one, remove it from the issue queue. */
9cb78c16
HR
903 if (!(hostdata->busy[tmp->device->id] &
904 (1 << (u8)(tmp->device->lun & 0xff)))) {
1da177e4
LT
905 if (prev) {
906 REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
907 prev->host_scribble = tmp->host_scribble;
908 } else {
909 REMOVE(-1, hostdata->issue_queue, tmp, tmp->host_scribble);
710ddd0d 910 hostdata->issue_queue = (struct scsi_cmnd *) tmp->host_scribble;
1da177e4
LT
911 }
912 tmp->host_scribble = NULL;
913
914 /*
915 * Attempt to establish an I_T_L nexus here.
916 * On success, instance->hostdata->connected is set.
917 * On failure, we must add the command back to the
918 * issue queue so we can keep trying.
919 */
9cb78c16 920 dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, "scsi%d : main() : command for target %d lun %llu removed from issue_queue\n", instance->host_no, tmp->device->id, tmp->device->lun);
1da177e4 921
76f13b93
FT
922 /*
923 * REQUEST SENSE commands are issued without tagged
924 * queueing, even on SCSI-II devices because the
925 * contingent allegiance condition exists for the
926 * entire unit.
927 */
928
929 if (!NCR5380_select(instance, tmp)) {
1f1b0c74 930 /* OK or bad target */
1da177e4 931 } else {
1f1b0c74 932 /* Need to retry */
1da177e4
LT
933 LIST(tmp, hostdata->issue_queue);
934 tmp->host_scribble = (unsigned char *) hostdata->issue_queue;
935 hostdata->issue_queue = tmp;
936 done = 0;
52a6a1cb 937 dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, "scsi%d : main(): select() failed, returned to issue_queue\n", instance->host_no);
1da177e4 938 }
ae753a33 939 if (hostdata->connected)
1f1b0c74 940 break;
1da177e4
LT
941 /* lock held here still */
942 } /* if target/lun is not busy */
943 } /* for */
944 /* exited locked */
945 } /* if (!hostdata->connected) */
1da177e4
LT
946 if (hostdata->connected
947#ifdef REAL_DMA
948 && !hostdata->dmalen
949#endif
1da177e4 950 ) {
52a6a1cb 951 dprintk(NDEBUG_MAIN, "scsi%d : main() : performing information transfer\n", instance->host_no);
1da177e4 952 NCR5380_information_transfer(instance);
52a6a1cb 953 dprintk(NDEBUG_MAIN, "scsi%d : main() : done set false\n", instance->host_no);
1da177e4 954 done = 0;
1d3db59d 955 }
1da177e4
LT
956 } while (!done);
957
958 spin_unlock_irq(instance->host_lock);
959}
960
961#ifndef DONT_USE_INTR
962
963/**
964 * NCR5380_intr - generic NCR5380 irq handler
965 * @irq: interrupt number
966 * @dev_id: device info
1da177e4
LT
967 *
968 * Handle interrupts, reestablishing I_T_L or I_T_L_Q nexuses
969 * from the disconnected queue, and restarting NCR5380_main()
970 * as required.
971 *
972 * Locks: takes the needed instance locks
973 */
974
baa9aac6 975static irqreturn_t NCR5380_intr(int dummy, void *dev_id)
1da177e4 976{
baa9aac6 977 struct Scsi_Host *instance = dev_id;
1da177e4
LT
978 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
979 int done;
980 unsigned char basr;
981 unsigned long flags;
982
52a6a1cb
FT
983 dprintk(NDEBUG_INTR, "scsi : NCR5380 irq %d triggered\n",
984 instance->irq);
1da177e4
LT
985
986 do {
987 done = 1;
988 spin_lock_irqsave(instance->host_lock, flags);
989 /* Look for pending interrupts */
1da177e4
LT
990 basr = NCR5380_read(BUS_AND_STATUS_REG);
991 /* XXX dispatch to appropriate routine if found and done=0 */
992 if (basr & BASR_IRQ) {
993 NCR5380_dprint(NDEBUG_INTR, instance);
994 if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
995 done = 0;
52a6a1cb 996 dprintk(NDEBUG_INTR, "scsi%d : SEL interrupt\n", instance->host_no);
1da177e4
LT
997 NCR5380_reselect(instance);
998 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
999 } else if (basr & BASR_PARITY_ERROR) {
52a6a1cb 1000 dprintk(NDEBUG_INTR, "scsi%d : PARITY interrupt\n", instance->host_no);
1da177e4
LT
1001 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1002 } else if ((NCR5380_read(STATUS_REG) & SR_RST) == SR_RST) {
52a6a1cb 1003 dprintk(NDEBUG_INTR, "scsi%d : RESET interrupt\n", instance->host_no);
1da177e4
LT
1004 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1005 } else {
1006#if defined(REAL_DMA)
1007 /*
1008 * We should only get PHASE MISMATCH and EOP interrupts
1009 * if we have DMA enabled, so do a sanity check based on
1010 * the current setting of the MODE register.
1011 */
1012
1013 if ((NCR5380_read(MODE_REG) & MR_DMA) && ((basr & BASR_END_DMA_TRANSFER) || !(basr & BASR_PHASE_MATCH))) {
25985edc 1014 int transferred;
1da177e4
LT
1015
1016 if (!hostdata->connected)
1017 panic("scsi%d : received end of DMA interrupt with no connected cmd\n", instance->hostno);
1018
25985edc 1019 transferred = (hostdata->dmalen - NCR5380_dma_residual(instance));
1da177e4
LT
1020 hostdata->connected->SCp.this_residual -= transferred;
1021 hostdata->connected->SCp.ptr += transferred;
1022 hostdata->dmalen = 0;
1023
1024 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1025
1026 /* FIXME: we need to poll briefly then defer a workqueue task ! */
1027 NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG, BASR_ACK, 0, 2*HZ);
1028
1029 NCR5380_write(MODE_REG, MR_BASE);
1030 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1031 }
1032#else
52a6a1cb 1033 dprintk(NDEBUG_INTR, "scsi : unknown interrupt, BASR 0x%X, MR 0x%X, SR 0x%x\n", basr, NCR5380_read(MODE_REG), NCR5380_read(STATUS_REG));
1da177e4
LT
1034 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1035#endif
1036 }
1037 } /* if BASR_IRQ */
1038 spin_unlock_irqrestore(instance->host_lock, flags);
1039 if(!done)
0ad0eff9
FT
1040 queue_delayed_work(hostdata->work_q,
1041 &hostdata->coroutine, 0);
1da177e4
LT
1042 } while (!done);
1043 return IRQ_HANDLED;
1044}
1045
1046#endif
1047
1da177e4 1048/*
710ddd0d
FT
1049 * Function : int NCR5380_select(struct Scsi_Host *instance,
1050 * struct scsi_cmnd *cmd)
1da177e4
LT
1051 *
1052 * Purpose : establishes I_T_L or I_T_L_Q nexus for new or existing command,
1053 * including ARBITRATION, SELECTION, and initial message out for
1054 * IDENTIFY and queue messages.
1055 *
1056 * Inputs : instance - instantiation of the 5380 driver on which this
76f13b93 1057 * target lives, cmd - SCSI command to execute.
1da177e4 1058 *
6323876f
FT
1059 * Returns : -1 if selection failed but should be retried.
1060 * 0 if selection failed and should not be retried.
1061 * 0 if selection succeeded completely (hostdata->connected == cmd).
1da177e4
LT
1062 *
1063 * Side effects :
1064 * If bus busy, arbitration failed, etc, NCR5380_select() will exit
1065 * with registers as they should have been on entry - ie
1066 * SELECT_ENABLE will be set appropriately, the NCR5380
1067 * will cease to drive any SCSI bus signals.
1068 *
1069 * If successful : I_T_L or I_T_L_Q nexus will be established,
1070 * instance->connected will be set to cmd.
1071 * SELECT interrupt will be disabled.
1072 *
1073 * If failed (no target) : cmd->scsi_done() will be called, and the
1074 * cmd->result host byte set to DID_BAD_TARGET.
1075 *
1076 * Locks: caller holds hostdata lock in IRQ mode
1077 */
1078
710ddd0d 1079static int NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd)
1da177e4 1080{
1da177e4
LT
1081 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1082 unsigned char tmp[3], phase;
1083 unsigned char *data;
1084 int len;
1da177e4 1085 int err;
1da177e4 1086
1da177e4 1087 NCR5380_dprint(NDEBUG_ARBITRATION, instance);
52a6a1cb 1088 dprintk(NDEBUG_ARBITRATION, "scsi%d : starting arbitration, id = %d\n", instance->host_no, instance->this_id);
1da177e4
LT
1089
1090 /*
1091 * Set the phase bits to 0, otherwise the NCR5380 won't drive the
1092 * data bus during SELECTION.
1093 */
1094
1095 NCR5380_write(TARGET_COMMAND_REG, 0);
1096
1097 /*
1098 * Start arbitration.
1099 */
1100
1101 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
1102 NCR5380_write(MODE_REG, MR_ARBITRATE);
1103
1104
1105 /* We can be relaxed here, interrupts are on, we are
1106 in workqueue context, the birds are singing in the trees */
1107 spin_unlock_irq(instance->host_lock);
1108 err = NCR5380_poll_politely(instance, INITIATOR_COMMAND_REG, ICR_ARBITRATION_PROGRESS, ICR_ARBITRATION_PROGRESS, 5*HZ);
1109 spin_lock_irq(instance->host_lock);
1110 if (err < 0) {
1111 printk(KERN_DEBUG "scsi: arbitration timeout at %d\n", __LINE__);
1112 NCR5380_write(MODE_REG, MR_BASE);
1113 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
6323876f 1114 return -1;
1da177e4
LT
1115 }
1116
52a6a1cb 1117 dprintk(NDEBUG_ARBITRATION, "scsi%d : arbitration complete\n", instance->host_no);
1da177e4
LT
1118
1119 /*
1120 * The arbitration delay is 2.2us, but this is a minimum and there is
1121 * no maximum so we can safely sleep for ceil(2.2) usecs to accommodate
1122 * the integral nature of udelay().
1123 *
1124 */
1125
1126 udelay(3);
1127
1128 /* Check for lost arbitration */
1129 if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
1130 NCR5380_write(MODE_REG, MR_BASE);
52a6a1cb 1131 dprintk(NDEBUG_ARBITRATION, "scsi%d : lost arbitration, deasserting MR_ARBITRATE\n", instance->host_no);
6323876f 1132 return -1;
1da177e4 1133 }
cf13b083
FT
1134
1135 /* After/during arbitration, BSY should be asserted.
1136 * IBM DPES-31080 Version S31Q works now
1137 * Tnx to Thomas_Roesch@m2.maus.de for finding this! (Roman)
1138 */
1139 NCR5380_write(INITIATOR_COMMAND_REG,
1140 ICR_BASE | ICR_ASSERT_SEL | ICR_ASSERT_BSY);
1da177e4
LT
1141
1142 if (!(hostdata->flags & FLAG_DTC3181E) &&
1143 /* RvC: DTC3181E has some trouble with this
1144 * so we simply removed it. Seems to work with
1145 * only Mustek scanner attached
1146 */
1147 (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
1148 NCR5380_write(MODE_REG, MR_BASE);
1149 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
52a6a1cb 1150 dprintk(NDEBUG_ARBITRATION, "scsi%d : lost arbitration, deasserting ICR_ASSERT_SEL\n", instance->host_no);
6323876f 1151 return -1;
1da177e4
LT
1152 }
1153 /*
1154 * Again, bus clear + bus settle time is 1.2us, however, this is
1155 * a minimum so we'll udelay ceil(1.2)
1156 */
1157
9c3f0e2b
FT
1158 if (hostdata->flags & FLAG_TOSHIBA_DELAY)
1159 udelay(15);
1160 else
1161 udelay(2);
1da177e4 1162
52a6a1cb 1163 dprintk(NDEBUG_ARBITRATION, "scsi%d : won arbitration\n", instance->host_no);
1da177e4
LT
1164
1165 /*
1166 * Now that we have won arbitration, start Selection process, asserting
1167 * the host and target ID's on the SCSI bus.
1168 */
1169
422c0d61 1170 NCR5380_write(OUTPUT_DATA_REG, (hostdata->id_mask | (1 << scmd_id(cmd))));
1da177e4
LT
1171
1172 /*
1173 * Raise ATN while SEL is true before BSY goes false from arbitration,
1174 * since this is the only way to guarantee that we'll get a MESSAGE OUT
1175 * phase immediately after selection.
1176 */
1177
1178 NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_BSY | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
1179 NCR5380_write(MODE_REG, MR_BASE);
1180
1181 /*
1182 * Reselect interrupts must be turned off prior to the dropping of BSY,
1183 * otherwise we will trigger an interrupt.
1184 */
1185 NCR5380_write(SELECT_ENABLE_REG, 0);
1186
1187 /*
1188 * The initiator shall then wait at least two deskew delays and release
1189 * the BSY signal.
1190 */
1191 udelay(1); /* wingel -- wait two bus deskew delay >2*45ns */
1192
1193 /* Reset BSY */
1194 NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
1195
1196 /*
1197 * Something weird happens when we cease to drive BSY - looks
1198 * like the board/chip is letting us do another read before the
1199 * appropriate propagation delay has expired, and we're confusing
1200 * a BSY signal from ourselves as the target's response to SELECTION.
1201 *
1202 * A small delay (the 'C++' frontend breaks the pipeline with an
1203 * unnecessary jump, making it work on my 386-33/Trantor T128, the
1204 * tighter 'C' code breaks and requires this) solves the problem -
1205 * the 1 us delay is arbitrary, and only used because this delay will
1206 * be the same on other platforms and since it works here, it should
1207 * work there.
1208 *
1209 * wingel suggests that this could be due to failing to wait
1210 * one deskew delay.
1211 */
1212
1213 udelay(1);
1214
52a6a1cb 1215 dprintk(NDEBUG_SELECTION, "scsi%d : selecting target %d\n", instance->host_no, scmd_id(cmd));
1da177e4
LT
1216
1217 /*
1218 * The SCSI specification calls for a 250 ms timeout for the actual
1219 * selection.
1220 */
1221
ae753a33
FT
1222 err = NCR5380_poll_politely(instance, STATUS_REG, SR_BSY, SR_BSY,
1223 msecs_to_jiffies(250));
1da177e4 1224
1da177e4
LT
1225 if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
1226 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1227 NCR5380_reselect(instance);
1228 printk("scsi%d : reselection after won arbitration?\n", instance->host_no);
1229 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1230 return -1;
1231 }
ae753a33
FT
1232
1233 if (err < 0) {
1234 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1235 cmd->result = DID_BAD_TARGET << 16;
1236 cmd->scsi_done(cmd);
1237 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1238 dprintk(NDEBUG_SELECTION, "scsi%d : target did not respond within 250ms\n",
1239 instance->host_no);
1240 return 0;
1241 }
1242
1da177e4
LT
1243 /*
1244 * No less than two deskew delays after the initiator detects the
1245 * BSY signal is true, it shall release the SEL signal and may
1246 * change the DATA BUS. -wingel
1247 */
1248
1249 udelay(1);
1250
1251 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1252
1da177e4
LT
1253 /*
1254 * Since we followed the SCSI spec, and raised ATN while SEL
1255 * was true but before BSY was false during selection, the information
1256 * transfer phase should be a MESSAGE OUT phase so that we can send the
1257 * IDENTIFY message.
1258 *
1259 * If SCSI-II tagged queuing is enabled, we also send a SIMPLE_QUEUE_TAG
1260 * message (2 bytes) with a tag ID that we increment with every command
1261 * until it wraps back to 0.
1262 *
1263 * XXX - it turns out that there are some broken SCSI-II devices,
1264 * which claim to support tagged queuing but fail when more than
1265 * some number of commands are issued at once.
1266 */
1267
1268 /* Wait for start of REQ/ACK handshake */
1269
1270 spin_unlock_irq(instance->host_lock);
1271 err = NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, SR_REQ, HZ);
1272 spin_lock_irq(instance->host_lock);
1273
1274 if(err) {
1275 printk(KERN_ERR "scsi%d: timeout at NCR5380.c:%d\n", instance->host_no, __LINE__);
1276 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
6323876f 1277 return -1;
1da177e4
LT
1278 }
1279
52a6a1cb 1280 dprintk(NDEBUG_SELECTION, "scsi%d : target %d selected, going into MESSAGE OUT phase.\n", instance->host_no, cmd->device->id);
22f5f10d 1281 tmp[0] = IDENTIFY(((instance->irq == NO_IRQ) ? 0 : 1), cmd->device->lun);
1da177e4
LT
1282
1283 len = 1;
1284 cmd->tag = 0;
1285
1286 /* Send message(s) */
1287 data = tmp;
1288 phase = PHASE_MSGOUT;
1289 NCR5380_transfer_pio(instance, &phase, &len, &data);
52a6a1cb 1290 dprintk(NDEBUG_SELECTION, "scsi%d : nexus established.\n", instance->host_no);
1da177e4
LT
1291 /* XXX need to handle errors here */
1292 hostdata->connected = cmd;
9cb78c16 1293 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
1da177e4 1294
28424d3a 1295 initialize_SCp(cmd);
1da177e4
LT
1296
1297 return 0;
1da177e4
LT
1298}
1299
1300/*
1301 * Function : int NCR5380_transfer_pio (struct Scsi_Host *instance,
1302 * unsigned char *phase, int *count, unsigned char **data)
1303 *
1304 * Purpose : transfers data in given phase using polled I/O
1305 *
1306 * Inputs : instance - instance of driver, *phase - pointer to
1307 * what phase is expected, *count - pointer to number of
1308 * bytes to transfer, **data - pointer to data pointer.
1309 *
1310 * Returns : -1 when different phase is entered without transferring
25985edc 1311 * maximum number of bytes, 0 if all bytes or transferred or exit
1da177e4
LT
1312 * is in same phase.
1313 *
1314 * Also, *phase, *count, *data are modified in place.
1315 *
1316 * XXX Note : handling for bus free may be useful.
1317 */
1318
1319/*
1320 * Note : this code is not as quick as it could be, however it
1321 * IS 100% reliable, and for the actual data transfer where speed
1322 * counts, we will always do a pseudo DMA or DMA transfer.
1323 */
1324
1325static int NCR5380_transfer_pio(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
1da177e4
LT
1326 unsigned char p = *phase, tmp;
1327 int c = *count;
1328 unsigned char *d = *data;
1da177e4
LT
1329
1330 if (!(p & SR_IO))
52a6a1cb 1331 dprintk(NDEBUG_PIO, "scsi%d : pio write %d bytes\n", instance->host_no, c);
1da177e4 1332 else
52a6a1cb 1333 dprintk(NDEBUG_PIO, "scsi%d : pio read %d bytes\n", instance->host_no, c);
1da177e4
LT
1334
1335 /*
1336 * The NCR5380 chip will only drive the SCSI bus when the
1337 * phase specified in the appropriate bits of the TARGET COMMAND
1338 * REGISTER match the STATUS REGISTER
1339 */
1340
1341 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
1342
1da177e4
LT
1343 do {
1344 /*
1345 * Wait for assertion of REQ, after which the phase bits will be
1346 * valid
1347 */
1348
686f3990 1349 if (NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, SR_REQ, HZ) < 0)
1da177e4 1350 break;
1da177e4 1351
52a6a1cb 1352 dprintk(NDEBUG_HANDSHAKE, "scsi%d : REQ detected\n", instance->host_no);
1da177e4
LT
1353
1354 /* Check for phase mismatch */
686f3990 1355 if ((NCR5380_read(STATUS_REG) & PHASE_MASK) != p) {
52a6a1cb 1356 dprintk(NDEBUG_HANDSHAKE, "scsi%d : phase mismatch\n", instance->host_no);
1da177e4
LT
1357 NCR5380_dprint_phase(NDEBUG_HANDSHAKE, instance);
1358 break;
1359 }
1360 /* Do actual transfer from SCSI bus to / from memory */
1361 if (!(p & SR_IO))
1362 NCR5380_write(OUTPUT_DATA_REG, *d);
1363 else
1364 *d = NCR5380_read(CURRENT_SCSI_DATA_REG);
1365
1366 ++d;
1367
1368 /*
1369 * The SCSI standard suggests that in MSGOUT phase, the initiator
1370 * should drop ATN on the last byte of the message phase
1371 * after REQ has been asserted for the handshake but before
1372 * the initiator raises ACK.
1373 */
1374
1375 if (!(p & SR_IO)) {
1376 if (!((p & SR_MSG) && c > 1)) {
1377 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
1378 NCR5380_dprint(NDEBUG_PIO, instance);
1379 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ACK);
1380 } else {
1381 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN);
1382 NCR5380_dprint(NDEBUG_PIO, instance);
1383 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
1384 }
1385 } else {
1386 NCR5380_dprint(NDEBUG_PIO, instance);
1387 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK);
1388 }
1389
a2edc4a6
FT
1390 if (NCR5380_poll_politely(instance,
1391 STATUS_REG, SR_REQ, 0, 5 * HZ) < 0)
1392 break;
1393
52a6a1cb 1394 dprintk(NDEBUG_HANDSHAKE, "scsi%d : req false, handshake complete\n", instance->host_no);
1da177e4
LT
1395
1396/*
1397 * We have several special cases to consider during REQ/ACK handshaking :
1398 * 1. We were in MSGOUT phase, and we are on the last byte of the
1399 * message. ATN must be dropped as ACK is dropped.
1400 *
1401 * 2. We are in a MSGIN phase, and we are on the last byte of the
1402 * message. We must exit with ACK asserted, so that the calling
1403 * code may raise ATN before dropping ACK to reject the message.
1404 *
1405 * 3. ACK and ATN are clear and the target may proceed as normal.
1406 */
1407 if (!(p == PHASE_MSGIN && c == 1)) {
1408 if (p == PHASE_MSGOUT && c > 1)
1409 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1410 else
1411 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1412 }
1413 } while (--c);
1414
52a6a1cb 1415 dprintk(NDEBUG_PIO, "scsi%d : residual %d\n", instance->host_no, c);
1da177e4
LT
1416
1417 *count = c;
1418 *data = d;
1419 tmp = NCR5380_read(STATUS_REG);
a2edc4a6
FT
1420 /* The phase read from the bus is valid if either REQ is (already)
1421 * asserted or if ACK hasn't been released yet. The latter applies if
1422 * we're in MSG IN, DATA IN or STATUS and all bytes have been received.
1423 */
1424 if ((tmp & SR_REQ) || ((tmp & SR_IO) && c == 0))
1da177e4
LT
1425 *phase = tmp & PHASE_MASK;
1426 else
1427 *phase = PHASE_UNKNOWN;
1428
1429 if (!c || (*phase == p))
1430 return 0;
1431 else
1432 return -1;
1433}
1434
1435/**
636b1ec8
FT
1436 * do_reset - issue a reset command
1437 * @instance: adapter to reset
1da177e4 1438 *
636b1ec8
FT
1439 * Issue a reset sequence to the NCR5380 and try and get the bus
1440 * back into sane shape.
1da177e4 1441 *
636b1ec8
FT
1442 * This clears the reset interrupt flag because there may be no handler for
1443 * it. When the driver is initialized, the NCR5380_intr() handler has not yet
1444 * been installed. And when in EH we may have released the ST DMA interrupt.
1da177e4
LT
1445 */
1446
54d8fe44
FT
1447static void do_reset(struct Scsi_Host *instance)
1448{
636b1ec8
FT
1449 unsigned long flags;
1450
1451 local_irq_save(flags);
1452 NCR5380_write(TARGET_COMMAND_REG,
1453 PHASE_SR_TO_TCR(NCR5380_read(STATUS_REG) & PHASE_MASK));
1da177e4 1454 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST);
636b1ec8 1455 udelay(50);
1da177e4 1456 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
636b1ec8
FT
1457 (void)NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1458 local_irq_restore(flags);
1da177e4
LT
1459}
1460
1461/*
1462 * Function : do_abort (Scsi_Host *host)
1463 *
1464 * Purpose : abort the currently established nexus. Should only be
1465 * called from a routine which can drop into a
1466 *
1467 * Returns : 0 on success, -1 on failure.
1468 *
1469 * Locks: queue lock held by caller
1470 * FIXME: sort this out and get new_eh running
1471 */
1472
54d8fe44
FT
1473static int do_abort(struct Scsi_Host *instance)
1474{
1da177e4
LT
1475 unsigned char *msgptr, phase, tmp;
1476 int len;
1477 int rc;
1da177e4
LT
1478
1479 /* Request message out phase */
1480 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1481
1482 /*
1483 * Wait for the target to indicate a valid phase by asserting
1484 * REQ. Once this happens, we'll have either a MSGOUT phase
1485 * and can immediately send the ABORT message, or we'll have some
1486 * other phase and will have to source/sink data.
1487 *
1488 * We really don't care what value was on the bus or what value
1489 * the target sees, so we just handshake.
1490 */
1491
54d8fe44 1492 rc = NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, SR_REQ, 60 * HZ);
1da177e4
LT
1493
1494 if(rc < 0)
1495 return -1;
1496
1497 tmp = (unsigned char)rc;
1498
1499 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
1500
1501 if ((tmp & PHASE_MASK) != PHASE_MSGOUT) {
1502 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
54d8fe44 1503 rc = NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, 0, 3 * HZ);
1da177e4
LT
1504 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1505 if(rc == -1)
1506 return -1;
1507 }
1508 tmp = ABORT;
1509 msgptr = &tmp;
1510 len = 1;
1511 phase = PHASE_MSGOUT;
54d8fe44 1512 NCR5380_transfer_pio(instance, &phase, &len, &msgptr);
1da177e4
LT
1513
1514 /*
1515 * If we got here, and the command completed successfully,
1516 * we're about to go into bus free state.
1517 */
1518
1519 return len ? -1 : 0;
1520}
1521
1522#if defined(REAL_DMA) || defined(PSEUDO_DMA) || defined (REAL_DMA_POLL)
1523/*
1524 * Function : int NCR5380_transfer_dma (struct Scsi_Host *instance,
1525 * unsigned char *phase, int *count, unsigned char **data)
1526 *
1527 * Purpose : transfers data in given phase using either real
1528 * or pseudo DMA.
1529 *
1530 * Inputs : instance - instance of driver, *phase - pointer to
1531 * what phase is expected, *count - pointer to number of
1532 * bytes to transfer, **data - pointer to data pointer.
1533 *
1534 * Returns : -1 when different phase is entered without transferring
25985edc 1535 * maximum number of bytes, 0 if all bytes or transferred or exit
1da177e4
LT
1536 * is in same phase.
1537 *
1538 * Also, *phase, *count, *data are modified in place.
1539 *
1540 * Locks: io_request lock held by caller
1541 */
1542
1543
1544static int NCR5380_transfer_dma(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
1da177e4
LT
1545 register int c = *count;
1546 register unsigned char p = *phase;
1547 register unsigned char *d = *data;
1548 unsigned char tmp;
1549 int foo;
1550#if defined(REAL_DMA_POLL)
1551 int cnt, toPIO;
1552 unsigned char saved_data = 0, overrun = 0, residue;
1553#endif
1554
1555 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1556
1da177e4
LT
1557 if ((tmp = (NCR5380_read(STATUS_REG) & PHASE_MASK)) != p) {
1558 *phase = tmp;
1559 return -1;
1560 }
1561#if defined(REAL_DMA) || defined(REAL_DMA_POLL)
1562#ifdef READ_OVERRUNS
1563 if (p & SR_IO) {
1564 c -= 2;
1565 }
1566#endif
52a6a1cb 1567 dprintk(NDEBUG_DMA, "scsi%d : initializing DMA channel %d for %s, %d bytes %s %0x\n", instance->host_no, instance->dma_channel, (p & SR_IO) ? "reading" : "writing", c, (p & SR_IO) ? "to" : "from", (unsigned) d);
1da177e4
LT
1568 hostdata->dma_len = (p & SR_IO) ? NCR5380_dma_read_setup(instance, d, c) : NCR5380_dma_write_setup(instance, d, c);
1569#endif
1570
1571 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
1572
1573#ifdef REAL_DMA
1574 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_EOP_INTR | MR_MONITOR_BSY);
1575#elif defined(REAL_DMA_POLL)
1576 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
1577#else
1578 /*
1579 * Note : on my sample board, watch-dog timeouts occurred when interrupts
1580 * were not disabled for the duration of a single DMA transfer, from
1581 * before the setting of DMA mode to after transfer of the last byte.
1582 */
1583
1584#if defined(PSEUDO_DMA) && defined(UNSAFE)
1585 spin_unlock_irq(instance->host_lock);
1586#endif
1587 /* KLL May need eop and parity in 53c400 */
1588 if (hostdata->flags & FLAG_NCR53C400)
085267ac
RK
1589 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE |
1590 MR_ENABLE_PAR_CHECK | MR_ENABLE_PAR_INTR |
1591 MR_ENABLE_EOP_INTR | MR_MONITOR_BSY);
1da177e4
LT
1592 else
1593 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
1594#endif /* def REAL_DMA */
1595
52a6a1cb 1596 dprintk(NDEBUG_DMA, "scsi%d : mode reg = 0x%X\n", instance->host_no, NCR5380_read(MODE_REG));
1da177e4
LT
1597
1598 /*
1599 * On the PAS16 at least I/O recovery delays are not needed here.
1600 * Everyone else seems to want them.
1601 */
1602
1603 if (p & SR_IO) {
1604 io_recovery_delay(1);
1605 NCR5380_write(START_DMA_INITIATOR_RECEIVE_REG, 0);
1606 } else {
1607 io_recovery_delay(1);
1608 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
1609 io_recovery_delay(1);
1610 NCR5380_write(START_DMA_SEND_REG, 0);
1611 io_recovery_delay(1);
1612 }
1613
1614#if defined(REAL_DMA_POLL)
1615 do {
1616 tmp = NCR5380_read(BUS_AND_STATUS_REG);
1617 } while ((tmp & BASR_PHASE_MATCH) && !(tmp & (BASR_BUSY_ERROR | BASR_END_DMA_TRANSFER)));
1618
1619/*
1620 At this point, either we've completed DMA, or we have a phase mismatch,
1621 or we've unexpectedly lost BUSY (which is a real error).
1622
1623 For write DMAs, we want to wait until the last byte has been
1624 transferred out over the bus before we turn off DMA mode. Alas, there
1625 seems to be no terribly good way of doing this on a 5380 under all
1626 conditions. For non-scatter-gather operations, we can wait until REQ
1627 and ACK both go false, or until a phase mismatch occurs. Gather-writes
1628 are nastier, since the device will be expecting more data than we
1629 are prepared to send it, and REQ will remain asserted. On a 53C8[01] we
1630 could test LAST BIT SENT to assure transfer (I imagine this is precisely
1631 why this signal was added to the newer chips) but on the older 538[01]
1632 this signal does not exist. The workaround for this lack is a watchdog;
1633 we bail out of the wait-loop after a modest amount of wait-time if
1634 the usual exit conditions are not met. Not a terribly clean or
1635 correct solution :-%
1636
1637 Reads are equally tricky due to a nasty characteristic of the NCR5380.
1638 If the chip is in DMA mode for an READ, it will respond to a target's
1639 REQ by latching the SCSI data into the INPUT DATA register and asserting
1640 ACK, even if it has _already_ been notified by the DMA controller that
1641 the current DMA transfer has completed! If the NCR5380 is then taken
1642 out of DMA mode, this already-acknowledged byte is lost.
1643
1644 This is not a problem for "one DMA transfer per command" reads, because
1645 the situation will never arise... either all of the data is DMA'ed
1646 properly, or the target switches to MESSAGE IN phase to signal a
1647 disconnection (either operation bringing the DMA to a clean halt).
1648 However, in order to handle scatter-reads, we must work around the
1649 problem. The chosen fix is to DMA N-2 bytes, then check for the
1650 condition before taking the NCR5380 out of DMA mode. One or two extra
1651 bytes are transferred via PIO as necessary to fill out the original
1652 request.
1653 */
1654
1655 if (p & SR_IO) {
1656#ifdef READ_OVERRUNS
1657 udelay(10);
1658 if (((NCR5380_read(BUS_AND_STATUS_REG) & (BASR_PHASE_MATCH | BASR_ACK)) == (BASR_PHASE_MATCH | BASR_ACK))) {
1659 saved_data = NCR5380_read(INPUT_DATA_REGISTER);
1660 overrun = 1;
1661 }
1662#endif
1663 } else {
1664 int limit = 100;
1665 while (((tmp = NCR5380_read(BUS_AND_STATUS_REG)) & BASR_ACK) || (NCR5380_read(STATUS_REG) & SR_REQ)) {
1666 if (!(tmp & BASR_PHASE_MATCH))
1667 break;
1668 if (--limit < 0)
1669 break;
1670 }
1671 }
1672
52a6a1cb 1673 dprintk(NDEBUG_DMA, "scsi%d : polled DMA transfer complete, basr 0x%X, sr 0x%X\n", instance->host_no, tmp, NCR5380_read(STATUS_REG));
1da177e4
LT
1674
1675 NCR5380_write(MODE_REG, MR_BASE);
1676 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1677
1678 residue = NCR5380_dma_residual(instance);
1679 c -= residue;
1680 *count -= c;
1681 *data += c;
1682 *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
1683
1684#ifdef READ_OVERRUNS
1685 if (*phase == p && (p & SR_IO) && residue == 0) {
1686 if (overrun) {
52a6a1cb 1687 dprintk(NDEBUG_DMA, "Got an input overrun, using saved byte\n");
1da177e4
LT
1688 **data = saved_data;
1689 *data += 1;
1690 *count -= 1;
1691 cnt = toPIO = 1;
1692 } else {
1693 printk("No overrun??\n");
1694 cnt = toPIO = 2;
1695 }
52a6a1cb 1696 dprintk(NDEBUG_DMA, "Doing %d-byte PIO to 0x%X\n", cnt, *data);
1da177e4
LT
1697 NCR5380_transfer_pio(instance, phase, &cnt, data);
1698 *count -= toPIO - cnt;
1699 }
1700#endif
1701
52a6a1cb 1702 dprintk(NDEBUG_DMA, "Return with data ptr = 0x%X, count %d, last 0x%X, next 0x%X\n", *data, *count, *(*data + *count - 1), *(*data + *count));
1da177e4
LT
1703 return 0;
1704
1705#elif defined(REAL_DMA)
1706 return 0;
1707#else /* defined(REAL_DMA_POLL) */
1708 if (p & SR_IO) {
1709#ifdef DMA_WORKS_RIGHT
1710 foo = NCR5380_pread(instance, d, c);
1711#else
1712 int diff = 1;
1713 if (hostdata->flags & FLAG_NCR53C400) {
1714 diff = 0;
1715 }
1716 if (!(foo = NCR5380_pread(instance, d, c - diff))) {
1717 /*
1718 * We can't disable DMA mode after successfully transferring
1719 * what we plan to be the last byte, since that would open up
1720 * a race condition where if the target asserted REQ before
1721 * we got the DMA mode reset, the NCR5380 would have latched
1722 * an additional byte into the INPUT DATA register and we'd
1723 * have dropped it.
1724 *
1725 * The workaround was to transfer one fewer bytes than we
1726 * intended to with the pseudo-DMA read function, wait for
1727 * the chip to latch the last byte, read it, and then disable
1728 * pseudo-DMA mode.
1729 *
1730 * After REQ is asserted, the NCR5380 asserts DRQ and ACK.
1731 * REQ is deasserted when ACK is asserted, and not reasserted
1732 * until ACK goes false. Since the NCR5380 won't lower ACK
1733 * until DACK is asserted, which won't happen unless we twiddle
1734 * the DMA port or we take the NCR5380 out of DMA mode, we
1735 * can guarantee that we won't handshake another extra
1736 * byte.
1737 */
1738
1739 if (!(hostdata->flags & FLAG_NCR53C400)) {
1740 while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ));
1741 /* Wait for clean handshake */
1742 while (NCR5380_read(STATUS_REG) & SR_REQ);
1743 d[c - 1] = NCR5380_read(INPUT_DATA_REG);
1744 }
1745 }
1746#endif
1747 } else {
1748#ifdef DMA_WORKS_RIGHT
1749 foo = NCR5380_pwrite(instance, d, c);
1750#else
1751 int timeout;
52a6a1cb 1752 dprintk(NDEBUG_C400_PWRITE, "About to pwrite %d bytes\n", c);
1da177e4
LT
1753 if (!(foo = NCR5380_pwrite(instance, d, c))) {
1754 /*
1755 * Wait for the last byte to be sent. If REQ is being asserted for
1756 * the byte we're interested, we'll ACK it and it will go false.
1757 */
1758 if (!(hostdata->flags & FLAG_HAS_LAST_BYTE_SENT)) {
1759 timeout = 20000;
1760 while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ) && (NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH));
1761
1762 if (!timeout)
52a6a1cb 1763 dprintk(NDEBUG_LAST_BYTE_SENT, "scsi%d : timed out on last byte\n", instance->host_no);
1da177e4
LT
1764
1765 if (hostdata->flags & FLAG_CHECK_LAST_BYTE_SENT) {
1766 hostdata->flags &= ~FLAG_CHECK_LAST_BYTE_SENT;
1767 if (NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT) {
1768 hostdata->flags |= FLAG_HAS_LAST_BYTE_SENT;
52a6a1cb 1769 dprintk(NDEBUG_LAST_BYTE_SENT, "scsi%d : last byte sent works\n", instance->host_no);
1da177e4
LT
1770 }
1771 }
1772 } else {
52a6a1cb 1773 dprintk(NDEBUG_C400_PWRITE, "Waiting for LASTBYTE\n");
1da177e4 1774 while (!(NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT));
52a6a1cb 1775 dprintk(NDEBUG_C400_PWRITE, "Got LASTBYTE\n");
1da177e4
LT
1776 }
1777 }
1778#endif
1779 }
1780 NCR5380_write(MODE_REG, MR_BASE);
1781 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1782
1783 if ((!(p & SR_IO)) && (hostdata->flags & FLAG_NCR53C400)) {
52a6a1cb 1784 dprintk(NDEBUG_C400_PWRITE, "53C400w: Checking for IRQ\n");
1da177e4 1785 if (NCR5380_read(BUS_AND_STATUS_REG) & BASR_IRQ) {
52a6a1cb 1786 dprintk(NDEBUG_C400_PWRITE, "53C400w: got it, reading reset interrupt reg\n");
1da177e4
LT
1787 NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1788 } else {
1789 printk("53C400w: IRQ NOT THERE!\n");
1790 }
1791 }
1792 *data = d + c;
1793 *count = 0;
1794 *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
1795#if defined(PSEUDO_DMA) && defined(UNSAFE)
1796 spin_lock_irq(instance->host_lock);
1797#endif /* defined(REAL_DMA_POLL) */
1798 return foo;
1799#endif /* def REAL_DMA */
1800}
1801#endif /* defined(REAL_DMA) | defined(PSEUDO_DMA) */
1802
1803/*
1804 * Function : NCR5380_information_transfer (struct Scsi_Host *instance)
1805 *
1806 * Purpose : run through the various SCSI phases and do as the target
1807 * directs us to. Operates on the currently connected command,
1808 * instance->connected.
1809 *
1810 * Inputs : instance, instance for which we are doing commands
1811 *
1812 * Side effects : SCSI things happen, the disconnected queue will be
1813 * modified if a command disconnects, *instance->connected will
1814 * change.
1815 *
1816 * XXX Note : we need to watch for bus free or a reset condition here
1817 * to recover from an unexpected bus free condition.
1818 *
1819 * Locks: io_request_lock held by caller in IRQ mode
1820 */
1821
1822static void NCR5380_information_transfer(struct Scsi_Host *instance) {
1da177e4
LT
1823 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)instance->hostdata;
1824 unsigned char msgout = NOP;
1825 int sink = 0;
1826 int len;
1827#if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
1828 int transfersize;
1829#endif
1830 unsigned char *data;
1831 unsigned char phase, tmp, extended_msg[10], old_phase = 0xff;
710ddd0d 1832 struct scsi_cmnd *cmd = (struct scsi_cmnd *) hostdata->connected;
1da177e4 1833
1da177e4
LT
1834 while (1) {
1835 tmp = NCR5380_read(STATUS_REG);
1836 /* We only have a valid SCSI phase when REQ is asserted */
1837 if (tmp & SR_REQ) {
1838 phase = (tmp & PHASE_MASK);
1839 if (phase != old_phase) {
1840 old_phase = phase;
1841 NCR5380_dprint_phase(NDEBUG_INFORMATION, instance);
1842 }
1843 if (sink && (phase != PHASE_MSGOUT)) {
1844 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
1845
1846 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
1847 while (NCR5380_read(STATUS_REG) & SR_REQ);
1848 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1849 sink = 0;
1850 continue;
1851 }
1852 switch (phase) {
1853 case PHASE_DATAIN:
1854 case PHASE_DATAOUT:
1855#if (NDEBUG & NDEBUG_NO_DATAOUT)
1856 printk("scsi%d : NDEBUG_NO_DATAOUT set, attempted DATAOUT aborted\n", instance->host_no);
1857 sink = 1;
1858 do_abort(instance);
1859 cmd->result = DID_ERROR << 16;
cce99c69 1860 cmd->scsi_done(cmd);
1da177e4
LT
1861 return;
1862#endif
1863 /*
1864 * If there is no room left in the current buffer in the
1865 * scatter-gather list, move onto the next one.
1866 */
1867
1868 if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) {
1869 ++cmd->SCp.buffer;
1870 --cmd->SCp.buffers_residual;
1871 cmd->SCp.this_residual = cmd->SCp.buffer->length;
45711f1a 1872 cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
52a6a1cb 1873 dprintk(NDEBUG_INFORMATION, "scsi%d : %d bytes and %d buffers left\n", instance->host_no, cmd->SCp.this_residual, cmd->SCp.buffers_residual);
1da177e4
LT
1874 }
1875 /*
1876 * The preferred transfer method is going to be
1877 * PSEUDO-DMA for systems that are strictly PIO,
1878 * since we can let the hardware do the handshaking.
1879 *
1880 * For this to work, we need to know the transfersize
1881 * ahead of time, since the pseudo-DMA code will sit
1882 * in an unconditional loop.
1883 */
1884
1885#if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
ff3d4578
FT
1886 transfersize = 0;
1887 if (!cmd->device->borken &&
1888 !(hostdata->flags & FLAG_NO_PSEUDO_DMA))
1889 transfersize = NCR5380_dma_xfer_len(instance, cmd, phase);
1890
1891 if (transfersize) {
1da177e4
LT
1892 len = transfersize;
1893 if (NCR5380_transfer_dma(instance, &phase, &len, (unsigned char **) &cmd->SCp.ptr)) {
1894 /*
1895 * If the watchdog timer fires, all future accesses to this
1896 * device will use the polled-IO.
1897 */
017560fc
JG
1898 scmd_printk(KERN_INFO, cmd,
1899 "switching to slow handshake\n");
1da177e4 1900 cmd->device->borken = 1;
1da177e4
LT
1901 sink = 1;
1902 do_abort(instance);
1903 cmd->result = DID_ERROR << 16;
cce99c69 1904 cmd->scsi_done(cmd);
1da177e4
LT
1905 /* XXX - need to source or sink data here, as appropriate */
1906 } else
1907 cmd->SCp.this_residual -= transfersize - len;
1908 } else
1909#endif /* defined(PSEUDO_DMA) || defined(REAL_DMA_POLL) */
1910 NCR5380_transfer_pio(instance, &phase, (int *) &cmd->SCp.this_residual, (unsigned char **)
1911 &cmd->SCp.ptr);
1912 break;
1913 case PHASE_MSGIN:
1914 len = 1;
1915 data = &tmp;
1916 NCR5380_transfer_pio(instance, &phase, &len, &data);
1917 cmd->SCp.Message = tmp;
1918
1919 switch (tmp) {
1da177e4
LT
1920 case ABORT:
1921 case COMMAND_COMPLETE:
1922 /* Accept message by clearing ACK */
1923 sink = 1;
1924 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1925 hostdata->connected = NULL;
9cb78c16
HR
1926 dprintk(NDEBUG_QUEUES, "scsi%d : command for target %d, lun %llu completed\n", instance->host_no, cmd->device->id, cmd->device->lun);
1927 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xFF));
1da177e4
LT
1928
1929 /*
1930 * I'm not sure what the correct thing to do here is :
1931 *
1932 * If the command that just executed is NOT a request
1933 * sense, the obvious thing to do is to set the result
1934 * code to the values of the stored parameters.
1935 *
1936 * If it was a REQUEST SENSE command, we need some way
1937 * to differentiate between the failure code of the original
1938 * and the failure code of the REQUEST sense - the obvious
1939 * case is success, where we fall through and leave the result
1940 * code unchanged.
1941 *
1942 * The non-obvious place is where the REQUEST SENSE failed
1943 */
1944
1945 if (cmd->cmnd[0] != REQUEST_SENSE)
1946 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
1947 else if (status_byte(cmd->SCp.Status) != GOOD)
1948 cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16);
1949
28424d3a
BH
1950 if ((cmd->cmnd[0] == REQUEST_SENSE) &&
1951 hostdata->ses.cmd_len) {
1952 scsi_eh_restore_cmnd(cmd, &hostdata->ses);
1953 hostdata->ses.cmd_len = 0 ;
1954 }
1955
1da177e4 1956 if ((cmd->cmnd[0] != REQUEST_SENSE) && (status_byte(cmd->SCp.Status) == CHECK_CONDITION)) {
28424d3a
BH
1957 scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0);
1958
52a6a1cb 1959 dprintk(NDEBUG_AUTOSENSE, "scsi%d : performing request sense\n", instance->host_no);
1da177e4
LT
1960
1961 LIST(cmd, hostdata->issue_queue);
1962 cmd->host_scribble = (unsigned char *)
1963 hostdata->issue_queue;
710ddd0d 1964 hostdata->issue_queue = (struct scsi_cmnd *) cmd;
52a6a1cb 1965 dprintk(NDEBUG_QUEUES, "scsi%d : REQUEST SENSE added to head of issue queue\n", instance->host_no);
997acab7 1966 } else {
1da177e4
LT
1967 cmd->scsi_done(cmd);
1968 }
1969
1970 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1971 /*
1972 * Restore phase bits to 0 so an interrupted selection,
1973 * arbitration can resume.
1974 */
1975 NCR5380_write(TARGET_COMMAND_REG, 0);
1976
1977 while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
1978 barrier();
1979 return;
1980 case MESSAGE_REJECT:
1981 /* Accept message by clearing ACK */
1982 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1983 switch (hostdata->last_message) {
1984 case HEAD_OF_QUEUE_TAG:
1985 case ORDERED_QUEUE_TAG:
1986 case SIMPLE_QUEUE_TAG:
1987 cmd->device->simple_tags = 0;
9cb78c16 1988 hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
1da177e4
LT
1989 break;
1990 default:
1991 break;
1992 }
1993 case DISCONNECT:{
1994 /* Accept message by clearing ACK */
1995 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1da177e4
LT
1996 LIST(cmd, hostdata->disconnected_queue);
1997 cmd->host_scribble = (unsigned char *)
1998 hostdata->disconnected_queue;
1999 hostdata->connected = NULL;
2000 hostdata->disconnected_queue = cmd;
9cb78c16 2001 dprintk(NDEBUG_QUEUES, "scsi%d : command for target %d lun %llu was moved from connected to" " the disconnected_queue\n", instance->host_no, cmd->device->id, cmd->device->lun);
1da177e4
LT
2002 /*
2003 * Restore phase bits to 0 so an interrupted selection,
2004 * arbitration can resume.
2005 */
2006 NCR5380_write(TARGET_COMMAND_REG, 0);
2007
2008 /* Enable reselect interrupts */
2009 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
2010 /* Wait for bus free to avoid nasty timeouts - FIXME timeout !*/
2011 /* NCR538_poll_politely(instance, STATUS_REG, SR_BSY, 0, 30 * HZ); */
2012 while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
2013 barrier();
2014 return;
2015 }
2016 /*
2017 * The SCSI data pointer is *IMPLICITLY* saved on a disconnect
2018 * operation, in violation of the SCSI spec so we can safely
2019 * ignore SAVE/RESTORE pointers calls.
2020 *
2021 * Unfortunately, some disks violate the SCSI spec and
2022 * don't issue the required SAVE_POINTERS message before
2023 * disconnecting, and we have to break spec to remain
2024 * compatible.
2025 */
2026 case SAVE_POINTERS:
2027 case RESTORE_POINTERS:
2028 /* Accept message by clearing ACK */
2029 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2030 break;
2031 case EXTENDED_MESSAGE:
2032/*
2033 * Extended messages are sent in the following format :
2034 * Byte
2035 * 0 EXTENDED_MESSAGE == 1
2036 * 1 length (includes one byte for code, doesn't
2037 * include first two bytes)
2038 * 2 code
2039 * 3..length+1 arguments
2040 *
2041 * Start the extended message buffer with the EXTENDED_MESSAGE
1abfd370 2042 * byte, since spi_print_msg() wants the whole thing.
1da177e4
LT
2043 */
2044 extended_msg[0] = EXTENDED_MESSAGE;
2045 /* Accept first byte by clearing ACK */
2046 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
52a6a1cb 2047 dprintk(NDEBUG_EXTENDED, "scsi%d : receiving extended message\n", instance->host_no);
1da177e4
LT
2048
2049 len = 2;
2050 data = extended_msg + 1;
2051 phase = PHASE_MSGIN;
2052 NCR5380_transfer_pio(instance, &phase, &len, &data);
2053
52a6a1cb 2054 dprintk(NDEBUG_EXTENDED, "scsi%d : length=%d, code=0x%02x\n", instance->host_no, (int) extended_msg[1], (int) extended_msg[2]);
1da177e4
LT
2055
2056 if (!len && extended_msg[1] <= (sizeof(extended_msg) - 1)) {
2057 /* Accept third byte by clearing ACK */
2058 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2059 len = extended_msg[1] - 1;
2060 data = extended_msg + 3;
2061 phase = PHASE_MSGIN;
2062
2063 NCR5380_transfer_pio(instance, &phase, &len, &data);
52a6a1cb 2064 dprintk(NDEBUG_EXTENDED, "scsi%d : message received, residual %d\n", instance->host_no, len);
1da177e4
LT
2065
2066 switch (extended_msg[2]) {
2067 case EXTENDED_SDTR:
2068 case EXTENDED_WDTR:
2069 case EXTENDED_MODIFY_DATA_POINTER:
2070 case EXTENDED_EXTENDED_IDENTIFY:
2071 tmp = 0;
2072 }
2073 } else if (len) {
2074 printk("scsi%d: error receiving extended message\n", instance->host_no);
2075 tmp = 0;
2076 } else {
2077 printk("scsi%d: extended message code %02x length %d is too long\n", instance->host_no, extended_msg[2], extended_msg[1]);
2078 tmp = 0;
2079 }
2080 /* Fall through to reject message */
2081
2082 /*
2083 * If we get something weird that we aren't expecting,
2084 * reject it.
2085 */
2086 default:
2087 if (!tmp) {
2088 printk("scsi%d: rejecting message ", instance->host_no);
1abfd370 2089 spi_print_msg(extended_msg);
1da177e4
LT
2090 printk("\n");
2091 } else if (tmp != EXTENDED_MESSAGE)
017560fc
JG
2092 scmd_printk(KERN_INFO, cmd,
2093 "rejecting unknown message %02x\n",tmp);
1da177e4 2094 else
017560fc
JG
2095 scmd_printk(KERN_INFO, cmd,
2096 "rejecting unknown extended message code %02x, length %d\n", extended_msg[1], extended_msg[0]);
1da177e4
LT
2097
2098 msgout = MESSAGE_REJECT;
2099 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
2100 break;
2101 } /* switch (tmp) */
2102 break;
2103 case PHASE_MSGOUT:
2104 len = 1;
2105 data = &msgout;
2106 hostdata->last_message = msgout;
2107 NCR5380_transfer_pio(instance, &phase, &len, &data);
2108 if (msgout == ABORT) {
9cb78c16 2109 hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xFF));
1da177e4
LT
2110 hostdata->connected = NULL;
2111 cmd->result = DID_ERROR << 16;
1da177e4
LT
2112 cmd->scsi_done(cmd);
2113 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
2114 return;
2115 }
2116 msgout = NOP;
2117 break;
2118 case PHASE_CMDOUT:
2119 len = cmd->cmd_len;
2120 data = cmd->cmnd;
2121 /*
2122 * XXX for performance reasons, on machines with a
2123 * PSEUDO-DMA architecture we should probably
2124 * use the dma transfer function.
2125 */
2126 NCR5380_transfer_pio(instance, &phase, &len, &data);
1da177e4
LT
2127 break;
2128 case PHASE_STATIN:
2129 len = 1;
2130 data = &tmp;
2131 NCR5380_transfer_pio(instance, &phase, &len, &data);
2132 cmd->SCp.Status = tmp;
2133 break;
2134 default:
2135 printk("scsi%d : unknown phase\n", instance->host_no);
4dde8f7d 2136 NCR5380_dprint(NDEBUG_ANY, instance);
1da177e4 2137 } /* switch(phase) */
686f3990
FT
2138 } else {
2139 spin_unlock_irq(instance->host_lock);
2140 NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, SR_REQ, HZ);
2141 spin_lock_irq(instance->host_lock);
1da177e4
LT
2142 }
2143 } /* while (1) */
2144}
2145
2146/*
2147 * Function : void NCR5380_reselect (struct Scsi_Host *instance)
2148 *
2149 * Purpose : does reselection, initializing the instance->connected
710ddd0d 2150 * field to point to the scsi_cmnd for which the I_T_L or I_T_L_Q
1da177e4
LT
2151 * nexus has been reestablished,
2152 *
2153 * Inputs : instance - this instance of the NCR5380.
2154 *
2155 * Locks: io_request_lock held by caller if IRQ driven
2156 */
2157
2158static void NCR5380_reselect(struct Scsi_Host *instance) {
1da177e4
LT
2159 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)
2160 instance->hostdata;
2161 unsigned char target_mask;
2162 unsigned char lun, phase;
2163 int len;
2164 unsigned char msg[3];
2165 unsigned char *data;
710ddd0d 2166 struct scsi_cmnd *tmp = NULL, *prev;
1da177e4 2167 int abort = 0;
1da177e4
LT
2168
2169 /*
2170 * Disable arbitration, etc. since the host adapter obviously
2171 * lost, and tell an interrupted NCR5380_select() to restart.
2172 */
2173
2174 NCR5380_write(MODE_REG, MR_BASE);
1da177e4
LT
2175
2176 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
52a6a1cb 2177 dprintk(NDEBUG_SELECTION, "scsi%d : reselect\n", instance->host_no);
1da177e4
LT
2178
2179 /*
2180 * At this point, we have detected that our SCSI ID is on the bus,
2181 * SEL is true and BSY was false for at least one bus settle delay
2182 * (400 ns).
2183 *
2184 * We must assert BSY ourselves, until the target drops the SEL
2185 * signal.
2186 */
2187
2188 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY);
2189
2190 /* FIXME: timeout too long, must fail to workqueue */
2191 if(NCR5380_poll_politely(instance, STATUS_REG, SR_SEL, 0, 2*HZ)<0)
2192 abort = 1;
2193
2194 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2195
2196 /*
2197 * Wait for target to go into MSGIN.
2198 * FIXME: timeout needed and fail to work queeu
2199 */
2200
2201 if(NCR5380_poll_politely(instance, STATUS_REG, SR_REQ, SR_REQ, 2*HZ))
2202 abort = 1;
2203
2204 len = 1;
2205 data = msg;
2206 phase = PHASE_MSGIN;
2207 NCR5380_transfer_pio(instance, &phase, &len, &data);
2208
2209 if (!(msg[0] & 0x80)) {
2210 printk(KERN_ERR "scsi%d : expecting IDENTIFY message, got ", instance->host_no);
1abfd370 2211 spi_print_msg(msg);
1da177e4
LT
2212 abort = 1;
2213 } else {
2214 /* Accept message by clearing ACK */
2215 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2216 lun = (msg[0] & 0x07);
2217
2218 /*
2219 * We need to add code for SCSI-II to track which devices have
2220 * I_T_L_Q nexuses established, and which have simple I_T_L
2221 * nexuses so we can chose to do additional data transfer.
2222 */
2223
2224 /*
2225 * Find the command corresponding to the I_T_L or I_T_L_Q nexus we
2226 * just reestablished, and remove it from the disconnected queue.
2227 */
2228
2229
710ddd0d 2230 for (tmp = (struct scsi_cmnd *) hostdata->disconnected_queue, prev = NULL; tmp; prev = tmp, tmp = (struct scsi_cmnd *) tmp->host_scribble)
9cb78c16 2231 if ((target_mask == (1 << tmp->device->id)) && (lun == (u8)tmp->device->lun)
1da177e4
LT
2232 ) {
2233 if (prev) {
2234 REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
2235 prev->host_scribble = tmp->host_scribble;
2236 } else {
2237 REMOVE(-1, hostdata->disconnected_queue, tmp, tmp->host_scribble);
710ddd0d 2238 hostdata->disconnected_queue = (struct scsi_cmnd *) tmp->host_scribble;
1da177e4
LT
2239 }
2240 tmp->host_scribble = NULL;
2241 break;
2242 }
2243 if (!tmp) {
2244 printk(KERN_ERR "scsi%d : warning : target bitmask %02x lun %d not in disconnect_queue.\n", instance->host_no, target_mask, lun);
2245 /*
2246 * Since we have an established nexus that we can't do anything with,
2247 * we must abort it.
2248 */
2249 abort = 1;
2250 }
2251 }
2252
2253 if (abort) {
2254 do_abort(instance);
2255 } else {
2256 hostdata->connected = tmp;
9cb78c16 2257 dprintk(NDEBUG_RESELECTION, "scsi%d : nexus established, target = %d, lun = %llu, tag = %d\n", instance->host_no, tmp->device->id, tmp->device->lun, tmp->tag);
1da177e4
LT
2258 }
2259}
2260
2261/*
2262 * Function : void NCR5380_dma_complete (struct Scsi_Host *instance)
2263 *
2264 * Purpose : called by interrupt handler when DMA finishes or a phase
2265 * mismatch occurs (which would finish the DMA transfer).
2266 *
2267 * Inputs : instance - this instance of the NCR5380.
2268 *
710ddd0d 2269 * Returns : pointer to the scsi_cmnd structure for which the I_T_L
1da177e4
LT
2270 * nexus has been reestablished, on failure NULL is returned.
2271 */
2272
2273#ifdef REAL_DMA
2274static void NCR5380_dma_complete(NCR5380_instance * instance) {
f8343685 2275 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1da177e4 2276 int transferred;
1da177e4
LT
2277
2278 /*
2279 * XXX this might not be right.
2280 *
2281 * Wait for final byte to transfer, ie wait for ACK to go false.
2282 *
2283 * We should use the Last Byte Sent bit, unfortunately this is
2284 * not available on the 5380/5381 (only the various CMOS chips)
2285 *
2286 * FIXME: timeout, and need to handle long timeout/irq case
2287 */
2288
2289 NCR5380_poll_politely(instance, BUS_AND_STATUS_REG, BASR_ACK, 0, 5*HZ);
2290
2291 NCR5380_write(MODE_REG, MR_BASE);
2292 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2293
2294 /*
2295 * The only places we should see a phase mismatch and have to send
2296 * data from the same set of pointers will be the data transfer
2297 * phases. So, residual, requested length are only important here.
2298 */
2299
2300 if (!(hostdata->connected->SCp.phase & SR_CD)) {
2301 transferred = instance->dmalen - NCR5380_dma_residual();
2302 hostdata->connected->SCp.this_residual -= transferred;
2303 hostdata->connected->SCp.ptr += transferred;
2304 }
2305}
2306#endif /* def REAL_DMA */
2307
2308/*
710ddd0d 2309 * Function : int NCR5380_abort (struct scsi_cmnd *cmd)
1da177e4
LT
2310 *
2311 * Purpose : abort a command
2312 *
710ddd0d 2313 * Inputs : cmd - the scsi_cmnd to abort, code - code to set the
b6c92b7e 2314 * host byte of the result field to, if zero DID_ABORTED is
1da177e4
LT
2315 * used.
2316 *
b6c92b7e 2317 * Returns : SUCCESS - success, FAILED on failure.
1da177e4 2318 *
b6c92b7e
HR
2319 * XXX - there is no way to abort the command that is currently
2320 * connected, you have to wait for it to complete. If this is
1da177e4
LT
2321 * a problem, we could implement longjmp() / setjmp(), setjmp()
2322 * called where the loop started in NCR5380_main().
2323 *
2324 * Locks: host lock taken by caller
2325 */
2326
710ddd0d
FT
2327static int NCR5380_abort(struct scsi_cmnd *cmd)
2328{
1da177e4
LT
2329 struct Scsi_Host *instance = cmd->device->host;
2330 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
710ddd0d 2331 struct scsi_cmnd *tmp, **prev;
1fa6b5fb
HR
2332
2333 scmd_printk(KERN_WARNING, cmd, "aborting command\n");
1da177e4 2334
9dafbd93 2335 spin_lock_irq(instance->host_lock);
1da177e4
LT
2336 NCR5380_print_status(instance);
2337
52a6a1cb
FT
2338 dprintk(NDEBUG_ABORT, "scsi%d : abort called\n", instance->host_no);
2339 dprintk(NDEBUG_ABORT, " basr 0x%X, sr 0x%X\n", NCR5380_read(BUS_AND_STATUS_REG), NCR5380_read(STATUS_REG));
1da177e4
LT
2340
2341#if 0
2342/*
2343 * Case 1 : If the command is the currently executing command,
2344 * we'll set the aborted flag and return control so that
2345 * information transfer routine can exit cleanly.
2346 */
2347
2348 if (hostdata->connected == cmd) {
52a6a1cb 2349 dprintk(NDEBUG_ABORT, "scsi%d : aborting connected command\n", instance->host_no);
1da177e4
LT
2350/*
2351 * We should perform BSY checking, and make sure we haven't slipped
2352 * into BUS FREE.
2353 */
2354
2355 NCR5380_write(INITIATOR_COMMAND_REG, ICR_ASSERT_ATN);
2356/*
2357 * Since we can't change phases until we've completed the current
2358 * handshake, we have to source or sink a byte of data if the current
2359 * phase is not MSGOUT.
2360 */
2361
2362/*
2363 * Return control to the executing NCR drive so we can clear the
2364 * aborted flag and get back into our main loop.
2365 */
2366
b6c92b7e 2367 return SUCCESS;
1da177e4
LT
2368 }
2369#endif
2370
2371/*
2372 * Case 2 : If the command hasn't been issued yet, we simply remove it
2373 * from the issue queue.
2374 */
2375
52a6a1cb 2376 dprintk(NDEBUG_ABORT, "scsi%d : abort going into loop.\n", instance->host_no);
710ddd0d 2377 for (prev = (struct scsi_cmnd **) &(hostdata->issue_queue), tmp = (struct scsi_cmnd *) hostdata->issue_queue; tmp; prev = (struct scsi_cmnd **) &(tmp->host_scribble), tmp = (struct scsi_cmnd *) tmp->host_scribble)
1da177e4
LT
2378 if (cmd == tmp) {
2379 REMOVE(5, *prev, tmp, tmp->host_scribble);
710ddd0d 2380 (*prev) = (struct scsi_cmnd *) tmp->host_scribble;
1da177e4 2381 tmp->host_scribble = NULL;
9dafbd93 2382 spin_unlock_irq(instance->host_lock);
1da177e4 2383 tmp->result = DID_ABORT << 16;
52a6a1cb 2384 dprintk(NDEBUG_ABORT, "scsi%d : abort removed command from issue queue.\n", instance->host_no);
cce99c69 2385 tmp->scsi_done(tmp);
1da177e4
LT
2386 return SUCCESS;
2387 }
2388#if (NDEBUG & NDEBUG_ABORT)
2389 /* KLL */
2390 else if (prev == tmp)
2391 printk(KERN_ERR "scsi%d : LOOP\n", instance->host_no);
2392#endif
2393
2394/*
2395 * Case 3 : If any commands are connected, we're going to fail the abort
2396 * and let the high level SCSI driver retry at a later time or
2397 * issue a reset.
2398 *
2399 * Timeouts, and therefore aborted commands, will be highly unlikely
2400 * and handling them cleanly in this situation would make the common
2401 * case of noresets less efficient, and would pollute our code. So,
2402 * we fail.
2403 */
2404
2405 if (hostdata->connected) {
9dafbd93 2406 spin_unlock_irq(instance->host_lock);
52a6a1cb 2407 dprintk(NDEBUG_ABORT, "scsi%d : abort failed, command connected.\n", instance->host_no);
1da177e4
LT
2408 return FAILED;
2409 }
2410/*
2411 * Case 4: If the command is currently disconnected from the bus, and
2412 * there are no connected commands, we reconnect the I_T_L or
2413 * I_T_L_Q nexus associated with it, go into message out, and send
2414 * an abort message.
2415 *
2416 * This case is especially ugly. In order to reestablish the nexus, we
2417 * need to call NCR5380_select(). The easiest way to implement this
2418 * function was to abort if the bus was busy, and let the interrupt
2419 * handler triggered on the SEL for reselect take care of lost arbitrations
2420 * where necessary, meaning interrupts need to be enabled.
2421 *
2422 * When interrupts are enabled, the queues may change - so we
2423 * can't remove it from the disconnected queue before selecting it
2424 * because that could cause a failure in hashing the nexus if that
2425 * device reselected.
2426 *
2427 * Since the queues may change, we can't use the pointers from when we
2428 * first locate it.
2429 *
2430 * So, we must first locate the command, and if NCR5380_select()
2431 * succeeds, then issue the abort, relocate the command and remove
2432 * it from the disconnected queue.
2433 */
2434
710ddd0d 2435 for (tmp = (struct scsi_cmnd *) hostdata->disconnected_queue; tmp; tmp = (struct scsi_cmnd *) tmp->host_scribble)
1da177e4 2436 if (cmd == tmp) {
52a6a1cb 2437 dprintk(NDEBUG_ABORT, "scsi%d : aborting disconnected command.\n", instance->host_no);
1da177e4 2438
9dafbd93
FT
2439 if (NCR5380_select(instance, cmd)) {
2440 spin_unlock_irq(instance->host_lock);
1da177e4 2441 return FAILED;
9dafbd93 2442 }
52a6a1cb 2443 dprintk(NDEBUG_ABORT, "scsi%d : nexus reestablished.\n", instance->host_no);
1da177e4
LT
2444
2445 do_abort(instance);
2446
710ddd0d 2447 for (prev = (struct scsi_cmnd **) &(hostdata->disconnected_queue), tmp = (struct scsi_cmnd *) hostdata->disconnected_queue; tmp; prev = (struct scsi_cmnd **) &(tmp->host_scribble), tmp = (struct scsi_cmnd *) tmp->host_scribble)
1da177e4
LT
2448 if (cmd == tmp) {
2449 REMOVE(5, *prev, tmp, tmp->host_scribble);
710ddd0d 2450 *prev = (struct scsi_cmnd *) tmp->host_scribble;
1da177e4 2451 tmp->host_scribble = NULL;
9dafbd93 2452 spin_unlock_irq(instance->host_lock);
1da177e4 2453 tmp->result = DID_ABORT << 16;
cce99c69 2454 tmp->scsi_done(tmp);
1da177e4
LT
2455 return SUCCESS;
2456 }
2457 }
2458/*
2459 * Case 5 : If we reached this point, the command was not found in any of
2460 * the queues.
2461 *
2462 * We probably reached this point because of an unlikely race condition
2463 * between the command completing successfully and the abortion code,
2464 * so we won't panic, but we will notify the user in case something really
2465 * broke.
2466 */
9dafbd93 2467 spin_unlock_irq(instance->host_lock);
1da177e4
LT
2468 printk(KERN_WARNING "scsi%d : warning : SCSI command probably completed successfully\n"
2469 " before abortion\n", instance->host_no);
2470 return FAILED;
2471}
2472
2473
3be1b3ea
FT
2474/**
2475 * NCR5380_bus_reset - reset the SCSI bus
2476 * @cmd: SCSI command undergoing EH
1da177e4 2477 *
3be1b3ea 2478 * Returns SUCCESS
1da177e4
LT
2479 */
2480
710ddd0d 2481static int NCR5380_bus_reset(struct scsi_cmnd *cmd)
68b3aa7c
JG
2482{
2483 struct Scsi_Host *instance = cmd->device->host;
2484
3be1b3ea
FT
2485 spin_lock_irq(instance->host_lock);
2486
2487#if (NDEBUG & NDEBUG_ANY)
2488 scmd_printk(KERN_INFO, cmd, "performing bus reset\n");
68b3aa7c 2489 NCR5380_print_status(instance);
3be1b3ea 2490#endif
68b3aa7c 2491
68b3aa7c 2492 do_reset(instance);
3be1b3ea 2493
68b3aa7c 2494 spin_unlock_irq(instance->host_lock);
1da177e4 2495
1da177e4
LT
2496 return SUCCESS;
2497}