1 #ifndef NDEBUG
2 #define NDEBUG (NDEBUG_RESTART_SELECT | NDEBUG_ABORT)
3 #endif
4 /*
5 * NCR 5380 generic driver routines. These should make it *trivial*
6 * to implement 5380 SCSI drivers under Linux with a non-trantor
7 * architecture.
8 *
9 * Note that these routines also work with NR53c400 family chips.
10 *
11 * Copyright 1993, Drew Eckhardt
12 * Visionary Computing
13 * (Unix and Linux consulting and custom programming)
14 * drew@colorado.edu
15 * +1 (303) 666-5836
16 *
17 * DISTRIBUTION RELEASE 6.
18 *
19 * For more information, please consult
20 *
21 * NCR 5380 Family
22 * SCSI Protocol Controller
23 * Databook
24 *
25 * NCR Microelectronics
26 * 1635 Aeroplaza Drive
27 * Colorado Springs, CO 80916
28 * 1+ (719) 578-3400
29 * 1+ (800) 334-5454
30 */
31
32 /*
33 * $Log: NCR5380.c,v $
34
35 * Revision 1.10 1998/9/2 Alan Cox
36 * (alan@redhat.com)
37 * Fixed up the timer lockups reported so far. Things still suck. Looking
38 * forward to 2.3 and per device request queues. Then it'll be possible to
39 * SMP thread this beast and improve life no end.
40
41 * Revision 1.9 1997/7/27 Ronald van Cuijlenborg
42 * (ronald.van.cuijlenborg@tip.nl or nutty@dds.nl)
43 * (hopefully) fixed and enhanced USLEEP
44 * added support for DTC3181E card (for Mustek scanner)
45 *
46
47 * Revision 1.8 Ingmar Baumgart
48 * (ingmar@gonzo.schwaben.de)
49 * added support for NCR53C400a card
50 *
51
52 * Revision 1.7 1996/3/2 Ray Van Tassle (rayvt@comm.mot.com)
53 * added proc_info
54 * added support needed for DTC 3180/3280
55 * fixed a couple of bugs
56 *
57
58 * Revision 1.5 1994/01/19 09:14:57 drew
59 * Fixed udelay() hack that was being used on DATAOUT phases
60 * instead of a proper wait for the final handshake.
61 *
62 * Revision 1.4 1994/01/19 06:44:25 drew
63 * *** empty log message ***
64 *
65 * Revision 1.3 1994/01/19 05:24:40 drew
66 * Added support for TCR LAST_BYTE_SENT bit.
67 *
68 * Revision 1.2 1994/01/15 06:14:11 drew
69 * REAL DMA support, bug fixes.
70 *
71 * Revision 1.1 1994/01/15 06:00:54 drew
72 * Initial revision
73 *
74 */
75
76 /*
77 * Further development / testing that should be done :
78 * 1. Cleanup the NCR5380_transfer_dma function and DMA operation complete
79 * code so that everything does the same thing that's done at the
80 * end of a pseudo-DMA read operation.
81 *
82 * 2. Fix REAL_DMA (interrupt driven, polled works fine) -
83 * basically, transfer size needs to be reduced by one
84 * and the last byte read as is done with PSEUDO_DMA.
85 *
86 * 4. Test SCSI-II tagged queueing (I have no devices which support
87 * tagged queueing)
88 *
89 * 5. Test linked command handling code after Eric is ready with
90 * the high level code.
91 */
92
93 #if (NDEBUG & NDEBUG_LISTS)
94 #define LIST(x,y) {printk("LINE:%d Adding %p to %p\n", __LINE__, (void*)(x), (void*)(y)); if ((x)==(y)) udelay(5); }
95 #define REMOVE(w,x,y,z) {printk("LINE:%d Removing: %p->%p %p->%p \n", __LINE__, (void*)(w), (void*)(x), (void*)(y), (void*)(z)); if ((x)==(y)) udelay(5); }
96 #else
97 #define LIST(x,y)
98 #define REMOVE(w,x,y,z)
99 #endif
100
101 #ifndef notyet
102 #undef LINKED
103 #undef REAL_DMA
104 #endif
105
106 #ifdef REAL_DMA_POLL
107 #undef READ_OVERRUNS
108 #define READ_OVERRUNS
109 #endif
110
111 #ifdef BOARD_REQUIRES_NO_DELAY
112 #define io_recovery_delay(x)
113 #else
114 #define io_recovery_delay(x) udelay(x)
115 #endif
116
117 /*
118 * Design
119 * Issues :
120 *
121 * The other Linux SCSI drivers were written when Linux was Intel PC-only,
122 * and specifically for each board rather than each chip. This makes their
123 * adaptation to platforms like the Mac (Some of which use NCR5380's)
124 * more difficult than it has to be.
125 *
126 * Also, many of the SCSI drivers were written before the command queuing
127 * routines were implemented, meaning their implementations of queued
128 * commands were hacked on rather than designed in from the start.
129 *
130 * When I designed the Linux SCSI drivers I figured that
131 * while having two different SCSI boards in a system might be useful
132 * for debugging things, two of the same type wouldn't be used.
133 * Well, I was wrong and a number of users have mailed me about running
134 * multiple high-performance SCSI boards in a server.
135 *
136 * Finally, when I get questions from users, I have no idea what
137 * revision of my driver they are running.
138 *
139 * This driver attempts to address these problems :
140 * This is a generic 5380 driver. To use it on a different platform,
141 * one simply writes appropriate system specific macros (ie, data
142 * transfer - some PC's will use the I/O bus, 68K's must use
143 * memory mapped) and drops this file in their 'C' wrapper.
144 *
145 * As far as command queueing, two queues are maintained for
146 * each 5380 in the system - commands that haven't been issued yet,
147 * and commands that are currently executing. This means that an
148 * unlimited number of commands may be queued, letting
149 * more commands propagate from the higher driver levels giving higher
150 * throughput. Note that both I_T_L and I_T_L_Q nexuses are supported,
151 * allowing multiple commands to propagate all the way to a SCSI-II device
152 * while a command is already executing.
153 *
154 * To solve the multiple-boards-in-the-same-system problem,
155 * there is a separate instance structure for each instance
156 * of a 5380 in the system. So, multiple NCR5380 drivers will
157 * be able to coexist with appropriate changes to the high level
158 * SCSI code.
159 *
160 * A NCR5380_PUBLIC_REVISION macro is provided, with the release
161 * number (updated for each public release) printed by the
162 * NCR5380_print_options command, which should be called from the
163 * wrapper detect function, so that I know what release of the driver
164 * users are using.
165 *
166 * Issues specific to the NCR5380 :
167 *
168 * When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
169 * piece of hardware that requires you to sit in a loop polling for
170 * the REQ signal as long as you are connected. Some devices are
171 * brain dead (ie, many TEXEL CD ROM drives) and won't disconnect
172 * while doing long seek operations.
173 *
174 * The workaround for this is to keep track of devices that have
175 * disconnected. If the device hasn't disconnected, for commands that
176 * should disconnect, we do something like
177 *
178 * while (!REQ is asserted) { sleep for N usecs; poll for M usecs }
179 *
180 * Some tweaking of N and M needs to be done. An algorithm based
181 * on "time to data" would give the best results as long as short time
182 * to datas (ie, on the same track) were considered, however these
183 * broken devices are the exception rather than the rule and I'd rather
184 * spend my time optimizing for the normal case.
185 *
186 * Architecture :
187 *
188 * At the heart of the design is a coroutine, NCR5380_main,
189 * which is started when not running by the interrupt handler,
190 * timer, and queue command function. It attempts to establish
191 * I_T_L or I_T_L_Q nexuses by removing the commands from the
192 * issue queue and calling NCR5380_select() if a nexus
193 * is not established.
194 *
195 * Once a nexus is established, the NCR5380_information_transfer()
196 * phase goes through the various phases as instructed by the target.
197 * if the target goes into MSG IN and sends a DISCONNECT message,
198 * the command structure is placed into the per instance disconnected
199 * queue, and NCR5380_main tries to find more work. If the target is
200 * idle for too long, the system will try to sleep.
201 *
202 * If a command has disconnected, eventually an interrupt will trigger,
203 * calling NCR5380_intr() which will in turn call NCR5380_reselect
204 * to reestablish a nexus. This will run main if necessary.
205 *
206 * On command termination, the done function will be called as
207 * appropriate.
208 *
209 * SCSI pointers are maintained in the SCp field of SCSI command
210 * structures, being initialized after the command is connected
211 * in NCR5380_select, and set as appropriate in NCR5380_information_transfer.
212 * Note that in violation of the standard, an implicit SAVE POINTERS operation
213 * is done, since some BROKEN disks fail to issue an explicit SAVE POINTERS.
214 */
215
216 /*
217 * Using this file :
218 * This file a skeleton Linux SCSI driver for the NCR 5380 series
219 * of chips. To use it, you write an architecture specific functions
220 * and macros and include this file in your driver.
221 *
222 * These macros control options :
223 * AUTOPROBE_IRQ - if defined, the NCR5380_probe_irq() function will be
224 * defined.
225 *
226 * AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
227 * for commands that return with a CHECK CONDITION status.
228 *
229 * DIFFERENTIAL - if defined, NCR53c81 chips will use external differential
230 * transceivers.
231 *
232 * DONT_USE_INTR - if defined, never use interrupts, even if we probe or
233 * override-configure an IRQ.
234 *
235 * LIMIT_TRANSFERSIZE - if defined, limit the pseudo-dma transfers to 512
236 * bytes at a time. Since interrupts are disabled by default during
237 * these transfers, we might need this to give reasonable interrupt
238 * service time if the transfer size gets too large.
239 *
240 * LINKED - if defined, linked commands are supported.
241 *
242 * PSEUDO_DMA - if defined, PSEUDO DMA is used during the data transfer phases.
243 *
244 * REAL_DMA - if defined, REAL DMA is used during the data transfer phases.
245 *
246 * REAL_DMA_POLL - if defined, REAL DMA is used but the driver doesn't
247 * rely on phase mismatch and EOP interrupts to determine end
248 * of phase.
249 *
250 * UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You
251 * only really want to use this if you're having a problem with
252 * dropped characters during high speed communications, and even
253 * then, you're going to be better off twiddling with transfersize
254 * in the high level code.
255 *
256 * Defaults for these will be provided although the user may want to adjust
257 * these to allocate CPU resources to the SCSI driver or "real" code.
258 *
259 * USLEEP_SLEEP - amount of time, in jiffies, to sleep
260 *
261 * USLEEP_POLL - amount of time, in jiffies, to poll
262 *
263 * These macros MUST be defined :
264 * NCR5380_local_declare() - declare any local variables needed for your
265 * transfer routines.
266 *
267 * NCR5380_setup(instance) - initialize any local variables needed from a given
268 * instance of the host adapter for NCR5380_{read,write,pread,pwrite}
269 *
270 * NCR5380_read(register) - read from the specified register
271 *
272 * NCR5380_write(register, value) - write to the specific register
273 *
274 * NCR5380_implementation_fields - additional fields needed for this
275 * specific implementation of the NCR5380
276 *
277 * Either real DMA *or* pseudo DMA may be implemented
278 * REAL functions :
279 * NCR5380_REAL_DMA should be defined if real DMA is to be used.
280 * Note that the DMA setup functions should return the number of bytes
281 * that they were able to program the controller for.
282 *
283 * Also note that generic i386/PC versions of these macros are
284 * available as NCR5380_i386_dma_write_setup,
285 * NCR5380_i386_dma_read_setup, and NCR5380_i386_dma_residual.
286 *
287 * NCR5380_dma_write_setup(instance, src, count) - initialize
288 * NCR5380_dma_read_setup(instance, dst, count) - initialize
289 * NCR5380_dma_residual(instance); - residual count
290 *
291 * PSEUDO functions :
292 * NCR5380_pwrite(instance, src, count)
293 * NCR5380_pread(instance, dst, count);
294 *
295 * If nothing specific to this implementation needs doing (ie, with external
296 * hardware), you must also define
297 *
298 * NCR5380_queue_command
299 * NCR5380_reset
300 * NCR5380_abort
301 * NCR5380_proc_info
302 *
303 * to be the global entry points into the specific driver, ie
304 * #define NCR5380_queue_command t128_queue_command.
305 *
306 * If this is not done, the routines will be defined as static functions
307 * with the NCR5380* names and the user must provide a globally
308 * accessible wrapper function.
309 *
310 * The generic driver is initialized by calling NCR5380_init(instance),
311 * after setting the appropriate host specific fields and ID. If the
312 * driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
313 * possible) function may be used. Before the specific driver initialization
314 * code finishes, NCR5380_print_options should be called.
315 */
316
317 static int do_abort(struct Scsi_Host *host);
318 static void do_reset(struct Scsi_Host *host);
319 static struct Scsi_Host *first_instance = NULL;
320 static Scsi_Host_Template *the_template = NULL;
321 static struct timer_list usleep_timer;
322
323 /*
324 * initialize_SCp - init the scsi pointer field
325 * @cmd: command block to set up
326 *
327 * Set up the internal fields in the SCSI command.
328 */
329
initialize_SCp(Scsi_Cmnd * cmd)330 static __inline__ void initialize_SCp(Scsi_Cmnd * cmd)
331 {
332 /*
333 * Initialize the Scsi Pointer field so that all of the commands in the
334 * various queues are valid.
335 */
336
337 if (cmd->use_sg) {
338 cmd->SCp.buffer = (struct scatterlist *) cmd->buffer;
339 cmd->SCp.buffers_residual = cmd->use_sg - 1;
340 cmd->SCp.ptr = (char *) cmd->SCp.buffer->address;
341 cmd->SCp.this_residual = cmd->SCp.buffer->length;
342 } else {
343 cmd->SCp.buffer = NULL;
344 cmd->SCp.buffers_residual = 0;
345 cmd->SCp.ptr = (char *) cmd->request_buffer;
346 cmd->SCp.this_residual = cmd->request_bufflen;
347 }
348 }
349
350 #include <linux/delay.h>
351
352 #ifdef NDEBUG
353 static struct {
354 unsigned char mask;
355 const char *name;
356 } signals[] = {
357 {SR_DBP, "PARITY"},
358 {SR_RST, "RST"},
359 {SR_BSY, "BSY"},
360 {SR_REQ, "REQ"},
361 {SR_MSG, "MSG"},
362 {SR_CD, "CD"},
363 {SR_IO, "IO"},
364 {SR_SEL, "SEL"},
365 {0, NULL}
366 },
367 basrs[] = {
368 {BASR_ATN, "ATN"},
369 {BASR_ACK, "ACK"},
370 {0, NULL}
371 },
372 icrs[] = {
373 {ICR_ASSERT_RST, "ASSERT RST"},
374 {ICR_ASSERT_ACK, "ASSERT ACK"},
375 {ICR_ASSERT_BSY, "ASSERT BSY"},
376 {ICR_ASSERT_SEL, "ASSERT SEL"},
377 {ICR_ASSERT_ATN, "ASSERT ATN"},
378 {ICR_ASSERT_DATA, "ASSERT DATA"},
379 {0, NULL}
380 },
381 mrs[] = {
382 {MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"},
383 {MR_TARGET, "MODE TARGET"},
384 {MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"},
385 {MR_ENABLE_PAR_INTR, "MODE PARITY INTR"},
386 {MR_MONITOR_BSY, "MODE MONITOR BSY"},
387 {MR_DMA_MODE, "MODE DMA"},
388 {MR_ARBITRATE, "MODE ARBITRATION"},
389 {0, NULL}
390 };
391
392 /**
393 * NCR5380_print - print scsi bus signals
394 * @instance: adapter state to dump
395 *
396 * Print the SCSI bus signals for debugging purposes
397 *
398 * Locks: none
399 */
400
NCR5380_print(struct Scsi_Host * instance)401 static void NCR5380_print(struct Scsi_Host *instance)
402 {
403 NCR5380_local_declare();
404 unsigned long flags;
405 unsigned char status, data, basr, mr, icr, i;
406 NCR5380_setup(instance);
407 /* FIXME - this needs proper locking */
408 save_flags(flags);
409 cli();
410 data = NCR5380_read(CURRENT_SCSI_DATA_REG);
411 status = NCR5380_read(STATUS_REG);
412 mr = NCR5380_read(MODE_REG);
413 icr = NCR5380_read(INITIATOR_COMMAND_REG);
414 basr = NCR5380_read(BUS_AND_STATUS_REG);
415 restore_flags(flags);
416 printk("STATUS_REG: %02x ", status);
417 for (i = 0; signals[i].mask; ++i)
418 if (status & signals[i].mask)
419 printk(",%s", signals[i].name);
420 printk("\nBASR: %02x ", basr);
421 for (i = 0; basrs[i].mask; ++i)
422 if (basr & basrs[i].mask)
423 printk(",%s", basrs[i].name);
424 printk("\nICR: %02x ", icr);
425 for (i = 0; icrs[i].mask; ++i)
426 if (icr & icrs[i].mask)
427 printk(",%s", icrs[i].name);
428 printk("\nMODE: %02x ", mr);
429 for (i = 0; mrs[i].mask; ++i)
430 if (mr & mrs[i].mask)
431 printk(",%s", mrs[i].name);
432 printk("\n");
433 }
434
435 static struct {
436 unsigned char value;
437 const char *name;
438 } phases[] = {
439 {PHASE_DATAOUT, "DATAOUT"},
440 {PHASE_DATAIN, "DATAIN"},
441 {PHASE_CMDOUT, "CMDOUT"},
442 {PHASE_STATIN, "STATIN"},
443 {PHASE_MSGOUT, "MSGOUT"},
444 {PHASE_MSGIN, "MSGIN"},
445 {PHASE_UNKNOWN, "UNKNOWN"}
446 };
447
448 /*
449 * NCR5380_print_phase - show SCSI phase
450 * @instance: adapter to dump
451 *
452 * Print the current SCSI phase for debugging purposes
453 *
454 * Locks: none
455 */
456
NCR5380_print_phase(struct Scsi_Host * instance)457 static void NCR5380_print_phase(struct Scsi_Host *instance)
458 {
459 NCR5380_local_declare();
460 unsigned char status;
461 int i;
462 NCR5380_setup(instance);
463
464 status = NCR5380_read(STATUS_REG);
465 if (!(status & SR_REQ))
466 printk("scsi%d : REQ not asserted, phase unknown.\n", instance->host_no);
467 else {
468 for (i = 0; (phases[i].value != PHASE_UNKNOWN) && (phases[i].value != (status & PHASE_MASK)); ++i);
469 printk("scsi%d : phase %s\n", instance->host_no, phases[i].name);
470 }
471 }
472 #endif
473
474 /*
475 * We need to have our coroutine active given these constraints :
476 * 1. The mutex flag, main_running, can only be set when the main
477 * routine can actually process data, otherwise SCSI commands
478 * will never get issued.
479 *
480 * 2. NCR5380_main() shouldn't be called before it has exited, because
481 * other drivers have had kernel stack overflows in similar
482 * situations.
483 *
484 * 3. We don't want to inline NCR5380_main() because of space concerns,
485 * even though it is only called in two places.
486 *
487 * So, the solution is to set the mutex in an inline wrapper for the
488 * main coroutine, and have the main coroutine exit with interrupts
489 * disabled after the final search through the queues so that no race
490 * conditions are possible.
491 */
492
493 static unsigned long main_running = 0;
494
495 /*
496 * Function : run_main(void)
497 *
498 * Purpose : insure that the coroutine is running and will process our
499 * request. main_running is checked/set here (in an inline function)
500 * rather than in NCR5380_main itself to reduce the chances of stack
501 * overflow.
502 *
503 */
504
run_main(void)505 static __inline__ void run_main(void)
506 {
507 if (!test_and_set_bit(0, &main_running))
508 NCR5380_main();
509 }
510
511 /*
512 * These need tweaking, and would probably work best as per-device
513 * flags initialized differently for disk, tape, cd, etc devices.
514 * People with broken devices are free to experiment as to what gives
515 * the best results for them.
516 *
517 * USLEEP_SLEEP should be a minimum seek time.
518 *
519 * USLEEP_POLL should be a maximum rotational latency.
520 */
521 #ifndef USLEEP_SLEEP
522 /* 20 ms (reasonable hard disk speed) */
523 #define USLEEP_SLEEP (20*HZ/1000)
524 #endif
525 /* 300 RPM (floppy speed) */
526 #ifndef USLEEP_POLL
527 #define USLEEP_POLL (200*HZ/1000)
528 #endif
529 #ifndef USLEEP_WAITLONG
530 /* RvC: (reasonable time to wait on select error) */
531 #define USLEEP_WAITLONG USLEEP_SLEEP
532 #endif
533
534 static struct Scsi_Host *expires_first = NULL;
535
536 /*
537 * Function : int should_disconnect (unsigned char cmd)
538 *
539 * Purpose : decide weather a command would normally disconnect or
540 * not, since if it won't disconnect we should go to sleep.
541 *
542 * Input : cmd - opcode of SCSI command
543 *
544 * Returns : DISCONNECT_LONG if we should disconnect for a really long
545 * time (ie always, sleep, look for REQ active, sleep),
546 * DISCONNECT_TIME_TO_DATA if we would only disconnect for a normal
547 * time-to-data delay, DISCONNECT_NONE if this command would return
548 * immediately.
549 *
550 * Future sleep algorithms based on time to data can exploit
551 * something like this so they can differentiate between "normal"
552 * (ie, read, write, seek) and unusual commands (ie, * format).
553 *
554 * Note : We don't deal with commands that handle an immediate disconnect,
555 *
556 */
557
should_disconnect(unsigned char cmd)558 static int should_disconnect(unsigned char cmd)
559 {
560 switch (cmd) {
561 case READ_6:
562 case WRITE_6:
563 case SEEK_6:
564 case READ_10:
565 case WRITE_10:
566 case SEEK_10:
567 return DISCONNECT_TIME_TO_DATA;
568 case FORMAT_UNIT:
569 case SEARCH_HIGH:
570 case SEARCH_LOW:
571 case SEARCH_EQUAL:
572 return DISCONNECT_LONG;
573 default:
574 return DISCONNECT_NONE;
575 }
576 }
577
578 /*
579 * Assumes instance->time_expires has been set in higher level code.
580 *
581 * Locks: Caller must hold io_request_lock
582 */
583
NCR5380_set_timer(struct Scsi_Host * instance)584 static int NCR5380_set_timer(struct Scsi_Host *instance)
585 {
586 struct Scsi_Host *tmp, **prev;
587
588 if (((struct NCR5380_hostdata *) (instance->hostdata))->next_timer) {
589 return -1;
590 }
591 for (prev = &expires_first, tmp = expires_first; tmp; prev = &(((struct NCR5380_hostdata *) tmp->hostdata)->next_timer), tmp = ((struct NCR5380_hostdata *) tmp->hostdata)->next_timer)
592 if (((struct NCR5380_hostdata *) instance->hostdata)->time_expires < ((struct NCR5380_hostdata *) tmp->hostdata)->time_expires)
593 break;
594
595 ((struct NCR5380_hostdata *) instance->hostdata)->next_timer = tmp;
596 *prev = instance;
597
598 mod_timer(&usleep_timer, ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires);
599 return 0;
600 }
601
602 /**
603 * NCR5380_timer_fn - handle polled timeouts
604 * @unused: unused
605 *
606 * Walk the list of controllers, find which controllers have exceeded
607 * their expiry timeout and then schedule the processing co-routine to
608 * do the real work.
609 *
610 * Doing something about unwanted reentrancy here might be useful
611 *
612 * Locks: disables irqs, takes and frees io_request_lock
613 */
614
NCR5380_timer_fn(unsigned long unused)615 static void NCR5380_timer_fn(unsigned long unused)
616 {
617 struct Scsi_Host *instance;
618
619 spin_lock_irq(&io_request_lock);
620
621 for (; expires_first && time_before_eq(((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires, jiffies);) {
622 instance = ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer;
623 ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer = NULL;
624 ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires = 0;
625 expires_first = instance;
626 }
627
628 del_timer(&usleep_timer);
629 if (expires_first) {
630 usleep_timer.expires = ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires;
631 add_timer(&usleep_timer);
632 }
633 run_main();
634 spin_unlock_irq(&io_request_lock);
635 }
636
637 /**
638 * NCR5380_all_init - global setup
639 *
640 * Set up the global values and timers needed by the NCR5380 driver
641 */
642
NCR5380_all_init(void)643 static inline void NCR5380_all_init(void)
644 {
645 static int done = 0;
646 if (!done) {
647 dprintk(NDEBUG_INIT, ("scsi : NCR5380_all_init()\n"));
648 done = 1;
649 init_timer(&usleep_timer);
650 usleep_timer.function = NCR5380_timer_fn;
651 }
652 }
653
654
655 static int probe_irq __initdata = 0;
656
657 /**
658 * probe_intr - helper for IRQ autoprobe
659 * @irq: interrupt number
660 * @dev_id: unused
661 * @regs: unused
662 *
663 * Set a flag to indicate the IRQ in question was received. This is
664 * used by the IRQ probe code.
665 */
666
probe_intr(int irq,void * dev_id,struct pt_regs * regs)667 static void __init probe_intr(int irq, void *dev_id, struct pt_regs *regs)
668 {
669 probe_irq = irq;
670 }
671
672 /**
673 * NCR5380_probe_irq - find the IRQ of an NCR5380
674 * @instance: NCR5380 controller
675 * @possible: bitmask of ISA IRQ lines
676 *
677 * Autoprobe for the IRQ line used by the NCR5380 by triggering an IRQ
678 * and then looking to see what interrupt actually turned up.
679 *
680 * Locks: none, irqs must be enabled on entry
681 */
682
NCR5380_probe_irq(struct Scsi_Host * instance,int possible)683 static int __init NCR5380_probe_irq(struct Scsi_Host *instance, int possible)
684 {
685 NCR5380_local_declare();
686 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
687 unsigned long timeout;
688 int trying_irqs, i, mask;
689 NCR5380_setup(instance);
690
691 for (trying_irqs = i = 0, mask = 1; i < 16; ++i, mask <<= 1)
692 if ((mask & possible) && (request_irq(i, &probe_intr, SA_INTERRUPT, "NCR-probe", NULL) == 0))
693 trying_irqs |= mask;
694
695 timeout = jiffies + (250 * HZ / 1000);
696 probe_irq = SCSI_IRQ_NONE;
697
698 /*
699 * A interrupt is triggered whenever BSY = false, SEL = true
700 * and a bit set in the SELECT_ENABLE_REG is asserted on the
701 * SCSI bus.
702 *
703 * Note that the bus is only driven when the phase control signals
704 * (I/O, C/D, and MSG) match those in the TCR, so we must reset that
705 * to zero.
706 */
707
708 NCR5380_write(TARGET_COMMAND_REG, 0);
709 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
710 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
711 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_SEL);
712
713 while (probe_irq == SCSI_IRQ_NONE && time_before(jiffies, timeout))
714 barrier();
715
716 NCR5380_write(SELECT_ENABLE_REG, 0);
717 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
718
719 for (i = 0, mask = 1; i < 16; ++i, mask <<= 1)
720 if (trying_irqs & mask)
721 free_irq(i, NULL);
722
723 return probe_irq;
724 }
725
726 /**
727 * NCR58380_print_options - show options
728 * @instance: unused for now
729 *
730 * Called by probe code indicating the NCR5380 driver options that
731 * were selected. At some point this will switch to runtime options
732 * read from the adapter in question
733 *
734 * Locks: none
735 */
736
NCR5380_print_options(struct Scsi_Host * instance)737 static void __init NCR5380_print_options(struct Scsi_Host *instance)
738 {
739 printk(" generic options"
740 #ifdef AUTOPROBE_IRQ
741 " AUTOPROBE_IRQ"
742 #endif
743 #ifdef AUTOSENSE
744 " AUTOSENSE"
745 #endif
746 #ifdef DIFFERENTIAL
747 " DIFFERENTIAL"
748 #endif
749 #ifdef REAL_DMA
750 " REAL DMA"
751 #endif
752 #ifdef REAL_DMA_POLL
753 " REAL DMA POLL"
754 #endif
755 #ifdef PARITY
756 " PARITY"
757 #endif
758 #ifdef PSEUDO_DMA
759 " PSEUDO DMA"
760 #endif
761 #ifdef UNSAFE
762 " UNSAFE "
763 #endif
764 );
765 printk(" USLEEP, USLEEP_POLL=%d USLEEP_SLEEP=%d", USLEEP_POLL, USLEEP_SLEEP);
766 printk(" generic release=%d", NCR5380_PUBLIC_RELEASE);
767 if (((struct NCR5380_hostdata *) instance->hostdata)->flags & FLAG_NCR53C400) {
768 printk(" ncr53c400 release=%d", NCR53C400_PUBLIC_RELEASE);
769 }
770 }
771
772 /**
773 * NCR5380_print_status - dump controller info
774 * @instance: controller to dump
775 *
776 * Print commands in the various queues, called from NCR5380_abort
777 * and NCR5380_debug to aid debugging.
778 *
779 * Locks: called functions disable irqs, missing queue lock in proc call
780 */
781
NCR5380_print_status(struct Scsi_Host * instance)782 static void NCR5380_print_status(struct Scsi_Host *instance)
783 {
784 static char pr_bfr[512];
785 char *start;
786 int len;
787
788 printk("NCR5380 : coroutine is%s running.\n", main_running ? "" : "n't");
789
790 NCR5380_dprint(NDEBUG_ANY, instance);
791 NCR5380_dprint_phase(NDEBUG_ANY, instance);
792
793 len = NCR5380_proc_info(pr_bfr, &start, 0, sizeof(pr_bfr), instance->host_no, 0);
794 pr_bfr[len] = 0;
795 printk("\n%s\n", pr_bfr);
796 }
797
798 /******************************************/
799 /*
800 * /proc/scsi/[dtc pas16 t128 generic]/[0-ASC_NUM_BOARD_SUPPORTED]
801 *
802 * *buffer: I/O buffer
803 * **start: if inout == FALSE pointer into buffer where user read should start
804 * offset: current offset
805 * length: length of buffer
806 * hostno: Scsi_Host host_no
807 * inout: TRUE - user is writing; FALSE - user is reading
808 *
809 * Return the number of bytes read from or written
810 */
811
812 #undef SPRINTF
813 #define SPRINTF(args...) do { if(pos < buffer + length-80) pos += sprintf(pos, ## args); } while(0)
814 static
815 char *lprint_Scsi_Cmnd(Scsi_Cmnd * cmd, char *pos, char *buffer, int length);
816 static
817 char *lprint_command(unsigned char *cmd, char *pos, char *buffer, int len);
818 static
819 char *lprint_opcode(int opcode, char *pos, char *buffer, int length);
820
821 #ifndef NCR5380_proc_info
822 static
823 #endif
NCR5380_proc_info(char * buffer,char ** start,off_t offset,int length,int hostno,int inout)824 int NCR5380_proc_info(char *buffer, char **start, off_t offset, int length, int hostno, int inout)
825 {
826 char *pos = buffer;
827 struct Scsi_Host *instance;
828 struct NCR5380_hostdata *hostdata;
829 Scsi_Cmnd *ptr;
830
831 for (instance = first_instance; instance && instance->host_no != hostno; instance = instance->next);
832 if (!instance)
833 return (-ESRCH);
834 hostdata = (struct NCR5380_hostdata *) instance->hostdata;
835
836 if (inout) { /* Has data been written to the file ? */
837 #ifdef DTC_PUBLIC_RELEASE
838 dtc_wmaxi = dtc_maxi = 0;
839 #endif
840 #ifdef PAS16_PUBLIC_RELEASE
841 pas_wmaxi = pas_maxi = 0;
842 #endif
843 return (-ENOSYS); /* Currently this is a no-op */
844 }
845 SPRINTF("NCR5380 core release=%d. ", NCR5380_PUBLIC_RELEASE);
846 if (((struct NCR5380_hostdata *) instance->hostdata)->flags & FLAG_NCR53C400)
847 SPRINTF("ncr53c400 release=%d. ", NCR53C400_PUBLIC_RELEASE);
848 #ifdef DTC_PUBLIC_RELEASE
849 SPRINTF("DTC 3180/3280 release %d", DTC_PUBLIC_RELEASE);
850 #endif
851 #ifdef T128_PUBLIC_RELEASE
852 SPRINTF("T128 release %d", T128_PUBLIC_RELEASE);
853 #endif
854 #ifdef GENERIC_NCR5380_PUBLIC_RELEASE
855 SPRINTF("Generic5380 release %d", GENERIC_NCR5380_PUBLIC_RELEASE);
856 #endif
857 #ifdef PAS16_PUBLIC_RELEASE
858 SPRINTF("PAS16 release=%d", PAS16_PUBLIC_RELEASE);
859 #endif
860
861 SPRINTF("\nBase Addr: 0x%05lX ", (long) instance->base);
862 SPRINTF("io_port: %04x ", (int) instance->io_port);
863 if (instance->irq == SCSI_IRQ_NONE)
864 SPRINTF("IRQ: None.\n");
865 else
866 SPRINTF("IRQ: %d.\n", instance->irq);
867
868 #ifdef DTC_PUBLIC_RELEASE
869 SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", dtc_wmaxi, dtc_maxi);
870 #endif
871 #ifdef PAS16_PUBLIC_RELEASE
872 SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", pas_wmaxi, pas_maxi);
873 #endif
874 spin_lock_irq(&io_request_lock);
875 SPRINTF("NCR5380 : coroutine is%s running.\n", main_running ? "" : "n't");
876 if (!hostdata->connected)
877 SPRINTF("scsi%d: no currently connected command\n", instance->host_no);
878 else
879 pos = lprint_Scsi_Cmnd((Scsi_Cmnd *) hostdata->connected, pos, buffer, length);
880 SPRINTF("scsi%d: issue_queue\n", instance->host_no);
881 for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
882 pos = lprint_Scsi_Cmnd(ptr, pos, buffer, length);
883
884 SPRINTF("scsi%d: disconnected_queue\n", instance->host_no);
885 for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
886 pos = lprint_Scsi_Cmnd(ptr, pos, buffer, length);
887
888 spin_unlock_irq(&io_request_lock);
889
890 *start = buffer;
891 if (pos - buffer < offset)
892 return 0;
893 else if (pos - buffer - offset < length)
894 return pos - buffer - offset;
895 return length;
896 }
897
898 static
lprint_Scsi_Cmnd(Scsi_Cmnd * cmd,char * pos,char * buffer,int length)899 char *lprint_Scsi_Cmnd(Scsi_Cmnd * cmd, char *pos, char *buffer, int length)
900 {
901 SPRINTF("scsi%d : destination target %d, lun %d\n", cmd->host->host_no, cmd->target, cmd->lun);
902 SPRINTF(" command = ");
903 pos = lprint_command(cmd->cmnd, pos, buffer, length);
904 return (pos);
905 }
906
907 static
lprint_command(unsigned char * command,char * pos,char * buffer,int length)908 char *lprint_command(unsigned char *command, char *pos, char *buffer, int length)
909 {
910 int i, s;
911 pos = lprint_opcode(command[0], pos, buffer, length);
912 for (i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i)
913 SPRINTF("%02x ", command[i]);
914 SPRINTF("\n");
915 return (pos);
916 }
917
918 static
lprint_opcode(int opcode,char * pos,char * buffer,int length)919 char *lprint_opcode(int opcode, char *pos, char *buffer, int length)
920 {
921 SPRINTF("%2d (0x%02x)", opcode, opcode);
922 return (pos);
923 }
924
925
926 /**
927 * NCR5380_init - initialise an NCR5380
928 * @instance: adapter to configure
929 * @flags: control flags
930 *
931 * Initializes *instance and corresponding 5380 chip,
932 * with flags OR'd into the initial flags value.
933 *
934 * Notes : I assume that the host, hostno, and id bits have been
935 * set correctly. I don't care about the irq and other fields.
936 *
937 * Locks: interrupts must be enabled when we are called
938 */
939
NCR5380_init(struct Scsi_Host * instance,int flags)940 static void __init NCR5380_init(struct Scsi_Host *instance, int flags)
941 {
942 NCR5380_local_declare();
943 int i, pass;
944 unsigned long timeout;
945 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
946
947 if(in_interrupt())
948 printk(KERN_ERR "NCR5380_init called with interrupts off!\n");
949 /*
950 * On NCR53C400 boards, NCR5380 registers are mapped 8 past
951 * the base address.
952 */
953
954 #ifdef NCR53C400
955 if (flags & FLAG_NCR53C400)
956 instance->NCR5380_instance_name += NCR53C400_address_adjust;
957 #endif
958
959 NCR5380_setup(instance);
960 NCR5380_all_init();
961
962 hostdata->aborted = 0;
963 hostdata->id_mask = 1 << instance->this_id;
964 for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
965 if (i > hostdata->id_mask)
966 hostdata->id_higher_mask |= i;
967 for (i = 0; i < 8; ++i)
968 hostdata->busy[i] = 0;
969 #ifdef REAL_DMA
970 hostdata->dmalen = 0;
971 #endif
972 hostdata->targets_present = 0;
973 hostdata->connected = NULL;
974 hostdata->issue_queue = NULL;
975 hostdata->disconnected_queue = NULL;
976 #ifdef NCR5380_STATS
977 for (i = 0; i < 8; ++i) {
978 hostdata->time_read[i] = 0;
979 hostdata->time_write[i] = 0;
980 hostdata->bytes_read[i] = 0;
981 hostdata->bytes_write[i] = 0;
982 }
983 hostdata->timebase = 0;
984 hostdata->pendingw = 0;
985 hostdata->pendingr = 0;
986 #endif
987
988 /* The CHECK code seems to break the 53C400. Will check it later maybe */
989 if (flags & FLAG_NCR53C400)
990 hostdata->flags = FLAG_HAS_LAST_BYTE_SENT | flags;
991 else
992 hostdata->flags = FLAG_CHECK_LAST_BYTE_SENT | flags;
993
994 if (!the_template) {
995 the_template = instance->hostt;
996 first_instance = instance;
997 }
998 hostdata->time_expires = 0;
999 hostdata->next_timer = NULL;
1000
1001 #ifndef AUTOSENSE
1002 if ((instance->cmd_per_lun > 1) || instance->can_queue > 1)
1003 printk(KERN_WARNING "scsi%d : WARNING : support for multiple outstanding commands enabled\n" " without AUTOSENSE option, contingent allegiance conditions may\n"
1004 " be incorrectly cleared.\n", instance->host_no);
1005 #endif /* def AUTOSENSE */
1006
1007 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1008 NCR5380_write(MODE_REG, MR_BASE);
1009 NCR5380_write(TARGET_COMMAND_REG, 0);
1010 NCR5380_write(SELECT_ENABLE_REG, 0);
1011
1012 #ifdef NCR53C400
1013 if (hostdata->flags & FLAG_NCR53C400) {
1014 NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);
1015 }
1016 #endif
1017
1018 /*
1019 * Detect and correct bus wedge problems.
1020 *
1021 * If the system crashed, it may have crashed in a state
1022 * where a SCSI command was still executing, and the
1023 * SCSI bus is not in a BUS FREE STATE.
1024 *
1025 * If this is the case, we'll try to abort the currently
1026 * established nexus which we know nothing about, and that
1027 * failing, do a hard reset of the SCSI bus
1028 */
1029
1030 for (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {
1031 switch (pass) {
1032 case 1:
1033 case 3:
1034 case 5:
1035 printk("scsi%d: SCSI bus busy, waiting up to five seconds\n", instance->host_no);
1036 timeout = jiffies + 5 * HZ;
1037 while (time_before(jiffies, timeout) && (NCR5380_read(STATUS_REG) & SR_BSY));
1038 break;
1039 case 2:
1040 printk("scsi%d: bus busy, attempting abort\n", instance->host_no);
1041 do_abort(instance);
1042 break;
1043 case 4:
1044 printk("scsi%d: bus busy, attempting reset\n", instance->host_no);
1045 do_reset(instance);
1046 break;
1047 case 6:
1048 printk("scsi%d: bus locked solid or invalid override\n", instance->host_no);
1049 }
1050 }
1051 }
1052
1053 /**
1054 * NCR5380_queue_command - queue a command
1055 * @cmd: SCSI command
1056 * @done: completion handler
1057 *
1058 * cmd is added to the per instance issue_queue, with minor
1059 * twiddling done to the host specific fields of cmd. If the
1060 * main coroutine is not running, it is restarted.
1061 *
1062 * Locks: io_request lock held by caller. Called functions drop and
1063 * retake this lock. Called functions take dma lock.
1064 */
1065
1066 /* Only make static if a wrapper function is used */
1067 #ifndef NCR5380_queue_command
1068 static
1069 #endif
NCR5380_queue_command(Scsi_Cmnd * cmd,void (* done)(Scsi_Cmnd *))1070 int NCR5380_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) {
1071 struct Scsi_Host *instance = cmd->host;
1072 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1073 Scsi_Cmnd *tmp;
1074
1075 #if (NDEBUG & NDEBUG_NO_WRITE)
1076 switch (cmd->cmnd[0]) {
1077 case WRITE_6:
1078 case WRITE_10:
1079 printk("scsi%d : WRITE attempted with NO_WRITE debugging flag set\n", instance->host_no);
1080 cmd->result = (DID_ERROR << 16);
1081 done(cmd);
1082 return 0;
1083 }
1084 #endif /* (NDEBUG & NDEBUG_NO_WRITE) */
1085
1086 #ifdef NCR5380_STATS
1087 switch (cmd->cmnd[0]) {
1088 case WRITE:
1089 case WRITE_6:
1090 case WRITE_10:
1091 hostdata->time_write[cmd->target] -= (jiffies - hostdata->timebase);
1092 hostdata->bytes_write[cmd->target] += cmd->request_bufflen;
1093 hostdata->pendingw++;
1094 break;
1095 case READ:
1096 case READ_6:
1097 case READ_10:
1098 hostdata->time_read[cmd->target] -= (jiffies - hostdata->timebase);
1099 hostdata->bytes_read[cmd->target] += cmd->request_bufflen;
1100 hostdata->pendingr++;
1101 break;
1102 }
1103 #endif
1104
1105 /*
1106 * We use the host_scribble field as a pointer to the next command
1107 * in a queue
1108 */
1109
1110 cmd->host_scribble = NULL;
1111 cmd->scsi_done = done;
1112 cmd->result = 0;
1113
1114 /*
1115 * Insert the cmd into the issue queue. Note that REQUEST SENSE
1116 * commands are added to the head of the queue since any command will
1117 * clear the contingent allegiance condition that exists and the
1118 * sense data is only guaranteed to be valid while the condition exists.
1119 */
1120
1121 if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) {
1122 LIST(cmd, hostdata->issue_queue);
1123 cmd->host_scribble = (unsigned char *) hostdata->issue_queue;
1124 hostdata->issue_queue = cmd;
1125 } else {
1126 for (tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp->host_scribble; tmp = (Scsi_Cmnd *) tmp->host_scribble);
1127 LIST(cmd, tmp);
1128 tmp->host_scribble = (unsigned char *) cmd;
1129 }
1130 dprintk(NDEBUG_QUEUES, ("scsi%d : command added to %s of queue\n", instance->host_no, (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail"));
1131
1132 /* Run the coroutine if it isn't already running. */
1133 run_main();
1134 return 0;
1135 }
1136
1137 /**
1138 * NCR5380_main - NCR state machines
1139 *
1140 * NCR5380_main is a coroutine that runs as long as more work can
1141 * be done on the NCR5380 host adapters in a system. Both
1142 * NCR5380_queue_command() and NCR5380_intr() will try to start it
1143 * in case it is not running.
1144 *
1145 * Locks; The caller must hold the io_request_lock. The lock will still be
1146 * held on return but may be dropped while running. Called functions take
1147 * the DMA lock.
1148 */
1149
NCR5380_main(void)1150 static void NCR5380_main(void) {
1151 Scsi_Cmnd *tmp, *prev;
1152 struct Scsi_Host *instance;
1153 struct NCR5380_hostdata *hostdata;
1154 int done;
1155
1156 /*
1157 * We run (with interrupts disabled) until we're sure that none of
1158 * the host adapters have anything that can be done, at which point
1159 * we set main_running to 0 and exit.
1160 *
1161 * Interrupts are enabled before doing various other internal
1162 * instructions, after we've decided that we need to run through
1163 * the loop again.
1164 *
1165 * this should prevent any race conditions.
1166 */
1167
1168 do {
1169 /* Lock held here */
1170 done = 1;
1171 for (instance = first_instance; instance && instance->hostt == the_template; instance = instance->next) {
1172 hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1173 /* Lock held here */
1174 if (!hostdata->connected && !hostdata->selecting) {
1175 dprintk(NDEBUG_MAIN, ("scsi%d : not connected\n", instance->host_no));
1176 /*
1177 * Search through the issue_queue for a command destined
1178 * for a target that's not busy.
1179 */
1180 for (tmp = (Scsi_Cmnd *) hostdata->issue_queue, prev = NULL; tmp; prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble)
1181 {
1182 if (prev != tmp)
1183 dprintk(NDEBUG_LISTS, ("MAIN tmp=%p target=%d busy=%d lun=%d\n", tmp, tmp->target, hostdata->busy[tmp->target], tmp->lun));
1184 /* When we find one, remove it from the issue queue. */
1185 if (!(hostdata->busy[tmp->target] & (1 << tmp->lun))) {
1186 if (prev) {
1187 REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
1188 prev->host_scribble = tmp->host_scribble;
1189 } else {
1190 REMOVE(-1, hostdata->issue_queue, tmp, tmp->host_scribble);
1191 hostdata->issue_queue = (Scsi_Cmnd *) tmp->host_scribble;
1192 }
1193 tmp->host_scribble = NULL;
1194
1195
1196 /*
1197 * Attempt to establish an I_T_L nexus here.
1198 * On success, instance->hostdata->connected is set.
1199 * On failure, we must add the command back to the
1200 * issue queue so we can keep trying.
1201 */
1202 dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, ("scsi%d : main() : command for target %d lun %d removed from issue_queue\n", instance->host_no, tmp->target, tmp->lun));
1203
1204 /*
1205 * A successful selection is defined as one that
1206 * leaves us with the command connected and
1207 * in hostdata->connected, OR has terminated the
1208 * command.
1209 *
1210 * With successful commands, we fall through
1211 * and see if we can do an information transfer,
1212 * with failures we will restart.
1213 */
1214 hostdata->selecting = 0;
1215 /* RvC: have to preset this to indicate a new command is being performed */
1216
1217 if (!NCR5380_select(instance, tmp,
1218 /*
1219 * REQUEST SENSE commands are issued without tagged
1220 * queueing, even on SCSI-II devices because the
1221 * contingent allegiance condition exists for the
1222 * entire unit.
1223 */
1224 (tmp->cmnd[0] == REQUEST_SENSE) ? TAG_NONE : TAG_NEXT)) {
1225 break;
1226 } else {
1227 LIST(tmp, hostdata->issue_queue);
1228 tmp->host_scribble = (unsigned char *) hostdata->issue_queue;
1229 hostdata->issue_queue = tmp;
1230 done = 0;
1231 dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, ("scsi%d : main(): select() failed, returned to issue_queue\n", instance->host_no));
1232 }
1233 /* lock held here still */
1234 } /* if target/lun is not busy */
1235 } /* for */
1236 /* exited locked */
1237 } /* if (!hostdata->connected) */
1238 if (hostdata->selecting) {
1239 tmp = (Scsi_Cmnd *) hostdata->selecting;
1240 /* Selection will drop and retake the lock */
1241 if (!NCR5380_select(instance, tmp, (tmp->cmnd[0] == REQUEST_SENSE) ? TAG_NONE : TAG_NEXT)) {
1242 /* Ok ?? */
1243 } else {
1244 /* RvC: device failed, so we wait a long time
1245 this is needed for Mustek scanners, that
1246 do not respond to commands immediately
1247 after a scan */
1248 printk(KERN_DEBUG "scsi%d: device %d did not respond in time\n", instance->host_no, tmp->target);
1249 //spin_lock_irq(&io_request_lock);
1250 LIST(tmp, hostdata->issue_queue);
1251 tmp->host_scribble = (unsigned char *) hostdata->issue_queue;
1252 hostdata->issue_queue = tmp;
1253 //spin_unlock_irq(&io_request_lock);
1254
1255 hostdata->time_expires = jiffies + USLEEP_WAITLONG;
1256 NCR5380_set_timer(instance);
1257 }
1258 } /* if hostdata->selecting */
1259 if (hostdata->connected
1260 #ifdef REAL_DMA
1261 && !hostdata->dmalen
1262 #endif
1263 && (!hostdata->time_expires || time_before_eq(hostdata->time_expires, jiffies))
1264 ) {
1265 dprintk(NDEBUG_MAIN, ("scsi%d : main() : performing information transfer\n", instance->host_no));
1266 NCR5380_information_transfer(instance);
1267 dprintk(NDEBUG_MAIN, ("scsi%d : main() : done set false\n", instance->host_no));
1268 done = 0;
1269 } else
1270 break;
1271 } /* for instance */
1272 } while (!done);
1273 /* Exit lock held */
1274 clear_bit(0, &main_running);
1275 }
1276
1277 #ifndef DONT_USE_INTR
1278 #include <linux/blk.h>
1279 #include <linux/spinlock.h>
1280
1281 /**
1282 * NCR5380_intr - generic NCR5380 irq handler
1283 *
1284 * Handle interrupts, reestablishing I_T_L or I_T_L_Q nexuses
1285 * from the disconnected queue, and restarting NCR5380_main()
1286 * as required.
1287 *
1288 * Locks: caller must hold the io_request lock.
1289 */
1290
NCR5380_intr(int irq,void * dev_id,struct pt_regs * regs)1291 static void NCR5380_intr(int irq, void *dev_id, struct pt_regs *regs) {
1292 NCR5380_local_declare();
1293 struct Scsi_Host *instance;
1294 int done;
1295 unsigned char basr;
1296
1297 dprintk(NDEBUG_INTR, ("scsi : NCR5380 irq %d triggered\n", irq));
1298
1299 do {
1300 done = 1;
1301 for (instance = first_instance; instance && (instance->hostt == the_template); instance = instance->next)
1302 if (instance->irq == irq) {
1303
1304 /* Look for pending interrupts */
1305 NCR5380_setup(instance);
1306 basr = NCR5380_read(BUS_AND_STATUS_REG);
1307 /* XXX dispatch to appropriate routine if found and done=0 */
1308 if (basr & BASR_IRQ) {
1309 NCR5380_dprint(NDEBUG_INTR, instance);
1310 if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
1311 done = 0;
1312 dprintk(NDEBUG_INTR, ("scsi%d : SEL interrupt\n", instance->host_no));
1313 NCR5380_reselect(instance);
1314 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1315 } else if (basr & BASR_PARITY_ERROR) {
1316 dprintk(NDEBUG_INTR, ("scsi%d : PARITY interrupt\n", instance->host_no));
1317 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1318 } else if ((NCR5380_read(STATUS_REG) & SR_RST) == SR_RST) {
1319 dprintk(NDEBUG_INTR, ("scsi%d : RESET interrupt\n", instance->host_no));
1320 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1321 } else {
1322 #if defined(REAL_DMA)
1323 /*
1324 * We should only get PHASE MISMATCH and EOP interrupts
1325 * if we have DMA enabled, so do a sanity check based on
1326 * the current setting of the MODE register.
1327 */
1328
1329 if ((NCR5380_read(MODE_REG) & MR_DMA) && ((basr & BASR_END_DMA_TRANSFER) || !(basr & BASR_PHASE_MATCH))) {
1330 int transfered;
1331
1332 if (!hostdata->connected)
1333 panic("scsi%d : received end of DMA interrupt with no connected cmd\n", instance->hostno);
1334
1335 transfered = (hostdata->dmalen - NCR5380_dma_residual(instance));
1336 hostdata->connected->SCp.this_residual -= transferred;
1337 hostdata->connected->SCp.ptr += transferred;
1338 hostdata->dmalen = 0;
1339
1340 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1341 #if NCR_TIMEOUT
1342 {
1343 unsigned long timeout = jiffies + NCR_TIMEOUT;
1344
1345 spin_unlock_irq(&io_request_lock);
1346 while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK && time_before(jiffies, timeout));
1347 spin_lock_irq(&io_request_lock);
1348
1349 if (time_after_eq(jiffies, timeout))
1350 printk("scsi%d: timeout at NCR5380.c:%d\n", host->host_no, __LINE__);
1351 }
1352 #else /* NCR_TIMEOUT */
1353 while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK);
1354 #endif
1355
1356 NCR5380_write(MODE_REG, MR_BASE);
1357 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1358 }
1359 #else
1360 dprintk(NDEBUG_INTR, ("scsi : unknown interrupt, BASR 0x%X, MR 0x%X, SR 0x%x\n", basr, NCR5380_read(MODE_REG), NCR5380_read(STATUS_REG)));
1361 (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
1362 #endif
1363 }
1364 } /* if BASR_IRQ */
1365 if (!done)
1366 run_main();
1367 } /* if (instance->irq == irq) */
1368 } while (!done);
1369 }
1370
1371 /**
1372 * do_NCR5380_intr
1373 * @irq: interrupt number
1374 * @dev_id: device info
1375 * @regs: registers (unused)
1376 *
1377 * Takes the io_request_lock and invokes the generic NCR5380 interrupt
1378 * handler code
1379 *
1380 * Locks: takes and releases the io_request lock
1381 */
1382
do_NCR5380_intr(int irq,void * dev_id,struct pt_regs * regs)1383 static void do_NCR5380_intr(int irq, void *dev_id, struct pt_regs *regs) {
1384 unsigned long flags;
1385
1386 spin_lock_irqsave(&io_request_lock, flags);
1387 NCR5380_intr(irq, dev_id, regs);
1388 spin_unlock_irqrestore(&io_request_lock, flags);
1389 }
1390 #endif
1391
1392
1393 /**
1394 * collect_stats - collect stats on a scsi command
1395 * @hostdata: adapter
1396 * @cmd: command being issued
1397 *
1398 * Update the statistical data by parsing the command in question
1399 */
1400
collect_stats(struct NCR5380_hostdata * hostdata,Scsi_Cmnd * cmd)1401 static void collect_stats(struct NCR5380_hostdata *hostdata, Scsi_Cmnd * cmd)
1402 {
1403 #ifdef NCR5380_STATS
1404 switch (cmd->cmnd[0]) {
1405 case WRITE:
1406 case WRITE_6:
1407 case WRITE_10:
1408 hostdata->time_write[cmd->target] += (jiffies - hostdata->timebase);
1409 hostdata->pendingw--;
1410 break;
1411 case READ:
1412 case READ_6:
1413 case READ_10:
1414 hostdata->time_read[cmd->target] += (jiffies - hostdata->timebase);
1415 hostdata->pendingr--;
1416 break;
1417 }
1418 #endif
1419 }
1420
1421
1422 /*
1423 * Function : int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd,
1424 * int tag);
1425 *
1426 * Purpose : establishes I_T_L or I_T_L_Q nexus for new or existing command,
1427 * including ARBITRATION, SELECTION, and initial message out for
1428 * IDENTIFY and queue messages.
1429 *
1430 * Inputs : instance - instantiation of the 5380 driver on which this
1431 * target lives, cmd - SCSI command to execute, tag - set to TAG_NEXT for
1432 * new tag, TAG_NONE for untagged queueing, otherwise set to the tag for
1433 * the command that is presently connected.
1434 *
1435 * Returns : -1 if selection could not execute for some reason,
1436 * 0 if selection succeeded or failed because the target
1437 * did not respond.
1438 *
1439 * Side effects :
1440 * If bus busy, arbitration failed, etc, NCR5380_select() will exit
1441 * with registers as they should have been on entry - ie
1442 * SELECT_ENABLE will be set appropriately, the NCR5380
1443 * will cease to drive any SCSI bus signals.
1444 *
1445 * If successful : I_T_L or I_T_L_Q nexus will be established,
1446 * instance->connected will be set to cmd.
1447 * SELECT interrupt will be disabled.
1448 *
1449 * If failed (no target) : cmd->scsi_done() will be called, and the
1450 * cmd->result host byte set to DID_BAD_TARGET.
1451 *
1452 * Locks: caller holds io_request_lock
1453 */
1454
NCR5380_select(struct Scsi_Host * instance,Scsi_Cmnd * cmd,int tag)1455 static int NCR5380_select(struct Scsi_Host *instance, Scsi_Cmnd * cmd, int tag)
1456 {
1457 NCR5380_local_declare();
1458 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1459 unsigned char tmp[3], phase;
1460 unsigned char *data;
1461 int len;
1462 unsigned long timeout;
1463 unsigned char value;
1464 NCR5380_setup(instance);
1465
1466 if (hostdata->selecting) {
1467 goto part2; /* RvC: sorry prof. Dijkstra, but it keeps the
1468 rest of the code nearly the same */
1469 }
1470
1471 hostdata->restart_select = 0;
1472
1473 NCR5380_dprint(NDEBUG_ARBITRATION, instance);
1474 dprintk(NDEBUG_ARBITRATION, ("scsi%d : starting arbitration, id = %d\n", instance->host_no, instance->this_id));
1475
1476 /*
1477 * Set the phase bits to 0, otherwise the NCR5380 won't drive the
1478 * data bus during SELECTION.
1479 */
1480
1481 NCR5380_write(TARGET_COMMAND_REG, 0);
1482
1483 /*
1484 * Start arbitration.
1485 */
1486
1487 NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
1488 NCR5380_write(MODE_REG, MR_ARBITRATE);
1489
1490 /* Wait for arbitration logic to complete */
1491 #if NCR_TIMEOUT
1492 {
1493 unsigned long timeout = jiffies + 2 * NCR_TIMEOUT;
1494
1495 spin_unlock_irq(&io_request_lock);
1496
1497 while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS)
1498 && time_before(jiffies, timeout));
1499
1500 spin_lock_irq(&io_request_lock);
1501
1502 if (time_after_eq(jiffies, timeout)) {
1503 printk("scsi: arbitration timeout at %d\n", __LINE__);
1504 NCR5380_write(MODE_REG, MR_BASE);
1505 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1506 return -1;
1507 }
1508 }
1509 #else /* NCR_TIMEOUT */
1510 while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS));
1511 #endif
1512
1513 dprintk(NDEBUG_ARBITRATION, ("scsi%d : arbitration complete\n", instance->host_no));
1514
1515 /*
1516 * The arbitration delay is 2.2us, but this is a minimum and there is
1517 * no maximum so we can safely sleep for ceil(2.2) usecs to accommodate
1518 * the integral nature of udelay().
1519 *
1520 */
1521
1522 udelay(3);
1523
1524 /* Check for lost arbitration */
1525 if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
1526 NCR5380_write(MODE_REG, MR_BASE);
1527 dprintk(NDEBUG_ARBITRATION, ("scsi%d : lost arbitration, deasserting MR_ARBITRATE\n", instance->host_no));
1528 return -1;
1529 }
1530 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_SEL);
1531
1532 if (!(hostdata->flags & FLAG_DTC3181E) &&
1533 /* RvC: DTC3181E has some trouble with this
1534 * so we simply removed it. Seems to work with
1535 * only Mustek scanner attached
1536 */
1537 (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
1538 NCR5380_write(MODE_REG, MR_BASE);
1539 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1540 dprintk(NDEBUG_ARBITRATION, ("scsi%d : lost arbitration, deasserting ICR_ASSERT_SEL\n", instance->host_no));
1541 return -1;
1542 }
1543 /*
1544 * Again, bus clear + bus settle time is 1.2us, however, this is
1545 * a minimum so we'll udelay ceil(1.2)
1546 */
1547
1548 udelay(2);
1549
1550 dprintk(NDEBUG_ARBITRATION, ("scsi%d : won arbitration\n", instance->host_no));
1551
1552 /*
1553 * Now that we have won arbitration, start Selection process, asserting
1554 * the host and target ID's on the SCSI bus.
1555 */
1556
1557 NCR5380_write(OUTPUT_DATA_REG, (hostdata->id_mask | (1 << cmd->target)));
1558
1559 /*
1560 * Raise ATN while SEL is true before BSY goes false from arbitration,
1561 * since this is the only way to guarantee that we'll get a MESSAGE OUT
1562 * phase immediately after selection.
1563 */
1564
1565 NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_BSY | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
1566 NCR5380_write(MODE_REG, MR_BASE);
1567
1568 /*
1569 * Reselect interrupts must be turned off prior to the dropping of BSY,
1570 * otherwise we will trigger an interrupt.
1571 */
1572 NCR5380_write(SELECT_ENABLE_REG, 0);
1573
1574 /*
1575 * The initiator shall then wait at least two deskew delays and release
1576 * the BSY signal.
1577 */
1578 udelay(1); /* wingel -- wait two bus deskew delay >2*45ns */
1579
1580 /* Reset BSY */
1581 NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
1582
1583 /*
1584 * Something weird happens when we cease to drive BSY - looks
1585 * like the board/chip is letting us do another read before the
1586 * appropriate propagation delay has expired, and we're confusing
1587 * a BSY signal from ourselves as the target's response to SELECTION.
1588 *
1589 * A small delay (the 'C++' frontend breaks the pipeline with an
1590 * unnecessary jump, making it work on my 386-33/Trantor T128, the
1591 * tighter 'C' code breaks and requires this) solves the problem -
1592 * the 1 us delay is arbitrary, and only used because this delay will
1593 * be the same on other platforms and since it works here, it should
1594 * work there.
1595 *
1596 * wingel suggests that this could be due to failing to wait
1597 * one deskew delay.
1598 */
1599
1600 udelay(1);
1601
1602 dprintk(NDEBUG_SELECTION, ("scsi%d : selecting target %d\n", instance->host_no, cmd->target));
1603
1604 /*
1605 * The SCSI specification calls for a 250 ms timeout for the actual
1606 * selection.
1607 */
1608
1609 timeout = jiffies + (250 * HZ / 1000);
1610
1611 /*
1612 * XXX very interesting - we're seeing a bounce where the BSY we
1613 * asserted is being reflected / still asserted (propagation delay?)
1614 * and it's detecting as true. Sigh.
1615 */
1616
1617 hostdata->select_time = 0; /* we count the clock ticks at which we polled */
1618 hostdata->selecting = cmd;
1619
1620 part2:
1621 /* RvC: here we enter after a sleeping period, or immediately after
1622 execution of part 1
1623 we poll only once ech clock tick */
1624 value = NCR5380_read(STATUS_REG) & (SR_BSY | SR_IO);
1625
1626 if (!value && (hostdata->select_time < 25)) {
1627 /* RvC: we still must wait for a device response */
1628 hostdata->select_time++; /* after 25 ticks the device has failed */
1629 hostdata->time_expires = jiffies + 1;
1630 NCR5380_set_timer(instance);
1631 return 0; /* RvC: we return here with hostdata->selecting set,
1632 to go to sleep */
1633 }
1634
1635 hostdata->selecting = 0; /* clear this pointer, because we passed the
1636 waiting period */
1637 if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
1638 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1639 NCR5380_reselect(instance);
1640 printk("scsi%d : reselection after won arbitration?\n", instance->host_no);
1641 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1642 return -1;
1643 }
1644 /*
1645 * No less than two deskew delays after the initiator detects the
1646 * BSY signal is true, it shall release the SEL signal and may
1647 * change the DATA BUS. -wingel
1648 */
1649
1650 udelay(1);
1651
1652 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1653
1654 if (!(NCR5380_read(STATUS_REG) & SR_BSY)) {
1655 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1656 if (hostdata->targets_present & (1 << cmd->target)) {
1657 printk("scsi%d : weirdness\n", instance->host_no);
1658 if (hostdata->restart_select)
1659 printk("\trestart select\n");
1660 NCR5380_dprint(NDEBUG_SELECTION, instance);
1661 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1662 return -1;
1663 }
1664 cmd->result = DID_BAD_TARGET << 16;
1665 collect_stats(hostdata, cmd);
1666 cmd->scsi_done(cmd);
1667 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1668 dprintk(NDEBUG_SELECTION, ("scsi%d : target did not respond within 250ms\n", instance->host_no));
1669 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1670 return 0;
1671 }
1672 hostdata->targets_present |= (1 << cmd->target);
1673
1674 /*
1675 * Since we followed the SCSI spec, and raised ATN while SEL
1676 * was true but before BSY was false during selection, the information
1677 * transfer phase should be a MESSAGE OUT phase so that we can send the
1678 * IDENTIFY message.
1679 *
1680 * If SCSI-II tagged queuing is enabled, we also send a SIMPLE_QUEUE_TAG
1681 * message (2 bytes) with a tag ID that we increment with every command
1682 * until it wraps back to 0.
1683 *
1684 * XXX - it turns out that there are some broken SCSI-II devices,
1685 * which claim to support tagged queuing but fail when more than
1686 * some number of commands are issued at once.
1687 */
1688
1689 /* Wait for start of REQ/ACK handshake */
1690 #ifdef NCR_TIMEOUT
1691 {
1692 unsigned long timeout = jiffies + NCR_TIMEOUT;
1693
1694 spin_unlock_irq(&io_request_lock);
1695 while (!(NCR5380_read(STATUS_REG) & SR_REQ) && time_before(jiffies, timeout));
1696 spin_lock_irq(&io_request_lock);
1697
1698 if (time_after_eq(jiffies, timeout)) {
1699 printk("scsi%d: timeout at NCR5380.c:%d\n", instance->host_no, __LINE__);
1700 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
1701 return -1;
1702 }
1703 }
1704 #else /* NCR_TIMEOUT */
1705 while (!(NCR5380_read(STATUS_REG) & SR_REQ));
1706 #endif /* def NCR_TIMEOUT */
1707
1708 dprintk(NDEBUG_SELECTION, ("scsi%d : target %d selected, going into MESSAGE OUT phase.\n", instance->host_no, cmd->target));
1709 tmp[0] = IDENTIFY(((instance->irq == SCSI_IRQ_NONE) ? 0 : 1), cmd->lun);
1710
1711 len = 1;
1712 cmd->tag = 0;
1713
1714 /* Send message(s) */
1715 data = tmp;
1716 phase = PHASE_MSGOUT;
1717 NCR5380_transfer_pio(instance, &phase, &len, &data);
1718 dprintk(NDEBUG_SELECTION, ("scsi%d : nexus established.\n", instance->host_no));
1719 /* XXX need to handle errors here */
1720 hostdata->connected = cmd;
1721 hostdata->busy[cmd->target] |= (1 << cmd->lun);
1722
1723 initialize_SCp(cmd);
1724
1725
1726 return 0;
1727 }
1728
1729 /*
1730 * Function : int NCR5380_transfer_pio (struct Scsi_Host *instance,
1731 * unsigned char *phase, int *count, unsigned char **data)
1732 *
1733 * Purpose : transfers data in given phase using polled I/O
1734 *
1735 * Inputs : instance - instance of driver, *phase - pointer to
1736 * what phase is expected, *count - pointer to number of
1737 * bytes to transfer, **data - pointer to data pointer.
1738 *
1739 * Returns : -1 when different phase is entered without transferring
1740 * maximum number of bytes, 0 if all bytes or transfered or exit
1741 * is in same phase.
1742 *
1743 * Also, *phase, *count, *data are modified in place.
1744 *
1745 * XXX Note : handling for bus free may be useful.
1746 */
1747
1748 /*
1749 * Note : this code is not as quick as it could be, however it
1750 * IS 100% reliable, and for the actual data transfer where speed
1751 * counts, we will always do a pseudo DMA or DMA transfer.
1752 */
1753
NCR5380_transfer_pio(struct Scsi_Host * instance,unsigned char * phase,int * count,unsigned char ** data)1754 static int NCR5380_transfer_pio(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
1755 NCR5380_local_declare();
1756 unsigned char p = *phase, tmp;
1757 int c = *count;
1758 unsigned char *d = *data;
1759 /*
1760 * RvC: some administrative data to process polling time
1761 */
1762 int break_allowed = 0;
1763 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1764 NCR5380_setup(instance);
1765
1766 if (!(p & SR_IO))
1767 dprintk(NDEBUG_PIO, ("scsi%d : pio write %d bytes\n", instance->host_no, c));
1768 else
1769 dprintk(NDEBUG_PIO, ("scsi%d : pio read %d bytes\n", instance->host_no, c));
1770
1771 /*
1772 * The NCR5380 chip will only drive the SCSI bus when the
1773 * phase specified in the appropriate bits of the TARGET COMMAND
1774 * REGISTER match the STATUS REGISTER
1775 */
1776
1777 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
1778
1779 /* RvC: don't know if this is necessary, but other SCSI I/O is short
1780 * so breaks are not necessary there
1781 */
1782 if ((p == PHASE_DATAIN) || (p == PHASE_DATAOUT)) {
1783 break_allowed = 1;
1784 }
1785 do {
1786 /*
1787 * Wait for assertion of REQ, after which the phase bits will be
1788 * valid
1789 */
1790
1791 /* RvC: we simply poll once, after that we stop temporarily
1792 * and let the device buffer fill up
1793 * if breaking is not allowed, we keep polling as long as needed
1794 */
1795
1796 while (!((tmp = NCR5380_read(STATUS_REG)) & SR_REQ) && !break_allowed);
1797 if (!(tmp & SR_REQ)) {
1798 /* timeout condition */
1799 hostdata->time_expires = jiffies + USLEEP_SLEEP;
1800 NCR5380_set_timer(instance);
1801 break;
1802 }
1803
1804 dprintk(NDEBUG_HANDSHAKE, ("scsi%d : REQ detected\n", instance->host_no));
1805
1806 /* Check for phase mismatch */
1807 if ((tmp & PHASE_MASK) != p) {
1808 dprintk(NDEBUG_HANDSHAKE, ("scsi%d : phase mismatch\n", instance->host_no));
1809 NCR5380_dprint_phase(NDEBUG_HANDSHAKE, instance);
1810 break;
1811 }
1812 /* Do actual transfer from SCSI bus to / from memory */
1813 if (!(p & SR_IO))
1814 NCR5380_write(OUTPUT_DATA_REG, *d);
1815 else
1816 *d = NCR5380_read(CURRENT_SCSI_DATA_REG);
1817
1818 ++d;
1819
1820 /*
1821 * The SCSI standard suggests that in MSGOUT phase, the initiator
1822 * should drop ATN on the last byte of the message phase
1823 * after REQ has been asserted for the handshake but before
1824 * the initiator raises ACK.
1825 */
1826
1827 if (!(p & SR_IO)) {
1828 if (!((p & SR_MSG) && c > 1)) {
1829 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
1830 NCR5380_dprint(NDEBUG_PIO, instance);
1831 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ACK);
1832 } else {
1833 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN);
1834 NCR5380_dprint(NDEBUG_PIO, instance);
1835 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
1836 }
1837 } else {
1838 NCR5380_dprint(NDEBUG_PIO, instance);
1839 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK);
1840 }
1841
1842 while (NCR5380_read(STATUS_REG) & SR_REQ);
1843
1844 dprintk(NDEBUG_HANDSHAKE, ("scsi%d : req false, handshake complete\n", instance->host_no));
1845
1846 /*
1847 * We have several special cases to consider during REQ/ACK handshaking :
1848 * 1. We were in MSGOUT phase, and we are on the last byte of the
1849 * message. ATN must be dropped as ACK is dropped.
1850 *
1851 * 2. We are in a MSGIN phase, and we are on the last byte of the
1852 * message. We must exit with ACK asserted, so that the calling
1853 * code may raise ATN before dropping ACK to reject the message.
1854 *
1855 * 3. ACK and ATN are clear and the target may proceed as normal.
1856 */
1857 if (!(p == PHASE_MSGIN && c == 1)) {
1858 if (p == PHASE_MSGOUT && c > 1)
1859 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1860 else
1861 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1862 }
1863 } while (--c);
1864
1865 dprintk(NDEBUG_PIO, ("scsi%d : residual %d\n", instance->host_no, c));
1866
1867 *count = c;
1868 *data = d;
1869 tmp = NCR5380_read(STATUS_REG);
1870 if (tmp & SR_REQ)
1871 *phase = tmp & PHASE_MASK;
1872 else
1873 *phase = PHASE_UNKNOWN;
1874
1875 if (!c || (*phase == p))
1876 return 0;
1877 else
1878 return -1;
1879 }
1880
1881 /**
1882 * do_reset - issue a reset command
1883 * @host: adapter to reset
1884 *
1885 * Issue a reset sequence to the NCR5380 and try and get the bus
1886 * back into sane shape.
1887 *
1888 * Locks: caller holds io_request lock
1889 */
1890
do_reset(struct Scsi_Host * host)1891 static void do_reset(struct Scsi_Host *host) {
1892 NCR5380_local_declare();
1893 NCR5380_setup(host);
1894
1895 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(NCR5380_read(STATUS_REG) & PHASE_MASK));
1896 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST);
1897 udelay(25);
1898 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
1899 }
1900
1901 /*
1902 * Function : do_abort (Scsi_Host *host)
1903 *
1904 * Purpose : abort the currently established nexus. Should only be
1905 * called from a routine which can drop into a
1906 *
1907 * Returns : 0 on success, -1 on failure.
1908 *
1909 * Locks: io_request lock held by caller
1910 */
1911
do_abort(struct Scsi_Host * host)1912 static int do_abort(struct Scsi_Host *host) {
1913 NCR5380_local_declare();
1914 unsigned char tmp, *msgptr, phase;
1915 int len;
1916 NCR5380_setup(host);
1917
1918
1919 /* Request message out phase */
1920 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1921
1922 /*
1923 * Wait for the target to indicate a valid phase by asserting
1924 * REQ. Once this happens, we'll have either a MSGOUT phase
1925 * and can immediately send the ABORT message, or we'll have some
1926 * other phase and will have to source/sink data.
1927 *
1928 * We really don't care what value was on the bus or what value
1929 * the target sees, so we just handshake.
1930 */
1931
1932 while (!(tmp = NCR5380_read(STATUS_REG)) & SR_REQ);
1933
1934 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
1935
1936 if ((tmp & PHASE_MASK) != PHASE_MSGOUT) {
1937 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
1938 while (NCR5380_read(STATUS_REG) & SR_REQ);
1939 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
1940 }
1941 tmp = ABORT;
1942 msgptr = &tmp;
1943 len = 1;
1944 phase = PHASE_MSGOUT;
1945 NCR5380_transfer_pio(host, &phase, &len, &msgptr);
1946
1947 /*
1948 * If we got here, and the command completed successfully,
1949 * we're about to go into bus free state.
1950 */
1951
1952 return len ? -1 : 0;
1953 }
1954
1955 #if defined(REAL_DMA) || defined(PSEUDO_DMA) || defined (REAL_DMA_POLL)
1956 /*
1957 * Function : int NCR5380_transfer_dma (struct Scsi_Host *instance,
1958 * unsigned char *phase, int *count, unsigned char **data)
1959 *
1960 * Purpose : transfers data in given phase using either real
1961 * or pseudo DMA.
1962 *
1963 * Inputs : instance - instance of driver, *phase - pointer to
1964 * what phase is expected, *count - pointer to number of
1965 * bytes to transfer, **data - pointer to data pointer.
1966 *
1967 * Returns : -1 when different phase is entered without transferring
1968 * maximum number of bytes, 0 if all bytes or transfered or exit
1969 * is in same phase.
1970 *
1971 * Also, *phase, *count, *data are modified in place.
1972 *
1973 * Locks: io_request lock held by caller
1974 */
1975
1976
NCR5380_transfer_dma(struct Scsi_Host * instance,unsigned char * phase,int * count,unsigned char ** data)1977 static int NCR5380_transfer_dma(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
1978 NCR5380_local_declare();
1979 register int c = *count;
1980 register unsigned char p = *phase;
1981 register unsigned char *d = *data;
1982 unsigned char tmp;
1983 int foo;
1984 #if defined(REAL_DMA_POLL)
1985 int cnt, toPIO;
1986 unsigned char saved_data = 0, overrun = 0, residue;
1987 #endif
1988
1989 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
1990
1991 NCR5380_setup(instance);
1992
1993 if ((tmp = (NCR5380_read(STATUS_REG) & PHASE_MASK)) != p) {
1994 *phase = tmp;
1995 return -1;
1996 }
1997 #if defined(REAL_DMA) || defined(REAL_DMA_POLL)
1998 #ifdef READ_OVERRUNS
1999 if (p & SR_IO) {
2000 c -= 2;
2001 }
2002 #endif
2003 dprintk(NDEBUG_DMA, ("scsi%d : initializing DMA channel %d for %s, %d bytes %s %0x\n", instance->host_no, instance->dma_channel, (p & SR_IO) ? "reading" : "writing", c, (p & SR_IO) ? "to" : "from", (unsigned) d));
2004 hostdata->dma_len = (p & SR_IO) ? NCR5380_dma_read_setup(instance, d, c) : NCR5380_dma_write_setup(instance, d, c);
2005 #endif
2006
2007 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
2008
2009 #ifdef REAL_DMA
2010 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_EOP_INTR | MR_MONITOR_BSY);
2011 #elif defined(REAL_DMA_POLL)
2012 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
2013 #else
2014 /*
2015 * Note : on my sample board, watch-dog timeouts occurred when interrupts
2016 * were not disabled for the duration of a single DMA transfer, from
2017 * before the setting of DMA mode to after transfer of the last byte.
2018 */
2019
2020 #if defined(PSEUDO_DMA) && defined(UNSAFE)
2021 spin_unlock_irq(&io_request_lock);
2022 #endif
2023 /* KLL May need eop and parity in 53c400 */
2024 if (hostdata->flags & FLAG_NCR53C400)
2025 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_PAR_CHECK | MR_ENABLE_PAR_INTR | MR_ENABLE_EOP_INTR | MR_DMA_MODE | MR_MONITOR_BSY);
2026 else
2027 NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
2028 #endif /* def REAL_DMA */
2029
2030 dprintk(NDEBUG_DMA, ("scsi%d : mode reg = 0x%X\n", instance->host_no, NCR5380_read(MODE_REG)));
2031
2032 /*
2033 * On the PAS16 at least I/O recovery delays are not needed here.
2034 * Everyone else seems to want them.
2035 */
2036
2037 if (p & SR_IO) {
2038 io_recovery_delay(1);
2039 NCR5380_write(START_DMA_INITIATOR_RECEIVE_REG, 0);
2040 } else {
2041 io_recovery_delay(1);
2042 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
2043 io_recovery_delay(1);
2044 NCR5380_write(START_DMA_SEND_REG, 0);
2045 io_recovery_delay(1);
2046 }
2047
2048 #if defined(REAL_DMA_POLL)
2049 do {
2050 tmp = NCR5380_read(BUS_AND_STATUS_REG);
2051 } while ((tmp & BASR_PHASE_MATCH) && !(tmp & (BASR_BUSY_ERROR | BASR_END_DMA_TRANSFER)));
2052
2053 /*
2054 At this point, either we've completed DMA, or we have a phase mismatch,
2055 or we've unexpectedly lost BUSY (which is a real error).
2056
2057 For write DMAs, we want to wait until the last byte has been
2058 transferred out over the bus before we turn off DMA mode. Alas, there
2059 seems to be no terribly good way of doing this on a 5380 under all
2060 conditions. For non-scatter-gather operations, we can wait until REQ
2061 and ACK both go false, or until a phase mismatch occurs. Gather-writes
2062 are nastier, since the device will be expecting more data than we
2063 are prepared to send it, and REQ will remain asserted. On a 53C8[01] we
2064 could test LAST BIT SENT to assure transfer (I imagine this is precisely
2065 why this signal was added to the newer chips) but on the older 538[01]
2066 this signal does not exist. The workaround for this lack is a watchdog;
2067 we bail out of the wait-loop after a modest amount of wait-time if
2068 the usual exit conditions are not met. Not a terribly clean or
2069 correct solution :-%
2070
2071 Reads are equally tricky due to a nasty characteristic of the NCR5380.
2072 If the chip is in DMA mode for an READ, it will respond to a target's
2073 REQ by latching the SCSI data into the INPUT DATA register and asserting
2074 ACK, even if it has _already_ been notified by the DMA controller that
2075 the current DMA transfer has completed! If the NCR5380 is then taken
2076 out of DMA mode, this already-acknowledged byte is lost.
2077
2078 This is not a problem for "one DMA transfer per command" reads, because
2079 the situation will never arise... either all of the data is DMA'ed
2080 properly, or the target switches to MESSAGE IN phase to signal a
2081 disconnection (either operation bringing the DMA to a clean halt).
2082 However, in order to handle scatter-reads, we must work around the
2083 problem. The chosen fix is to DMA N-2 bytes, then check for the
2084 condition before taking the NCR5380 out of DMA mode. One or two extra
2085 bytes are transferred via PIO as necessary to fill out the original
2086 request.
2087 */
2088
2089 if (p & SR_IO) {
2090 #ifdef READ_OVERRUNS
2091 udelay(10);
2092 if (((NCR5380_read(BUS_AND_STATUS_REG) & (BASR_PHASE_MATCH | BASR_ACK)) == (BASR_PHASE_MATCH | BASR_ACK))) {
2093 saved_data = NCR5380_read(INPUT_DATA_REGISTER);
2094 overrun = 1;
2095 }
2096 #endif
2097 } else {
2098 int limit = 100;
2099 while (((tmp = NCR5380_read(BUS_AND_STATUS_REG)) & BASR_ACK) || (NCR5380_read(STATUS_REG) & SR_REQ)) {
2100 if (!(tmp & BASR_PHASE_MATCH))
2101 break;
2102 if (--limit < 0)
2103 break;
2104 }
2105 }
2106
2107 dprintk(NDEBUG_DMA, ("scsi%d : polled DMA transfer complete, basr 0x%X, sr 0x%X\n", instance->host_no, tmp, NCR5380_read(STATUS_REG)));
2108
2109 NCR5380_write(MODE_REG, MR_BASE);
2110 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2111
2112 residue = NCR5380_dma_residual(instance);
2113 c -= residue;
2114 *count -= c;
2115 *data += c;
2116 *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
2117
2118 #ifdef READ_OVERRUNS
2119 if (*phase == p && (p & SR_IO) && residue == 0) {
2120 if (overrun) {
2121 dprintk(NDEBUG_DMA, ("Got an input overrun, using saved byte\n"));
2122 **data = saved_data;
2123 *data += 1;
2124 *count -= 1;
2125 cnt = toPIO = 1;
2126 } else {
2127 printk("No overrun??\n");
2128 cnt = toPIO = 2;
2129 }
2130 dprintk(NDEBUG_DMA, ("Doing %d-byte PIO to 0x%X\n", cnt, *data));
2131 NCR5380_transfer_pio(instance, phase, &cnt, data);
2132 *count -= toPIO - cnt;
2133 }
2134 #endif
2135
2136 dprintk(NDEBUG_DMA, ("Return with data ptr = 0x%X, count %d, last 0x%X, next 0x%X\n", *data, *count, *(*data + *count - 1), *(*data + *count)));
2137 return 0;
2138
2139 #elif defined(REAL_DMA)
2140 return 0;
2141 #else /* defined(REAL_DMA_POLL) */
2142 if (p & SR_IO) {
2143 #ifdef DMA_WORKS_RIGHT
2144 foo = NCR5380_pread(instance, d, c);
2145 #else
2146 int diff = 1;
2147 if (hostdata->flags & FLAG_NCR53C400) {
2148 diff = 0;
2149 }
2150 if (!(foo = NCR5380_pread(instance, d, c - diff))) {
2151 /*
2152 * We can't disable DMA mode after successfully transferring
2153 * what we plan to be the last byte, since that would open up
2154 * a race condition where if the target asserted REQ before
2155 * we got the DMA mode reset, the NCR5380 would have latched
2156 * an additional byte into the INPUT DATA register and we'd
2157 * have dropped it.
2158 *
2159 * The workaround was to transfer one fewer bytes than we
2160 * intended to with the pseudo-DMA read function, wait for
2161 * the chip to latch the last byte, read it, and then disable
2162 * pseudo-DMA mode.
2163 *
2164 * After REQ is asserted, the NCR5380 asserts DRQ and ACK.
2165 * REQ is deasserted when ACK is asserted, and not reasserted
2166 * until ACK goes false. Since the NCR5380 won't lower ACK
2167 * until DACK is asserted, which won't happen unless we twiddle
2168 * the DMA port or we take the NCR5380 out of DMA mode, we
2169 * can guarantee that we won't handshake another extra
2170 * byte.
2171 */
2172
2173 if (!(hostdata->flags & FLAG_NCR53C400)) {
2174 while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ));
2175 /* Wait for clean handshake */
2176 while (NCR5380_read(STATUS_REG) & SR_REQ);
2177 d[c - 1] = NCR5380_read(INPUT_DATA_REG);
2178 }
2179 }
2180 #endif
2181 } else {
2182 #ifdef DMA_WORKS_RIGHT
2183 foo = NCR5380_pwrite(instance, d, c);
2184 #else
2185 int timeout;
2186 dprintk(NDEBUG_C400_PWRITE, ("About to pwrite %d bytes\n", c));
2187 if (!(foo = NCR5380_pwrite(instance, d, c))) {
2188 /*
2189 * Wait for the last byte to be sent. If REQ is being asserted for
2190 * the byte we're interested, we'll ACK it and it will go false.
2191 */
2192 if (!(hostdata->flags & FLAG_HAS_LAST_BYTE_SENT)) {
2193 timeout = 20000;
2194 while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ) && (NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH));
2195
2196 if (!timeout)
2197 dprintk(NDEBUG_LAST_BYTE_SENT, ("scsi%d : timed out on last byte\n", instance->host_no));
2198
2199 if (hostdata->flags & FLAG_CHECK_LAST_BYTE_SENT) {
2200 hostdata->flags &= ~FLAG_CHECK_LAST_BYTE_SENT;
2201 if (NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT) {
2202 hostdata->flags |= FLAG_HAS_LAST_BYTE_SENT;
2203 dprintk(NDEBUG_LAST_WRITE_SENT, ("scsi%d : last bit sent works\n", instance->host_no));
2204 }
2205 }
2206 } else {
2207 dprintk(NDEBUG_C400_PWRITE, ("Waiting for LASTBYTE\n"));
2208 while (!(NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT));
2209 dprintk(NDEBUG_C400_PWRITE, ("Got LASTBYTE\n"));
2210 }
2211 }
2212 #endif
2213 }
2214 NCR5380_write(MODE_REG, MR_BASE);
2215 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2216
2217 if ((!(p & SR_IO)) && (hostdata->flags & FLAG_NCR53C400)) {
2218 dprintk(NDEBUG_C400_PWRITE, ("53C400w: Checking for IRQ\n"));
2219 if (NCR5380_read(BUS_AND_STATUS_REG) & BASR_IRQ) {
2220 dprintk(NDEBUG_C400_PWRITE, ("53C400w: got it, reading reset interrupt reg\n"));
2221 NCR5380_read(RESET_PARITY_INTERRUPT_REG);
2222 } else {
2223 printk("53C400w: IRQ NOT THERE!\n");
2224 }
2225 }
2226 *data = d + c;
2227 *count = 0;
2228 *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
2229 #if defined(PSEUDO_DMA) && defined(UNSAFE)
2230 spin_lock_irq(&io_request_lock);
2231 #endif /* defined(REAL_DMA_POLL) */
2232 return foo;
2233 #endif /* def REAL_DMA */
2234 }
2235 #endif /* defined(REAL_DMA) | defined(PSEUDO_DMA) */
2236
2237 /*
2238 * Function : NCR5380_information_transfer (struct Scsi_Host *instance)
2239 *
2240 * Purpose : run through the various SCSI phases and do as the target
2241 * directs us to. Operates on the currently connected command,
2242 * instance->connected.
2243 *
2244 * Inputs : instance, instance for which we are doing commands
2245 *
2246 * Side effects : SCSI things happen, the disconnected queue will be
2247 * modified if a command disconnects, *instance->connected will
2248 * change.
2249 *
2250 * XXX Note : we need to watch for bus free or a reset condition here
2251 * to recover from an unexpected bus free condition.
2252 *
2253 * Locks: io_request_lock held by caller
2254 */
2255
NCR5380_information_transfer(struct Scsi_Host * instance)2256 static void NCR5380_information_transfer(struct Scsi_Host *instance) {
2257 NCR5380_local_declare();
2258 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)instance->hostdata;
2259 unsigned char msgout = NOP;
2260 int sink = 0;
2261 int len;
2262 #if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
2263 int transfersize;
2264 #endif
2265 unsigned char *data;
2266 unsigned char phase, tmp, extended_msg[10], old_phase = 0xff;
2267 Scsi_Cmnd *cmd = (Scsi_Cmnd *) hostdata->connected;
2268 /* RvC: we need to set the end of the polling time */
2269 unsigned long poll_time = jiffies + USLEEP_POLL;
2270
2271 NCR5380_setup(instance);
2272
2273 while (1) {
2274 tmp = NCR5380_read(STATUS_REG);
2275 /* We only have a valid SCSI phase when REQ is asserted */
2276 if (tmp & SR_REQ) {
2277 phase = (tmp & PHASE_MASK);
2278 if (phase != old_phase) {
2279 old_phase = phase;
2280 NCR5380_dprint_phase(NDEBUG_INFORMATION, instance);
2281 }
2282 if (sink && (phase != PHASE_MSGOUT)) {
2283 NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
2284
2285 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
2286 while (NCR5380_read(STATUS_REG) & SR_REQ);
2287 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
2288 sink = 0;
2289 continue;
2290 }
2291 switch (phase) {
2292 case PHASE_DATAIN:
2293 case PHASE_DATAOUT:
2294 #if (NDEBUG & NDEBUG_NO_DATAOUT)
2295 printk("scsi%d : NDEBUG_NO_DATAOUT set, attempted DATAOUT aborted\n", instance->host_no);
2296 sink = 1;
2297 do_abort(instance);
2298 cmd->result = DID_ERROR << 16;
2299 cmd->done(cmd);
2300 return;
2301 #endif
2302 /*
2303 * If there is no room left in the current buffer in the
2304 * scatter-gather list, move onto the next one.
2305 */
2306
2307 if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) {
2308 ++cmd->SCp.buffer;
2309 --cmd->SCp.buffers_residual;
2310 cmd->SCp.this_residual = cmd->SCp.buffer->length;
2311 cmd->SCp.ptr = cmd->SCp.buffer->address;
2312 dprintk(NDEBUG_INFORMATION, ("scsi%d : %d bytes and %d buffers left\n", instance->host_no, cmd->SCp.this_residual, cmd->SCp.buffers_residual));
2313 }
2314 /*
2315 * The preferred transfer method is going to be
2316 * PSEUDO-DMA for systems that are strictly PIO,
2317 * since we can let the hardware do the handshaking.
2318 *
2319 * For this to work, we need to know the transfersize
2320 * ahead of time, since the pseudo-DMA code will sit
2321 * in an unconditional loop.
2322 */
2323
2324 #if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
2325 /* KLL
2326 * PSEUDO_DMA is defined here. If this is the g_NCR5380
2327 * driver then it will always be defined, so the
2328 * FLAG_NO_PSEUDO_DMA is used to inhibit PDMA in the base
2329 * NCR5380 case. I think this is a fairly clean solution.
2330 * We supplement these 2 if's with the flag.
2331 */
2332 #ifdef NCR5380_dma_xfer_len
2333 if (!cmd->device->borken && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && (transfersize = NCR5380_dma_xfer_len(instance, cmd)) != 0) {
2334 #else
2335 transfersize = cmd->transfersize;
2336
2337 #ifdef LIMIT_TRANSFERSIZE /* If we have problems with interrupt service */
2338 if (transfersize > 512)
2339 transfersize = 512;
2340 #endif /* LIMIT_TRANSFERSIZE */
2341
2342 if (!cmd->device->borken && transfersize && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && cmd->SCp.this_residual && !(cmd->SCp.this_residual % transfersize)) {
2343 /* Limit transfers to 32K, for xx400 & xx406
2344 * pseudoDMA that transfers in 128 bytes blocks. */
2345 if (transfersize > 32 * 1024)
2346 transfersize = 32 * 1024;
2347 #endif
2348 len = transfersize;
2349 if (NCR5380_transfer_dma(instance, &phase, &len, (unsigned char **) &cmd->SCp.ptr)) {
2350 /*
2351 * If the watchdog timer fires, all future accesses to this
2352 * device will use the polled-IO.
2353 */
2354 printk("scsi%d : switching target %d lun %d to slow handshake\n", instance->host_no, cmd->target, cmd->lun);
2355 cmd->device->borken = 1;
2356 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
2357 sink = 1;
2358 do_abort(instance);
2359 cmd->result = DID_ERROR << 16;
2360 cmd->done(cmd);
2361 /* XXX - need to source or sink data here, as appropriate */
2362 } else
2363 cmd->SCp.this_residual -= transfersize - len;
2364 } else
2365 #endif /* defined(PSEUDO_DMA) || defined(REAL_DMA_POLL) */
2366 NCR5380_transfer_pio(instance, &phase, (int *) &cmd->SCp.this_residual, (unsigned char **)
2367 &cmd->SCp.ptr);
2368 break;
2369 case PHASE_MSGIN:
2370 len = 1;
2371 data = &tmp;
2372 NCR5380_transfer_pio(instance, &phase, &len, &data);
2373 cmd->SCp.Message = tmp;
2374
2375 switch (tmp) {
2376 /*
2377 * Linking lets us reduce the time required to get the
2378 * next command out to the device, hopefully this will
2379 * mean we don't waste another revolution due to the delays
2380 * required by ARBITRATION and another SELECTION.
2381 *
2382 * In the current implementation proposal, low level drivers
2383 * merely have to start the next command, pointed to by
2384 * next_link, done() is called as with unlinked commands.
2385 */
2386 #ifdef LINKED
2387 case LINKED_CMD_COMPLETE:
2388 case LINKED_FLG_CMD_COMPLETE:
2389 /* Accept message by clearing ACK */
2390 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2391 dprintk(NDEBUG_LINKED, ("scsi%d : target %d lun %d linked command complete.\n", instance->host_no, cmd->target, cmd->lun));
2392 /*
2393 * Sanity check : A linked command should only terminate with
2394 * one of these messages if there are more linked commands
2395 * available.
2396 */
2397 if (!cmd->next_link) {
2398 printk("scsi%d : target %d lun %d linked command complete, no next_link\n" instance->host_no, cmd->target, cmd->lun);
2399 sink = 1;
2400 do_abort(instance);
2401 return;
2402 }
2403 initialize_SCp(cmd->next_link);
2404 /* The next command is still part of this process */
2405 cmd->next_link->tag = cmd->tag;
2406 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
2407 dprintk(NDEBUG_LINKED, ("scsi%d : target %d lun %d linked request done, calling scsi_done().\n", instance->host_no, cmd->target, cmd->lun));
2408 collect_stats(hostdata, cmd);
2409 cmd->scsi_done(cmd);
2410 cmd = hostdata->connected;
2411 break;
2412 #endif /* def LINKED */
2413 case ABORT:
2414 case COMMAND_COMPLETE:
2415 /* Accept message by clearing ACK */
2416 sink = 1;
2417 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2418 hostdata->connected = NULL;
2419 dprintk(NDEBUG_QUEUES, ("scsi%d : command for target %d, lun %d completed\n", instance->host_no, cmd->target, cmd->lun));
2420 hostdata->busy[cmd->target] &= ~(1 << cmd->lun);
2421
2422 /*
2423 * I'm not sure what the correct thing to do here is :
2424 *
2425 * If the command that just executed is NOT a request
2426 * sense, the obvious thing to do is to set the result
2427 * code to the values of the stored parameters.
2428 *
2429 * If it was a REQUEST SENSE command, we need some way
2430 * to differentiate between the failure code of the original
2431 * and the failure code of the REQUEST sense - the obvious
2432 * case is success, where we fall through and leave the result
2433 * code unchanged.
2434 *
2435 * The non-obvious place is where the REQUEST SENSE failed
2436 */
2437
2438 if (cmd->cmnd[0] != REQUEST_SENSE)
2439 cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
2440 else if (cmd->SCp.Status != GOOD)
2441 cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16);
2442
2443 #ifdef AUTOSENSE
2444 if ((cmd->cmnd[0] != REQUEST_SENSE) && (cmd->SCp.Status == CHECK_CONDITION)) {
2445 dprintk(NDEBUG_AUTOSENSE, ("scsi%d : performing request sense\n", instance->host_no));
2446 cmd->cmnd[0] = REQUEST_SENSE;
2447 cmd->cmnd[1] &= 0xe0;
2448 cmd->cmnd[2] = 0;
2449 cmd->cmnd[3] = 0;
2450 cmd->cmnd[4] = sizeof(cmd->sense_buffer);
2451 cmd->cmnd[5] = 0;
2452
2453 cmd->SCp.buffer = NULL;
2454 cmd->SCp.buffers_residual = 0;
2455 cmd->SCp.ptr = (char *) cmd->sense_buffer;
2456 cmd->SCp.this_residual = sizeof(cmd->sense_buffer);
2457
2458 LIST(cmd, hostdata->issue_queue);
2459 cmd->host_scribble = (unsigned char *)
2460 hostdata->issue_queue;
2461 hostdata->issue_queue = (Scsi_Cmnd *) cmd;
2462 dprintk(NDEBUG_QUEUES, ("scsi%d : REQUEST SENSE added to head of issue queue\n", instance->host_no));
2463 } else
2464 #endif /* def AUTOSENSE */
2465 {
2466 collect_stats(hostdata, cmd);
2467 cmd->scsi_done(cmd);
2468 }
2469
2470 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
2471 /*
2472 * Restore phase bits to 0 so an interrupted selection,
2473 * arbitration can resume.
2474 */
2475 NCR5380_write(TARGET_COMMAND_REG, 0);
2476
2477 while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
2478 barrier();
2479 return;
2480 case MESSAGE_REJECT:
2481 /* Accept message by clearing ACK */
2482 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2483 switch (hostdata->last_message) {
2484 case HEAD_OF_QUEUE_TAG:
2485 case ORDERED_QUEUE_TAG:
2486 case SIMPLE_QUEUE_TAG:
2487 cmd->device->tagged_queue = 0;
2488 hostdata->busy[cmd->target] |= (1 << cmd->lun);
2489 break;
2490 default:
2491 break;
2492 }
2493 case DISCONNECT:{
2494 /* Accept message by clearing ACK */
2495 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2496 cmd->device->disconnect = 1;
2497 LIST(cmd, hostdata->disconnected_queue);
2498 cmd->host_scribble = (unsigned char *)
2499 hostdata->disconnected_queue;
2500 hostdata->connected = NULL;
2501 hostdata->disconnected_queue = cmd;
2502 dprintk(NDEBUG_QUEUES, ("scsi%d : command for target %d lun %d was moved from connected to" " the disconnected_queue\n", instance->host_no, cmd->target, cmd->lun));
2503 /*
2504 * Restore phase bits to 0 so an interrupted selection,
2505 * arbitration can resume.
2506 */
2507 NCR5380_write(TARGET_COMMAND_REG, 0);
2508
2509 /* Enable reselect interrupts */
2510 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
2511 /* Wait for bus free to avoid nasty timeouts */
2512 while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
2513 barrier();
2514 return;
2515 }
2516 /*
2517 * The SCSI data pointer is *IMPLICITLY* saved on a disconnect
2518 * operation, in violation of the SCSI spec so we can safely
2519 * ignore SAVE/RESTORE pointers calls.
2520 *
2521 * Unfortunately, some disks violate the SCSI spec and
2522 * don't issue the required SAVE_POINTERS message before
2523 * disconnecting, and we have to break spec to remain
2524 * compatible.
2525 */
2526 case SAVE_POINTERS:
2527 case RESTORE_POINTERS:
2528 /* Accept message by clearing ACK */
2529 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2530 break;
2531 case EXTENDED_MESSAGE:
2532 /*
2533 * Extended messages are sent in the following format :
2534 * Byte
2535 * 0 EXTENDED_MESSAGE == 1
2536 * 1 length (includes one byte for code, doesn't
2537 * include first two bytes)
2538 * 2 code
2539 * 3..length+1 arguments
2540 *
2541 * Start the extended message buffer with the EXTENDED_MESSAGE
2542 * byte, since print_msg() wants the whole thing.
2543 */
2544 extended_msg[0] = EXTENDED_MESSAGE;
2545 /* Accept first byte by clearing ACK */
2546 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2547 dprintk(NDEBUG_EXTENDED, ("scsi%d : receiving extended message\n", instance->host_no));
2548
2549 len = 2;
2550 data = extended_msg + 1;
2551 phase = PHASE_MSGIN;
2552 NCR5380_transfer_pio(instance, &phase, &len, &data);
2553
2554 dprintk(NDEBUG_EXTENDED, ("scsi%d : length=%d, code=0x%02x\n", instance->host_no, (int) extended_msg[1], (int) extended_msg[2]));
2555
2556 if (!len && extended_msg[1] <= (sizeof(extended_msg) - 1)) {
2557 /* Accept third byte by clearing ACK */
2558 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2559 len = extended_msg[1] - 1;
2560 data = extended_msg + 3;
2561 phase = PHASE_MSGIN;
2562
2563 NCR5380_transfer_pio(instance, &phase, &len, &data);
2564 dprintk(NDEBUG_EXTENDED, ("scsi%d : message received, residual %d\n", instance->host_no, len));
2565
2566 switch (extended_msg[2]) {
2567 case EXTENDED_SDTR:
2568 case EXTENDED_WDTR:
2569 case EXTENDED_MODIFY_DATA_POINTER:
2570 case EXTENDED_EXTENDED_IDENTIFY:
2571 tmp = 0;
2572 }
2573 } else if (len) {
2574 printk("scsi%d: error receiving extended message\n", instance->host_no);
2575 tmp = 0;
2576 } else {
2577 printk("scsi%d: extended message code %02x length %d is too long\n", instance->host_no, extended_msg[2], extended_msg[1]);
2578 tmp = 0;
2579 }
2580 /* Fall through to reject message */
2581
2582 /*
2583 * If we get something weird that we aren't expecting,
2584 * reject it.
2585 */
2586 default:
2587 if (!tmp) {
2588 printk("scsi%d: rejecting message ", instance->host_no);
2589 print_msg(extended_msg);
2590 printk("\n");
2591 } else if (tmp != EXTENDED_MESSAGE)
2592 printk("scsi%d: rejecting unknown message %02x from target %d, lun %d\n", instance->host_no, tmp, cmd->target, cmd->lun);
2593 else
2594 printk("scsi%d: rejecting unknown extended message code %02x, length %d from target %d, lun %d\n", instance->host_no, extended_msg[1], extended_msg[0], cmd->target, cmd->lun);
2595
2596 msgout = MESSAGE_REJECT;
2597 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
2598 break;
2599 } /* switch (tmp) */
2600 break;
2601 case PHASE_MSGOUT:
2602 len = 1;
2603 data = &msgout;
2604 hostdata->last_message = msgout;
2605 NCR5380_transfer_pio(instance, &phase, &len, &data);
2606 if (msgout == ABORT) {
2607 hostdata->busy[cmd->target] &= ~(1 << cmd->lun);
2608 hostdata->connected = NULL;
2609 cmd->result = DID_ERROR << 16;
2610 collect_stats(hostdata, cmd);
2611 cmd->scsi_done(cmd);
2612 NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
2613 return;
2614 }
2615 msgout = NOP;
2616 break;
2617 case PHASE_CMDOUT:
2618 len = cmd->cmd_len;
2619 data = cmd->cmnd;
2620 /*
2621 * XXX for performance reasons, on machines with a
2622 * PSEUDO-DMA architecture we should probably
2623 * use the dma transfer function.
2624 */
2625 NCR5380_transfer_pio(instance, &phase, &len, &data);
2626 if (!cmd->device->disconnect && should_disconnect(cmd->cmnd[0])) {
2627 hostdata->time_expires = jiffies + USLEEP_SLEEP;
2628 dprintk(NDEBUG_USLEEP, ("scsi%d : issued command, sleeping until %ul\n", instance->host_no, hostdata->time_expires));
2629 NCR5380_set_timer(instance);
2630 return;
2631 }
2632 break;
2633 case PHASE_STATIN:
2634 len = 1;
2635 data = &tmp;
2636 NCR5380_transfer_pio(instance, &phase, &len, &data);
2637 cmd->SCp.Status = tmp;
2638 break;
2639 default:
2640 printk("scsi%d : unknown phase\n", instance->host_no);
2641 NCR5380_dprint(NDEBUG_ALL, instance);
2642 } /* switch(phase) */
2643 } /* if (tmp * SR_REQ) */
2644 else {
2645 /* RvC: go to sleep if polling time expired
2646 */
2647 if (!cmd->device->disconnect && time_after_eq(jiffies, poll_time)) {
2648 hostdata->time_expires = jiffies + USLEEP_SLEEP;
2649 dprintk(NDEBUG_USLEEP, ("scsi%d : poll timed out, sleeping until %ul\n", instance->host_no, hostdata->time_expires));
2650 NCR5380_set_timer(instance);
2651 return;
2652 }
2653 }
2654 } /* while (1) */
2655 }
2656
2657 /*
2658 * Function : void NCR5380_reselect (struct Scsi_Host *instance)
2659 *
2660 * Purpose : does reselection, initializing the instance->connected
2661 * field to point to the Scsi_Cmnd for which the I_T_L or I_T_L_Q
2662 * nexus has been reestablished,
2663 *
2664 * Inputs : instance - this instance of the NCR5380.
2665 *
2666 * Locks: io_request_lock held by caller
2667 */
2668
2669 static void NCR5380_reselect(struct Scsi_Host *instance) {
2670 NCR5380_local_declare();
2671 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)
2672 instance->hostdata;
2673 unsigned char target_mask;
2674 unsigned char lun, phase;
2675 int len;
2676 unsigned char msg[3];
2677 unsigned char *data;
2678 Scsi_Cmnd *tmp = NULL, *prev;
2679 int abort = 0;
2680 NCR5380_setup(instance);
2681
2682 /*
2683 * Disable arbitration, etc. since the host adapter obviously
2684 * lost, and tell an interrupted NCR5380_select() to restart.
2685 */
2686
2687 NCR5380_write(MODE_REG, MR_BASE);
2688 hostdata->restart_select = 1;
2689
2690 target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
2691 dprintk(NDEBUG_SELECTION, ("scsi%d : reselect\n", instance->host_no));
2692
2693 /*
2694 * At this point, we have detected that our SCSI ID is on the bus,
2695 * SEL is true and BSY was false for at least one bus settle delay
2696 * (400 ns).
2697 *
2698 * We must assert BSY ourselves, until the target drops the SEL
2699 * signal.
2700 */
2701
2702 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY);
2703
2704 while (NCR5380_read(STATUS_REG) & SR_SEL);
2705 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2706
2707 /*
2708 * Wait for target to go into MSGIN.
2709 */
2710
2711 while (!(NCR5380_read(STATUS_REG) & SR_REQ));
2712
2713 len = 1;
2714 data = msg;
2715 phase = PHASE_MSGIN;
2716 NCR5380_transfer_pio(instance, &phase, &len, &data);
2717
2718 if (!msg[0] & 0x80) {
2719 printk("scsi%d : expecting IDENTIFY message, got ", instance->host_no);
2720 print_msg(msg);
2721 abort = 1;
2722 } else {
2723 /* Accept message by clearing ACK */
2724 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2725 lun = (msg[0] & 0x07);
2726
2727 /*
2728 * We need to add code for SCSI-II to track which devices have
2729 * I_T_L_Q nexuses established, and which have simple I_T_L
2730 * nexuses so we can chose to do additional data transfer.
2731 */
2732
2733 /*
2734 * Find the command corresponding to the I_T_L or I_T_L_Q nexus we
2735 * just reestablished, and remove it from the disconnected queue.
2736 */
2737
2738
2739 for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue, prev = NULL; tmp; prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble)
2740 if ((target_mask == (1 << tmp->target)) && (lun == tmp->lun)
2741 ) {
2742 if (prev) {
2743 REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
2744 prev->host_scribble = tmp->host_scribble;
2745 } else {
2746 REMOVE(-1, hostdata->disconnected_queue, tmp, tmp->host_scribble);
2747 hostdata->disconnected_queue = (Scsi_Cmnd *) tmp->host_scribble;
2748 }
2749 tmp->host_scribble = NULL;
2750 break;
2751 }
2752 if (!tmp) {
2753 printk("scsi%d : warning : target bitmask %02x lun %d not in disconnect_queue.\n", instance->host_no, target_mask, lun);
2754 /*
2755 * Since we have an established nexus that we can't do anything with,
2756 * we must abort it.
2757 */
2758 abort = 1;
2759 }
2760 }
2761
2762 if (abort) {
2763 do_abort(instance);
2764 } else {
2765 hostdata->connected = tmp;
2766 dprintk(NDEBUG_RESELECTION, ("scsi%d : nexus established, target = %d, lun = %d, tag = %d\n", instance->host_no, tmp->target, tmp->lun, tmp->tag));
2767 }
2768 }
2769
2770 /*
2771 * Function : void NCR5380_dma_complete (struct Scsi_Host *instance)
2772 *
2773 * Purpose : called by interrupt handler when DMA finishes or a phase
2774 * mismatch occurs (which would finish the DMA transfer).
2775 *
2776 * Inputs : instance - this instance of the NCR5380.
2777 *
2778 * Returns : pointer to the Scsi_Cmnd structure for which the I_T_L
2779 * nexus has been reestablished, on failure NULL is returned.
2780 */
2781
2782 #ifdef REAL_DMA
2783 static void NCR5380_dma_complete(NCR5380_instance * instance) {
2784 NCR5380_local_declare();
2785 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata * instance->hostdata);
2786 int transferred;
2787 NCR5380_setup(instance);
2788
2789 /*
2790 * XXX this might not be right.
2791 *
2792 * Wait for final byte to transfer, ie wait for ACK to go false.
2793 *
2794 * We should use the Last Byte Sent bit, unfortunately this is
2795 * not available on the 5380/5381 (only the various CMOS chips)
2796 */
2797
2798 while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK);
2799
2800 NCR5380_write(MODE_REG, MR_BASE);
2801 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
2802
2803 /*
2804 * The only places we should see a phase mismatch and have to send
2805 * data from the same set of pointers will be the data transfer
2806 * phases. So, residual, requested length are only important here.
2807 */
2808
2809 if (!(hostdata->connected->SCp.phase & SR_CD)) {
2810 transferred = instance->dmalen - NCR5380_dma_residual();
2811 hostdata->connected->SCp.this_residual -= transferred;
2812 hostdata->connected->SCp.ptr += transferred;
2813 }
2814 }
2815 #endif /* def REAL_DMA */
2816
2817 /*
2818 * Function : int NCR5380_abort (Scsi_Cmnd *cmd)
2819 *
2820 * Purpose : abort a command
2821 *
2822 * Inputs : cmd - the Scsi_Cmnd to abort, code - code to set the
2823 * host byte of the result field to, if zero DID_ABORTED is
2824 * used.
2825 *
2826 * Returns : 0 - success, -1 on failure.
2827 *
2828 * XXX - there is no way to abort the command that is currently
2829 * connected, you have to wait for it to complete. If this is
2830 * a problem, we could implement longjmp() / setjmp(), setjmp()
2831 * called where the loop started in NCR5380_main().
2832 *
2833 * Locks: io_request_lock held by caller
2834 */
2835
2836 #ifndef NCR5380_abort
2837 static
2838 #endif
2839 int NCR5380_abort(Scsi_Cmnd * cmd) {
2840 NCR5380_local_declare();
2841 struct Scsi_Host *instance = cmd->host;
2842 struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
2843 Scsi_Cmnd *tmp, **prev;
2844
2845 printk("scsi%d : aborting command\n", instance->host_no);
2846 print_Scsi_Cmnd(cmd);
2847
2848 NCR5380_print_status(instance);
2849
2850 printk("scsi%d : aborting command\n", instance->host_no);
2851 print_Scsi_Cmnd(cmd);
2852
2853 NCR5380_print_status(instance);
2854
2855 NCR5380_setup(instance);
2856
2857 dprintk(NDEBUG_ABORT, ("scsi%d : abort called\n", instance->host_no));
2858 dprintk(NDEBUG_ABORT, (" basr 0x%X, sr 0x%X\n", NCR5380_read(BUS_AND_STATUS_REG), NCR5380_read(STATUS_REG)));
2859
2860 #if 0
2861 /*
2862 * Case 1 : If the command is the currently executing command,
2863 * we'll set the aborted flag and return control so that
2864 * information transfer routine can exit cleanly.
2865 */
2866
2867 if (hostdata->connected == cmd) {
2868 dprintk(NDEBUG_ABORT, ("scsi%d : aborting connected command\n", instance->host_no));
2869 hostdata->aborted = 1;
2870 /*
2871 * We should perform BSY checking, and make sure we haven't slipped
2872 * into BUS FREE.
2873 */
2874
2875 NCR5380_write(INITIATOR_COMMAND_REG, ICR_ASSERT_ATN);
2876 /*
2877 * Since we can't change phases until we've completed the current
2878 * handshake, we have to source or sink a byte of data if the current
2879 * phase is not MSGOUT.
2880 */
2881
2882 /*
2883 * Return control to the executing NCR drive so we can clear the
2884 * aborted flag and get back into our main loop.
2885 */
2886
2887 return 0;
2888 }
2889 #endif
2890
2891 /*
2892 * Case 2 : If the command hasn't been issued yet, we simply remove it
2893 * from the issue queue.
2894 */
2895 /* KLL */
2896 dprintk(NDEBUG_ABORT, ("scsi%d : abort going into loop.\n", instance->host_no));
2897 for (prev = (Scsi_Cmnd **) & (hostdata->issue_queue), tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp; prev = (Scsi_Cmnd **) & (tmp->host_scribble), tmp = (Scsi_Cmnd *) tmp->host_scribble)
2898 if (cmd == tmp) {
2899 REMOVE(5, *prev, tmp, tmp->host_scribble);
2900 (*prev) = (Scsi_Cmnd *) tmp->host_scribble;
2901 tmp->host_scribble = NULL;
2902 tmp->result = DID_ABORT << 16;
2903 dprintk(NDEBUG_ABORT, ("scsi%d : abort removed command from issue queue.\n", instance->host_no));
2904 tmp->done(tmp);
2905 return SCSI_ABORT_SUCCESS;
2906 }
2907 #if (NDEBUG & NDEBUG_ABORT)
2908 /* KLL */
2909 else if (prev == tmp)
2910 printk("scsi%d : LOOP\n", instance->host_no);
2911 #endif
2912
2913 /*
2914 * Case 3 : If any commands are connected, we're going to fail the abort
2915 * and let the high level SCSI driver retry at a later time or
2916 * issue a reset.
2917 *
2918 * Timeouts, and therefore aborted commands, will be highly unlikely
2919 * and handling them cleanly in this situation would make the common
2920 * case of noresets less efficient, and would pollute our code. So,
2921 * we fail.
2922 */
2923
2924 if (hostdata->connected) {
2925 dprintk(NDEBUG_ABORT, ("scsi%d : abort failed, command connected.\n", instance->host_no));
2926 return SCSI_ABORT_NOT_RUNNING;
2927 }
2928 /*
2929 * Case 4: If the command is currently disconnected from the bus, and
2930 * there are no connected commands, we reconnect the I_T_L or
2931 * I_T_L_Q nexus associated with it, go into message out, and send
2932 * an abort message.
2933 *
2934 * This case is especially ugly. In order to reestablish the nexus, we
2935 * need to call NCR5380_select(). The easiest way to implement this
2936 * function was to abort if the bus was busy, and let the interrupt
2937 * handler triggered on the SEL for reselect take care of lost arbitrations
2938 * where necessary, meaning interrupts need to be enabled.
2939 *
2940 * When interrupts are enabled, the queues may change - so we
2941 * can't remove it from the disconnected queue before selecting it
2942 * because that could cause a failure in hashing the nexus if that
2943 * device reselected.
2944 *
2945 * Since the queues may change, we can't use the pointers from when we
2946 * first locate it.
2947 *
2948 * So, we must first locate the command, and if NCR5380_select()
2949 * succeeds, then issue the abort, relocate the command and remove
2950 * it from the disconnected queue.
2951 */
2952
2953 for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; tmp = (Scsi_Cmnd *) tmp->host_scribble)
2954 if (cmd == tmp) {
2955 dprintk(NDEBUG_ABORT, ("scsi%d : aborting disconnected command.\n", instance->host_no));
2956
2957 if (NCR5380_select(instance, cmd, (int) cmd->tag))
2958 return SCSI_ABORT_BUSY;
2959 dprintk(NDEBUG_ABORT, ("scsi%d : nexus reestablished.\n", instance->host_no));
2960
2961 do_abort(instance);
2962
2963 for (prev = (Scsi_Cmnd **) & (hostdata->disconnected_queue), tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; prev = (Scsi_Cmnd **) & (tmp->host_scribble), tmp = (Scsi_Cmnd *) tmp->host_scribble)
2964 if (cmd == tmp) {
2965 REMOVE(5, *prev, tmp, tmp->host_scribble);
2966 *prev = (Scsi_Cmnd *) tmp->host_scribble;
2967 tmp->host_scribble = NULL;
2968 tmp->result = DID_ABORT << 16;
2969 tmp->done(tmp);
2970 return SCSI_ABORT_SUCCESS;
2971 }
2972 }
2973 /*
2974 * Case 5 : If we reached this point, the command was not found in any of
2975 * the queues.
2976 *
2977 * We probably reached this point because of an unlikely race condition
2978 * between the command completing successfully and the abortion code,
2979 * so we won't panic, but we will notify the user in case something really
2980 * broke.
2981 */
2982 printk("scsi%d : warning : SCSI command probably completed successfully\n" " before abortion\n", instance->host_no);
2983 return SCSI_ABORT_NOT_RUNNING;
2984 }
2985
2986
2987 /*
2988 * Function : int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int reset_flags)
2989 *
2990 * Purpose : reset the SCSI bus.
2991 *
2992 * Returns : SCSI_RESET_WAKEUP
2993 *
2994 * Locks: io_request_lock held by caller
2995 */
2996
2997 #ifndef NCR5380_reset
2998 static
2999 #endif
3000 int NCR5380_reset(Scsi_Cmnd * cmd, unsigned int dummy) {
3001 NCR5380_local_declare();
3002 NCR5380_setup(cmd->host);
3003
3004 NCR5380_print_status(cmd->host);
3005 do_reset(cmd->host);
3006
3007 return SCSI_RESET_WAKEUP;
3008 }
3009