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