1 /******************************************************************************
2 **  High Performance device driver for the Symbios 53C896 controller.
3 **
4 **  Copyright (C) 1998-2001  Gerard Roudier <groudier@free.fr>
5 **
6 **  This driver also supports all the Symbios 53C8XX controller family,
7 **  except 53C810 revisions < 16, 53C825 revisions < 16 and all
8 **  revisions of 53C815 controllers.
9 **
10 **  This driver is based on the Linux port of the FreeBSD ncr driver.
11 **
12 **  Copyright (C) 1994  Wolfgang Stanglmeier
13 **
14 **-----------------------------------------------------------------------------
15 **
16 **  This program is free software; you can redistribute it and/or modify
17 **  it under the terms of the GNU General Public License as published by
18 **  the Free Software Foundation; either version 2 of the License, or
19 **  (at your option) any later version.
20 **
21 **  This program is distributed in the hope that it will be useful,
22 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
23 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 **  GNU General Public License for more details.
25 **
26 **  You should have received a copy of the GNU General Public License
27 **  along with this program; if not, write to the Free Software
28 **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 **
30 **-----------------------------------------------------------------------------
31 **
32 **  The Linux port of the FreeBSD ncr driver has been achieved in
33 **  november 1995 by:
34 **
35 **          Gerard Roudier              <groudier@free.fr>
36 **
37 **  Being given that this driver originates from the FreeBSD version, and
38 **  in order to keep synergy on both, any suggested enhancements and corrections
39 **  received on Linux are automatically a potential candidate for the FreeBSD
40 **  version.
41 **
42 **  The original driver has been written for 386bsd and FreeBSD by
43 **          Wolfgang Stanglmeier        <wolf@cologne.de>
44 **          Stefan Esser                <se@mi.Uni-Koeln.de>
45 **
46 **-----------------------------------------------------------------------------
47 **
48 **  Major contributions:
49 **  --------------------
50 **
51 **  NVRAM detection and reading.
52 **    Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
53 **
54 *******************************************************************************
55 */
56 
57 /*
58 **	Supported SCSI features:
59 **	    Synchronous data transfers
60 **	    Wide16 SCSI BUS
61 **	    Disconnection/Reselection
62 **	    Tagged command queuing
63 **	    SCSI Parity checking
64 **
65 **	Supported NCR/SYMBIOS chips:
66 **		53C810A	  (8 bits, Fast 10,	 no rom BIOS)
67 **		53C825A	  (Wide,   Fast 10,	 on-board rom BIOS)
68 **		53C860	  (8 bits, Fast 20,	 no rom BIOS)
69 **		53C875	  (Wide,   Fast 20,	 on-board rom BIOS)
70 **		53C876	  (Wide,   Fast 20 Dual, on-board rom BIOS)
71 **		53C895	  (Wide,   Fast 40,	 on-board rom BIOS)
72 **		53C895A	  (Wide,   Fast 40,	 on-board rom BIOS)
73 **		53C896	  (Wide,   Fast 40 Dual, on-board rom BIOS)
74 **		53C897	  (Wide,   Fast 40 Dual, on-board rom BIOS)
75 **		53C1510D  (Wide,   Fast 40 Dual, on-board rom BIOS)
76 **		53C1010	  (Wide,   Fast 80 Dual, on-board rom BIOS)
77 **		53C1010_66(Wide,   Fast 80 Dual, on-board rom BIOS, 33/66MHz PCI)
78 **
79 **	Other features:
80 **		Memory mapped IO
81 **		Module
82 **		Shared IRQ
83 */
84 
85 /*
86 **	Name and version of the driver
87 */
88 #define SCSI_NCR_DRIVER_NAME	"sym53c8xx-1.7.3c-20010512"
89 
90 #define SCSI_NCR_DEBUG_FLAGS	(0)
91 
92 #define NAME53C		"sym53c"
93 #define NAME53C8XX	"sym53c8xx"
94 
95 /*==========================================================
96 **
97 **      Include files
98 **
99 **==========================================================
100 */
101 
102 #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
103 
104 #include <linux/module.h>
105 
106 #include <asm/dma.h>
107 #include <asm/io.h>
108 #include <asm/system.h>
109 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,17)
110 #include <linux/spinlock.h>
111 #elif LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
112 #include <asm/spinlock.h>
113 #endif
114 #include <linux/delay.h>
115 #include <linux/signal.h>
116 #include <linux/sched.h>
117 #include <linux/errno.h>
118 #include <linux/pci.h>
119 #include <linux/string.h>
120 #include <linux/mm.h>
121 #include <linux/ioport.h>
122 #include <linux/time.h>
123 #include <linux/timer.h>
124 #include <linux/stat.h>
125 
126 #include <linux/version.h>
127 #include <linux/blk.h>
128 
129 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,35)
130 #include <linux/init.h>
131 #endif
132 
133 #ifndef	__init
134 #define	__init
135 #endif
136 #ifndef	__initdata
137 #define	__initdata
138 #endif
139 
140 #if LINUX_VERSION_CODE <= LinuxVersionCode(2,1,92)
141 #include <linux/bios32.h>
142 #endif
143 
144 #include "scsi.h"
145 #include "hosts.h"
146 #include "constants.h"
147 #include "sd.h"
148 
149 #include <linux/types.h>
150 
151 /*
152 **	Define BITS_PER_LONG for earlier linux versions.
153 */
154 #ifndef	BITS_PER_LONG
155 #if (~0UL) == 0xffffffffUL
156 #define	BITS_PER_LONG	32
157 #else
158 #define	BITS_PER_LONG	64
159 #endif
160 #endif
161 
162 /*
163 **	Define the BSD style u_int32 and u_int64 type.
164 **	Are in fact u_int32_t and u_int64_t :-)
165 */
166 typedef u32 u_int32;
167 typedef u64 u_int64;
168 
169 #include "sym53c8xx.h"
170 
171 /*
172 **	Donnot compile integrity checking code for Linux-2.3.0
173 **	and above since SCSI data structures are not ready yet.
174 */
175 /* #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,0) */
176 #if 0
177 #define	SCSI_NCR_INTEGRITY_CHECKING
178 #endif
179 
180 #define MIN(a,b)        (((a) < (b)) ? (a) : (b))
181 #define MAX(a,b)        (((a) > (b)) ? (a) : (b))
182 
183 /*
184 **	Hmmm... What complex some PCI-HOST bridges actually are,
185 **	despite the fact that the PCI specifications are looking
186 **	so smart and simple! ;-)
187 */
188 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,47)
189 #define SCSI_NCR_DYNAMIC_DMA_MAPPING
190 #endif
191 
192 /*==========================================================
193 **
194 **	A la VMS/CAM-3 queue management.
195 **	Implemented from linux list management.
196 **
197 **==========================================================
198 */
199 
200 typedef struct xpt_quehead {
201 	struct xpt_quehead *flink;	/* Forward  pointer */
202 	struct xpt_quehead *blink;	/* Backward pointer */
203 } XPT_QUEHEAD;
204 
205 #define xpt_que_init(ptr) do { \
206 	(ptr)->flink = (ptr); (ptr)->blink = (ptr); \
207 } while (0)
208 
__xpt_que_add(struct xpt_quehead * new,struct xpt_quehead * blink,struct xpt_quehead * flink)209 static inline void __xpt_que_add(struct xpt_quehead * new,
210 	struct xpt_quehead * blink,
211 	struct xpt_quehead * flink)
212 {
213 	flink->blink	= new;
214 	new->flink	= flink;
215 	new->blink	= blink;
216 	blink->flink	= new;
217 }
218 
__xpt_que_del(struct xpt_quehead * blink,struct xpt_quehead * flink)219 static inline void __xpt_que_del(struct xpt_quehead * blink,
220 	struct xpt_quehead * flink)
221 {
222 	flink->blink = blink;
223 	blink->flink = flink;
224 }
225 
xpt_que_empty(struct xpt_quehead * head)226 static inline int xpt_que_empty(struct xpt_quehead *head)
227 {
228 	return head->flink == head;
229 }
230 
xpt_que_splice(struct xpt_quehead * list,struct xpt_quehead * head)231 static inline void xpt_que_splice(struct xpt_quehead *list,
232 	struct xpt_quehead *head)
233 {
234 	struct xpt_quehead *first = list->flink;
235 
236 	if (first != list) {
237 		struct xpt_quehead *last = list->blink;
238 		struct xpt_quehead *at   = head->flink;
239 
240 		first->blink = head;
241 		head->flink  = first;
242 
243 		last->flink = at;
244 		at->blink   = last;
245 	}
246 }
247 
248 #define xpt_que_entry(ptr, type, member) \
249 	((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
250 
251 
252 #define xpt_insque(new, pos)		__xpt_que_add(new, pos, (pos)->flink)
253 
254 #define xpt_remque(el)			__xpt_que_del((el)->blink, (el)->flink)
255 
256 #define xpt_insque_head(new, head)	__xpt_que_add(new, head, (head)->flink)
257 
xpt_remque_head(struct xpt_quehead * head)258 static inline struct xpt_quehead *xpt_remque_head(struct xpt_quehead *head)
259 {
260 	struct xpt_quehead *elem = head->flink;
261 
262 	if (elem != head)
263 		__xpt_que_del(head, elem->flink);
264 	else
265 		elem = 0;
266 	return elem;
267 }
268 
269 #define xpt_insque_tail(new, head)	__xpt_que_add(new, (head)->blink, head)
270 
xpt_remque_tail(struct xpt_quehead * head)271 static inline struct xpt_quehead *xpt_remque_tail(struct xpt_quehead *head)
272 {
273 	struct xpt_quehead *elem = head->blink;
274 
275 	if (elem != head)
276 		__xpt_que_del(elem->blink, head);
277 	else
278 		elem = 0;
279 	return elem;
280 }
281 
282 /*==========================================================
283 **
284 **	Configuration and Debugging
285 **
286 **==========================================================
287 */
288 
289 /*
290 **    SCSI address of this device.
291 **    The boot routines should have set it.
292 **    If not, use this.
293 */
294 
295 #ifndef SCSI_NCR_MYADDR
296 #define SCSI_NCR_MYADDR      (7)
297 #endif
298 
299 /*
300 **    The maximum number of tags per logic unit.
301 **    Used only for devices that support tags.
302 */
303 
304 #ifndef SCSI_NCR_MAX_TAGS
305 #define SCSI_NCR_MAX_TAGS    (8)
306 #endif
307 
308 /*
309 **    TAGS are actually unlimited (256 tags/lun).
310 **    But Linux only supports 255. :)
311 */
312 #if	SCSI_NCR_MAX_TAGS > 255
313 #define	MAX_TAGS	255
314 #else
315 #define	MAX_TAGS SCSI_NCR_MAX_TAGS
316 #endif
317 
318 /*
319 **    Since the ncr chips only have a 8 bit ALU, we try to be clever
320 **    about offset calculation in the TASK TABLE per LUN that is an
321 **    array of DWORDS = 4 bytes.
322 */
323 #if	MAX_TAGS > (512/4)
324 #define MAX_TASKS  (1024/4)
325 #elif	MAX_TAGS > (256/4)
326 #define MAX_TASKS  (512/4)
327 #else
328 #define MAX_TASKS  (256/4)
329 #endif
330 
331 /*
332 **    This one means 'NO TAG for this job'
333 */
334 #define NO_TAG	(256)
335 
336 /*
337 **    Number of targets supported by the driver.
338 **    n permits target numbers 0..n-1.
339 **    Default is 16, meaning targets #0..#15.
340 **    #7 .. is myself.
341 */
342 
343 #ifdef SCSI_NCR_MAX_TARGET
344 #define MAX_TARGET  (SCSI_NCR_MAX_TARGET)
345 #else
346 #define MAX_TARGET  (16)
347 #endif
348 
349 /*
350 **    Number of logic units supported by the driver.
351 **    n enables logic unit numbers 0..n-1.
352 **    The common SCSI devices require only
353 **    one lun, so take 1 as the default.
354 */
355 
356 #ifdef SCSI_NCR_MAX_LUN
357 #define MAX_LUN    64
358 #else
359 #define MAX_LUN    (1)
360 #endif
361 
362 /*
363 **    Asynchronous pre-scaler (ns). Shall be 40 for
364 **    the SCSI timings to be compliant.
365 */
366 
367 #ifndef SCSI_NCR_MIN_ASYNC
368 #define SCSI_NCR_MIN_ASYNC (40)
369 #endif
370 
371 /*
372 **    The maximum number of jobs scheduled for starting.
373 **    We allocate 4 entries more than the value we announce
374 **    to the SCSI upper layer. Guess why ! :-)
375 */
376 
377 #ifdef SCSI_NCR_CAN_QUEUE
378 #define MAX_START   (SCSI_NCR_CAN_QUEUE + 4)
379 #else
380 #define MAX_START   (MAX_TARGET + 7 * MAX_TAGS)
381 #endif
382 
383 /*
384 **    We donnot want to allocate more than 1 PAGE for the
385 **    the start queue and the done queue. We hard-code entry
386 **    size to 8 in order to let cpp do the checking.
387 **    Allows 512-4=508 pending IOs for i386 but Linux seems for
388 **    now not able to provide the driver with this amount of IOs.
389 */
390 #if	MAX_START > PAGE_SIZE/8
391 #undef	MAX_START
392 #define MAX_START (PAGE_SIZE/8)
393 #endif
394 
395 /*
396 **    The maximum number of segments a transfer is split into.
397 **    We support up to 127 segments for both read and write.
398 */
399 
400 #define MAX_SCATTER (SCSI_NCR_MAX_SCATTER)
401 #define	SCR_SG_SIZE	(2)
402 
403 /*
404 **	other
405 */
406 
407 #define NCR_SNOOP_TIMEOUT (1000000)
408 
409 /*==========================================================
410 **
411 **	Miscallaneous BSDish defines.
412 **
413 **==========================================================
414 */
415 
416 #define u_char		unsigned char
417 #define u_short		unsigned short
418 #define u_int		unsigned int
419 #define u_long		unsigned long
420 
421 #ifndef bcopy
422 #define bcopy(s, d, n)	memcpy((d), (s), (n))
423 #endif
424 
425 #ifndef bzero
426 #define bzero(d, n)	memset((d), 0, (n))
427 #endif
428 
429 #ifndef offsetof
430 #define offsetof(t, m)	((size_t) (&((t *)0)->m))
431 #endif
432 
433 /*
434 **	Simple Wrapper to kernel PCI bus interface.
435 **
436 **	This wrapper allows to get rid of old kernel PCI interface
437 **	and still allows to preserve linux-2.0 compatibilty.
438 **	In fact, it is mostly an incomplete emulation of the new
439 **	PCI code for pre-2.2 kernels. When kernel-2.0 support
440 **	will be dropped, we will just have to remove most of this
441 **	code.
442 */
443 
444 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,2,0)
445 
446 typedef struct pci_dev *pcidev_t;
447 #define PCIDEV_NULL		(0)
448 #define PciBusNumber(d)		(d)->bus->number
449 #define PciDeviceFn(d)		(d)->devfn
450 #define PciVendorId(d)		(d)->vendor
451 #define PciDeviceId(d)		(d)->device
452 #define PciIrqLine(d)		(d)->irq
453 
454 static u_long __init
pci_get_base_cookie(struct pci_dev * pdev,int index)455 pci_get_base_cookie(struct pci_dev *pdev, int index)
456 {
457 	u_long base;
458 
459 #if LINUX_VERSION_CODE > LinuxVersionCode(2,3,12)
460 	base = pdev->resource[index].start;
461 #else
462 	base = pdev->base_address[index];
463 #if BITS_PER_LONG > 32
464 	if ((base & 0x7) == 0x4)
465 		*base |= (((u_long)pdev->base_address[++index]) << 32);
466 #endif
467 #endif
468 	return (base & ~0x7ul);
469 }
470 
471 static int __init
pci_get_base_address(struct pci_dev * pdev,int index,u_long * base)472 pci_get_base_address(struct pci_dev *pdev, int index, u_long *base)
473 {
474 	u32 tmp;
475 #define PCI_BAR_OFFSET(index) (PCI_BASE_ADDRESS_0 + (index<<2))
476 
477 	pci_read_config_dword(pdev, PCI_BAR_OFFSET(index), &tmp);
478 	*base = tmp;
479 	++index;
480 	if ((tmp & 0x7) == 0x4) {
481 #if BITS_PER_LONG > 32
482 		pci_read_config_dword(pdev, PCI_BAR_OFFSET(index), &tmp);
483 		*base |= (((u_long)tmp) << 32);
484 #endif
485 		++index;
486 	}
487 	return index;
488 #undef PCI_BAR_OFFSET
489 }
490 
491 #else	/* Incomplete emulation of current PCI code for pre-2.2 kernels */
492 
493 typedef unsigned int pcidev_t;
494 #define PCIDEV_NULL		(~0u)
495 #define PciBusNumber(d)		((d)>>8)
496 #define PciDeviceFn(d)		((d)&0xff)
497 #define __PciDev(busn, devfn)	(((busn)<<8)+(devfn))
498 
499 #define pci_present pcibios_present
500 
501 #define pci_read_config_byte(d, w, v) \
502 	pcibios_read_config_byte(PciBusNumber(d), PciDeviceFn(d), w, v)
503 #define pci_read_config_word(d, w, v) \
504 	pcibios_read_config_word(PciBusNumber(d), PciDeviceFn(d), w, v)
505 #define pci_read_config_dword(d, w, v) \
506 	pcibios_read_config_dword(PciBusNumber(d), PciDeviceFn(d), w, v)
507 
508 #define pci_write_config_byte(d, w, v) \
509 	pcibios_write_config_byte(PciBusNumber(d), PciDeviceFn(d), w, v)
510 #define pci_write_config_word(d, w, v) \
511 	pcibios_write_config_word(PciBusNumber(d), PciDeviceFn(d), w, v)
512 #define pci_write_config_dword(d, w, v) \
513 	pcibios_write_config_dword(PciBusNumber(d), PciDeviceFn(d), w, v)
514 
515 static pcidev_t __init
pci_find_device(unsigned int vendor,unsigned int device,pcidev_t prev)516 pci_find_device(unsigned int vendor, unsigned int device, pcidev_t prev)
517 {
518 	static unsigned short pci_index;
519 	int retv;
520 	unsigned char bus_number, device_fn;
521 
522 	if (prev == PCIDEV_NULL)
523 		pci_index = 0;
524 	else
525 		++pci_index;
526 	retv = pcibios_find_device (vendor, device, pci_index,
527 				    &bus_number, &device_fn);
528 	return retv ? PCIDEV_NULL : __PciDev(bus_number, device_fn);
529 }
530 
PciVendorId(pcidev_t dev)531 static u_short __init PciVendorId(pcidev_t dev)
532 {
533 	u_short vendor_id;
534 	pci_read_config_word(dev, PCI_VENDOR_ID, &vendor_id);
535 	return vendor_id;
536 }
537 
PciDeviceId(pcidev_t dev)538 static u_short __init PciDeviceId(pcidev_t dev)
539 {
540 	u_short device_id;
541 	pci_read_config_word(dev, PCI_DEVICE_ID, &device_id);
542 	return device_id;
543 }
544 
PciIrqLine(pcidev_t dev)545 static u_int __init PciIrqLine(pcidev_t dev)
546 {
547 	u_char irq;
548 	pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
549 	return irq;
550 }
551 
552 static int __init
pci_get_base_address(pcidev_t dev,int offset,u_long * base)553 pci_get_base_address(pcidev_t dev, int offset, u_long *base)
554 {
555 	u_int32 tmp;
556 
557 	pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + offset, &tmp);
558 	*base = tmp;
559 	offset += sizeof(u_int32);
560 	if ((tmp & 0x7) == 0x4) {
561 #if BITS_PER_LONG > 32
562 		pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + offset, &tmp);
563 		*base |= (((u_long)tmp) << 32);
564 #endif
565 		offset += sizeof(u_int32);
566 	}
567 	return offset;
568 }
569 static u_long __init
pci_get_base_cookie(struct pci_dev * pdev,int offset)570 pci_get_base_cookie(struct pci_dev *pdev, int offset)
571 {
572 	u_long base;
573 
574 	(void) pci_get_base_address(dev, offset, &base);
575 
576 	return base;
577 }
578 
579 #endif	/* LINUX_VERSION_CODE >= LinuxVersionCode(2,2,0) */
580 
581 /* Does not make sense in earlier kernels */
582 #if LINUX_VERSION_CODE < LinuxVersionCode(2,4,0)
583 #define pci_enable_device(pdev)		(0)
584 #endif
585 #if LINUX_VERSION_CODE < LinuxVersionCode(2,4,4)
586 #define	scsi_set_pci_device(inst, pdev)	(0)
587 #endif
588 
589 /*==========================================================
590 **
591 **	Debugging tags
592 **
593 **==========================================================
594 */
595 
596 #define DEBUG_ALLOC    (0x0001)
597 #define DEBUG_PHASE    (0x0002)
598 #define DEBUG_QUEUE    (0x0008)
599 #define DEBUG_RESULT   (0x0010)
600 #define DEBUG_POINTER  (0x0020)
601 #define DEBUG_SCRIPT   (0x0040)
602 #define DEBUG_TINY     (0x0080)
603 #define DEBUG_TIMING   (0x0100)
604 #define DEBUG_NEGO     (0x0200)
605 #define DEBUG_TAGS     (0x0400)
606 #define DEBUG_IC       (0x0800)
607 
608 /*
609 **    Enable/Disable debug messages.
610 **    Can be changed at runtime too.
611 */
612 
613 #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
614 static int ncr_debug = SCSI_NCR_DEBUG_FLAGS;
615 	#define DEBUG_FLAGS ncr_debug
616 #else
617 	#define DEBUG_FLAGS	SCSI_NCR_DEBUG_FLAGS
618 #endif
619 
620 /*
621 **	SMP threading.
622 **
623 **	Assuming that SMP systems are generally high end systems and may
624 **	use several SCSI adapters, we are using one lock per controller
625 **	instead of some global one. For the moment (linux-2.1.95), driver's
626 **	entry points are called with the 'io_request_lock' lock held, so:
627 **	- We are uselessly loosing a couple of micro-seconds to lock the
628 **	  controller data structure.
629 **	- But the driver is not broken by design for SMP and so can be
630 **	  more resistant to bugs or bad changes in the IO sub-system code.
631 **	- A small advantage could be that the interrupt code is grained as
632 **	  wished (e.g.: threaded by controller).
633 */
634 
635 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
636 
637 spinlock_t sym53c8xx_lock = SPIN_LOCK_UNLOCKED;
638 #define	NCR_LOCK_DRIVER(flags)     spin_lock_irqsave(&sym53c8xx_lock, flags)
639 #define	NCR_UNLOCK_DRIVER(flags)   spin_unlock_irqrestore(&sym53c8xx_lock,flags)
640 
641 #define NCR_INIT_LOCK_NCB(np)      spin_lock_init(&np->smp_lock);
642 #define	NCR_LOCK_NCB(np, flags)    spin_lock_irqsave(&np->smp_lock, flags)
643 #define	NCR_UNLOCK_NCB(np, flags)  spin_unlock_irqrestore(&np->smp_lock, flags)
644 
645 #define	NCR_LOCK_SCSI_DONE(np, flags) \
646 		spin_lock_irqsave(&io_request_lock, flags)
647 #define	NCR_UNLOCK_SCSI_DONE(np, flags) \
648 		spin_unlock_irqrestore(&io_request_lock, flags)
649 
650 #else
651 
652 #define	NCR_LOCK_DRIVER(flags)     do { save_flags(flags); cli(); } while (0)
653 #define	NCR_UNLOCK_DRIVER(flags)   do { restore_flags(flags); } while (0)
654 
655 #define	NCR_INIT_LOCK_NCB(np)      do { } while (0)
656 #define	NCR_LOCK_NCB(np, flags)    do { save_flags(flags); cli(); } while (0)
657 #define	NCR_UNLOCK_NCB(np, flags)  do { restore_flags(flags); } while (0)
658 
659 #define	NCR_LOCK_SCSI_DONE(np, flags)    do {;} while (0)
660 #define	NCR_UNLOCK_SCSI_DONE(np, flags)  do {;} while (0)
661 
662 #endif
663 
664 /*
665 **	Memory mapped IO
666 **
667 **	Since linux-2.1, we must use ioremap() to map the io memory space.
668 **	iounmap() to unmap it. That allows portability.
669 **	Linux 1.3.X and 2.0.X allow to remap physical pages addresses greater
670 **	than the highest physical memory address to kernel virtual pages with
671 **	vremap() / vfree(). That was not portable but worked with i386
672 **	architecture.
673 */
674 
675 #if LINUX_VERSION_CODE < LinuxVersionCode(2,1,0)
676 #define ioremap vremap
677 #define iounmap vfree
678 #endif
679 
680 #ifdef __sparc__
681 #  include <asm/irq.h>
682 #  define memcpy_to_pci(a, b, c)	memcpy_toio((a), (b), (c))
683 #elif defined(__alpha__)
684 #  define memcpy_to_pci(a, b, c)	memcpy_toio((a), (b), (c))
685 #else	/* others */
686 #  define memcpy_to_pci(a, b, c)	memcpy_toio((a), (b), (c))
687 #endif
688 
689 #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
remap_pci_mem(u_long base,u_long size)690 static u_long __init remap_pci_mem(u_long base, u_long size)
691 {
692 	u_long page_base	= ((u_long) base) & PAGE_MASK;
693 	u_long page_offs	= ((u_long) base) - page_base;
694 	u_long page_remapped	= (u_long) ioremap(page_base, page_offs+size);
695 
696 	return page_remapped? (page_remapped + page_offs) : 0UL;
697 }
698 
unmap_pci_mem(u_long vaddr,u_long size)699 static void __init unmap_pci_mem(u_long vaddr, u_long size)
700 {
701 	if (vaddr)
702 		iounmap((void *) (vaddr & PAGE_MASK));
703 }
704 
705 #endif /* not def SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
706 
707 /*
708 **	Insert a delay in micro-seconds and milli-seconds.
709 **	-------------------------------------------------
710 **	Under Linux, udelay() is restricted to delay < 1 milli-second.
711 **	In fact, it generally works for up to 1 second delay.
712 **	Since 2.1.105, the mdelay() function is provided for delays
713 **	in milli-seconds.
714 **	Under 2.0 kernels, udelay() is an inline function that is very
715 **	inaccurate on Pentium processors.
716 */
717 
718 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,105)
719 #define UDELAY udelay
720 #define MDELAY mdelay
721 #else
UDELAY(long us)722 static void UDELAY(long us) { udelay(us); }
MDELAY(long ms)723 static void MDELAY(long ms) { while (ms--) UDELAY(1000); }
724 #endif
725 
726 /*
727 **	Simple power of two buddy-like allocator
728 **	----------------------------------------
729 **	This simple code is not intended to be fast, but to provide
730 **	power of 2 aligned memory allocations.
731 **	Since the SCRIPTS processor only supplies 8 bit arithmetic,
732 **	this allocator allows simple and fast address calculations
733 **	from the SCRIPTS code. In addition, cache line alignment
734 **	is guaranteed for power of 2 cache line size.
735 **	Enhanced in linux-2.3.44 to provide a memory pool per pcidev
736 **	to support dynamic dma mapping. (I would have preferred a
737 **	real bus astraction, btw).
738 */
739 
740 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,0)
741 #define __GetFreePages(flags, order) __get_free_pages(flags, order)
742 #else
743 #define __GetFreePages(flags, order) __get_free_pages(flags, order, 0)
744 #endif
745 
746 #define MEMO_SHIFT	4	/* 16 bytes minimum memory chunk */
747 #if PAGE_SIZE >= 8192
748 #define MEMO_PAGE_ORDER	0	/* 1 PAGE  maximum */
749 #else
750 #define MEMO_PAGE_ORDER	1	/* 2 PAGES maximum */
751 #endif
752 #define MEMO_FREE_UNUSED	/* Free unused pages immediately */
753 #define MEMO_WARN	1
754 #define MEMO_GFP_FLAGS	GFP_ATOMIC
755 #define MEMO_CLUSTER_SHIFT	(PAGE_SHIFT+MEMO_PAGE_ORDER)
756 #define MEMO_CLUSTER_SIZE	(1UL << MEMO_CLUSTER_SHIFT)
757 #define MEMO_CLUSTER_MASK	(MEMO_CLUSTER_SIZE-1)
758 
759 typedef u_long m_addr_t;	/* Enough bits to bit-hack addresses */
760 typedef pcidev_t m_bush_t;	/* Something that addresses DMAable */
761 
762 typedef struct m_link {		/* Link between free memory chunks */
763 	struct m_link *next;
764 } m_link_s;
765 
766 #ifdef	SCSI_NCR_DYNAMIC_DMA_MAPPING
767 typedef struct m_vtob {		/* Virtual to Bus address translation */
768 	struct m_vtob *next;
769 	m_addr_t vaddr;
770 	m_addr_t baddr;
771 } m_vtob_s;
772 #define VTOB_HASH_SHIFT		5
773 #define VTOB_HASH_SIZE		(1UL << VTOB_HASH_SHIFT)
774 #define VTOB_HASH_MASK		(VTOB_HASH_SIZE-1)
775 #define VTOB_HASH_CODE(m)	\
776 	((((m_addr_t) (m)) >> MEMO_CLUSTER_SHIFT) & VTOB_HASH_MASK)
777 #endif
778 
779 typedef struct m_pool {		/* Memory pool of a given kind */
780 #ifdef	SCSI_NCR_DYNAMIC_DMA_MAPPING
781 	m_bush_t bush;
782 	m_addr_t (*getp)(struct m_pool *);
783 	void (*freep)(struct m_pool *, m_addr_t);
784 #define M_GETP()		mp->getp(mp)
785 #define M_FREEP(p)		mp->freep(mp, p)
786 #define GetPages()		__GetFreePages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER)
787 #define FreePages(p)		free_pages(p, MEMO_PAGE_ORDER)
788 	int nump;
789 	m_vtob_s *(vtob[VTOB_HASH_SIZE]);
790 	struct m_pool *next;
791 #else
792 #define M_GETP()		__GetFreePages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER)
793 #define M_FREEP(p)		free_pages(p, MEMO_PAGE_ORDER)
794 #endif	/* SCSI_NCR_DYNAMIC_DMA_MAPPING */
795 	struct m_link h[PAGE_SHIFT-MEMO_SHIFT+MEMO_PAGE_ORDER+1];
796 } m_pool_s;
797 
___m_alloc(m_pool_s * mp,int size)798 static void *___m_alloc(m_pool_s *mp, int size)
799 {
800 	int i = 0;
801 	int s = (1 << MEMO_SHIFT);
802 	int j;
803 	m_addr_t a;
804 	m_link_s *h = mp->h;
805 
806 	if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
807 		return 0;
808 
809 	while (size > s) {
810 		s <<= 1;
811 		++i;
812 	}
813 
814 	j = i;
815 	while (!h[j].next) {
816 		if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
817 			h[j].next = (m_link_s *) M_GETP();
818 			if (h[j].next)
819 				h[j].next->next = 0;
820 			break;
821 		}
822 		++j;
823 		s <<= 1;
824 	}
825 	a = (m_addr_t) h[j].next;
826 	if (a) {
827 		h[j].next = h[j].next->next;
828 		while (j > i) {
829 			j -= 1;
830 			s >>= 1;
831 			h[j].next = (m_link_s *) (a+s);
832 			h[j].next->next = 0;
833 		}
834 	}
835 #ifdef DEBUG
836 	printk("___m_alloc(%d) = %p\n", size, (void *) a);
837 #endif
838 	return (void *) a;
839 }
840 
___m_free(m_pool_s * mp,void * ptr,int size)841 static void ___m_free(m_pool_s *mp, void *ptr, int size)
842 {
843 	int i = 0;
844 	int s = (1 << MEMO_SHIFT);
845 	m_link_s *q;
846 	m_addr_t a, b;
847 	m_link_s *h = mp->h;
848 
849 #ifdef DEBUG
850 	printk("___m_free(%p, %d)\n", ptr, size);
851 #endif
852 
853 	if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
854 		return;
855 
856 	while (size > s) {
857 		s <<= 1;
858 		++i;
859 	}
860 
861 	a = (m_addr_t) ptr;
862 
863 	while (1) {
864 #ifdef MEMO_FREE_UNUSED
865 		if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
866 			M_FREEP(a);
867 			break;
868 		}
869 #endif
870 		b = a ^ s;
871 		q = &h[i];
872 		while (q->next && q->next != (m_link_s *) b) {
873 			q = q->next;
874 		}
875 		if (!q->next) {
876 			((m_link_s *) a)->next = h[i].next;
877 			h[i].next = (m_link_s *) a;
878 			break;
879 		}
880 		q->next = q->next->next;
881 		a = a & b;
882 		s <<= 1;
883 		++i;
884 	}
885 }
886 
__m_calloc2(m_pool_s * mp,int size,char * name,int uflags)887 static void *__m_calloc2(m_pool_s *mp, int size, char *name, int uflags)
888 {
889 	void *p;
890 
891 	p = ___m_alloc(mp, size);
892 
893 	if (DEBUG_FLAGS & DEBUG_ALLOC)
894 		printk ("new %-10s[%4d] @%p.\n", name, size, p);
895 
896 	if (p)
897 		bzero(p, size);
898 	else if (uflags & MEMO_WARN)
899 		printk (NAME53C8XX ": failed to allocate %s[%d]\n", name, size);
900 
901 	return p;
902 }
903 
904 #define __m_calloc(mp, s, n)	__m_calloc2(mp, s, n, MEMO_WARN)
905 
__m_free(m_pool_s * mp,void * ptr,int size,char * name)906 static void __m_free(m_pool_s *mp, void *ptr, int size, char *name)
907 {
908 	if (DEBUG_FLAGS & DEBUG_ALLOC)
909 		printk ("freeing %-10s[%4d] @%p.\n", name, size, ptr);
910 
911 	___m_free(mp, ptr, size);
912 
913 }
914 
915 /*
916  * With pci bus iommu support, we use a default pool of unmapped memory
917  * for memory we donnot need to DMA from/to and one pool per pcidev for
918  * memory accessed by the PCI chip. `mp0' is the default not DMAable pool.
919  */
920 
921 #ifndef	SCSI_NCR_DYNAMIC_DMA_MAPPING
922 
923 static m_pool_s mp0;
924 
925 #else
926 
___mp0_getp(m_pool_s * mp)927 static m_addr_t ___mp0_getp(m_pool_s *mp)
928 {
929 	m_addr_t m = GetPages();
930 	if (m)
931 		++mp->nump;
932 	return m;
933 }
934 
___mp0_freep(m_pool_s * mp,m_addr_t m)935 static void ___mp0_freep(m_pool_s *mp, m_addr_t m)
936 {
937 	FreePages(m);
938 	--mp->nump;
939 }
940 
941 static m_pool_s mp0 = {0, ___mp0_getp, ___mp0_freep};
942 
943 #endif	/* SCSI_NCR_DYNAMIC_DMA_MAPPING */
944 
m_calloc(int size,char * name)945 static void *m_calloc(int size, char *name)
946 {
947 	u_long flags;
948 	void *m;
949 	NCR_LOCK_DRIVER(flags);
950 	m = __m_calloc(&mp0, size, name);
951 	NCR_UNLOCK_DRIVER(flags);
952 	return m;
953 }
954 
m_free(void * ptr,int size,char * name)955 static void m_free(void *ptr, int size, char *name)
956 {
957 	u_long flags;
958 	NCR_LOCK_DRIVER(flags);
959 	__m_free(&mp0, ptr, size, name);
960 	NCR_UNLOCK_DRIVER(flags);
961 }
962 
963 /*
964  * DMAable pools.
965  */
966 
967 #ifndef	SCSI_NCR_DYNAMIC_DMA_MAPPING
968 
969 /* Without pci bus iommu support, all the memory is assumed DMAable */
970 
971 #define __m_calloc_dma(b, s, n)		m_calloc(s, n)
972 #define __m_free_dma(b, p, s, n)	m_free(p, s, n)
973 #define __vtobus(b, p)			virt_to_bus(p)
974 
975 #else
976 
977 /*
978  * With pci bus iommu support, we maintain one pool per pcidev and a
979  * hashed reverse table for virtual to bus physical address translations.
980  */
___dma_getp(m_pool_s * mp)981 static m_addr_t ___dma_getp(m_pool_s *mp)
982 {
983 	m_addr_t vp;
984 	m_vtob_s *vbp;
985 
986 	vbp = __m_calloc(&mp0, sizeof(*vbp), "VTOB");
987 	if (vbp) {
988 		dma_addr_t daddr;
989 		vp = (m_addr_t) pci_alloc_consistent(mp->bush,
990 						     PAGE_SIZE<<MEMO_PAGE_ORDER,
991 						     &daddr);
992 		if (vp) {
993 			int hc = VTOB_HASH_CODE(vp);
994 			vbp->vaddr = vp;
995 			vbp->baddr = daddr;
996 			vbp->next = mp->vtob[hc];
997 			mp->vtob[hc] = vbp;
998 			++mp->nump;
999 			return vp;
1000 		}
1001 		else
1002 			__m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
1003 	}
1004 	return 0;
1005 }
1006 
___dma_freep(m_pool_s * mp,m_addr_t m)1007 static void ___dma_freep(m_pool_s *mp, m_addr_t m)
1008 {
1009 	m_vtob_s **vbpp, *vbp;
1010 	int hc = VTOB_HASH_CODE(m);
1011 
1012 	vbpp = &mp->vtob[hc];
1013 	while (*vbpp && (*vbpp)->vaddr != m)
1014 		vbpp = &(*vbpp)->next;
1015 	if (*vbpp) {
1016 		vbp = *vbpp;
1017 		*vbpp = (*vbpp)->next;
1018 		pci_free_consistent(mp->bush, PAGE_SIZE<<MEMO_PAGE_ORDER,
1019 				    (void *)vbp->vaddr, (dma_addr_t)vbp->baddr);
1020 		__m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
1021 		--mp->nump;
1022 	}
1023 }
1024 
___get_dma_pool(m_bush_t bush)1025 static inline m_pool_s *___get_dma_pool(m_bush_t bush)
1026 {
1027 	m_pool_s *mp;
1028 	for (mp = mp0.next; mp && mp->bush != bush; mp = mp->next);
1029 	return mp;
1030 }
1031 
___cre_dma_pool(m_bush_t bush)1032 static m_pool_s *___cre_dma_pool(m_bush_t bush)
1033 {
1034 	m_pool_s *mp;
1035 	mp = __m_calloc(&mp0, sizeof(*mp), "MPOOL");
1036 	if (mp) {
1037 		bzero(mp, sizeof(*mp));
1038 		mp->bush = bush;
1039 		mp->getp = ___dma_getp;
1040 		mp->freep = ___dma_freep;
1041 		mp->next = mp0.next;
1042 		mp0.next = mp;
1043 	}
1044 	return mp;
1045 }
1046 
___del_dma_pool(m_pool_s * p)1047 static void ___del_dma_pool(m_pool_s *p)
1048 {
1049 	struct m_pool **pp = &mp0.next;
1050 
1051 	while (*pp && *pp != p)
1052 		pp = &(*pp)->next;
1053 	if (*pp) {
1054 		*pp = (*pp)->next;
1055 		__m_free(&mp0, p, sizeof(*p), "MPOOL");
1056 	}
1057 }
1058 
__m_calloc_dma(m_bush_t bush,int size,char * name)1059 static void *__m_calloc_dma(m_bush_t bush, int size, char *name)
1060 {
1061 	u_long flags;
1062 	struct m_pool *mp;
1063 	void *m = 0;
1064 
1065 	NCR_LOCK_DRIVER(flags);
1066 	mp = ___get_dma_pool(bush);
1067 	if (!mp)
1068 		mp = ___cre_dma_pool(bush);
1069 	if (mp)
1070 		m = __m_calloc(mp, size, name);
1071 	if (mp && !mp->nump)
1072 		___del_dma_pool(mp);
1073 	NCR_UNLOCK_DRIVER(flags);
1074 
1075 	return m;
1076 }
1077 
__m_free_dma(m_bush_t bush,void * m,int size,char * name)1078 static void __m_free_dma(m_bush_t bush, void *m, int size, char *name)
1079 {
1080 	u_long flags;
1081 	struct m_pool *mp;
1082 
1083 	NCR_LOCK_DRIVER(flags);
1084 	mp = ___get_dma_pool(bush);
1085 	if (mp)
1086 		__m_free(mp, m, size, name);
1087 	if (mp && !mp->nump)
1088 		___del_dma_pool(mp);
1089 	NCR_UNLOCK_DRIVER(flags);
1090 }
1091 
__vtobus(m_bush_t bush,void * m)1092 static m_addr_t __vtobus(m_bush_t bush, void *m)
1093 {
1094 	u_long flags;
1095 	m_pool_s *mp;
1096 	int hc = VTOB_HASH_CODE(m);
1097 	m_vtob_s *vp = 0;
1098 	m_addr_t a = ((m_addr_t) m) & ~MEMO_CLUSTER_MASK;
1099 
1100 	NCR_LOCK_DRIVER(flags);
1101 	mp = ___get_dma_pool(bush);
1102 	if (mp) {
1103 		vp = mp->vtob[hc];
1104 		while (vp && (m_addr_t) vp->vaddr != a)
1105 			vp = vp->next;
1106 	}
1107 	NCR_UNLOCK_DRIVER(flags);
1108 	return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
1109 }
1110 
1111 #endif	/* SCSI_NCR_DYNAMIC_DMA_MAPPING */
1112 
1113 #define _m_calloc_dma(np, s, n)		__m_calloc_dma(np->pdev, s, n)
1114 #define _m_free_dma(np, p, s, n)	__m_free_dma(np->pdev, p, s, n)
1115 #define m_calloc_dma(s, n)		_m_calloc_dma(np, s, n)
1116 #define m_free_dma(p, s, n)		_m_free_dma(np, p, s, n)
1117 #define _vtobus(np, p)			__vtobus(np->pdev, p)
1118 #define vtobus(p)			_vtobus(np, p)
1119 
1120 /*
1121  *  Deal with DMA mapping/unmapping.
1122  */
1123 
1124 #ifndef SCSI_NCR_DYNAMIC_DMA_MAPPING
1125 
1126 /* Linux versions prior to pci bus iommu kernel interface */
1127 
1128 #define __unmap_scsi_data(pdev, cmd)	do {; } while (0)
1129 #define __map_scsi_single_data(pdev, cmd) (__vtobus(pdev,(cmd)->request_buffer))
1130 #define __map_scsi_sg_data(pdev, cmd)	((cmd)->use_sg)
1131 #define __sync_scsi_data(pdev, cmd)	do {; } while (0)
1132 
1133 #define scsi_sg_dma_address(sc)		vtobus((sc)->address)
1134 #define scsi_sg_dma_len(sc)		((sc)->length)
1135 
1136 #else
1137 
1138 /* Linux version with pci bus iommu kernel interface */
1139 
1140 /* To keep track of the dma mapping (sg/single) that has been set */
1141 #define __data_mapped(cmd)	(cmd)->SCp.phase
1142 #define __data_mapping(cmd)	(cmd)->SCp.dma_handle
1143 
__unmap_scsi_data(pcidev_t pdev,Scsi_Cmnd * cmd)1144 static void __unmap_scsi_data(pcidev_t pdev, Scsi_Cmnd *cmd)
1145 {
1146 	int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
1147 
1148 	switch(__data_mapped(cmd)) {
1149 	case 2:
1150 		pci_unmap_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
1151 		break;
1152 	case 1:
1153 		pci_unmap_page(pdev, __data_mapping(cmd),
1154 			       cmd->request_bufflen, dma_dir);
1155 		break;
1156 	}
1157 	__data_mapped(cmd) = 0;
1158 }
1159 
__map_scsi_single_data(pcidev_t pdev,Scsi_Cmnd * cmd)1160 static dma_addr_t __map_scsi_single_data(pcidev_t pdev, Scsi_Cmnd *cmd)
1161 {
1162 	dma_addr_t mapping;
1163 	int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
1164 
1165 	if (cmd->request_bufflen == 0)
1166 		return 0;
1167 
1168 	mapping = pci_map_page(pdev,
1169 			       virt_to_page(cmd->request_buffer),
1170 			       ((unsigned long)cmd->request_buffer &
1171 				~PAGE_MASK),
1172 			       cmd->request_bufflen, dma_dir);
1173 	__data_mapped(cmd) = 1;
1174 	__data_mapping(cmd) = mapping;
1175 
1176 	return mapping;
1177 }
1178 
__map_scsi_sg_data(pcidev_t pdev,Scsi_Cmnd * cmd)1179 static int __map_scsi_sg_data(pcidev_t pdev, Scsi_Cmnd *cmd)
1180 {
1181 	int use_sg;
1182 	int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
1183 
1184 	if (cmd->use_sg == 0)
1185 		return 0;
1186 
1187 	use_sg = pci_map_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
1188 	__data_mapped(cmd) = 2;
1189 	__data_mapping(cmd) = use_sg;
1190 
1191 	return use_sg;
1192 }
1193 
__sync_scsi_data(pcidev_t pdev,Scsi_Cmnd * cmd)1194 static void __sync_scsi_data(pcidev_t pdev, Scsi_Cmnd *cmd)
1195 {
1196 	int dma_dir = scsi_to_pci_dma_dir(cmd->sc_data_direction);
1197 
1198 	switch(__data_mapped(cmd)) {
1199 	case 2:
1200 		pci_dma_sync_sg(pdev, cmd->buffer, cmd->use_sg, dma_dir);
1201 		break;
1202 	case 1:
1203 		pci_dma_sync_single(pdev, __data_mapping(cmd),
1204 				    cmd->request_bufflen, dma_dir);
1205 		break;
1206 	}
1207 }
1208 
1209 #define scsi_sg_dma_address(sc)		sg_dma_address(sc)
1210 #define scsi_sg_dma_len(sc)		sg_dma_len(sc)
1211 
1212 #endif	/* SCSI_NCR_DYNAMIC_DMA_MAPPING */
1213 
1214 #define unmap_scsi_data(np, cmd)	__unmap_scsi_data(np->pdev, cmd)
1215 #define map_scsi_single_data(np, cmd)	__map_scsi_single_data(np->pdev, cmd)
1216 #define map_scsi_sg_data(np, cmd)	__map_scsi_sg_data(np->pdev, cmd)
1217 #define sync_scsi_data(np, cmd)		__sync_scsi_data(np->pdev, cmd)
1218 
1219 
1220 /*
1221  * Print out some buffer.
1222  */
ncr_print_hex(u_char * p,int n)1223 static void ncr_print_hex(u_char *p, int n)
1224 {
1225 	while (n-- > 0)
1226 		printk (" %x", *p++);
1227 }
1228 
ncr_printl_hex(char * label,u_char * p,int n)1229 static void ncr_printl_hex(char *label, u_char *p, int n)
1230 {
1231 	printk("%s", label);
1232 	ncr_print_hex(p, n);
1233 	printk (".\n");
1234 }
1235 
1236 /*
1237 **	Transfer direction
1238 **
1239 **	Until some linux kernel version near 2.3.40, low-level scsi
1240 **	drivers were not told about data transfer direction.
1241 **	We check the existence of this feature that has been expected
1242 **	for a _long_ time by all SCSI driver developers by just
1243 **	testing against the definition of SCSI_DATA_UNKNOWN. Indeed
1244 **	this is a hack, but testing against a kernel version would
1245 **	have been a shame. ;-)
1246 */
1247 #ifdef	SCSI_DATA_UNKNOWN
1248 
1249 #define scsi_data_direction(cmd)	(cmd->sc_data_direction)
1250 
1251 #else
1252 
1253 #define	SCSI_DATA_UNKNOWN	0
1254 #define	SCSI_DATA_WRITE		1
1255 #define	SCSI_DATA_READ		2
1256 #define	SCSI_DATA_NONE		3
1257 
scsi_data_direction(Scsi_Cmnd * cmd)1258 static __inline__ int scsi_data_direction(Scsi_Cmnd *cmd)
1259 {
1260 	int direction;
1261 
1262 	switch((int) cmd->cmnd[0]) {
1263 	case 0x08:  /*	READ(6)				08 */
1264 	case 0x28:  /*	READ(10)			28 */
1265 	case 0xA8:  /*	READ(12)			A8 */
1266 		direction = SCSI_DATA_READ;
1267 		break;
1268 	case 0x0A:  /*	WRITE(6)			0A */
1269 	case 0x2A:  /*	WRITE(10)			2A */
1270 	case 0xAA:  /*	WRITE(12)			AA */
1271 		direction = SCSI_DATA_WRITE;
1272 		break;
1273 	default:
1274 		direction = SCSI_DATA_UNKNOWN;
1275 		break;
1276 	}
1277 
1278 	return direction;
1279 }
1280 
1281 #endif	/* SCSI_DATA_UNKNOWN */
1282 
1283 /*
1284 **	Head of list of NCR boards
1285 **
1286 **	For kernel version < 1.3.70, host is retrieved by its irq level.
1287 **	For later kernels, the internal host control block address
1288 **	(struct ncb) is used as device id parameter of the irq stuff.
1289 */
1290 
1291 static struct Scsi_Host	*first_host = NULL;
1292 
1293 
1294 /*
1295 **	/proc directory entry and proc_info function
1296 */
1297 #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
1298 static struct proc_dir_entry proc_scsi_sym53c8xx = {
1299     PROC_SCSI_SYM53C8XX, 9, NAME53C8XX,
1300     S_IFDIR | S_IRUGO | S_IXUGO, 2
1301 };
1302 #endif
1303 #ifdef SCSI_NCR_PROC_INFO_SUPPORT
1304 static int sym53c8xx_proc_info(char *buffer, char **start, off_t offset,
1305 			int length, int hostno, int func);
1306 #endif
1307 
1308 /*
1309 **	Driver setup.
1310 **
1311 **	This structure is initialized from linux config options.
1312 **	It can be overridden at boot-up by the boot command line.
1313 */
1314 static struct ncr_driver_setup
1315 	driver_setup			= SCSI_NCR_DRIVER_SETUP;
1316 
1317 #ifdef	SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
1318 static struct ncr_driver_setup
1319 	driver_safe_setup __initdata	= SCSI_NCR_DRIVER_SAFE_SETUP;
1320 # ifdef	MODULE
1321 char *sym53c8xx = 0;	/* command line passed by insmod */
1322 #  if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,30)
1323 MODULE_PARM(sym53c8xx, "s");
1324 #  endif
1325 # endif
1326 #endif
1327 
1328 /*
1329 **	Other Linux definitions
1330 */
1331 #define SetScsiResult(cmd, h_sts, s_sts) \
1332 	cmd->result = (((h_sts) << 16) + ((s_sts) & 0x7f))
1333 
1334 /* We may have to remind our amnesiac SCSI layer of the reason of the abort */
1335 #if 0
1336 #define SetScsiAbortResult(cmd)	\
1337 	  SetScsiResult(	\
1338 	    cmd, 		\
1339 	    (cmd)->abort_reason == DID_TIME_OUT ? DID_TIME_OUT : DID_ABORT, \
1340 	    0xff)
1341 #else
1342 #define SetScsiAbortResult(cmd) SetScsiResult(cmd, DID_ABORT, 0xff)
1343 #endif
1344 
1345 static void sym53c8xx_select_queue_depths(
1346 	struct Scsi_Host *host, struct scsi_device *devlist);
1347 static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
1348 static void sym53c8xx_timeout(unsigned long np);
1349 
1350 #define initverbose (driver_setup.verbose)
1351 #define bootverbose (np->verbose)
1352 
1353 #ifdef SCSI_NCR_NVRAM_SUPPORT
1354 static u_char Tekram_sync[16] __initdata =
1355 	{25,31,37,43, 50,62,75,125, 12,15,18,21, 6,7,9,10};
1356 #endif /* SCSI_NCR_NVRAM_SUPPORT */
1357 
1358 /*
1359 **	Structures used by sym53c8xx_detect/sym53c8xx_pci_init to
1360 **	transmit device configuration to the ncr_attach() function.
1361 */
1362 typedef struct {
1363 	int	bus;
1364 	u_char	device_fn;
1365 	u_long	base;
1366 	u_long	base_2;
1367 	u_long	io_port;
1368 	u_long	base_c;
1369 	u_long	base_2_c;
1370 	int	irq;
1371 /* port and reg fields to use INB, OUTB macros */
1372 	u_long	base_io;
1373 	volatile struct ncr_reg	*reg;
1374 } ncr_slot;
1375 
1376 typedef struct {
1377 	int type;
1378 #define	SCSI_NCR_SYMBIOS_NVRAM	(1)
1379 #define	SCSI_NCR_TEKRAM_NVRAM	(2)
1380 #ifdef	SCSI_NCR_NVRAM_SUPPORT
1381 	union {
1382 		Symbios_nvram Symbios;
1383 		Tekram_nvram Tekram;
1384 	} data;
1385 #endif
1386 } ncr_nvram;
1387 
1388 /*
1389 **	Structure used by sym53c8xx_detect/sym53c8xx_pci_init
1390 **	to save data on each detected board for ncr_attach().
1391 */
1392 typedef struct {
1393 	pcidev_t  pdev;
1394 	ncr_slot  slot;
1395 	ncr_chip  chip;
1396 	ncr_nvram *nvram;
1397 	u_char host_id;
1398 #ifdef	SCSI_NCR_PQS_PDS_SUPPORT
1399 	u_char pqs_pds;
1400 #endif
1401 	int attach_done;
1402 } ncr_device;
1403 
1404 /*==========================================================
1405 **
1406 **	assert ()
1407 **
1408 **==========================================================
1409 **
1410 **	modified copy from 386bsd:/usr/include/sys/assert.h
1411 **
1412 **----------------------------------------------------------
1413 */
1414 
1415 #define	assert(expression) { \
1416 	if (!(expression)) { \
1417 		(void)panic( \
1418 			"assertion \"%s\" failed: file \"%s\", line %d\n", \
1419 			#expression, \
1420 			__FILE__, __LINE__); \
1421 	} \
1422 }
1423 
1424 /*==========================================================
1425 **
1426 **	Command control block states.
1427 **
1428 **==========================================================
1429 */
1430 
1431 #define HS_IDLE		(0)
1432 #define HS_BUSY		(1)
1433 #define HS_NEGOTIATE	(2)	/* sync/wide data transfer*/
1434 #define HS_DISCONNECT	(3)	/* Disconnected by target */
1435 
1436 #define HS_DONEMASK	(0x80)
1437 #define HS_COMPLETE	(4|HS_DONEMASK)
1438 #define HS_SEL_TIMEOUT	(5|HS_DONEMASK)	/* Selection timeout      */
1439 #define HS_RESET	(6|HS_DONEMASK)	/* SCSI reset	          */
1440 #define HS_ABORTED	(7|HS_DONEMASK)	/* Transfer aborted       */
1441 #define HS_TIMEOUT	(8|HS_DONEMASK)	/* Software timeout       */
1442 #define HS_FAIL		(9|HS_DONEMASK)	/* SCSI or PCI bus errors */
1443 #define HS_UNEXPECTED	(10|HS_DONEMASK)/* Unexpected disconnect  */
1444 
1445 #define DSA_INVALID 0xffffffff
1446 
1447 /*==========================================================
1448 **
1449 **	Software Interrupt Codes
1450 **
1451 **==========================================================
1452 */
1453 
1454 #define	SIR_BAD_STATUS		(1)
1455 #define	SIR_SEL_ATN_NO_MSG_OUT	(2)
1456 #define	SIR_MSG_RECEIVED	(3)
1457 #define	SIR_MSG_WEIRD		(4)
1458 #define	SIR_NEGO_FAILED		(5)
1459 #define	SIR_NEGO_PROTO		(6)
1460 #define	SIR_SCRIPT_STOPPED	(7)
1461 #define	SIR_REJECT_TO_SEND	(8)
1462 #define	SIR_SWIDE_OVERRUN	(9)
1463 #define	SIR_SODL_UNDERRUN	(10)
1464 #define	SIR_RESEL_NO_MSG_IN	(11)
1465 #define	SIR_RESEL_NO_IDENTIFY	(12)
1466 #define	SIR_RESEL_BAD_LUN	(13)
1467 #define	SIR_TARGET_SELECTED	(14)
1468 #define	SIR_RESEL_BAD_I_T_L	(15)
1469 #define	SIR_RESEL_BAD_I_T_L_Q	(16)
1470 #define	SIR_ABORT_SENT		(17)
1471 #define	SIR_RESEL_ABORTED	(18)
1472 #define	SIR_MSG_OUT_DONE	(19)
1473 #define	SIR_AUTO_SENSE_DONE	(20)
1474 #define	SIR_DUMMY_INTERRUPT	(21)
1475 #define	SIR_DATA_OVERRUN	(22)
1476 #define	SIR_BAD_PHASE		(23)
1477 #define	SIR_MAX			(23)
1478 
1479 /*==========================================================
1480 **
1481 **	Extended error bits.
1482 **	xerr_status field of struct ccb.
1483 **
1484 **==========================================================
1485 */
1486 
1487 #define	XE_EXTRA_DATA	(1)	/* unexpected data phase	 */
1488 #define	XE_BAD_PHASE	(2)	/* illegal phase (4/5)		 */
1489 #define	XE_PARITY_ERR	(4)	/* unrecovered SCSI parity error */
1490 #define XE_SODL_UNRUN   (1<<3)
1491 #define XE_SWIDE_OVRUN  (1<<4)
1492 
1493 /*==========================================================
1494 **
1495 **	Negotiation status.
1496 **	nego_status field	of struct ccb.
1497 **
1498 **==========================================================
1499 */
1500 
1501 #define NS_NOCHANGE	(0)
1502 #define NS_SYNC		(1)
1503 #define NS_WIDE		(2)
1504 #define NS_PPR		(4)
1505 
1506 /*==========================================================
1507 **
1508 **	"Special features" of targets.
1509 **	quirks field		of struct tcb.
1510 **	actualquirks field	of struct ccb.
1511 **
1512 **==========================================================
1513 */
1514 
1515 #define	QUIRK_AUTOSAVE	(0x01)
1516 
1517 /*==========================================================
1518 **
1519 **	Capability bits in Inquire response byte 7.
1520 **
1521 **==========================================================
1522 */
1523 
1524 #define	INQ7_QUEUE	(0x02)
1525 #define	INQ7_SYNC	(0x10)
1526 #define	INQ7_WIDE16	(0x20)
1527 
1528 /*==========================================================
1529 **
1530 **	A CCB hashed table is used to retrieve CCB address
1531 **	from DSA value.
1532 **
1533 **==========================================================
1534 */
1535 
1536 #define CCB_HASH_SHIFT		8
1537 #define CCB_HASH_SIZE		(1UL << CCB_HASH_SHIFT)
1538 #define CCB_HASH_MASK		(CCB_HASH_SIZE-1)
1539 #define CCB_HASH_CODE(dsa)	(((dsa) >> 11) & CCB_HASH_MASK)
1540 
1541 /*==========================================================
1542 **
1543 **	Declaration of structs.
1544 **
1545 **==========================================================
1546 */
1547 
1548 struct tcb;
1549 struct lcb;
1550 struct ccb;
1551 struct ncb;
1552 struct script;
1553 
1554 typedef struct ncb * ncb_p;
1555 typedef struct tcb * tcb_p;
1556 typedef struct lcb * lcb_p;
1557 typedef struct ccb * ccb_p;
1558 
1559 struct link {
1560 	ncrcmd	l_cmd;
1561 	ncrcmd	l_paddr;
1562 };
1563 
1564 struct	usrcmd {
1565 	u_long	target;
1566 	u_long	lun;
1567 	u_long	data;
1568 	u_long	cmd;
1569 };
1570 
1571 #define UC_SETSYNC      10
1572 #define UC_SETTAGS	11
1573 #define UC_SETDEBUG	12
1574 #define UC_SETORDER	13
1575 #define UC_SETWIDE	14
1576 #define UC_SETFLAG	15
1577 #define UC_SETVERBOSE	17
1578 #define UC_RESETDEV	18
1579 #define UC_CLEARDEV	19
1580 
1581 #define	UF_TRACE	(0x01)
1582 #define	UF_NODISC	(0x02)
1583 #define	UF_NOSCAN	(0x04)
1584 
1585 /*========================================================================
1586 **
1587 **	Declaration of structs:		target control block
1588 **
1589 **========================================================================
1590 */
1591 struct tcb {
1592 	/*----------------------------------------------------------------
1593 	**	LUN tables.
1594 	**	An array of bus addresses is used on reselection by
1595 	**	the SCRIPT.
1596 	**----------------------------------------------------------------
1597 	*/
1598 	u_int32		*luntbl;	/* lcbs bus address table	*/
1599 	u_int32		b_luntbl;	/* bus address of this table	*/
1600 	u_int32		b_lun0;		/* bus address of lun0		*/
1601 	lcb_p		l0p;		/* lcb of LUN #0 (normal case)	*/
1602 #if MAX_LUN > 1
1603 	lcb_p		*lmp;		/* Other lcb's [1..MAX_LUN]	*/
1604 #endif
1605 	/*----------------------------------------------------------------
1606 	**	Target capabilities.
1607 	**----------------------------------------------------------------
1608 	*/
1609 	u_char		inq_done;	/* Target capabilities received	*/
1610 	u_char		inq_byte7;	/* Contains these capabilities	*/
1611 
1612 	/*----------------------------------------------------------------
1613 	**	Some flags.
1614 	**----------------------------------------------------------------
1615 	*/
1616 	u_char		to_reset;	/* This target is to be reset	*/
1617 
1618 	/*----------------------------------------------------------------
1619 	**	Pointer to the ccb used for negotiation.
1620 	**	Prevent from starting a negotiation for all queued commands
1621 	**	when tagged command queuing is enabled.
1622 	**----------------------------------------------------------------
1623 	*/
1624 	ccb_p   nego_cp;
1625 
1626 	/*----------------------------------------------------------------
1627 	**	negotiation of wide and synch transfer and device quirks.
1628 	**	sval, wval and uval are read from SCRIPTS and so have alignment
1629 	**	constraints.
1630 	**----------------------------------------------------------------
1631 	*/
1632 /*0*/	u_char	uval;
1633 /*1*/	u_char	sval;
1634 /*2*/	u_char	filler2;
1635 /*3*/	u_char	wval;
1636 	u_short	period;
1637 	u_char	minsync;
1638 	u_char	maxoffs;
1639 	u_char	quirks;
1640 	u_char	widedone;
1641 
1642 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
1643 	u_char ic_min_sync;
1644 	u_char ic_max_width;
1645 	u_char ic_done;
1646 #endif
1647 	u_char ic_maximums_set;
1648 	u_char ppr_negotiation;
1649 
1650 	/*----------------------------------------------------------------
1651 	**	User settable limits and options.
1652 	**	These limits are read from the NVRAM if present.
1653 	**----------------------------------------------------------------
1654 	*/
1655 	u_char	usrsync;
1656 	u_char	usrwide;
1657 	u_short	usrtags;
1658 	u_char	usrflag;
1659 };
1660 
1661 /*========================================================================
1662 **
1663 **	Declaration of structs:		lun control block
1664 **
1665 **========================================================================
1666 */
1667 struct lcb {
1668 	/*----------------------------------------------------------------
1669 	**	On reselection, SCRIPTS use this value as a JUMP address
1670 	**	after the IDENTIFY has been successfully received.
1671 	**	This field is set to 'resel_tag' if TCQ is enabled and
1672 	**	to 'resel_notag' if TCQ is disabled.
1673 	**	(Must be at zero due to bad lun handling on reselection)
1674 	**----------------------------------------------------------------
1675 	*/
1676 /*0*/	u_int32		resel_task;
1677 
1678 	/*----------------------------------------------------------------
1679 	**	Task table used by the script processor to retrieve the
1680 	**	task corresponding to a reselected nexus. The TAG is used
1681 	**	as offset to determine the corresponding entry.
1682 	**	Each entry contains the associated CCB bus address.
1683 	**----------------------------------------------------------------
1684 	*/
1685 	u_int32		tasktbl_0;	/* Used if TCQ not enabled	*/
1686 	u_int32		*tasktbl;
1687 	u_int32		b_tasktbl;
1688 
1689 	/*----------------------------------------------------------------
1690 	**	CCB queue management.
1691 	**----------------------------------------------------------------
1692 	*/
1693 	XPT_QUEHEAD	busy_ccbq;	/* Queue of busy CCBs		*/
1694 	XPT_QUEHEAD	wait_ccbq;	/* Queue of waiting for IO CCBs	*/
1695 	u_short		busyccbs;	/* CCBs busy for this lun	*/
1696 	u_short		queuedccbs;	/* CCBs queued to the controller*/
1697 	u_short		queuedepth;	/* Queue depth for this lun	*/
1698 	u_short		scdev_depth;	/* SCSI device queue depth	*/
1699 	u_short		maxnxs;		/* Max possible nexuses		*/
1700 
1701 	/*----------------------------------------------------------------
1702 	**	Control of tagged command queuing.
1703 	**	Tags allocation is performed using a circular buffer.
1704 	**	This avoids using a loop for tag allocation.
1705 	**----------------------------------------------------------------
1706 	*/
1707 	u_short		ia_tag;		/* Tag allocation index		*/
1708 	u_short		if_tag;		/* Tag release index		*/
1709 	u_char		*cb_tags;	/* Circular tags buffer		*/
1710 	u_char		inq_byte7;	/* Store unit CmdQ capability	*/
1711 	u_char		usetags;	/* Command queuing is active	*/
1712 	u_char		to_clear;	/* User wants to clear all tasks*/
1713 	u_short		maxtags;	/* Max NR of tags asked by user	*/
1714 	u_short		numtags;	/* Current number of tags	*/
1715 
1716 	/*----------------------------------------------------------------
1717 	**	QUEUE FULL and ORDERED tag control.
1718 	**----------------------------------------------------------------
1719 	*/
1720 	u_short		num_good;	/* Nr of GOOD since QUEUE FULL	*/
1721 	u_short		tags_sum[2];	/* Tags sum counters		*/
1722 	u_char		tags_si;	/* Current index to tags sum	*/
1723 	u_long		tags_stime;	/* Last time we switch tags_sum	*/
1724 };
1725 
1726 /*========================================================================
1727 **
1728 **      Declaration of structs: actions for a task.
1729 **
1730 **========================================================================
1731 **
1732 **	It is part of the CCB and is called by the scripts processor to
1733 **	start or restart the data structure (nexus).
1734 **
1735 **------------------------------------------------------------------------
1736 */
1737 struct action {
1738 	u_int32		start;
1739 	u_int32		restart;
1740 };
1741 
1742 /*========================================================================
1743 **
1744 **      Declaration of structs: Phase mismatch context.
1745 **
1746 **========================================================================
1747 **
1748 **	It is part of the CCB and is used as parameters for the DATA
1749 **	pointer. We need two contexts to handle correctly the SAVED
1750 **	DATA POINTER.
1751 **
1752 **------------------------------------------------------------------------
1753 */
1754 struct pm_ctx {
1755 	struct scr_tblmove sg;	/* Updated interrupted SG block	*/
1756 	u_int32	ret;		/* SCRIPT return address	*/
1757 };
1758 
1759 /*========================================================================
1760 **
1761 **      Declaration of structs:     global HEADER.
1762 **
1763 **========================================================================
1764 **
1765 **	In earlier driver versions, this substructure was copied from the
1766 **	ccb to a global address after selection (or reselection) and copied
1767 **	back before disconnect. Since we are now using LOAD/STORE DSA
1768 **	RELATIVE instructions, the script is able to access directly these
1769 **	fields, and so, this header is no more copied.
1770 **
1771 **------------------------------------------------------------------------
1772 */
1773 
1774 struct head {
1775 	/*----------------------------------------------------------------
1776 	**	Start and restart SCRIPTS addresses (must be at 0).
1777 	**----------------------------------------------------------------
1778 	*/
1779 	struct action	go;
1780 
1781 	/*----------------------------------------------------------------
1782 	**	Saved data pointer.
1783 	**	Points to the position in the script responsible for the
1784 	**	actual transfer of data.
1785 	**	It's written after reception of a SAVE_DATA_POINTER message.
1786 	**	The goalpointer points after the last transfer command.
1787 	**----------------------------------------------------------------
1788 	*/
1789 	u_int32		savep;
1790 	u_int32		lastp;
1791 	u_int32		goalp;
1792 
1793 	/*----------------------------------------------------------------
1794 	**	Alternate data pointer.
1795 	**	They are copied back to savep/lastp/goalp by the SCRIPTS
1796 	**	when the direction is unknown and the device claims data out.
1797 	**----------------------------------------------------------------
1798 	*/
1799 	u_int32		wlastp;
1800 	u_int32		wgoalp;
1801 
1802 	/*----------------------------------------------------------------
1803 	**	Status fields.
1804 	**----------------------------------------------------------------
1805 	*/
1806 	u_char		status[4];	/* host status			*/
1807 };
1808 
1809 /*
1810 **	LUN control block lookup.
1811 **	We use a direct pointer for LUN #0, and a table of pointers
1812 **	which is only allocated for devices that support LUN(s) > 0.
1813 */
1814 #if MAX_LUN <= 1
1815 #define ncr_lp(np, tp, lun) (!lun) ? (tp)->l0p : 0
1816 #else
1817 #define ncr_lp(np, tp, lun) \
1818 	(!lun) ? (tp)->l0p : (tp)->lmp ? (tp)->lmp[(lun)] : 0
1819 #endif
1820 
1821 /*
1822 **	The status bytes are used by the host and the script processor.
1823 **
1824 **	The four bytes (status[4]) are copied to the scratchb register
1825 **	(declared as scr0..scr3 in ncr_reg.h) just after the select/reselect,
1826 **	and copied back just after disconnecting.
1827 **	Inside the script the XX_REG are used.
1828 */
1829 
1830 /*
1831 **	Last four bytes (script)
1832 */
1833 #define  QU_REG	scr0
1834 #define  HS_REG	scr1
1835 #define  HS_PRT	nc_scr1
1836 #define  SS_REG	scr2
1837 #define  SS_PRT	nc_scr2
1838 #define  HF_REG	scr3
1839 #define  HF_PRT	nc_scr3
1840 
1841 /*
1842 **	Last four bytes (host)
1843 */
1844 #define  actualquirks  phys.header.status[0]
1845 #define  host_status   phys.header.status[1]
1846 #define  scsi_status   phys.header.status[2]
1847 #define  host_flags    phys.header.status[3]
1848 
1849 /*
1850 **	Host flags
1851 */
1852 #define HF_IN_PM0	1u
1853 #define HF_IN_PM1	(1u<<1)
1854 #define HF_ACT_PM	(1u<<2)
1855 #define HF_DP_SAVED	(1u<<3)
1856 #define HF_AUTO_SENSE	(1u<<4)
1857 #define HF_DATA_IN	(1u<<5)
1858 #define HF_PM_TO_C	(1u<<6)
1859 #define HF_EXT_ERR	(1u<<7)
1860 
1861 #ifdef SCSI_NCR_IARB_SUPPORT
1862 #define HF_HINT_IARB	(1u<<7)
1863 #endif
1864 
1865 /*
1866 **	This one is stolen from QU_REG.:)
1867 */
1868 #define HF_DATA_ST	(1u<<7)
1869 
1870 /*==========================================================
1871 **
1872 **      Declaration of structs:     Data structure block
1873 **
1874 **==========================================================
1875 **
1876 **	During execution of a ccb by the script processor,
1877 **	the DSA (data structure address) register points
1878 **	to this substructure of the ccb.
1879 **	This substructure contains the header with
1880 **	the script-processor-changable data and
1881 **	data blocks for the indirect move commands.
1882 **
1883 **----------------------------------------------------------
1884 */
1885 
1886 struct dsb {
1887 
1888 	/*
1889 	**	Header.
1890 	*/
1891 
1892 	struct head	header;
1893 
1894 	/*
1895 	**	Table data for Script
1896 	*/
1897 
1898 	struct scr_tblsel  select;
1899 	struct scr_tblmove smsg  ;
1900 	struct scr_tblmove smsg_ext ;
1901 	struct scr_tblmove cmd   ;
1902 	struct scr_tblmove sense ;
1903 	struct scr_tblmove wresid;
1904 	struct scr_tblmove data [MAX_SCATTER];
1905 
1906 	/*
1907 	**	Phase mismatch contexts.
1908 	**	We need two to handle correctly the
1909 	**	SAVED DATA POINTER.
1910 	*/
1911 
1912 	struct pm_ctx pm0;
1913 	struct pm_ctx pm1;
1914 };
1915 
1916 
1917 /*========================================================================
1918 **
1919 **      Declaration of structs:     Command control block.
1920 **
1921 **========================================================================
1922 */
1923 struct ccb {
1924 	/*----------------------------------------------------------------
1925 	**	This is the data structure which is pointed by the DSA
1926 	**	register when it is executed by the script processor.
1927 	**	It must be the first entry.
1928 	**----------------------------------------------------------------
1929 	*/
1930 	struct dsb	phys;
1931 
1932 	/*----------------------------------------------------------------
1933 	**	The general SCSI driver provides a
1934 	**	pointer to a control block.
1935 	**----------------------------------------------------------------
1936 	*/
1937 	Scsi_Cmnd	*cmd;		/* SCSI command 		*/
1938 	u_char		cdb_buf[16];	/* Copy of CDB			*/
1939 	u_char		sense_buf[64];
1940 	int		data_len;	/* Total data length		*/
1941 	int		segments;	/* Number of SG segments	*/
1942 
1943 	/*----------------------------------------------------------------
1944 	**	Message areas.
1945 	**	We prepare a message to be sent after selection.
1946 	**	We may use a second one if the command is rescheduled
1947 	**	due to CHECK_CONDITION or QUEUE FULL status.
1948 	**      Contents are IDENTIFY and SIMPLE_TAG.
1949 	**	While negotiating sync or wide transfer,
1950 	**	a SDTR or WDTR message is appended.
1951 	**----------------------------------------------------------------
1952 	*/
1953 	u_char		scsi_smsg [12];
1954 	u_char		scsi_smsg2[12];
1955 
1956 	/*----------------------------------------------------------------
1957 	**	Miscellaneous status'.
1958 	**----------------------------------------------------------------
1959 	*/
1960 	u_char		nego_status;	/* Negotiation status		*/
1961 	u_char		xerr_status;	/* Extended error flags		*/
1962 	u_int32		extra_bytes;	/* Extraneous bytes transferred	*/
1963 
1964 	/*----------------------------------------------------------------
1965 	**	Saved info for auto-sense
1966 	**----------------------------------------------------------------
1967 	*/
1968 	u_char		sv_scsi_status;
1969 	u_char		sv_xerr_status;
1970 
1971 	/*----------------------------------------------------------------
1972 	**	Other fields.
1973 	**----------------------------------------------------------------
1974 	*/
1975 	u_long		p_ccb;		/* BUS address of this CCB	*/
1976 	u_char		sensecmd[6];	/* Sense command		*/
1977 	u_char		to_abort;	/* This CCB is to be aborted	*/
1978 	u_short		tag;		/* Tag for this transfer	*/
1979 					/*  NO_TAG means no tag		*/
1980 	u_char		tags_si;	/* Lun tags sum index (0,1)	*/
1981 
1982 	u_char		target;
1983 	u_char		lun;
1984 	u_short		queued;
1985 	ccb_p		link_ccb;	/* Host adapter CCB chain	*/
1986 	ccb_p		link_ccbh;	/* Host adapter CCB hash chain	*/
1987 	XPT_QUEHEAD	link_ccbq;	/* Link to unit CCB queue	*/
1988 	u_int32		startp;		/* Initial data pointer		*/
1989 	u_int32		lastp0;		/* Initial 'lastp'		*/
1990 	int		ext_sg;		/* Extreme data pointer, used	*/
1991 	int		ext_ofs;	/*  to calculate the residual.	*/
1992 	int		resid;
1993 };
1994 
1995 #define CCB_PHYS(cp,lbl)	(cp->p_ccb + offsetof(struct ccb, lbl))
1996 
1997 
1998 /*========================================================================
1999 **
2000 **      Declaration of structs:     NCR device descriptor
2001 **
2002 **========================================================================
2003 */
2004 struct ncb {
2005 	/*----------------------------------------------------------------
2006 	**	Idle task and invalid task actions and their bus
2007 	**	addresses.
2008 	**----------------------------------------------------------------
2009 	*/
2010 	struct action	idletask;
2011 	struct action	notask;
2012 	struct action	bad_i_t_l;
2013 	struct action	bad_i_t_l_q;
2014 	u_long		p_idletask;
2015 	u_long		p_notask;
2016 	u_long		p_bad_i_t_l;
2017 	u_long		p_bad_i_t_l_q;
2018 
2019 	/*----------------------------------------------------------------
2020 	**	Dummy lun table to protect us against target returning bad
2021 	**	lun number on reselection.
2022 	**----------------------------------------------------------------
2023 	*/
2024 	u_int32		*badluntbl;	/* Table physical address	*/
2025 	u_int32		resel_badlun;	/* SCRIPT handler BUS address	*/
2026 
2027 	/*----------------------------------------------------------------
2028 	**	Bit 32-63 of the on-chip RAM bus address in LE format.
2029 	**	The START_RAM64 script loads the MMRS and MMWS from this
2030 	**	field.
2031 	**----------------------------------------------------------------
2032 	*/
2033 	u_int32		scr_ram_seg;
2034 
2035 	/*----------------------------------------------------------------
2036 	**	CCBs management queues.
2037 	**----------------------------------------------------------------
2038 	*/
2039 	Scsi_Cmnd	*waiting_list;	/* Commands waiting for a CCB	*/
2040 					/*  when lcb is not allocated.	*/
2041 	Scsi_Cmnd	*done_list;	/* Commands waiting for done()  */
2042 					/* callback to be invoked.      */
2043 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
2044 	spinlock_t	smp_lock;	/* Lock for SMP threading       */
2045 #endif
2046 
2047 	/*----------------------------------------------------------------
2048 	**	Chip and controller indentification.
2049 	**----------------------------------------------------------------
2050 	*/
2051 	int		unit;		/* Unit number			*/
2052 	char		chip_name[8];	/* Chip name			*/
2053 	char		inst_name[16];	/* ncb instance name		*/
2054 
2055 	/*----------------------------------------------------------------
2056 	**	Initial value of some IO register bits.
2057 	**	These values are assumed to have been set by BIOS, and may
2058 	**	be used for probing adapter implementation differences.
2059 	**----------------------------------------------------------------
2060 	*/
2061 	u_char	sv_scntl0, sv_scntl3, sv_dmode, sv_dcntl, sv_ctest3, sv_ctest4,
2062 		sv_ctest5, sv_gpcntl, sv_stest2, sv_stest4, sv_stest1, sv_scntl4;
2063 
2064 	/*----------------------------------------------------------------
2065 	**	Actual initial value of IO register bits used by the
2066 	**	driver. They are loaded at initialisation according to
2067 	**	features that are to be enabled.
2068 	**----------------------------------------------------------------
2069 	*/
2070 	u_char	rv_scntl0, rv_scntl3, rv_dmode, rv_dcntl, rv_ctest3, rv_ctest4,
2071 		rv_ctest5, rv_stest2, rv_ccntl0, rv_ccntl1, rv_scntl4;
2072 
2073 	/*----------------------------------------------------------------
2074 	**	Target data.
2075 	**	Target control block bus address array used by the SCRIPT
2076 	**	on reselection.
2077 	**----------------------------------------------------------------
2078 	*/
2079 	struct tcb	target[MAX_TARGET];
2080 	u_int32		*targtbl;
2081 
2082 	/*----------------------------------------------------------------
2083 	**	Virtual and physical bus addresses of the chip.
2084 	**----------------------------------------------------------------
2085 	*/
2086 #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
2087 	u_long		base_va;	/* MMIO base virtual address	*/
2088 	u_long		base2_va;	/* On-chip RAM virtual address	*/
2089 #endif
2090 	u_long		base_ba;	/* MMIO base bus address	*/
2091 	u_long		base_io;	/* IO space base address	*/
2092 	u_long		base_ws;	/* (MM)IO window size		*/
2093 	u_long		base2_ba;	/* On-chip RAM bus address	*/
2094 	u_long		base2_ws;	/* On-chip RAM window size	*/
2095 	u_int		irq;		/* IRQ number			*/
2096 	volatile			/* Pointer to volatile for 	*/
2097 	struct ncr_reg	*reg;		/*  memory mapped IO.		*/
2098 
2099 	/*----------------------------------------------------------------
2100 	**	SCRIPTS virtual and physical bus addresses.
2101 	**	'script'  is loaded in the on-chip RAM if present.
2102 	**	'scripth' stays in main memory for all chips except the
2103 	**	53C895A and 53C896 that provide 8K on-chip RAM.
2104 	**----------------------------------------------------------------
2105 	*/
2106 	struct script	*script0;	/* Copies of script and scripth	*/
2107 	struct scripth	*scripth0;	/*  relocated for this ncb.	*/
2108 	u_long		p_script;	/* Actual script and scripth	*/
2109 	u_long		p_scripth;	/*  bus addresses.		*/
2110 	u_long		p_scripth0;
2111 
2112 	/*----------------------------------------------------------------
2113 	**	General controller parameters and configuration.
2114 	**----------------------------------------------------------------
2115 	*/
2116 	pcidev_t	pdev;
2117 	u_short		device_id;	/* PCI device id		*/
2118 	u_char		revision_id;	/* PCI device revision id	*/
2119 	u_char		bus;		/* PCI BUS number		*/
2120 	u_char		device_fn;	/* PCI BUS device and function	*/
2121 	u_char		myaddr;		/* SCSI id of the adapter	*/
2122 	u_char		maxburst;	/* log base 2 of dwords burst	*/
2123 	u_char		maxwide;	/* Maximum transfer width	*/
2124 	u_char		minsync;	/* Minimum sync period factor	*/
2125 	u_char		maxsync;	/* Maximum sync period factor	*/
2126 	u_char		maxoffs;	/* Max scsi offset		*/
2127 	u_char		maxoffs_st;	/* Max scsi offset in ST mode	*/
2128 	u_char		multiplier;	/* Clock multiplier (1,2,4)	*/
2129 	u_char		clock_divn;	/* Number of clock divisors	*/
2130 	u_long		clock_khz;	/* SCSI clock frequency in KHz	*/
2131 	u_int		features;	/* Chip features map		*/
2132 
2133 	/*----------------------------------------------------------------
2134 	**	Range for the PCI clock frequency measurement result
2135 	**	that ensures the algorithm used by the driver can be
2136 	**	trusted for the SCSI clock frequency measurement.
2137 	**	(Assuming a PCI clock frequency of 33 MHz).
2138 	**----------------------------------------------------------------
2139 	*/
2140 	u_int		pciclock_min;
2141 	u_int		pciclock_max;
2142 
2143 	/*----------------------------------------------------------------
2144 	**	Start queue management.
2145 	**	It is filled up by the host processor and accessed by the
2146 	**	SCRIPTS processor in order to start SCSI commands.
2147 	**----------------------------------------------------------------
2148 	*/
2149 	u_long		p_squeue;	/* Start queue BUS address	*/
2150 	u_int32		*squeue;	/* Start queue virtual address	*/
2151 	u_short		squeueput;	/* Next free slot of the queue	*/
2152 	u_short		actccbs;	/* Number of allocated CCBs	*/
2153 	u_short		queuedepth;	/* Start queue depth		*/
2154 
2155 	/*----------------------------------------------------------------
2156 	**	Command completion queue.
2157 	**	It is the same size as the start queue to avoid overflow.
2158 	**----------------------------------------------------------------
2159 	*/
2160 	u_short		dqueueget;	/* Next position to scan	*/
2161 	u_int32		*dqueue;	/* Completion (done) queue	*/
2162 
2163 	/*----------------------------------------------------------------
2164 	**	Timeout handler.
2165 	**----------------------------------------------------------------
2166 	*/
2167 	struct timer_list timer;	/* Timer handler link header	*/
2168 	u_long		lasttime;
2169 	u_long		settle_time;	/* Resetting the SCSI BUS	*/
2170 
2171 	/*----------------------------------------------------------------
2172 	**	Debugging and profiling.
2173 	**----------------------------------------------------------------
2174 	*/
2175 	struct ncr_reg	regdump;	/* Register dump		*/
2176 	u_long		regtime;	/* Time it has been done	*/
2177 
2178 	/*----------------------------------------------------------------
2179 	**	Miscellaneous buffers accessed by the scripts-processor.
2180 	**	They shall be DWORD aligned, because they may be read or
2181 	**	written with a script command.
2182 	**----------------------------------------------------------------
2183 	*/
2184 	u_char		msgout[12];	/* Buffer for MESSAGE OUT 	*/
2185 	u_char		msgin [12];	/* Buffer for MESSAGE IN	*/
2186 	u_int32		lastmsg;	/* Last SCSI message sent	*/
2187 	u_char		scratch;	/* Scratch for SCSI receive	*/
2188 
2189 	/*----------------------------------------------------------------
2190 	**	Miscellaneous configuration and status parameters.
2191 	**----------------------------------------------------------------
2192 	*/
2193 	u_char		scsi_mode;	/* Current SCSI BUS mode	*/
2194 	u_char		order;		/* Tag order to use		*/
2195 	u_char		verbose;	/* Verbosity for this controller*/
2196 	u_int32		ncr_cache;	/* Used for cache test at init.	*/
2197 	u_long		p_ncb;		/* BUS address of this NCB	*/
2198 
2199 	/*----------------------------------------------------------------
2200 	**	CCB lists and queue.
2201 	**----------------------------------------------------------------
2202 	*/
2203 	ccb_p ccbh[CCB_HASH_SIZE];	/* CCB hashed by DSA value	*/
2204 	struct ccb	*ccbc;		/* CCB chain			*/
2205 	XPT_QUEHEAD	free_ccbq;	/* Queue of available CCBs	*/
2206 
2207 	/*----------------------------------------------------------------
2208 	**	IMMEDIATE ARBITRATION (IARB) control.
2209 	**	We keep track in 'last_cp' of the last CCB that has been
2210 	**	queued to the SCRIPTS processor and clear 'last_cp' when
2211 	**	this CCB completes. If last_cp is not zero at the moment
2212 	**	we queue a new CCB, we set a flag in 'last_cp' that is
2213 	**	used by the SCRIPTS as a hint for setting IARB.
2214 	**	We donnot set more than 'iarb_max' consecutive hints for
2215 	**	IARB in order to leave devices a chance to reselect.
2216 	**	By the way, any non zero value of 'iarb_max' is unfair. :)
2217 	**----------------------------------------------------------------
2218 	*/
2219 #ifdef SCSI_NCR_IARB_SUPPORT
2220 	struct ccb	*last_cp;	/* Last queud CCB used for IARB	*/
2221 	u_short		iarb_max;	/* Max. # consecutive IARB hints*/
2222 	u_short		iarb_count;	/* Actual # of these hints	*/
2223 #endif
2224 
2225 	/*----------------------------------------------------------------
2226 	**	We need the LCB in order to handle disconnections and
2227 	**	to count active CCBs for task management. So, we use
2228 	**	a unique CCB for LUNs we donnot have the LCB yet.
2229 	**	This queue normally should have at most 1 element.
2230 	**----------------------------------------------------------------
2231 	*/
2232 	XPT_QUEHEAD	b0_ccbq;
2233 
2234 	/*----------------------------------------------------------------
2235 	**	We use a different scatter function for 896 rev 1.
2236 	**----------------------------------------------------------------
2237 	*/
2238 	int (*scatter) (ncb_p, ccb_p, Scsi_Cmnd *);
2239 
2240 	/*----------------------------------------------------------------
2241 	**	Command abort handling.
2242 	**	We need to synchronize tightly with the SCRIPTS
2243 	**	processor in order to handle things correctly.
2244 	**----------------------------------------------------------------
2245 	*/
2246 	u_char		abrt_msg[4];	/* Message to send buffer	*/
2247 	struct scr_tblmove abrt_tbl;	/* Table for the MOV of it 	*/
2248 	struct scr_tblsel  abrt_sel;	/* Sync params for selection	*/
2249 	u_char		istat_sem;	/* Tells the chip to stop (SEM)	*/
2250 
2251 	/*----------------------------------------------------------------
2252 	**	Fields that should be removed or changed.
2253 	**----------------------------------------------------------------
2254 	*/
2255 	struct usrcmd	user;		/* Command from user		*/
2256 	volatile u_char	release_stage;	/* Synchronisation stage on release  */
2257 
2258 	/*----------------------------------------------------------------
2259 	**	Fields that are used (primarily) for integrity check
2260 	**----------------------------------------------------------------
2261 	*/
2262 	unsigned char  check_integrity; /* Enable midlayer integ. check on
2263 					 * bus scan. */
2264 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
2265 	unsigned char check_integ_par;	/* Set if par or Init. Det. error
2266 					 * used only during integ check */
2267 #endif
2268 };
2269 
2270 #define NCB_PHYS(np, lbl)	 (np->p_ncb + offsetof(struct ncb, lbl))
2271 #define NCB_SCRIPT_PHYS(np,lbl)	 (np->p_script  + offsetof (struct script, lbl))
2272 #define NCB_SCRIPTH_PHYS(np,lbl) (np->p_scripth + offsetof (struct scripth,lbl))
2273 #define NCB_SCRIPTH0_PHYS(np,lbl) (np->p_scripth0+offsetof (struct scripth,lbl))
2274 
2275 /*==========================================================
2276 **
2277 **
2278 **      Script for NCR-Processor.
2279 **
2280 **	Use ncr_script_fill() to create the variable parts.
2281 **	Use ncr_script_copy_and_bind() to make a copy and
2282 **	bind to physical addresses.
2283 **
2284 **
2285 **==========================================================
2286 **
2287 **	We have to know the offsets of all labels before
2288 **	we reach them (for forward jumps).
2289 **	Therefore we declare a struct here.
2290 **	If you make changes inside the script,
2291 **	DONT FORGET TO CHANGE THE LENGTHS HERE!
2292 **
2293 **----------------------------------------------------------
2294 */
2295 
2296 /*
2297 **	Script fragments which are loaded into the on-chip RAM
2298 **	of 825A, 875, 876, 895, 895A and 896 chips.
2299 */
2300 struct script {
2301 	ncrcmd	start		[ 14];
2302 	ncrcmd	getjob_begin	[  4];
2303 	ncrcmd	getjob_end	[  4];
2304 	ncrcmd	select		[  8];
2305 	ncrcmd	wf_sel_done	[  2];
2306 	ncrcmd	send_ident	[  2];
2307 #ifdef SCSI_NCR_IARB_SUPPORT
2308 	ncrcmd	select2		[  8];
2309 #else
2310 	ncrcmd	select2		[  2];
2311 #endif
2312 	ncrcmd  command		[  2];
2313 	ncrcmd  dispatch	[ 28];
2314 	ncrcmd  sel_no_cmd	[ 10];
2315 	ncrcmd  init		[  6];
2316 	ncrcmd  clrack		[  4];
2317 	ncrcmd  disp_status	[  4];
2318 	ncrcmd  datai_done	[ 26];
2319 	ncrcmd  datao_done	[ 12];
2320 	ncrcmd  ign_i_w_r_msg	[  4];
2321 	ncrcmd  datai_phase	[  2];
2322 	ncrcmd  datao_phase	[  4];
2323 	ncrcmd  msg_in		[  2];
2324 	ncrcmd  msg_in2		[ 10];
2325 #ifdef SCSI_NCR_IARB_SUPPORT
2326 	ncrcmd  status		[ 14];
2327 #else
2328 	ncrcmd  status		[ 10];
2329 #endif
2330 	ncrcmd  complete	[  8];
2331 #ifdef SCSI_NCR_PCIQ_MAY_REORDER_WRITES
2332 	ncrcmd  complete2	[ 12];
2333 #else
2334 	ncrcmd  complete2	[ 10];
2335 #endif
2336 #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
2337 	ncrcmd	done		[ 18];
2338 #else
2339 	ncrcmd	done		[ 14];
2340 #endif
2341 	ncrcmd	done_end	[  2];
2342 	ncrcmd  save_dp		[  8];
2343 	ncrcmd  restore_dp	[  4];
2344 	ncrcmd  disconnect	[ 20];
2345 #ifdef SCSI_NCR_IARB_SUPPORT
2346 	ncrcmd  idle		[  4];
2347 #else
2348 	ncrcmd  idle		[  2];
2349 #endif
2350 #ifdef SCSI_NCR_IARB_SUPPORT
2351 	ncrcmd  ungetjob	[  6];
2352 #else
2353 	ncrcmd  ungetjob	[  4];
2354 #endif
2355 	ncrcmd	reselect	[  4];
2356 	ncrcmd	reselected	[ 20];
2357 	ncrcmd	resel_scntl4	[ 30];
2358 #if   MAX_TASKS*4 > 512
2359 	ncrcmd	resel_tag	[ 18];
2360 #elif MAX_TASKS*4 > 256
2361 	ncrcmd	resel_tag	[ 12];
2362 #else
2363 	ncrcmd	resel_tag	[  8];
2364 #endif
2365 	ncrcmd	resel_go	[  6];
2366 	ncrcmd	resel_notag	[  2];
2367 	ncrcmd	resel_dsa	[  8];
2368 	ncrcmd  data_in		[MAX_SCATTER * SCR_SG_SIZE];
2369 	ncrcmd  data_in2	[  4];
2370 	ncrcmd  data_out	[MAX_SCATTER * SCR_SG_SIZE];
2371 	ncrcmd  data_out2	[  4];
2372 	ncrcmd  pm0_data	[ 12];
2373 	ncrcmd  pm0_data_out	[  6];
2374 	ncrcmd  pm0_data_end	[  6];
2375 	ncrcmd  pm1_data	[ 12];
2376 	ncrcmd  pm1_data_out	[  6];
2377 	ncrcmd  pm1_data_end	[  6];
2378 };
2379 
2380 /*
2381 **	Script fragments which stay in main memory for all chips
2382 **	except for the 895A and 896 that support 8K on-chip RAM.
2383 */
2384 struct scripth {
2385 	ncrcmd	start64		[  2];
2386 	ncrcmd	no_data		[  2];
2387 	ncrcmd	sel_for_abort	[ 18];
2388 	ncrcmd	sel_for_abort_1	[  2];
2389 	ncrcmd	select_no_atn	[  8];
2390 	ncrcmd	wf_sel_done_no_atn [ 4];
2391 
2392 	ncrcmd	msg_in_etc	[ 14];
2393 	ncrcmd	msg_received	[  4];
2394 	ncrcmd	msg_weird_seen	[  4];
2395 	ncrcmd	msg_extended	[ 20];
2396 	ncrcmd  msg_bad		[  6];
2397 	ncrcmd	msg_weird	[  4];
2398 	ncrcmd	msg_weird1	[  8];
2399 
2400 	ncrcmd	wdtr_resp	[  6];
2401 	ncrcmd	send_wdtr	[  4];
2402 	ncrcmd	sdtr_resp	[  6];
2403 	ncrcmd	send_sdtr	[  4];
2404 	ncrcmd	ppr_resp	[  6];
2405 	ncrcmd	send_ppr	[  4];
2406 	ncrcmd	nego_bad_phase	[  4];
2407 	ncrcmd	msg_out		[  4];
2408 	ncrcmd	msg_out_done	[  4];
2409 	ncrcmd	data_ovrun	[  2];
2410 	ncrcmd	data_ovrun1	[ 22];
2411 	ncrcmd	data_ovrun2	[  8];
2412 	ncrcmd	abort_resel	[ 16];
2413 	ncrcmd	resend_ident	[  4];
2414 	ncrcmd	ident_break	[  4];
2415 	ncrcmd	ident_break_atn	[  4];
2416 	ncrcmd	sdata_in	[  6];
2417 	ncrcmd  data_io		[  2];
2418 	ncrcmd  data_io_com	[  8];
2419 	ncrcmd  data_io_out	[ 12];
2420 	ncrcmd	resel_bad_lun	[  4];
2421 	ncrcmd	bad_i_t_l	[  4];
2422 	ncrcmd	bad_i_t_l_q	[  4];
2423 	ncrcmd	bad_status	[  6];
2424 	ncrcmd	tweak_pmj	[ 12];
2425 	ncrcmd	pm_handle	[ 20];
2426 	ncrcmd	pm_handle1	[  4];
2427 	ncrcmd	pm_save		[  4];
2428 	ncrcmd	pm0_save	[ 14];
2429 	ncrcmd	pm1_save	[ 14];
2430 
2431 	/* WSR handling */
2432 #ifdef SYM_DEBUG_PM_WITH_WSR
2433 	ncrcmd  pm_wsr_handle	[ 44];
2434 #else
2435 	ncrcmd  pm_wsr_handle	[ 42];
2436 #endif
2437 	ncrcmd  wsr_ma_helper	[  4];
2438 
2439 	/* Data area */
2440 	ncrcmd	zero		[  1];
2441 	ncrcmd	scratch		[  1];
2442 	ncrcmd	scratch1	[  1];
2443 	ncrcmd	pm0_data_addr	[  1];
2444 	ncrcmd	pm1_data_addr	[  1];
2445 	ncrcmd	saved_dsa	[  1];
2446 	ncrcmd	saved_drs	[  1];
2447 	ncrcmd	done_pos	[  1];
2448 	ncrcmd	startpos	[  1];
2449 	ncrcmd	targtbl		[  1];
2450 	/* End of data area */
2451 
2452 #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
2453 	ncrcmd	start_ram	[  1];
2454 	ncrcmd	script0_ba	[  4];
2455 	ncrcmd	start_ram64	[  3];
2456 	ncrcmd	script0_ba64	[  3];
2457 	ncrcmd	scripth0_ba64	[  6];
2458 	ncrcmd	ram_seg64	[  1];
2459 #endif
2460 	ncrcmd	snooptest	[  6];
2461 	ncrcmd	snoopend	[  2];
2462 };
2463 
2464 /*==========================================================
2465 **
2466 **
2467 **      Function headers.
2468 **
2469 **
2470 **==========================================================
2471 */
2472 
2473 static	ccb_p	ncr_alloc_ccb	(ncb_p np);
2474 static	void	ncr_complete	(ncb_p np, ccb_p cp);
2475 static	void	ncr_exception	(ncb_p np);
2476 static	void	ncr_free_ccb	(ncb_p np, ccb_p cp);
2477 static	ccb_p	ncr_ccb_from_dsa(ncb_p np, u_long dsa);
2478 static	void	ncr_init_tcb	(ncb_p np, u_char tn);
2479 static	lcb_p	ncr_alloc_lcb	(ncb_p np, u_char tn, u_char ln);
2480 static	lcb_p	ncr_setup_lcb	(ncb_p np, u_char tn, u_char ln,
2481 				 u_char *inq_data);
2482 static	void	ncr_getclock	(ncb_p np, int mult);
2483 static	u_int	ncr_getpciclock (ncb_p np);
2484 static	void	ncr_selectclock	(ncb_p np, u_char scntl3);
2485 static	ccb_p	ncr_get_ccb	(ncb_p np, u_char tn, u_char ln);
2486 static	void	ncr_init	(ncb_p np, int reset, char * msg, u_long code);
2487 static	void	ncr_int_sbmc	(ncb_p np);
2488 static	void	ncr_int_par	(ncb_p np, u_short sist);
2489 static	void	ncr_int_ma	(ncb_p np);
2490 static	void	ncr_int_sir	(ncb_p np);
2491 static  void    ncr_int_sto     (ncb_p np);
2492 static  void    ncr_int_udc     (ncb_p np);
2493 static	void	ncr_negotiate	(ncb_p np, tcb_p tp);
2494 static	int	ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr);
2495 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
2496 static	int	ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr);
2497 #endif
2498 static	void	ncr_script_copy_and_bind
2499 				(ncb_p np, ncrcmd *src, ncrcmd *dst, int len);
2500 static  void    ncr_script_fill (struct script * scr, struct scripth * scripth);
2501 static	int	ncr_scatter_896R1 (ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
2502 static	int	ncr_scatter	(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
2503 static	void	ncr_getsync	(ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p);
2504 static  void    ncr_get_xfer_info(ncb_p np, tcb_p tp, u_char *factor, u_char *offset, u_char *width);
2505 static	void	ncr_setsync	(ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, u_char scntl4);
2506 static void 	ncr_set_sync_wide_status (ncb_p np, u_char target);
2507 static	void	ncr_setup_tags	(ncb_p np, u_char tn, u_char ln);
2508 static	void	ncr_setwide	(ncb_p np, ccb_p cp, u_char wide, u_char ack);
2509 static	void	ncr_setsyncwide	(ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer, u_char scntl4, u_char wide);
2510 static	int	ncr_show_msg	(u_char * msg);
2511 static	void	ncr_print_msg	(ccb_p cp, char *label, u_char * msg);
2512 static	int	ncr_snooptest	(ncb_p np);
2513 static	void	ncr_timeout	(ncb_p np);
2514 static  void    ncr_wakeup      (ncb_p np, u_long code);
2515 static  int     ncr_wakeup_done (ncb_p np);
2516 static	void	ncr_start_next_ccb (ncb_p np, lcb_p lp, int maxn);
2517 static	void	ncr_put_start_queue(ncb_p np, ccb_p cp);
2518 static	void	ncr_chip_reset	(ncb_p np);
2519 static	void	ncr_soft_reset	(ncb_p np);
2520 static	void	ncr_start_reset	(ncb_p np);
2521 static	int	ncr_reset_scsi_bus (ncb_p np, int enab_int, int settle_delay);
2522 static	int	ncr_compute_residual (ncb_p np, ccb_p cp);
2523 
2524 #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
2525 static	void	ncr_usercmd	(ncb_p np);
2526 #endif
2527 
2528 static int ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device);
2529 static void ncr_free_resources(ncb_p np);
2530 
2531 static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd);
2532 static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd);
2533 static void process_waiting_list(ncb_p np, int sts);
2534 
2535 #define remove_from_waiting_list(np, cmd) \
2536 		retrieve_from_waiting_list(1, (np), (cmd))
2537 #define requeue_waiting_list(np) process_waiting_list((np), DID_OK)
2538 #define reset_waiting_list(np) process_waiting_list((np), DID_RESET)
2539 
2540 #ifdef SCSI_NCR_NVRAM_SUPPORT
2541 static  void	ncr_get_nvram	       (ncr_device *devp, ncr_nvram *nvp);
2542 static  int	sym_read_Tekram_nvram  (ncr_slot *np, u_short device_id,
2543 				        Tekram_nvram *nvram);
2544 static  int	sym_read_Symbios_nvram (ncr_slot *np, Symbios_nvram *nvram);
2545 #endif
2546 
2547 /*==========================================================
2548 **
2549 **
2550 **      Global static data.
2551 **
2552 **
2553 **==========================================================
2554 */
2555 
ncr_name(ncb_p np)2556 static inline char *ncr_name (ncb_p np)
2557 {
2558 	return np->inst_name;
2559 }
2560 
2561 
2562 /*==========================================================
2563 **
2564 **
2565 **      Scripts for NCR-Processor.
2566 **
2567 **      Use ncr_script_bind for binding to physical addresses.
2568 **
2569 **
2570 **==========================================================
2571 **
2572 **	NADDR generates a reference to a field of the controller data.
2573 **	PADDR generates a reference to another part of the script.
2574 **	RADDR generates a reference to a script processor register.
2575 **	FADDR generates a reference to a script processor register
2576 **		with offset.
2577 **
2578 **----------------------------------------------------------
2579 */
2580 
2581 #define	RELOC_SOFTC	0x40000000
2582 #define	RELOC_LABEL	0x50000000
2583 #define	RELOC_REGISTER	0x60000000
2584 #if 0
2585 #define	RELOC_KVAR	0x70000000
2586 #endif
2587 #define	RELOC_LABELH	0x80000000
2588 #define	RELOC_MASK	0xf0000000
2589 
2590 #define	NADDR(label)	(RELOC_SOFTC | offsetof(struct ncb, label))
2591 #define PADDR(label)    (RELOC_LABEL | offsetof(struct script, label))
2592 #define PADDRH(label)   (RELOC_LABELH | offsetof(struct scripth, label))
2593 #define	RADDR(label)	(RELOC_REGISTER | REG(label))
2594 #define	FADDR(label,ofs)(RELOC_REGISTER | ((REG(label))+(ofs)))
2595 #define	KVAR(which)	(RELOC_KVAR | (which))
2596 
2597 #define SCR_DATA_ZERO	0xf00ff00f
2598 
2599 #ifdef	RELOC_KVAR
2600 #define	SCRIPT_KVAR_JIFFIES	(0)
2601 #define	SCRIPT_KVAR_FIRST	SCRIPT_KVAR_JIFFIES
2602 #define	SCRIPT_KVAR_LAST	SCRIPT_KVAR_JIFFIES
2603 /*
2604  * Kernel variables referenced in the scripts.
2605  * THESE MUST ALL BE ALIGNED TO A 4-BYTE BOUNDARY.
2606  */
2607 static void *script_kvars[] __initdata =
2608 	{ (void *)&jiffies };
2609 #endif
2610 
2611 static	struct script script0 __initdata = {
2612 /*--------------------------< START >-----------------------*/ {
2613 	/*
2614 	**	This NOP will be patched with LED ON
2615 	**	SCR_REG_REG (gpreg, SCR_AND, 0xfe)
2616 	*/
2617 	SCR_NO_OP,
2618 		0,
2619 	/*
2620 	**      Clear SIGP.
2621 	*/
2622 	SCR_FROM_REG (ctest2),
2623 		0,
2624 
2625 	/*
2626 	**	Stop here if the C code wants to perform
2627 	**	some error recovery procedure manually.
2628 	**	(Indicate this by setting SEM in ISTAT)
2629 	*/
2630 	SCR_FROM_REG (istat),
2631 		0,
2632 	/*
2633 	**	Report to the C code the next position in
2634 	**	the start queue the SCRIPTS will schedule.
2635 	**	The C code must not change SCRATCHA.
2636 	*/
2637 	SCR_LOAD_ABS (scratcha, 4),
2638 		PADDRH (startpos),
2639 	SCR_INT ^ IFTRUE (MASK (SEM, SEM)),
2640 		SIR_SCRIPT_STOPPED,
2641 
2642 	/*
2643 	**	Start the next job.
2644 	**
2645 	**	@DSA	 = start point for this job.
2646 	**	SCRATCHA = address of this job in the start queue.
2647 	**
2648 	**	We will restore startpos with SCRATCHA if we fails the
2649 	**	arbitration or if it is the idle job.
2650 	**
2651 	**	The below GETJOB_BEGIN to GETJOB_END section of SCRIPTS
2652 	**	is a critical path. If it is partially executed, it then
2653 	**	may happen that the job address is not yet in the DSA
2654 	**	and the next queue position points to the next JOB.
2655 	*/
2656 	SCR_LOAD_ABS (dsa, 4),
2657 		PADDRH (startpos),
2658 	SCR_LOAD_REL (temp, 4),
2659 		4,
2660 }/*-------------------------< GETJOB_BEGIN >------------------*/,{
2661 	SCR_STORE_ABS (temp, 4),
2662 		PADDRH (startpos),
2663 	SCR_LOAD_REL (dsa, 4),
2664 		0,
2665 }/*-------------------------< GETJOB_END >--------------------*/,{
2666 	SCR_LOAD_REL (temp, 4),
2667 		0,
2668 	SCR_RETURN,
2669 		0,
2670 
2671 }/*-------------------------< SELECT >----------------------*/,{
2672 	/*
2673 	**	DSA	contains the address of a scheduled
2674 	**		data structure.
2675 	**
2676 	**	SCRATCHA contains the address of the start queue
2677 	**		entry which points to the next job.
2678 	**
2679 	**	Set Initiator mode.
2680 	**
2681 	**	(Target mode is left as an exercise for the reader)
2682 	*/
2683 
2684 	SCR_CLR (SCR_TRG),
2685 		0,
2686 	/*
2687 	**      And try to select this target.
2688 	*/
2689 	SCR_SEL_TBL_ATN ^ offsetof (struct dsb, select),
2690 		PADDR (ungetjob),
2691 	/*
2692 	**	Now there are 4 possibilities:
2693 	**
2694 	**	(1) The ncr looses arbitration.
2695 	**	This is ok, because it will try again,
2696 	**	when the bus becomes idle.
2697 	**	(But beware of the timeout function!)
2698 	**
2699 	**	(2) The ncr is reselected.
2700 	**	Then the script processor takes the jump
2701 	**	to the RESELECT label.
2702 	**
2703 	**	(3) The ncr wins arbitration.
2704 	**	Then it will execute SCRIPTS instruction until
2705 	**	the next instruction that checks SCSI phase.
2706 	**	Then will stop and wait for selection to be
2707 	**	complete or selection time-out to occur.
2708 	**
2709 	**	After having won arbitration, the ncr SCRIPTS
2710 	**	processor is able to execute instructions while
2711 	**	the SCSI core is performing SCSI selection. But
2712 	**	some script instruction that is not waiting for
2713 	**	a valid phase (or selection timeout) to occur
2714 	**	breaks the selection procedure, by probably
2715 	**	affecting timing requirements.
2716 	**	So we have to wait immediately for the next phase
2717 	**	or the selection to complete or time-out.
2718 	*/
2719 
2720 	/*
2721 	**      load the savep (saved pointer) into
2722 	**      the actual data pointer.
2723 	*/
2724 	SCR_LOAD_REL (temp, 4),
2725 		offsetof (struct ccb, phys.header.savep),
2726 	/*
2727 	**      Initialize the status registers
2728 	*/
2729 	SCR_LOAD_REL (scr0, 4),
2730 		offsetof (struct ccb, phys.header.status),
2731 
2732 }/*-------------------------< WF_SEL_DONE >----------------------*/,{
2733 	SCR_INT ^ IFFALSE (WHEN (SCR_MSG_OUT)),
2734 		SIR_SEL_ATN_NO_MSG_OUT,
2735 }/*-------------------------< SEND_IDENT >----------------------*/,{
2736 	/*
2737 	**	Selection complete.
2738 	**	Send the IDENTIFY and SIMPLE_TAG messages
2739 	**	(and the M_X_SYNC_REQ / M_X_WIDE_REQ message)
2740 	*/
2741 	SCR_MOVE_TBL ^ SCR_MSG_OUT,
2742 		offsetof (struct dsb, smsg),
2743 }/*-------------------------< SELECT2 >----------------------*/,{
2744 #ifdef SCSI_NCR_IARB_SUPPORT
2745 	/*
2746 	**	Set IMMEDIATE ARBITRATION if we have been given
2747 	**	a hint to do so. (Some job to do after this one).
2748 	*/
2749 	SCR_FROM_REG (HF_REG),
2750 		0,
2751 	SCR_JUMPR ^ IFFALSE (MASK (HF_HINT_IARB, HF_HINT_IARB)),
2752 		8,
2753 	SCR_REG_REG (scntl1, SCR_OR, IARB),
2754 		0,
2755 #endif
2756 	/*
2757 	**	Anticipate the COMMAND phase.
2758 	**	This is the PHASE we expect at this point.
2759 	*/
2760 	SCR_JUMP ^ IFFALSE (WHEN (SCR_COMMAND)),
2761 		PADDR (sel_no_cmd),
2762 
2763 }/*-------------------------< COMMAND >--------------------*/,{
2764 	/*
2765 	**	... and send the command
2766 	*/
2767 	SCR_MOVE_TBL ^ SCR_COMMAND,
2768 		offsetof (struct dsb, cmd),
2769 
2770 }/*-----------------------< DISPATCH >----------------------*/,{
2771 	/*
2772 	**	MSG_IN is the only phase that shall be
2773 	**	entered at least once for each (re)selection.
2774 	**	So we test it first.
2775 	*/
2776 	SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
2777 		PADDR (msg_in),
2778 	SCR_JUMP ^ IFTRUE (IF (SCR_DATA_OUT)),
2779 		PADDR (datao_phase),
2780 	SCR_JUMP ^ IFTRUE (IF (SCR_DATA_IN)),
2781 		PADDR (datai_phase),
2782 	SCR_JUMP ^ IFTRUE (IF (SCR_STATUS)),
2783 		PADDR (status),
2784 	SCR_JUMP ^ IFTRUE (IF (SCR_COMMAND)),
2785 		PADDR (command),
2786 	SCR_JUMP ^ IFTRUE (IF (SCR_MSG_OUT)),
2787 		PADDRH (msg_out),
2788 	/*
2789 	 *  Discard as many illegal phases as
2790 	 *  required and tell the C code about.
2791 	 */
2792 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_ILG_OUT)),
2793 		16,
2794 	SCR_MOVE_ABS (1) ^ SCR_ILG_OUT,
2795 		NADDR (scratch),
2796 	SCR_JUMPR ^ IFTRUE (WHEN (SCR_ILG_OUT)),
2797 		-16,
2798 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_ILG_IN)),
2799 		16,
2800 	SCR_MOVE_ABS (1) ^ SCR_ILG_IN,
2801 		NADDR (scratch),
2802 	SCR_JUMPR ^ IFTRUE (WHEN (SCR_ILG_IN)),
2803 		-16,
2804 	SCR_INT,
2805 		SIR_BAD_PHASE,
2806 	SCR_JUMP,
2807 		PADDR (dispatch),
2808 }/*---------------------< SEL_NO_CMD >----------------------*/,{
2809 	/*
2810 	**	The target does not switch to command
2811 	**	phase after IDENTIFY has been sent.
2812 	**
2813 	**	If it stays in MSG OUT phase send it
2814 	**	the IDENTIFY again.
2815 	*/
2816 	SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
2817 		PADDRH (resend_ident),
2818 	/*
2819 	**	If target does not switch to MSG IN phase
2820 	**	and we sent a negotiation, assert the
2821 	**	failure immediately.
2822 	*/
2823 	SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
2824 		PADDR (dispatch),
2825 	SCR_FROM_REG (HS_REG),
2826 		0,
2827 	SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
2828 		SIR_NEGO_FAILED,
2829 	/*
2830 	**	Jump to dispatcher.
2831 	*/
2832 	SCR_JUMP,
2833 		PADDR (dispatch),
2834 
2835 }/*-------------------------< INIT >------------------------*/,{
2836 	/*
2837 	**	Wait for the SCSI RESET signal to be
2838 	**	inactive before restarting operations,
2839 	**	since the chip may hang on SEL_ATN
2840 	**	if SCSI RESET is active.
2841 	*/
2842 	SCR_FROM_REG (sstat0),
2843 		0,
2844 	SCR_JUMPR ^ IFTRUE (MASK (IRST, IRST)),
2845 		-16,
2846 	SCR_JUMP,
2847 		PADDR (start),
2848 }/*-------------------------< CLRACK >----------------------*/,{
2849 	/*
2850 	**	Terminate possible pending message phase.
2851 	*/
2852 	SCR_CLR (SCR_ACK),
2853 		0,
2854 	SCR_JUMP,
2855 		PADDR (dispatch),
2856 
2857 }/*-------------------------< DISP_STATUS >----------------------*/,{
2858 	/*
2859 	**	Anticipate STATUS phase.
2860 	**
2861 	**	Does spare 3 SCRIPTS instructions when we have
2862 	**	completed the INPUT of the data.
2863 	*/
2864 	SCR_JUMP ^ IFTRUE (WHEN (SCR_STATUS)),
2865 		PADDR (status),
2866 	SCR_JUMP,
2867 		PADDR (dispatch),
2868 
2869 }/*-------------------------< DATAI_DONE >-------------------*/,{
2870 	/*
2871 	 *  If the device wants us to send more data,
2872 	 *  we must count the extra bytes.
2873 	 */
2874 	SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_IN)),
2875 		PADDRH (data_ovrun),
2876 	/*
2877 	**	If the SWIDE is not full, jump to dispatcher.
2878 	**	We anticipate a STATUS phase.
2879 	**	If we get later an IGNORE WIDE RESIDUE, we
2880 	**	will alias it as a MODIFY DP (-1).
2881 	*/
2882 	SCR_FROM_REG (scntl2),
2883 		0,
2884 	SCR_JUMP ^ IFFALSE (MASK (WSR, WSR)),
2885 		PADDR (disp_status),
2886 	/*
2887 	**	The SWIDE is full.
2888 	**	Clear this condition.
2889 	*/
2890 	SCR_REG_REG (scntl2, SCR_OR, WSR),
2891 		0,
2892 	/*
2893          *	We are expecting an IGNORE RESIDUE message
2894          *	from the device, otherwise we are in data
2895          *	overrun condition. Check against MSG_IN phase.
2896 	*/
2897 	SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
2898 		SIR_SWIDE_OVERRUN,
2899 	SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2900 		PADDR (disp_status),
2901 	/*
2902 	 *	We are in MSG_IN phase,
2903 	 *	Read the first byte of the message.
2904 	 *	If it is not an IGNORE RESIDUE message,
2905 	 *	signal overrun and jump to message
2906 	 *	processing.
2907 	 */
2908 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2909 		NADDR (msgin[0]),
2910 	SCR_INT ^ IFFALSE (DATA (M_IGN_RESIDUE)),
2911 		SIR_SWIDE_OVERRUN,
2912 	SCR_JUMP ^ IFFALSE (DATA (M_IGN_RESIDUE)),
2913 		PADDR (msg_in2),
2914 
2915 	/*
2916 	 *	We got the message we expected.
2917 	 *	Read the 2nd byte, and jump to dispatcher.
2918 	 */
2919 	SCR_CLR (SCR_ACK),
2920 		0,
2921 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2922 		NADDR (msgin[1]),
2923 	SCR_CLR (SCR_ACK),
2924 		0,
2925 	SCR_JUMP,
2926 		PADDR (disp_status),
2927 
2928 }/*-------------------------< DATAO_DONE >-------------------*/,{
2929 	/*
2930 	 *  If the device wants us to send more data,
2931 	 *  we must count the extra bytes.
2932 	 */
2933 	SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
2934 		PADDRH (data_ovrun),
2935 	/*
2936 	**	If the SODL is not full jump to dispatcher.
2937 	**	We anticipate a MSG IN phase or a STATUS phase.
2938 	*/
2939 	SCR_FROM_REG (scntl2),
2940 		0,
2941 	SCR_JUMP ^ IFFALSE (MASK (WSS, WSS)),
2942 		PADDR (disp_status),
2943 	/*
2944 	**	The SODL is full, clear this condition.
2945 	*/
2946 	SCR_REG_REG (scntl2, SCR_OR, WSS),
2947 		0,
2948 	/*
2949 	**	And signal a DATA UNDERRUN condition
2950 	**	to the C code.
2951 	*/
2952 	SCR_INT,
2953 		SIR_SODL_UNDERRUN,
2954 	SCR_JUMP,
2955 		PADDR (dispatch),
2956 
2957 }/*-------------------------< IGN_I_W_R_MSG >--------------*/,{
2958 	/*
2959 	**	We jump here from the phase mismatch interrupt,
2960 	**	When we have a SWIDE and the device has presented
2961 	**	a IGNORE WIDE RESIDUE message on the BUS.
2962 	**	We just have to throw away this message and then
2963 	**	to jump to dispatcher.
2964 	*/
2965 	SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
2966 		NADDR (scratch),
2967 	/*
2968 	**	Clear ACK and jump to dispatcher.
2969 	*/
2970 	SCR_JUMP,
2971 		PADDR (clrack),
2972 
2973 }/*-------------------------< DATAI_PHASE >------------------*/,{
2974 	SCR_RETURN,
2975 		0,
2976 }/*-------------------------< DATAO_PHASE >------------------*/,{
2977 	/*
2978 	**	Patch for 53c1010_66 only - to allow A0 part
2979 	**	to operate properly in a 33MHz PCI bus.
2980 	**
2981 	** 	SCR_REG_REG(scntl4, SCR_OR, 0x0c),
2982 	**		0,
2983 	*/
2984 	SCR_NO_OP,
2985 		0,
2986 	SCR_RETURN,
2987 		0,
2988 }/*-------------------------< MSG_IN >--------------------*/,{
2989 	/*
2990 	**	Get the first byte of the message.
2991 	**
2992 	**	The script processor doesn't negate the
2993 	**	ACK signal after this transfer.
2994 	*/
2995 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2996 		NADDR (msgin[0]),
2997 }/*-------------------------< MSG_IN2 >--------------------*/,{
2998 	/*
2999 	**	Check first against 1 byte messages
3000 	**	that we handle from SCRIPTS.
3001 	*/
3002 	SCR_JUMP ^ IFTRUE (DATA (M_COMPLETE)),
3003 		PADDR (complete),
3004 	SCR_JUMP ^ IFTRUE (DATA (M_DISCONNECT)),
3005 		PADDR (disconnect),
3006 	SCR_JUMP ^ IFTRUE (DATA (M_SAVE_DP)),
3007 		PADDR (save_dp),
3008 	SCR_JUMP ^ IFTRUE (DATA (M_RESTORE_DP)),
3009 		PADDR (restore_dp),
3010 	/*
3011 	**	We handle all other messages from the
3012 	**	C code, so no need to waste on-chip RAM
3013 	**	for those ones.
3014 	*/
3015 	SCR_JUMP,
3016 		PADDRH (msg_in_etc),
3017 
3018 }/*-------------------------< STATUS >--------------------*/,{
3019 	/*
3020 	**	get the status
3021 	*/
3022 	SCR_MOVE_ABS (1) ^ SCR_STATUS,
3023 		NADDR (scratch),
3024 #ifdef SCSI_NCR_IARB_SUPPORT
3025 	/*
3026 	**	If STATUS is not GOOD, clear IMMEDIATE ARBITRATION,
3027 	**	since we may have to tamper the start queue from
3028 	**	the C code.
3029 	*/
3030 	SCR_JUMPR ^ IFTRUE (DATA (S_GOOD)),
3031 		8,
3032 	SCR_REG_REG (scntl1, SCR_AND, ~IARB),
3033 		0,
3034 #endif
3035 	/*
3036 	**	save status to scsi_status.
3037 	**	mark as complete.
3038 	*/
3039 	SCR_TO_REG (SS_REG),
3040 		0,
3041 	SCR_LOAD_REG (HS_REG, HS_COMPLETE),
3042 		0,
3043 	/*
3044 	**	Anticipate the MESSAGE PHASE for
3045 	**	the TASK COMPLETE message.
3046 	*/
3047 	SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
3048 		PADDR (msg_in),
3049 	SCR_JUMP,
3050 		PADDR (dispatch),
3051 
3052 }/*-------------------------< COMPLETE >-----------------*/,{
3053 	/*
3054 	**	Complete message.
3055 	**
3056 	**	Copy the data pointer to LASTP in header.
3057 	*/
3058 	SCR_STORE_REL (temp, 4),
3059 		offsetof (struct ccb, phys.header.lastp),
3060 	/*
3061 	**	When we terminate the cycle by clearing ACK,
3062 	**	the target may disconnect immediately.
3063 	**
3064 	**	We don't want to be told of an
3065 	**	"unexpected disconnect",
3066 	**	so we disable this feature.
3067 	*/
3068 	SCR_REG_REG (scntl2, SCR_AND, 0x7f),
3069 		0,
3070 	/*
3071 	**	Terminate cycle ...
3072 	*/
3073 	SCR_CLR (SCR_ACK|SCR_ATN),
3074 		0,
3075 	/*
3076 	**	... and wait for the disconnect.
3077 	*/
3078 	SCR_WAIT_DISC,
3079 		0,
3080 }/*-------------------------< COMPLETE2 >-----------------*/,{
3081 	/*
3082 	**	Save host status to header.
3083 	*/
3084 	SCR_STORE_REL (scr0, 4),
3085 		offsetof (struct ccb, phys.header.status),
3086 
3087 #ifdef SCSI_NCR_PCIQ_MAY_REORDER_WRITES
3088 	/*
3089 	**	Some bridges may reorder DMA writes to memory.
3090 	**	We donnot want the CPU to deal with completions
3091 	**	without all the posted write having been flushed
3092 	**	to memory. This DUMMY READ should flush posted
3093 	**	buffers prior to the CPU having to deal with
3094 	**	completions.
3095 	*/
3096 	SCR_LOAD_REL (scr0, 4),	/* DUMMY READ */
3097 		offsetof (struct ccb, phys.header.status),
3098 #endif
3099 	/*
3100 	**	If command resulted in not GOOD status,
3101 	**	call the C code if needed.
3102 	*/
3103 	SCR_FROM_REG (SS_REG),
3104 		0,
3105 	SCR_CALL ^ IFFALSE (DATA (S_GOOD)),
3106 		PADDRH (bad_status),
3107 
3108 	/*
3109 	**	If we performed an auto-sense, call
3110 	**	the C code to synchronyze task aborts
3111 	**	with UNIT ATTENTION conditions.
3112 	*/
3113 	SCR_FROM_REG (HF_REG),
3114 		0,
3115 	SCR_INT ^ IFTRUE (MASK (HF_AUTO_SENSE, HF_AUTO_SENSE)),
3116 		SIR_AUTO_SENSE_DONE,
3117 
3118 }/*------------------------< DONE >-----------------*/,{
3119 #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
3120 	/*
3121 	**	It seems that some bridges flush everything
3122 	**	when the INTR line is raised. For these ones,
3123 	**	we can just ensure that the INTR line will be
3124 	**	raised before each completion. So, if it happens
3125 	**	that we have been faster that the CPU, we just
3126 	**	have to synchronize with it. A dummy programmed
3127 	**	interrupt will do the trick.
3128 	**	Note that we overlap at most 1 IO with the CPU
3129 	**	in this situation and that the IRQ line must not
3130 	**	be shared.
3131 	*/
3132 	SCR_FROM_REG (istat),
3133 		0,
3134 	SCR_INT ^ IFTRUE (MASK (INTF, INTF)),
3135 		SIR_DUMMY_INTERRUPT,
3136 #endif
3137 	/*
3138 	**	Copy the DSA to the DONE QUEUE and
3139 	**	signal completion to the host.
3140 	**	If we are interrupted between DONE
3141 	**	and DONE_END, we must reset, otherwise
3142 	**	the completed CCB will be lost.
3143 	*/
3144 	SCR_STORE_ABS (dsa, 4),
3145 		PADDRH (saved_dsa),
3146 	SCR_LOAD_ABS (dsa, 4),
3147 		PADDRH (done_pos),
3148 	SCR_LOAD_ABS (scratcha, 4),
3149 		PADDRH (saved_dsa),
3150 	SCR_STORE_REL (scratcha, 4),
3151 		0,
3152 	/*
3153 	**	The instruction below reads the DONE QUEUE next
3154 	**	free position from memory.
3155 	**	In addition it ensures that all PCI posted writes
3156 	**	are flushed and so the DSA value of the done
3157 	**	CCB is visible by the CPU before INTFLY is raised.
3158 	*/
3159 	SCR_LOAD_REL (temp, 4),
3160 		4,
3161 	SCR_INT_FLY,
3162 		0,
3163 	SCR_STORE_ABS (temp, 4),
3164 		PADDRH (done_pos),
3165 }/*------------------------< DONE_END >-----------------*/,{
3166 	SCR_JUMP,
3167 		PADDR (start),
3168 
3169 }/*-------------------------< SAVE_DP >------------------*/,{
3170 	/*
3171 	**	Clear ACK immediately.
3172 	**	No need to delay it.
3173 	*/
3174 	SCR_CLR (SCR_ACK),
3175 		0,
3176 	/*
3177 	**	Keep track we received a SAVE DP, so
3178 	**	we will switch to the other PM context
3179 	**	on the next PM since the DP may point
3180 	**	to the current PM context.
3181 	*/
3182 	SCR_REG_REG (HF_REG, SCR_OR, HF_DP_SAVED),
3183 		0,
3184 	/*
3185 	**	SAVE_DP message:
3186 	**	Copy the data pointer to SAVEP in header.
3187 	*/
3188 	SCR_STORE_REL (temp, 4),
3189 		offsetof (struct ccb, phys.header.savep),
3190 	SCR_JUMP,
3191 		PADDR (dispatch),
3192 }/*-------------------------< RESTORE_DP >---------------*/,{
3193 	/*
3194 	**	RESTORE_DP message:
3195 	**	Copy SAVEP in header to actual data pointer.
3196 	*/
3197 	SCR_LOAD_REL  (temp, 4),
3198 		offsetof (struct ccb, phys.header.savep),
3199 	SCR_JUMP,
3200 		PADDR (clrack),
3201 
3202 }/*-------------------------< DISCONNECT >---------------*/,{
3203 	/*
3204 	**	DISCONNECTing  ...
3205 	**
3206 	**	disable the "unexpected disconnect" feature,
3207 	**	and remove the ACK signal.
3208 	*/
3209 	SCR_REG_REG (scntl2, SCR_AND, 0x7f),
3210 		0,
3211 	SCR_CLR (SCR_ACK|SCR_ATN),
3212 		0,
3213 	/*
3214 	**	Wait for the disconnect.
3215 	*/
3216 	SCR_WAIT_DISC,
3217 		0,
3218 	/*
3219 	**	Status is: DISCONNECTED.
3220 	*/
3221 	SCR_LOAD_REG (HS_REG, HS_DISCONNECT),
3222 		0,
3223 	/*
3224 	**	Save host status to header.
3225 	*/
3226 	SCR_STORE_REL (scr0, 4),
3227 		offsetof (struct ccb, phys.header.status),
3228 	/*
3229 	**	If QUIRK_AUTOSAVE is set,
3230 	**	do an "save pointer" operation.
3231 	*/
3232 	SCR_FROM_REG (QU_REG),
3233 		0,
3234 	SCR_JUMP ^ IFFALSE (MASK (QUIRK_AUTOSAVE, QUIRK_AUTOSAVE)),
3235 		PADDR (start),
3236 	/*
3237 	**	like SAVE_DP message:
3238 	**	Remember we saved the data pointer.
3239 	**	Copy data pointer to SAVEP in header.
3240 	*/
3241 	SCR_REG_REG (HF_REG, SCR_OR, HF_DP_SAVED),
3242 		0,
3243 	SCR_STORE_REL (temp, 4),
3244 		offsetof (struct ccb, phys.header.savep),
3245 	SCR_JUMP,
3246 		PADDR (start),
3247 
3248 }/*-------------------------< IDLE >------------------------*/,{
3249 	/*
3250 	**	Nothing to do?
3251 	**	Wait for reselect.
3252 	**	This NOP will be patched with LED OFF
3253 	**	SCR_REG_REG (gpreg, SCR_OR, 0x01)
3254 	*/
3255 	SCR_NO_OP,
3256 		0,
3257 #ifdef SCSI_NCR_IARB_SUPPORT
3258 	SCR_JUMPR,
3259 		8,
3260 #endif
3261 }/*-------------------------< UNGETJOB >-----------------*/,{
3262 #ifdef SCSI_NCR_IARB_SUPPORT
3263 	/*
3264 	**	Set IMMEDIATE ARBITRATION, for the next time.
3265 	**	This will give us better chance to win arbitration
3266 	**	for the job we just wanted to do.
3267 	*/
3268 	SCR_REG_REG (scntl1, SCR_OR, IARB),
3269 		0,
3270 #endif
3271 	/*
3272 	**	We are not able to restart the SCRIPTS if we are
3273 	**	interrupted and these instruction haven't been
3274 	**	all executed. BTW, this is very unlikely to
3275 	**	happen, but we check that from the C code.
3276 	*/
3277 	SCR_LOAD_REG (dsa, 0xff),
3278 		0,
3279 	SCR_STORE_ABS (scratcha, 4),
3280 		PADDRH (startpos),
3281 }/*-------------------------< RESELECT >--------------------*/,{
3282 	/*
3283 	**	make the host status invalid.
3284 	*/
3285 	SCR_CLR (SCR_TRG),
3286 		0,
3287 	/*
3288 	**	Sleep waiting for a reselection.
3289 	**	If SIGP is set, special treatment.
3290 	**
3291 	**	Zu allem bereit ..
3292 	*/
3293 	SCR_WAIT_RESEL,
3294 		PADDR(start),
3295 }/*-------------------------< RESELECTED >------------------*/,{
3296 	/*
3297 	**	This NOP will be patched with LED ON
3298 	**	SCR_REG_REG (gpreg, SCR_AND, 0xfe)
3299 	*/
3300 	SCR_NO_OP,
3301 		0,
3302 	/*
3303 	**      load the target id into the sdid
3304 	*/
3305 	SCR_REG_SFBR (ssid, SCR_AND, 0x8F),
3306 		0,
3307 	SCR_TO_REG (sdid),
3308 		0,
3309 	/*
3310 	**	load the target control block address
3311 	*/
3312 	SCR_LOAD_ABS (dsa, 4),
3313 		PADDRH (targtbl),
3314 	SCR_SFBR_REG (dsa, SCR_SHL, 0),
3315 		0,
3316 	SCR_REG_REG (dsa, SCR_SHL, 0),
3317 		0,
3318 	SCR_REG_REG (dsa, SCR_AND, 0x3c),
3319 		0,
3320 	SCR_LOAD_REL (dsa, 4),
3321 		0,
3322 	/*
3323 	**	Load the synchronous transfer registers.
3324 	*/
3325 	SCR_LOAD_REL (scntl3, 1),
3326 		offsetof(struct tcb, wval),
3327 	SCR_LOAD_REL (sxfer, 1),
3328 		offsetof(struct tcb, sval),
3329 }/*-------------------------< RESEL_SCNTL4 >------------------*/,{
3330 	/*
3331 	**	Write with uval value. Patch if device
3332 	**	does not support Ultra3.
3333 	**
3334 	**	SCR_LOAD_REL (scntl4, 1),
3335 	**		offsetof(struct tcb, uval),
3336 	*/
3337 
3338 	SCR_NO_OP,
3339 		0,
3340         /*
3341          *  We expect MESSAGE IN phase.
3342          *  If not, get help from the C code.
3343          */
3344 	SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
3345 		SIR_RESEL_NO_MSG_IN,
3346 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
3347 		NADDR (msgin),
3348 
3349 	/*
3350 	 *  If IDENTIFY LUN #0, use a faster path
3351 	 *  to find the LCB structure.
3352 	 */
3353 	SCR_JUMPR ^ IFTRUE (MASK (0x80, 0xbf)),
3354 		56,
3355 	/*
3356 	 *  If message isn't an IDENTIFY,
3357 	 *  tell the C code about.
3358 	 */
3359 	SCR_INT ^ IFFALSE (MASK (0x80, 0x80)),
3360 		SIR_RESEL_NO_IDENTIFY,
3361 	/*
3362 	 *  It is an IDENTIFY message,
3363 	 *  Load the LUN control block address.
3364 	 */
3365 	SCR_LOAD_REL (dsa, 4),
3366 		offsetof(struct tcb, b_luntbl),
3367 	SCR_SFBR_REG (dsa, SCR_SHL, 0),
3368 		0,
3369 	SCR_REG_REG (dsa, SCR_SHL, 0),
3370 		0,
3371 	SCR_REG_REG (dsa, SCR_AND, 0xfc),
3372 		0,
3373 	SCR_LOAD_REL (dsa, 4),
3374 		0,
3375 	SCR_JUMPR,
3376 		8,
3377 	/*
3378 	**	LUN 0 special case (but usual one :))
3379 	*/
3380 	SCR_LOAD_REL (dsa, 4),
3381 		offsetof(struct tcb, b_lun0),
3382 
3383 	/*
3384 	**	Load the reselect task action for this LUN.
3385 	**	Load the tasks DSA array for this LUN.
3386 	**	Call the action.
3387 	*/
3388 	SCR_LOAD_REL (temp, 4),
3389 		offsetof(struct lcb, resel_task),
3390 	SCR_LOAD_REL (dsa, 4),
3391 		offsetof(struct lcb, b_tasktbl),
3392 	SCR_RETURN,
3393 		0,
3394 }/*-------------------------< RESEL_TAG >-------------------*/,{
3395 	/*
3396 	**	ACK the IDENTIFY or TAG previously received
3397 	*/
3398 
3399 	SCR_CLR (SCR_ACK),
3400 		0,
3401 	/*
3402 	**	Read IDENTIFY + SIMPLE + TAG using a single MOVE.
3403 	**	Agressive optimization, is'nt it?
3404 	**	No need to test the SIMPLE TAG message, since the
3405 	**	driver only supports conformant devices for tags. ;-)
3406 	*/
3407 	SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
3408 		NADDR (msgin),
3409 	/*
3410 	**	Read the TAG from the SIDL.
3411 	**	Still an aggressive optimization. ;-)
3412 	**	Compute the CCB indirect jump address which
3413 	**	is (#TAG*2 & 0xfc) due to tag numbering using
3414 	**	1,3,5..MAXTAGS*2+1 actual values.
3415 	*/
3416 	SCR_REG_SFBR (sidl, SCR_SHL, 0),
3417 		0,
3418 #if MAX_TASKS*4 > 512
3419 	SCR_JUMPR ^ IFFALSE (CARRYSET),
3420 		8,
3421 	SCR_REG_REG (dsa1, SCR_OR, 2),
3422 		0,
3423 	SCR_REG_REG (sfbr, SCR_SHL, 0),
3424 		0,
3425 	SCR_JUMPR ^ IFFALSE (CARRYSET),
3426 		8,
3427 	SCR_REG_REG (dsa1, SCR_OR, 1),
3428 		0,
3429 #elif MAX_TASKS*4 > 256
3430 	SCR_JUMPR ^ IFFALSE (CARRYSET),
3431 		8,
3432 	SCR_REG_REG (dsa1, SCR_OR, 1),
3433 		0,
3434 #endif
3435 	/*
3436 	**	Retrieve the DSA of this task.
3437 	**	JUMP indirectly to the restart point of the CCB.
3438 	*/
3439 	SCR_SFBR_REG (dsa, SCR_AND, 0xfc),
3440 		0,
3441 }/*-------------------------< RESEL_GO >-------------------*/,{
3442 	SCR_LOAD_REL (dsa, 4),
3443 		0,
3444 	SCR_LOAD_REL (temp, 4),
3445 		offsetof(struct ccb, phys.header.go.restart),
3446 	SCR_RETURN,
3447 		0,
3448 	/* In normal situations we branch to RESEL_DSA */
3449 }/*-------------------------< RESEL_NOTAG >-------------------*/,{
3450 	/*
3451 	**	JUMP indirectly to the restart point of the CCB.
3452 	*/
3453 	SCR_JUMP,
3454 		PADDR (resel_go),
3455 
3456 }/*-------------------------< RESEL_DSA >-------------------*/,{
3457 	/*
3458 	**	Ack the IDENTIFY or TAG previously received.
3459 	*/
3460 	SCR_CLR (SCR_ACK),
3461 		0,
3462 	/*
3463 	**      load the savep (saved pointer) into
3464 	**      the actual data pointer.
3465 	*/
3466 	SCR_LOAD_REL (temp, 4),
3467 		offsetof (struct ccb, phys.header.savep),
3468 	/*
3469 	**      Initialize the status registers
3470 	*/
3471 	SCR_LOAD_REL (scr0, 4),
3472 		offsetof (struct ccb, phys.header.status),
3473 	/*
3474 	**	Jump to dispatcher.
3475 	*/
3476 	SCR_JUMP,
3477 		PADDR (dispatch),
3478 
3479 }/*-------------------------< DATA_IN >--------------------*/,{
3480 /*
3481 **	Because the size depends on the
3482 **	#define MAX_SCATTER parameter,
3483 **	it is filled in at runtime.
3484 **
3485 **  ##===========< i=0; i<MAX_SCATTER >=========
3486 **  ||	SCR_CHMOV_TBL ^ SCR_DATA_IN,
3487 **  ||		offsetof (struct dsb, data[ i]),
3488 **  ##==========================================
3489 **
3490 **---------------------------------------------------------
3491 */
3492 0
3493 }/*-------------------------< DATA_IN2 >-------------------*/,{
3494 	SCR_CALL,
3495 		PADDR (datai_done),
3496 	SCR_JUMP,
3497 		PADDRH (data_ovrun),
3498 }/*-------------------------< DATA_OUT >--------------------*/,{
3499 /*
3500 **	Because the size depends on the
3501 **	#define MAX_SCATTER parameter,
3502 **	it is filled in at runtime.
3503 **
3504 **  ##===========< i=0; i<MAX_SCATTER >=========
3505 **  ||	SCR_CHMOV_TBL ^ SCR_DATA_OUT,
3506 **  ||		offsetof (struct dsb, data[ i]),
3507 **  ##==========================================
3508 **
3509 **---------------------------------------------------------
3510 */
3511 0
3512 }/*-------------------------< DATA_OUT2 >-------------------*/,{
3513 	SCR_CALL,
3514 		PADDR (datao_done),
3515 	SCR_JUMP,
3516 		PADDRH (data_ovrun),
3517 
3518 }/*-------------------------< PM0_DATA >--------------------*/,{
3519 	/*
3520 	**	Read our host flags to SFBR, so we will be able
3521 	**	to check against the data direction we expect.
3522 	*/
3523 	SCR_FROM_REG (HF_REG),
3524 		0,
3525 	/*
3526 	**	Check against actual DATA PHASE.
3527 	*/
3528 	SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
3529 		PADDR (pm0_data_out),
3530 	/*
3531 	**	Actual phase is DATA IN.
3532 	**	Check against expected direction.
3533 	*/
3534 	SCR_JUMP ^ IFFALSE (MASK (HF_DATA_IN, HF_DATA_IN)),
3535 		PADDRH (data_ovrun),
3536 	/*
3537 	**	Keep track we are moving data from the
3538 	**	PM0 DATA mini-script.
3539 	*/
3540 	SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM0),
3541 		0,
3542 	/*
3543 	**	Move the data to memory.
3544 	*/
3545 	SCR_CHMOV_TBL ^ SCR_DATA_IN,
3546 		offsetof (struct ccb, phys.pm0.sg),
3547 	SCR_JUMP,
3548 		PADDR (pm0_data_end),
3549 }/*-------------------------< PM0_DATA_OUT >----------------*/,{
3550 	/*
3551 	**	Actual phase is DATA OUT.
3552 	**	Check against expected direction.
3553 	*/
3554 	SCR_JUMP ^ IFTRUE (MASK (HF_DATA_IN, HF_DATA_IN)),
3555 		PADDRH (data_ovrun),
3556 	/*
3557 	**	Keep track we are moving data from the
3558 	**	PM0 DATA mini-script.
3559 	*/
3560 	SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM0),
3561 		0,
3562 	/*
3563 	**	Move the data from memory.
3564 	*/
3565 	SCR_CHMOV_TBL ^ SCR_DATA_OUT,
3566 		offsetof (struct ccb, phys.pm0.sg),
3567 }/*-------------------------< PM0_DATA_END >----------------*/,{
3568 	/*
3569 	**	Clear the flag that told we were moving
3570 	**	data from the PM0 DATA mini-script.
3571 	*/
3572 	SCR_REG_REG (HF_REG, SCR_AND, (~HF_IN_PM0)),
3573 		0,
3574 	/*
3575 	**	Return to the previous DATA script which
3576 	**	is guaranteed by design (if no bug) to be
3577 	**	the main DATA script for this transfer.
3578 	*/
3579 	SCR_LOAD_REL (temp, 4),
3580 		offsetof (struct ccb, phys.pm0.ret),
3581 	SCR_RETURN,
3582 		0,
3583 }/*-------------------------< PM1_DATA >--------------------*/,{
3584 	/*
3585 	**	Read our host flags to SFBR, so we will be able
3586 	**	to check against the data direction we expect.
3587 	*/
3588 	SCR_FROM_REG (HF_REG),
3589 		0,
3590 	/*
3591 	**	Check against actual DATA PHASE.
3592 	*/
3593 	SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
3594 		PADDR (pm1_data_out),
3595 	/*
3596 	**	Actual phase is DATA IN.
3597 	**	Check against expected direction.
3598 	*/
3599 	SCR_JUMP ^ IFFALSE (MASK (HF_DATA_IN, HF_DATA_IN)),
3600 		PADDRH (data_ovrun),
3601 	/*
3602 	**	Keep track we are moving data from the
3603 	**	PM1 DATA mini-script.
3604 	*/
3605 	SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM1),
3606 		0,
3607 	/*
3608 	**	Move the data to memory.
3609 	*/
3610 	SCR_CHMOV_TBL ^ SCR_DATA_IN,
3611 		offsetof (struct ccb, phys.pm1.sg),
3612 	SCR_JUMP,
3613 		PADDR (pm1_data_end),
3614 }/*-------------------------< PM1_DATA_OUT >----------------*/,{
3615 	/*
3616 	**	Actual phase is DATA OUT.
3617 	**	Check against expected direction.
3618 	*/
3619 	SCR_JUMP ^ IFTRUE (MASK (HF_DATA_IN, HF_DATA_IN)),
3620 		PADDRH (data_ovrun),
3621 	/*
3622 	**	Keep track we are moving data from the
3623 	**	PM1 DATA mini-script.
3624 	*/
3625 	SCR_REG_REG (HF_REG, SCR_OR, HF_IN_PM1),
3626 		0,
3627 	/*
3628 	**	Move the data from memory.
3629 	*/
3630 	SCR_CHMOV_TBL ^ SCR_DATA_OUT,
3631 		offsetof (struct ccb, phys.pm1.sg),
3632 }/*-------------------------< PM1_DATA_END >----------------*/,{
3633 	/*
3634 	**	Clear the flag that told we were moving
3635 	**	data from the PM1 DATA mini-script.
3636 	*/
3637 	SCR_REG_REG (HF_REG, SCR_AND, (~HF_IN_PM1)),
3638 		0,
3639 	/*
3640 	**	Return to the previous DATA script which
3641 	**	is guaranteed by design (if no bug) to be
3642 	**	the main DATA script for this transfer.
3643 	*/
3644 	SCR_LOAD_REL (temp, 4),
3645 		offsetof (struct ccb, phys.pm1.ret),
3646 	SCR_RETURN,
3647 		0,
3648 }/*---------------------------------------------------------*/
3649 };
3650 
3651 
3652 static	struct scripth scripth0 __initdata = {
3653 /*------------------------< START64 >-----------------------*/{
3654 	/*
3655 	**	SCRIPT entry point for the 895A and the 896.
3656 	**	For now, there is no specific stuff for that
3657 	**	chip at this point, but this may come.
3658 	*/
3659 	SCR_JUMP,
3660 		PADDR (init),
3661 }/*-------------------------< NO_DATA >-------------------*/,{
3662 	SCR_JUMP,
3663 		PADDRH (data_ovrun),
3664 }/*-----------------------< SEL_FOR_ABORT >------------------*/,{
3665 	/*
3666 	**	We are jumped here by the C code, if we have
3667 	**	some target to reset or some disconnected
3668 	**	job to abort. Since error recovery is a serious
3669 	**	busyness, we will really reset the SCSI BUS, if
3670 	**	case of a SCSI interrupt occuring in this path.
3671 	*/
3672 
3673 	/*
3674 	**	Set initiator mode.
3675 	*/
3676 	SCR_CLR (SCR_TRG),
3677 		0,
3678 	/*
3679 	**      And try to select this target.
3680 	*/
3681 	SCR_SEL_TBL_ATN ^ offsetof (struct ncb, abrt_sel),
3682 		PADDR (reselect),
3683 
3684 	/*
3685 	**	Wait for the selection to complete or
3686 	**	the selection to time out.
3687 	*/
3688 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
3689 		-8,
3690 	/*
3691 	**	Call the C code.
3692 	*/
3693 	SCR_INT,
3694 		SIR_TARGET_SELECTED,
3695 	/*
3696 	**	The C code should let us continue here.
3697 	**	Send the 'kiss of death' message.
3698 	**	We expect an immediate disconnect once
3699 	**	the target has eaten the message.
3700 	*/
3701 	SCR_REG_REG (scntl2, SCR_AND, 0x7f),
3702 		0,
3703 	SCR_MOVE_TBL ^ SCR_MSG_OUT,
3704 		offsetof (struct ncb, abrt_tbl),
3705 	SCR_CLR (SCR_ACK|SCR_ATN),
3706 		0,
3707 	SCR_WAIT_DISC,
3708 		0,
3709 	/*
3710 	**	Tell the C code that we are done.
3711 	*/
3712 	SCR_INT,
3713 		SIR_ABORT_SENT,
3714 }/*-----------------------< SEL_FOR_ABORT_1 >--------------*/,{
3715 	/*
3716 	**	Jump at scheduler.
3717 	*/
3718 	SCR_JUMP,
3719 		PADDR (start),
3720 
3721 }/*------------------------< SELECT_NO_ATN >-----------------*/,{
3722 	/*
3723 	**	Set Initiator mode.
3724 	**      And try to select this target without ATN.
3725 	*/
3726 
3727 	SCR_CLR (SCR_TRG),
3728 		0,
3729 	SCR_SEL_TBL ^ offsetof (struct dsb, select),
3730 		PADDR (ungetjob),
3731 	/*
3732 	**      load the savep (saved pointer) into
3733 	**      the actual data pointer.
3734 	*/
3735 	SCR_LOAD_REL (temp, 4),
3736 		offsetof (struct ccb, phys.header.savep),
3737 	/*
3738 	**      Initialize the status registers
3739 	*/
3740 	SCR_LOAD_REL (scr0, 4),
3741 		offsetof (struct ccb, phys.header.status),
3742 
3743 }/*------------------------< WF_SEL_DONE_NO_ATN >-----------------*/,{
3744 	/*
3745 	**	Wait immediately for the next phase or
3746 	**	the selection to complete or time-out.
3747 	*/
3748 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
3749 		0,
3750 	SCR_JUMP,
3751 		PADDR (select2),
3752 
3753 }/*-------------------------< MSG_IN_ETC >--------------------*/,{
3754 	/*
3755 	**	If it is an EXTENDED (variable size message)
3756 	**	Handle it.
3757 	*/
3758 	SCR_JUMP ^ IFTRUE (DATA (M_EXTENDED)),
3759 		PADDRH (msg_extended),
3760 	/*
3761 	**	Let the C code handle any other
3762 	**	1 byte message.
3763 	*/
3764 	SCR_JUMP ^ IFTRUE (MASK (0x00, 0xf0)),
3765 		PADDRH (msg_received),
3766 	SCR_JUMP ^ IFTRUE (MASK (0x10, 0xf0)),
3767 		PADDRH (msg_received),
3768 	/*
3769 	**	We donnot handle 2 bytes messages from SCRIPTS.
3770 	**	So, let the C code deal with these ones too.
3771 	*/
3772 	SCR_JUMP ^ IFFALSE (MASK (0x20, 0xf0)),
3773 		PADDRH (msg_weird_seen),
3774 	SCR_CLR (SCR_ACK),
3775 		0,
3776 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
3777 		NADDR (msgin[1]),
3778 	SCR_JUMP,
3779 		PADDRH (msg_received),
3780 
3781 }/*-------------------------< MSG_RECEIVED >--------------------*/,{
3782 	SCR_LOAD_REL (scratcha, 4),	/* DUMMY READ */
3783 		0,
3784 	SCR_INT,
3785 		SIR_MSG_RECEIVED,
3786 
3787 }/*-------------------------< MSG_WEIRD_SEEN >------------------*/,{
3788 	SCR_LOAD_REL (scratcha, 4),	/* DUMMY READ */
3789 		0,
3790 	SCR_INT,
3791 		SIR_MSG_WEIRD,
3792 
3793 }/*-------------------------< MSG_EXTENDED >--------------------*/,{
3794 	/*
3795 	**	Clear ACK and get the next byte
3796 	**	assumed to be the message length.
3797 	*/
3798 	SCR_CLR (SCR_ACK),
3799 		0,
3800 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
3801 		NADDR (msgin[1]),
3802 	/*
3803 	**	Try to catch some unlikely situations as 0 length
3804 	**	or too large the length.
3805 	*/
3806 	SCR_JUMP ^ IFTRUE (DATA (0)),
3807 		PADDRH (msg_weird_seen),
3808 	SCR_TO_REG (scratcha),
3809 		0,
3810 	SCR_REG_REG (sfbr, SCR_ADD, (256-8)),
3811 		0,
3812 	SCR_JUMP ^ IFTRUE (CARRYSET),
3813 		PADDRH (msg_weird_seen),
3814 	/*
3815 	**	We donnot handle extended messages from SCRIPTS.
3816 	**	Read the amount of data correponding to the
3817 	**	message length and call the C code.
3818 	*/
3819 	SCR_STORE_REL (scratcha, 1),
3820 		offsetof (struct dsb, smsg_ext.size),
3821 	SCR_CLR (SCR_ACK),
3822 		0,
3823 	SCR_MOVE_TBL ^ SCR_MSG_IN,
3824 		offsetof (struct dsb, smsg_ext),
3825 	SCR_JUMP,
3826 		PADDRH (msg_received),
3827 
3828 }/*-------------------------< MSG_BAD >------------------*/,{
3829 	/*
3830 	**	unimplemented message - reject it.
3831 	*/
3832 	SCR_INT,
3833 		SIR_REJECT_TO_SEND,
3834 	SCR_SET (SCR_ATN),
3835 		0,
3836 	SCR_JUMP,
3837 		PADDR (clrack),
3838 
3839 }/*-------------------------< MSG_WEIRD >--------------------*/,{
3840 	/*
3841 	**	weird message received
3842 	**	ignore all MSG IN phases and reject it.
3843 	*/
3844 	SCR_INT,
3845 		SIR_REJECT_TO_SEND,
3846 	SCR_SET (SCR_ATN),
3847 		0,
3848 }/*-------------------------< MSG_WEIRD1 >--------------------*/,{
3849 	SCR_CLR (SCR_ACK),
3850 		0,
3851 	SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
3852 		PADDR (dispatch),
3853 	SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
3854 		NADDR (scratch),
3855 	SCR_JUMP,
3856 		PADDRH (msg_weird1),
3857 }/*-------------------------< WDTR_RESP >----------------*/,{
3858 	/*
3859 	**	let the target fetch our answer.
3860 	*/
3861 	SCR_SET (SCR_ATN),
3862 		0,
3863 	SCR_CLR (SCR_ACK),
3864 		0,
3865 	SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
3866 		PADDRH (nego_bad_phase),
3867 
3868 }/*-------------------------< SEND_WDTR >----------------*/,{
3869 	/*
3870 	**	Send the M_X_WIDE_REQ
3871 	*/
3872 	SCR_MOVE_ABS (4) ^ SCR_MSG_OUT,
3873 		NADDR (msgout),
3874 	SCR_JUMP,
3875 		PADDRH (msg_out_done),
3876 
3877 }/*-------------------------< SDTR_RESP >-------------*/,{
3878 	/*
3879 	**	let the target fetch our answer.
3880 	*/
3881 	SCR_SET (SCR_ATN),
3882 		0,
3883 	SCR_CLR (SCR_ACK),
3884 		0,
3885 	SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
3886 		PADDRH (nego_bad_phase),
3887 
3888 }/*-------------------------< SEND_SDTR >-------------*/,{
3889 	/*
3890 	**	Send the M_X_SYNC_REQ
3891 	*/
3892 	SCR_MOVE_ABS (5) ^ SCR_MSG_OUT,
3893 		NADDR (msgout),
3894 	SCR_JUMP,
3895 		PADDRH (msg_out_done),
3896 
3897 }/*-------------------------< PPR_RESP >-------------*/,{
3898 	/*
3899 	**	let the target fetch our answer.
3900 	*/
3901 	SCR_SET (SCR_ATN),
3902 		0,
3903 	SCR_CLR (SCR_ACK),
3904 		0,
3905 	SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
3906 		PADDRH (nego_bad_phase),
3907 
3908 }/*-------------------------< SEND_PPR >-------------*/,{
3909 	/*
3910 	**	Send the M_X_PPR_REQ
3911 	*/
3912 	SCR_MOVE_ABS (8) ^ SCR_MSG_OUT,
3913 		NADDR (msgout),
3914 	SCR_JUMP,
3915 		PADDRH (msg_out_done),
3916 
3917 }/*-------------------------< NEGO_BAD_PHASE >------------*/,{
3918 	SCR_INT,
3919 		SIR_NEGO_PROTO,
3920 	SCR_JUMP,
3921 		PADDR (dispatch),
3922 
3923 }/*-------------------------< MSG_OUT >-------------------*/,{
3924 	/*
3925 	**	The target requests a message.
3926 	*/
3927 	SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
3928 		NADDR (msgout),
3929 	/*
3930 	**	... wait for the next phase
3931 	**	if it's a message out, send it again, ...
3932 	*/
3933 	SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
3934 		PADDRH (msg_out),
3935 }/*-------------------------< MSG_OUT_DONE >--------------*/,{
3936 	/*
3937 	**	... else clear the message ...
3938 	*/
3939 	SCR_INT,
3940 		SIR_MSG_OUT_DONE,
3941 	/*
3942 	**	... and process the next phase
3943 	*/
3944 	SCR_JUMP,
3945 		PADDR (dispatch),
3946 
3947 }/*-------------------------< DATA_OVRUN >-----------------------*/,{
3948 	/*
3949 	 *  Use scratcha to count the extra bytes.
3950 	 */
3951 	SCR_LOAD_ABS (scratcha, 4),
3952 		PADDRH (zero),
3953 }/*-------------------------< DATA_OVRUN1 >----------------------*/,{
3954 	/*
3955 	 *  The target may want to transfer too much data.
3956 	 *
3957 	 *  If phase is DATA OUT write 1 byte and count it.
3958 	 */
3959 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_OUT)),
3960 		16,
3961 	SCR_CHMOV_ABS (1) ^ SCR_DATA_OUT,
3962 		NADDR (scratch),
3963 	SCR_JUMP,
3964 		PADDRH (data_ovrun2),
3965 	/*
3966 	 *  If WSR is set, clear this condition, and
3967 	 *  count this byte.
3968 	 */
3969 	SCR_FROM_REG (scntl2),
3970 		0,
3971 	SCR_JUMPR ^ IFFALSE (MASK (WSR, WSR)),
3972 		16,
3973 	SCR_REG_REG (scntl2, SCR_OR, WSR),
3974 		0,
3975 	SCR_JUMP,
3976 		PADDRH (data_ovrun2),
3977 	/*
3978 	 *  Finally check against DATA IN phase.
3979 	 *  Signal data overrun to the C code
3980 	 *  and jump to dispatcher if not so.
3981 	 *  Read 1 byte otherwise and count it.
3982 	 */
3983 	SCR_JUMPR ^ IFTRUE (WHEN (SCR_DATA_IN)),
3984 		16,
3985 	SCR_INT,
3986 		SIR_DATA_OVERRUN,
3987 	SCR_JUMP,
3988 		PADDR (dispatch),
3989 	SCR_CHMOV_ABS (1) ^ SCR_DATA_IN,
3990 		NADDR (scratch),
3991 }/*-------------------------< DATA_OVRUN2 >----------------------*/,{
3992 	/*
3993 	 *  Count this byte.
3994 	 *  This will allow to return a negative
3995 	 *  residual to user.
3996 	 */
3997 	SCR_REG_REG (scratcha,  SCR_ADD,  0x01),
3998 		0,
3999 	SCR_REG_REG (scratcha1, SCR_ADDC, 0),
4000 		0,
4001 	SCR_REG_REG (scratcha2, SCR_ADDC, 0),
4002 		0,
4003 	/*
4004 	 *  .. and repeat as required.
4005 	 */
4006 	SCR_JUMP,
4007 		PADDRH (data_ovrun1),
4008 
4009 }/*-------------------------< ABORT_RESEL >----------------*/,{
4010 	SCR_SET (SCR_ATN),
4011 		0,
4012 	SCR_CLR (SCR_ACK),
4013 		0,
4014 	/*
4015 	**	send the abort/abortag/reset message
4016 	**	we expect an immediate disconnect
4017 	*/
4018 	SCR_REG_REG (scntl2, SCR_AND, 0x7f),
4019 		0,
4020 	SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
4021 		NADDR (msgout),
4022 	SCR_CLR (SCR_ACK|SCR_ATN),
4023 		0,
4024 	SCR_WAIT_DISC,
4025 		0,
4026 	SCR_INT,
4027 		SIR_RESEL_ABORTED,
4028 	SCR_JUMP,
4029 		PADDR (start),
4030 }/*-------------------------< RESEND_IDENT >-------------------*/,{
4031 	/*
4032 	**	The target stays in MSG OUT phase after having acked
4033 	**	Identify [+ Tag [+ Extended message ]]. Targets shall
4034 	**	behave this way on parity error.
4035 	**	We must send it again all the messages.
4036 	*/
4037 	SCR_SET (SCR_ATN), /* Shall be asserted 2 deskew delays before the  */
4038 		0,         /* 1rst ACK = 90 ns. Hope the NCR is'nt too fast */
4039 	SCR_JUMP,
4040 		PADDR (send_ident),
4041 }/*-------------------------< IDENT_BREAK >-------------------*/,{
4042 	SCR_CLR (SCR_ATN),
4043 		0,
4044 	SCR_JUMP,
4045 		PADDR (select2),
4046 }/*-------------------------< IDENT_BREAK_ATN >----------------*/,{
4047 	SCR_SET (SCR_ATN),
4048 		0,
4049 	SCR_JUMP,
4050 		PADDR (select2),
4051 }/*-------------------------< SDATA_IN >-------------------*/,{
4052 	SCR_CHMOV_TBL ^ SCR_DATA_IN,
4053 		offsetof (struct dsb, sense),
4054 	SCR_CALL,
4055 		PADDR (datai_done),
4056 	SCR_JUMP,
4057 		PADDRH (data_ovrun),
4058 }/*-------------------------< DATA_IO >--------------------*/,{
4059 	/*
4060 	**	We jump here if the data direction was unknown at the
4061 	**	time we had to queue the command to the scripts processor.
4062 	**	Pointers had been set as follow in this situation:
4063 	**	  savep   -->   DATA_IO
4064 	**	  lastp   -->   start pointer when DATA_IN
4065 	**	  goalp   -->   goal  pointer when DATA_IN
4066 	**	  wlastp  -->   start pointer when DATA_OUT
4067 	**	  wgoalp  -->   goal  pointer when DATA_OUT
4068 	**	This script sets savep/lastp/goalp according to the
4069 	**	direction chosen by the target.
4070 	*/
4071 	SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
4072 		PADDRH(data_io_out),
4073 }/*-------------------------< DATA_IO_COM >-----------------*/,{
4074 	/*
4075 	**	Direction is DATA IN.
4076 	**	Warning: we jump here, even when phase is DATA OUT.
4077 	*/
4078 	SCR_LOAD_REL  (scratcha, 4),
4079 		offsetof (struct ccb, phys.header.lastp),
4080 	SCR_STORE_REL (scratcha, 4),
4081 		offsetof (struct ccb, phys.header.savep),
4082 
4083 	/*
4084 	**	Jump to the SCRIPTS according to actual direction.
4085 	*/
4086 	SCR_LOAD_REL  (temp, 4),
4087 		offsetof (struct ccb, phys.header.savep),
4088 	SCR_RETURN,
4089 		0,
4090 }/*-------------------------< DATA_IO_OUT >-----------------*/,{
4091 	/*
4092 	**	Direction is DATA OUT.
4093 	*/
4094 	SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
4095 		0,
4096 	SCR_LOAD_REL  (scratcha, 4),
4097 		offsetof (struct ccb, phys.header.wlastp),
4098 	SCR_STORE_REL (scratcha, 4),
4099 		offsetof (struct ccb, phys.header.lastp),
4100 	SCR_LOAD_REL  (scratcha, 4),
4101 		offsetof (struct ccb, phys.header.wgoalp),
4102 	SCR_STORE_REL (scratcha, 4),
4103 		offsetof (struct ccb, phys.header.goalp),
4104 	SCR_JUMP,
4105 		PADDRH(data_io_com),
4106 
4107 }/*-------------------------< RESEL_BAD_LUN >---------------*/,{
4108 	/*
4109 	**	Message is an IDENTIFY, but lun is unknown.
4110 	**	Signal problem to C code for logging the event.
4111 	**	Send a M_ABORT to clear all pending tasks.
4112 	*/
4113 	SCR_INT,
4114 		SIR_RESEL_BAD_LUN,
4115 	SCR_JUMP,
4116 		PADDRH (abort_resel),
4117 }/*-------------------------< BAD_I_T_L >------------------*/,{
4118 	/*
4119 	**	We donnot have a task for that I_T_L.
4120 	**	Signal problem to C code for logging the event.
4121 	**	Send a M_ABORT message.
4122 	*/
4123 	SCR_INT,
4124 		SIR_RESEL_BAD_I_T_L,
4125 	SCR_JUMP,
4126 		PADDRH (abort_resel),
4127 }/*-------------------------< BAD_I_T_L_Q >----------------*/,{
4128 	/*
4129 	**	We donnot have a task that matches the tag.
4130 	**	Signal problem to C code for logging the event.
4131 	**	Send a M_ABORTTAG message.
4132 	*/
4133 	SCR_INT,
4134 		SIR_RESEL_BAD_I_T_L_Q,
4135 	SCR_JUMP,
4136 		PADDRH (abort_resel),
4137 }/*-------------------------< BAD_STATUS >-----------------*/,{
4138 	/*
4139 	**	Anything different from INTERMEDIATE
4140 	**	CONDITION MET should be a bad SCSI status,
4141 	**	given that GOOD status has already been tested.
4142 	**	Call the C code.
4143 	*/
4144 	SCR_LOAD_ABS (scratcha, 4),
4145 		PADDRH (startpos),
4146 	SCR_INT ^ IFFALSE (DATA (S_COND_MET)),
4147 		SIR_BAD_STATUS,
4148 	SCR_RETURN,
4149 		0,
4150 
4151 }/*-------------------------< TWEAK_PMJ >------------------*/,{
4152 	/*
4153 	**	Disable PM handling from SCRIPTS for the data phase
4154 	**	and so force PM to be handled from C code if HF_PM_TO_C
4155 	**	flag is set.
4156 	*/
4157 	SCR_FROM_REG(HF_REG),
4158 		0,
4159 	SCR_JUMPR ^ IFTRUE (MASK (HF_PM_TO_C, HF_PM_TO_C)),
4160 		16,
4161 	SCR_REG_REG (ccntl0, SCR_OR, ENPMJ),
4162 		0,
4163 	SCR_RETURN,
4164  		0,
4165 	SCR_REG_REG (ccntl0, SCR_AND, (~ENPMJ)),
4166 		0,
4167 	SCR_RETURN,
4168  		0,
4169 
4170 }/*-------------------------< PM_HANDLE >------------------*/,{
4171 	/*
4172 	**	Phase mismatch handling.
4173 	**
4174 	**	Since we have to deal with 2 SCSI data pointers
4175 	**	(current and saved), we need at least 2 contexts.
4176 	**	Each context (pm0 and pm1) has a saved area, a
4177 	**	SAVE mini-script and a DATA phase mini-script.
4178 	*/
4179 	/*
4180 	**	Get the PM handling flags.
4181 	*/
4182 	SCR_FROM_REG (HF_REG),
4183 		0,
4184 	/*
4185 	**	If no flags (1rst PM for example), avoid
4186 	**	all the below heavy flags testing.
4187 	**	This makes the normal case a bit faster.
4188 	*/
4189 	SCR_JUMP ^ IFTRUE (MASK (0, (HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED))),
4190 		PADDRH (pm_handle1),
4191 	/*
4192 	**	If we received a SAVE DP, switch to the
4193 	**	other PM context since the savep may point
4194 	**	to the current PM context.
4195 	*/
4196 	SCR_JUMPR ^ IFFALSE (MASK (HF_DP_SAVED, HF_DP_SAVED)),
4197 		8,
4198 	SCR_REG_REG (sfbr, SCR_XOR, HF_ACT_PM),
4199 		0,
4200 	/*
4201 	**	If we have been interrupt in a PM DATA mini-script,
4202 	**	we take the return address from the corresponding
4203 	**	saved area.
4204 	**	This ensure the return address always points to the
4205 	**	main DATA script for this transfer.
4206 	*/
4207 	SCR_JUMP ^ IFTRUE (MASK (0, (HF_IN_PM0 | HF_IN_PM1))),
4208 		PADDRH (pm_handle1),
4209 	SCR_JUMPR ^ IFFALSE (MASK (HF_IN_PM0, HF_IN_PM0)),
4210 		16,
4211 	SCR_LOAD_REL (ia, 4),
4212 		offsetof(struct ccb, phys.pm0.ret),
4213 	SCR_JUMP,
4214 		PADDRH (pm_save),
4215 	SCR_LOAD_REL (ia, 4),
4216 		offsetof(struct ccb, phys.pm1.ret),
4217 	SCR_JUMP,
4218 		PADDRH (pm_save),
4219 }/*-------------------------< PM_HANDLE1 >-----------------*/,{
4220 	/*
4221 	**	Normal case.
4222 	**	Update the return address so that it
4223 	**	will point after the interrupted MOVE.
4224 	*/
4225 	SCR_REG_REG (ia, SCR_ADD, 8),
4226 		0,
4227 	SCR_REG_REG (ia1, SCR_ADDC, 0),
4228 		0,
4229 }/*-------------------------< PM_SAVE >--------------------*/,{
4230 	/*
4231 	**	Clear all the flags that told us if we were
4232 	**	interrupted in a PM DATA mini-script and/or
4233 	**	we received a SAVE DP.
4234 	*/
4235 	SCR_SFBR_REG (HF_REG, SCR_AND, (~(HF_IN_PM0|HF_IN_PM1|HF_DP_SAVED))),
4236 		0,
4237 	/*
4238 	**	Choose the current PM context.
4239 	*/
4240 	SCR_JUMP ^ IFTRUE (MASK (HF_ACT_PM, HF_ACT_PM)),
4241 		PADDRH (pm1_save),
4242 }/*-------------------------< PM0_SAVE >-------------------*/,{
4243 	SCR_STORE_REL (ia, 4),
4244 		offsetof(struct ccb, phys.pm0.ret),
4245 	/*
4246 	**	If WSR bit is set, either UA and RBC may
4247 	**	have to be changed whatever the device wants
4248 	**	to ignore this residue ot not.
4249 	*/
4250 	SCR_FROM_REG (scntl2),
4251 		0,
4252 	SCR_CALL ^ IFTRUE (MASK (WSR, WSR)),
4253 		PADDRH (pm_wsr_handle),
4254 	/*
4255 	**	Save the remaining byte count, the updated
4256 	**	address and the return address.
4257 	*/
4258 	SCR_STORE_REL (rbc, 4),
4259 		offsetof(struct ccb, phys.pm0.sg.size),
4260 	SCR_STORE_REL (ua, 4),
4261 		offsetof(struct ccb, phys.pm0.sg.addr),
4262 	/*
4263 	**	Set the current pointer at the PM0 DATA mini-script.
4264 	*/
4265 	SCR_LOAD_ABS (temp, 4),
4266 		PADDRH (pm0_data_addr),
4267 	SCR_JUMP,
4268 		PADDR (dispatch),
4269 }/*-------------------------< PM1_SAVE >-------------------*/,{
4270 	SCR_STORE_REL (ia, 4),
4271 		offsetof(struct ccb, phys.pm1.ret),
4272 	/*
4273 	**	If WSR bit is set, either UA and RBC may
4274 	**	have been changed whatever the device wants
4275 	**	to ignore this residue or not.
4276 	*/
4277 	SCR_FROM_REG (scntl2),
4278 		0,
4279 	SCR_CALL ^ IFTRUE (MASK (WSR, WSR)),
4280 		PADDRH (pm_wsr_handle),
4281 	/*
4282 	**	Save the remaining byte count, the updated
4283 	**	address and the return address.
4284 	*/
4285 	SCR_STORE_REL (rbc, 4),
4286 		offsetof(struct ccb, phys.pm1.sg.size),
4287 	SCR_STORE_REL (ua, 4),
4288 		offsetof(struct ccb, phys.pm1.sg.addr),
4289 	/*
4290 	**	Set the current pointer at the PM1 DATA mini-script.
4291 	*/
4292 	SCR_LOAD_ABS (temp, 4),
4293 		PADDRH (pm1_data_addr),
4294 	SCR_JUMP,
4295 		PADDR (dispatch),
4296 }/*--------------------------< PM_WSR_HANDLE >-----------------------*/,{
4297 	/*
4298 	 *  Phase mismatch handling from SCRIPT with WSR set.
4299 	 *  Such a condition can occur if the chip wants to
4300 	 *  execute a CHMOV(size > 1) when the WSR bit is
4301 	 *  set and the target changes PHASE.
4302 	 */
4303 #ifdef	SYM_DEBUG_PM_WITH_WSR
4304 	/*
4305 	 *  Some debugging may still be needed.:)
4306 	 */
4307 	SCR_INT,
4308 		SIR_PM_WITH_WSR,
4309 #endif
4310 	/*
4311 	 *  We must move the residual byte to memory.
4312 	 *
4313 	 *  UA contains bit 0..31 of the address to
4314 	 *  move the residual byte.
4315 	 *  Move it to the table indirect.
4316 	 */
4317 	SCR_STORE_REL (ua, 4),
4318 		offsetof (struct ccb, phys.wresid.addr),
4319 	/*
4320 	 *  Increment UA (move address to next position).
4321 	 */
4322 	SCR_REG_REG (ua, SCR_ADD, 1),
4323 		0,
4324 	SCR_REG_REG (ua1, SCR_ADDC, 0),
4325 		0,
4326 	SCR_REG_REG (ua2, SCR_ADDC, 0),
4327 		0,
4328 	SCR_REG_REG (ua3, SCR_ADDC, 0),
4329 		0,
4330 	/*
4331 	 *  Compute SCRATCHA as:
4332 	 *  - size to transfer = 1 byte.
4333 	 *  - bit 24..31 = high address bit [32...39].
4334 	 */
4335 	SCR_LOAD_ABS (scratcha, 4),
4336 		PADDRH (zero),
4337 	SCR_REG_REG (scratcha, SCR_OR, 1),
4338 		0,
4339 	SCR_FROM_REG (rbc3),
4340 		0,
4341 	SCR_TO_REG (scratcha3),
4342 		0,
4343 	/*
4344 	 *  Move this value to the table indirect.
4345 	 */
4346 	SCR_STORE_REL (scratcha, 4),
4347 		offsetof (struct ccb, phys.wresid.size),
4348 	/*
4349 	 *  Wait for a valid phase.
4350 	 *  While testing with bogus QUANTUM drives, the C1010
4351 	 *  sometimes raised a spurious phase mismatch with
4352 	 *  WSR and the CHMOV(1) triggered another PM.
4353 	 *  Waiting explicitely for the PHASE seemed to avoid
4354 	 *  the nested phase mismatch. Btw, this didn't happen
4355 	 *  using my IBM drives.
4356 	 */
4357 	SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_IN)),
4358 		0,
4359 	/*
4360 	 *  Perform the move of the residual byte.
4361 	 */
4362 	SCR_CHMOV_TBL ^ SCR_DATA_IN,
4363 		offsetof (struct ccb, phys.wresid),
4364 	/*
4365 	 *  We can now handle the phase mismatch with UA fixed.
4366 	 *  RBC[0..23]=0 is a special case that does not require
4367 	 *  a PM context. The C code also checks against this.
4368 	 */
4369 	SCR_FROM_REG (rbc),
4370 		0,
4371 	SCR_RETURN ^ IFFALSE (DATA (0)),
4372 		0,
4373 	SCR_FROM_REG (rbc1),
4374 		0,
4375 	SCR_RETURN ^ IFFALSE (DATA (0)),
4376 		0,
4377 	SCR_FROM_REG (rbc2),
4378 		0,
4379 	SCR_RETURN ^ IFFALSE (DATA (0)),
4380 		0,
4381 	/*
4382 	 *  RBC[0..23]=0.
4383 	 *  Not only we donnot need a PM context, but this would
4384 	 *  lead to a bogus CHMOV(0). This condition means that
4385 	 *  the residual was the last byte to move from this CHMOV.
4386 	 *  So, we just have to move the current data script pointer
4387 	 *  (i.e. TEMP) to the SCRIPTS address following the
4388 	 *  interrupted CHMOV and jump to dispatcher.
4389 	 */
4390 	SCR_STORE_ABS (ia, 4),
4391 		PADDRH (scratch),
4392 	SCR_LOAD_ABS (temp, 4),
4393 		PADDRH (scratch),
4394 	SCR_JUMP,
4395 		PADDR (dispatch),
4396 }/*--------------------------< WSR_MA_HELPER >-----------------------*/,{
4397 	/*
4398 	 *  Helper for the C code when WSR bit is set.
4399 	 *  Perform the move of the residual byte.
4400 	 */
4401 	SCR_CHMOV_TBL ^ SCR_DATA_IN,
4402 		offsetof (struct ccb, phys.wresid),
4403 	SCR_JUMP,
4404 		PADDR (dispatch),
4405 }/*-------------------------< ZERO >------------------------*/,{
4406 	SCR_DATA_ZERO,
4407 }/*-------------------------< SCRATCH >---------------------*/,{
4408 	SCR_DATA_ZERO,
4409 }/*-------------------------< SCRATCH1 >--------------------*/,{
4410 	SCR_DATA_ZERO,
4411 }/*-------------------------< PM0_DATA_ADDR >---------------*/,{
4412 	SCR_DATA_ZERO,
4413 }/*-------------------------< PM1_DATA_ADDR >---------------*/,{
4414 	SCR_DATA_ZERO,
4415 }/*-------------------------< SAVED_DSA >-------------------*/,{
4416 	SCR_DATA_ZERO,
4417 }/*-------------------------< SAVED_DRS >-------------------*/,{
4418 	SCR_DATA_ZERO,
4419 }/*-------------------------< DONE_POS >--------------------*/,{
4420 	SCR_DATA_ZERO,
4421 }/*-------------------------< STARTPOS >--------------------*/,{
4422 	SCR_DATA_ZERO,
4423 }/*-------------------------< TARGTBL >---------------------*/,{
4424 	SCR_DATA_ZERO,
4425 
4426 
4427 /*
4428 ** We may use MEMORY MOVE instructions to load the on chip-RAM,
4429 ** if it happens that mapping PCI memory is not possible.
4430 ** But writing the RAM from the CPU is the preferred method,
4431 ** since PCI 2.2 seems to disallow PCI self-mastering.
4432 */
4433 
4434 #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
4435 
4436 }/*-------------------------< START_RAM >-------------------*/,{
4437 	/*
4438 	**	Load the script into on-chip RAM,
4439 	**	and jump to start point.
4440 	*/
4441 	SCR_COPY (sizeof (struct script)),
4442 }/*-------------------------< SCRIPT0_BA >--------------------*/,{
4443 		0,
4444 		PADDR (start),
4445 	SCR_JUMP,
4446 		PADDR (init),
4447 
4448 }/*-------------------------< START_RAM64 >--------------------*/,{
4449 	/*
4450 	**	Load the RAM and start for 64 bit PCI (895A,896).
4451 	**	Both scripts (script and scripth) are loaded into
4452 	**	the RAM which is 8K (4K for 825A/875/895).
4453 	**	We also need to load some 32-63 bit segments
4454 	**	address of the SCRIPTS processor.
4455 	**	LOAD/STORE ABSOLUTE always refers to on-chip RAM
4456 	**	in our implementation. The main memory is
4457 	**	accessed using LOAD/STORE DSA RELATIVE.
4458 	*/
4459 	SCR_LOAD_REL (mmws, 4),
4460 		offsetof (struct ncb, scr_ram_seg),
4461 	SCR_COPY (sizeof(struct script)),
4462 }/*-------------------------< SCRIPT0_BA64 >--------------------*/,{
4463 		0,
4464 		PADDR (start),
4465 	SCR_COPY (sizeof(struct scripth)),
4466 }/*-------------------------< SCRIPTH0_BA64 >--------------------*/,{
4467 		0,
4468 		PADDRH  (start64),
4469 	SCR_LOAD_REL  (mmrs, 4),
4470 		offsetof (struct ncb, scr_ram_seg),
4471 	SCR_JUMP64,
4472 		PADDRH (start64),
4473 }/*-------------------------< RAM_SEG64 >--------------------*/,{
4474 		0,
4475 
4476 #endif /* SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
4477 
4478 }/*-------------------------< SNOOPTEST >-------------------*/,{
4479 	/*
4480 	**	Read the variable.
4481 	*/
4482 	SCR_LOAD_REL (scratcha, 4),
4483 		offsetof(struct ncb, ncr_cache),
4484 	SCR_STORE_REL (temp, 4),
4485 		offsetof(struct ncb, ncr_cache),
4486 	SCR_LOAD_REL (temp, 4),
4487 		offsetof(struct ncb, ncr_cache),
4488 }/*-------------------------< SNOOPEND >-------------------*/,{
4489 	/*
4490 	**	And stop.
4491 	*/
4492 	SCR_INT,
4493 		99,
4494 }/*--------------------------------------------------------*/
4495 };
4496 
4497 /*==========================================================
4498 **
4499 **
4500 **	Fill in #define dependent parts of the script
4501 **
4502 **
4503 **==========================================================
4504 */
4505 
ncr_script_fill(struct script * scr,struct scripth * scrh)4506 void __init ncr_script_fill (struct script * scr, struct scripth * scrh)
4507 {
4508 	int	i;
4509 	ncrcmd	*p;
4510 
4511 	p = scr->data_in;
4512 	for (i=0; i<MAX_SCATTER; i++) {
4513 		*p++ =SCR_CHMOV_TBL ^ SCR_DATA_IN;
4514 		*p++ =offsetof (struct dsb, data[i]);
4515 	};
4516 
4517 	assert ((u_long)p == (u_long)&scr->data_in + sizeof (scr->data_in));
4518 
4519 	p = scr->data_out;
4520 
4521 	for (i=0; i<MAX_SCATTER; i++) {
4522 		*p++ =SCR_CHMOV_TBL ^ SCR_DATA_OUT;
4523 		*p++ =offsetof (struct dsb, data[i]);
4524 	};
4525 
4526 	assert ((u_long)p == (u_long)&scr->data_out + sizeof (scr->data_out));
4527 }
4528 
4529 /*==========================================================
4530 **
4531 **
4532 **	Copy and rebind a script.
4533 **
4534 **
4535 **==========================================================
4536 */
4537 
4538 static void __init
ncr_script_copy_and_bind(ncb_p np,ncrcmd * src,ncrcmd * dst,int len)4539 ncr_script_copy_and_bind (ncb_p np,ncrcmd *src,ncrcmd *dst,int len)
4540 {
4541 	ncrcmd  opcode, new, old, tmp1, tmp2;
4542 	ncrcmd	*start, *end;
4543 	int relocs;
4544 	int opchanged = 0;
4545 
4546 	start = src;
4547 	end = src + len/4;
4548 
4549 	while (src < end) {
4550 
4551 		opcode = *src++;
4552 		*dst++ = cpu_to_scr(opcode);
4553 
4554 		/*
4555 		**	If we forget to change the length
4556 		**	in struct script, a field will be
4557 		**	padded with 0. This is an illegal
4558 		**	command.
4559 		*/
4560 
4561 		if (opcode == 0) {
4562 			printk (KERN_INFO "%s: ERROR0 IN SCRIPT at %d.\n",
4563 				ncr_name(np), (int) (src-start-1));
4564 			MDELAY (10000);
4565 			continue;
4566 		};
4567 
4568 		/*
4569 		**	We use the bogus value 0xf00ff00f ;-)
4570 		**	to reserve data area in SCRIPTS.
4571 		*/
4572 		if (opcode == SCR_DATA_ZERO) {
4573 			dst[-1] = 0;
4574 			continue;
4575 		}
4576 
4577 		if (DEBUG_FLAGS & DEBUG_SCRIPT)
4578 			printk (KERN_INFO "%p:  <%x>\n",
4579 				(src-1), (unsigned)opcode);
4580 
4581 		/*
4582 		**	We don't have to decode ALL commands
4583 		*/
4584 		switch (opcode >> 28) {
4585 
4586 		case 0xf:
4587 			/*
4588 			**	LOAD / STORE DSA relative, don't relocate.
4589 			*/
4590 			relocs = 0;
4591 			break;
4592 		case 0xe:
4593 			/*
4594 			**	LOAD / STORE absolute.
4595 			*/
4596 			relocs = 1;
4597 			break;
4598 		case 0xc:
4599 			/*
4600 			**	COPY has TWO arguments.
4601 			*/
4602 			relocs = 2;
4603 			tmp1 = src[0];
4604 			tmp2 = src[1];
4605 #ifdef	RELOC_KVAR
4606 			if ((tmp1 & RELOC_MASK) == RELOC_KVAR)
4607 				tmp1 = 0;
4608 			if ((tmp2 & RELOC_MASK) == RELOC_KVAR)
4609 				tmp2 = 0;
4610 #endif
4611 			if ((tmp1 ^ tmp2) & 3) {
4612 				printk (KERN_ERR"%s: ERROR1 IN SCRIPT at %d.\n",
4613 					ncr_name(np), (int) (src-start-1));
4614 				MDELAY (1000);
4615 			}
4616 			/*
4617 			**	If PREFETCH feature not enabled, remove
4618 			**	the NO FLUSH bit if present.
4619 			*/
4620 			if ((opcode & SCR_NO_FLUSH) &&
4621 			    !(np->features & FE_PFEN)) {
4622 				dst[-1] = cpu_to_scr(opcode & ~SCR_NO_FLUSH);
4623 				++opchanged;
4624 			}
4625 			break;
4626 
4627 		case 0x0:
4628 			/*
4629 			**	MOVE/CHMOV (absolute address)
4630 			*/
4631 			if (!(np->features & FE_WIDE))
4632 				dst[-1] = cpu_to_scr(opcode | OPC_MOVE);
4633 			relocs = 1;
4634 			break;
4635 
4636 		case 0x1:
4637 			/*
4638 			**	MOVE/CHMOV (table indirect)
4639 			*/
4640 			if (!(np->features & FE_WIDE))
4641 				dst[-1] = cpu_to_scr(opcode | OPC_MOVE);
4642 			relocs = 0;
4643 			break;
4644 
4645 		case 0x8:
4646 			/*
4647 			**	JUMP / CALL
4648 			**	dont't relocate if relative :-)
4649 			*/
4650 			if (opcode & 0x00800000)
4651 				relocs = 0;
4652 			else if ((opcode & 0xf8400000) == 0x80400000)/*JUMP64*/
4653 				relocs = 2;
4654 			else
4655 				relocs = 1;
4656 			break;
4657 
4658 		case 0x4:
4659 		case 0x5:
4660 		case 0x6:
4661 		case 0x7:
4662 			relocs = 1;
4663 			break;
4664 
4665 		default:
4666 			relocs = 0;
4667 			break;
4668 		};
4669 
4670 		if (!relocs) {
4671 			*dst++ = cpu_to_scr(*src++);
4672 			continue;
4673 		}
4674 		while (relocs--) {
4675 			old = *src++;
4676 
4677 			switch (old & RELOC_MASK) {
4678 			case RELOC_REGISTER:
4679 				new = (old & ~RELOC_MASK) + np->base_ba;
4680 				break;
4681 			case RELOC_LABEL:
4682 				new = (old & ~RELOC_MASK) + np->p_script;
4683 				break;
4684 			case RELOC_LABELH:
4685 				new = (old & ~RELOC_MASK) + np->p_scripth;
4686 				break;
4687 			case RELOC_SOFTC:
4688 				new = (old & ~RELOC_MASK) + np->p_ncb;
4689 				break;
4690 #ifdef	RELOC_KVAR
4691 			case RELOC_KVAR:
4692 				new=0;
4693 				if (((old & ~RELOC_MASK) < SCRIPT_KVAR_FIRST) ||
4694 				    ((old & ~RELOC_MASK) > SCRIPT_KVAR_LAST))
4695 					panic("ncr KVAR out of range");
4696 				new = vtobus(script_kvars[old & ~RELOC_MASK]);
4697 #endif
4698 				break;
4699 			case 0:
4700 				/* Don't relocate a 0 address. */
4701 				if (old == 0) {
4702 					new = old;
4703 					break;
4704 				}
4705 				/* fall through */
4706 			default:
4707 				new = 0;	/* For 'cc' not to complain */
4708 				panic("ncr_script_copy_and_bind: "
4709 				      "weird relocation %x\n", old);
4710 				break;
4711 			}
4712 
4713 			*dst++ = cpu_to_scr(new);
4714 		}
4715 	};
4716 }
4717 
4718 /*==========================================================
4719 **
4720 **
4721 **      Auto configuration:  attach and init a host adapter.
4722 **
4723 **
4724 **==========================================================
4725 */
4726 
4727 /*
4728 **	Linux host data structure.
4729 */
4730 
4731 struct host_data {
4732      struct ncb *ncb;
4733 };
4734 
4735 /*
4736 **	Print something which allows to retrieve the controler type, unit,
4737 **	target, lun concerned by a kernel message.
4738 */
4739 
PRINT_TARGET(ncb_p np,int target)4740 static void PRINT_TARGET(ncb_p np, int target)
4741 {
4742 	printk(KERN_INFO "%s-<%d,*>: ", ncr_name(np), target);
4743 }
4744 
PRINT_LUN(ncb_p np,int target,int lun)4745 static void PRINT_LUN(ncb_p np, int target, int lun)
4746 {
4747 	printk(KERN_INFO "%s-<%d,%d>: ", ncr_name(np), target, lun);
4748 }
4749 
PRINT_ADDR(Scsi_Cmnd * cmd)4750 static void PRINT_ADDR(Scsi_Cmnd *cmd)
4751 {
4752 	struct host_data *host_data = (struct host_data *) cmd->host->hostdata;
4753 	PRINT_LUN(host_data->ncb, cmd->target, cmd->lun);
4754 }
4755 
4756 /*==========================================================
4757 **
4758 **	NCR chip clock divisor table.
4759 **	Divisors are multiplied by 10,000,000 in order to make
4760 **	calculations more simple.
4761 **
4762 **==========================================================
4763 */
4764 
4765 #define _5M 5000000
4766 static u_long div_10M[] =
4767 	{2*_5M, 3*_5M, 4*_5M, 6*_5M, 8*_5M, 12*_5M, 16*_5M};
4768 
4769 
4770 /*===============================================================
4771 **
4772 **	Prepare io register values used by ncr_init() according
4773 **	to selected and supported features.
4774 **
4775 **	NCR/SYMBIOS chips allow burst lengths of 2, 4, 8, 16, 32, 64,
4776 **	128 transfers. All chips support at least 16 transfers bursts.
4777 **	The 825A, 875 and 895 chips support bursts of up to 128
4778 **	transfers and the 895A and 896 support bursts of up to 64
4779 **	transfers. All other chips support up to 16 transfers bursts.
4780 **
4781 **	For PCI 32 bit data transfers each transfer is a DWORD (4 bytes).
4782 **	It is a QUADWORD (8 bytes) for PCI 64 bit data transfers.
4783 **	Only the 896 is able to perform 64 bit data transfers.
4784 **
4785 **	We use log base 2 (burst length) as internal code, with
4786 **	value 0 meaning "burst disabled".
4787 **
4788 **===============================================================
4789 */
4790 
4791 /*
4792  *	Burst length from burst code.
4793  */
4794 #define burst_length(bc) (!(bc))? 0 : 1 << (bc)
4795 
4796 /*
4797  *	Burst code from io register bits.
4798  */
4799 #define burst_code(dmode, ctest4, ctest5) \
4800 	(ctest4) & 0x80? 0 : (((dmode) & 0xc0) >> 6) + ((ctest5) & 0x04) + 1
4801 
4802 /*
4803  *	Set initial io register bits from burst code.
4804  */
ncr_init_burst(ncb_p np,u_char bc)4805 static inline void ncr_init_burst(ncb_p np, u_char bc)
4806 {
4807 	np->rv_ctest4	&= ~0x80;
4808 	np->rv_dmode	&= ~(0x3 << 6);
4809 	np->rv_ctest5	&= ~0x4;
4810 
4811 	if (!bc) {
4812 		np->rv_ctest4	|= 0x80;
4813 	}
4814 	else {
4815 		--bc;
4816 		np->rv_dmode	|= ((bc & 0x3) << 6);
4817 		np->rv_ctest5	|= (bc & 0x4);
4818 	}
4819 }
4820 
4821 #ifdef SCSI_NCR_NVRAM_SUPPORT
4822 
4823 /*
4824 **	Get target set-up from Symbios format NVRAM.
4825 */
4826 
4827 static void __init
ncr_Symbios_setup_target(ncb_p np,int target,Symbios_nvram * nvram)4828 ncr_Symbios_setup_target(ncb_p np, int target, Symbios_nvram *nvram)
4829 {
4830 	tcb_p tp = &np->target[target];
4831 	Symbios_target *tn = &nvram->target[target];
4832 
4833 	tp->usrsync = tn->sync_period ? (tn->sync_period + 3) / 4 : 255;
4834 	tp->usrwide = tn->bus_width == 0x10 ? 1 : 0;
4835 	tp->usrtags =
4836 		(tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? MAX_TAGS : 0;
4837 
4838 	if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE))
4839 		tp->usrflag |= UF_NODISC;
4840 	if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME))
4841 		tp->usrflag |= UF_NOSCAN;
4842 }
4843 
4844 /*
4845 **	Get target set-up from Tekram format NVRAM.
4846 */
4847 
4848 static void __init
ncr_Tekram_setup_target(ncb_p np,int target,Tekram_nvram * nvram)4849 ncr_Tekram_setup_target(ncb_p np, int target, Tekram_nvram *nvram)
4850 {
4851 	tcb_p tp = &np->target[target];
4852 	struct Tekram_target *tn = &nvram->target[target];
4853 	int i;
4854 
4855 	if (tn->flags & TEKRAM_SYNC_NEGO) {
4856 		i = tn->sync_index & 0xf;
4857 		tp->usrsync = Tekram_sync[i];
4858 	}
4859 
4860 	tp->usrwide = (tn->flags & TEKRAM_WIDE_NEGO) ? 1 : 0;
4861 
4862 	if (tn->flags & TEKRAM_TAGGED_COMMANDS) {
4863 		tp->usrtags = 2 << nvram->max_tags_index;
4864 	}
4865 
4866 	if (!(tn->flags & TEKRAM_DISCONNECT_ENABLE))
4867 		tp->usrflag = UF_NODISC;
4868 
4869 	/* If any device does not support parity, we will not use this option */
4870 	if (!(tn->flags & TEKRAM_PARITY_CHECK))
4871 		np->rv_scntl0  &= ~0x0a; /* SCSI parity checking disabled */
4872 }
4873 #endif /* SCSI_NCR_NVRAM_SUPPORT */
4874 
4875 /*
4876 **	Save initial settings of some IO registers.
4877 **	Assumed to have been set by BIOS.
4878 */
ncr_save_initial_setting(ncb_p np)4879 static void __init ncr_save_initial_setting(ncb_p np)
4880 {
4881 	np->sv_scntl0	= INB(nc_scntl0) & 0x0a;
4882 	np->sv_dmode	= INB(nc_dmode)  & 0xce;
4883 	np->sv_dcntl	= INB(nc_dcntl)  & 0xa8;
4884 	np->sv_ctest3	= INB(nc_ctest3) & 0x01;
4885 	np->sv_ctest4	= INB(nc_ctest4) & 0x80;
4886 	np->sv_gpcntl	= INB(nc_gpcntl);
4887 	np->sv_stest2	= INB(nc_stest2) & 0x20;
4888 	np->sv_stest4	= INB(nc_stest4);
4889 	np->sv_stest1	= INB(nc_stest1);
4890 
4891  	np->sv_scntl3   = INB(nc_scntl3) & 0x07;
4892 
4893  	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
4894  	 	(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66) ){
4895  		/*
4896  		** C1010 always uses large fifo, bit 5 rsvd
4897  		** scntl4 used ONLY with C1010
4898  		*/
4899  		np->sv_ctest5 = INB(nc_ctest5) & 0x04 ;
4900  		np->sv_scntl4 = INB(nc_scntl4);
4901          }
4902          else {
4903  		np->sv_ctest5 = INB(nc_ctest5) & 0x24 ;
4904  		np->sv_scntl4 = 0;
4905          }
4906 }
4907 
4908 /*
4909 **	Prepare io register values used by ncr_init()
4910 **	according to selected and supported features.
4911 */
ncr_prepare_setting(ncb_p np,ncr_nvram * nvram)4912 static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram)
4913 {
4914 	u_char	burst_max;
4915 	u_long	period;
4916 	int i;
4917 
4918 	/*
4919 	**	Wide ?
4920 	*/
4921 
4922 	np->maxwide	= (np->features & FE_WIDE)? 1 : 0;
4923 
4924  	/*
4925 	 *  Guess the frequency of the chip's clock.
4926 	 */
4927 	if	(np->features & (FE_ULTRA3 | FE_ULTRA2))
4928 		np->clock_khz = 160000;
4929 	else if	(np->features & FE_ULTRA)
4930 		np->clock_khz = 80000;
4931 	else
4932 		np->clock_khz = 40000;
4933 
4934 	/*
4935 	 *  Get the clock multiplier factor.
4936  	 */
4937 	if	(np->features & FE_QUAD)
4938 		np->multiplier	= 4;
4939 	else if	(np->features & FE_DBLR)
4940 		np->multiplier	= 2;
4941 	else
4942 		np->multiplier	= 1;
4943 
4944 	/*
4945 	 *  Measure SCSI clock frequency for chips
4946 	 *  it may vary from assumed one.
4947 	 */
4948 	if (np->features & FE_VARCLK)
4949 		ncr_getclock(np, np->multiplier);
4950 
4951 	/*
4952 	 * Divisor to be used for async (timer pre-scaler).
4953 	 *
4954 	 * Note: For C1010 the async divisor is 2(8) if he
4955 	 * quadrupler is disabled (enabled).
4956 	 */
4957 
4958 	if ( (np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
4959 		(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
4960 
4961 		np->rv_scntl3 = 0;
4962 	}
4963 	else
4964 	{
4965 		i = np->clock_divn - 1;
4966 		while (--i >= 0) {
4967 			if (10ul * SCSI_NCR_MIN_ASYNC * np->clock_khz
4968 							> div_10M[i]) {
4969 				++i;
4970 				break;
4971 			}
4972 		}
4973 		np->rv_scntl3 = i+1;
4974 	}
4975 
4976 
4977 	/*
4978 	 * Save the ultra3 register for the C1010/C1010_66
4979 	 */
4980 
4981 	np->rv_scntl4 = np->sv_scntl4;
4982 
4983 	/*
4984 	 * Minimum synchronous period factor supported by the chip.
4985 	 * Btw, 'period' is in tenths of nanoseconds.
4986 	 */
4987 
4988 	period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
4989 	if	(period <= 250)		np->minsync = 10;
4990 	else if	(period <= 303)		np->minsync = 11;
4991 	else if	(period <= 500)		np->minsync = 12;
4992 	else				np->minsync = (period + 40 - 1) / 40;
4993 
4994 	/*
4995 	 * Fix up. If sync. factor is 10 (160000Khz clock) and chip
4996 	 * supports ultra3, then min. sync. period 12.5ns and the factor is 9
4997 	 * Also keep track of the maximum offset in ST mode which may differ
4998 	 * from the maximum offset in DT mode. For now hardcoded to 31.
4999 	 */
5000 
5001 	if (np->features & FE_ULTRA3) {
5002 		if (np->minsync == 10)
5003 			np->minsync = 9;
5004 		np->maxoffs_st = 31;
5005 	}
5006 	else
5007 		np->maxoffs_st = np->maxoffs;
5008 
5009 	/*
5010 	 * Check against chip SCSI standard support (SCSI-2,ULTRA,ULTRA2).
5011 	 *
5012 	 * Transfer period minimums: SCSI-1 200 (50); Fast 100 (25)
5013 	 *			Ultra 50 (12); Ultra2 (6); Ultra3 (3)
5014 	 */
5015 
5016 	if	(np->minsync < 25 && !(np->features & (FE_ULTRA|FE_ULTRA2|FE_ULTRA3)))
5017 		np->minsync = 25;
5018 	else if	(np->minsync < 12 && (np->features & FE_ULTRA))
5019 		np->minsync = 12;
5020 	else if	(np->minsync < 10 && (np->features & FE_ULTRA2))
5021 		np->minsync = 10;
5022 	else if	(np->minsync < 9 && (np->features & FE_ULTRA3))
5023 		np->minsync = 9;
5024 
5025 	/*
5026 	 * Maximum synchronous period factor supported by the chip.
5027 	 */
5028 
5029 	period = (11 * div_10M[np->clock_divn - 1]) / (4 * np->clock_khz);
5030 	np->maxsync = period > 2540 ? 254 : period / 10;
5031 
5032 	/*
5033 	**	64 bit (53C895A or 53C896) ?
5034 	*/
5035 	if (np->features & FE_DAC) {
5036 		if (np->features & FE_DAC_IN_USE)
5037 			np->rv_ccntl1	|= (XTIMOD | EXTIBMV);
5038 		else
5039 			np->rv_ccntl1	|= (DDAC);
5040 	}
5041 
5042 	/*
5043 	**	Phase mismatch handled by SCRIPTS (53C895A, 53C896 or C1010) ?
5044   	*/
5045 	if (np->features & FE_NOPM)
5046 		np->rv_ccntl0	|= (ENPMJ);
5047 
5048 	/*
5049 	**	Prepare initial value of other IO registers
5050 	*/
5051 #if defined SCSI_NCR_TRUST_BIOS_SETTING
5052 	np->rv_scntl0	= np->sv_scntl0;
5053 	np->rv_dmode	= np->sv_dmode;
5054 	np->rv_dcntl	= np->sv_dcntl;
5055 	np->rv_ctest3	= np->sv_ctest3;
5056 	np->rv_ctest4	= np->sv_ctest4;
5057 	np->rv_ctest5	= np->sv_ctest5;
5058 	burst_max	= burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
5059 #else
5060 
5061 	/*
5062 	**	Select burst length (dwords)
5063 	*/
5064 	burst_max	= driver_setup.burst_max;
5065 	if (burst_max == 255)
5066 		burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
5067 	if (burst_max > 7)
5068 		burst_max = 7;
5069 	if (burst_max > np->maxburst)
5070 		burst_max = np->maxburst;
5071 
5072 	/*
5073 	**	DEL 352 - 53C810 Rev x11 - Part Number 609-0392140 - ITEM 2.
5074 	**	This chip and the 860 Rev 1 may wrongly use PCI cache line
5075 	**	based transactions on LOAD/STORE instructions. So we have
5076 	**	to prevent these chips from using such PCI transactions in
5077 	**	this driver. The generic sym53c8xx driver that does not use
5078 	**	LOAD/STORE instructions does not need this work-around.
5079 	*/
5080 	if ((np->device_id == PCI_DEVICE_ID_NCR_53C810 &&
5081 	     np->revision_id >= 0x10 && np->revision_id <= 0x11) ||
5082 	    (np->device_id == PCI_DEVICE_ID_NCR_53C860 &&
5083 	     np->revision_id <= 0x1))
5084 		np->features &= ~(FE_WRIE|FE_ERL|FE_ERMP);
5085 
5086 	/*
5087 	**	DEL ? - 53C1010 Rev 1 - Part Number 609-0393638
5088 	**	64-bit Slave Cycles must be disabled.
5089 	*/
5090 	if ( ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) && (np->revision_id < 0x02) )
5091 		|| (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 ) )
5092 		np->rv_ccntl1  |=  0x10;
5093 
5094 	/*
5095 	**	Select all supported special features.
5096 	**	If we are using on-board RAM for scripts, prefetch (PFEN)
5097 	**	does not help, but burst op fetch (BOF) does.
5098 	**	Disabling PFEN makes sure BOF will be used.
5099 	*/
5100 	if (np->features & FE_ERL)
5101 		np->rv_dmode	|= ERL;		/* Enable Read Line */
5102 	if (np->features & FE_BOF)
5103 		np->rv_dmode	|= BOF;		/* Burst Opcode Fetch */
5104 	if (np->features & FE_ERMP)
5105 		np->rv_dmode	|= ERMP;	/* Enable Read Multiple */
5106 #if 1
5107 	if ((np->features & FE_PFEN) && !np->base2_ba)
5108 #else
5109 	if (np->features & FE_PFEN)
5110 #endif
5111 		np->rv_dcntl	|= PFEN;	/* Prefetch Enable */
5112 	if (np->features & FE_CLSE)
5113 		np->rv_dcntl	|= CLSE;	/* Cache Line Size Enable */
5114 	if (np->features & FE_WRIE)
5115 		np->rv_ctest3	|= WRIE;	/* Write and Invalidate */
5116 
5117 
5118 	if ( (np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
5119 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) &&
5120 			(np->features & FE_DFS))
5121 		np->rv_ctest5	|= DFS;		/* Dma Fifo Size */
5122 						/* C1010/C1010_66 always large fifo */
5123 
5124 	/*
5125 	**	Select some other
5126 	*/
5127 	if (driver_setup.master_parity)
5128 		np->rv_ctest4	|= MPEE;	/* Master parity checking */
5129 	if (driver_setup.scsi_parity)
5130 		np->rv_scntl0	|= 0x0a;	/*  full arb., ena parity, par->ATN  */
5131 
5132 #ifdef SCSI_NCR_NVRAM_SUPPORT
5133 	/*
5134 	**	Get parity checking, host ID and verbose mode from NVRAM
5135 	**/
5136 	if (nvram) {
5137 		switch(nvram->type) {
5138 		case SCSI_NCR_TEKRAM_NVRAM:
5139 			np->myaddr = nvram->data.Tekram.host_id & 0x0f;
5140 			break;
5141 		case SCSI_NCR_SYMBIOS_NVRAM:
5142 			if (!(nvram->data.Symbios.flags & SYMBIOS_PARITY_ENABLE))
5143 				np->rv_scntl0  &= ~0x0a;
5144 			np->myaddr = nvram->data.Symbios.host_id & 0x0f;
5145 			if (nvram->data.Symbios.flags & SYMBIOS_VERBOSE_MSGS)
5146 				np->verbose += 1;
5147 			break;
5148 		}
5149 	}
5150 #endif
5151 	/*
5152 	**  Get SCSI addr of host adapter (set by bios?).
5153 	*/
5154 	if (np->myaddr == 255) {
5155 		np->myaddr = INB(nc_scid) & 0x07;
5156 		if (!np->myaddr)
5157 			np->myaddr = SCSI_NCR_MYADDR;
5158 	}
5159 
5160 #endif /* SCSI_NCR_TRUST_BIOS_SETTING */
5161 
5162 	/*
5163 	 *	Prepare initial io register bits for burst length
5164 	 */
5165 	ncr_init_burst(np, burst_max);
5166 
5167 	/*
5168 	**	Set SCSI BUS mode.
5169 	**
5170 	**	- ULTRA2 chips (895/895A/896)
5171 	**	  and ULTRA 3 chips (1010) report the current
5172 	**	  BUS mode through the STEST4 IO register.
5173 	**	- For previous generation chips (825/825A/875),
5174 	**	  user has to tell us how to check against HVD,
5175 	**	  since a 100% safe algorithm is not possible.
5176 	*/
5177 	np->scsi_mode = SMODE_SE;
5178 	if	(np->features & (FE_ULTRA2 | FE_ULTRA3))
5179 		np->scsi_mode = (np->sv_stest4 & SMODE);
5180 	else if	(np->features & FE_DIFF) {
5181 		switch(driver_setup.diff_support) {
5182 		case 4:	/* Trust previous settings if present, then GPIO3 */
5183 			if (np->sv_scntl3) {
5184 				if (np->sv_stest2 & 0x20)
5185 					np->scsi_mode = SMODE_HVD;
5186 				break;
5187 			}
5188 		case 3:	/* SYMBIOS controllers report HVD through GPIO3 */
5189 			if (nvram && nvram->type != SCSI_NCR_SYMBIOS_NVRAM)
5190 				break;
5191 			if (INB(nc_gpreg) & 0x08)
5192 				break;
5193 		case 2:	/* Set HVD unconditionally */
5194 			np->scsi_mode = SMODE_HVD;
5195 		case 1:	/* Trust previous settings for HVD */
5196 			if (np->sv_stest2 & 0x20)
5197 				np->scsi_mode = SMODE_HVD;
5198 			break;
5199 		default:/* Don't care about HVD */
5200 			break;
5201 		}
5202 	}
5203 	if (np->scsi_mode == SMODE_HVD)
5204 		np->rv_stest2 |= 0x20;
5205 
5206 	/*
5207 	**	Set LED support from SCRIPTS.
5208 	**	Ignore this feature for boards known to use a
5209 	**	specific GPIO wiring and for the 895A or 896
5210 	**	that drive the LED directly.
5211 	**	Also probe initial setting of GPIO0 as output.
5212 	*/
5213 	if ((driver_setup.led_pin ||
5214 	     (nvram && nvram->type == SCSI_NCR_SYMBIOS_NVRAM)) &&
5215 	    !(np->features & FE_LEDC) && !(np->sv_gpcntl & 0x01))
5216 		np->features |= FE_LED0;
5217 
5218 	/*
5219 	**	Set irq mode.
5220 	*/
5221 	switch(driver_setup.irqm & 3) {
5222 	case 2:
5223 		np->rv_dcntl	|= IRQM;
5224 		break;
5225 	case 1:
5226 		np->rv_dcntl	|= (np->sv_dcntl & IRQM);
5227 		break;
5228 	default:
5229 		break;
5230 	}
5231 
5232 	/*
5233 	**	Configure targets according to driver setup.
5234 	**	If NVRAM present get targets setup from NVRAM.
5235 	**	Allow to override sync, wide and NOSCAN from
5236 	**	boot command line.
5237 	*/
5238 	for (i = 0 ; i < MAX_TARGET ; i++) {
5239 		tcb_p tp = &np->target[i];
5240 
5241 		tp->usrsync = 255;
5242 #ifdef SCSI_NCR_NVRAM_SUPPORT
5243 		if (nvram) {
5244 			switch(nvram->type) {
5245 			case SCSI_NCR_TEKRAM_NVRAM:
5246 				ncr_Tekram_setup_target(np, i, &nvram->data.Tekram);
5247 				break;
5248 			case SCSI_NCR_SYMBIOS_NVRAM:
5249 				ncr_Symbios_setup_target(np, i, &nvram->data.Symbios);
5250 				break;
5251 			}
5252 			if (driver_setup.use_nvram & 0x2)
5253 				tp->usrsync = driver_setup.default_sync;
5254 			if (driver_setup.use_nvram & 0x4)
5255 				tp->usrwide = driver_setup.max_wide;
5256 			if (driver_setup.use_nvram & 0x8)
5257 				tp->usrflag &= ~UF_NOSCAN;
5258 		}
5259 		else {
5260 #else
5261 		if (1) {
5262 #endif
5263 			tp->usrsync = driver_setup.default_sync;
5264 			tp->usrwide = driver_setup.max_wide;
5265 			tp->usrtags = MAX_TAGS;
5266 			if (!driver_setup.disconnection)
5267 				np->target[i].usrflag = UF_NODISC;
5268 		}
5269 	}
5270 
5271 	/*
5272 	**	Announce all that stuff to user.
5273 	*/
5274 
5275 	i = nvram ? nvram->type : 0;
5276 	printk(KERN_INFO "%s: %sID %d, Fast-%d%s%s\n", ncr_name(np),
5277 		i  == SCSI_NCR_SYMBIOS_NVRAM ? "Symbios format NVRAM, " :
5278 		(i == SCSI_NCR_TEKRAM_NVRAM  ? "Tekram format NVRAM, " : ""),
5279 		np->myaddr,
5280 		np->minsync < 10 ? 80 :
5281 			(np->minsync < 12 ? 40 : (np->minsync < 25 ? 20 : 10) ),
5282 		(np->rv_scntl0 & 0xa)	? ", Parity Checking"	: ", NO Parity",
5283 		(np->rv_stest2 & 0x20)	? ", Differential"	: "");
5284 
5285 	if (bootverbose > 1) {
5286 		printk (KERN_INFO "%s: initial SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
5287 			"(hex) %02x/%02x/%02x/%02x/%02x/%02x\n",
5288 			ncr_name(np), np->sv_scntl3, np->sv_dmode, np->sv_dcntl,
5289 			np->sv_ctest3, np->sv_ctest4, np->sv_ctest5);
5290 
5291 		printk (KERN_INFO "%s: final   SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
5292 			"(hex) %02x/%02x/%02x/%02x/%02x/%02x\n",
5293 			ncr_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl,
5294 			np->rv_ctest3, np->rv_ctest4, np->rv_ctest5);
5295 	}
5296 
5297 	if (bootverbose && np->base2_ba)
5298 		printk (KERN_INFO "%s: on-chip RAM at 0x%lx\n",
5299 			ncr_name(np), np->base2_ba);
5300 
5301 	return 0;
5302 }
5303 
5304 
5305 #ifdef SCSI_NCR_DEBUG_NVRAM
5306 
5307 void __init ncr_display_Symbios_nvram(ncb_p np, Symbios_nvram *nvram)
5308 {
5309 	int i;
5310 
5311 	/* display Symbios nvram host data */
5312 	printk(KERN_DEBUG "%s: HOST ID=%d%s%s%s%s%s\n",
5313 		ncr_name(np), nvram->host_id & 0x0f,
5314 		(nvram->flags  & SYMBIOS_SCAM_ENABLE)	? " SCAM"	:"",
5315 		(nvram->flags  & SYMBIOS_PARITY_ENABLE)	? " PARITY"	:"",
5316 		(nvram->flags  & SYMBIOS_VERBOSE_MSGS)	? " VERBOSE"	:"",
5317 		(nvram->flags  & SYMBIOS_CHS_MAPPING)	? " CHS_ALT"	:"",
5318 		(nvram->flags1 & SYMBIOS_SCAN_HI_LO)	? " HI_LO"	:"");
5319 
5320 	/* display Symbios nvram drive data */
5321 	for (i = 0 ; i < 15 ; i++) {
5322 		struct Symbios_target *tn = &nvram->target[i];
5323 		printk(KERN_DEBUG "%s-%d:%s%s%s%s WIDTH=%d SYNC=%d TMO=%d\n",
5324 		ncr_name(np), i,
5325 		(tn->flags & SYMBIOS_DISCONNECT_ENABLE)	? " DISC"	: "",
5326 		(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME)	? " SCAN_BOOT"	: "",
5327 		(tn->flags & SYMBIOS_SCAN_LUNS)		? " SCAN_LUNS"	: "",
5328 		(tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? " TCQ"	: "",
5329 		tn->bus_width,
5330 		tn->sync_period / 4,
5331 		tn->timeout);
5332 	}
5333 }
5334 
5335 static u_char Tekram_boot_delay[7] __initdata = {3, 5, 10, 20, 30, 60, 120};
5336 
5337 void __init ncr_display_Tekram_nvram(ncb_p np, Tekram_nvram *nvram)
5338 {
5339 	int i, tags, boot_delay;
5340 	char *rem;
5341 
5342 	/* display Tekram nvram host data */
5343 	tags = 2 << nvram->max_tags_index;
5344 	boot_delay = 0;
5345 	if (nvram->boot_delay_index < 6)
5346 		boot_delay = Tekram_boot_delay[nvram->boot_delay_index];
5347 	switch((nvram->flags & TEKRAM_REMOVABLE_FLAGS) >> 6) {
5348 	default:
5349 	case 0:	rem = "";			break;
5350 	case 1: rem = " REMOVABLE=boot device";	break;
5351 	case 2: rem = " REMOVABLE=all";		break;
5352 	}
5353 
5354 	printk(KERN_DEBUG
5355 		"%s: HOST ID=%d%s%s%s%s%s%s%s%s%s BOOT DELAY=%d tags=%d\n",
5356 		ncr_name(np), nvram->host_id & 0x0f,
5357 		(nvram->flags1 & SYMBIOS_SCAM_ENABLE)	? " SCAM"	:"",
5358 		(nvram->flags & TEKRAM_MORE_THAN_2_DRIVES) ? " >2DRIVES"	:"",
5359 		(nvram->flags & TEKRAM_DRIVES_SUP_1GB)	? " >1GB"	:"",
5360 		(nvram->flags & TEKRAM_RESET_ON_POWER_ON) ? " RESET"	:"",
5361 		(nvram->flags & TEKRAM_ACTIVE_NEGATION)	? " ACT_NEG"	:"",
5362 		(nvram->flags & TEKRAM_IMMEDIATE_SEEK)	? " IMM_SEEK"	:"",
5363 		(nvram->flags & TEKRAM_SCAN_LUNS)	? " SCAN_LUNS"	:"",
5364 		(nvram->flags1 & TEKRAM_F2_F6_ENABLED)	? " F2_F6"	:"",
5365 		rem, boot_delay, tags);
5366 
5367 	/* display Tekram nvram drive data */
5368 	for (i = 0; i <= 15; i++) {
5369 		int sync, j;
5370 		struct Tekram_target *tn = &nvram->target[i];
5371 		j = tn->sync_index & 0xf;
5372 		sync = Tekram_sync[j];
5373 		printk(KERN_DEBUG "%s-%d:%s%s%s%s%s%s PERIOD=%d\n",
5374 		ncr_name(np), i,
5375 		(tn->flags & TEKRAM_PARITY_CHECK)	? " PARITY"	: "",
5376 		(tn->flags & TEKRAM_SYNC_NEGO)		? " SYNC"	: "",
5377 		(tn->flags & TEKRAM_DISCONNECT_ENABLE)	? " DISC"	: "",
5378 		(tn->flags & TEKRAM_START_CMD)		? " START"	: "",
5379 		(tn->flags & TEKRAM_TAGGED_COMMANDS)	? " TCQ"	: "",
5380 		(tn->flags & TEKRAM_WIDE_NEGO)		? " WIDE"	: "",
5381 		sync);
5382 	}
5383 }
5384 #endif /* SCSI_NCR_DEBUG_NVRAM */
5385 
5386 /*
5387 **	Host attach and initialisations.
5388 **
5389 **	Allocate host data and ncb structure.
5390 **	Request IO region and remap MMIO region.
5391 **	Do chip initialization.
5392 **	If all is OK, install interrupt handling and
5393 **	start the timer daemon.
5394 */
5395 
5396 static int __init
5397 ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device)
5398 {
5399         struct host_data *host_data;
5400 	ncb_p np = 0;
5401         struct Scsi_Host *instance = 0;
5402 	u_long flags = 0;
5403 	ncr_nvram *nvram = device->nvram;
5404 	int i;
5405 
5406 	printk(KERN_INFO NAME53C "%s-%d: rev 0x%x on pci bus %d device %d function %d "
5407 #ifdef __sparc__
5408 		"irq %s\n",
5409 #else
5410 		"irq %d\n",
5411 #endif
5412 		device->chip.name, unit, device->chip.revision_id,
5413 		device->slot.bus, (device->slot.device_fn & 0xf8) >> 3,
5414 		device->slot.device_fn & 7,
5415 #ifdef __sparc__
5416 		__irq_itoa(device->slot.irq));
5417 #else
5418 		device->slot.irq);
5419 #endif
5420 
5421 	/*
5422 	**	Allocate host_data structure
5423 	*/
5424         if (!(instance = scsi_register(tpnt, sizeof(*host_data))))
5425 	        goto attach_error;
5426 	host_data = (struct host_data *) instance->hostdata;
5427 
5428 	/*
5429 	**	Allocate the host control block.
5430 	*/
5431 	np = __m_calloc_dma(device->pdev, sizeof(struct ncb), "NCB");
5432 	if (!np)
5433 		goto attach_error;
5434 	NCR_INIT_LOCK_NCB(np);
5435 	np->pdev  = device->pdev;
5436 	np->p_ncb = vtobus(np);
5437 	host_data->ncb = np;
5438 
5439 	/*
5440 	**	Store input informations in the host data structure.
5441 	*/
5442 	strncpy(np->chip_name, device->chip.name, sizeof(np->chip_name) - 1);
5443 	np->unit	= unit;
5444 	np->verbose	= driver_setup.verbose;
5445 	sprintf(np->inst_name, NAME53C "%s-%d", np->chip_name, np->unit);
5446 	np->device_id	= device->chip.device_id;
5447 	np->revision_id	= device->chip.revision_id;
5448 	np->bus		= device->slot.bus;
5449 	np->device_fn	= device->slot.device_fn;
5450 	np->features	= device->chip.features;
5451 	np->clock_divn	= device->chip.nr_divisor;
5452 	np->maxoffs	= device->chip.offset_max;
5453 	np->maxburst	= device->chip.burst_max;
5454 	np->myaddr	= device->host_id;
5455 
5456 	/*
5457 	**	Allocate the start queue.
5458 	*/
5459 	np->squeue = (ncrcmd *)
5460 		m_calloc_dma(sizeof(ncrcmd)*(MAX_START*2), "SQUEUE");
5461 	if (!np->squeue)
5462 		goto attach_error;
5463 	np->p_squeue = vtobus(np->squeue);
5464 
5465 	/*
5466 	**	Allocate the done queue.
5467 	*/
5468 	np->dqueue = (ncrcmd *)
5469 		m_calloc_dma(sizeof(ncrcmd)*(MAX_START*2), "DQUEUE");
5470 	if (!np->dqueue)
5471 		goto attach_error;
5472 
5473 	/*
5474 	**	Allocate the target bus address array.
5475 	*/
5476 	np->targtbl = (u_int32 *) m_calloc_dma(256, "TARGTBL");
5477 	if (!np->targtbl)
5478 		goto attach_error;
5479 
5480 	/*
5481 	**	Allocate SCRIPTS areas
5482 	*/
5483 	np->script0	= (struct script *)
5484 		m_calloc_dma(sizeof(struct script),  "SCRIPT");
5485 	if (!np->script0)
5486 		goto attach_error;
5487 	np->scripth0	= (struct scripth *)
5488 		m_calloc_dma(sizeof(struct scripth), "SCRIPTH");
5489 	if (!np->scripth0)
5490 		goto attach_error;
5491 
5492 	/*
5493 	**	Initialyze the CCB free queue and,
5494 	**	allocate some CCB. We need at least ONE.
5495 	*/
5496 	xpt_que_init(&np->free_ccbq);
5497 	xpt_que_init(&np->b0_ccbq);
5498 	if (!ncr_alloc_ccb(np))
5499 		goto attach_error;
5500 
5501 	/*
5502 	**    Initialize timer structure
5503         **
5504         */
5505 	init_timer(&np->timer);
5506 	np->timer.data     = (unsigned long) np;
5507 	np->timer.function = sym53c8xx_timeout;
5508 
5509 	/*
5510 	**	Try to map the controller chip to
5511 	**	virtual and physical memory.
5512 	*/
5513 
5514 	np->base_ba	= device->slot.base;
5515 	np->base_ws	= (np->features & FE_IO256)? 256 : 128;
5516 	np->base2_ba	= (np->features & FE_RAM)? device->slot.base_2 : 0;
5517 
5518 #ifndef SCSI_NCR_IOMAPPED
5519 	np->base_va = remap_pci_mem(device->slot.base_c, np->base_ws);
5520 	if (!np->base_va) {
5521 		printk(KERN_ERR "%s: can't map PCI MMIO region\n",ncr_name(np));
5522 		goto attach_error;
5523 	}
5524 	else if (bootverbose > 1)
5525 		printk(KERN_INFO "%s: using memory mapped IO\n", ncr_name(np));
5526 
5527 	/*
5528 	**	Make the controller's registers available.
5529 	**	Now the INB INW INL OUTB OUTW OUTL macros
5530 	**	can be used safely.
5531 	*/
5532 
5533 	np->reg = (struct ncr_reg *) np->base_va;
5534 
5535 #endif /* !defined SCSI_NCR_IOMAPPED */
5536 
5537 	/*
5538 	**	If on-chip RAM is used, make sure SCRIPTS isn't too large.
5539 	*/
5540 	if (np->base2_ba && sizeof(struct script) > 4096) {
5541 		printk(KERN_ERR "%s: script too large.\n", ncr_name(np));
5542 		goto attach_error;
5543 	}
5544 
5545 	/*
5546 	**	Try to map the controller chip into iospace.
5547 	*/
5548 
5549 	if (device->slot.io_port) {
5550 		request_region(device->slot.io_port, np->base_ws, NAME53C8XX);
5551 		np->base_io = device->slot.io_port;
5552 	}
5553 
5554 #ifdef SCSI_NCR_NVRAM_SUPPORT
5555 	if (nvram) {
5556 		switch(nvram->type) {
5557 		case SCSI_NCR_SYMBIOS_NVRAM:
5558 #ifdef SCSI_NCR_DEBUG_NVRAM
5559 			ncr_display_Symbios_nvram(np, &nvram->data.Symbios);
5560 #endif
5561 			break;
5562 		case SCSI_NCR_TEKRAM_NVRAM:
5563 #ifdef SCSI_NCR_DEBUG_NVRAM
5564 			ncr_display_Tekram_nvram(np, &nvram->data.Tekram);
5565 #endif
5566 			break;
5567 		default:
5568 			nvram = 0;
5569 #ifdef SCSI_NCR_DEBUG_NVRAM
5570 			printk(KERN_DEBUG "%s: NVRAM: None or invalid data.\n", ncr_name(np));
5571 #endif
5572 		}
5573 	}
5574 #endif
5575 
5576  	/*
5577 	**	Save setting of some IO registers, so we will
5578 	**	be able to probe specific implementations.
5579 	*/
5580 	ncr_save_initial_setting (np);
5581 
5582 	/*
5583 	**	Reset the chip now, since it has been reported
5584 	**	that SCSI clock calibration may not work properly
5585 	**	if the chip is currently active.
5586 	*/
5587 	ncr_chip_reset (np);
5588 
5589 	/*
5590 	**	Do chip dependent initialization.
5591 	*/
5592 	(void) ncr_prepare_setting(np, nvram);
5593 
5594 	/*
5595 	**	Check the PCI clock frequency if needed.
5596 	**
5597 	**	Must be done after ncr_prepare_setting since it destroys
5598 	**	STEST1 that is used to probe for the clock multiplier.
5599 	**
5600 	**	The range is currently [22688 - 45375 Khz], given
5601 	**	the values used by ncr_getclock().
5602 	**	This calibration of the frequecy measurement
5603 	**	algorithm against the PCI clock frequency is only
5604 	**	performed if the driver has had to measure the SCSI
5605 	**	clock due to other heuristics not having been enough
5606 	**	to deduce the SCSI clock frequency.
5607 	**
5608 	**	When the chip has been initialized correctly by the
5609 	**	SCSI BIOS, the driver deduces the presence of the
5610 	**	clock multiplier and the value of the SCSI clock from
5611 	**	initial values of IO registers, and therefore no
5612 	**	clock measurement is performed.
5613 	**	Normally the driver should never have to measure any
5614 	**	clock, unless the controller may use a 80 MHz clock
5615 	**	or has a clock multiplier and any of the following
5616 	**	condition is met:
5617 	**
5618 	**	- No SCSI BIOS is present.
5619 	**	- SCSI BIOS did'nt enable the multiplier for some reason.
5620 	**	- User has disabled the controller from the SCSI BIOS.
5621 	**	- User booted the O/S from another O/S that did'nt enable
5622 	**	  the multiplier for some reason.
5623 	**
5624 	**	As a result, the driver may only have to measure some
5625 	**	frequency in very unusual situations.
5626 	**
5627 	**	For this reality test against the PCI clock to really
5628 	**	protect against flaws in the udelay() calibration or
5629 	**	driver problem that affect the clock measurement
5630 	**	algorithm, the actual PCI clock frequency must be 33 MHz.
5631 	*/
5632 	i = np->pciclock_max ? ncr_getpciclock(np) : 0;
5633 	if (i && (i < np->pciclock_min  || i > np->pciclock_max)) {
5634 		printk(KERN_ERR "%s: PCI clock (%u KHz) is out of range "
5635 			"[%u KHz - %u KHz].\n",
5636 		       ncr_name(np), i, np->pciclock_min, np->pciclock_max);
5637 		goto attach_error;
5638 	}
5639 
5640 	/*
5641 	**	Patch script to physical addresses
5642 	*/
5643 	ncr_script_fill (&script0, &scripth0);
5644 
5645 	np->p_script	= vtobus(np->script0);
5646 	np->p_scripth	= vtobus(np->scripth0);
5647 	np->p_scripth0	= np->p_scripth;
5648 
5649 	if (np->base2_ba) {
5650 		np->p_script	= np->base2_ba;
5651 		if (np->features & FE_RAM8K) {
5652 			np->base2_ws = 8192;
5653 			np->p_scripth = np->p_script + 4096;
5654 #if BITS_PER_LONG > 32
5655 			np->scr_ram_seg = cpu_to_scr(np->base2_ba >> 32);
5656 #endif
5657 		}
5658 		else
5659 			np->base2_ws = 4096;
5660 #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
5661 		np->base2_va =
5662 			remap_pci_mem(device->slot.base_2_c, np->base2_ws);
5663 		if (!np->base2_va) {
5664 			printk(KERN_ERR "%s: can't map PCI MEMORY region\n",
5665 			       ncr_name(np));
5666 			goto attach_error;
5667 		}
5668 #endif
5669 	}
5670 
5671 	ncr_script_copy_and_bind (np, (ncrcmd *) &script0, (ncrcmd *) np->script0, sizeof(struct script));
5672 	ncr_script_copy_and_bind (np, (ncrcmd *) &scripth0, (ncrcmd *) np->scripth0, sizeof(struct scripth));
5673 
5674 	/*
5675 	**	Patch some variables in SCRIPTS
5676 	*/
5677 	np->scripth0->pm0_data_addr[0] =
5678 			cpu_to_scr(NCB_SCRIPT_PHYS(np, pm0_data));
5679 	np->scripth0->pm1_data_addr[0] =
5680 			cpu_to_scr(NCB_SCRIPT_PHYS(np, pm1_data));
5681 
5682 	/*
5683 	**	Patch if not Ultra 3 - Do not write to scntl4
5684 	*/
5685 	if (np->features & FE_ULTRA3) {
5686 		np->script0->resel_scntl4[0] = cpu_to_scr(SCR_LOAD_REL (scntl4, 1));
5687 		np->script0->resel_scntl4[1] = cpu_to_scr(offsetof(struct tcb, uval));
5688 	}
5689 
5690 
5691 #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
5692 	np->scripth0->script0_ba[0]	= cpu_to_scr(vtobus(np->script0));
5693 	np->scripth0->script0_ba64[0]	= cpu_to_scr(vtobus(np->script0));
5694 	np->scripth0->scripth0_ba64[0]	= cpu_to_scr(vtobus(np->scripth0));
5695 	np->scripth0->ram_seg64[0]	= np->scr_ram_seg;
5696 #endif
5697 	/*
5698 	**	Prepare the idle and invalid task actions.
5699 	*/
5700 	np->idletask.start	= cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
5701 	np->idletask.restart	= cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
5702 	np->p_idletask		= NCB_PHYS(np, idletask);
5703 
5704 	np->notask.start	= cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
5705 	np->notask.restart	= cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
5706 	np->p_notask		= NCB_PHYS(np, notask);
5707 
5708 	np->bad_i_t_l.start	= cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
5709 	np->bad_i_t_l.restart	= cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l));
5710 	np->p_bad_i_t_l		= NCB_PHYS(np, bad_i_t_l);
5711 
5712 	np->bad_i_t_l_q.start	= cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
5713 	np->bad_i_t_l_q.restart	= cpu_to_scr(NCB_SCRIPTH_PHYS (np,bad_i_t_l_q));
5714 	np->p_bad_i_t_l_q	= NCB_PHYS(np, bad_i_t_l_q);
5715 
5716 	/*
5717 	**	Allocate and prepare the bad lun table.
5718 	*/
5719 	np->badluntbl = m_calloc_dma(256, "BADLUNTBL");
5720 	if (!np->badluntbl)
5721 		goto attach_error;
5722 
5723 	assert (offsetof(struct lcb, resel_task) == 0);
5724 	np->resel_badlun = cpu_to_scr(NCB_SCRIPTH_PHYS(np, resel_bad_lun));
5725 
5726 	for (i = 0 ; i < 64 ; i++)
5727 		np->badluntbl[i] = cpu_to_scr(NCB_PHYS(np, resel_badlun));
5728 
5729 	/*
5730 	**	Prepare the target bus address array.
5731 	*/
5732 	np->scripth0->targtbl[0] = cpu_to_scr(vtobus(np->targtbl));
5733 	for (i = 0 ; i < MAX_TARGET ; i++) {
5734 		np->targtbl[i] = cpu_to_scr(NCB_PHYS(np, target[i]));
5735 		np->target[i].b_luntbl = cpu_to_scr(vtobus(np->badluntbl));
5736 		np->target[i].b_lun0   = cpu_to_scr(NCB_PHYS(np, resel_badlun));
5737 	}
5738 
5739 	/*
5740 	**    Patch the script for LED support.
5741 	*/
5742 
5743 	if (np->features & FE_LED0) {
5744 		np->script0->idle[0]  =
5745 				cpu_to_scr(SCR_REG_REG(gpreg, SCR_OR,  0x01));
5746 		np->script0->reselected[0] =
5747 				cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
5748 		np->script0->start[0] =
5749 				cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
5750 	}
5751 
5752 	/*
5753 	**	Patch the script to provide an extra clock cycle on
5754 	**	data out phase - 53C1010_66MHz part only.
5755 	**	(Fixed in rev. 1 of the chip)
5756 	*/
5757 	if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 &&
5758 	    np->revision_id < 1){
5759 		np->script0->datao_phase[0] =
5760 				cpu_to_scr(SCR_REG_REG(scntl4, SCR_OR, 0x0c));
5761 	}
5762 
5763 #ifdef SCSI_NCR_IARB_SUPPORT
5764 	/*
5765 	**    If user does not want to use IMMEDIATE ARBITRATION
5766 	**    when we are reselected while attempting to arbitrate,
5767 	**    patch the SCRIPTS accordingly with a SCRIPT NO_OP.
5768 	*/
5769 	if (!(driver_setup.iarb & 1))
5770 		np->script0->ungetjob[0] = cpu_to_scr(SCR_NO_OP);
5771 	/*
5772 	**    If user wants IARB to be set when we win arbitration
5773 	**    and have other jobs, compute the max number of consecutive
5774 	**    settings of IARB hint before we leave devices a chance to
5775 	**    arbitrate for reselection.
5776 	*/
5777 	np->iarb_max = (driver_setup.iarb >> 4);
5778 #endif
5779 
5780 	/*
5781 	**	DEL 472 - 53C896 Rev 1 - Part Number 609-0393055 - ITEM 5.
5782 	*/
5783 	if (np->device_id == PCI_DEVICE_ID_NCR_53C896 &&
5784 	    np->revision_id <= 0x1 && (np->features & FE_NOPM)) {
5785 		np->scatter = ncr_scatter_896R1;
5786 		np->script0->datai_phase[0] = cpu_to_scr(SCR_JUMP);
5787 		np->script0->datai_phase[1] =
5788 				cpu_to_scr(NCB_SCRIPTH_PHYS (np, tweak_pmj));
5789 		np->script0->datao_phase[0] = cpu_to_scr(SCR_JUMP);
5790 		np->script0->datao_phase[1] =
5791 				cpu_to_scr(NCB_SCRIPTH_PHYS (np, tweak_pmj));
5792 	}
5793 	else
5794 #ifdef DEBUG_896R1
5795 		np->scatter = ncr_scatter_896R1;
5796 #else
5797 		np->scatter = ncr_scatter;
5798 #endif
5799 
5800 	/*
5801 	**	Reset chip.
5802 	**	We should use ncr_soft_reset(), but we donnot want to do
5803 	**	so, since we may not be safe if ABRT interrupt occurs due
5804 	**	to the BIOS or previous O/S having enable this interrupt.
5805 	**
5806 	**	For C1010 need to set ABRT bit prior to SRST if SCRIPTs
5807 	**	are running. Not true in this case.
5808 	*/
5809 	ncr_chip_reset(np);
5810 
5811 	/*
5812 	**	Now check the cache handling of the pci chipset.
5813 	*/
5814 
5815 	if (ncr_snooptest (np)) {
5816 		printk (KERN_ERR "CACHE INCORRECTLY CONFIGURED.\n");
5817 		goto attach_error;
5818 	};
5819 
5820 	/*
5821 	**	Install the interrupt handler.
5822 	**	If we synchonize the C code with SCRIPTS on interrupt,
5823 	**	we donnot want to share the INTR line at all.
5824 	*/
5825 	if (request_irq(device->slot.irq, sym53c8xx_intr,
5826 #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
5827 			((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
5828 #else
5829 			((driver_setup.irqm & 0x10) ? 0 : SA_SHIRQ) |
5830 #if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
5831 			((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
5832 #else
5833 			0,
5834 #endif
5835 #endif
5836 			NAME53C8XX, np)) {
5837 		printk(KERN_ERR "%s: request irq %d failure\n",
5838 			ncr_name(np), device->slot.irq);
5839 		goto attach_error;
5840 	}
5841 	np->irq = device->slot.irq;
5842 
5843 	/*
5844 	**	After SCSI devices have been opened, we cannot
5845 	**	reset the bus safely, so we do it here.
5846 	**	Interrupt handler does the real work.
5847 	**	Process the reset exception,
5848 	**	if interrupts are not enabled yet.
5849 	**	Then enable disconnects.
5850 	*/
5851 	NCR_LOCK_NCB(np, flags);
5852 	if (ncr_reset_scsi_bus(np, 0, driver_setup.settle_delay) != 0) {
5853 		printk(KERN_ERR "%s: FATAL ERROR: CHECK SCSI BUS - CABLES, TERMINATION, DEVICE POWER etc.!\n", ncr_name(np));
5854 
5855 		NCR_UNLOCK_NCB(np, flags);
5856 		goto attach_error;
5857 	}
5858 	ncr_exception (np);
5859 
5860 	/*
5861 	**	The middle-level SCSI driver does not
5862 	**	wait for devices to settle.
5863 	**	Wait synchronously if more than 2 seconds.
5864 	*/
5865 	if (driver_setup.settle_delay > 2) {
5866 		printk(KERN_INFO "%s: waiting %d seconds for scsi devices to settle...\n",
5867 			ncr_name(np), driver_setup.settle_delay);
5868 		MDELAY (1000 * driver_setup.settle_delay);
5869 	}
5870 
5871 	/*
5872 	**	start the timeout daemon
5873 	*/
5874 	np->lasttime=0;
5875 	ncr_timeout (np);
5876 
5877 	/*
5878 	**  use SIMPLE TAG messages by default
5879 	*/
5880 #ifdef SCSI_NCR_ALWAYS_SIMPLE_TAG
5881 	np->order = M_SIMPLE_TAG;
5882 #endif
5883 
5884 	/*
5885 	**  Done.
5886 	*/
5887         if (!first_host)
5888         	first_host = instance;
5889 
5890 	/*
5891 	**	Fill Linux host instance structure
5892 	**	and return success.
5893 	*/
5894 	instance->max_channel	= 0;
5895 	instance->this_id	= np->myaddr;
5896 	instance->max_id	= np->maxwide ? 16 : 8;
5897 	instance->max_lun	= MAX_LUN;
5898 #ifndef SCSI_NCR_IOMAPPED
5899 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,29)
5900 	instance->base		= (unsigned long) np->reg;
5901 #else
5902 	instance->base		= (char *) np->reg;
5903 #endif
5904 #endif
5905 	instance->irq		= np->irq;
5906 	instance->unique_id	= np->base_io;
5907 	instance->io_port	= np->base_io;
5908 	instance->n_io_port	= np->base_ws;
5909 	instance->dma_channel	= 0;
5910 	instance->cmd_per_lun	= MAX_TAGS;
5911 	instance->can_queue	= (MAX_START-4);
5912 	scsi_set_pci_device(instance, device->pdev);
5913 
5914 	np->check_integrity       = 0;
5915 
5916 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
5917 	instance->check_integrity = 0;
5918 
5919 #ifdef SCSI_NCR_ENABLE_INTEGRITY_CHECK
5920 	if ( !(driver_setup.bus_check & 0x04) ) {
5921 		np->check_integrity       = 1;
5922 		instance->check_integrity = 1;
5923 	}
5924 #endif
5925 #endif
5926 
5927 	instance->select_queue_depths = sym53c8xx_select_queue_depths;
5928 
5929 	NCR_UNLOCK_NCB(np, flags);
5930 
5931 	/*
5932 	**	Now let the generic SCSI driver
5933 	**	look for the SCSI devices on the bus ..
5934 	*/
5935 	return 0;
5936 
5937 attach_error:
5938 	if (!instance) return -1;
5939 	printk(KERN_INFO "%s: giving up ...\n", ncr_name(np));
5940 	if (np)
5941 		ncr_free_resources(np);
5942 	scsi_unregister(instance);
5943 
5944         return -1;
5945  }
5946 
5947 
5948 /*
5949 **	Free controller resources.
5950 */
5951 static void ncr_free_resources(ncb_p np)
5952 {
5953 	ccb_p cp;
5954 	tcb_p tp;
5955 	lcb_p lp;
5956 	int target, lun;
5957 
5958 	if (np->irq)
5959 		free_irq(np->irq, np);
5960 	if (np->base_io)
5961 		release_region(np->base_io, np->base_ws);
5962 #ifndef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
5963 	if (np->base_va)
5964 		unmap_pci_mem(np->base_va, np->base_ws);
5965 	if (np->base2_va)
5966 		unmap_pci_mem(np->base2_va, np->base2_ws);
5967 #endif
5968 	if (np->scripth0)
5969 		m_free_dma(np->scripth0, sizeof(struct scripth), "SCRIPTH");
5970 	if (np->script0)
5971 		m_free_dma(np->script0, sizeof(struct script), "SCRIPT");
5972 	if (np->squeue)
5973 		m_free_dma(np->squeue, sizeof(ncrcmd)*(MAX_START*2), "SQUEUE");
5974 	if (np->dqueue)
5975 		m_free_dma(np->dqueue, sizeof(ncrcmd)*(MAX_START*2),"DQUEUE");
5976 
5977 	while ((cp = np->ccbc) != NULL) {
5978 		np->ccbc = cp->link_ccb;
5979 		m_free_dma(cp, sizeof(*cp), "CCB");
5980 	}
5981 
5982 	if (np->badluntbl)
5983 		m_free_dma(np->badluntbl, 256,"BADLUNTBL");
5984 
5985 	for (target = 0; target < MAX_TARGET ; target++) {
5986 		tp = &np->target[target];
5987 		for (lun = 0 ; lun < MAX_LUN ; lun++) {
5988 			lp = ncr_lp(np, tp, lun);
5989 			if (!lp)
5990 				continue;
5991 			if (lp->tasktbl != &lp->tasktbl_0)
5992 				m_free_dma(lp->tasktbl, MAX_TASKS*4, "TASKTBL");
5993 			if (lp->cb_tags)
5994 				m_free(lp->cb_tags, MAX_TAGS, "CB_TAGS");
5995 			m_free_dma(lp, sizeof(*lp), "LCB");
5996 		}
5997 #if MAX_LUN > 1
5998 		if (tp->lmp)
5999 			m_free(tp->lmp, MAX_LUN * sizeof(lcb_p), "LMP");
6000 		if (tp->luntbl)
6001 			m_free_dma(tp->luntbl, 256, "LUNTBL");
6002 #endif
6003 	}
6004 
6005 	if (np->targtbl)
6006 		m_free_dma(np->targtbl, 256, "TARGTBL");
6007 
6008 	m_free_dma(np, sizeof(*np), "NCB");
6009 }
6010 
6011 
6012 /*==========================================================
6013 **
6014 **
6015 **	Done SCSI commands list management.
6016 **
6017 **	We donnot enter the scsi_done() callback immediately
6018 **	after a command has been seen as completed but we
6019 **	insert it into a list which is flushed outside any kind
6020 **	of driver critical section.
6021 **	This allows to do minimal stuff under interrupt and
6022 **	inside critical sections and to also avoid locking up
6023 **	on recursive calls to driver entry points under SMP.
6024 **	In fact, the only kernel point which is entered by the
6025 **	driver with a driver lock set is get_free_pages(GFP_ATOMIC...)
6026 **	that shall not reenter the driver under any circumstance.
6027 **
6028 **==========================================================
6029 */
6030 static inline void ncr_queue_done_cmd(ncb_p np, Scsi_Cmnd *cmd)
6031 {
6032 	unmap_scsi_data(np, cmd);
6033 	cmd->host_scribble = (char *) np->done_list;
6034 	np->done_list = cmd;
6035 }
6036 
6037 static inline void ncr_flush_done_cmds(Scsi_Cmnd *lcmd)
6038 {
6039 	Scsi_Cmnd *cmd;
6040 
6041 	while (lcmd) {
6042 		cmd = lcmd;
6043 		lcmd = (Scsi_Cmnd *) cmd->host_scribble;
6044 		cmd->scsi_done(cmd);
6045 	}
6046 }
6047 
6048 /*==========================================================
6049 **
6050 **
6051 **	Prepare the next negotiation message for integrity check,
6052 **	if needed.
6053 **
6054 **	Fill in the part of message buffer that contains the
6055 **	negotiation and the nego_status field of the CCB.
6056 **	Returns the size of the message in bytes.
6057 **
6058 **	If tp->ppr_negotiation is 1 and a M_REJECT occurs, then
6059 **	we disable ppr_negotiation.  If the first ppr_negotiation is
6060 **	successful, set this flag to 2.
6061 **
6062 **==========================================================
6063 */
6064 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
6065 static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr)
6066 {
6067 	tcb_p tp = &np->target[cp->target];
6068 	int msglen = 0;
6069 	int nego = 0;
6070 	u_char new_width, new_offset, new_period;
6071 	u_char no_increase;
6072 
6073 	if (tp->ppr_negotiation == 1)	/* PPR message successful */
6074 		tp->ppr_negotiation = 2;
6075 
6076 	if (tp->inq_done) {
6077 
6078 		if (!tp->ic_maximums_set) {
6079 			tp->ic_maximums_set = 1;
6080 
6081 			/*
6082 			 * Check against target, host and user limits
6083 			 */
6084 			if ( (tp->inq_byte7 & INQ7_WIDE16) &&
6085 					np->maxwide  && tp->usrwide)
6086 				tp->ic_max_width = 1;
6087 			else
6088 				tp->ic_max_width = 0;
6089 
6090 
6091 			if ((tp->inq_byte7 & INQ7_SYNC) && tp->maxoffs)
6092 				tp->ic_min_sync = (tp->minsync < np->minsync) ?
6093 							np->minsync : tp->minsync;
6094 			else
6095 				tp->ic_min_sync = 255;
6096 
6097 			tp->period   = 1;
6098 			tp->widedone = 1;
6099 
6100 			/*
6101 			 * Enable PPR negotiation - only if Ultra3 support
6102 			 * is accessible.
6103 			 */
6104 
6105 #if 0
6106 			if (tp->ic_max_width && (tp->ic_min_sync != 255 ))
6107 				tp->ppr_negotiation = 1;
6108 #endif
6109 			tp->ppr_negotiation = 0;
6110 			if (np->features & FE_ULTRA3) {
6111 			    if (tp->ic_max_width && (tp->ic_min_sync == 0x09))
6112 				tp->ppr_negotiation = 1;
6113 			}
6114 
6115 			if (!tp->ppr_negotiation)
6116 				cmd->ic_nego &= ~NS_PPR;
6117 		}
6118 
6119 		if (DEBUG_FLAGS & DEBUG_IC) {
6120 			printk("%s: cmd->ic_nego %d, 1st byte 0x%2X\n",
6121 				ncr_name(np), cmd->ic_nego, cmd->cmnd[0]);
6122 		}
6123 
6124 		/* Previous command recorded a parity or an initiator
6125 		 * detected error condition. Force bus to narrow for this
6126 		 * target. Clear flag. Negotation on request sense.
6127 		 * Note: kernel forces 2 bus resets :o( but clears itself out.
6128 		 * Minor bug? in scsi_obsolete.c (ugly)
6129 		 */
6130 		if (np->check_integ_par) {
6131 			printk("%s: Parity Error. Target set to narrow.\n",
6132 				ncr_name(np));
6133 			tp->ic_max_width = 0;
6134 			tp->widedone = tp->period = 0;
6135 		}
6136 
6137 		/* Initializing:
6138 		 * If ic_nego == NS_PPR, we are in the initial test for
6139 		 * PPR messaging support. If driver flag is clear, then
6140 		 * either we don't support PPR nego (narrow or async device)
6141 		 * or this is the second TUR and we have had a M. REJECT
6142 		 * or unexpected disconnect on the first PPR negotiation.
6143 		 * Do not negotiate, reset nego flags (in case a reset has
6144 		 * occurred), clear ic_nego and return.
6145 		 * General case: Kernel will clear flag on a fallback.
6146 		 * Do only SDTR or WDTR in the future.
6147 		 */
6148                 if (!tp->ppr_negotiation &&  (cmd->ic_nego == NS_PPR )) {
6149 			tp->ppr_negotiation = 0;
6150 			cmd->ic_nego &= ~NS_PPR;
6151 			tp->widedone = tp->period = 1;
6152 			return msglen;
6153 		}
6154 		else if (( tp->ppr_negotiation && !(cmd->ic_nego & NS_PPR )) ||
6155                         (!tp->ppr_negotiation &&  (cmd->ic_nego & NS_PPR )) ) {
6156 			tp->ppr_negotiation = 0;
6157 			cmd->ic_nego &= ~NS_PPR;
6158 		}
6159 
6160 		/*
6161 		 * Always check the PPR nego. flag bit if ppr_negotiation
6162 		 * is set.  If the ic_nego PPR bit is clear,
6163 		 * there must have been a fallback. Do only
6164 		 * WDTR / SDTR in the future.
6165 		 */
6166 		if ((tp->ppr_negotiation) && (!(cmd->ic_nego & NS_PPR)))
6167 			tp->ppr_negotiation = 0;
6168 
6169 		/* In case of a bus reset, ncr_negotiate will reset
6170                  * the flags tp->widedone and tp->period to 0, forcing
6171 		 * a new negotiation.  Do WDTR then SDTR. If PPR, do both.
6172 		 * Do NOT increase the period.  It is possible for the Scsi_Cmnd
6173 		 * flags to be set to increase the period when a bus reset
6174 		 * occurs - we don't want to change anything.
6175 		 */
6176 
6177 		no_increase = 0;
6178 
6179 		if (tp->ppr_negotiation && (!tp->widedone) && (!tp->period) ) {
6180 			cmd->ic_nego = NS_PPR;
6181 			tp->widedone = tp->period = 1;
6182 			no_increase = 1;
6183 		}
6184 		else if (!tp->widedone) {
6185 			cmd->ic_nego = NS_WIDE;
6186 			tp->widedone = 1;
6187 			no_increase = 1;
6188 		}
6189 		else if (!tp->period) {
6190 			cmd->ic_nego = NS_SYNC;
6191 			tp->period = 1;
6192 			no_increase = 1;
6193 		}
6194 
6195 		new_width = cmd->ic_nego_width & tp->ic_max_width;
6196 
6197 		switch (cmd->ic_nego_sync) {
6198 		case 2: /* increase the period */
6199 			if (!no_increase) {
6200 			    if (tp->ic_min_sync <= 0x09)
6201 				tp->ic_min_sync = 0x0A;
6202 			    else if (tp->ic_min_sync <= 0x0A)
6203 				tp->ic_min_sync = 0x0C;
6204 			    else if (tp->ic_min_sync <= 0x0C)
6205 				tp->ic_min_sync = 0x19;
6206 			    else if (tp->ic_min_sync <= 0x19)
6207 				tp->ic_min_sync *= 2;
6208 			    else  {
6209 				tp->ic_min_sync = 255;
6210 				cmd->ic_nego_sync = 0;
6211 				tp->maxoffs = 0;
6212 			    }
6213 			}
6214 			new_period  = tp->maxoffs?tp->ic_min_sync:0;
6215 			new_offset  = tp->maxoffs;
6216 			break;
6217 
6218 		case 1: /* nego. to maximum */
6219 			new_period  = tp->maxoffs?tp->ic_min_sync:0;
6220 			new_offset  = tp->maxoffs;
6221 			break;
6222 
6223 		case 0:	/* nego to async */
6224 		default:
6225 			new_period = 0;
6226 			new_offset = 0;
6227 			break;
6228 		};
6229 
6230 
6231 		nego = NS_NOCHANGE;
6232 		if (tp->ppr_negotiation) {
6233 			u_char options_byte = 0;
6234 
6235 			/*
6236 			** Must make sure data is consistent.
6237 			** If period is 9 and sync, must be wide and DT bit set.
6238 			** else period must be larger. If the width is 0,
6239 			** reset bus to wide but increase the period to 0x0A.
6240 			** Note: The strange else clause is due to the integrity check.
6241 			** If fails at 0x09, wide, the I.C. code will redo at the same
6242 			** speed but a narrow bus. The driver must take care of slowing
6243 			** the bus speed down.
6244 			**
6245 			** The maximum offset in ST mode is 31, in DT mode 62 (1010/1010_66 only)
6246 			*/
6247 			if ( (new_period==0x09) && new_offset) {
6248 				if (new_width)
6249 					options_byte = 0x02;
6250 				else {
6251 					tp->ic_min_sync = 0x0A;
6252 					new_period = 0x0A;
6253 					cmd->ic_nego_width = 1;
6254 					new_width = 1;
6255 				}
6256 			}
6257 			if (!options_byte && new_offset > np->maxoffs_st)
6258 				new_offset = np->maxoffs_st;
6259 
6260 			nego = NS_PPR;
6261 
6262 			msgptr[msglen++] = M_EXTENDED;
6263 			msgptr[msglen++] = 6;
6264 			msgptr[msglen++] = M_X_PPR_REQ;
6265 			msgptr[msglen++] = new_period;
6266 			msgptr[msglen++] = 0;
6267 			msgptr[msglen++] = new_offset;
6268 			msgptr[msglen++] = new_width;
6269 			msgptr[msglen++] = options_byte;
6270 
6271 		}
6272 		else {
6273 			switch (cmd->ic_nego & ~NS_PPR) {
6274 			case NS_WIDE:
6275 			    /*
6276 			    **	WDTR negotiation on if device supports
6277 			    **  wide or if wide device forced narrow
6278 			    **	due to a parity error.
6279 			    */
6280 
6281 			    cmd->ic_nego_width &= tp->ic_max_width;
6282 
6283 			    if (tp->ic_max_width | np->check_integ_par) {
6284 				nego = NS_WIDE;
6285 				msgptr[msglen++] = M_EXTENDED;
6286 				msgptr[msglen++] = 2;
6287 				msgptr[msglen++] = M_X_WIDE_REQ;
6288 				msgptr[msglen++] = new_width;
6289 			    }
6290 		 	    break;
6291 
6292 			case NS_SYNC:
6293 			    /*
6294 			    **	negotiate synchronous transfers
6295 			    **	Target must support sync transfers.
6296 			    **  Min. period = 0x0A, maximum offset of 31=0x1f.
6297 		    	    */
6298 
6299 			    if (tp->inq_byte7 & INQ7_SYNC) {
6300 
6301 				if (new_offset && (new_period < 0x0A)) {
6302 					tp->ic_min_sync = 0x0A;
6303 					new_period = 0x0A;
6304 				}
6305 				if (new_offset > np->maxoffs_st)
6306 					new_offset = np->maxoffs_st;
6307 				nego = NS_SYNC;
6308 				msgptr[msglen++] = M_EXTENDED;
6309 				msgptr[msglen++] = 3;
6310 				msgptr[msglen++] = M_X_SYNC_REQ;
6311 				msgptr[msglen++] = new_period;
6312 				msgptr[msglen++] = new_offset;
6313 			    }
6314 			    else
6315 				cmd->ic_nego_sync = 0;
6316 			    break;
6317 
6318 			case NS_NOCHANGE:
6319 			    break;
6320 			}
6321 		}
6322 
6323 	};
6324 
6325 	cp->nego_status = nego;
6326 	np->check_integ_par = 0;
6327 
6328 	if (nego) {
6329 		tp->nego_cp = cp;
6330 		if (DEBUG_FLAGS & DEBUG_NEGO) {
6331 			ncr_print_msg(cp, nego == NS_WIDE ?
6332 				  "wide/narrow msgout":
6333 				(nego == NS_SYNC ? "sync/async msgout" : "ppr msgout"),
6334 				msgptr);
6335 		};
6336 	};
6337 
6338 	return msglen;
6339 }
6340 #endif	/* SCSI_NCR_INTEGRITY_CHECKING */
6341 
6342 /*==========================================================
6343 **
6344 **
6345 **	Prepare the next negotiation message if needed.
6346 **
6347 **	Fill in the part of message buffer that contains the
6348 **	negotiation and the nego_status field of the CCB.
6349 **	Returns the size of the message in bytes.
6350 **
6351 **
6352 **==========================================================
6353 */
6354 
6355 
6356 static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr)
6357 {
6358 	tcb_p tp = &np->target[cp->target];
6359 	int msglen = 0;
6360 	int nego = 0;
6361 	u_char width, offset, factor, last_byte;
6362 
6363 	if (!np->check_integrity) {
6364 		/* If integrity checking disabled, enable PPR messaging
6365 		 * if device supports wide, sync and ultra 3
6366 		 */
6367 		if (tp->ppr_negotiation == 1) /* PPR message successful */
6368 			tp->ppr_negotiation = 2;
6369 
6370 		if ((tp->inq_done) && (!tp->ic_maximums_set)) {
6371 			tp->ic_maximums_set = 1;
6372 
6373 			/*
6374 			 * Issue PPR only if board is capable
6375 			 * and set-up for Ultra3 transfers.
6376 			 */
6377 			tp->ppr_negotiation = 0;
6378 			if ( (np->features & FE_ULTRA3) &&
6379 				(tp->usrwide) && (tp->maxoffs) &&
6380 				(tp->minsync == 0x09) )
6381 					tp->ppr_negotiation = 1;
6382 		}
6383 	}
6384 
6385 	if (tp->inq_done) {
6386 		/*
6387 		 * Get the current width, offset and period
6388 		 */
6389 		ncr_get_xfer_info( np, tp, &factor,
6390 						&offset, &width);
6391 
6392 		/*
6393 		**	negotiate wide transfers ?
6394 		*/
6395 
6396 		if (!tp->widedone) {
6397 			if (tp->inq_byte7 & INQ7_WIDE16) {
6398 				if (tp->ppr_negotiation)
6399 					nego = NS_PPR;
6400 				else
6401 					nego = NS_WIDE;
6402 
6403 				width = tp->usrwide;
6404 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
6405 				if (tp->ic_done)
6406 		       			 width &= tp->ic_max_width;
6407 #endif
6408 			} else
6409 				tp->widedone=1;
6410 
6411 		};
6412 
6413 		/*
6414 		**	negotiate synchronous transfers?
6415 		*/
6416 
6417 		if ((nego != NS_WIDE) && !tp->period) {
6418 			if (tp->inq_byte7 & INQ7_SYNC) {
6419 				if (tp->ppr_negotiation)
6420 					nego = NS_PPR;
6421 				else
6422 					nego = NS_SYNC;
6423 
6424 				/* Check for async flag */
6425 				if (tp->maxoffs == 0) {
6426 				    offset = 0;
6427 				    factor = 0;
6428 				}
6429 				else {
6430 				    offset = tp->maxoffs;
6431 				    factor = tp->minsync;
6432 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
6433 			 	    if ((tp->ic_done) &&
6434 						(factor < tp->ic_min_sync))
6435 		       			 factor = tp->ic_min_sync;
6436 #endif
6437 				}
6438 
6439 			} else {
6440 				offset = 0;
6441 				factor = 0;
6442 				tp->period  =0xffff;
6443 				PRINT_TARGET(np, cp->target);
6444 				printk ("target did not report SYNC.\n");
6445 			};
6446 		};
6447 	};
6448 
6449 	switch (nego) {
6450 	case NS_PPR:
6451 		/*
6452 		** Must make sure data is consistent.
6453 		** If period is 9 and sync, must be wide and DT bit set
6454 		** else period must be larger.
6455 		** Maximum offset is 31=0x1f is ST mode, 62 if DT mode
6456 		*/
6457 		last_byte = 0;
6458 		if ( (factor==9) && offset) {
6459 			if (!width) {
6460 				factor = 0x0A;
6461 			}
6462 			else
6463 				last_byte = 0x02;
6464 		}
6465 		if (!last_byte && offset > np->maxoffs_st)
6466 			offset = np->maxoffs_st;
6467 
6468 		msgptr[msglen++] = M_EXTENDED;
6469 		msgptr[msglen++] = 6;
6470 		msgptr[msglen++] = M_X_PPR_REQ;
6471 		msgptr[msglen++] = factor;
6472 		msgptr[msglen++] = 0;
6473 		msgptr[msglen++] = offset;
6474 		msgptr[msglen++] = width;
6475 		msgptr[msglen++] = last_byte;
6476 		break;
6477 	case NS_SYNC:
6478 		/*
6479 		** Never negotiate faster than Ultra 2 (25ns periods)
6480 		*/
6481 		if (offset && (factor < 0x0A)) {
6482 			factor = 0x0A;
6483 			tp->minsync = 0x0A;
6484 		}
6485 		if (offset > np->maxoffs_st)
6486 			offset = np->maxoffs_st;
6487 
6488 		msgptr[msglen++] = M_EXTENDED;
6489 		msgptr[msglen++] = 3;
6490 		msgptr[msglen++] = M_X_SYNC_REQ;
6491 		msgptr[msglen++] = factor;
6492 		msgptr[msglen++] = offset;
6493 		break;
6494 	case NS_WIDE:
6495 		msgptr[msglen++] = M_EXTENDED;
6496 		msgptr[msglen++] = 2;
6497 		msgptr[msglen++] = M_X_WIDE_REQ;
6498 		msgptr[msglen++] = width;
6499 		break;
6500 	};
6501 
6502 	cp->nego_status = nego;
6503 
6504 	if (nego) {
6505 		tp->nego_cp = cp;
6506 		if (DEBUG_FLAGS & DEBUG_NEGO) {
6507 			ncr_print_msg(cp, nego == NS_WIDE ?
6508 				  "wide msgout":
6509 				(nego == NS_SYNC ? "sync msgout" : "ppr msgout"),
6510 				msgptr);
6511 		};
6512 	};
6513 
6514 	return msglen;
6515 }
6516 
6517 /*==========================================================
6518 **
6519 **
6520 **	Start execution of a SCSI command.
6521 **	This is called from the generic SCSI driver.
6522 **
6523 **
6524 **==========================================================
6525 */
6526 static int ncr_queue_command (ncb_p np, Scsi_Cmnd *cmd)
6527 {
6528 /*	Scsi_Device        *device    = cmd->device; */
6529 	tcb_p tp                      = &np->target[cmd->target];
6530 	lcb_p lp		      = ncr_lp(np, tp, cmd->lun);
6531 	ccb_p cp;
6532 
6533 	u_char	idmsg, *msgptr;
6534 	u_int   msglen;
6535 	int	direction;
6536 	u_int32	lastp, goalp;
6537 
6538 	/*---------------------------------------------
6539 	**
6540 	**      Some shortcuts ...
6541 	**
6542 	**---------------------------------------------
6543 	*/
6544 	if ((cmd->target == np->myaddr	  ) ||
6545 		(cmd->target >= MAX_TARGET) ||
6546 		(cmd->lun    >= MAX_LUN   )) {
6547 		return(DID_BAD_TARGET);
6548         }
6549 
6550 	/*---------------------------------------------
6551 	**
6552 	**	Complete the 1st TEST UNIT READY command
6553 	**	with error condition if the device is
6554 	**	flagged NOSCAN, in order to speed up
6555 	**	the boot.
6556 	**
6557 	**---------------------------------------------
6558 	*/
6559 	if ((cmd->cmnd[0] == 0 || cmd->cmnd[0] == 0x12) &&
6560 	    (tp->usrflag & UF_NOSCAN)) {
6561 		tp->usrflag &= ~UF_NOSCAN;
6562 		return DID_BAD_TARGET;
6563 	}
6564 
6565 	if (DEBUG_FLAGS & DEBUG_TINY) {
6566 		PRINT_ADDR(cmd);
6567 		printk ("CMD=%x ", cmd->cmnd[0]);
6568 	}
6569 
6570 	/*---------------------------------------------------
6571 	**
6572 	**	Assign a ccb / bind cmd.
6573 	**	If resetting, shorten settle_time if necessary
6574 	**	in order to avoid spurious timeouts.
6575 	**	If resetting or no free ccb,
6576 	**	insert cmd into the waiting list.
6577 	**
6578 	**----------------------------------------------------
6579 	*/
6580 	if (np->settle_time && cmd->timeout_per_command >= HZ) {
6581 		u_long tlimit = ktime_get(cmd->timeout_per_command - HZ);
6582 		if (ktime_dif(np->settle_time, tlimit) > 0)
6583 			np->settle_time = tlimit;
6584 	}
6585 
6586         if (np->settle_time || !(cp=ncr_get_ccb (np, cmd->target, cmd->lun))) {
6587 		insert_into_waiting_list(np, cmd);
6588 		return(DID_OK);
6589 	}
6590 	cp->cmd = cmd;
6591 
6592 	/*---------------------------------------------------
6593 	**
6594 	**	Enable tagged queue if asked by scsi ioctl
6595 	**
6596 	**----------------------------------------------------
6597 	*/
6598 #if 0	/* This stuff was only useful for linux-1.2.13 */
6599 	if (lp && !lp->numtags && cmd->device && cmd->device->tagged_queue) {
6600 		lp->numtags = tp->usrtags;
6601 		ncr_setup_tags (np, cp->target, cp->lun);
6602 	}
6603 #endif
6604 
6605 	/*----------------------------------------------------
6606 	**
6607 	**	Build the identify / tag / sdtr message
6608 	**
6609 	**----------------------------------------------------
6610 	*/
6611 
6612 	idmsg = M_IDENTIFY | cp->lun;
6613 
6614 	if (cp ->tag != NO_TAG || (lp && !(tp->usrflag & UF_NODISC)))
6615 		idmsg |= 0x40;
6616 
6617 	msgptr = cp->scsi_smsg;
6618 	msglen = 0;
6619 	msgptr[msglen++] = idmsg;
6620 
6621 	if (cp->tag != NO_TAG) {
6622 		char order = np->order;
6623 
6624 		/*
6625 		**	Force ordered tag if necessary to avoid timeouts
6626 		**	and to preserve interactivity.
6627 		*/
6628 		if (lp && ktime_exp(lp->tags_stime)) {
6629 			lp->tags_si = !(lp->tags_si);
6630 			if (lp->tags_sum[lp->tags_si]) {
6631 				order = M_ORDERED_TAG;
6632 				if ((DEBUG_FLAGS & DEBUG_TAGS)||bootverbose>0){
6633 					PRINT_ADDR(cmd);
6634 					printk("ordered tag forced.\n");
6635 				}
6636 			}
6637 			lp->tags_stime = ktime_get(3*HZ);
6638 		}
6639 
6640 		if (order == 0) {
6641 			/*
6642 			**	Ordered write ops, unordered read ops.
6643 			*/
6644 			switch (cmd->cmnd[0]) {
6645 			case 0x08:  /* READ_SMALL (6) */
6646 			case 0x28:  /* READ_BIG  (10) */
6647 			case 0xa8:  /* READ_HUGE (12) */
6648 				order = M_SIMPLE_TAG;
6649 				break;
6650 			default:
6651 				order = M_ORDERED_TAG;
6652 			}
6653 		}
6654 		msgptr[msglen++] = order;
6655 		/*
6656 		**	For less than 128 tags, actual tags are numbered
6657 		**	1,3,5,..2*MAXTAGS+1,since we may have to deal
6658 		**	with devices that have problems with #TAG 0 or too
6659 		**	great #TAG numbers. For more tags (up to 256),
6660 		**	we use directly our tag number.
6661 		*/
6662 #if MAX_TASKS > (512/4)
6663 		msgptr[msglen++] = cp->tag;
6664 #else
6665 		msgptr[msglen++] = (cp->tag << 1) + 1;
6666 #endif
6667 	}
6668 
6669 	cp->host_flags	= 0;
6670 
6671 	/*----------------------------------------------------
6672 	**
6673 	**	Build the data descriptors
6674 	**
6675 	**----------------------------------------------------
6676 	*/
6677 
6678 	direction = scsi_data_direction(cmd);
6679 	if (direction != SCSI_DATA_NONE) {
6680 		cp->segments = np->scatter (np, cp, cp->cmd);
6681 		if (cp->segments < 0) {
6682 			ncr_free_ccb(np, cp);
6683 			return(DID_ERROR);
6684 		}
6685 	}
6686 	else {
6687 		cp->data_len = 0;
6688 		cp->segments = 0;
6689 	}
6690 
6691 	/*---------------------------------------------------
6692 	**
6693 	**	negotiation required?
6694 	**
6695 	**	(nego_status is filled by ncr_prepare_nego())
6696 	**
6697 	**---------------------------------------------------
6698 	*/
6699 
6700 	cp->nego_status = 0;
6701 
6702 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
6703 	if ((np->check_integrity && tp->ic_done) || !np->check_integrity) {
6704 		 if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
6705 			msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
6706 		 }
6707 	}
6708 	else if (np->check_integrity && (cmd->ic_in_progress)) {
6709 		msglen += ncr_ic_nego (np, cp, cmd, msgptr + msglen);
6710         }
6711 	else if (np->check_integrity && cmd->ic_complete) {
6712 		u_long current_period;
6713 		u_char current_offset, current_width, current_factor;
6714 
6715 		ncr_get_xfer_info (np, tp, &current_factor,
6716 					&current_offset, &current_width);
6717 
6718 		tp->ic_max_width = current_width;
6719 		tp->ic_min_sync  = current_factor;
6720 
6721 		if      (current_factor == 9) 	current_period = 125;
6722 		else if (current_factor == 10) 	current_period = 250;
6723 		else if (current_factor == 11) 	current_period = 303;
6724 		else if (current_factor == 12) 	current_period = 500;
6725 		else  			current_period = current_factor * 40;
6726 
6727 		/*
6728                  * Negotiation for this target is complete. Update flags.
6729                  */
6730 		tp->period = current_period;
6731 		tp->widedone = 1;
6732 		tp->ic_done = 1;
6733 
6734 		printk("%s: Integrity Check Complete: \n", ncr_name(np));
6735 
6736 		printk("%s: %s %s SCSI", ncr_name(np),
6737 				current_offset?"SYNC":"ASYNC",
6738 				tp->ic_max_width?"WIDE":"NARROW");
6739 		if (current_offset) {
6740 			u_long mbs = 10000 * (tp->ic_max_width + 1);
6741 
6742 			printk(" %d.%d  MB/s",
6743 				(int) (mbs / current_period), (int) (mbs % current_period));
6744 
6745 			printk(" (%d ns, %d offset)\n",
6746 				  (int) current_period/10, current_offset);
6747 		}
6748 		else
6749 			printk(" %d MB/s. \n ", (tp->ic_max_width+1)*5);
6750         }
6751 #else
6752 	if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
6753 		msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
6754 	}
6755 #endif	/* SCSI_NCR_INTEGRITY_CHECKING */
6756 
6757 
6758 	/*----------------------------------------------------
6759 	**
6760 	**	Determine xfer direction.
6761 	**
6762 	**----------------------------------------------------
6763 	*/
6764 	if (!cp->data_len)
6765 		direction = SCSI_DATA_NONE;
6766 
6767 	/*
6768 	**	If data direction is UNKNOWN, speculate DATA_READ
6769 	**	but prepare alternate pointers for WRITE in case
6770 	**	of our speculation will be just wrong.
6771 	**	SCRIPTS will swap values if needed.
6772 	*/
6773 	switch(direction) {
6774 	case SCSI_DATA_UNKNOWN:
6775 	case SCSI_DATA_WRITE:
6776 		goalp = NCB_SCRIPT_PHYS (np, data_out2) + 8;
6777 		lastp = goalp - 8 - (cp->segments * (SCR_SG_SIZE*4));
6778 		if (direction != SCSI_DATA_UNKNOWN)
6779 			break;
6780 		cp->phys.header.wgoalp	= cpu_to_scr(goalp);
6781 		cp->phys.header.wlastp	= cpu_to_scr(lastp);
6782 		/* fall through */
6783 	case SCSI_DATA_READ:
6784 		cp->host_flags |= HF_DATA_IN;
6785 		goalp = NCB_SCRIPT_PHYS (np, data_in2) + 8;
6786 		lastp = goalp - 8 - (cp->segments * (SCR_SG_SIZE*4));
6787 		break;
6788 	default:
6789 	case SCSI_DATA_NONE:
6790 		lastp = goalp = NCB_SCRIPTH_PHYS (np, no_data);
6791 		break;
6792 	}
6793 
6794 	/*
6795 	**	Set all pointers values needed by SCRIPTS.
6796 	**	If direction is unknown, start at data_io.
6797 	*/
6798 	cp->phys.header.lastp = cpu_to_scr(lastp);
6799 	cp->phys.header.goalp = cpu_to_scr(goalp);
6800 
6801 	if (direction == SCSI_DATA_UNKNOWN)
6802 		cp->phys.header.savep =
6803 			cpu_to_scr(NCB_SCRIPTH_PHYS (np, data_io));
6804 	else
6805 		cp->phys.header.savep= cpu_to_scr(lastp);
6806 
6807 	/*
6808 	**	Save the initial data pointer in order to be able
6809 	**	to redo the command.
6810 	**	We also have to save the initial lastp, since it
6811 	**	will be changed to DATA_IO if we don't know the data
6812 	**	direction and the device completes the command with
6813 	**	QUEUE FULL status (without entering the data phase).
6814 	*/
6815 	cp->startp = cp->phys.header.savep;
6816 	cp->lastp0 = cp->phys.header.lastp;
6817 
6818 	/*----------------------------------------------------
6819 	**
6820 	**	fill in ccb
6821 	**
6822 	**----------------------------------------------------
6823 	**
6824 	**
6825 	**	physical -> virtual backlink
6826 	**	Generic SCSI command
6827 	*/
6828 
6829 	/*
6830 	**	Startqueue
6831 	*/
6832 	cp->phys.header.go.start   = cpu_to_scr(NCB_SCRIPT_PHYS (np,select));
6833 	cp->phys.header.go.restart = cpu_to_scr(NCB_SCRIPT_PHYS (np,resel_dsa));
6834 	/*
6835 	**	select
6836 	*/
6837 	cp->phys.select.sel_id		= cp->target;
6838 	cp->phys.select.sel_scntl3	= tp->wval;
6839 	cp->phys.select.sel_sxfer	= tp->sval;
6840 	cp->phys.select.sel_scntl4	= tp->uval;
6841 	/*
6842 	**	message
6843 	*/
6844 	cp->phys.smsg.addr	= cpu_to_scr(CCB_PHYS (cp, scsi_smsg));
6845 	cp->phys.smsg.size	= cpu_to_scr(msglen);
6846 
6847 	/*
6848 	**	command
6849 	*/
6850 	memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf)));
6851 	cp->phys.cmd.addr	= cpu_to_scr(CCB_PHYS (cp, cdb_buf[0]));
6852 	cp->phys.cmd.size	= cpu_to_scr(cmd->cmd_len);
6853 
6854 	/*
6855 	**	status
6856 	*/
6857 	cp->actualquirks	= tp->quirks;
6858 	cp->host_status		= cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
6859 	cp->scsi_status		= S_ILLEGAL;
6860 	cp->xerr_status		= 0;
6861 	cp->extra_bytes		= 0;
6862 
6863 	/*
6864 	**	extreme data pointer.
6865 	**	shall be positive, so -1 is lower than lowest.:)
6866 	*/
6867 	cp->ext_sg  = -1;
6868 	cp->ext_ofs = 0;
6869 
6870 	/*----------------------------------------------------
6871 	**
6872 	**	Critical region: start this job.
6873 	**
6874 	**----------------------------------------------------
6875 	*/
6876 
6877 	/*
6878 	**	activate this job.
6879 	*/
6880 
6881 	/*
6882 	**	insert next CCBs into start queue.
6883 	**	2 max at a time is enough to flush the CCB wait queue.
6884 	*/
6885 	if (lp)
6886 		ncr_start_next_ccb(np, lp, 2);
6887 	else
6888 		ncr_put_start_queue(np, cp);
6889 
6890 	/*
6891 	**	Command is successfully queued.
6892 	*/
6893 
6894 	return(DID_OK);
6895 }
6896 
6897 
6898 /*==========================================================
6899 **
6900 **
6901 **	Insert a CCB into the start queue and wake up the
6902 **	SCRIPTS processor.
6903 **
6904 **
6905 **==========================================================
6906 */
6907 
6908 static void ncr_start_next_ccb(ncb_p np, lcb_p lp, int maxn)
6909 {
6910 	XPT_QUEHEAD *qp;
6911 	ccb_p cp;
6912 
6913 	while (maxn-- && lp->queuedccbs < lp->queuedepth) {
6914 		qp = xpt_remque_head(&lp->wait_ccbq);
6915 		if (!qp)
6916 			break;
6917 		++lp->queuedccbs;
6918 		cp = xpt_que_entry(qp, struct ccb, link_ccbq);
6919 		xpt_insque_tail(qp, &lp->busy_ccbq);
6920 		lp->tasktbl[cp->tag == NO_TAG ? 0 : cp->tag] =
6921 			cpu_to_scr(cp->p_ccb);
6922 		ncr_put_start_queue(np, cp);
6923 	}
6924 }
6925 
6926 static void ncr_put_start_queue(ncb_p np, ccb_p cp)
6927 {
6928 	u_short	qidx;
6929 
6930 #ifdef SCSI_NCR_IARB_SUPPORT
6931 	/*
6932 	**	If the previously queued CCB is not yet done,
6933 	**	set the IARB hint. The SCRIPTS will go with IARB
6934 	**	for this job when starting the previous one.
6935 	**	We leave devices a chance to win arbitration by
6936 	**	not using more than 'iarb_max' consecutive
6937 	**	immediate arbitrations.
6938 	*/
6939 	if (np->last_cp && np->iarb_count < np->iarb_max) {
6940 		np->last_cp->host_flags |= HF_HINT_IARB;
6941 		++np->iarb_count;
6942 	}
6943 	else
6944 		np->iarb_count = 0;
6945 	np->last_cp = cp;
6946 #endif
6947 
6948 	/*
6949 	**	insert into start queue.
6950 	*/
6951 	qidx = np->squeueput + 2;
6952 	if (qidx >= MAX_START*2) qidx = 0;
6953 
6954 	np->squeue [qidx]	   = cpu_to_scr(np->p_idletask);
6955 	MEMORY_BARRIER();
6956 	np->squeue [np->squeueput] = cpu_to_scr(cp->p_ccb);
6957 
6958 	np->squeueput = qidx;
6959 	cp->queued = 1;
6960 
6961 	if (DEBUG_FLAGS & DEBUG_QUEUE)
6962 		printk ("%s: queuepos=%d.\n", ncr_name (np), np->squeueput);
6963 
6964 	/*
6965 	**	Script processor may be waiting for reselect.
6966 	**	Wake it up.
6967 	*/
6968 	MEMORY_BARRIER();
6969 	OUTB (nc_istat, SIGP|np->istat_sem);
6970 }
6971 
6972 
6973 /*==========================================================
6974 **
6975 **	Soft reset the chip.
6976 **
6977 **	Some 896 and 876 chip revisions may hang-up if we set
6978 **	the SRST (soft reset) bit at the wrong time when SCRIPTS
6979 **	are running.
6980 **	So, we need to abort the current operation prior to
6981 **	soft resetting the chip.
6982 **
6983 **==========================================================
6984 */
6985 
6986 static void ncr_chip_reset (ncb_p np)
6987 {
6988 	OUTB (nc_istat, SRST);
6989 	UDELAY (10);
6990 	OUTB (nc_istat, 0);
6991 }
6992 
6993 static void ncr_soft_reset(ncb_p np)
6994 {
6995 	u_char istat = 0;
6996 	int i;
6997 
6998 	if (!(np->features & FE_ISTAT1) || !(INB (nc_istat1) & SRUN))
6999 		goto do_chip_reset;
7000 
7001 	OUTB (nc_istat, CABRT);
7002 	for (i = 100000 ; i ; --i) {
7003 		istat = INB (nc_istat);
7004 		if (istat & SIP) {
7005 			INW (nc_sist);
7006 		}
7007 		else if (istat & DIP) {
7008 			if (INB (nc_dstat) & ABRT)
7009 				break;
7010 		}
7011 		UDELAY(5);
7012 	}
7013 	OUTB (nc_istat, 0);
7014 	if (!i)
7015 		printk("%s: unable to abort current chip operation, "
7016 		       "ISTAT=0x%02x.\n", ncr_name(np), istat);
7017 do_chip_reset:
7018 	ncr_chip_reset(np);
7019 }
7020 
7021 /*==========================================================
7022 **
7023 **
7024 **	Start reset process.
7025 **	The interrupt handler will reinitialize the chip.
7026 **	The timeout handler will wait for settle_time before
7027 **	clearing it and so resuming command processing.
7028 **
7029 **
7030 **==========================================================
7031 */
7032 static void ncr_start_reset(ncb_p np)
7033 {
7034 	(void) ncr_reset_scsi_bus(np, 1, driver_setup.settle_delay);
7035 }
7036 
7037 static int ncr_reset_scsi_bus(ncb_p np, int enab_int, int settle_delay)
7038 {
7039 	u_int32 term;
7040 	int retv = 0;
7041 
7042 	np->settle_time	= ktime_get(settle_delay * HZ);
7043 
7044 	if (bootverbose > 1)
7045 		printk("%s: resetting, "
7046 			"command processing suspended for %d seconds\n",
7047 			ncr_name(np), settle_delay);
7048 
7049 	ncr_soft_reset(np);	/* Soft reset the chip */
7050 	UDELAY (2000);	/* The 895/6 need time for the bus mode to settle */
7051 	if (enab_int)
7052 		OUTW (nc_sien, RST);
7053 	/*
7054 	**	Enable Tolerant, reset IRQD if present and
7055 	**	properly set IRQ mode, prior to resetting the bus.
7056 	*/
7057 	OUTB (nc_stest3, TE);
7058 	OUTB (nc_dcntl, (np->rv_dcntl & IRQM));
7059 	OUTB (nc_scntl1, CRST);
7060 	UDELAY (200);
7061 
7062 	if (!driver_setup.bus_check)
7063 		goto out;
7064 	/*
7065 	**	Check for no terminators or SCSI bus shorts to ground.
7066 	**	Read SCSI data bus, data parity bits and control signals.
7067 	**	We are expecting RESET to be TRUE and other signals to be
7068 	**	FALSE.
7069 	*/
7070 	term =	INB(nc_sstat0);
7071 	term =	((term & 2) << 7) + ((term & 1) << 17);	/* rst sdp0 */
7072 	term |= ((INB(nc_sstat2) & 0x01) << 26) |	/* sdp1     */
7073 		((INW(nc_sbdl) & 0xff)   << 9)  |	/* d7-0     */
7074 		((INW(nc_sbdl) & 0xff00) << 10) |	/* d15-8    */
7075 		INB(nc_sbcl);	/* req ack bsy sel atn msg cd io    */
7076 
7077 	if (!(np->features & FE_WIDE))
7078 		term &= 0x3ffff;
7079 
7080 	if (term != (2<<7)) {
7081 		printk("%s: suspicious SCSI data while resetting the BUS.\n",
7082 			ncr_name(np));
7083 		printk("%s: %sdp0,d7-0,rst,req,ack,bsy,sel,atn,msg,c/d,i/o = "
7084 			"0x%lx, expecting 0x%lx\n",
7085 			ncr_name(np),
7086 			(np->features & FE_WIDE) ? "dp1,d15-8," : "",
7087 			(u_long)term, (u_long)(2<<7));
7088 		if (driver_setup.bus_check == 1)
7089 			retv = 1;
7090 	}
7091 out:
7092 	OUTB (nc_scntl1, 0);
7093 	return retv;
7094 }
7095 
7096 /*==========================================================
7097 **
7098 **
7099 **	Reset the SCSI BUS.
7100 **	This is called from the generic SCSI driver.
7101 **
7102 **
7103 **==========================================================
7104 */
7105 static int ncr_reset_bus (ncb_p np, Scsi_Cmnd *cmd, int sync_reset)
7106 {
7107 /*	Scsi_Device        *device    = cmd->device; */
7108 	ccb_p cp;
7109 	int found;
7110 
7111 /*
7112  * Return immediately if reset is in progress.
7113  */
7114 	if (np->settle_time) {
7115 		return SCSI_RESET_PUNT;
7116 	}
7117 /*
7118  * Start the reset process.
7119  * The script processor is then assumed to be stopped.
7120  * Commands will now be queued in the waiting list until a settle
7121  * delay of 2 seconds will be completed.
7122  */
7123 	ncr_start_reset(np);
7124 /*
7125  * First, look in the wakeup list
7126  */
7127 	for (found=0, cp=np->ccbc; cp; cp=cp->link_ccb) {
7128 		/*
7129 		**	look for the ccb of this command.
7130 		*/
7131 		if (cp->host_status == HS_IDLE) continue;
7132 		if (cp->cmd == cmd) {
7133 			found = 1;
7134 			break;
7135 		}
7136 	}
7137 /*
7138  * Then, look in the waiting list
7139  */
7140 	if (!found && retrieve_from_waiting_list(0, np, cmd))
7141 		found = 1;
7142 /*
7143  * Wake-up all awaiting commands with DID_RESET.
7144  */
7145 	reset_waiting_list(np);
7146 /*
7147  * Wake-up all pending commands with HS_RESET -> DID_RESET.
7148  */
7149 	ncr_wakeup(np, HS_RESET);
7150 /*
7151  * If the involved command was not in a driver queue, and the
7152  * scsi driver told us reset is synchronous, and the command is not
7153  * currently in the waiting list, complete it with DID_RESET status,
7154  * in order to keep it alive.
7155  */
7156 	if (!found && sync_reset && !retrieve_from_waiting_list(0, np, cmd)) {
7157 		SetScsiResult(cmd, DID_RESET, 0);
7158 		ncr_queue_done_cmd(np, cmd);
7159 	}
7160 
7161 	return SCSI_RESET_SUCCESS;
7162 }
7163 
7164 /*==========================================================
7165 **
7166 **
7167 **	Abort an SCSI command.
7168 **	This is called from the generic SCSI driver.
7169 **
7170 **
7171 **==========================================================
7172 */
7173 static int ncr_abort_command (ncb_p np, Scsi_Cmnd *cmd)
7174 {
7175 /*	Scsi_Device        *device    = cmd->device; */
7176 	ccb_p cp;
7177 
7178 /*
7179  * First, look for the scsi command in the waiting list
7180  */
7181 	if (remove_from_waiting_list(np, cmd)) {
7182 		SetScsiAbortResult(cmd);
7183 		ncr_queue_done_cmd(np, cmd);
7184 		return SCSI_ABORT_SUCCESS;
7185 	}
7186 
7187 /*
7188  * Then, look in the wakeup list
7189  */
7190 	for (cp=np->ccbc; cp; cp=cp->link_ccb) {
7191 		/*
7192 		**	look for the ccb of this command.
7193 		*/
7194 		if (cp->host_status == HS_IDLE) continue;
7195 		if (cp->cmd == cmd)
7196 			break;
7197 	}
7198 
7199 	if (!cp) {
7200 		return SCSI_ABORT_NOT_RUNNING;
7201 	}
7202 
7203 	/*
7204 	**	Keep track we have to abort this job.
7205 	*/
7206 	cp->to_abort = 1;
7207 
7208 	/*
7209 	**	Tell the SCRIPTS processor to stop
7210 	**	and synchronize with us.
7211 	*/
7212 	np->istat_sem = SEM;
7213 
7214 	/*
7215 	**      If there are no requests, the script
7216 	**      processor will sleep on SEL_WAIT_RESEL.
7217 	**      Let's wake it up, since it may have to work.
7218 	*/
7219 	OUTB (nc_istat, SIGP|SEM);
7220 
7221 	/*
7222 	**	Tell user we are working for him.
7223 	*/
7224 	return SCSI_ABORT_PENDING;
7225 }
7226 
7227 /*==========================================================
7228 **
7229 **	Linux release module stuff.
7230 **
7231 **	Called before unloading the module
7232 **	Detach the host.
7233 **	We have to free resources and halt the NCR chip
7234 **
7235 **==========================================================
7236 */
7237 
7238 #ifdef MODULE
7239 static int ncr_detach(ncb_p np)
7240 {
7241 	int i;
7242 
7243 	printk("%s: detaching ...\n", ncr_name(np));
7244 
7245 /*
7246 **	Stop the ncr_timeout process
7247 **	Set release_stage to 1 and wait that ncr_timeout() set it to 2.
7248 */
7249 	np->release_stage = 1;
7250 	for (i = 50 ; i && np->release_stage != 2 ; i--) MDELAY (100);
7251 	if (np->release_stage != 2)
7252 		printk("%s: the timer seems to be already stopped\n",
7253 			ncr_name(np));
7254 	else np->release_stage = 2;
7255 
7256 /*
7257 **	Reset NCR chip.
7258 **	We should use ncr_soft_reset(), but we donnot want to do
7259 **	so, since we may not be safe if interrupts occur.
7260 */
7261 
7262 	printk("%s: resetting chip\n", ncr_name(np));
7263 	ncr_chip_reset(np);
7264 
7265 /*
7266 **	Restore bios setting for automatic clock detection.
7267 */
7268 	OUTB(nc_dmode,	np->sv_dmode);
7269 	OUTB(nc_dcntl,	np->sv_dcntl);
7270 	OUTB(nc_ctest3,	np->sv_ctest3);
7271 	OUTB(nc_ctest4,	np->sv_ctest4);
7272 	OUTB(nc_ctest5,	np->sv_ctest5);
7273 	OUTB(nc_gpcntl,	np->sv_gpcntl);
7274 	OUTB(nc_stest2,	np->sv_stest2);
7275 
7276 	ncr_selectclock(np, np->sv_scntl3);
7277 /*
7278 **	Free host resources
7279 */
7280 	ncr_free_resources(np);
7281 
7282 	return 1;
7283 }
7284 #endif
7285 
7286 /*==========================================================
7287 **
7288 **
7289 **	Complete execution of a SCSI command.
7290 **	Signal completion to the generic SCSI driver.
7291 **
7292 **
7293 **==========================================================
7294 */
7295 
7296 void ncr_complete (ncb_p np, ccb_p cp)
7297 {
7298 	Scsi_Cmnd *cmd;
7299 	tcb_p tp;
7300 	lcb_p lp;
7301 
7302 	/*
7303 	**	Sanity check
7304 	*/
7305 	if (!cp || !cp->cmd)
7306 		return;
7307 
7308 	/*
7309 	**	Print some debugging info.
7310 	*/
7311 
7312 	if (DEBUG_FLAGS & DEBUG_TINY)
7313 		printk ("CCB=%lx STAT=%x/%x\n", (unsigned long)cp,
7314 			cp->host_status,cp->scsi_status);
7315 
7316 	/*
7317 	**	Get command, target and lun pointers.
7318 	*/
7319 
7320 	cmd = cp->cmd;
7321 	cp->cmd = NULL;
7322 	tp = &np->target[cp->target];
7323 	lp = ncr_lp(np, tp, cp->lun);
7324 
7325 	/*
7326 	**	We donnot queue more than 1 ccb per target
7327 	**	with negotiation at any time. If this ccb was
7328 	**	used for negotiation, clear this info in the tcb.
7329 	*/
7330 
7331 	if (cp == tp->nego_cp)
7332 		tp->nego_cp = 0;
7333 
7334 #ifdef SCSI_NCR_IARB_SUPPORT
7335 	/*
7336 	**	We just complete the last queued CCB.
7337 	**	Clear this info that is no more relevant.
7338 	*/
7339 	if (cp == np->last_cp)
7340 		np->last_cp = 0;
7341 #endif
7342 
7343 	/*
7344 	**	If auto-sense performed, change scsi status,
7345 	**	Otherwise, compute the residual.
7346 	*/
7347 	if (cp->host_flags & HF_AUTO_SENSE) {
7348 		cp->scsi_status = cp->sv_scsi_status;
7349 		cp->xerr_status = cp->sv_xerr_status;
7350 	}
7351 	else {
7352 		cp->resid = 0;
7353 		if (cp->xerr_status ||
7354 		    cp->phys.header.lastp != cp->phys.header.goalp)
7355 			cp->resid = ncr_compute_residual(np, cp);
7356 	}
7357 
7358 	/*
7359 	**	Check for extended errors.
7360 	*/
7361 
7362 	if (cp->xerr_status) {
7363 		if (cp->xerr_status & XE_PARITY_ERR) {
7364 			PRINT_ADDR(cmd);
7365 			printk ("unrecovered SCSI parity error.\n");
7366 		}
7367 		if (cp->xerr_status & XE_EXTRA_DATA) {
7368 			PRINT_ADDR(cmd);
7369 			printk ("extraneous data discarded.\n");
7370 		}
7371 		if (cp->xerr_status & XE_BAD_PHASE) {
7372 			PRINT_ADDR(cmd);
7373 			printk ("illegal scsi phase (4/5).\n");
7374 		}
7375 		if (cp->xerr_status & XE_SODL_UNRUN) {
7376 			PRINT_ADDR(cmd);
7377 			printk ("ODD transfer in DATA OUT phase.\n");
7378 		}
7379 		if (cp->xerr_status & XE_SWIDE_OVRUN){
7380 			PRINT_ADDR(cmd);
7381 			printk ("ODD transfer in DATA IN phase.\n");
7382 		}
7383 
7384 		if (cp->host_status==HS_COMPLETE)
7385 			cp->host_status = HS_FAIL;
7386 	}
7387 
7388 	/*
7389 	**	Print out any error for debugging purpose.
7390 	*/
7391 	if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
7392 		if (cp->host_status!=HS_COMPLETE || cp->scsi_status!=S_GOOD ||
7393 		    cp->resid) {
7394 			PRINT_ADDR(cmd);
7395 			printk ("ERROR: cmd=%x host_status=%x scsi_status=%x "
7396 				"data_len=%d residual=%d\n",
7397 				cmd->cmnd[0], cp->host_status, cp->scsi_status,
7398 				cp->data_len, cp->resid);
7399 		}
7400 	}
7401 
7402 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,99)
7403 	/*
7404 	**	Move residual byte count to user structure.
7405 	*/
7406 	cmd->resid = cp->resid;
7407 #endif
7408 	/*
7409 	**	Check the status.
7410 	*/
7411 	if (   (cp->host_status == HS_COMPLETE)
7412 		&& (cp->scsi_status == S_GOOD ||
7413 		    cp->scsi_status == S_COND_MET)) {
7414                 /*
7415 		**	All went well (GOOD status).
7416 		**	CONDITION MET status is returned on
7417                 **	`Pre-Fetch' or `Search data' success.
7418                 */
7419 		SetScsiResult(cmd, DID_OK, cp->scsi_status);
7420 
7421 		/*
7422 		**	Allocate the lcb if not yet.
7423 		*/
7424 		if (!lp)
7425 			ncr_alloc_lcb (np, cp->target, cp->lun);
7426 
7427 		/*
7428 		**	On standard INQUIRY response (EVPD and CmDt
7429 		**	not set), setup logical unit according to
7430 		**	announced capabilities (we need the 1rst 8 bytes).
7431 		*/
7432 		if (cmd->cmnd[0] == 0x12 && !(cmd->cmnd[1] & 0x3) &&
7433 		    cmd->request_bufflen - cp->resid > 7 && !cmd->use_sg) {
7434 			sync_scsi_data(np, cmd);	/* SYNC the data */
7435 			ncr_setup_lcb (np, cp->target, cp->lun,
7436 				       (char *) cmd->request_buffer);
7437 		}
7438 
7439 		/*
7440 		**	If tags was reduced due to queue full,
7441 		**	increase tags if 1000 good status received.
7442 		*/
7443 		if (lp && lp->usetags && lp->numtags < lp->maxtags) {
7444 			++lp->num_good;
7445 			if (lp->num_good >= 1000) {
7446 				lp->num_good = 0;
7447 				++lp->numtags;
7448 				ncr_setup_tags (np, cp->target, cp->lun);
7449 			}
7450 		}
7451 	} else if ((cp->host_status == HS_COMPLETE)
7452 		&& (cp->scsi_status == S_CHECK_COND)) {
7453 		/*
7454 		**   Check condition code
7455 		*/
7456 		SetScsiResult(cmd, DID_OK, S_CHECK_COND);
7457 
7458 		if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
7459 			PRINT_ADDR(cmd);
7460 			ncr_printl_hex("sense data:", cmd->sense_buffer, 14);
7461 		}
7462 	} else if ((cp->host_status == HS_COMPLETE)
7463 		&& (cp->scsi_status == S_CONFLICT)) {
7464 		/*
7465 		**   Reservation Conflict condition code
7466 		*/
7467 		SetScsiResult(cmd, DID_OK, S_CONFLICT);
7468 
7469 	} else if ((cp->host_status == HS_COMPLETE)
7470 		&& (cp->scsi_status == S_BUSY ||
7471 		    cp->scsi_status == S_QUEUE_FULL)) {
7472 
7473 		/*
7474 		**   Target is busy.
7475 		*/
7476 		SetScsiResult(cmd, DID_OK, cp->scsi_status);
7477 
7478 	} else if ((cp->host_status == HS_SEL_TIMEOUT)
7479 		|| (cp->host_status == HS_TIMEOUT)) {
7480 
7481 		/*
7482 		**   No response
7483 		*/
7484 		SetScsiResult(cmd, DID_TIME_OUT, cp->scsi_status);
7485 
7486 	} else if (cp->host_status == HS_RESET) {
7487 
7488 		/*
7489 		**   SCSI bus reset
7490 		*/
7491 		SetScsiResult(cmd, DID_RESET, cp->scsi_status);
7492 
7493 	} else if (cp->host_status == HS_ABORTED) {
7494 
7495 		/*
7496 		**   Transfer aborted
7497 		*/
7498 		SetScsiAbortResult(cmd);
7499 
7500 	} else {
7501 		int did_status;
7502 
7503 		/*
7504 		**  Other protocol messes
7505 		*/
7506 		PRINT_ADDR(cmd);
7507 		printk ("COMMAND FAILED (%x %x) @%p.\n",
7508 			cp->host_status, cp->scsi_status, cp);
7509 
7510 		did_status = DID_ERROR;
7511 		if (cp->xerr_status & XE_PARITY_ERR)
7512 			did_status = DID_PARITY;
7513 
7514 		SetScsiResult(cmd, did_status, cp->scsi_status);
7515 	}
7516 
7517 	/*
7518 	**	trace output
7519 	*/
7520 
7521 	if (tp->usrflag & UF_TRACE) {
7522 		PRINT_ADDR(cmd);
7523 		printk (" CMD:");
7524 		ncr_print_hex(cmd->cmnd, cmd->cmd_len);
7525 
7526 		if (cp->host_status==HS_COMPLETE) {
7527 			switch (cp->scsi_status) {
7528 			case S_GOOD:
7529 				printk ("  GOOD");
7530 				break;
7531 			case S_CHECK_COND:
7532 				printk ("  SENSE:");
7533 				ncr_print_hex(cmd->sense_buffer, 14);
7534 				break;
7535 			default:
7536 				printk ("  STAT: %x\n", cp->scsi_status);
7537 				break;
7538 			}
7539 		} else printk ("  HOSTERROR: %x", cp->host_status);
7540 		printk ("\n");
7541 	}
7542 
7543 	/*
7544 	**	Free this ccb
7545 	*/
7546 	ncr_free_ccb (np, cp);
7547 
7548 	/*
7549 	**	requeue awaiting scsi commands for this lun.
7550 	*/
7551 	if (lp && lp->queuedccbs < lp->queuedepth &&
7552 	    !xpt_que_empty(&lp->wait_ccbq))
7553 		ncr_start_next_ccb(np, lp, 2);
7554 
7555 	/*
7556 	**	requeue awaiting scsi commands for this controller.
7557 	*/
7558 	if (np->waiting_list)
7559 		requeue_waiting_list(np);
7560 
7561 	/*
7562 	**	signal completion to generic driver.
7563 	*/
7564 	ncr_queue_done_cmd(np, cmd);
7565 }
7566 
7567 /*==========================================================
7568 **
7569 **
7570 **	Signal all (or one) control block done.
7571 **
7572 **
7573 **==========================================================
7574 */
7575 
7576 /*
7577 **	The NCR has completed CCBs.
7578 **	Look at the DONE QUEUE.
7579 **
7580 **	On architectures that may reorder LOAD/STORE operations,
7581 **	a memory barrier may be needed after the reading of the
7582 **	so-called `flag' and prior to dealing with the data.
7583 */
7584 int ncr_wakeup_done (ncb_p np)
7585 {
7586 	ccb_p cp;
7587 	int i, n;
7588 	u_long dsa;
7589 
7590 	n = 0;
7591 	i = np->dqueueget;
7592 	while (1) {
7593 		dsa = scr_to_cpu(np->dqueue[i]);
7594 		if (!dsa)
7595 			break;
7596 		np->dqueue[i] = 0;
7597 		if ((i = i+2) >= MAX_START*2)
7598 			i = 0;
7599 
7600 		cp = ncr_ccb_from_dsa(np, dsa);
7601 		if (cp) {
7602 			MEMORY_BARRIER();
7603 			ncr_complete (np, cp);
7604 			++n;
7605 		}
7606 		else
7607 			printk (KERN_ERR "%s: bad DSA (%lx) in done queue.\n",
7608 				ncr_name(np), dsa);
7609 	}
7610 	np->dqueueget = i;
7611 
7612 	return n;
7613 }
7614 
7615 /*
7616 **	Complete all active CCBs.
7617 */
7618 void ncr_wakeup (ncb_p np, u_long code)
7619 {
7620 	ccb_p cp = np->ccbc;
7621 
7622 	while (cp) {
7623 		if (cp->host_status != HS_IDLE) {
7624 			cp->host_status = code;
7625 			ncr_complete (np, cp);
7626 		}
7627 		cp = cp->link_ccb;
7628 	}
7629 }
7630 
7631 /*==========================================================
7632 **
7633 **
7634 **	Start NCR chip.
7635 **
7636 **
7637 **==========================================================
7638 */
7639 
7640 void ncr_init (ncb_p np, int reset, char * msg, u_long code)
7641 {
7642  	int	i;
7643 	u_long	phys;
7644 
7645  	/*
7646 	**	Reset chip if asked, otherwise just clear fifos.
7647  	*/
7648 
7649 	if (reset)
7650 		ncr_soft_reset(np);
7651 	else {
7652 		OUTB (nc_stest3, TE|CSF);
7653 		OUTONB (nc_ctest3, CLF);
7654 	}
7655 
7656 	/*
7657 	**	Message.
7658 	*/
7659 
7660 	if (msg) printk (KERN_INFO "%s: restart (%s).\n", ncr_name (np), msg);
7661 
7662 	/*
7663 	**	Clear Start Queue
7664 	*/
7665 	phys = np->p_squeue;
7666 	np->queuedepth = MAX_START - 1;	/* 1 entry needed as end marker */
7667 	for (i = 0; i < MAX_START*2; i += 2) {
7668 		np->squeue[i]   = cpu_to_scr(np->p_idletask);
7669 		np->squeue[i+1] = cpu_to_scr(phys + (i+2)*4);
7670 	}
7671 	np->squeue[MAX_START*2-1] = cpu_to_scr(phys);
7672 
7673 
7674 	/*
7675 	**	Start at first entry.
7676 	*/
7677 	np->squeueput = 0;
7678 	np->scripth0->startpos[0] = cpu_to_scr(phys);
7679 
7680 	/*
7681 	**	Clear Done Queue
7682 	*/
7683 	phys = vtobus(np->dqueue);
7684 	for (i = 0; i < MAX_START*2; i += 2) {
7685 		np->dqueue[i]   = 0;
7686 		np->dqueue[i+1] = cpu_to_scr(phys + (i+2)*4);
7687 	}
7688 	np->dqueue[MAX_START*2-1] = cpu_to_scr(phys);
7689 
7690 	/*
7691 	**	Start at first entry.
7692 	*/
7693 	np->scripth0->done_pos[0] = cpu_to_scr(phys);
7694 	np->dqueueget = 0;
7695 
7696 	/*
7697 	**	Wakeup all pending jobs.
7698 	*/
7699 	ncr_wakeup (np, code);
7700 
7701 	/*
7702 	**	Init chip.
7703 	*/
7704 
7705 	OUTB (nc_istat,  0x00   );	/*  Remove Reset, abort */
7706 	UDELAY (2000);	/* The 895 needs time for the bus mode to settle */
7707 
7708 	OUTB (nc_scntl0, np->rv_scntl0 | 0xc0);
7709 					/*  full arb., ena parity, par->ATN  */
7710 	OUTB (nc_scntl1, 0x00);		/*  odd parity, and remove CRST!! */
7711 
7712 	ncr_selectclock(np, np->rv_scntl3);	/* Select SCSI clock */
7713 
7714 	OUTB (nc_scid  , RRE|np->myaddr);	/* Adapter SCSI address */
7715 	OUTW (nc_respid, 1ul<<np->myaddr);	/* Id to respond to */
7716 	OUTB (nc_istat , SIGP	);		/*  Signal Process */
7717 	OUTB (nc_dmode , np->rv_dmode);		/* Burst length, dma mode */
7718 	OUTB (nc_ctest5, np->rv_ctest5);	/* Large fifo + large burst */
7719 
7720 	OUTB (nc_dcntl , NOCOM|np->rv_dcntl);	/* Protect SFBR */
7721 	OUTB (nc_ctest3, np->rv_ctest3);	/* Write and invalidate */
7722 	OUTB (nc_ctest4, np->rv_ctest4);	/* Master parity checking */
7723 
7724 	if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
7725 		(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66)){
7726 		OUTB (nc_stest2, EXT|np->rv_stest2);
7727 		/* Extended Sreq/Sack filtering, not supported in C1010/C1010_66 */
7728 	}
7729 	OUTB (nc_stest3, TE);			/* TolerANT enable */
7730 	OUTB (nc_stime0, 0x0c);			/* HTH disabled  STO 0.25 sec */
7731 
7732 	/*
7733 	**	DEL 441 - 53C876 Rev 5 - Part Number 609-0392787/2788 - ITEM 2.
7734 	**	Disable overlapped arbitration for all dual-function
7735 	**	devices, regardless revision id.
7736 	**	We may consider it is a post-chip-design feature. ;-)
7737  	**
7738  	**	Errata applies to all 896 and 1010 parts.
7739 	*/
7740 	if (np->device_id == PCI_DEVICE_ID_NCR_53C875)
7741 		OUTB (nc_ctest0, (1<<5));
7742  	else if (np->device_id == PCI_DEVICE_ID_NCR_53C896  ||
7743  		 np->device_id == PCI_DEVICE_ID_LSI_53C1010 ||
7744  		 np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 )
7745 		np->rv_ccntl0 |= DPR;
7746 
7747 	/*
7748 	**	C1010_66MHz rev 0 part requies AIPCNTL1 bit 3 to be set.
7749 	*/
7750 	if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)
7751 		OUTB(nc_aipcntl1, (1<<3));
7752 
7753 	/*
7754 	**  Write CCNTL0/CCNTL1 for chips capable of 64 bit addressing
7755 	**  and/or hardware phase mismatch, since only such chips
7756 	**  seem to support those IO registers.
7757 	*/
7758 	if (np->features & (FE_DAC | FE_NOPM)) {
7759 		OUTB (nc_ccntl0, np->rv_ccntl0);
7760 		OUTB (nc_ccntl1, np->rv_ccntl1);
7761 	}
7762 
7763 	/*
7764  	**	If phase mismatch handled by scripts (53C895A or 53C896
7765  	**	or 53C1010 or 53C1010_66), set PM jump addresses.
7766 	*/
7767 
7768 	if (np->features & FE_NOPM) {
7769 		printk(KERN_INFO "%s: handling phase mismatch from SCRIPTS.\n",
7770 		       ncr_name(np));
7771 		OUTL (nc_pmjad1, NCB_SCRIPTH_PHYS (np, pm_handle));
7772 		OUTL (nc_pmjad2, NCB_SCRIPTH_PHYS (np, pm_handle));
7773 	}
7774 
7775 	/*
7776 	**    Enable GPIO0 pin for writing if LED support from SCRIPTS.
7777 	**    Also set GPIO5 and clear GPIO6 if hardware LED control.
7778 	*/
7779 
7780 	if (np->features & FE_LED0)
7781 		OUTB(nc_gpcntl, INB(nc_gpcntl) & ~0x01);
7782 	else if (np->features & FE_LEDC)
7783 		OUTB(nc_gpcntl, (INB(nc_gpcntl) & ~0x41) | 0x20);
7784 
7785 
7786 	/*
7787 	**      enable ints
7788 	*/
7789 
7790 	OUTW (nc_sien , STO|HTH|MA|SGE|UDC|RST|PAR);
7791 	OUTB (nc_dien , MDPE|BF|SSI|SIR|IID);
7792 
7793 	/*
7794 	**	For 895/895A/896/c1010
7795 	**	Enable SBMC interrupt and save current SCSI bus mode.
7796 	*/
7797 	if ( (np->features & FE_ULTRA2) || (np->features & FE_ULTRA3) ) {
7798 		OUTONW (nc_sien, SBMC);
7799 		np->scsi_mode = INB (nc_stest4) & SMODE;
7800 	}
7801 
7802 	/*
7803 	**	Fill in target structure.
7804 	**	Reinitialize usrsync.
7805 	**	Reinitialize usrwide.
7806 	**	Prepare sync negotiation according to actual SCSI bus mode.
7807 	*/
7808 
7809 	for (i=0;i<MAX_TARGET;i++) {
7810 		tcb_p tp = &np->target[i];
7811 
7812 		tp->to_reset = 0;
7813 
7814 		tp->sval    = 0;
7815 		tp->wval    = np->rv_scntl3;
7816 		tp->uval    = np->rv_scntl4;
7817 
7818 		if (tp->usrsync != 255) {
7819 			if (tp->usrsync <= np->maxsync) {
7820 				if (tp->usrsync < np->minsync) {
7821 					tp->usrsync = np->minsync;
7822 				}
7823 			}
7824 			else
7825 				tp->usrsync = 255;
7826 		};
7827 
7828 		if (tp->usrwide > np->maxwide)
7829 			tp->usrwide = np->maxwide;
7830 
7831 		ncr_negotiate (np, tp);
7832 	}
7833 
7834 	/*
7835 	**    Download SCSI SCRIPTS to on-chip RAM if present,
7836 	**    and start script processor.
7837 	**    We do the download preferently from the CPU.
7838 	**    For platforms that may not support PCI memory mapping,
7839 	**    we use a simple SCRIPTS that performs MEMORY MOVEs.
7840 	*/
7841 	if (np->base2_ba) {
7842 		if (bootverbose)
7843 			printk ("%s: Downloading SCSI SCRIPTS.\n",
7844 				ncr_name(np));
7845 #ifdef SCSI_NCR_PCI_MEM_NOT_SUPPORTED
7846 		if (np->base2_ws == 8192)
7847 			phys = NCB_SCRIPTH0_PHYS (np, start_ram64);
7848 		else
7849 			phys = NCB_SCRIPTH_PHYS (np, start_ram);
7850 #else
7851 		if (np->base2_ws == 8192) {
7852 			memcpy_to_pci(np->base2_va + 4096,
7853 					np->scripth0, sizeof(struct scripth));
7854 			OUTL (nc_mmws, np->scr_ram_seg);
7855 			OUTL (nc_mmrs, np->scr_ram_seg);
7856 			OUTL (nc_sfs,  np->scr_ram_seg);
7857 			phys = NCB_SCRIPTH_PHYS (np, start64);
7858 		}
7859 		else
7860 			phys = NCB_SCRIPT_PHYS (np, init);
7861 		memcpy_to_pci(np->base2_va, np->script0, sizeof(struct script));
7862 #endif /* SCSI_NCR_PCI_MEM_NOT_SUPPORTED */
7863 	}
7864 	else
7865 		phys = NCB_SCRIPT_PHYS (np, init);
7866 
7867 	np->istat_sem = 0;
7868 
7869 	OUTL (nc_dsa, np->p_ncb);
7870 	OUTL_DSP (phys);
7871 }
7872 
7873 /*==========================================================
7874 **
7875 **	Prepare the negotiation values for wide and
7876 **	synchronous transfers.
7877 **
7878 **==========================================================
7879 */
7880 
7881 static void ncr_negotiate (struct ncb* np, struct tcb* tp)
7882 {
7883 	/*
7884 	**	minsync unit is 4ns !
7885 	*/
7886 
7887 	u_long minsync = tp->usrsync;
7888 
7889 	/*
7890 	**	SCSI bus mode limit
7891 	*/
7892 
7893 	if (np->scsi_mode && np->scsi_mode == SMODE_SE) {
7894 		if (minsync < 12) minsync = 12;
7895 	}
7896 
7897 	/*
7898 	**	our limit ..
7899 	*/
7900 
7901 	if (minsync < np->minsync)
7902 		minsync = np->minsync;
7903 
7904 	/*
7905 	**	divider limit
7906 	*/
7907 
7908 	if (minsync > np->maxsync)
7909 		minsync = 255;
7910 
7911 	tp->minsync = minsync;
7912 	tp->maxoffs = (minsync<255 ? np->maxoffs : 0);
7913 
7914 	/*
7915 	**	period=0: has to negotiate sync transfer
7916 	*/
7917 
7918 	tp->period=0;
7919 
7920 	/*
7921 	**	widedone=0: has to negotiate wide transfer
7922 	*/
7923 	tp->widedone=0;
7924 }
7925 
7926 /*==========================================================
7927 **
7928 **	Get clock factor and sync divisor for a given
7929 **	synchronous factor period.
7930 **	Returns the clock factor (in sxfer) and scntl3
7931 **	synchronous divisor field.
7932 **
7933 **==========================================================
7934 */
7935 
7936 static void ncr_getsync(ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p)
7937 {
7938 	u_long	clk = np->clock_khz;	/* SCSI clock frequency in kHz	*/
7939 	int	div = np->clock_divn;	/* Number of divisors supported	*/
7940 	u_long	fak;			/* Sync factor in sxfer		*/
7941 	u_long	per;			/* Period in tenths of ns	*/
7942 	u_long	kpc;			/* (per * clk)			*/
7943 
7944 	/*
7945 	**	Compute the synchronous period in tenths of nano-seconds
7946 	**	from sfac.
7947 	**
7948 	**	Note, if sfac == 9, DT is being used. Double the period of 125
7949 	**	to 250.
7950 	*/
7951 	if	(sfac <= 10)	per = 250;
7952 	else if	(sfac == 11)	per = 303;
7953 	else if	(sfac == 12)	per = 500;
7954 	else			per = 40 * sfac;
7955 
7956 	/*
7957 	**	Look for the greatest clock divisor that allows an
7958 	**	input speed faster than the period.
7959 	*/
7960 	kpc = per * clk;
7961 	while (--div >= 0)
7962 		if (kpc >= (div_10M[div] << 2)) break;
7963 
7964 	/*
7965 	**	Calculate the lowest clock factor that allows an output
7966 	**	speed not faster than the period.
7967 	*/
7968 	fak = (kpc - 1) / div_10M[div] + 1;
7969 
7970 #if 0	/* This optimization does not seem very useful */
7971 
7972 	per = (fak * div_10M[div]) / clk;
7973 
7974 	/*
7975 	**	Why not to try the immediate lower divisor and to choose
7976 	**	the one that allows the fastest output speed ?
7977 	**	We dont want input speed too much greater than output speed.
7978 	*/
7979 	if (div >= 1 && fak < 8) {
7980 		u_long fak2, per2;
7981 		fak2 = (kpc - 1) / div_10M[div-1] + 1;
7982 		per2 = (fak2 * div_10M[div-1]) / clk;
7983 		if (per2 < per && fak2 <= 8) {
7984 			fak = fak2;
7985 			per = per2;
7986 			--div;
7987 		}
7988 	}
7989 #endif
7990 
7991 	if (fak < 4) fak = 4;	/* Should never happen, too bad ... */
7992 
7993 	/*
7994 	**	Compute and return sync parameters for the ncr
7995 	*/
7996 	*fakp		= fak - 4;
7997 
7998 	/*
7999 	** If sfac < 25, and 8xx parts, desire that the chip operate at
8000 	** least at Ultra speeds.  Must set bit 7 of scntl3.
8001 	** For C1010, do not set this bit. If operating at Ultra3 speeds,
8002 	**	set the U3EN bit instead.
8003 	*/
8004 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010)  ||
8005 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8006 		*scntl3p	= (div+1) << 4;
8007 		*fakp		= 0;
8008 	}
8009 	else {
8010 		*scntl3p	= ((div+1) << 4) + (sfac < 25 ? 0x80 : 0);
8011 		*fakp		= fak - 4;
8012 	}
8013 }
8014 
8015 /*==========================================================
8016 **
8017 **	Utility routine to return the current bus width
8018 **	synchronous period and offset.
8019 **	Utilizes target sval, wval and uval
8020 **
8021 **==========================================================
8022 */
8023 static void ncr_get_xfer_info(ncb_p np, tcb_p tp, u_char *factor,
8024 			u_char *offset, u_char *width)
8025 {
8026 
8027 	u_char idiv;
8028 	u_long period;
8029 
8030 	*width = (tp->wval & EWS) ? 1 : 0;
8031 
8032 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8033 		(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
8034 		*offset  = (tp->sval & 0x3f);
8035 	else
8036 		*offset  = (tp->sval & 0x1f);
8037 
8038         /*
8039 	 * Midlayer signal to the driver that all of the scsi commands
8040 	 * for the integrity check have completed. Save the negotiated
8041  	 * parameters (extracted from sval, wval and uval).
8042 	 * See ncr_setsync for alg. details.
8043 	 */
8044 
8045 	idiv = (tp->wval>>4) & 0x07;
8046 
8047 	if ( *offset && idiv ) {
8048 	  	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8049 	  		(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)){
8050 		    if (tp->uval & 0x80)
8051 			period = (2*div_10M[idiv-1])/np->clock_khz;
8052 	    	    else
8053 	    		period = (4*div_10M[idiv-1])/np->clock_khz;
8054 	  	}
8055 	  	else
8056 	   	    period = (((tp->sval>>5)+4)*div_10M[idiv-1])/np->clock_khz;
8057 	}
8058 	else
8059 		period = 0xffff;
8060 
8061 	if	(period <= 125)		*factor =   9;
8062 	else if	(period <= 250)		*factor =  10;
8063 	else if	(period <= 303)		*factor  = 11;
8064 	else if	(period <= 500)		*factor  = 12;
8065 	else				*factor  = (period + 40 - 1) / 40;
8066 
8067 }
8068 
8069 
8070 /*==========================================================
8071 **
8072 **	Set actual values, sync status and patch all ccbs of
8073 **	a target according to new sync/wide agreement.
8074 **
8075 **==========================================================
8076 */
8077 
8078 static void ncr_set_sync_wide_status (ncb_p np, u_char target)
8079 {
8080 	ccb_p cp = np->ccbc;
8081 	tcb_p tp = &np->target[target];
8082 
8083 	/*
8084 	**	set actual value and sync_status
8085 	**
8086 	**	TEMP register contains current scripts address
8087 	**	which is data type/direction/dependent.
8088 	*/
8089 	OUTB (nc_sxfer, tp->sval);
8090 	OUTB (nc_scntl3, tp->wval);
8091 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010)  ||
8092 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
8093 		OUTB (nc_scntl4, tp->uval);
8094 
8095 	/*
8096 	**	patch ALL ccbs of this target.
8097 	*/
8098 	for (cp = np->ccbc; cp; cp = cp->link_ccb) {
8099 		if (cp->host_status == HS_IDLE)
8100 			continue;
8101 		if (cp->target != target)
8102 			continue;
8103 		cp->phys.select.sel_scntl3 = tp->wval;
8104 		cp->phys.select.sel_sxfer  = tp->sval;
8105 		if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8106 				(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
8107 			cp->phys.select.sel_scntl4 = tp->uval;
8108 	};
8109 }
8110 
8111 /*==========================================================
8112 **
8113 **	Switch sync mode for current job and it's target
8114 **
8115 **==========================================================
8116 */
8117 
8118 static void ncr_setsync (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer,
8119 					u_char scntl4)
8120 {
8121 	tcb_p tp;
8122 	u_char target = INB (nc_sdid) & 0x0f;
8123 	u_char idiv;
8124 	u_char offset;
8125 
8126 	assert (cp);
8127 	if (!cp) return;
8128 
8129 	assert (target == (cp->target & 0xf));
8130 
8131 	tp = &np->target[target];
8132 
8133 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8134 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8135 		offset = sxfer & 0x3f; /* bits 5-0 */
8136 		scntl3 = (scntl3 & 0xf0) | (tp->wval & EWS);
8137 		scntl4 = (scntl4 & 0x80);
8138 	}
8139 	else {
8140 		offset = sxfer & 0x1f; /* bits 4-0 */
8141 		if (!scntl3 || !offset)
8142 			scntl3 = np->rv_scntl3;
8143 
8144 		scntl3 = (scntl3 & 0xf0) | (tp->wval & EWS) |
8145 				(np->rv_scntl3 & 0x07);
8146 	}
8147 
8148 
8149 	/*
8150 	**	Deduce the value of controller sync period from scntl3.
8151 	**	period is in tenths of nano-seconds.
8152 	*/
8153 
8154 	idiv = ((scntl3 >> 4) & 0x7);
8155 	if ( offset && idiv) {
8156 		if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8157 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8158 			/* Note: If extra data hold clocks are used,
8159 			 * the formulas below must be modified.
8160 			 * When scntl4 == 0, ST mode.
8161 			 */
8162 			if (scntl4 & 0x80)
8163 				tp->period = (2*div_10M[idiv-1])/np->clock_khz;
8164 			else
8165 				tp->period = (4*div_10M[idiv-1])/np->clock_khz;
8166 		}
8167 		else
8168 			tp->period = (((sxfer>>5)+4)*div_10M[idiv-1])/np->clock_khz;
8169 	}
8170 	else
8171 		tp->period = 0xffff;
8172 
8173 
8174 	/*
8175 	**	 Stop there if sync parameters are unchanged
8176 	*/
8177 	if (tp->sval == sxfer && tp->wval == scntl3 && tp->uval == scntl4) return;
8178 	tp->sval = sxfer;
8179 	tp->wval = scntl3;
8180 	tp->uval = scntl4;
8181 
8182 	/*
8183 	**	Bells and whistles   ;-)
8184 	**	Donnot announce negotiations due to auto-sense,
8185 	**	unless user really want us to be verbose. :)
8186 	*/
8187 	if ( bootverbose < 2 && (cp->host_flags & HF_AUTO_SENSE))
8188 		goto next;
8189 	PRINT_TARGET(np, target);
8190 	if (offset) {
8191 		unsigned f10 = 100000 << (tp->widedone ? tp->widedone -1 : 0);
8192 		unsigned mb10 = (f10 + tp->period/2) / tp->period;
8193 		char *scsi;
8194 
8195 		/*
8196 		**  Disable extended Sreq/Sack filtering
8197 		*/
8198 		if ((tp->period <= 2000) &&
8199 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
8200 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
8201 				OUTOFFB (nc_stest2, EXT);
8202 
8203 		/*
8204 		**	Bells and whistles   ;-)
8205 		*/
8206 		if	(tp->period < 250)	scsi = "FAST-80";
8207 		else if	(tp->period < 500)	scsi = "FAST-40";
8208 		else if	(tp->period < 1000)	scsi = "FAST-20";
8209 		else if	(tp->period < 2000)	scsi = "FAST-10";
8210 		else				scsi = "FAST-5";
8211 
8212 		printk ("%s %sSCSI %d.%d MB/s (%d.%d ns, offset %d)\n", scsi,
8213 			tp->widedone > 1 ? "WIDE " : "",
8214 			mb10 / 10, mb10 % 10, tp->period / 10, tp->period % 10,
8215 			offset);
8216 	} else
8217 		printk ("%sasynchronous.\n", tp->widedone > 1 ? "wide " : "");
8218 next:
8219 	/*
8220 	**	set actual value and sync_status
8221 	**	patch ALL ccbs of this target.
8222 	*/
8223 	ncr_set_sync_wide_status(np, target);
8224 }
8225 
8226 
8227 /*==========================================================
8228 **
8229 **	Switch wide mode for current job and it's target
8230 **	SCSI specs say: a SCSI device that accepts a WDTR
8231 **	message shall reset the synchronous agreement to
8232 **	asynchronous mode.
8233 **
8234 **==========================================================
8235 */
8236 
8237 static void ncr_setwide (ncb_p np, ccb_p cp, u_char wide, u_char ack)
8238 {
8239 	u_short target = INB (nc_sdid) & 0x0f;
8240 	tcb_p tp;
8241 	u_char	scntl3;
8242 	u_char	sxfer;
8243 
8244 	assert (cp);
8245 	if (!cp) return;
8246 
8247 	assert (target == (cp->target & 0xf));
8248 
8249 	tp = &np->target[target];
8250 	tp->widedone  =  wide+1;
8251 	scntl3 = (tp->wval & (~EWS)) | (wide ? EWS : 0);
8252 
8253 	sxfer = ack ? 0 : tp->sval;
8254 
8255 	/*
8256 	**	 Stop there if sync/wide parameters are unchanged
8257 	*/
8258 	if (tp->sval == sxfer && tp->wval == scntl3) return;
8259 	tp->sval = sxfer;
8260 	tp->wval = scntl3;
8261 
8262 	/*
8263 	**	Bells and whistles   ;-)
8264 	*/
8265 	if (bootverbose >= 2) {
8266 		PRINT_TARGET(np, target);
8267 		if (scntl3 & EWS)
8268 			printk ("WIDE SCSI (16 bit) enabled.\n");
8269 		else
8270 			printk ("WIDE SCSI disabled.\n");
8271 	}
8272 
8273 	/*
8274 	**	set actual value and sync_status
8275 	**	patch ALL ccbs of this target.
8276 	*/
8277 	ncr_set_sync_wide_status(np, target);
8278 }
8279 
8280 
8281 /*==========================================================
8282 **
8283 **	Switch sync/wide mode for current job and it's target
8284 **	PPR negotiations only
8285 **
8286 **==========================================================
8287 */
8288 
8289 static void ncr_setsyncwide (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer,
8290 				u_char scntl4, u_char wide)
8291 {
8292 	tcb_p tp;
8293 	u_char target = INB (nc_sdid) & 0x0f;
8294 	u_char idiv;
8295 	u_char offset;
8296 
8297 	assert (cp);
8298 	if (!cp) return;
8299 
8300 	assert (target == (cp->target & 0xf));
8301 
8302 	tp = &np->target[target];
8303 	tp->widedone  =  wide+1;
8304 
8305 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8306 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8307 		offset = sxfer & 0x3f; /* bits 5-0 */
8308 		scntl3 = (scntl3 & 0xf0) | (wide ? EWS : 0);
8309 		scntl4 = (scntl4 & 0x80);
8310 	}
8311 	else {
8312 		offset = sxfer & 0x1f; /* bits 4-0 */
8313 		if (!scntl3 || !offset)
8314 			scntl3 = np->rv_scntl3;
8315 
8316 		scntl3 = (scntl3 & 0xf0) | (wide ? EWS : 0) |
8317 				(np->rv_scntl3 & 0x07);
8318 	}
8319 
8320 
8321 	/*
8322 	**	Deduce the value of controller sync period from scntl3.
8323 	**	period is in tenths of nano-seconds.
8324 	*/
8325 
8326 	idiv = ((scntl3 >> 4) & 0x7);
8327 	if ( offset && idiv) {
8328 		if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8329 			(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8330 			/* Note: If extra data hold clocks are used,
8331 			 * the formulas below must be modified.
8332 			 * When scntl4 == 0, ST mode.
8333 			 */
8334 			if (scntl4 & 0x80)
8335 				tp->period = (2*div_10M[idiv-1])/np->clock_khz;
8336 			else
8337 				tp->period = (4*div_10M[idiv-1])/np->clock_khz;
8338 		}
8339 		else
8340 			tp->period = (((sxfer>>5)+4)*div_10M[idiv-1])/np->clock_khz;
8341 	}
8342 	else
8343 		tp->period = 0xffff;
8344 
8345 
8346 	/*
8347 	**	 Stop there if sync parameters are unchanged
8348 	*/
8349 	if (tp->sval == sxfer && tp->wval == scntl3 && tp->uval == scntl4) return;
8350 	tp->sval = sxfer;
8351 	tp->wval = scntl3;
8352 	tp->uval = scntl4;
8353 
8354 	/*
8355 	**	Bells and whistles   ;-)
8356 	**	Donnot announce negotiations due to auto-sense,
8357 	**	unless user really want us to be verbose. :)
8358 	*/
8359 	if ( bootverbose < 2 && (cp->host_flags & HF_AUTO_SENSE))
8360 		goto next;
8361 	PRINT_TARGET(np, target);
8362 	if (offset) {
8363 		unsigned f10 = 100000 << (tp->widedone ? tp->widedone -1 : 0);
8364 		unsigned mb10 = (f10 + tp->period/2) / tp->period;
8365 		char *scsi;
8366 
8367 		/*
8368 		**  Disable extended Sreq/Sack filtering
8369 		*/
8370 		if ((tp->period <= 2000) &&
8371 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
8372 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
8373 				OUTOFFB (nc_stest2, EXT);
8374 
8375 		/*
8376 		**	Bells and whistles   ;-)
8377 		*/
8378 		if	(tp->period < 250)	scsi = "FAST-80";
8379 		else if	(tp->period < 500)	scsi = "FAST-40";
8380 		else if	(tp->period < 1000)	scsi = "FAST-20";
8381 		else if	(tp->period < 2000)	scsi = "FAST-10";
8382 		else				scsi = "FAST-5";
8383 
8384 		printk ("%s %sSCSI %d.%d MB/s (%d.%d ns, offset %d)\n", scsi,
8385 			tp->widedone > 1 ? "WIDE " : "",
8386 			mb10 / 10, mb10 % 10, tp->period / 10, tp->period % 10,
8387 			offset);
8388 	} else
8389 		printk ("%sasynchronous.\n", tp->widedone > 1 ? "wide " : "");
8390 next:
8391 	/*
8392 	**	set actual value and sync_status
8393 	**	patch ALL ccbs of this target.
8394 	*/
8395 	ncr_set_sync_wide_status(np, target);
8396 }
8397 
8398 
8399 
8400 
8401 /*==========================================================
8402 **
8403 **	Switch tagged mode for a target.
8404 **
8405 **==========================================================
8406 */
8407 
8408 static void ncr_setup_tags (ncb_p np, u_char tn, u_char ln)
8409 {
8410 	tcb_p tp = &np->target[tn];
8411 	lcb_p lp = ncr_lp(np, tp, ln);
8412 	u_short reqtags, maxdepth;
8413 
8414 	/*
8415 	**	Just in case ...
8416 	*/
8417 	if ((!tp) || (!lp))
8418 		return;
8419 
8420 	/*
8421 	**	If SCSI device queue depth is not yet set, leave here.
8422 	*/
8423 	if (!lp->scdev_depth)
8424 		return;
8425 
8426 	/*
8427 	**	Donnot allow more tags than the SCSI driver can queue
8428 	**	for this device.
8429 	**	Donnot allow more tags than we can handle.
8430 	*/
8431 	maxdepth = lp->scdev_depth;
8432 	if (maxdepth > lp->maxnxs)	maxdepth    = lp->maxnxs;
8433 	if (lp->maxtags > maxdepth)	lp->maxtags = maxdepth;
8434 	if (lp->numtags > maxdepth)	lp->numtags = maxdepth;
8435 
8436 	/*
8437 	**	only devices conformant to ANSI Version >= 2
8438 	**	only devices capable of tagged commands
8439 	**	only if enabled by user ..
8440 	*/
8441 	if ((lp->inq_byte7 & INQ7_QUEUE) && lp->numtags > 1) {
8442 		reqtags = lp->numtags;
8443 	} else {
8444 		reqtags = 1;
8445 	};
8446 
8447 	/*
8448 	**	Update max number of tags
8449 	*/
8450 	lp->numtags = reqtags;
8451 	if (lp->numtags > lp->maxtags)
8452 		lp->maxtags = lp->numtags;
8453 
8454 	/*
8455 	**	If we want to switch tag mode, we must wait
8456 	**	for no CCB to be active.
8457 	*/
8458 	if	(reqtags > 1 && lp->usetags) {	 /* Stay in tagged mode    */
8459 		if (lp->queuedepth == reqtags)	 /* Already announced	   */
8460 			return;
8461 		lp->queuedepth	= reqtags;
8462 	}
8463 	else if	(reqtags <= 1 && !lp->usetags) { /* Stay in untagged mode  */
8464 		lp->queuedepth	= reqtags;
8465 		return;
8466 	}
8467 	else {					 /* Want to switch tag mode */
8468 		if (lp->busyccbs)		 /* If not yet safe, return */
8469 			return;
8470 		lp->queuedepth	= reqtags;
8471 		lp->usetags	= reqtags > 1 ? 1 : 0;
8472 	}
8473 
8474 	/*
8475 	**	Patch the lun mini-script, according to tag mode.
8476 	*/
8477 	lp->resel_task = lp->usetags?
8478 			cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_tag)) :
8479 			cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_notag));
8480 
8481 	/*
8482 	**	Announce change to user.
8483 	*/
8484 	if (bootverbose) {
8485 		PRINT_LUN(np, tn, ln);
8486 		if (lp->usetags)
8487 			printk("tagged command queue depth set to %d\n", reqtags);
8488 		else
8489 			printk("tagged command queueing disabled\n");
8490 	}
8491 }
8492 
8493 /*----------------------------------------------------
8494 **
8495 **	handle user commands
8496 **
8497 **----------------------------------------------------
8498 */
8499 
8500 #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
8501 
8502 static void ncr_usercmd (ncb_p np)
8503 {
8504 	u_char t;
8505 	tcb_p tp;
8506 	int ln;
8507 	u_long size;
8508 
8509 	switch (np->user.cmd) {
8510 	case 0: return;
8511 
8512 	case UC_SETDEBUG:
8513 #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
8514 		ncr_debug = np->user.data;
8515 #endif
8516 		break;
8517 
8518 	case UC_SETORDER:
8519 		np->order = np->user.data;
8520 		break;
8521 
8522 	case UC_SETVERBOSE:
8523 		np->verbose = np->user.data;
8524 		break;
8525 
8526 	default:
8527 		/*
8528 		**	We assume that other commands apply to targets.
8529 		**	This should always be the case and avoid the below
8530 		**	4 lines to be repeated 5 times.
8531 		*/
8532 		for (t = 0; t < MAX_TARGET; t++) {
8533 			if (!((np->user.target >> t) & 1))
8534 				continue;
8535 			tp = &np->target[t];
8536 
8537 			switch (np->user.cmd) {
8538 
8539 			case UC_SETSYNC:
8540 				tp->usrsync = np->user.data;
8541 				ncr_negotiate (np, tp);
8542 				break;
8543 
8544 			case UC_SETWIDE:
8545 				size = np->user.data;
8546 				if (size > np->maxwide)
8547 					size=np->maxwide;
8548 				tp->usrwide = size;
8549 				ncr_negotiate (np, tp);
8550 				break;
8551 
8552 			case UC_SETTAGS:
8553 				tp->usrtags = np->user.data;
8554 				for (ln = 0; ln < MAX_LUN; ln++) {
8555 					lcb_p lp;
8556 					lp = ncr_lp(np, tp, ln);
8557 					if (!lp)
8558 						continue;
8559 					lp->numtags = np->user.data;
8560 					lp->maxtags = lp->numtags;
8561 					ncr_setup_tags (np, t, ln);
8562 				}
8563 				break;
8564 
8565 			case UC_RESETDEV:
8566 				tp->to_reset = 1;
8567 				np->istat_sem = SEM;
8568 				OUTB (nc_istat, SIGP|SEM);
8569 				break;
8570 
8571 			case UC_CLEARDEV:
8572 				for (ln = 0; ln < MAX_LUN; ln++) {
8573 					lcb_p lp;
8574 					lp = ncr_lp(np, tp, ln);
8575 					if (lp)
8576 						lp->to_clear = 1;
8577 				}
8578 				np->istat_sem = SEM;
8579 				OUTB (nc_istat, SIGP|SEM);
8580 				break;
8581 
8582 			case UC_SETFLAG:
8583 				tp->usrflag = np->user.data;
8584 				break;
8585 			}
8586 		}
8587 		break;
8588 	}
8589 	np->user.cmd=0;
8590 }
8591 #endif
8592 
8593 /*==========================================================
8594 **
8595 **
8596 **	ncr timeout handler.
8597 **
8598 **
8599 **==========================================================
8600 **
8601 **	Misused to keep the driver running when
8602 **	interrupts are not configured correctly.
8603 **
8604 **----------------------------------------------------------
8605 */
8606 
8607 static void ncr_timeout (ncb_p np)
8608 {
8609 	u_long	thistime = ktime_get(0);
8610 
8611 	/*
8612 	**	If release process in progress, let's go
8613 	**	Set the release stage from 1 to 2 to synchronize
8614 	**	with the release process.
8615 	*/
8616 
8617 	if (np->release_stage) {
8618 		if (np->release_stage == 1) np->release_stage = 2;
8619 		return;
8620 	}
8621 
8622 #ifdef SCSI_NCR_PCIQ_BROKEN_INTR
8623 	np->timer.expires = ktime_get((HZ+9)/10);
8624 #else
8625 	np->timer.expires = ktime_get(SCSI_NCR_TIMER_INTERVAL);
8626 #endif
8627 	add_timer(&np->timer);
8628 
8629 	/*
8630 	**	If we are resetting the ncr, wait for settle_time before
8631 	**	clearing it. Then command processing will be resumed.
8632 	*/
8633 	if (np->settle_time) {
8634 		if (np->settle_time <= thistime) {
8635 			if (bootverbose > 1)
8636 				printk("%s: command processing resumed\n", ncr_name(np));
8637 			np->settle_time	= 0;
8638 			requeue_waiting_list(np);
8639 		}
8640 		return;
8641 	}
8642 
8643 	/*
8644 	**	Nothing to do for now, but that may come.
8645 	*/
8646 	if (np->lasttime + 4*HZ < thistime) {
8647 		np->lasttime = thistime;
8648 	}
8649 
8650 #ifdef SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
8651 	/*
8652 	**	Some way-broken PCI bridges may lead to
8653 	**	completions being lost when the clearing
8654 	**	of the INTFLY flag by the CPU occurs
8655 	**	concurrently with the chip raising this flag.
8656 	**	If this ever happen, lost completions will
8657 	**	be reaped here.
8658 	*/
8659 	ncr_wakeup_done(np);
8660 #endif
8661 
8662 #ifdef SCSI_NCR_PCIQ_BROKEN_INTR
8663 	if (INB(nc_istat) & (INTF|SIP|DIP)) {
8664 
8665 		/*
8666 		**	Process pending interrupts.
8667 		*/
8668 		if (DEBUG_FLAGS & DEBUG_TINY) printk ("{");
8669 		ncr_exception (np);
8670 		if (DEBUG_FLAGS & DEBUG_TINY) printk ("}");
8671 	}
8672 #endif /* SCSI_NCR_PCIQ_BROKEN_INTR */
8673 }
8674 
8675 /*==========================================================
8676 **
8677 **	log message for real hard errors
8678 **
8679 **	"ncr0 targ 0?: ERROR (ds:si) (so-si-sd) (sxfer/scntl3) @ name (dsp:dbc)."
8680 **	"	      reg: r0 r1 r2 r3 r4 r5 r6 ..... rf."
8681 **
8682 **	exception register:
8683 **		ds:	dstat
8684 **		si:	sist
8685 **
8686 **	SCSI bus lines:
8687 **		so:	control lines as driver by NCR.
8688 **		si:	control lines as seen by NCR.
8689 **		sd:	scsi data lines as seen by NCR.
8690 **
8691 **	wide/fastmode:
8692 **		sxfer:	(see the manual)
8693 **		scntl3:	(see the manual)
8694 **
8695 **	current script command:
8696 **		dsp:	script address (relative to start of script).
8697 **		dbc:	first word of script command.
8698 **
8699 **	First 24 register of the chip:
8700 **		r0..rf
8701 **
8702 **==========================================================
8703 */
8704 
8705 static void ncr_log_hard_error(ncb_p np, u_short sist, u_char dstat)
8706 {
8707 	u_int32	dsp;
8708 	int	script_ofs;
8709 	int	script_size;
8710 	char	*script_name;
8711 	u_char	*script_base;
8712 	int	i;
8713 
8714 	dsp	= INL (nc_dsp);
8715 
8716 	if (dsp > np->p_script && dsp <= np->p_script + sizeof(struct script)) {
8717 		script_ofs	= dsp - np->p_script;
8718 		script_size	= sizeof(struct script);
8719 		script_base	= (u_char *) np->script0;
8720 		script_name	= "script";
8721 	}
8722 	else if (np->p_scripth < dsp &&
8723 		 dsp <= np->p_scripth + sizeof(struct scripth)) {
8724 		script_ofs	= dsp - np->p_scripth;
8725 		script_size	= sizeof(struct scripth);
8726 		script_base	= (u_char *) np->scripth0;
8727 		script_name	= "scripth";
8728 	} else {
8729 		script_ofs	= dsp;
8730 		script_size	= 0;
8731 		script_base	= 0;
8732 		script_name	= "mem";
8733 	}
8734 
8735 	printk ("%s:%d: ERROR (%x:%x) (%x-%x-%x) (%x/%x) @ (%s %x:%08x).\n",
8736 		ncr_name (np), (unsigned)INB (nc_sdid)&0x0f, dstat, sist,
8737 		(unsigned)INB (nc_socl), (unsigned)INB (nc_sbcl), (unsigned)INB (nc_sbdl),
8738 		(unsigned)INB (nc_sxfer),(unsigned)INB (nc_scntl3), script_name, script_ofs,
8739 		(unsigned)INL (nc_dbc));
8740 
8741 	if (((script_ofs & 3) == 0) &&
8742 	    (unsigned)script_ofs < script_size) {
8743 		printk ("%s: script cmd = %08x\n", ncr_name(np),
8744 			scr_to_cpu((int) *(ncrcmd *)(script_base + script_ofs)));
8745 	}
8746 
8747         printk ("%s: regdump:", ncr_name(np));
8748         for (i=0; i<24;i++)
8749             printk (" %02x", (unsigned)INB_OFF(i));
8750         printk (".\n");
8751 }
8752 
8753 /*============================================================
8754 **
8755 **	ncr chip exception handler.
8756 **
8757 **============================================================
8758 **
8759 **	In normal situations, interrupt conditions occur one at
8760 **	a time. But when something bad happens on the SCSI BUS,
8761 **	the chip may raise several interrupt flags before
8762 **	stopping and interrupting the CPU. The additionnal
8763 **	interrupt flags are stacked in some extra registers
8764 **	after the SIP and/or DIP flag has been raised in the
8765 **	ISTAT. After the CPU has read the interrupt condition
8766 **	flag from SIST or DSTAT, the chip unstacks the other
8767 **	interrupt flags and sets the corresponding bits in
8768 **	SIST or DSTAT. Since the chip starts stacking once the
8769 **	SIP or DIP flag is set, there is a small window of time
8770 **	where the stacking does not occur.
8771 **
8772 **	Typically, multiple interrupt conditions may happen in
8773 **	the following situations:
8774 **
8775 **	- SCSI parity error + Phase mismatch  (PAR|MA)
8776 **	  When an parity error is detected in input phase
8777 **	  and the device switches to msg-in phase inside a
8778 **	  block MOV.
8779 **	- SCSI parity error + Unexpected disconnect (PAR|UDC)
8780 **	  When a stupid device does not want to handle the
8781 **	  recovery of an SCSI parity error.
8782 **	- Some combinations of STO, PAR, UDC, ...
8783 **	  When using non compliant SCSI stuff, when user is
8784 **	  doing non compliant hot tampering on the BUS, when
8785 **	  something really bad happens to a device, etc ...
8786 **
8787 **	The heuristic suggested by SYMBIOS to handle
8788 **	multiple interrupts is to try unstacking all
8789 **	interrupts conditions and to handle them on some
8790 **	priority based on error severity.
8791 **	This will work when the unstacking has been
8792 **	successful, but we cannot be 100 % sure of that,
8793 **	since the CPU may have been faster to unstack than
8794 **	the chip is able to stack. Hmmm ... But it seems that
8795 **	such a situation is very unlikely to happen.
8796 **
8797 **	If this happen, for example STO catched by the CPU
8798 **	then UDC happenning before the CPU have restarted
8799 **	the SCRIPTS, the driver may wrongly complete the
8800 **	same command on UDC, since the SCRIPTS didn't restart
8801 **	and the DSA still points to the same command.
8802 **	We avoid this situation by setting the DSA to an
8803 **	invalid value when the CCB is completed and before
8804 **	restarting the SCRIPTS.
8805 **
8806 **	Another issue is that we need some section of our
8807 **	recovery procedures to be somehow uninterruptible and
8808 **	that the SCRIPTS processor does not provides such a
8809 **	feature. For this reason, we handle recovery preferently
8810 **	from the C code	and check against some SCRIPTS
8811 **	critical sections from the C code.
8812 **
8813 **	Hopefully, the interrupt handling of the driver is now
8814 **	able to resist to weird BUS error conditions, but donnot
8815 **	ask me for any guarantee that it will never fail. :-)
8816 **	Use at your own decision and risk.
8817 **
8818 **============================================================
8819 */
8820 
8821 void ncr_exception (ncb_p np)
8822 {
8823 	u_char	istat, istatc;
8824 	u_char	dstat;
8825 	u_short	sist;
8826 	int	i;
8827 
8828 	/*
8829 	**	interrupt on the fly ?
8830 	**
8831 	**	A `dummy read' is needed to ensure that the
8832 	**	clear of the INTF flag reaches the device
8833 	**	before the scanning of the DONE queue.
8834 	*/
8835 	istat = INB (nc_istat);
8836 	if (istat & INTF) {
8837 		OUTB (nc_istat, (istat & SIGP) | INTF | np->istat_sem);
8838 		istat = INB (nc_istat);		/* DUMMY READ */
8839 		if (DEBUG_FLAGS & DEBUG_TINY) printk ("F ");
8840 		(void)ncr_wakeup_done (np);
8841 	};
8842 
8843 	if (!(istat & (SIP|DIP)))
8844 		return;
8845 
8846 #if 0	/* We should never get this one */
8847 	if (istat & CABRT)
8848 		OUTB (nc_istat, CABRT);
8849 #endif
8850 
8851 	/*
8852 	**	Steinbach's Guideline for Systems Programming:
8853 	**	Never test for an error condition you don't know how to handle.
8854 	*/
8855 
8856 	/*========================================================
8857 	**	PAR and MA interrupts may occur at the same time,
8858 	**	and we need to know of both in order to handle
8859 	**	this situation properly. We try to unstack SCSI
8860 	**	interrupts for that reason. BTW, I dislike a LOT
8861 	**	such a loop inside the interrupt routine.
8862 	**	Even if DMA interrupt stacking is very unlikely to
8863 	**	happen, we also try unstacking these ones, since
8864 	**	this has no performance impact.
8865 	**=========================================================
8866 	*/
8867 	sist	= 0;
8868 	dstat	= 0;
8869 	istatc	= istat;
8870 	do {
8871 		if (istatc & SIP)
8872 			sist  |= INW (nc_sist);
8873 		if (istatc & DIP)
8874 			dstat |= INB (nc_dstat);
8875 		istatc = INB (nc_istat);
8876 		istat |= istatc;
8877 	} while (istatc & (SIP|DIP));
8878 
8879 	if (DEBUG_FLAGS & DEBUG_TINY)
8880 		printk ("<%d|%x:%x|%x:%x>",
8881 			(int)INB(nc_scr0),
8882 			dstat,sist,
8883 			(unsigned)INL(nc_dsp),
8884 			(unsigned)INL(nc_dbc));
8885 
8886 	/*
8887 	**	On paper, a memory barrier may be needed here.
8888 	**	And since we are paranoid ... :)
8889 	*/
8890 	MEMORY_BARRIER();
8891 
8892 	/*========================================================
8893 	**	First, interrupts we want to service cleanly.
8894 	**
8895 	**	Phase mismatch (MA) is the most frequent interrupt
8896 	**	for chip earlier than the 896 and so we have to service
8897 	**	it as quickly as possible.
8898 	**	A SCSI parity error (PAR) may be combined with a phase
8899 	**	mismatch condition (MA).
8900 	**	Programmed interrupts (SIR) are used to call the C code
8901 	**	from SCRIPTS.
8902 	**	The single step interrupt (SSI) is not used in this
8903 	**	driver.
8904 	**=========================================================
8905 	*/
8906 
8907 	if (!(sist  & (STO|GEN|HTH|SGE|UDC|SBMC|RST)) &&
8908 	    !(dstat & (MDPE|BF|ABRT|IID))) {
8909 		if	(sist & PAR)	ncr_int_par (np, sist);
8910 		else if (sist & MA)	ncr_int_ma (np);
8911 		else if (dstat & SIR)	ncr_int_sir (np);
8912 		else if (dstat & SSI)	OUTONB_STD ();
8913 		else			goto unknown_int;
8914 		return;
8915 	};
8916 
8917 	/*========================================================
8918 	**	Now, interrupts that donnot happen in normal
8919 	**	situations and that we may need to recover from.
8920 	**
8921 	**	On SCSI RESET (RST), we reset everything.
8922 	**	On SCSI BUS MODE CHANGE (SBMC), we complete all
8923 	**	active CCBs with RESET status, prepare all devices
8924 	**	for negotiating again and restart the SCRIPTS.
8925 	**	On STO and UDC, we complete the CCB with the corres-
8926 	**	ponding status and restart the SCRIPTS.
8927 	**=========================================================
8928 	*/
8929 
8930 	if (sist & RST) {
8931 		ncr_init (np, 1, bootverbose ? "scsi reset" : NULL, HS_RESET);
8932 		return;
8933 	};
8934 
8935 	OUTB (nc_ctest3, np->rv_ctest3 | CLF);	/* clear dma fifo  */
8936 	OUTB (nc_stest3, TE|CSF);		/* clear scsi fifo */
8937 
8938 	if (!(sist  & (GEN|HTH|SGE)) &&
8939 	    !(dstat & (MDPE|BF|ABRT|IID))) {
8940 		if	(sist & SBMC)	ncr_int_sbmc (np);
8941 		else if (sist & STO)	ncr_int_sto (np);
8942 		else if (sist & UDC)	ncr_int_udc (np);
8943 		else			goto unknown_int;
8944 		return;
8945 	};
8946 
8947 	/*=========================================================
8948 	**	Now, interrupts we are not able to recover cleanly.
8949 	**
8950 	**	Do the register dump.
8951 	**	Log message for hard errors.
8952 	**	Reset everything.
8953 	**=========================================================
8954 	*/
8955 	if (ktime_exp(np->regtime)) {
8956 		np->regtime = ktime_get(10*HZ);
8957 		for (i = 0; i<sizeof(np->regdump); i++)
8958 			((char*)&np->regdump)[i] = INB_OFF(i);
8959 		np->regdump.nc_dstat = dstat;
8960 		np->regdump.nc_sist  = sist;
8961 	};
8962 
8963 	ncr_log_hard_error(np, sist, dstat);
8964 
8965 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
8966 		(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)) {
8967 		u_char ctest4_o, ctest4_m;
8968 		u_char shadow;
8969 
8970 		/*
8971 		 * Get shadow register data
8972 		 * Write 1 to ctest4
8973 		 */
8974 		ctest4_o = INB(nc_ctest4);
8975 
8976 		OUTB(nc_ctest4, ctest4_o | 0x10);
8977 
8978 		ctest4_m = INB(nc_ctest4);
8979 		shadow = INW_OFF(0x42);
8980 
8981 		OUTB(nc_ctest4, ctest4_o);
8982 
8983 		printk("%s: ctest4/sist original 0x%x/0x%X  mod: 0x%X/0x%x\n",
8984 			ncr_name(np), ctest4_o, sist, ctest4_m, shadow);
8985 	}
8986 
8987 	if ((sist & (GEN|HTH|SGE)) ||
8988 		(dstat & (MDPE|BF|ABRT|IID))) {
8989 		ncr_start_reset(np);
8990 		return;
8991 	};
8992 
8993 unknown_int:
8994 	/*=========================================================
8995 	**	We just miss the cause of the interrupt. :(
8996 	**	Print a message. The timeout will do the real work.
8997 	**=========================================================
8998 	*/
8999 	printk(	"%s: unknown interrupt(s) ignored, "
9000 		"ISTAT=0x%x DSTAT=0x%x SIST=0x%x\n",
9001 		ncr_name(np), istat, dstat, sist);
9002 }
9003 
9004 
9005 /*==========================================================
9006 **
9007 **	generic recovery from scsi interrupt
9008 **
9009 **==========================================================
9010 **
9011 **	The doc says that when the chip gets an SCSI interrupt,
9012 **	it tries to stop in an orderly fashion, by completing
9013 **	an instruction fetch that had started or by flushing
9014 **	the DMA fifo for a write to memory that was executing.
9015 **	Such a fashion is not enough to know if the instruction
9016 **	that was just before the current DSP value has been
9017 **	executed or not.
9018 **
9019 **	There are 3 small SCRIPTS sections that deal with the
9020 **	start queue and the done queue that may break any
9021 **	assomption from the C code if we are interrupted
9022 **	inside, so we reset if it happens. Btw, since these
9023 **	SCRIPTS sections are executed while the SCRIPTS hasn't
9024 **	started SCSI operations, it is very unlikely to happen.
9025 **
9026 **	All the driver data structures are supposed to be
9027 **	allocated from the same 4 GB memory window, so there
9028 **	is a 1 to 1 relationship between DSA and driver data
9029 **	structures. Since we are careful :) to invalidate the
9030 **	DSA when we complete a command or when the SCRIPTS
9031 **	pushes a DSA into a queue, we can trust it when it
9032 **	points to a CCB.
9033 **
9034 **----------------------------------------------------------
9035 */
9036 static void ncr_recover_scsi_int (ncb_p np, u_char hsts)
9037 {
9038 	u_int32	dsp	= INL (nc_dsp);
9039 	u_int32	dsa	= INL (nc_dsa);
9040 	ccb_p cp	= ncr_ccb_from_dsa(np, dsa);
9041 
9042 	/*
9043 	**	If we haven't been interrupted inside the SCRIPTS
9044 	**	critical pathes, we can safely restart the SCRIPTS
9045 	**	and trust the DSA value if it matches a CCB.
9046 	*/
9047 	if ((!(dsp > NCB_SCRIPT_PHYS (np, getjob_begin) &&
9048 	       dsp < NCB_SCRIPT_PHYS (np, getjob_end) + 1)) &&
9049 	    (!(dsp > NCB_SCRIPT_PHYS (np, ungetjob) &&
9050 	       dsp < NCB_SCRIPT_PHYS (np, reselect) + 1)) &&
9051 	    (!(dsp > NCB_SCRIPTH_PHYS (np, sel_for_abort) &&
9052 	       dsp < NCB_SCRIPTH_PHYS (np, sel_for_abort_1) + 1)) &&
9053 	    (!(dsp > NCB_SCRIPT_PHYS (np, done) &&
9054 	       dsp < NCB_SCRIPT_PHYS (np, done_end) + 1))) {
9055 		if (cp) {
9056 			cp->host_status = hsts;
9057 			ncr_complete (np, cp);
9058 		}
9059 		OUTL (nc_dsa, DSA_INVALID);
9060 		OUTB (nc_ctest3, np->rv_ctest3 | CLF);	/* clear dma fifo  */
9061 		OUTB (nc_stest3, TE|CSF);		/* clear scsi fifo */
9062 		OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
9063 	}
9064 	else
9065 		goto reset_all;
9066 
9067 	return;
9068 
9069 reset_all:
9070 	ncr_start_reset(np);
9071 }
9072 
9073 /*==========================================================
9074 **
9075 **	ncr chip exception handler for selection timeout
9076 **
9077 **==========================================================
9078 **
9079 **	There seems to be a bug in the 53c810.
9080 **	Although a STO-Interrupt is pending,
9081 **	it continues executing script commands.
9082 **	But it will fail and interrupt (IID) on
9083 **	the next instruction where it's looking
9084 **	for a valid phase.
9085 **
9086 **----------------------------------------------------------
9087 */
9088 
9089 void ncr_int_sto (ncb_p np)
9090 {
9091 	u_int32	dsp	= INL (nc_dsp);
9092 
9093 	if (DEBUG_FLAGS & DEBUG_TINY) printk ("T");
9094 
9095 	if (dsp == NCB_SCRIPT_PHYS (np, wf_sel_done) + 8 ||
9096 	    !(driver_setup.recovery & 1))
9097 		ncr_recover_scsi_int(np, HS_SEL_TIMEOUT);
9098 	else
9099 		ncr_start_reset(np);
9100 }
9101 
9102 /*==========================================================
9103 **
9104 **	ncr chip exception handler for unexpected disconnect
9105 **
9106 **==========================================================
9107 **
9108 **----------------------------------------------------------
9109 */
9110 void ncr_int_udc (ncb_p np)
9111 {
9112 	u_int32 dsa = INL (nc_dsa);
9113 	ccb_p   cp  = ncr_ccb_from_dsa(np, dsa);
9114 
9115 	/*
9116 	 * Fix Up. Some disks respond to a PPR negotation with
9117 	 * a bus free instead of a message reject.
9118 	 * Disable ppr negotiation if this is first time
9119 	 * tried ppr negotiation.
9120 	 */
9121 	if (cp) {
9122 		tcb_p tp = &np->target[cp->target];
9123 		if (tp->ppr_negotiation == 1)
9124 			tp->ppr_negotiation = 0;
9125 	}
9126 
9127 	printk ("%s: unexpected disconnect\n", ncr_name(np));
9128 	ncr_recover_scsi_int(np, HS_UNEXPECTED);
9129 }
9130 
9131 /*==========================================================
9132 **
9133 **	ncr chip exception handler for SCSI bus mode change
9134 **
9135 **==========================================================
9136 **
9137 **	spi2-r12 11.2.3 says a transceiver mode change must
9138 **	generate a reset event and a device that detects a reset
9139 **	event shall initiate a hard reset. It says also that a
9140 **	device that detects a mode change shall set data transfer
9141 **	mode to eight bit asynchronous, etc...
9142 **	So, just resetting should be enough.
9143 **
9144 **
9145 **----------------------------------------------------------
9146 */
9147 
9148 static void ncr_int_sbmc (ncb_p np)
9149 {
9150 	u_char scsi_mode = INB (nc_stest4) & SMODE;
9151 
9152 	printk("%s: SCSI bus mode change from %x to %x.\n",
9153 		ncr_name(np), np->scsi_mode, scsi_mode);
9154 
9155 	np->scsi_mode = scsi_mode;
9156 
9157 
9158 	/*
9159 	**	Suspend command processing for 1 second and
9160 	**	reinitialize all except the chip.
9161 	*/
9162 	np->settle_time	= ktime_get(1*HZ);
9163 	ncr_init (np, 0, bootverbose ? "scsi mode change" : NULL, HS_RESET);
9164 }
9165 
9166 /*==========================================================
9167 **
9168 **	ncr chip exception handler for SCSI parity error.
9169 **
9170 **==========================================================
9171 **
9172 **	When the chip detects a SCSI parity error and is
9173 **	currently executing a (CH)MOV instruction, it does
9174 **	not interrupt immediately, but tries to finish the
9175 **	transfer of the current scatter entry before
9176 **	interrupting. The following situations may occur:
9177 **
9178 **	- The complete scatter entry has been transferred
9179 **	  without the device having changed phase.
9180 **	  The chip will then interrupt with the DSP pointing
9181 **	  to the instruction that follows the MOV.
9182 **
9183 **	- A phase mismatch occurs before the MOV finished
9184 **	  and phase errors are to be handled by the C code.
9185 **	  The chip will then interrupt with both PAR and MA
9186 **	  conditions set.
9187 **
9188 **	- A phase mismatch occurs before the MOV finished and
9189 **	  phase errors are to be handled by SCRIPTS (895A or 896).
9190 **	  The chip will load the DSP with the phase mismatch
9191 **	  JUMP address and interrupt the host processor.
9192 **
9193 **----------------------------------------------------------
9194 */
9195 
9196 static void ncr_int_par (ncb_p np, u_short sist)
9197 {
9198 	u_char	hsts	= INB (HS_PRT);
9199 	u_int32	dsp	= INL (nc_dsp);
9200 	u_int32	dbc	= INL (nc_dbc);
9201 	u_int32	dsa	= INL (nc_dsa);
9202 	u_char	sbcl	= INB (nc_sbcl);
9203 	u_char	cmd	= dbc >> 24;
9204 	int phase	= cmd & 7;
9205 	ccb_p	cp	= ncr_ccb_from_dsa(np, dsa);
9206 
9207 	printk("%s: SCSI parity error detected: SCR1=%d DBC=%x SBCL=%x\n",
9208 		ncr_name(np), hsts, dbc, sbcl);
9209 
9210 	/*
9211 	**	Check that the chip is connected to the SCSI BUS.
9212 	*/
9213 	if (!(INB (nc_scntl1) & ISCON)) {
9214 	    	if (!(driver_setup.recovery & 1)) {
9215 			ncr_recover_scsi_int(np, HS_FAIL);
9216 			return;
9217 		}
9218 		goto reset_all;
9219 	}
9220 
9221 	/*
9222 	**	If the nexus is not clearly identified, reset the bus.
9223 	**	We will try to do better later.
9224 	*/
9225 	if (!cp)
9226 		goto reset_all;
9227 
9228 	/*
9229 	**	Check instruction was a MOV, direction was INPUT and
9230 	**	ATN is asserted.
9231 	*/
9232 	if ((cmd & 0xc0) || !(phase & 1) || !(sbcl & 0x8))
9233 		goto reset_all;
9234 
9235 	/*
9236 	**	Keep track of the parity error.
9237 	*/
9238 	OUTONB (HF_PRT, HF_EXT_ERR);
9239 	cp->xerr_status |= XE_PARITY_ERR;
9240 
9241 	/*
9242 	**	Prepare the message to send to the device.
9243 	*/
9244 	np->msgout[0] = (phase == 7) ? M_PARITY : M_ID_ERROR;
9245 
9246 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
9247 	/*
9248 	**	Save error message. For integrity check use only.
9249 	*/
9250 	if (np->check_integrity)
9251 		np->check_integ_par = np->msgout[0];
9252 #endif
9253 
9254 	/*
9255 	**	If the old phase was DATA IN or DT DATA IN phase,
9256 	** 	we have to deal with the 3 situations described above.
9257 	**	For other input phases (MSG IN and STATUS), the device
9258 	**	must resend the whole thing that failed parity checking
9259 	**	or signal error. So, jumping to dispatcher should be OK.
9260 	*/
9261 	if ((phase == 1) || (phase == 5)) {
9262 		/* Phase mismatch handled by SCRIPTS */
9263 		if (dsp == NCB_SCRIPTH_PHYS (np, pm_handle))
9264 			OUTL_DSP (dsp);
9265 		/* Phase mismatch handled by the C code */
9266 		else if (sist & MA)
9267 			ncr_int_ma (np);
9268 		/* No phase mismatch occurred */
9269 		else {
9270 			OUTL (nc_temp, dsp);
9271 			OUTL_DSP (NCB_SCRIPT_PHYS (np, dispatch));
9272 		}
9273 	}
9274 	else
9275 		OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
9276 	return;
9277 
9278 reset_all:
9279 	ncr_start_reset(np);
9280 	return;
9281 }
9282 
9283 /*==========================================================
9284 **
9285 **
9286 **	ncr chip exception handler for phase errors.
9287 **
9288 **
9289 **==========================================================
9290 **
9291 **	We have to construct a new transfer descriptor,
9292 **	to transfer the rest of the current block.
9293 **
9294 **----------------------------------------------------------
9295 */
9296 
9297 static void ncr_int_ma (ncb_p np)
9298 {
9299 	u_int32	dbc;
9300 	u_int32	rest;
9301 	u_int32	dsp;
9302 	u_int32	dsa;
9303 	u_int32	nxtdsp;
9304 	u_int32	*vdsp;
9305 	u_int32	oadr, olen;
9306 	u_int32	*tblp;
9307         u_int32	newcmd;
9308 	u_int	delta;
9309 	u_char	cmd;
9310 	u_char	hflags, hflags0;
9311 	struct pm_ctx *pm;
9312 	ccb_p	cp;
9313 
9314 	dsp	= INL (nc_dsp);
9315 	dbc	= INL (nc_dbc);
9316 	dsa	= INL (nc_dsa);
9317 
9318 	cmd	= dbc >> 24;
9319 	rest	= dbc & 0xffffff;
9320 	delta	= 0;
9321 
9322 	/*
9323 	**	locate matching cp.
9324 	*/
9325 	cp = ncr_ccb_from_dsa(np, dsa);
9326 
9327 	if (DEBUG_FLAGS & DEBUG_PHASE)
9328 		printk("CCB = %2x %2x %2x %2x %2x %2x\n",
9329 			cp->cmd->cmnd[0], cp->cmd->cmnd[1], cp->cmd->cmnd[2],
9330 			cp->cmd->cmnd[3], cp->cmd->cmnd[4], cp->cmd->cmnd[5]);
9331 
9332 	/*
9333 	**	Donnot take into account dma fifo and various buffers in
9334 	**	INPUT phase since the chip flushes everything before
9335 	**	raising the MA interrupt for interrupted INPUT phases.
9336 	**	For DATA IN phase, we will check for the SWIDE later.
9337 	*/
9338 	if ((cmd & 7) != 1 && (cmd & 7) != 5) {
9339 		u_int32 dfifo;
9340 		u_char ss0, ss2;
9341 
9342 		/*
9343 		**  If C1010, DFBC contains number of bytes in DMA fifo.
9344 		**  else read DFIFO, CTEST[4-6] using 1 PCI bus ownership.
9345 		*/
9346 		if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
9347 				(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
9348 			delta = INL(nc_dfbc) & 0xffff;
9349 		else {
9350 			dfifo = INL(nc_dfifo);
9351 
9352 			/*
9353 			**	Calculate remaining bytes in DMA fifo.
9354 			**	C1010 - always large fifo, value in dfbc
9355 			**	Otherwise, (CTEST5 = dfifo >> 16)
9356 			*/
9357 			if (dfifo & (DFS << 16))
9358 				delta = ((((dfifo >> 8) & 0x300) |
9359 				          (dfifo & 0xff)) - rest) & 0x3ff;
9360 			else
9361 				delta = ((dfifo & 0xff) - rest) & 0x7f;
9362 
9363 			/*
9364 			**	The data in the dma fifo has not been
9365 			**	transferred to the target -> add the amount
9366 			**	to the rest and clear the data.
9367 			**	Check the sstat2 register in case of wide
9368 			**	transfer.
9369 			*/
9370 
9371 		}
9372 
9373 		rest += delta;
9374 		ss0  = INB (nc_sstat0);
9375 		if (ss0 & OLF) rest++;
9376 		if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
9377 				(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) && (ss0 & ORF))
9378 			rest++;
9379 		if (cp && (cp->phys.select.sel_scntl3 & EWS)) {
9380 			ss2 = INB (nc_sstat2);
9381 			if (ss2 & OLF1) rest++;
9382 			if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
9383 					(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) && (ss2 & ORF))
9384 				rest++;
9385 		};
9386 
9387 		/*
9388 		**	Clear fifos.
9389 		*/
9390 		OUTB (nc_ctest3, np->rv_ctest3 | CLF);	/* dma fifo  */
9391 		OUTB (nc_stest3, TE|CSF);		/* scsi fifo */
9392 	}
9393 
9394 	/*
9395 	**	log the information
9396 	*/
9397 
9398 	if (DEBUG_FLAGS & (DEBUG_TINY|DEBUG_PHASE))
9399 		printk ("P%x%x RL=%d D=%d ", cmd&7, INB(nc_sbcl)&7,
9400 			(unsigned) rest, (unsigned) delta);
9401 
9402 	/*
9403 	**	try to find the interrupted script command,
9404 	**	and the address at which to continue.
9405 	*/
9406 	vdsp	= 0;
9407 	nxtdsp	= 0;
9408 	if	(dsp >  np->p_script &&
9409 		 dsp <= np->p_script + sizeof(struct script)) {
9410 		vdsp = (u_int32 *)((char*)np->script0 + (dsp-np->p_script-8));
9411 		nxtdsp = dsp;
9412 	}
9413 	else if	(dsp >  np->p_scripth &&
9414 		 dsp <= np->p_scripth + sizeof(struct scripth)) {
9415 		vdsp = (u_int32 *)((char*)np->scripth0 + (dsp-np->p_scripth-8));
9416 		nxtdsp = dsp;
9417 	}
9418 
9419 	/*
9420 	**	log the information
9421 	*/
9422 	if (DEBUG_FLAGS & DEBUG_PHASE) {
9423 		printk ("\nCP=%p DSP=%x NXT=%x VDSP=%p CMD=%x ",
9424 			cp, (unsigned)dsp, (unsigned)nxtdsp, vdsp, cmd);
9425 	};
9426 
9427 	if (!vdsp) {
9428 		printk ("%s: interrupted SCRIPT address not found.\n",
9429 			ncr_name (np));
9430 		goto reset_all;
9431 	}
9432 
9433 	if (!cp) {
9434 		printk ("%s: SCSI phase error fixup: CCB already dequeued.\n",
9435 			ncr_name (np));
9436 		goto reset_all;
9437 	}
9438 
9439 	/*
9440 	**	get old startaddress and old length.
9441 	*/
9442 
9443 	oadr = scr_to_cpu(vdsp[1]);
9444 
9445 	if (cmd & 0x10) {	/* Table indirect */
9446 		tblp = (u_int32 *) ((char*) &cp->phys + oadr);
9447 		olen = scr_to_cpu(tblp[0]);
9448 		oadr = scr_to_cpu(tblp[1]);
9449 	} else {
9450 		tblp = (u_int32 *) 0;
9451 		olen = scr_to_cpu(vdsp[0]) & 0xffffff;
9452 	};
9453 
9454 	if (DEBUG_FLAGS & DEBUG_PHASE) {
9455 		printk ("OCMD=%x\nTBLP=%p OLEN=%x OADR=%x\n",
9456 			(unsigned) (scr_to_cpu(vdsp[0]) >> 24),
9457 			tblp,
9458 			(unsigned) olen,
9459 			(unsigned) oadr);
9460 	};
9461 
9462 	/*
9463 	**	check cmd against assumed interrupted script command.
9464 	**	If dt data phase, the MOVE instruction hasn't bit 4 of
9465 	**	the phase.
9466 	*/
9467 
9468 	if (((cmd & 2) ? cmd : (cmd & ~4)) != (scr_to_cpu(vdsp[0]) >> 24)) {
9469 		PRINT_ADDR(cp->cmd);
9470 		printk ("internal error: cmd=%02x != %02x=(vdsp[0] >> 24)\n",
9471 			(unsigned)cmd, (unsigned)scr_to_cpu(vdsp[0]) >> 24);
9472 
9473 		goto reset_all;
9474 	};
9475 
9476 	/*
9477 	**	if old phase not dataphase, leave here.
9478 	**	C/D line is low if data.
9479 	*/
9480 
9481 	if (cmd & 0x02) {
9482 		PRINT_ADDR(cp->cmd);
9483 		printk ("phase change %x-%x %d@%08x resid=%d.\n",
9484 			cmd&7, INB(nc_sbcl)&7, (unsigned)olen,
9485 			(unsigned)oadr, (unsigned)rest);
9486 		goto unexpected_phase;
9487 	};
9488 
9489 	/*
9490 	**	Choose the correct PM save area.
9491 	**
9492 	**	Look at the PM_SAVE SCRIPT if you want to understand
9493 	**	this stuff. The equivalent code is implemented in
9494 	**	SCRIPTS for the 895A and 896 that are able to handle
9495 	**	PM from the SCRIPTS processor.
9496 	*/
9497 
9498 	hflags0 = INB (HF_PRT);
9499 	hflags = hflags0;
9500 
9501 	if (hflags & (HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED)) {
9502 		if (hflags & HF_IN_PM0)
9503 			nxtdsp = scr_to_cpu(cp->phys.pm0.ret);
9504 		else if	(hflags & HF_IN_PM1)
9505 			nxtdsp = scr_to_cpu(cp->phys.pm1.ret);
9506 
9507 		if (hflags & HF_DP_SAVED)
9508 			hflags ^= HF_ACT_PM;
9509 	}
9510 
9511 	if (!(hflags & HF_ACT_PM)) {
9512 		pm = &cp->phys.pm0;
9513 		newcmd = NCB_SCRIPT_PHYS(np, pm0_data);
9514 	}
9515 	else {
9516 		pm = &cp->phys.pm1;
9517 		newcmd = NCB_SCRIPT_PHYS(np, pm1_data);
9518 	}
9519 
9520 	hflags &= ~(HF_IN_PM0 | HF_IN_PM1 | HF_DP_SAVED);
9521 	if (hflags != hflags0)
9522 		OUTB (HF_PRT, hflags);
9523 
9524 	/*
9525 	**	fillin the phase mismatch context
9526 	*/
9527 
9528 	pm->sg.addr = cpu_to_scr(oadr + olen - rest);
9529 	pm->sg.size = cpu_to_scr(rest);
9530 	pm->ret     = cpu_to_scr(nxtdsp);
9531 
9532 	/*
9533 	**	If we have a SWIDE,
9534 	**	- prepare the address to write the SWIDE from SCRIPTS,
9535 	**	- compute the SCRIPTS address to restart from,
9536 	**	- move current data pointer context by one byte.
9537 	*/
9538 	nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
9539 	if ( ((cmd & 7) == 1  || (cmd & 7) == 5)
9540 		&& cp && (cp->phys.select.sel_scntl3 & EWS) &&
9541 	    (INB (nc_scntl2) & WSR)) {
9542 		u32 tmp;
9543 
9544 #ifdef  SYM_DEBUG_PM_WITH_WSR
9545 		PRINT_ADDR(cp);
9546 		printk ("MA interrupt with WSR set - "
9547 			"pm->sg.addr=%x - pm->sg.size=%d\n",
9548 			pm->sg.addr, pm->sg.size);
9549 #endif
9550 		/*
9551 		 *  Set up the table indirect for the MOVE
9552 		 *  of the residual byte and adjust the data
9553 		 *  pointer context.
9554 		 */
9555 		tmp = scr_to_cpu(pm->sg.addr);
9556 		cp->phys.wresid.addr = cpu_to_scr(tmp);
9557 		pm->sg.addr = cpu_to_scr(tmp + 1);
9558  		tmp = scr_to_cpu(pm->sg.size);
9559 		cp->phys.wresid.size = cpu_to_scr((tmp&0xff000000) | 1);
9560 		pm->sg.size = cpu_to_scr(tmp - 1);
9561 
9562 		/*
9563 		 *  If only the residual byte is to be moved,
9564 		 *  no PM context is needed.
9565 		 */
9566 		if ((tmp&0xffffff) == 1)
9567                         newcmd = pm->ret;
9568 
9569 		/*
9570 		 *  Prepare the address of SCRIPTS that will
9571 		 *  move the residual byte to memory.
9572 		 */
9573 		nxtdsp = NCB_SCRIPTH_PHYS (np, wsr_ma_helper);
9574         }
9575 
9576 	if (DEBUG_FLAGS & DEBUG_PHASE) {
9577 		PRINT_ADDR(cp->cmd);
9578 		printk ("PM %x %x %x / %x %x %x.\n",
9579 			hflags0, hflags, newcmd,
9580 			(unsigned)scr_to_cpu(pm->sg.addr),
9581 			(unsigned)scr_to_cpu(pm->sg.size),
9582 			(unsigned)scr_to_cpu(pm->ret));
9583 	}
9584 
9585 	/*
9586 	**	Restart the SCRIPTS processor.
9587 	*/
9588 
9589 	OUTL (nc_temp, newcmd);
9590 	OUTL_DSP (nxtdsp);
9591 	return;
9592 
9593 	/*
9594 	**	Unexpected phase changes that occurs when the current phase
9595 	**	is not a DATA IN or DATA OUT phase are due to error conditions.
9596 	**	Such event may only happen when the SCRIPTS is using a
9597 	**	multibyte SCSI MOVE.
9598 	**
9599 	**	Phase change		Some possible cause
9600 	**
9601 	**	COMMAND  --> MSG IN	SCSI parity error detected by target.
9602 	**	COMMAND  --> STATUS	Bad command or refused by target.
9603 	**	MSG OUT  --> MSG IN     Message rejected by target.
9604 	**	MSG OUT  --> COMMAND    Bogus target that discards extended
9605 	**				negotiation messages.
9606 	**
9607 	**	The code below does not care of the new phase and so
9608 	**	trusts the target. Why to annoy it ?
9609 	**	If the interrupted phase is COMMAND phase, we restart at
9610 	**	dispatcher.
9611 	**	If a target does not get all the messages after selection,
9612 	**	the code assumes blindly that the target discards extended
9613 	**	messages and clears the negotiation status.
9614 	**	If the target does not want all our response to negotiation,
9615 	**	we force a SIR_NEGO_PROTO interrupt (it is a hack that avoids
9616 	**	bloat for such a should_not_happen situation).
9617 	**	In all other situation, we reset the BUS.
9618 	**	Are these assumptions reasonnable ? (Wait and see ...)
9619 	*/
9620 unexpected_phase:
9621 	dsp -= 8;
9622 	nxtdsp = 0;
9623 
9624 	switch (cmd & 7) {
9625 	case 2:	/* COMMAND phase */
9626 		nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
9627 		break;
9628 #if 0
9629 	case 3:	/* STATUS  phase */
9630 		nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
9631 		break;
9632 #endif
9633 	case 6:	/* MSG OUT phase */
9634 		/*
9635 		**	If the device may want to use untagged when we want
9636 		**	tagged, we prepare an IDENTIFY without disc. granted,
9637 		**	since we will not be able to handle reselect.
9638 		**	Otherwise, we just don't care.
9639 		*/
9640 		if	(dsp == NCB_SCRIPT_PHYS (np, send_ident)) {
9641 			if (cp->tag != NO_TAG && olen - rest <= 3) {
9642 				cp->host_status = HS_BUSY;
9643 				np->msgout[0] = M_IDENTIFY | cp->lun;
9644 				nxtdsp = NCB_SCRIPTH_PHYS (np, ident_break_atn);
9645 			}
9646 			else
9647 				nxtdsp = NCB_SCRIPTH_PHYS (np, ident_break);
9648 		}
9649 		else if	(dsp == NCB_SCRIPTH_PHYS (np, send_wdtr) ||
9650 			 dsp == NCB_SCRIPTH_PHYS (np, send_sdtr) ||
9651 			 dsp == NCB_SCRIPTH_PHYS (np, send_ppr)) {
9652 			nxtdsp = NCB_SCRIPTH_PHYS (np, nego_bad_phase);
9653 		}
9654 		break;
9655 #if 0
9656 	case 7:	/* MSG IN  phase */
9657 		nxtdsp = NCB_SCRIPT_PHYS (np, clrack);
9658 		break;
9659 #endif
9660 	}
9661 
9662 	if (nxtdsp) {
9663 		OUTL_DSP (nxtdsp);
9664 		return;
9665 	}
9666 
9667 reset_all:
9668 	ncr_start_reset(np);
9669 }
9670 
9671 /*==========================================================
9672 **
9673 **	ncr chip handler for QUEUE FULL and CHECK CONDITION
9674 **
9675 **==========================================================
9676 **
9677 **	On QUEUE FULL status, we set the actual tagged command
9678 **	queue depth to the number of disconnected CCBs that is
9679 **	hopefully a good value to avoid further QUEUE FULL.
9680 **
9681 **	On CHECK CONDITION or COMMAND TERMINATED, we use the
9682 **	CCB of the failed command for performing a REQUEST
9683 **	SENSE SCSI command.
9684 **
9685 **	We do not want to change the order commands will be
9686 **	actually queued to the device after we received a
9687 **	QUEUE FULL status. We also want to properly deal with
9688 **	contingent allegiance condition. For these reasons,
9689 **	we remove from the start queue all commands for this
9690 **	LUN that haven't been yet queued to the device and
9691 **	put them back in the correponding LUN queue, then
9692 **	requeue the CCB that failed in front of the LUN queue.
9693 **	I just hope this not to be performed too often. :)
9694 **
9695 **	If we are using IMMEDIATE ARBITRATION, we clear the
9696 **	IARB hint for every commands we encounter in order not
9697 **	to be stuck with a won arbitration and no job to queue
9698 **	to a device.
9699 **----------------------------------------------------------
9700 */
9701 
9702 static void ncr_sir_to_redo(ncb_p np, int num, ccb_p cp)
9703 {
9704 	Scsi_Cmnd *cmd	= cp->cmd;
9705 	tcb_p tp	= &np->target[cp->target];
9706 	lcb_p lp	= ncr_lp(np, tp, cp->lun);
9707 	ccb_p		cp2;
9708 	int		busyccbs = 1;
9709 	u_int32		startp;
9710 	u_char		s_status = INB (SS_PRT);
9711 	int		msglen;
9712 	int		i, j;
9713 
9714 
9715 	/*
9716 	**	If the LCB is not yet available, then only
9717 	**	1 IO is accepted, so we should have it.
9718 	*/
9719 	if (!lp)
9720 		goto next;
9721 	/*
9722 	**	Remove all CCBs queued to the chip for that LUN and put
9723 	**	them back in the LUN CCB wait queue.
9724 	*/
9725 	busyccbs = lp->queuedccbs;
9726 	i = (INL (nc_scratcha) - np->p_squeue) / 4;
9727 	j = i;
9728 	while (i != np->squeueput) {
9729 		cp2 = ncr_ccb_from_dsa(np, scr_to_cpu(np->squeue[i]));
9730 		assert(cp2);
9731 #ifdef SCSI_NCR_IARB_SUPPORT
9732 		/* IARB hints may not be relevant any more. Forget them. */
9733 		cp2->host_flags &= ~HF_HINT_IARB;
9734 #endif
9735 		if (cp2 && cp2->target == cp->target && cp2->lun == cp->lun) {
9736 			xpt_remque(&cp2->link_ccbq);
9737 			xpt_insque_head(&cp2->link_ccbq, &lp->wait_ccbq);
9738 			--lp->queuedccbs;
9739 			cp2->queued = 0;
9740 		}
9741 		else {
9742 			if (i != j)
9743 				np->squeue[j] = np->squeue[i];
9744 			if ((j += 2) >= MAX_START*2) j = 0;
9745 		}
9746 		if ((i += 2) >= MAX_START*2) i = 0;
9747 	}
9748 	if (i != j)		/* Copy back the idle task if needed */
9749 		np->squeue[j] = np->squeue[i];
9750 	np->squeueput = j;	/* Update our current start queue pointer */
9751 
9752 	/*
9753 	**	Requeue the interrupted CCB in front of the
9754 	**	LUN CCB wait queue to preserve ordering.
9755 	*/
9756 	xpt_remque(&cp->link_ccbq);
9757 	xpt_insque_head(&cp->link_ccbq, &lp->wait_ccbq);
9758 	--lp->queuedccbs;
9759 	cp->queued = 0;
9760 
9761 next:
9762 
9763 #ifdef SCSI_NCR_IARB_SUPPORT
9764 	/* IARB hint may not be relevant any more. Forget it. */
9765 	cp->host_flags &= ~HF_HINT_IARB;
9766 	if (np->last_cp)
9767 		np->last_cp = 0;
9768 #endif
9769 
9770 	/*
9771 	**	Now we can restart the SCRIPTS processor safely.
9772 	*/
9773 	OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
9774 
9775 	switch(s_status) {
9776 	default:
9777 	case S_BUSY:
9778 		ncr_complete(np, cp);
9779 		break;
9780 	case S_QUEUE_FULL:
9781 		if (!lp || !lp->queuedccbs) {
9782 			ncr_complete(np, cp);
9783 			break;
9784 		}
9785 		if (bootverbose >= 1) {
9786 			PRINT_ADDR(cmd);
9787 			printk ("QUEUE FULL! %d busy, %d disconnected CCBs\n",
9788 				busyccbs, lp->queuedccbs);
9789 		}
9790 		/*
9791 		**	Decrease number of tags to the number of
9792 		**	disconnected commands.
9793 		*/
9794 		if (lp->queuedccbs < lp->numtags) {
9795 			lp->numtags	= lp->queuedccbs;
9796 			lp->num_good	= 0;
9797 			ncr_setup_tags (np, cp->target, cp->lun);
9798 		}
9799 		/*
9800 		**	Repair the offending CCB.
9801 		*/
9802 		cp->phys.header.savep	= cp->startp;
9803 		cp->phys.header.lastp	= cp->lastp0;
9804 		cp->host_status 	= HS_BUSY;
9805 		cp->scsi_status 	= S_ILLEGAL;
9806 		cp->xerr_status		= 0;
9807 		cp->extra_bytes		= 0;
9808 		cp->host_flags		&= (HF_PM_TO_C|HF_DATA_IN);
9809 
9810 		break;
9811 
9812 	case S_TERMINATED:
9813 	case S_CHECK_COND:
9814 		/*
9815 		**	If we were requesting sense, give up.
9816 		*/
9817 		if (cp->host_flags & HF_AUTO_SENSE) {
9818 			ncr_complete(np, cp);
9819 			break;
9820 		}
9821 
9822 		/*
9823 		**	Save SCSI status and extended error.
9824 		**	Compute the data residual now.
9825 		*/
9826 		cp->sv_scsi_status = cp->scsi_status;
9827 		cp->sv_xerr_status = cp->xerr_status;
9828 		cp->resid = ncr_compute_residual(np, cp);
9829 
9830 		/*
9831 		**	Device returned CHECK CONDITION status.
9832 		**	Prepare all needed data strutures for getting
9833 		**	sense data.
9834 		*/
9835 
9836 		/*
9837 		**	identify message
9838 		*/
9839 		cp->scsi_smsg2[0]	= M_IDENTIFY | cp->lun;
9840 		msglen = 1;
9841 
9842 		/*
9843 		**	If we are currently using anything different from
9844 		**	async. 8 bit data transfers with that target,
9845 		**	start a negotiation, since the device may want
9846 		**	to report us a UNIT ATTENTION condition due to
9847 		**	a cause we currently ignore, and we donnot want
9848 		**	to be stuck with WIDE and/or SYNC data transfer.
9849 		**
9850 		**	cp->nego_status is filled by ncr_prepare_nego().
9851 		**
9852 		**	Do NOT negotiate if performing integrity check
9853 		**	or if integrity check has completed, all check
9854 		**	conditions will have been cleared.
9855 		*/
9856 
9857 #ifdef	SCSI_NCR_INTEGRITY_CHECKING
9858 		if (DEBUG_FLAGS & DEBUG_IC) {
9859 		printk("%s: ncr_sir_to_redo: ic_done %2X, in_progress %2X\n",
9860 			ncr_name(np), tp->ic_done, cp->cmd->ic_in_progress);
9861 		}
9862 
9863 		/*
9864 		**	If parity error during integrity check,
9865 		**	set the target width to narrow. Otherwise,
9866 		**	do not negotiate on a request sense.
9867 		*/
9868 		if ( np->check_integ_par && np->check_integrity
9869 						&& cp->cmd->ic_in_progress ) {
9870 			cp->nego_status = 0;
9871 			msglen +=
9872 			    ncr_ic_nego (np, cp, cmd ,&cp->scsi_smsg2[msglen]);
9873 		}
9874 
9875 		if (!np->check_integrity ||
9876 		   	(np->check_integrity &&
9877 				(!cp->cmd->ic_in_progress && !tp->ic_done)) ) {
9878 		    ncr_negotiate(np, tp);
9879 		    cp->nego_status = 0;
9880 		    {
9881 			u_char sync_offset;
9882 			if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
9883 					(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66))
9884 				sync_offset = tp->sval & 0x3f;
9885 			else
9886 				sync_offset = tp->sval & 0x1f;
9887 
9888 		        if ((tp->wval & EWS) || sync_offset)
9889 			  msglen +=
9890 			    ncr_prepare_nego (np, cp, &cp->scsi_smsg2[msglen]);
9891 		    }
9892 
9893 		}
9894 #else
9895 		ncr_negotiate(np, tp);
9896 		cp->nego_status = 0;
9897 		if ((tp->wval & EWS) || (tp->sval & 0x1f))
9898 			msglen +=
9899 			    ncr_prepare_nego (np, cp, &cp->scsi_smsg2[msglen]);
9900 #endif	/* SCSI_NCR_INTEGRITY_CHECKING */
9901 
9902 		/*
9903 		**	Message table indirect structure.
9904 		*/
9905 		cp->phys.smsg.addr	= cpu_to_scr(CCB_PHYS (cp, scsi_smsg2));
9906 		cp->phys.smsg.size	= cpu_to_scr(msglen);
9907 
9908 		/*
9909 		**	sense command
9910 		*/
9911 		cp->phys.cmd.addr	= cpu_to_scr(CCB_PHYS (cp, sensecmd));
9912 		cp->phys.cmd.size	= cpu_to_scr(6);
9913 
9914 		/*
9915 		**	patch requested size into sense command
9916 		*/
9917 		cp->sensecmd[0]		= 0x03;
9918 		cp->sensecmd[1]		= cp->lun << 5;
9919 		cp->sensecmd[4]		= sizeof(cp->sense_buf);
9920 
9921 		/*
9922 		**	sense data
9923 		*/
9924 		bzero(cp->sense_buf, sizeof(cp->sense_buf));
9925 		cp->phys.sense.addr	= cpu_to_scr(CCB_PHYS(cp,sense_buf[0]));
9926 		cp->phys.sense.size	= cpu_to_scr(sizeof(cp->sense_buf));
9927 
9928 		/*
9929 		**	requeue the command.
9930 		*/
9931 		startp = NCB_SCRIPTH_PHYS (np, sdata_in);
9932 
9933 		cp->phys.header.savep	= cpu_to_scr(startp);
9934 		cp->phys.header.goalp	= cpu_to_scr(startp + 16);
9935 		cp->phys.header.lastp	= cpu_to_scr(startp);
9936 		cp->phys.header.wgoalp	= cpu_to_scr(startp + 16);
9937 		cp->phys.header.wlastp	= cpu_to_scr(startp);
9938 
9939 		cp->host_status	= cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
9940 		cp->scsi_status = S_ILLEGAL;
9941 		cp->host_flags	= (HF_AUTO_SENSE|HF_DATA_IN);
9942 
9943 		cp->phys.header.go.start =
9944 			cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
9945 
9946 		/*
9947 		**	If lp not yet allocated, requeue the command.
9948 		*/
9949 		if (!lp)
9950 			ncr_put_start_queue(np, cp);
9951 		break;
9952 	}
9953 
9954 	/*
9955 	**	requeue awaiting scsi commands for this lun.
9956 	*/
9957 	if (lp)
9958 		ncr_start_next_ccb(np, lp, 1);
9959 
9960 	return;
9961 }
9962 
9963 /*----------------------------------------------------------
9964 **
9965 **	After a device has accepted some management message
9966 **	as BUS DEVICE RESET, ABORT TASK, etc ..., or when
9967 **	a device signals a UNIT ATTENTION condition, some
9968 **	tasks are thrown away by the device. We are required
9969 **	to reflect that on our tasks list since the device
9970 **	will never complete these tasks.
9971 **
9972 **	This function completes all disconnected CCBs for a
9973 **	given target that matches the following criteria:
9974 **	- lun=-1  means any logical UNIT otherwise a given one.
9975 **	- task=-1 means any task, otherwise a given one.
9976 **----------------------------------------------------------
9977 */
9978 static int ncr_clear_tasks(ncb_p np, u_char hsts,
9979 			   int target, int lun, int task)
9980 {
9981 	int i = 0;
9982 	ccb_p cp;
9983 
9984 	for (cp = np->ccbc; cp; cp = cp->link_ccb) {
9985 		if (cp->host_status != HS_DISCONNECT)
9986 			continue;
9987 		if (cp->target != target)
9988 			continue;
9989 		if (lun != -1 && cp->lun != lun)
9990 			continue;
9991 		if (task != -1 && cp->tag != NO_TAG && cp->scsi_smsg[2] != task)
9992 			continue;
9993 		cp->host_status = hsts;
9994 		cp->scsi_status = S_ILLEGAL;
9995 		ncr_complete(np, cp);
9996 		++i;
9997 	}
9998 	return i;
9999 }
10000 
10001 /*==========================================================
10002 **
10003 **	ncr chip handler for TASKS recovery.
10004 **
10005 **==========================================================
10006 **
10007 **	We cannot safely abort a command, while the SCRIPTS
10008 **	processor is running, since we just would be in race
10009 **	with it.
10010 **
10011 **	As long as we have tasks to abort, we keep the SEM
10012 **	bit set in the ISTAT. When this bit is set, the
10013 **	SCRIPTS processor interrupts (SIR_SCRIPT_STOPPED)
10014 **	each time it enters the scheduler.
10015 **
10016 **	If we have to reset a target, clear tasks of a unit,
10017 **	or to perform the abort of a disconnected job, we
10018 **	restart the SCRIPTS for selecting the target. Once
10019 **	selected, the SCRIPTS interrupts (SIR_TARGET_SELECTED).
10020 **	If it loses arbitration, the SCRIPTS will interrupt again
10021 **	the next time it will enter its scheduler, and so on ...
10022 **
10023 **	On SIR_TARGET_SELECTED, we scan for the more
10024 **	appropriate thing to do:
10025 **
10026 **	- If nothing, we just sent a M_ABORT message to the
10027 **	  target to get rid of the useless SCSI bus ownership.
10028 **	  According to the specs, no tasks shall be affected.
10029 **	- If the target is to be reset, we send it a M_RESET
10030 **	  message.
10031 **	- If a logical UNIT is to be cleared , we send the
10032 **	  IDENTIFY(lun) + M_ABORT.
10033 **	- If an untagged task is to be aborted, we send the
10034 **	  IDENTIFY(lun) + M_ABORT.
10035 **	- If a tagged task is to be aborted, we send the
10036 **	  IDENTIFY(lun) + task attributes + M_ABORT_TAG.
10037 **
10038 **	Once our 'kiss of death' :) message has been accepted
10039 **	by the target, the SCRIPTS interrupts again
10040 **	(SIR_ABORT_SENT). On this interrupt, we complete
10041 **	all the CCBs that should have been aborted by the
10042 **	target according to our message.
10043 **
10044 **----------------------------------------------------------
10045 */
10046 static void ncr_sir_task_recovery(ncb_p np, int num)
10047 {
10048 	ccb_p cp;
10049 	tcb_p tp;
10050 	int target=-1, lun=-1, task;
10051 	int i, k;
10052 	u_char *p;
10053 
10054 	switch(num) {
10055 	/*
10056 	**	The SCRIPTS processor stopped before starting
10057 	**	the next command in order to allow us to perform
10058 	**	some task recovery.
10059 	*/
10060 	case SIR_SCRIPT_STOPPED:
10061 
10062 		/*
10063 		**	Do we have any target to reset or unit to clear ?
10064 		*/
10065 		for (i = 0 ; i < MAX_TARGET ; i++) {
10066 			tp = &np->target[i];
10067 			if (tp->to_reset || (tp->l0p && tp->l0p->to_clear)) {
10068 				target = i;
10069 				break;
10070 			}
10071 			if (!tp->lmp)
10072 				continue;
10073 			for (k = 1 ; k < MAX_LUN ; k++) {
10074 				if (tp->lmp[k] && tp->lmp[k]->to_clear) {
10075 					target	= i;
10076 					break;
10077 				}
10078 			}
10079 			if (target != -1)
10080 				break;
10081 		}
10082 
10083 		/*
10084 		**	If not, look at the CCB list for any
10085 		**	disconnected CCB to be aborted.
10086 		*/
10087 		if (target == -1) {
10088 			for (cp = np->ccbc; cp; cp = cp->link_ccb) {
10089 				if (cp->host_status != HS_DISCONNECT)
10090 					continue;
10091 				if (cp->to_abort) {
10092 					target = cp->target;
10093 					break;
10094 				}
10095 			}
10096 		}
10097 
10098 		/*
10099 		**	If some target is to be selected,
10100 		**	prepare and start the selection.
10101 		*/
10102 		if (target != -1) {
10103 			tp = &np->target[target];
10104 			np->abrt_sel.sel_id	= target;
10105 			np->abrt_sel.sel_scntl3 = tp->wval;
10106 			np->abrt_sel.sel_sxfer  = tp->sval;
10107 			np->abrt_sel.sel_scntl4 = tp->uval;
10108 			OUTL(nc_dsa, np->p_ncb);
10109 			OUTL_DSP (NCB_SCRIPTH_PHYS (np, sel_for_abort));
10110 			return;
10111 		}
10112 
10113 		/*
10114 		**	Nothing is to be selected, so we donnot need
10115 		**	to synchronize with the SCRIPTS anymore.
10116 		**	Remove the SEM flag from the ISTAT.
10117 		*/
10118 		np->istat_sem = 0;
10119 		OUTB (nc_istat, SIGP);
10120 
10121 		/*
10122 		**	Now look at CCBs to abort that haven't started yet.
10123 		**	Remove all those CCBs from the start queue and
10124 		**	complete them with appropriate status.
10125 		**	Btw, the SCRIPTS processor is still stopped, so
10126 		**	we are not in race.
10127 		*/
10128 		for (cp = np->ccbc; cp; cp = cp->link_ccb) {
10129 			if (cp->host_status != HS_BUSY &&
10130 			    cp->host_status != HS_NEGOTIATE)
10131 				continue;
10132 			if (!cp->to_abort)
10133 				continue;
10134 #ifdef SCSI_NCR_IARB_SUPPORT
10135 			/*
10136 			**    If we are using IMMEDIATE ARBITRATION, we donnot
10137 			**    want to cancel the last queued CCB, since the
10138 			**    SCRIPTS may have anticipated the selection.
10139 			*/
10140 			if (cp == np->last_cp) {
10141 				cp->to_abort = 0;
10142 				continue;
10143 			}
10144 #endif
10145 			/*
10146 			**	Compute index of next position in the start
10147 			**	queue the SCRIPTS will schedule.
10148 			*/
10149 			i = (INL (nc_scratcha) - np->p_squeue) / 4;
10150 
10151 			/*
10152 			**	Remove the job from the start queue.
10153 			*/
10154 			k = -1;
10155 			while (1) {
10156 				if (i == np->squeueput)
10157 					break;
10158 				if (k == -1) {		/* Not found yet */
10159 					if (cp == ncr_ccb_from_dsa(np,
10160 						     scr_to_cpu(np->squeue[i])))
10161 						k = i;	/* Found */
10162 				}
10163 				else {
10164 					/*
10165 					**    Once found, we have to move
10166 					**    back all jobs by 1 position.
10167 					*/
10168 					np->squeue[k] = np->squeue[i];
10169 					k += 2;
10170 					if (k >= MAX_START*2)
10171 						k = 0;
10172 				}
10173 
10174 				i += 2;
10175 				if (i >= MAX_START*2)
10176 					i = 0;
10177 			}
10178 			/*
10179 			**	If job removed, repair the start queue.
10180 			*/
10181 			if (k != -1) {
10182 				np->squeue[k] = np->squeue[i]; /* Idle task */
10183 				np->squeueput = k; /* Start queue pointer */
10184 			}
10185 			cp->host_status = HS_ABORTED;
10186 			cp->scsi_status = S_ILLEGAL;
10187 			ncr_complete(np, cp);
10188 		}
10189 		break;
10190 	/*
10191 	**	The SCRIPTS processor has selected a target
10192 	**	we may have some manual recovery to perform for.
10193 	*/
10194 	case SIR_TARGET_SELECTED:
10195 		target = (INB (nc_sdid) & 0xf);
10196 		tp = &np->target[target];
10197 
10198 		np->abrt_tbl.addr = cpu_to_scr(vtobus(np->abrt_msg));
10199 
10200 		/*
10201 		**	If the target is to be reset, prepare a
10202 		**	M_RESET message and clear the to_reset flag
10203 		**	since we donnot expect this operation to fail.
10204 		*/
10205 		if (tp->to_reset) {
10206 			np->abrt_msg[0] = M_RESET;
10207 			np->abrt_tbl.size = 1;
10208 			tp->to_reset = 0;
10209 			break;
10210 		}
10211 
10212 		/*
10213 		**	Otherwise, look for some logical unit to be cleared.
10214 		*/
10215 		if (tp->l0p && tp->l0p->to_clear)
10216 			lun = 0;
10217 		else if (tp->lmp) {
10218 			for (k = 1 ; k < MAX_LUN ; k++) {
10219 				if (tp->lmp[k] && tp->lmp[k]->to_clear) {
10220 					lun = k;
10221 					break;
10222 				}
10223 			}
10224 		}
10225 
10226 		/*
10227 		**	If a logical unit is to be cleared, prepare
10228 		**	an IDENTIFY(lun) + ABORT MESSAGE.
10229 		*/
10230 		if (lun != -1) {
10231 			lcb_p lp = ncr_lp(np, tp, lun);
10232 			lp->to_clear = 0; /* We donnot expect to fail here */
10233 			np->abrt_msg[0] = M_IDENTIFY | lun;
10234 			np->abrt_msg[1] = M_ABORT;
10235 			np->abrt_tbl.size = 2;
10236 			break;
10237 		}
10238 
10239 		/*
10240 		**	Otherwise, look for some disconnected job to
10241 		**	abort for this target.
10242 		*/
10243 		for (cp = np->ccbc; cp; cp = cp->link_ccb) {
10244 			if (cp->host_status != HS_DISCONNECT)
10245 				continue;
10246 			if (cp->target != target)
10247 				continue;
10248 			if (cp->to_abort)
10249 				break;
10250 		}
10251 
10252 		/*
10253 		**	If we have none, probably since the device has
10254 		**	completed the command before we won abitration,
10255 		**	send a M_ABORT message without IDENTIFY.
10256 		**	According to the specs, the device must just
10257 		**	disconnect the BUS and not abort any task.
10258 		*/
10259 		if (!cp) {
10260 			np->abrt_msg[0] = M_ABORT;
10261 			np->abrt_tbl.size = 1;
10262 			break;
10263 		}
10264 
10265 		/*
10266 		**	We have some task to abort.
10267 		**	Set the IDENTIFY(lun)
10268 		*/
10269 		np->abrt_msg[0] = M_IDENTIFY | cp->lun;
10270 
10271 		/*
10272 		**	If we want to abort an untagged command, we
10273 		**	will send a IDENTIFY + M_ABORT.
10274 		**	Otherwise (tagged command), we will send
10275 		**	a IDENTITFY + task attributes + ABORT TAG.
10276 		*/
10277 		if (cp->tag == NO_TAG) {
10278 			np->abrt_msg[1] = M_ABORT;
10279 			np->abrt_tbl.size = 2;
10280 		}
10281 		else {
10282 			np->abrt_msg[1] = cp->scsi_smsg[1];
10283 			np->abrt_msg[2] = cp->scsi_smsg[2];
10284 			np->abrt_msg[3] = M_ABORT_TAG;
10285 			np->abrt_tbl.size = 4;
10286 		}
10287 		cp->to_abort = 0; /* We donnot expect to fail here */
10288 		break;
10289 
10290 	/*
10291 	**	The target has accepted our message and switched
10292 	**	to BUS FREE phase as we expected.
10293 	*/
10294 	case SIR_ABORT_SENT:
10295 		target = (INB (nc_sdid) & 0xf);
10296 		tp = &np->target[target];
10297 
10298 		/*
10299 		**	If we didn't abort anything, leave here.
10300 		*/
10301 		if (np->abrt_msg[0] == M_ABORT)
10302 			break;
10303 
10304 		/*
10305 		**	If we sent a M_RESET, then a hardware reset has
10306 		**	been performed by the target.
10307 		**	- Reset everything to async 8 bit
10308 		**	- Tell ourself to negotiate next time :-)
10309 		**	- Prepare to clear all disconnected CCBs for
10310 		**	  this target from our task list (lun=task=-1)
10311 		*/
10312 		lun = -1;
10313 		task = -1;
10314 		if (np->abrt_msg[0] == M_RESET) {
10315 			tp->sval = 0;
10316 			tp->wval = np->rv_scntl3;
10317 			tp->uval = np->rv_scntl4;
10318 			ncr_set_sync_wide_status(np, target);
10319 			ncr_negotiate(np, tp);
10320 		}
10321 
10322 		/*
10323 		**	Otherwise, check for the LUN and TASK(s)
10324 		**	concerned by the cancelation.
10325 		**	If it is not ABORT_TAG then it is CLEAR_QUEUE
10326 		**	or an ABORT message :-)
10327 		*/
10328 		else {
10329 			lun = np->abrt_msg[0] & 0x3f;
10330 			if (np->abrt_msg[1] == M_ABORT_TAG)
10331 				task = np->abrt_msg[2];
10332 		}
10333 
10334 		/*
10335 		**	Complete all the CCBs the device should have
10336 		**	aborted due to our 'kiss of death' message.
10337 		*/
10338 		(void) ncr_clear_tasks(np, HS_ABORTED, target, lun, task);
10339 		break;
10340 
10341 	/*
10342 	**	We have performed a auto-sense that succeeded.
10343 	**	If the device reports a UNIT ATTENTION condition
10344 	**	due to a RESET condition, we must complete all
10345 	**	disconnect CCBs for this unit since the device
10346 	**	shall have thrown them away.
10347 	**	Since I haven't time to guess what the specs are
10348 	**	expecting for other UNIT ATTENTION conditions, I
10349 	**	decided to only care about RESET conditions. :)
10350 	*/
10351 	case SIR_AUTO_SENSE_DONE:
10352 		cp = ncr_ccb_from_dsa(np, INL (nc_dsa));
10353 		if (!cp)
10354 			break;
10355 		memcpy(cp->cmd->sense_buffer, cp->sense_buf,
10356 		       sizeof(cp->cmd->sense_buffer));
10357 		p  = &cp->cmd->sense_buffer[0];
10358 
10359 		if (p[0] != 0x70 || p[2] != 0x6 || p[12] != 0x29)
10360 			break;
10361 #if 0
10362 		(void) ncr_clear_tasks(np, HS_RESET, cp->target, cp->lun, -1);
10363 #endif
10364 		break;
10365 	}
10366 
10367 	/*
10368 	**	Print to the log the message we intend to send.
10369 	*/
10370 	if (num == SIR_TARGET_SELECTED) {
10371 		PRINT_TARGET(np, target);
10372 		ncr_printl_hex("control msgout:", np->abrt_msg,
10373 			      np->abrt_tbl.size);
10374 		np->abrt_tbl.size = cpu_to_scr(np->abrt_tbl.size);
10375 	}
10376 
10377 	/*
10378 	**	Let the SCRIPTS processor continue.
10379 	*/
10380 	OUTONB_STD ();
10381 }
10382 
10383 
10384 /*==========================================================
10385 **
10386 **	G�rard's alchemy:) that deals with with the data
10387 **	pointer for both MDP and the residual calculation.
10388 **
10389 **==========================================================
10390 **
10391 **	I didn't want to bloat the code by more than 200
10392 **	lignes for the handling of both MDP and the residual.
10393 **	This has been achieved by using a data pointer
10394 **	representation consisting in an index in the data
10395 **	array (dp_sg) and a negative offset (dp_ofs) that
10396 **	have the following meaning:
10397 **
10398 **	- dp_sg = MAX_SCATTER
10399 **	  we are at the end of the data script.
10400 **	- dp_sg < MAX_SCATTER
10401 **	  dp_sg points to the next entry of the scatter array
10402 **	  we want to transfer.
10403 **	- dp_ofs < 0
10404 **	  dp_ofs represents the residual of bytes of the
10405 **	  previous entry scatter entry we will send first.
10406 **	- dp_ofs = 0
10407 **	  no residual to send first.
10408 **
10409 **	The function ncr_evaluate_dp() accepts an arbitray
10410 **	offset (basically from the MDP message) and returns
10411 **	the corresponding values of dp_sg and dp_ofs.
10412 **
10413 **----------------------------------------------------------
10414 */
10415 
10416 static int ncr_evaluate_dp(ncb_p np, ccb_p cp, u_int32 scr, int *ofs)
10417 {
10418 	u_int32	dp_scr;
10419 	int	dp_ofs, dp_sg, dp_sgmin;
10420 	int	tmp;
10421 	struct pm_ctx *pm;
10422 
10423 	/*
10424 	**	Compute the resulted data pointer in term of a script
10425 	**	address within some DATA script and a signed byte offset.
10426 	*/
10427 	dp_scr = scr;
10428 	dp_ofs = *ofs;
10429 	if	(dp_scr == NCB_SCRIPT_PHYS (np, pm0_data))
10430 		pm = &cp->phys.pm0;
10431 	else if (dp_scr == NCB_SCRIPT_PHYS (np, pm1_data))
10432 		pm = &cp->phys.pm1;
10433 	else
10434 		pm = 0;
10435 
10436 	if (pm) {
10437 		dp_scr  = scr_to_cpu(pm->ret);
10438 		dp_ofs -= scr_to_cpu(pm->sg.size);
10439 	}
10440 
10441 	/*
10442 	**	Deduce the index of the sg entry.
10443 	**	Keep track of the index of the first valid entry.
10444 	**	If result is dp_sg = MAX_SCATTER, then we are at the
10445 	**	end of the data and vice-versa.
10446 	*/
10447 	tmp = scr_to_cpu(cp->phys.header.goalp);
10448 	dp_sg = MAX_SCATTER;
10449 	if (dp_scr != tmp)
10450 		dp_sg -= (tmp - 8 - (int)dp_scr) / (SCR_SG_SIZE*4);
10451 	dp_sgmin = MAX_SCATTER - cp->segments;
10452 
10453 	/*
10454 	**	Move to the sg entry the data pointer belongs to.
10455 	**
10456 	**	If we are inside the data area, we expect result to be:
10457 	**
10458 	**	Either,
10459 	**	    dp_ofs = 0 and dp_sg is the index of the sg entry
10460 	**	    the data pointer belongs to (or the end of the data)
10461 	**	Or,
10462 	**	    dp_ofs < 0 and dp_sg is the index of the sg entry
10463 	**	    the data pointer belongs to + 1.
10464 	*/
10465 	if (dp_ofs < 0) {
10466 		int n;
10467 		while (dp_sg > dp_sgmin) {
10468 			--dp_sg;
10469 			tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
10470 			n = dp_ofs + (tmp & 0xffffff);
10471 			if (n > 0) {
10472 				++dp_sg;
10473 				break;
10474 			}
10475 			dp_ofs = n;
10476 		}
10477 	}
10478 	else if (dp_ofs > 0) {
10479 		while (dp_sg < MAX_SCATTER) {
10480 			tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
10481 			dp_ofs -= (tmp & 0xffffff);
10482 			++dp_sg;
10483 			if (dp_ofs <= 0)
10484 				break;
10485 		}
10486 	}
10487 
10488 	/*
10489 	**	Make sure the data pointer is inside the data area.
10490 	**	If not, return some error.
10491 	*/
10492 	if	(dp_sg < dp_sgmin || (dp_sg == dp_sgmin && dp_ofs < 0))
10493 		goto out_err;
10494 	else if	(dp_sg > MAX_SCATTER || (dp_sg == MAX_SCATTER && dp_ofs > 0))
10495 		goto out_err;
10496 
10497 	/*
10498 	**	Save the extreme pointer if needed.
10499 	*/
10500 	if (dp_sg > cp->ext_sg ||
10501             (dp_sg == cp->ext_sg && dp_ofs > cp->ext_ofs)) {
10502 		cp->ext_sg  = dp_sg;
10503 		cp->ext_ofs = dp_ofs;
10504 	}
10505 
10506 	/*
10507 	**	Return data.
10508 	*/
10509 	*ofs = dp_ofs;
10510 	return dp_sg;
10511 
10512 out_err:
10513 	return -1;
10514 }
10515 
10516 /*==========================================================
10517 **
10518 **	ncr chip handler for MODIFY DATA POINTER MESSAGE
10519 **
10520 **==========================================================
10521 **
10522 **	We also call this function on IGNORE WIDE RESIDUE
10523 **	messages that do not match a SWIDE full condition.
10524 **	Btw, we assume in that situation that such a message
10525 **	is equivalent to a MODIFY DATA POINTER (offset=-1).
10526 **
10527 **----------------------------------------------------------
10528 */
10529 
10530 static void ncr_modify_dp(ncb_p np, tcb_p tp, ccb_p cp, int ofs)
10531 {
10532 	int dp_ofs	= ofs;
10533 	u_int32 dp_scr	= INL (nc_temp);
10534 	u_int32	dp_ret;
10535 	u_int32	tmp;
10536 	u_char	hflags;
10537 	int	dp_sg;
10538 	struct pm_ctx *pm;
10539 
10540 	/*
10541 	**	Not supported for auto_sense;
10542 	*/
10543 	if (cp->host_flags & HF_AUTO_SENSE)
10544 		goto out_reject;
10545 
10546 	/*
10547 	**	Apply our alchemy:) (see comments in ncr_evaluate_dp()),
10548 	**	to the resulted data pointer.
10549 	*/
10550 	dp_sg = ncr_evaluate_dp(np, cp, dp_scr, &dp_ofs);
10551 	if (dp_sg < 0)
10552 		goto out_reject;
10553 
10554 	/*
10555 	**	And our alchemy:) allows to easily calculate the data
10556 	**	script address we want to return for the next data phase.
10557 	*/
10558 	dp_ret = cpu_to_scr(cp->phys.header.goalp);
10559 	dp_ret = dp_ret - 8 - (MAX_SCATTER - dp_sg) * (SCR_SG_SIZE*4);
10560 
10561 	/*
10562 	**	If offset / scatter entry is zero we donnot need
10563 	**	a context for the new current data pointer.
10564 	*/
10565 	if (dp_ofs == 0) {
10566 		dp_scr = dp_ret;
10567 		goto out_ok;
10568 	}
10569 
10570 	/*
10571 	**	Get a context for the new current data pointer.
10572 	*/
10573 	hflags = INB (HF_PRT);
10574 
10575 	if (hflags & HF_DP_SAVED)
10576 		hflags ^= HF_ACT_PM;
10577 
10578 	if (!(hflags & HF_ACT_PM)) {
10579 		pm  = &cp->phys.pm0;
10580 		dp_scr = NCB_SCRIPT_PHYS (np, pm0_data);
10581 	}
10582 	else {
10583 		pm = &cp->phys.pm1;
10584 		dp_scr = NCB_SCRIPT_PHYS (np, pm1_data);
10585 	}
10586 
10587 	hflags &= ~(HF_DP_SAVED);
10588 
10589 	OUTB (HF_PRT, hflags);
10590 
10591 	/*
10592 	**	Set up the new current data pointer.
10593 	**	ofs < 0 there, and for the next data phase, we
10594 	**	want to transfer part of the data of the sg entry
10595 	**	corresponding to index dp_sg-1 prior to returning
10596 	**	to the main data script.
10597 	*/
10598 	pm->ret = cpu_to_scr(dp_ret);
10599 	tmp  = scr_to_cpu(cp->phys.data[dp_sg-1].addr);
10600 	tmp += scr_to_cpu(cp->phys.data[dp_sg-1].size) + dp_ofs;
10601 	pm->sg.addr = cpu_to_scr(tmp);
10602 	pm->sg.size = cpu_to_scr(-dp_ofs);
10603 
10604 out_ok:
10605 	OUTL (nc_temp, dp_scr);
10606 	OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
10607 	return;
10608 
10609 out_reject:
10610 	OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
10611 }
10612 
10613 
10614 /*==========================================================
10615 **
10616 **	ncr chip calculation of the data residual.
10617 **
10618 **==========================================================
10619 **
10620 **	As I used to say, the requirement of data residual
10621 **	in SCSI is broken, useless and cannot be achieved
10622 **	without huge complexity.
10623 **	But most OSes and even the official CAM require it.
10624 **	When stupidity happens to be so widely spread inside
10625 **	a community, it gets hard to convince.
10626 **
10627 **	Anyway, I don't care, since I am not going to use
10628 **	any software that considers this data residual as
10629 **	a relevant information. :)
10630 **
10631 **----------------------------------------------------------
10632 */
10633 
10634 static int ncr_compute_residual(ncb_p np, ccb_p cp)
10635 {
10636 	int dp_sg, dp_sgmin, tmp;
10637 	int resid=0;
10638 	int dp_ofs = 0;
10639 
10640 	/*
10641 	 *	Check for some data lost or just thrown away.
10642 	 *	We are not required to be quite accurate in this
10643 	 *	situation. Btw, if we are odd for output and the
10644 	 *	device claims some more data, it may well happen
10645 	 *	than our residual be zero. :-)
10646 	 */
10647 	if (cp->xerr_status & (XE_EXTRA_DATA|XE_SODL_UNRUN|XE_SWIDE_OVRUN)) {
10648 		if (cp->xerr_status & XE_EXTRA_DATA)
10649 			resid -= cp->extra_bytes;
10650 		if (cp->xerr_status & XE_SODL_UNRUN)
10651 			++resid;
10652 		if (cp->xerr_status & XE_SWIDE_OVRUN)
10653 			--resid;
10654 	}
10655 
10656 
10657 	/*
10658 	**	If SCRIPTS reaches its goal point, then
10659 	**	there is no additionnal residual.
10660 	*/
10661 	if (cp->phys.header.lastp == cp->phys.header.goalp)
10662 		return resid;
10663 
10664 	/*
10665 	**	If the last data pointer is data_io (direction
10666 	**	unknown), then no data transfer should have
10667 	**	taken place.
10668 	*/
10669 	if (cp->phys.header.lastp == NCB_SCRIPTH_PHYS (np, data_io))
10670 		return cp->data_len;
10671 
10672 	/*
10673 	**	If no data transfer occurs, or if the data
10674 	**	pointer is weird, return full residual.
10675 	*/
10676 	if (cp->startp == cp->phys.header.lastp ||
10677 	    ncr_evaluate_dp(np, cp, scr_to_cpu(cp->phys.header.lastp),
10678 			    &dp_ofs) < 0) {
10679 		return cp->data_len;
10680 	}
10681 
10682 	/*
10683 	**	We are now full comfortable in the computation
10684 	**	of the data residual (2's complement).
10685 	*/
10686 	dp_sgmin = MAX_SCATTER - cp->segments;
10687 	resid = -cp->ext_ofs;
10688 	for (dp_sg = cp->ext_sg; dp_sg < MAX_SCATTER; ++dp_sg) {
10689 		tmp = scr_to_cpu(cp->phys.data[dp_sg].size);
10690 		resid += (tmp & 0xffffff);
10691 	}
10692 
10693 	/*
10694 	**	Hopefully, the result is not too wrong.
10695 	*/
10696 	return resid;
10697 }
10698 
10699 /*==========================================================
10700 **
10701 **	Print out the containt of a SCSI message.
10702 **
10703 **==========================================================
10704 */
10705 
10706 static int ncr_show_msg (u_char * msg)
10707 {
10708 	u_char i;
10709 	printk ("%x",*msg);
10710 	if (*msg==M_EXTENDED) {
10711 		for (i=1;i<8;i++) {
10712 			if (i-1>msg[1]) break;
10713 			printk ("-%x",msg[i]);
10714 		};
10715 		return (i+1);
10716 	} else if ((*msg & 0xf0) == 0x20) {
10717 		printk ("-%x",msg[1]);
10718 		return (2);
10719 	};
10720 	return (1);
10721 }
10722 
10723 static void ncr_print_msg (ccb_p cp, char *label, u_char *msg)
10724 {
10725 	if (cp)
10726 		PRINT_ADDR(cp->cmd);
10727 	if (label)
10728 		printk ("%s: ", label);
10729 
10730 	(void) ncr_show_msg (msg);
10731 	printk (".\n");
10732 }
10733 
10734 /*===================================================================
10735 **
10736 **	Negotiation for WIDE and SYNCHRONOUS DATA TRANSFER.
10737 **
10738 **===================================================================
10739 **
10740 **	Was Sie schon immer ueber transfermode negotiation wissen wollten ...
10741 **
10742 **	We try to negotiate sync and wide transfer only after
10743 **	a successful inquire command. We look at byte 7 of the
10744 **	inquire data to determine the capabilities of the target.
10745 **
10746 **	When we try to negotiate, we append the negotiation message
10747 **	to the identify and (maybe) simple tag message.
10748 **	The host status field is set to HS_NEGOTIATE to mark this
10749 **	situation.
10750 **
10751 **	If the target doesn't answer this message immediately
10752 **	(as required by the standard), the SIR_NEGO_FAILED interrupt
10753 **	will be raised eventually.
10754 **	The handler removes the HS_NEGOTIATE status, and sets the
10755 **	negotiated value to the default (async / nowide).
10756 **
10757 **	If we receive a matching answer immediately, we check it
10758 **	for validity, and set the values.
10759 **
10760 **	If we receive a Reject message immediately, we assume the
10761 **	negotiation has failed, and fall back to standard values.
10762 **
10763 **	If we receive a negotiation message while not in HS_NEGOTIATE
10764 **	state, it's a target initiated negotiation. We prepare a
10765 **	(hopefully) valid answer, set our parameters, and send back
10766 **	this answer to the target.
10767 **
10768 **	If the target doesn't fetch the answer (no message out phase),
10769 **	we assume the negotiation has failed, and fall back to default
10770 **	settings (SIR_NEGO_PROTO interrupt).
10771 **
10772 **	When we set the values, we adjust them in all ccbs belonging
10773 **	to this target, in the controller's register, and in the "phys"
10774 **	field of the controller's struct ncb.
10775 **
10776 **---------------------------------------------------------------------
10777 */
10778 
10779 /*==========================================================
10780 **
10781 **	ncr chip handler for SYNCHRONOUS DATA TRANSFER
10782 **	REQUEST (SDTR) message.
10783 **
10784 **==========================================================
10785 **
10786 **	Read comments above.
10787 **
10788 **----------------------------------------------------------
10789 */
10790 static void ncr_sync_nego(ncb_p np, tcb_p tp, ccb_p cp)
10791 {
10792 	u_char	scntl3, scntl4;
10793 	u_char	chg, ofs, per, fak;
10794 
10795 	/*
10796 	**	Synchronous request message received.
10797 	*/
10798 
10799 	if (DEBUG_FLAGS & DEBUG_NEGO) {
10800 		ncr_print_msg(cp, "sync msg in", np->msgin);
10801 	};
10802 
10803 	/*
10804 	**	get requested values.
10805 	*/
10806 
10807 	chg = 0;
10808 	per = np->msgin[3];
10809 	ofs = np->msgin[4];
10810 	if (ofs==0) per=255;
10811 
10812 	/*
10813 	**      if target sends SDTR message,
10814 	**	      it CAN transfer synch.
10815 	*/
10816 
10817 	if (ofs)
10818 		tp->inq_byte7 |= INQ7_SYNC;
10819 
10820 	/*
10821 	**	check values against driver limits.
10822 	*/
10823 
10824 	if (per < np->minsync)
10825 		{chg = 1; per = np->minsync;}
10826 	if (per < tp->minsync)
10827 		{chg = 1; per = tp->minsync;}
10828 	if (ofs > np->maxoffs_st)
10829 		{chg = 1; ofs = np->maxoffs_st;}
10830 	if (ofs > tp->maxoffs)
10831 		{chg = 1; ofs = tp->maxoffs;}
10832 
10833 	/*
10834 	**	Check against controller limits.
10835 	*/
10836 	fak	= 7;
10837 	scntl3	= 0;
10838 	scntl4  = 0;
10839 	if (ofs != 0) {
10840 		ncr_getsync(np, per, &fak, &scntl3);
10841 		if (fak > 7) {
10842 			chg = 1;
10843 			ofs = 0;
10844 		}
10845 	}
10846 	if (ofs == 0) {
10847 		fak	= 7;
10848 		per	= 0;
10849 		scntl3	= 0;
10850 		scntl4  = 0;
10851 		tp->minsync = 0;
10852 	}
10853 
10854 	if (DEBUG_FLAGS & DEBUG_NEGO) {
10855 		PRINT_ADDR(cp->cmd);
10856 		printk ("sync: per=%d scntl3=0x%x scntl4=0x%x ofs=%d fak=%d chg=%d.\n",
10857 			per, scntl3, scntl4, ofs, fak, chg);
10858 	}
10859 
10860 	if (INB (HS_PRT) == HS_NEGOTIATE) {
10861 		OUTB (HS_PRT, HS_BUSY);
10862 		switch (cp->nego_status) {
10863 		case NS_SYNC:
10864 			/*
10865 			**      This was an answer message
10866 			*/
10867 			if (chg) {
10868 				/*
10869 				**	Answer wasn't acceptable.
10870 				*/
10871 				ncr_setsync (np, cp, 0, 0xe0, 0);
10872 				OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
10873 			} else {
10874 				/*
10875 				**	Answer is ok.
10876 				*/
10877 				if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
10878 					(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
10879 				  ncr_setsync (np, cp, scntl3, (fak<<5)|ofs,0);
10880 				else
10881 				  ncr_setsync (np, cp, scntl3, ofs, scntl4);
10882 
10883 				OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
10884 			};
10885 			return;
10886 
10887 		case NS_WIDE:
10888 			ncr_setwide (np, cp, 0, 0);
10889 			break;
10890 		};
10891 	};
10892 
10893 	/*
10894 	**	It was a request. Set value and
10895 	**      prepare an answer message
10896 	*/
10897 
10898 	if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
10899 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
10900 		ncr_setsync (np, cp, scntl3, (fak<<5)|ofs,0);
10901 	else
10902 		ncr_setsync (np, cp, scntl3, ofs, scntl4);
10903 
10904 	np->msgout[0] = M_EXTENDED;
10905 	np->msgout[1] = 3;
10906 	np->msgout[2] = M_X_SYNC_REQ;
10907 	np->msgout[3] = per;
10908 	np->msgout[4] = ofs;
10909 
10910 	cp->nego_status = NS_SYNC;
10911 
10912 	if (DEBUG_FLAGS & DEBUG_NEGO) {
10913 		ncr_print_msg(cp, "sync msgout", np->msgout);
10914 	}
10915 
10916 	np->msgin [0] = M_NOOP;
10917 
10918 	if (!ofs)
10919 		OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
10920 	else
10921 		OUTL_DSP (NCB_SCRIPTH_PHYS (np, sdtr_resp));
10922 }
10923 
10924 /*==========================================================
10925 **
10926 **	ncr chip handler for WIDE DATA TRANSFER REQUEST
10927 **	(WDTR) message.
10928 **
10929 **==========================================================
10930 **
10931 **	Read comments above.
10932 **
10933 **----------------------------------------------------------
10934 */
10935 static void ncr_wide_nego(ncb_p np, tcb_p tp, ccb_p cp)
10936 {
10937 	u_char	chg, wide;
10938 
10939 	/*
10940 	**	Wide request message received.
10941 	*/
10942 	if (DEBUG_FLAGS & DEBUG_NEGO) {
10943 		ncr_print_msg(cp, "wide msgin", np->msgin);
10944 	};
10945 
10946 	/*
10947 	**	get requested values.
10948 	*/
10949 
10950 	chg  = 0;
10951 	wide = np->msgin[3];
10952 
10953 	/*
10954 	**      if target sends WDTR message,
10955 	**	      it CAN transfer wide.
10956 	*/
10957 
10958 	if (wide)
10959 		tp->inq_byte7 |= INQ7_WIDE16;
10960 
10961 	/*
10962 	**	check values against driver limits.
10963 	*/
10964 
10965 	if (wide > tp->usrwide)
10966 		{chg = 1; wide = tp->usrwide;}
10967 
10968 	if (DEBUG_FLAGS & DEBUG_NEGO) {
10969 		PRINT_ADDR(cp->cmd);
10970 		printk ("wide: wide=%d chg=%d.\n", wide, chg);
10971 	}
10972 
10973 	if (INB (HS_PRT) == HS_NEGOTIATE) {
10974 		OUTB (HS_PRT, HS_BUSY);
10975 		switch (cp->nego_status) {
10976 		case NS_WIDE:
10977 			/*
10978 			**      This was an answer message
10979 			*/
10980 			if (chg) {
10981 				/*
10982 				**	Answer wasn't acceptable.
10983 				*/
10984 				ncr_setwide (np, cp, 0, 1);
10985 				OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
10986 			} else {
10987 				/*
10988 				**	Answer is ok.
10989 				*/
10990 				ncr_setwide (np, cp, wide, 1);
10991 				OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
10992 			};
10993 			return;
10994 
10995 		case NS_SYNC:
10996 			ncr_setsync (np, cp, 0, 0xe0, 0);
10997 			break;
10998 		};
10999 	};
11000 
11001 	/*
11002 	**	It was a request, set value and
11003 	**      prepare an answer message
11004 	*/
11005 
11006 	ncr_setwide (np, cp, wide, 1);
11007 
11008 	np->msgout[0] = M_EXTENDED;
11009 	np->msgout[1] = 2;
11010 	np->msgout[2] = M_X_WIDE_REQ;
11011 	np->msgout[3] = wide;
11012 
11013 	np->msgin [0] = M_NOOP;
11014 
11015 	cp->nego_status = NS_WIDE;
11016 
11017 	if (DEBUG_FLAGS & DEBUG_NEGO) {
11018 		ncr_print_msg(cp, "wide msgout", np->msgout);
11019 	}
11020 
11021 	OUTL_DSP (NCB_SCRIPTH_PHYS (np, wdtr_resp));
11022 }
11023 /*==========================================================
11024 **
11025 **	ncr chip handler for PARALLEL PROTOCOL REQUEST
11026 **	(PPR) message.
11027 **
11028 **==========================================================
11029 **
11030 **	Read comments above.
11031 **
11032 **----------------------------------------------------------
11033 */
11034 static void ncr_ppr_nego(ncb_p np, tcb_p tp, ccb_p cp)
11035 {
11036 	u_char	scntl3, scntl4;
11037 	u_char	chg, ofs, per, fak, wth, dt;
11038 
11039 	/*
11040 	**	PPR message received.
11041 	*/
11042 
11043 	if (DEBUG_FLAGS & DEBUG_NEGO) {
11044 		ncr_print_msg(cp, "ppr msg in", np->msgin);
11045 	};
11046 
11047 	/*
11048 	**	get requested values.
11049 	*/
11050 
11051 	chg = 0;
11052 	per = np->msgin[3];
11053 	ofs = np->msgin[5];
11054 	wth = np->msgin[6];
11055 	dt  = np->msgin[7];
11056 	if (ofs==0) per=255;
11057 
11058 	/*
11059 	**      if target sends sync (wide),
11060 	**	      it CAN transfer synch (wide).
11061 	*/
11062 
11063 	if (ofs)
11064 		tp->inq_byte7 |= INQ7_SYNC;
11065 
11066 	if (wth)
11067 		tp->inq_byte7 |= INQ7_WIDE16;
11068 
11069 	/*
11070 	**	check values against driver limits.
11071 	*/
11072 
11073 	if (wth > tp->usrwide)
11074 		{chg = 1; wth = tp->usrwide;}
11075 	if (per < np->minsync)
11076 		{chg = 1; per = np->minsync;}
11077 	if (per < tp->minsync)
11078 		{chg = 1; per = tp->minsync;}
11079 	if (ofs > tp->maxoffs)
11080 		{chg = 1; ofs = tp->maxoffs;}
11081 
11082 	/*
11083 	**	Check against controller limits.
11084 	*/
11085 	fak	= 7;
11086 	scntl3	= 0;
11087 	scntl4  = 0;
11088 	if (ofs != 0) {
11089 		scntl4 = dt ? 0x80 : 0;
11090 		ncr_getsync(np, per, &fak, &scntl3);
11091 		if (fak > 7) {
11092 			chg = 1;
11093 			ofs = 0;
11094 		}
11095 	}
11096 	if (ofs == 0) {
11097 		fak	= 7;
11098 		per	= 0;
11099 		scntl3	= 0;
11100 		scntl4  = 0;
11101 		tp->minsync = 0;
11102 	}
11103 
11104 	/*
11105 	**	If target responds with Ultra 3 speed
11106 	**	but narrow or not DT, reject.
11107 	**	If target responds with DT request
11108 	**	but not Ultra3 speeds, reject message,
11109 	**	reset min sync for target to 0x0A and
11110 	**	set flags to re-negotiate.
11111 	*/
11112 
11113 	if   ((per == 0x09) && ofs && (!wth || !dt))
11114 		chg = 1;
11115 	else if (( (per > 0x09) && dt) )
11116 		chg = 2;
11117 
11118 	/* Not acceptable since beyond controller limit */
11119 	if (!dt && ofs > np->maxoffs_st)
11120 		{chg = 2; ofs = np->maxoffs_st;}
11121 
11122 	if (DEBUG_FLAGS & DEBUG_NEGO) {
11123 		PRINT_ADDR(cp->cmd);
11124 		printk ("ppr: wth=%d per=%d scntl3=0x%x scntl4=0x%x ofs=%d fak=%d chg=%d.\n",
11125 			wth, per, scntl3, scntl4, ofs, fak, chg);
11126 	}
11127 
11128 	if (INB (HS_PRT) == HS_NEGOTIATE) {
11129 		OUTB (HS_PRT, HS_BUSY);
11130 		switch (cp->nego_status) {
11131 		case NS_PPR:
11132 			/*
11133 			**      This was an answer message
11134 			*/
11135 			if (chg) {
11136 				/*
11137 				**	Answer wasn't acceptable.
11138 				*/
11139 				if (chg == 2) {
11140 					/* Send message reject and reset flags for
11141 					** host to re-negotiate with min period 0x0A.
11142 					*/
11143 					tp->minsync = 0x0A;
11144 					tp->period = 0;
11145 					tp->widedone = 0;
11146 				}
11147 				ncr_setsyncwide (np, cp, 0, 0xe0, 0, 0);
11148 				OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
11149 			} else {
11150 				/*
11151 				**	Answer is ok.
11152 				*/
11153 
11154 				if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
11155 					(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
11156 				  ncr_setsyncwide (np, cp, scntl3, (fak<<5)|ofs,0, wth);
11157 				else
11158 				  ncr_setsyncwide (np, cp, scntl3, ofs, scntl4, wth);
11159 
11160 				OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
11161 
11162 			};
11163 			return;
11164 
11165 		case NS_SYNC:
11166 			ncr_setsync (np, cp, 0, 0xe0, 0);
11167 			break;
11168 
11169 		case NS_WIDE:
11170 			ncr_setwide (np, cp, 0, 0);
11171 			break;
11172 		};
11173 	};
11174 
11175 	/*
11176 	**	It was a request. Set value and
11177 	**      prepare an answer message
11178 	**
11179 	**	If narrow or not DT and requesting Ultra3
11180 	**	slow the bus down and force ST. If not
11181 	**	requesting Ultra3, force ST.
11182 	**	Max offset is 31=0x1f if ST mode.
11183 	*/
11184 
11185 	if  ((per == 0x09) && ofs && (!wth || !dt)) {
11186 		per = 0x0A;
11187 		dt = 0;
11188 	}
11189 	else if ( (per > 0x09) && dt) {
11190 		dt = 0;
11191 	}
11192 	if (!dt && ofs > np->maxoffs_st)
11193 		ofs = np->maxoffs_st;
11194 
11195 	if ((np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
11196 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66))
11197 		ncr_setsyncwide (np, cp, scntl3, (fak<<5)|ofs,0, wth);
11198 	else
11199 		ncr_setsyncwide (np, cp, scntl3, ofs, scntl4, wth);
11200 
11201 	np->msgout[0] = M_EXTENDED;
11202 	np->msgout[1] = 6;
11203 	np->msgout[2] = M_X_PPR_REQ;
11204 	np->msgout[3] = per;
11205 	np->msgout[4] = 0;
11206 	np->msgout[5] = ofs;
11207 	np->msgout[6] = wth;
11208 	np->msgout[7] = dt;
11209 
11210 	cp->nego_status = NS_PPR;
11211 
11212 	if (DEBUG_FLAGS & DEBUG_NEGO) {
11213 		ncr_print_msg(cp, "ppr msgout", np->msgout);
11214 	}
11215 
11216 	np->msgin [0] = M_NOOP;
11217 
11218 	if (!ofs)
11219 		OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
11220 	else
11221 		OUTL_DSP (NCB_SCRIPTH_PHYS (np, ppr_resp));
11222 }
11223 
11224 
11225 
11226 /*
11227 **	Reset SYNC or WIDE to default settings.
11228 **	Called when a negotiation does not succeed either
11229 **	on rejection or on protocol error.
11230 */
11231 static void ncr_nego_default(ncb_p np, tcb_p tp, ccb_p cp)
11232 {
11233 	/*
11234 	**	any error in negotiation:
11235 	**	fall back to default mode.
11236 	*/
11237 	switch (cp->nego_status) {
11238 
11239 	case NS_SYNC:
11240 		ncr_setsync (np, cp, 0, 0xe0, 0);
11241 		break;
11242 
11243 	case NS_WIDE:
11244 		ncr_setwide (np, cp, 0, 0);
11245 		break;
11246 
11247 	case NS_PPR:
11248 		/*
11249 		 * ppr_negotiation is set to 1 on the first ppr nego command.
11250 		 * If ppr is successful, it is reset to 2.
11251 		 * If unsuccessful it is reset to 0.
11252 		 */
11253 		if (DEBUG_FLAGS & DEBUG_NEGO) {
11254 			tcb_p tp=&np->target[cp->target];
11255 			u_char factor, offset, width;
11256 
11257 			ncr_get_xfer_info ( np, tp, &factor, &offset, &width);
11258 
11259 			printk("Current factor %d offset %d width %d\n",
11260 				factor, offset, width);
11261 		}
11262 		if (tp->ppr_negotiation == 2)
11263 			ncr_setsyncwide (np, cp, 0, 0xe0, 0, 0);
11264 		else if (tp->ppr_negotiation == 1) {
11265 
11266 			/* First ppr command has received a  M REJECT.
11267 			 * Do not change the existing wide/sync parameter
11268 			 * values (asyn/narrow if this as the first nego;
11269 			 * may be different if target initiates nego.).
11270 			 */
11271 			tp->ppr_negotiation = 0;
11272 		}
11273 		else
11274 		{
11275 			tp->ppr_negotiation = 0;
11276 			ncr_setwide (np, cp, 0, 0);
11277 		}
11278 		break;
11279 	};
11280 	np->msgin [0] = M_NOOP;
11281 	np->msgout[0] = M_NOOP;
11282 	cp->nego_status = 0;
11283 }
11284 
11285 /*==========================================================
11286 **
11287 **	ncr chip handler for MESSAGE REJECT received for
11288 **	a WIDE or SYNCHRONOUS negotiation.
11289 **
11290 **	clear the PPR negotiation flag, all future nego.
11291 **	will be SDTR and WDTR
11292 **
11293 **==========================================================
11294 **
11295 **	Read comments above.
11296 **
11297 **----------------------------------------------------------
11298 */
11299 static void ncr_nego_rejected(ncb_p np, tcb_p tp, ccb_p cp)
11300 {
11301 	ncr_nego_default(np, tp, cp);
11302 	OUTB (HS_PRT, HS_BUSY);
11303 }
11304 
11305 
11306 /*==========================================================
11307 **
11308 **
11309 **      ncr chip exception handler for programmed interrupts.
11310 **
11311 **
11312 **==========================================================
11313 */
11314 
11315 void ncr_int_sir (ncb_p np)
11316 {
11317 	u_char	num	= INB (nc_dsps);
11318 	u_long	dsa	= INL (nc_dsa);
11319 	ccb_p	cp	= ncr_ccb_from_dsa(np, dsa);
11320 	u_char	target	= INB (nc_sdid) & 0x0f;
11321 	tcb_p	tp	= &np->target[target];
11322 	int	tmp;
11323 
11324 	if (DEBUG_FLAGS & DEBUG_TINY) printk ("I#%d", num);
11325 
11326 	switch (num) {
11327 	/*
11328 	**	See comments in the SCRIPTS code.
11329 	*/
11330 #ifdef SCSI_NCR_PCIQ_SYNC_ON_INTR
11331 	case SIR_DUMMY_INTERRUPT:
11332 		goto out;
11333 #endif
11334 
11335 	/*
11336 	**	The C code is currently trying to recover from something.
11337 	**	Typically, user want to abort some command.
11338 	*/
11339 	case SIR_SCRIPT_STOPPED:
11340 	case SIR_TARGET_SELECTED:
11341 	case SIR_ABORT_SENT:
11342 	case SIR_AUTO_SENSE_DONE:
11343 		ncr_sir_task_recovery(np, num);
11344 		return;
11345 	/*
11346 	**	The device didn't go to MSG OUT phase after having
11347 	**	been selected with ATN. We donnot want to handle
11348 	**	that.
11349 	*/
11350 	case SIR_SEL_ATN_NO_MSG_OUT:
11351 		printk ("%s:%d: No MSG OUT phase after selection with ATN.\n",
11352 			ncr_name (np), target);
11353 		goto out_stuck;
11354 	/*
11355 	**	The device didn't switch to MSG IN phase after
11356 	**	having reseleted the initiator.
11357 	*/
11358 	case SIR_RESEL_NO_MSG_IN:
11359 	/*
11360 	**	After reselection, the device sent a message that wasn't
11361 	**	an IDENTIFY.
11362 	*/
11363 	case SIR_RESEL_NO_IDENTIFY:
11364 		/*
11365 		**	If devices reselecting without sending an IDENTIFY
11366 		**	message still exist, this should help.
11367 		**	We just assume lun=0, 1 CCB, no tag.
11368 		*/
11369 		if (tp->l0p) {
11370 			OUTL (nc_dsa, scr_to_cpu(tp->l0p->tasktbl[0]));
11371 			OUTL_DSP (NCB_SCRIPT_PHYS (np, resel_go));
11372 			return;
11373 		}
11374 	/*
11375 	**	The device reselected a LUN we donnot know of.
11376 	*/
11377 	case SIR_RESEL_BAD_LUN:
11378 		np->msgout[0] = M_RESET;
11379 		goto out;
11380 	/*
11381 	**	The device reselected for an untagged nexus and we
11382 	**	haven't any.
11383 	*/
11384 	case SIR_RESEL_BAD_I_T_L:
11385 		np->msgout[0] = M_ABORT;
11386 		goto out;
11387 	/*
11388 	**	The device reselected for a tagged nexus that we donnot
11389 	**	have.
11390 	*/
11391 	case SIR_RESEL_BAD_I_T_L_Q:
11392 		np->msgout[0] = M_ABORT_TAG;
11393 		goto out;
11394 	/*
11395 	**	The SCRIPTS let us know that the device has grabbed
11396 	**	our message and will abort the job.
11397 	*/
11398 	case SIR_RESEL_ABORTED:
11399 		np->lastmsg = np->msgout[0];
11400 		np->msgout[0] = M_NOOP;
11401 		printk ("%s:%d: message %x sent on bad reselection.\n",
11402 			ncr_name (np), target, np->lastmsg);
11403 		goto out;
11404 	/*
11405 	**	The SCRIPTS let us know that a message has been
11406 	**	successfully sent to the device.
11407 	*/
11408 	case SIR_MSG_OUT_DONE:
11409 		np->lastmsg = np->msgout[0];
11410 		np->msgout[0] = M_NOOP;
11411 		/* Should we really care of that */
11412 		if (np->lastmsg == M_PARITY || np->lastmsg == M_ID_ERROR) {
11413 			if (cp) {
11414 				cp->xerr_status &= ~XE_PARITY_ERR;
11415                                 if (!cp->xerr_status)
11416 					OUTOFFB (HF_PRT, HF_EXT_ERR);
11417 			}
11418 		}
11419 		goto out;
11420 	/*
11421 	**	The device didn't send a GOOD SCSI status.
11422 	**	We may have some work to do prior to allow
11423 	**	the SCRIPTS processor to continue.
11424 	*/
11425 	case SIR_BAD_STATUS:
11426 		if (!cp)
11427 			goto out;
11428 		ncr_sir_to_redo(np, num, cp);
11429 		return;
11430 	/*
11431 	**	We are asked by the SCRIPTS to prepare a
11432 	**	REJECT message.
11433 	*/
11434 	case SIR_REJECT_TO_SEND:
11435 		ncr_print_msg(cp, "M_REJECT to send for ", np->msgin);
11436 		np->msgout[0] = M_REJECT;
11437 		goto out;
11438 	/*
11439 	**	We have been ODD at the end of a DATA IN
11440 	**	transfer and the device didn't send a
11441 	**	IGNORE WIDE RESIDUE message.
11442 	**	It is a data overrun condition.
11443 	*/
11444 	case SIR_SWIDE_OVERRUN:
11445                 if (cp) {
11446                         OUTONB (HF_PRT, HF_EXT_ERR);
11447                         cp->xerr_status |= XE_SWIDE_OVRUN;
11448                 }
11449 		goto out;
11450 	/*
11451 	**	We have been ODD at the end of a DATA OUT
11452 	**	transfer.
11453 	**	It is a data underrun condition.
11454 	*/
11455 	case SIR_SODL_UNDERRUN:
11456                 if (cp) {
11457                         OUTONB (HF_PRT, HF_EXT_ERR);
11458                         cp->xerr_status |= XE_SODL_UNRUN;
11459                 }
11460 		goto out;
11461 	/*
11462 	**	The device wants us to tranfer more data than
11463 	**	expected or in the wrong direction.
11464 	**	The number of extra bytes is in scratcha.
11465 	**	It is a data overrun condition.
11466 	*/
11467 	case SIR_DATA_OVERRUN:
11468 		if (cp) {
11469 			OUTONB (HF_PRT, HF_EXT_ERR);
11470 			cp->xerr_status |= XE_EXTRA_DATA;
11471 			cp->extra_bytes += INL (nc_scratcha);
11472 		}
11473 		goto out;
11474 	/*
11475 	**	The device switched to an illegal phase (4/5).
11476 	*/
11477 	case SIR_BAD_PHASE:
11478 		if (cp) {
11479 			OUTONB (HF_PRT, HF_EXT_ERR);
11480 			cp->xerr_status |= XE_BAD_PHASE;
11481 		}
11482 		goto out;
11483 	/*
11484 	**	We received a message.
11485 	*/
11486 	case SIR_MSG_RECEIVED:
11487 		if (!cp)
11488 			goto out_stuck;
11489 		switch (np->msgin [0]) {
11490 		/*
11491 		**	We received an extended message.
11492 		**	We handle MODIFY DATA POINTER, SDTR, WDTR
11493 		**	and reject all other extended messages.
11494 		*/
11495 		case M_EXTENDED:
11496 			switch (np->msgin [2]) {
11497 			case M_X_MODIFY_DP:
11498 				if (DEBUG_FLAGS & DEBUG_POINTER)
11499 					ncr_print_msg(cp,"modify DP",np->msgin);
11500 				tmp = (np->msgin[3]<<24) + (np->msgin[4]<<16) +
11501 				      (np->msgin[5]<<8)  + (np->msgin[6]);
11502 				ncr_modify_dp(np, tp, cp, tmp);
11503 				return;
11504 			case M_X_SYNC_REQ:
11505 				ncr_sync_nego(np, tp, cp);
11506 				return;
11507 			case M_X_WIDE_REQ:
11508 				ncr_wide_nego(np, tp, cp);
11509 				return;
11510 			case M_X_PPR_REQ:
11511 				ncr_ppr_nego(np, tp, cp);
11512 				return;
11513 			default:
11514 				goto out_reject;
11515 			}
11516 			break;
11517 		/*
11518 		**	We received a 1/2 byte message not handled from SCRIPTS.
11519 		**	We are only expecting MESSAGE REJECT and IGNORE WIDE
11520 		**	RESIDUE messages that haven't been anticipated by
11521 		**	SCRIPTS on SWIDE full condition. Unanticipated IGNORE
11522 		**	WIDE RESIDUE messages are aliased as MODIFY DP (-1).
11523 		*/
11524 		case M_IGN_RESIDUE:
11525 			if (DEBUG_FLAGS & DEBUG_POINTER)
11526 				ncr_print_msg(cp,"ign wide residue", np->msgin);
11527 			ncr_modify_dp(np, tp, cp, -1);
11528 			return;
11529 		case M_REJECT:
11530 			if (INB (HS_PRT) == HS_NEGOTIATE)
11531 				ncr_nego_rejected(np, tp, cp);
11532 			else {
11533 				PRINT_ADDR(cp->cmd);
11534 				printk ("M_REJECT received (%x:%x).\n",
11535 					scr_to_cpu(np->lastmsg), np->msgout[0]);
11536 			}
11537 			goto out_clrack;
11538 			break;
11539 		default:
11540 			goto out_reject;
11541 		}
11542 		break;
11543 	/*
11544 	**	We received an unknown message.
11545 	**	Ignore all MSG IN phases and reject it.
11546 	*/
11547 	case SIR_MSG_WEIRD:
11548 		ncr_print_msg(cp, "WEIRD message received", np->msgin);
11549 		OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_weird));
11550 		return;
11551 	/*
11552 	**	Negotiation failed.
11553 	**	Target does not send us the reply.
11554 	**	Remove the HS_NEGOTIATE status.
11555 	*/
11556 	case SIR_NEGO_FAILED:
11557 		OUTB (HS_PRT, HS_BUSY);
11558 	/*
11559 	**	Negotiation failed.
11560 	**	Target does not want answer message.
11561 	*/
11562 	case SIR_NEGO_PROTO:
11563 		ncr_nego_default(np, tp, cp);
11564 		goto out;
11565 	};
11566 
11567 out:
11568 	OUTONB_STD ();
11569 	return;
11570 out_reject:
11571 	OUTL_DSP (NCB_SCRIPTH_PHYS (np, msg_bad));
11572 	return;
11573 out_clrack:
11574 	OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
11575 	return;
11576 out_stuck:
11577 	return;
11578 }
11579 
11580 
11581 /*==========================================================
11582 **
11583 **
11584 **	Acquire a control block
11585 **
11586 **
11587 **==========================================================
11588 */
11589 
11590 static	ccb_p ncr_get_ccb (ncb_p np, u_char tn, u_char ln)
11591 {
11592 	tcb_p tp = &np->target[tn];
11593 	lcb_p lp = ncr_lp(np, tp, ln);
11594 	u_short tag = NO_TAG;
11595 	XPT_QUEHEAD *qp;
11596 	ccb_p cp = (ccb_p) 0;
11597 
11598 	/*
11599 	**	Allocate a new CCB if needed.
11600 	*/
11601 	if (xpt_que_empty(&np->free_ccbq))
11602 		(void) ncr_alloc_ccb(np);
11603 
11604 	/*
11605 	**	Look for a free CCB
11606 	*/
11607 	qp = xpt_remque_head(&np->free_ccbq);
11608 	if (!qp)
11609 		goto out;
11610 	cp = xpt_que_entry(qp, struct ccb, link_ccbq);
11611 
11612 	/*
11613 	**	If the LCB is not yet available and we already
11614 	**	have queued a CCB for a LUN without LCB,
11615 	**	give up. Otherwise all is fine. :-)
11616 	*/
11617 	if (!lp) {
11618 		if (xpt_que_empty(&np->b0_ccbq))
11619 			xpt_insque_head(&cp->link_ccbq, &np->b0_ccbq);
11620 		else
11621 			goto out_free;
11622 	} else {
11623 		/*
11624 		**	Tune tag mode if asked by user.
11625 		*/
11626 		if (lp->queuedepth != lp->numtags) {
11627 			ncr_setup_tags(np, tn, ln);
11628 		}
11629 
11630 		/*
11631 		**	Get a tag for this nexus if required.
11632 		**	Keep from using more tags than we can handle.
11633 		*/
11634 		if (lp->usetags) {
11635 			if (lp->busyccbs < lp->maxnxs) {
11636 				tag = lp->cb_tags[lp->ia_tag];
11637 				++lp->ia_tag;
11638 				if (lp->ia_tag == MAX_TAGS)
11639 					lp->ia_tag = 0;
11640 				cp->tags_si = lp->tags_si;
11641 				++lp->tags_sum[cp->tags_si];
11642 			}
11643 			else
11644 				goto out_free;
11645 		}
11646 
11647 		/*
11648 		**	Put the CCB in the LUN wait queue and
11649 		**	count it as busy.
11650 		*/
11651 		xpt_insque_tail(&cp->link_ccbq, &lp->wait_ccbq);
11652 		++lp->busyccbs;
11653 	}
11654 
11655 	/*
11656 	**	Remember all informations needed to free this CCB.
11657 	*/
11658 	cp->to_abort = 0;
11659 	cp->tag	   = tag;
11660 	cp->target = tn;
11661 	cp->lun    = ln;
11662 
11663 	if (DEBUG_FLAGS & DEBUG_TAGS) {
11664 		PRINT_LUN(np, tn, ln);
11665 		printk ("ccb @%p using tag %d.\n", cp, tag);
11666 	}
11667 
11668 out:
11669 	return cp;
11670 out_free:
11671 	xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
11672 	return (ccb_p) 0;
11673 }
11674 
11675 /*==========================================================
11676 **
11677 **
11678 **	Release one control block
11679 **
11680 **
11681 **==========================================================
11682 */
11683 
11684 static void ncr_free_ccb (ncb_p np, ccb_p cp)
11685 {
11686 	tcb_p tp = &np->target[cp->target];
11687 	lcb_p lp = ncr_lp(np, tp, cp->lun);
11688 
11689 	if (DEBUG_FLAGS & DEBUG_TAGS) {
11690 		PRINT_LUN(np, cp->target, cp->lun);
11691 		printk ("ccb @%p freeing tag %d.\n", cp, cp->tag);
11692 	}
11693 
11694 	/*
11695 	**	If lun control block available, make available
11696 	**	the task slot and the tag if any.
11697 	**	Decrement counters.
11698 	*/
11699 	if (lp) {
11700 		if (cp->tag != NO_TAG) {
11701 			lp->cb_tags[lp->if_tag++] = cp->tag;
11702 			if (lp->if_tag == MAX_TAGS)
11703 				lp->if_tag = 0;
11704 			--lp->tags_sum[cp->tags_si];
11705 			lp->tasktbl[cp->tag] = cpu_to_scr(np->p_bad_i_t_l_q);
11706 		} else {
11707 			lp->tasktbl[0] = cpu_to_scr(np->p_bad_i_t_l);
11708 		}
11709 		--lp->busyccbs;
11710 		if (cp->queued) {
11711 			--lp->queuedccbs;
11712 		}
11713 	}
11714 
11715 	/*
11716 	**	Make this CCB available.
11717 	*/
11718 	xpt_remque(&cp->link_ccbq);
11719 	xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
11720 	cp -> host_status = HS_IDLE;
11721 	cp -> queued = 0;
11722 }
11723 
11724 /*------------------------------------------------------------------------
11725 **	Allocate a CCB and initialize its fixed part.
11726 **------------------------------------------------------------------------
11727 **------------------------------------------------------------------------
11728 */
11729 static ccb_p ncr_alloc_ccb(ncb_p np)
11730 {
11731 	ccb_p cp = 0;
11732 	int hcode;
11733 
11734 	/*
11735 	**	Allocate memory for this CCB.
11736 	*/
11737 	cp = m_calloc_dma(sizeof(struct ccb), "CCB");
11738 	if (!cp)
11739 		return 0;
11740 
11741 	/*
11742 	**	Count it and initialyze it.
11743 	*/
11744 	np->actccbs++;
11745 
11746 	/*
11747 	**	Remember virtual and bus address of this ccb.
11748 	*/
11749 	cp->p_ccb 	   = vtobus(cp);
11750 
11751 	/*
11752 	**	Insert this ccb into the hashed list.
11753 	*/
11754 	hcode = CCB_HASH_CODE(cp->p_ccb);
11755 	cp->link_ccbh = np->ccbh[hcode];
11756 	np->ccbh[hcode] = cp;
11757 
11758 	/*
11759 	**	Initialyze the start and restart actions.
11760 	*/
11761 	cp->phys.header.go.start   = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
11762 	cp->phys.header.go.restart = cpu_to_scr(NCB_SCRIPTH_PHYS(np,bad_i_t_l));
11763 
11764 	/*
11765 	**	Initilialyze some other fields.
11766 	*/
11767 	cp->phys.smsg_ext.addr = cpu_to_scr(NCB_PHYS(np, msgin[2]));
11768 
11769 	/*
11770 	**	Chain into wakeup list and free ccb queue.
11771 	*/
11772 	cp->link_ccb	= np->ccbc;
11773 	np->ccbc	= cp;
11774 
11775 	xpt_insque_head(&cp->link_ccbq, &np->free_ccbq);
11776 
11777 	return cp;
11778 }
11779 
11780 /*------------------------------------------------------------------------
11781 **	Look up a CCB from a DSA value.
11782 **------------------------------------------------------------------------
11783 **------------------------------------------------------------------------
11784 */
11785 static ccb_p ncr_ccb_from_dsa(ncb_p np, u_long dsa)
11786 {
11787 	int hcode;
11788 	ccb_p cp;
11789 
11790 	hcode = CCB_HASH_CODE(dsa);
11791 	cp = np->ccbh[hcode];
11792 	while (cp) {
11793 		if (cp->p_ccb == dsa)
11794 			break;
11795 		cp = cp->link_ccbh;
11796 	}
11797 
11798 	return cp;
11799 }
11800 
11801 /*==========================================================
11802 **
11803 **
11804 **      Allocation of resources for Targets/Luns/Tags.
11805 **
11806 **
11807 **==========================================================
11808 */
11809 
11810 
11811 /*------------------------------------------------------------------------
11812 **	Target control block initialisation.
11813 **------------------------------------------------------------------------
11814 **	This data structure is fully initialized after a SCSI command
11815 **	has been successfully completed for this target.
11816 **------------------------------------------------------------------------
11817 */
11818 static void ncr_init_tcb (ncb_p np, u_char tn)
11819 {
11820 	/*
11821 	**	Check some alignments required by the chip.
11822 	*/
11823 	assert (( (offsetof(struct ncr_reg, nc_sxfer) ^
11824 		offsetof(struct tcb    , sval    )) &3) == 0);
11825 	assert (( (offsetof(struct ncr_reg, nc_scntl3) ^
11826 		offsetof(struct tcb    , wval    )) &3) == 0);
11827 	if ((np->device_id == PCI_DEVICE_ID_LSI_53C1010) ||
11828 		(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)){
11829 		assert (( (offsetof(struct ncr_reg, nc_scntl4) ^
11830 			offsetof(struct tcb    , uval    )) &3) == 0);
11831 	}
11832 }
11833 
11834 /*------------------------------------------------------------------------
11835 **	Lun control block allocation and initialization.
11836 **------------------------------------------------------------------------
11837 **	This data structure is allocated and initialized after a SCSI
11838 **	command has been successfully completed for this target/lun.
11839 **------------------------------------------------------------------------
11840 */
11841 static lcb_p ncr_alloc_lcb (ncb_p np, u_char tn, u_char ln)
11842 {
11843 	tcb_p tp = &np->target[tn];
11844 	lcb_p lp = ncr_lp(np, tp, ln);
11845 
11846 	/*
11847 	**	Already done, return.
11848 	*/
11849 	if (lp)
11850 		return lp;
11851 
11852 	/*
11853 	**	Initialize the target control block if not yet.
11854 	*/
11855 	ncr_init_tcb(np, tn);
11856 
11857 	/*
11858 	**	Allocate the lcb bus address array.
11859 	**	Compute the bus address of this table.
11860 	*/
11861 	if (ln && !tp->luntbl) {
11862 		int i;
11863 
11864 		tp->luntbl = m_calloc_dma(256, "LUNTBL");
11865 		if (!tp->luntbl)
11866 			goto fail;
11867 		for (i = 0 ; i < 64 ; i++)
11868 			tp->luntbl[i] = cpu_to_scr(NCB_PHYS(np, resel_badlun));
11869 		tp->b_luntbl = cpu_to_scr(vtobus(tp->luntbl));
11870 	}
11871 
11872 	/*
11873 	**	Allocate the table of pointers for LUN(s) > 0, if needed.
11874 	*/
11875 	if (ln && !tp->lmp) {
11876 		tp->lmp = m_calloc(MAX_LUN * sizeof(lcb_p), "LMP");
11877 		if (!tp->lmp)
11878 			goto fail;
11879 	}
11880 
11881 	/*
11882 	**	Allocate the lcb.
11883 	**	Make it available to the chip.
11884 	*/
11885 	lp = m_calloc_dma(sizeof(struct lcb), "LCB");
11886 	if (!lp)
11887 		goto fail;
11888 	if (ln) {
11889 		tp->lmp[ln] = lp;
11890 		tp->luntbl[ln] = cpu_to_scr(vtobus(lp));
11891 	}
11892 	else {
11893 		tp->l0p = lp;
11894 		tp->b_lun0 = cpu_to_scr(vtobus(lp));
11895 	}
11896 
11897 	/*
11898 	**	Initialize the CCB queue headers.
11899 	*/
11900 	xpt_que_init(&lp->busy_ccbq);
11901 	xpt_que_init(&lp->wait_ccbq);
11902 
11903 	/*
11904 	**	Set max CCBs to 1 and use the default task array
11905 	**	by default.
11906 	*/
11907 	lp->maxnxs	= 1;
11908 	lp->tasktbl	= &lp->tasktbl_0;
11909 	lp->b_tasktbl	= cpu_to_scr(vtobus(lp->tasktbl));
11910 	lp->tasktbl[0]	= cpu_to_scr(np->p_notask);
11911 	lp->resel_task	= cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_notag));
11912 
11913 	/*
11914 	**	Initialize command queuing control.
11915 	*/
11916 	lp->busyccbs	= 1;
11917 	lp->queuedccbs	= 1;
11918 	lp->queuedepth	= 1;
11919 fail:
11920 	return lp;
11921 }
11922 
11923 
11924 /*------------------------------------------------------------------------
11925 **	Lun control block setup on INQUIRY data received.
11926 **------------------------------------------------------------------------
11927 **	We only support WIDE, SYNC for targets and CMDQ for logical units.
11928 **	This setup is done on each INQUIRY since we are expecting user
11929 **	will play with CHANGE DEFINITION commands. :-)
11930 **------------------------------------------------------------------------
11931 */
11932 static lcb_p ncr_setup_lcb (ncb_p np, u_char tn, u_char ln, u_char *inq_data)
11933 {
11934 	tcb_p tp = &np->target[tn];
11935 	lcb_p lp = ncr_lp(np, tp, ln);
11936 	u_char inq_byte7;
11937 	int i;
11938 
11939 	/*
11940 	**	If no lcb, try to allocate it.
11941 	*/
11942 	if (!lp && !(lp = ncr_alloc_lcb(np, tn, ln)))
11943 		goto fail;
11944 
11945 #if 0	/* No more used. Left here as provision */
11946 	/*
11947 	**	Get device quirks.
11948 	*/
11949 	tp->quirks = 0;
11950 	if (tp->quirks && bootverbose) {
11951 		PRINT_LUN(np, tn, ln);
11952 		printk ("quirks=%x.\n", tp->quirks);
11953 	}
11954 #endif
11955 
11956 	/*
11957 	**	Evaluate trustable target/unit capabilities.
11958 	**	We only believe device version >= SCSI-2 that
11959 	**	use appropriate response data format (2).
11960 	**	But it seems that some CCS devices also
11961 	**	support SYNC and I donnot want to frustrate
11962 	**	anybody. ;-)
11963 	*/
11964 	inq_byte7 = 0;
11965 	if	((inq_data[2] & 0x7) >= 2 && (inq_data[3] & 0xf) == 2)
11966 		inq_byte7 = inq_data[7];
11967 	else if ((inq_data[2] & 0x7) == 1 && (inq_data[3] & 0xf) == 1)
11968 		inq_byte7 = INQ7_SYNC;
11969 
11970 	/*
11971 	**	Throw away announced LUN capabilities if we are told
11972 	**	that there is no real device supported by the logical unit.
11973 	*/
11974 	if ((inq_data[0] & 0xe0) > 0x20 || (inq_data[0] & 0x1f) == 0x1f)
11975 		inq_byte7 &= (INQ7_SYNC | INQ7_WIDE16);
11976 
11977 	/*
11978 	**	If user is wanting SYNC, force this feature.
11979 	*/
11980 	if (driver_setup.force_sync_nego)
11981 		inq_byte7 |= INQ7_SYNC;
11982 
11983 	/*
11984 	**	Don't do PPR negotiations on SCSI-2 devices unless
11985 	**	they set the DT bit (0x04) in byte 57 of the INQUIRY
11986 	**	return data.
11987 	*/
11988 	if (((inq_data[2] & 0x07) < 3) && (inq_data[4] < 53 ||
11989 					   !(inq_data[56] & 0x04))) {
11990 		if (tp->minsync < 10)
11991 			tp->minsync = 10;
11992 		if (tp->usrsync < 10)
11993 			tp->usrsync = 10;
11994 	}
11995 
11996 	/*
11997 	**	Prepare negotiation if SIP capabilities have changed.
11998 	*/
11999 	tp->inq_done = 1;
12000 	if ((inq_byte7 ^ tp->inq_byte7) & (INQ7_SYNC | INQ7_WIDE16)) {
12001 		tp->inq_byte7 = inq_byte7;
12002 		ncr_negotiate(np, tp);
12003 	}
12004 
12005 	/*
12006 	**	If unit supports tagged commands, allocate and
12007 	**	initialyze the task table if not yet.
12008 	*/
12009 	if ((inq_byte7 & INQ7_QUEUE) && lp->tasktbl == &lp->tasktbl_0) {
12010 		lp->tasktbl = m_calloc_dma(MAX_TASKS*4, "TASKTBL");
12011 		if (!lp->tasktbl) {
12012 			lp->tasktbl = &lp->tasktbl_0;
12013 			goto fail;
12014 		}
12015 		lp->b_tasktbl = cpu_to_scr(vtobus(lp->tasktbl));
12016 		for (i = 0 ; i < MAX_TASKS ; i++)
12017 			lp->tasktbl[i] = cpu_to_scr(np->p_notask);
12018 
12019 		lp->cb_tags = m_calloc(MAX_TAGS, "CB_TAGS");
12020 		if (!lp->cb_tags)
12021 			goto fail;
12022 		for (i = 0 ; i < MAX_TAGS ; i++)
12023 			lp->cb_tags[i] = i;
12024 
12025 		lp->maxnxs = MAX_TAGS;
12026 		lp->tags_stime = ktime_get(3*HZ);
12027 	}
12028 
12029 	/*
12030 	**	Adjust tagged queueing status if needed.
12031 	*/
12032 	if ((inq_byte7 ^ lp->inq_byte7) & INQ7_QUEUE) {
12033 		lp->inq_byte7 = inq_byte7;
12034 		lp->numtags   = lp->maxtags;
12035 		ncr_setup_tags (np, tn, ln);
12036 	}
12037 
12038 fail:
12039 	return lp;
12040 }
12041 
12042 /*==========================================================
12043 **
12044 **
12045 **	Build Scatter Gather Block
12046 **
12047 **
12048 **==========================================================
12049 **
12050 **	The transfer area may be scattered among
12051 **	several non adjacent physical pages.
12052 **
12053 **	We may use MAX_SCATTER blocks.
12054 **
12055 **----------------------------------------------------------
12056 */
12057 
12058 /*
12059 **	We try to reduce the number of interrupts caused
12060 **	by unexpected phase changes due to disconnects.
12061 **	A typical harddisk may disconnect before ANY block.
12062 **	If we wanted to avoid unexpected phase changes at all
12063 **	we had to use a break point every 512 bytes.
12064 **	Of course the number of scatter/gather blocks is
12065 **	limited.
12066 **	Under Linux, the scatter/gatter blocks are provided by
12067 **	the generic driver. We just have to copy addresses and
12068 **	sizes to the data segment array.
12069 */
12070 
12071 /*
12072 **	For 64 bit systems, we use the 8 upper bits of the size field
12073 **	to provide bus address bits 32-39 to the SCRIPTS processor.
12074 **	This allows the 895A and 896 to address up to 1 TB of memory.
12075 **	For 32 bit chips on 64 bit systems, we must be provided with
12076 **	memory addresses that fit into the first 32 bit bus address
12077 **	range and so, this does not matter and we expect an error from
12078 **	the chip if this ever happen.
12079 **
12080 **	We use a separate function for the case Linux does not provide
12081 **	a scatter list in order to allow better code optimization
12082 **	for the case we have a scatter list (BTW, for now this just wastes
12083 **	about 40 bytes of code for x86, but my guess is that the scatter
12084 **	code will get more complex later).
12085 */
12086 
12087 #define SCATTER_ONE(data, badd, len)					\
12088 	(data)->addr = cpu_to_scr(badd);				\
12089 	(data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len);
12090 
12091 #define CROSS_16MB(p, n) (((((u_long) p) + n - 1) ^ ((u_long) p)) & ~0xffffff)
12092 
12093 static	int ncr_scatter_no_sglist(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
12094 {
12095 	struct scr_tblmove *data = &cp->phys.data[MAX_SCATTER-1];
12096 	int segment;
12097 
12098 	cp->data_len = cmd->request_bufflen;
12099 
12100 	if (cmd->request_bufflen) {
12101 		dma_addr_t baddr = map_scsi_single_data(np, cmd);
12102 
12103 		SCATTER_ONE(data, baddr, cmd->request_bufflen);
12104 		if (CROSS_16MB(baddr, cmd->request_bufflen)) {
12105 			cp->host_flags |= HF_PM_TO_C;
12106 #ifdef DEBUG_896R1
12107 printk("He! we are crossing a 16 MB boundary (0x%lx, 0x%x)\n",
12108 	baddr, cmd->request_bufflen);
12109 #endif
12110 		}
12111 		segment = 1;
12112 	}
12113 	else
12114 		segment = 0;
12115 
12116 	return segment;
12117 }
12118 
12119 /*
12120 **	DEL 472 - 53C896 Rev 1 - Part Number 609-0393055 - ITEM 5.
12121 **
12122 **	We disable data phase mismatch handling from SCRIPTS for data
12123 **	transfers that contains scatter/gather entries that cross
12124 **	a 16 MB boundary.
12125 **	We use a different scatter function for 896 rev. 1 that needs
12126 **	such a work-around. Doing so, we do not affect performance for
12127 **	other chips.
12128 **	This problem should not be triggered for disk IOs under Linux,
12129 **	since such IOs are performed using pages and buffers that are
12130 **	nicely power-of-two sized and aligned. But, since this may change
12131 **	at any time, a work-around was required.
12132 */
12133 static int ncr_scatter_896R1(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
12134 {
12135 	int segn;
12136 	int use_sg = (int) cmd->use_sg;
12137 
12138 	cp->data_len = 0;
12139 
12140 	if (!use_sg)
12141 		segn = ncr_scatter_no_sglist(np, cp, cmd);
12142 	else if (use_sg > MAX_SCATTER)
12143 		segn = -1;
12144 	else {
12145 		struct scatterlist *scatter = (struct scatterlist *)cmd->buffer;
12146 		struct scr_tblmove *data;
12147 
12148 		use_sg = map_scsi_sg_data(np, cmd);
12149 		data = &cp->phys.data[MAX_SCATTER - use_sg];
12150 
12151 		for (segn = 0; segn < use_sg; segn++) {
12152 			dma_addr_t baddr = scsi_sg_dma_address(&scatter[segn]);
12153 			unsigned int len = scsi_sg_dma_len(&scatter[segn]);
12154 
12155 			SCATTER_ONE(&data[segn],
12156 				    baddr,
12157 				    len);
12158 			if (CROSS_16MB(baddr, scatter[segn].length)) {
12159 				cp->host_flags |= HF_PM_TO_C;
12160 #ifdef DEBUG_896R1
12161 printk("He! we are crossing a 16 MB boundary (0x%lx, 0x%x)\n",
12162 	baddr, scatter[segn].length);
12163 #endif
12164 			}
12165 			cp->data_len += len;
12166 		}
12167 	}
12168 
12169 	return segn;
12170 }
12171 
12172 static int ncr_scatter(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
12173 {
12174 	int segment;
12175 	int use_sg = (int) cmd->use_sg;
12176 
12177 	cp->data_len = 0;
12178 
12179 	if (!use_sg)
12180 		segment = ncr_scatter_no_sglist(np, cp, cmd);
12181 	else if (use_sg > MAX_SCATTER)
12182 		segment = -1;
12183 	else {
12184 		struct scatterlist *scatter = (struct scatterlist *)cmd->buffer;
12185 		struct scr_tblmove *data;
12186 
12187 		use_sg = map_scsi_sg_data(np, cmd);
12188 		data = &cp->phys.data[MAX_SCATTER - use_sg];
12189 
12190 		for (segment = 0; segment < use_sg; segment++) {
12191 			dma_addr_t baddr = scsi_sg_dma_address(&scatter[segment]);
12192 			unsigned int len = scsi_sg_dma_len(&scatter[segment]);
12193 
12194 			SCATTER_ONE(&data[segment],
12195 				    baddr,
12196 				    len);
12197 			cp->data_len += len;
12198 		}
12199 	}
12200 
12201 	return segment;
12202 }
12203 
12204 /*==========================================================
12205 **
12206 **
12207 **	Test the pci bus snoop logic :-(
12208 **
12209 **	Has to be called with interrupts disabled.
12210 **
12211 **
12212 **==========================================================
12213 */
12214 
12215 #ifndef SCSI_NCR_IOMAPPED
12216 static int __init ncr_regtest (struct ncb* np)
12217 {
12218 	register volatile u_int32 data;
12219 	/*
12220 	**	ncr registers may NOT be cached.
12221 	**	write 0xffffffff to a read only register area,
12222 	**	and try to read it back.
12223 	*/
12224 	data = 0xffffffff;
12225 	OUTL_OFF(offsetof(struct ncr_reg, nc_dstat), data);
12226 	data = INL_OFF(offsetof(struct ncr_reg, nc_dstat));
12227 #if 1
12228 	if (data == 0xffffffff) {
12229 #else
12230 	if ((data & 0xe2f0fffd) != 0x02000080) {
12231 #endif
12232 		printk ("CACHE TEST FAILED: reg dstat-sstat2 readback %x.\n",
12233 			(unsigned) data);
12234 		return (0x10);
12235 	};
12236 	return (0);
12237 }
12238 #endif
12239 
12240 static int __init ncr_snooptest (struct ncb* np)
12241 {
12242 	u_int32	ncr_rd, ncr_wr, ncr_bk, host_rd, host_wr, pc;
12243 	u_char  dstat;
12244 	int	i, err=0;
12245 #ifndef SCSI_NCR_IOMAPPED
12246 	if (np->reg) {
12247             err |= ncr_regtest (np);
12248             if (err) return (err);
12249 	}
12250 #endif
12251 restart_test:
12252 	/*
12253 	**	Enable Master Parity Checking as we intend
12254 	**	to enable it for normal operations.
12255 	*/
12256 	OUTB (nc_ctest4, (np->rv_ctest4 & MPEE));
12257 	/*
12258 	**	init
12259 	*/
12260 	pc  = NCB_SCRIPTH0_PHYS (np, snooptest);
12261 	host_wr = 1;
12262 	ncr_wr  = 2;
12263 	/*
12264 	**	Set memory and register.
12265 	*/
12266 	np->ncr_cache = cpu_to_scr(host_wr);
12267 	OUTL (nc_temp, ncr_wr);
12268 	/*
12269 	**	Start script (exchange values)
12270 	*/
12271 	OUTL (nc_dsa, np->p_ncb);
12272 	OUTL_DSP (pc);
12273 	/*
12274 	**	Wait 'til done (with timeout)
12275 	*/
12276 	for (i=0; i<NCR_SNOOP_TIMEOUT; i++)
12277 		if (INB(nc_istat) & (INTF|SIP|DIP))
12278 			break;
12279 	if (i>=NCR_SNOOP_TIMEOUT) {
12280 		printk ("CACHE TEST FAILED: timeout.\n");
12281 		return (0x20);
12282 	};
12283 	/*
12284 	**	Check for fatal DMA errors.
12285 	*/
12286 	dstat = INB (nc_dstat);
12287 #if 1	/* Band aiding for broken hardwares that fail PCI parity */
12288 	if ((dstat & MDPE) && (np->rv_ctest4 & MPEE)) {
12289 		printk ("%s: PCI DATA PARITY ERROR DETECTED - "
12290 			"DISABLING MASTER DATA PARITY CHECKING.\n",
12291 			ncr_name(np));
12292 		np->rv_ctest4 &= ~MPEE;
12293 		goto restart_test;
12294 	}
12295 #endif
12296 	if (dstat & (MDPE|BF|IID)) {
12297 		printk ("CACHE TEST FAILED: DMA error (dstat=0x%02x).", dstat);
12298 		return (0x80);
12299 	}
12300 	/*
12301 	**	Save termination position.
12302 	*/
12303 	pc = INL (nc_dsp);
12304 	/*
12305 	**	Read memory and register.
12306 	*/
12307 	host_rd = scr_to_cpu(np->ncr_cache);
12308 	ncr_rd  = INL (nc_scratcha);
12309 	ncr_bk  = INL (nc_temp);
12310 	/*
12311 	**	Check termination position.
12312 	*/
12313 	if (pc != NCB_SCRIPTH0_PHYS (np, snoopend)+8) {
12314 		printk ("CACHE TEST FAILED: script execution failed.\n");
12315 		printk ("start=%08lx, pc=%08lx, end=%08lx\n",
12316 			(u_long) NCB_SCRIPTH0_PHYS (np, snooptest), (u_long) pc,
12317 			(u_long) NCB_SCRIPTH0_PHYS (np, snoopend) +8);
12318 		return (0x40);
12319 	};
12320 	/*
12321 	**	Show results.
12322 	*/
12323 	if (host_wr != ncr_rd) {
12324 		printk ("CACHE TEST FAILED: host wrote %d, ncr read %d.\n",
12325 			(int) host_wr, (int) ncr_rd);
12326 		err |= 1;
12327 	};
12328 	if (host_rd != ncr_wr) {
12329 		printk ("CACHE TEST FAILED: ncr wrote %d, host read %d.\n",
12330 			(int) ncr_wr, (int) host_rd);
12331 		err |= 2;
12332 	};
12333 	if (ncr_bk != ncr_wr) {
12334 		printk ("CACHE TEST FAILED: ncr wrote %d, read back %d.\n",
12335 			(int) ncr_wr, (int) ncr_bk);
12336 		err |= 4;
12337 	};
12338 	return (err);
12339 }
12340 
12341 /*==========================================================
12342 **
12343 **	Determine the ncr's clock frequency.
12344 **	This is essential for the negotiation
12345 **	of the synchronous transfer rate.
12346 **
12347 **==========================================================
12348 **
12349 **	Note: we have to return the correct value.
12350 **	THERE IS NO SAFE DEFAULT VALUE.
12351 **
12352 **	Most NCR/SYMBIOS boards are delivered with a 40 Mhz clock.
12353 **	53C860 and 53C875 rev. 1 support fast20 transfers but
12354 **	do not have a clock doubler and so are provided with a
12355 **	80 MHz clock. All other fast20 boards incorporate a doubler
12356 **	and so should be delivered with a 40 MHz clock.
12357 **	The recent fast40 chips  (895/896/895A) and the
12358 **	fast80 chip (C1010) use a 40 Mhz base clock
12359 **	and provide a clock quadrupler (160 Mhz). The code below
12360 **	tries to deal as cleverly as possible with all this stuff.
12361 **
12362 **----------------------------------------------------------
12363 */
12364 
12365 /*
12366  *	Select NCR SCSI clock frequency
12367  */
12368 static void ncr_selectclock(ncb_p np, u_char scntl3)
12369 {
12370 	if (np->multiplier < 2) {
12371 		OUTB(nc_scntl3,	scntl3);
12372 		return;
12373 	}
12374 
12375 	if (bootverbose >= 2)
12376 		printk ("%s: enabling clock multiplier\n", ncr_name(np));
12377 
12378 	OUTB(nc_stest1, DBLEN);	   /* Enable clock multiplier		  */
12379 
12380 	if ( (np->device_id != PCI_DEVICE_ID_LSI_53C1010) &&
12381 			(np->device_id != PCI_DEVICE_ID_LSI_53C1010_66) &&
12382 						(np->multiplier > 2)) {
12383 		int i = 20;	 /* Poll bit 5 of stest4 for quadrupler */
12384 		while (!(INB(nc_stest4) & LCKFRQ) && --i > 0)
12385 			UDELAY (20);
12386 		if (!i)
12387 		    printk("%s: the chip cannot lock the frequency\n",
12388 						 ncr_name(np));
12389 
12390 	} else			/* Wait 120 micro-seconds for multiplier*/
12391 		UDELAY (120);
12392 
12393 	OUTB(nc_stest3, HSC);		/* Halt the scsi clock		*/
12394 	OUTB(nc_scntl3,	scntl3);
12395 	OUTB(nc_stest1, (DBLEN|DBLSEL));/* Select clock multiplier	*/
12396 	OUTB(nc_stest3, 0x00);		/* Restart scsi clock 		*/
12397 }
12398 
12399 
12400 /*
12401  *	calculate NCR SCSI clock frequency (in KHz)
12402  */
12403 static unsigned __init ncrgetfreq (ncb_p np, int gen)
12404 {
12405 	unsigned int ms = 0;
12406 	unsigned int f;
12407 	int count;
12408 
12409 	/*
12410 	 * Measure GEN timer delay in order
12411 	 * to calculate SCSI clock frequency
12412 	 *
12413 	 * This code will never execute too
12414 	 * many loop iterations (if DELAY is
12415 	 * reasonably correct). It could get
12416 	 * too low a delay (too high a freq.)
12417 	 * if the CPU is slow executing the
12418 	 * loop for some reason (an NMI, for
12419 	 * example). For this reason we will
12420 	 * if multiple measurements are to be
12421 	 * performed trust the higher delay
12422 	 * (lower frequency returned).
12423 	 */
12424 	OUTW (nc_sien , 0x0);/* mask all scsi interrupts */
12425 				/* enable general purpose timer */
12426 	(void) INW (nc_sist);	/* clear pending scsi interrupt */
12427 	OUTB (nc_dien , 0);	/* mask all dma interrupts */
12428 	(void) INW (nc_sist);	/* another one, just to be sure :) */
12429 	OUTB (nc_scntl3, 4);	/* set pre-scaler to divide by 3 */
12430 	OUTB (nc_stime1, 0);	/* disable general purpose timer */
12431 	OUTB (nc_stime1, gen);	/* set to nominal delay of 1<<gen * 125us */
12432 				/* Temporary fix for udelay issue with Alpha
12433 					platform */
12434 	while (!(INW(nc_sist) & GEN) && ms++ < 100000) {
12435 		/* count 1ms */
12436 		for (count = 0; count < 10; count++)
12437 			UDELAY (100);
12438 	}
12439 	OUTB (nc_stime1, 0);	/* disable general purpose timer */
12440  	/*
12441  	 * set prescaler to divide by whatever 0 means
12442  	 * 0 ought to choose divide by 2, but appears
12443  	 * to set divide by 3.5 mode in my 53c810 ...
12444  	 */
12445  	OUTB (nc_scntl3, 0);
12446 
12447   	/*
12448  	 * adjust for prescaler, and convert into KHz
12449 	 * scale values derived empirically.
12450   	 */
12451 	f = ms ? ((1 << gen) * 4340) / ms : 0;
12452 
12453 	if (bootverbose >= 2)
12454 		printk ("%s: Delay (GEN=%d): %u msec, %u KHz\n",
12455 			ncr_name(np), gen, ms, f);
12456 
12457 	return f;
12458 }
12459 
12460 static unsigned __init ncr_getfreq (ncb_p np)
12461 {
12462 	u_int f1, f2;
12463 	int gen = 11;
12464 
12465 	(void) ncrgetfreq (np, gen);	/* throw away first result */
12466 	f1 = ncrgetfreq (np, gen);
12467 	f2 = ncrgetfreq (np, gen);
12468 	if (f1 > f2) f1 = f2;		/* trust lower result	*/
12469 	return f1;
12470 }
12471 
12472 /*
12473  *	Get/probe NCR SCSI clock frequency
12474  */
12475 static void __init ncr_getclock (ncb_p np, int mult)
12476 {
12477 	unsigned char scntl3 = np->sv_scntl3;
12478 	unsigned char stest1 = np->sv_stest1;
12479 	unsigned f1;
12480 
12481 	np->multiplier = 1;
12482 	f1 = 40000;
12483 
12484 	/*
12485 	**	True with 875/895/896/895A with clock multiplier selected
12486 	*/
12487 	if (mult > 1 && (stest1 & (DBLEN+DBLSEL)) == DBLEN+DBLSEL) {
12488 		if (bootverbose >= 2)
12489 			printk ("%s: clock multiplier found\n", ncr_name(np));
12490 		np->multiplier = mult;
12491 	}
12492 
12493 	/*
12494 	**	If multiplier not found or scntl3 not 7,5,3,
12495 	**	reset chip and get frequency from general purpose timer.
12496 	**	Otherwise trust scntl3 BIOS setting.
12497 	*/
12498 	if (np->multiplier != mult || (scntl3 & 7) < 3 || !(scntl3 & 1)) {
12499 		OUTB (nc_stest1, 0);		/* make sure doubler is OFF */
12500 		f1 = ncr_getfreq (np);
12501 
12502 		if (bootverbose)
12503 			printk ("%s: NCR clock is %uKHz\n", ncr_name(np), f1);
12504 
12505 		if	(f1 < 55000)		f1 =  40000;
12506 		else				f1 =  80000;
12507 
12508 		/*
12509 		**	Suggest to also check the PCI clock frequency
12510 		**	to make sure our frequency calculation algorithm
12511 		**	is not too biased.
12512 		*/
12513 		if (np->features & FE_66MHZ) {
12514 			np->pciclock_min = (66000*55+80-1)/80;
12515 			np->pciclock_max = (66000*55)/40;
12516 		}
12517 		else {
12518 			np->pciclock_min = (33000*55+80-1)/80;
12519 			np->pciclock_max = (33000*55)/40;
12520 		}
12521 
12522 		if (f1 == 40000 && mult > 1) {
12523 			if (bootverbose >= 2)
12524 				printk ("%s: clock multiplier assumed\n", ncr_name(np));
12525 			np->multiplier	= mult;
12526 		}
12527 	} else {
12528 		if	((scntl3 & 7) == 3)	f1 =  40000;
12529 		else if	((scntl3 & 7) == 5)	f1 =  80000;
12530 		else 				f1 = 160000;
12531 
12532 		f1 /= np->multiplier;
12533 	}
12534 
12535 	/*
12536 	**	Compute controller synchronous parameters.
12537 	*/
12538 	f1		*= np->multiplier;
12539 	np->clock_khz	= f1;
12540 }
12541 
12542 /*
12543  *	Get/probe PCI clock frequency
12544  */
12545 static u_int __init ncr_getpciclock (ncb_p np)
12546 {
12547 	static u_int f;
12548 
12549 	OUTB (nc_stest1, SCLK);	/* Use the PCI clock as SCSI clock */
12550 	f = ncr_getfreq (np);
12551 	OUTB (nc_stest1, 0);
12552 
12553 	return f;
12554 }
12555 
12556 /*===================== LINUX ENTRY POINTS SECTION ==========================*/
12557 
12558 #ifndef uchar
12559 #define uchar unsigned char
12560 #endif
12561 
12562 #ifndef ushort
12563 #define ushort unsigned short
12564 #endif
12565 
12566 #ifndef ulong
12567 #define ulong unsigned long
12568 #endif
12569 
12570 /* ---------------------------------------------------------------------
12571 **
12572 **	Driver setup from the boot command line
12573 **
12574 ** ---------------------------------------------------------------------
12575 */
12576 
12577 #ifdef MODULE
12578 #define	ARG_SEP	' '
12579 #else
12580 #define	ARG_SEP	','
12581 #endif
12582 
12583 #define OPT_TAGS		1
12584 #define OPT_MASTER_PARITY	2
12585 #define OPT_SCSI_PARITY		3
12586 #define OPT_DISCONNECTION	4
12587 #define OPT_SPECIAL_FEATURES	5
12588 #define OPT_RESERVED_1		6
12589 #define OPT_FORCE_SYNC_NEGO	7
12590 #define OPT_REVERSE_PROBE	8
12591 #define OPT_DEFAULT_SYNC	9
12592 #define OPT_VERBOSE		10
12593 #define OPT_DEBUG		11
12594 #define OPT_BURST_MAX		12
12595 #define OPT_LED_PIN		13
12596 #define OPT_MAX_WIDE		14
12597 #define OPT_SETTLE_DELAY	15
12598 #define OPT_DIFF_SUPPORT	16
12599 #define OPT_IRQM		17
12600 #define OPT_PCI_FIX_UP		18
12601 #define OPT_BUS_CHECK		19
12602 #define OPT_OPTIMIZE		20
12603 #define OPT_RECOVERY		21
12604 #define OPT_SAFE_SETUP		22
12605 #define OPT_USE_NVRAM		23
12606 #define OPT_EXCLUDE		24
12607 #define OPT_HOST_ID		25
12608 
12609 #ifdef SCSI_NCR_IARB_SUPPORT
12610 #define OPT_IARB		26
12611 #endif
12612 
12613 static char setup_token[] __initdata =
12614 	"tags:"   "mpar:"
12615 	"spar:"   "disc:"
12616 	"specf:"  "_rsvd1:"
12617 	"fsn:"    "revprob:"
12618 	"sync:"   "verb:"
12619 	"debug:"  "burst:"
12620 	"led:"    "wide:"
12621 	"settle:" "diff:"
12622 	"irqm:"   "pcifix:"
12623 	"buschk:" "optim:"
12624 	"recovery:"
12625 	"safe:"   "nvram:"
12626 	"excl:"   "hostid:"
12627 #ifdef SCSI_NCR_IARB_SUPPORT
12628 	"iarb:"
12629 #endif
12630 	;	/* DONNOT REMOVE THIS ';' */
12631 
12632 #ifdef MODULE
12633 #define	ARG_SEP	' '
12634 #else
12635 #define	ARG_SEP	','
12636 #endif
12637 
12638 static int __init get_setup_token(char *p)
12639 {
12640 	char *cur = setup_token;
12641 	char *pc;
12642 	int i = 0;
12643 
12644 	while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
12645 		++pc;
12646 		++i;
12647 		if (!strncmp(p, cur, pc - cur))
12648 			return i;
12649 		cur = pc;
12650 	}
12651 	return 0;
12652 }
12653 
12654 
12655 int __init sym53c8xx_setup(char *str)
12656 {
12657 #ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
12658 	char *cur = str;
12659 	char *pc, *pv;
12660 	unsigned long val;
12661 	int i,  c;
12662 	int xi = 0;
12663 
12664 	while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
12665 		char *pe;
12666 
12667 		val = 0;
12668 		pv = pc;
12669 		c = *++pv;
12670 
12671 		if	(c == 'n')
12672 			val = 0;
12673 		else if	(c == 'y')
12674 			val = 1;
12675 		else
12676 			val = (int) simple_strtoul(pv, &pe, 0);
12677 
12678 		switch (get_setup_token(cur)) {
12679 		case OPT_TAGS:
12680 			driver_setup.default_tags = val;
12681 			if (pe && *pe == '/') {
12682 				i = 0;
12683 				while (*pe && *pe != ARG_SEP &&
12684 					i < sizeof(driver_setup.tag_ctrl)-1) {
12685 					driver_setup.tag_ctrl[i++] = *pe++;
12686 				}
12687 				driver_setup.tag_ctrl[i] = '\0';
12688 			}
12689 			break;
12690 		case OPT_MASTER_PARITY:
12691 			driver_setup.master_parity = val;
12692 			break;
12693 		case OPT_SCSI_PARITY:
12694 			driver_setup.scsi_parity = val;
12695 			break;
12696 		case OPT_DISCONNECTION:
12697 			driver_setup.disconnection = val;
12698 			break;
12699 		case OPT_SPECIAL_FEATURES:
12700 			driver_setup.special_features = val;
12701 			break;
12702 		case OPT_FORCE_SYNC_NEGO:
12703 			driver_setup.force_sync_nego = val;
12704 			break;
12705 		case OPT_REVERSE_PROBE:
12706 			driver_setup.reverse_probe = val;
12707 			break;
12708 		case OPT_DEFAULT_SYNC:
12709 			driver_setup.default_sync = val;
12710 			break;
12711 		case OPT_VERBOSE:
12712 			driver_setup.verbose = val;
12713 			break;
12714 		case OPT_DEBUG:
12715 			driver_setup.debug = val;
12716 			break;
12717 		case OPT_BURST_MAX:
12718 			driver_setup.burst_max = val;
12719 			break;
12720 		case OPT_LED_PIN:
12721 			driver_setup.led_pin = val;
12722 			break;
12723 		case OPT_MAX_WIDE:
12724 			driver_setup.max_wide = val? 1:0;
12725 			break;
12726 		case OPT_SETTLE_DELAY:
12727 			driver_setup.settle_delay = val;
12728 			break;
12729 		case OPT_DIFF_SUPPORT:
12730 			driver_setup.diff_support = val;
12731 			break;
12732 		case OPT_IRQM:
12733 			driver_setup.irqm = val;
12734 			break;
12735 		case OPT_PCI_FIX_UP:
12736 			driver_setup.pci_fix_up	= val;
12737 			break;
12738 		case OPT_BUS_CHECK:
12739 			driver_setup.bus_check = val;
12740 			break;
12741 		case OPT_OPTIMIZE:
12742 			driver_setup.optimize = val;
12743 			break;
12744 		case OPT_RECOVERY:
12745 			driver_setup.recovery = val;
12746 			break;
12747 		case OPT_USE_NVRAM:
12748 			driver_setup.use_nvram = val;
12749 			break;
12750 		case OPT_SAFE_SETUP:
12751 			memcpy(&driver_setup, &driver_safe_setup,
12752 				sizeof(driver_setup));
12753 			break;
12754 		case OPT_EXCLUDE:
12755 			if (xi < SCSI_NCR_MAX_EXCLUDES)
12756 				driver_setup.excludes[xi++] = val;
12757 			break;
12758 		case OPT_HOST_ID:
12759 			driver_setup.host_id = val;
12760 			break;
12761 #ifdef SCSI_NCR_IARB_SUPPORT
12762 		case OPT_IARB:
12763 			driver_setup.iarb = val;
12764 			break;
12765 #endif
12766 		default:
12767 			printk("sym53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
12768 			break;
12769 		}
12770 
12771 		if ((cur = strchr(cur, ARG_SEP)) != NULL)
12772 			++cur;
12773 	}
12774 #endif /* SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT */
12775 	return 1;
12776 }
12777 
12778 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,13)
12779 #ifndef MODULE
12780 __setup("sym53c8xx=", sym53c8xx_setup);
12781 #endif
12782 #endif
12783 
12784 static int
12785 sym53c8xx_pci_init(Scsi_Host_Template *tpnt, pcidev_t pdev, ncr_device *device);
12786 
12787 /*
12788 **   Linux entry point for SYM53C8XX devices detection routine.
12789 **
12790 **   Called by the middle-level scsi drivers at initialization time,
12791 **   or at module installation.
12792 **
12793 **   Read the PCI configuration and try to attach each
12794 **   detected NCR board.
12795 **
12796 **   If NVRAM is present, try to attach boards according to
12797 **   the used defined boot order.
12798 **
12799 **   Returns the number of boards successfully attached.
12800 */
12801 
12802 static void __init ncr_print_driver_setup(void)
12803 {
12804 #define YesNo(y)	y ? 'y' : 'n'
12805 	printk (NAME53C8XX ": setup=disc:%c,specf:%d,tags:%d,sync:%d,"
12806 		"burst:%d,wide:%c,diff:%d,revprob:%c,buschk:0x%x\n",
12807 		YesNo(driver_setup.disconnection),
12808 		driver_setup.special_features,
12809 		driver_setup.default_tags,
12810 		driver_setup.default_sync,
12811 		driver_setup.burst_max,
12812 		YesNo(driver_setup.max_wide),
12813 		driver_setup.diff_support,
12814 		YesNo(driver_setup.reverse_probe),
12815 		driver_setup.bus_check);
12816 
12817 	printk (NAME53C8XX ": setup=mpar:%c,spar:%c,fsn=%c,verb:%d,debug:0x%x,"
12818 		"led:%c,settle:%d,irqm:0x%x,nvram:0x%x,pcifix:0x%x\n",
12819 		YesNo(driver_setup.master_parity),
12820 		YesNo(driver_setup.scsi_parity),
12821 		YesNo(driver_setup.force_sync_nego),
12822 		driver_setup.verbose,
12823 		driver_setup.debug,
12824 		YesNo(driver_setup.led_pin),
12825 		driver_setup.settle_delay,
12826 		driver_setup.irqm,
12827 		driver_setup.use_nvram,
12828 		driver_setup.pci_fix_up);
12829 #undef YesNo
12830 }
12831 
12832 /*===================================================================
12833 **   SYM53C8XX devices description table and chip ids list.
12834 **===================================================================
12835 */
12836 
12837 static ncr_chip	ncr_chip_table[] __initdata	= SCSI_NCR_CHIP_TABLE;
12838 static ushort	ncr_chip_ids[]   __initdata	= SCSI_NCR_CHIP_IDS;
12839 
12840 #ifdef	SCSI_NCR_PQS_PDS_SUPPORT
12841 /*===================================================================
12842 **    Detect all NCR PQS/PDS boards and keep track of their bus nr.
12843 **
12844 **    The NCR PQS or PDS card is constructed as a DEC bridge
12845 **    behind which sit a proprietary NCR memory controller and
12846 **    four or two 53c875s as separate devices.  In its usual mode
12847 **    of operation, the 875s are slaved to the memory controller
12848 **    for all transfers.  We can tell if an 875 is part of a
12849 **    PQS/PDS or not since if it is, it will be on the same bus
12850 **    as the memory controller.  To operate with the Linux
12851 **    driver, the memory controller is disabled and the 875s
12852 **    freed to function independently.  The only wrinkle is that
12853 **    the preset SCSI ID (which may be zero) must be read in from
12854 **    a special configuration space register of the 875
12855 **===================================================================
12856 */
12857 #define	SCSI_NCR_MAX_PQS_BUS	16
12858 static int pqs_bus[SCSI_NCR_MAX_PQS_BUS] __initdata = { 0 };
12859 
12860 static void __init ncr_detect_pqs_pds(void)
12861 {
12862 	short index;
12863 	pcidev_t dev = PCIDEV_NULL;
12864 
12865 	for(index=0; index < SCSI_NCR_MAX_PQS_BUS; index++) {
12866 		u_char tmp;
12867 
12868 		dev = pci_find_device(0x101a, 0x0009, dev);
12869 		if (dev == PCIDEV_NULL) {
12870 			pqs_bus[index] = -1;
12871 			break;
12872 		}
12873 		printk(KERN_INFO NAME53C8XX ": NCR PQS/PDS memory controller detected on bus %d\n", PciBusNumber(dev));
12874 		pci_read_config_byte(dev, 0x44, &tmp);
12875 		/* bit 1: allow individual 875 configuration */
12876 		tmp |= 0x2;
12877 		pci_write_config_byte(dev, 0x44, tmp);
12878 		pci_read_config_byte(dev, 0x45, &tmp);
12879 		/* bit 2: drive individual 875 interrupts to the bus */
12880 		tmp |= 0x4;
12881 		pci_write_config_byte(dev, 0x45, tmp);
12882 
12883 		pqs_bus[index] = PciBusNumber(dev);
12884 	}
12885 }
12886 #endif /* SCSI_NCR_PQS_PDS_SUPPORT */
12887 
12888 /*===================================================================
12889 **    Detect all 53c8xx hosts and then attach them.
12890 **
12891 **    If we are using NVRAM, once all hosts are detected, we need to
12892 **    check any NVRAM for boot order in case detect and boot order
12893 **    differ and attach them using the order in the NVRAM.
12894 **
12895 **    If no NVRAM is found or data appears invalid attach boards in
12896 **    the order they are detected.
12897 **===================================================================
12898 */
12899 int __init sym53c8xx_detect(Scsi_Host_Template *tpnt)
12900 {
12901 	pcidev_t pcidev;
12902 	int i, j, chips, hosts, count;
12903 	int attach_count = 0;
12904 	ncr_device *devtbl, *devp;
12905 #ifdef SCSI_NCR_NVRAM_SUPPORT
12906 	ncr_nvram  nvram0, nvram, *nvp;
12907 #endif
12908 
12909 	/*
12910 	**    PCI is required.
12911 	*/
12912 	if (!pci_present())
12913 		return 0;
12914 
12915 	/*
12916 	**    Initialize driver general stuff.
12917 	*/
12918 #ifdef SCSI_NCR_PROC_INFO_SUPPORT
12919 #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
12920      tpnt->proc_dir  = &proc_scsi_sym53c8xx;
12921 #else
12922      tpnt->proc_name = NAME53C8XX;
12923 #endif
12924      tpnt->proc_info = sym53c8xx_proc_info;
12925 #endif
12926 
12927 #if	defined(SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT) && defined(MODULE)
12928 if (sym53c8xx)
12929 	sym53c8xx_setup(sym53c8xx);
12930 #endif
12931 #ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
12932 	ncr_debug = driver_setup.debug;
12933 #endif
12934 
12935 	if (initverbose >= 2)
12936 		ncr_print_driver_setup();
12937 
12938 	/*
12939 	**	Allocate the device table since we donnot want to
12940 	**	overflow the kernel stack.
12941 	**	1 x 4K PAGE is enough for more than 40 devices for i386.
12942 	*/
12943 	devtbl = m_calloc(PAGE_SIZE, "devtbl");
12944 	if (!devtbl)
12945 		return 0;
12946 
12947 	/*
12948 	**    Detect all NCR PQS/PDS memory controllers.
12949 	*/
12950 #ifdef	SCSI_NCR_PQS_PDS_SUPPORT
12951 	ncr_detect_pqs_pds();
12952 #endif
12953 
12954 	/*
12955 	**    Detect all 53c8xx hosts.
12956 	**    Save the first Symbios NVRAM content if any
12957 	**    for the boot order.
12958 	*/
12959 	chips	= sizeof(ncr_chip_ids)	/ sizeof(ncr_chip_ids[0]);
12960 	hosts	= PAGE_SIZE		/ sizeof(*devtbl);
12961 #ifdef SCSI_NCR_NVRAM_SUPPORT
12962 	nvp = (driver_setup.use_nvram & 0x1) ? &nvram0 : 0;
12963 #endif
12964 	j = 0;
12965 	count = 0;
12966 	pcidev = PCIDEV_NULL;
12967 	while (1) {
12968 		char *msg = "";
12969 		if (count >= hosts)
12970 			break;
12971 		if (j >= chips)
12972 			break;
12973 		i = driver_setup.reverse_probe ? chips - 1 - j : j;
12974 		pcidev = pci_find_device(PCI_VENDOR_ID_NCR, ncr_chip_ids[i],
12975 					 pcidev);
12976 		if (pcidev == PCIDEV_NULL) {
12977 			++j;
12978 			continue;
12979 		}
12980 		if (pci_enable_device(pcidev)) /* @!*!$&*!%-*#;! */
12981 			continue;
12982 		/* Some HW as the HP LH4 may report twice PCI devices */
12983 		for (i = 0; i < count ; i++) {
12984 			if (devtbl[i].slot.bus	     == PciBusNumber(pcidev) &&
12985 			    devtbl[i].slot.device_fn == PciDeviceFn(pcidev))
12986 				break;
12987 		}
12988 		if (i != count)	/* Ignore this device if we already have it */
12989 			continue;
12990 		devp = &devtbl[count];
12991 		devp->host_id = driver_setup.host_id;
12992 		devp->attach_done = 0;
12993 		if (sym53c8xx_pci_init(tpnt, pcidev, devp)) {
12994 			continue;
12995 		}
12996 		++count;
12997 #ifdef SCSI_NCR_NVRAM_SUPPORT
12998 		if (nvp) {
12999 			ncr_get_nvram(devp, nvp);
13000 			switch(nvp->type) {
13001 			case SCSI_NCR_SYMBIOS_NVRAM:
13002 				/*
13003 				 *   Switch to the other nvram buffer, so that
13004 				 *   nvram0 will contain the first Symbios
13005 				 *   format NVRAM content with boot order.
13006 				 */
13007 				nvp = &nvram;
13008 				msg = "with Symbios NVRAM";
13009 				break;
13010 			case SCSI_NCR_TEKRAM_NVRAM:
13011 				msg = "with Tekram NVRAM";
13012 				break;
13013 			}
13014 		}
13015 #endif
13016 #ifdef	SCSI_NCR_PQS_PDS_SUPPORT
13017 		if (devp->pqs_pds)
13018 			msg = "(NCR PQS/PDS)";
13019 #endif
13020 		printk(KERN_INFO NAME53C8XX ": 53c%s detected %s\n",
13021 		       devp->chip.name, msg);
13022 	}
13023 
13024 	/*
13025 	**    If we have found a SYMBIOS NVRAM, use first the NVRAM boot
13026 	**    sequence as device boot order.
13027 	**    check devices in the boot record against devices detected.
13028 	**    attach devices if we find a match. boot table records that
13029 	**    do not match any detected devices will be ignored.
13030 	**    devices that do not match any boot table will not be attached
13031 	**    here but will attempt to be attached during the device table
13032 	**    rescan.
13033 	*/
13034 #ifdef SCSI_NCR_NVRAM_SUPPORT
13035 	if (!nvp || nvram0.type != SCSI_NCR_SYMBIOS_NVRAM)
13036 		goto next;
13037 	for (i = 0; i < 4; i++) {
13038 		Symbios_host *h = &nvram0.data.Symbios.host[i];
13039 		for (j = 0 ; j < count ; j++) {
13040 			devp = &devtbl[j];
13041 			if (h->device_fn != devp->slot.device_fn ||
13042 			    h->bus_nr	 != devp->slot.bus	 ||
13043 			    h->device_id != devp->chip.device_id)
13044 				continue;
13045 			if (devp->attach_done)
13046 				continue;
13047 			if (h->flags & SYMBIOS_INIT_SCAN_AT_BOOT) {
13048 				ncr_get_nvram(devp, nvp);
13049 				if (!ncr_attach (tpnt, attach_count, devp))
13050 					attach_count++;
13051 			}
13052 			else if (!(driver_setup.use_nvram & 0x80))
13053 				printk(KERN_INFO NAME53C8XX
13054 				       ": 53c%s state OFF thus not attached\n",
13055 				       devp->chip.name);
13056 			else
13057 				continue;
13058 
13059 			devp->attach_done = 1;
13060 			break;
13061 		}
13062 	}
13063 next:
13064 #endif
13065 
13066 	/*
13067 	**    Rescan device list to make sure all boards attached.
13068 	**    Devices without boot records will not be attached yet
13069 	**    so try to attach them here.
13070 	*/
13071 	for (i= 0; i < count; i++) {
13072 		devp = &devtbl[i];
13073 		if (!devp->attach_done) {
13074 #ifdef SCSI_NCR_NVRAM_SUPPORT
13075 			ncr_get_nvram(devp, nvp);
13076 #endif
13077 			if (!ncr_attach (tpnt, attach_count, devp))
13078 				attach_count++;
13079 		}
13080 	}
13081 
13082 	m_free(devtbl, PAGE_SIZE, "devtbl");
13083 
13084 	return attach_count;
13085 }
13086 
13087 /*===================================================================
13088 **   Read and check the PCI configuration for any detected NCR
13089 **   boards and save data for attaching after all boards have
13090 **   been detected.
13091 **===================================================================
13092 */
13093 static int __init
13094 sym53c8xx_pci_init(Scsi_Host_Template *tpnt, pcidev_t pdev, ncr_device *device)
13095 {
13096 	u_short vendor_id, device_id, command, status_reg;
13097 	u_char cache_line_size, latency_timer;
13098 	u_char suggested_cache_line_size = 0;
13099 	u_char pci_fix_up = driver_setup.pci_fix_up;
13100 	u_char revision;
13101 	u_int irq;
13102 	u_long base, base_c, base_2, base_2_c, io_port;
13103 	int i;
13104 	ncr_chip *chip;
13105 
13106 	printk(KERN_INFO NAME53C8XX ": at PCI bus %d, device %d, function %d\n",
13107 		PciBusNumber(pdev),
13108 		(int) (PciDeviceFn(pdev) & 0xf8) >> 3,
13109 		(int) (PciDeviceFn(pdev) & 7));
13110 
13111 	/*
13112 	**    Read info from the PCI config space.
13113 	**    pci_read_config_xxx() functions are assumed to be used for
13114 	**    successfully detected PCI devices.
13115 	*/
13116 	vendor_id = PciVendorId(pdev);
13117 	device_id = PciDeviceId(pdev);
13118 	irq	  = PciIrqLine(pdev);
13119 
13120 	i = pci_get_base_address(pdev, 0, &io_port);
13121 	io_port = pci_get_base_cookie(pdev, 0);
13122 
13123 	base_c = pci_get_base_cookie(pdev, i);
13124 	i = pci_get_base_address(pdev, i, &base);
13125 
13126 	base_2_c = pci_get_base_cookie(pdev, i);
13127 	(void) pci_get_base_address(pdev, i, &base_2);
13128 
13129 	pci_read_config_word(pdev, PCI_COMMAND,		&command);
13130 	pci_read_config_byte(pdev, PCI_CLASS_REVISION,	&revision);
13131 	pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE,	&cache_line_size);
13132 	pci_read_config_byte(pdev, PCI_LATENCY_TIMER,	&latency_timer);
13133 	pci_read_config_word(pdev, PCI_STATUS,		&status_reg);
13134 
13135 #ifdef SCSI_NCR_PQS_PDS_SUPPORT
13136 	/*
13137 	**    Match the BUS number for PQS/PDS devices.
13138 	**    Read the SCSI ID from a special register mapped
13139 	**    into the configuration space of the individual
13140 	**    875s.  This register is set up by the PQS bios
13141 	*/
13142 	for(i = 0; i < SCSI_NCR_MAX_PQS_BUS && pqs_bus[i] != -1; i++) {
13143 		u_char tmp;
13144 		if (pqs_bus[i] == PciBusNumber(pdev)) {
13145 			pci_read_config_byte(pdev, 0x84, &tmp);
13146 			device->pqs_pds = 1;
13147 			device->host_id = tmp;
13148 			break;
13149 		}
13150 	}
13151 #endif /* SCSI_NCR_PQS_PDS_SUPPORT */
13152 
13153 	/*
13154 	**	If user excludes this chip, donnot initialize it.
13155 	*/
13156 	for (i = 0 ; i < SCSI_NCR_MAX_EXCLUDES ; i++) {
13157 		if (driver_setup.excludes[i] ==
13158 				(io_port & PCI_BASE_ADDRESS_IO_MASK))
13159 			return -1;
13160 	}
13161 	/*
13162 	**    Check if the chip is supported
13163 	*/
13164 	chip = 0;
13165 	for (i = 0; i < sizeof(ncr_chip_table)/sizeof(ncr_chip_table[0]); i++) {
13166 		if (device_id != ncr_chip_table[i].device_id)
13167 			continue;
13168 		if (revision > ncr_chip_table[i].revision_id)
13169 			continue;
13170 		if (!(ncr_chip_table[i].features & FE_LDSTR))
13171 			break;
13172 		chip = &device->chip;
13173 		memcpy(chip, &ncr_chip_table[i], sizeof(*chip));
13174 		chip->revision_id = revision;
13175 		break;
13176 	}
13177 
13178 #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
13179 	/* Configure DMA attributes.  For DAC capable boards, we can encode
13180 	** 32+8 bits for SCSI DMA data addresses with the extra bits used
13181 	** in the size field.  We use normal 32-bit PCI addresses for
13182 	** descriptors.
13183 	*/
13184 	if (chip && (chip->features & FE_DAC)) {
13185 		if (pci_set_dma_mask(pdev, (u64) 0xffffffffffULL))
13186 			chip->features &= ~FE_DAC_IN_USE;
13187 		else
13188 			chip->features |= FE_DAC_IN_USE;
13189 	}
13190 
13191 	if (chip && !(chip->features & FE_DAC_IN_USE)) {
13192 		if (pci_set_dma_mask(pdev, (u64) 0xffffffff)) {
13193 			printk(KERN_WARNING NAME53C8XX
13194 			       "32 BIT PCI BUS DMA ADDRESSING NOT SUPPORTED\n");
13195 			return -1;
13196 		}
13197 	}
13198 #endif
13199 
13200 	/*
13201 	**	Ignore Symbios chips controlled by SISL RAID controller.
13202 	**	This controller sets value 0x52414944 at RAM end - 16.
13203 	*/
13204 #if defined(__i386__) && !defined(SCSI_NCR_PCI_MEM_NOT_SUPPORTED)
13205 	if (chip && (base_2_c & PCI_BASE_ADDRESS_MEM_MASK)) {
13206 		unsigned int ram_size, ram_val;
13207 		u_long ram_ptr;
13208 
13209 		if (chip->features & FE_RAM8K)
13210 			ram_size = 8192;
13211 		else
13212 			ram_size = 4096;
13213 
13214 		ram_ptr = remap_pci_mem(base_2_c & PCI_BASE_ADDRESS_MEM_MASK,
13215 					ram_size);
13216 		if (ram_ptr) {
13217 			ram_val = readl_raw(ram_ptr + ram_size - 16);
13218 			unmap_pci_mem(ram_ptr, ram_size);
13219 			if (ram_val == 0x52414944) {
13220 				printk(NAME53C8XX": not initializing, "
13221 				       "driven by SISL RAID controller.\n");
13222 				return -1;
13223 			}
13224 		}
13225 	}
13226 #endif /* i386 and PCI MEMORY accessible */
13227 
13228 	if (!chip) {
13229 		printk(NAME53C8XX ": not initializing, device not supported\n");
13230 		return -1;
13231 	}
13232 
13233 #ifdef __powerpc__
13234 	/*
13235 	**	Fix-up for power/pc.
13236 	**	Should not be performed by the driver.
13237 	*/
13238 	if ((command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))
13239 		    != (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
13240 		printk(NAME53C8XX ": setting%s%s...\n",
13241 		(command & PCI_COMMAND_IO)     ? "" : " PCI_COMMAND_IO",
13242 		(command & PCI_COMMAND_MEMORY) ? "" : " PCI_COMMAND_MEMORY");
13243 		command |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
13244 		pci_write_config_word(pdev, PCI_COMMAND, command);
13245 	}
13246 
13247 #if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
13248 	if ( is_prep ) {
13249 		if (io_port >= 0x10000000) {
13250 			printk(NAME53C8XX ": reallocating io_port (Wacky IBM)");
13251 			io_port = (io_port & 0x00FFFFFF) | 0x01000000;
13252 			pci_write_config_dword(pdev,
13253 					       PCI_BASE_ADDRESS_0, io_port);
13254 		}
13255 		if (base >= 0x10000000) {
13256 			printk(NAME53C8XX ": reallocating base (Wacky IBM)");
13257 			base = (base & 0x00FFFFFF) | 0x01000000;
13258 			pci_write_config_dword(pdev,
13259 					       PCI_BASE_ADDRESS_1, base);
13260 		}
13261 		if (base_2 >= 0x10000000) {
13262 			printk(NAME53C8XX ": reallocating base2 (Wacky IBM)");
13263 			base_2 = (base_2 & 0x00FFFFFF) | 0x01000000;
13264 			pci_write_config_dword(pdev,
13265 					       PCI_BASE_ADDRESS_2, base_2);
13266 		}
13267 	}
13268 #endif
13269 #endif	/* __powerpc__ */
13270 
13271 #if defined(__i386__) && !defined(MODULE)
13272 	if (!cache_line_size) {
13273 #if LINUX_VERSION_CODE < LinuxVersionCode(2,1,75)
13274 		extern char x86;
13275 		switch(x86) {
13276 #else
13277 		switch(boot_cpu_data.x86) {
13278 #endif
13279 		case 4:	suggested_cache_line_size = 4; break;
13280 		case 6:
13281 		case 5:	suggested_cache_line_size = 8; break;
13282 		}
13283 	}
13284 #endif	/* __i386__ */
13285 
13286 	/*
13287 	**    Check availability of IO space, memory space.
13288 	**    Enable master capability if not yet.
13289 	**
13290 	**    We shouldn't have to care about the IO region when
13291 	**    we are using MMIO. But calling check_region() from
13292 	**    both the ncr53c8xx and the sym53c8xx drivers prevents
13293 	**    from attaching devices from the both drivers.
13294 	**    If you have a better idea, let me know.
13295 	*/
13296 /* #ifdef SCSI_NCR_IOMAPPED */
13297 #if 1
13298 	if (!(command & PCI_COMMAND_IO)) {
13299 		printk(NAME53C8XX ": I/O base address (0x%lx) disabled.\n",
13300 			(long) io_port);
13301 		io_port = 0;
13302 	}
13303 #endif
13304 	if (!(command & PCI_COMMAND_MEMORY)) {
13305 		printk(NAME53C8XX ": PCI_COMMAND_MEMORY not set.\n");
13306 		base	= 0;
13307 		base_2	= 0;
13308 	}
13309 	io_port &= PCI_BASE_ADDRESS_IO_MASK;
13310 	base	&= PCI_BASE_ADDRESS_MEM_MASK;
13311 	base_2	&= PCI_BASE_ADDRESS_MEM_MASK;
13312 
13313 /* #ifdef SCSI_NCR_IOMAPPED */
13314 #if 1
13315 	if (io_port && check_region (io_port, 128)) {
13316 		printk(NAME53C8XX ": IO region 0x%lx[0..127] is in use\n",
13317 			(long) io_port);
13318 		io_port = 0;
13319 	}
13320 	if (!io_port)
13321 		return -1;
13322 #endif
13323 #ifndef SCSI_NCR_IOMAPPED
13324 	if (!base) {
13325 		printk(NAME53C8XX ": MMIO base address disabled.\n");
13326 		return -1;
13327 	}
13328 #endif
13329 
13330 	/*
13331 	**    Set MASTER capable and PARITY bit, if not yet.
13332 	*/
13333 	if ((command & (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY))
13334 		     != (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY)) {
13335 		printk(NAME53C8XX ": setting%s%s...(fix-up)\n",
13336 		(command & PCI_COMMAND_MASTER) ? "" : " PCI_COMMAND_MASTER",
13337 		(command & PCI_COMMAND_PARITY) ? "" : " PCI_COMMAND_PARITY");
13338 		command |= (PCI_COMMAND_MASTER | PCI_COMMAND_PARITY);
13339 		pci_write_config_word(pdev, PCI_COMMAND, command);
13340 	}
13341 
13342 	/*
13343 	**    Fix some features according to driver setup.
13344 	*/
13345 	if (!(driver_setup.special_features & 1))
13346 		chip->features &= ~FE_SPECIAL_SET;
13347 	else {
13348 		if (driver_setup.special_features & 2)
13349 			chip->features &= ~FE_WRIE;
13350 		if (driver_setup.special_features & 4)
13351 			chip->features &= ~FE_NOPM;
13352 	}
13353 
13354 	/*
13355 	** Work around for errant bit in 895A. The 66Mhz
13356 	** capable bit is set erroneously. Clear this bit.
13357 	** (Item 1 DEL 533)
13358 	**
13359 	** Make sure Config space and Features agree.
13360 	**
13361 	** Recall: writes are not normal to status register -
13362 	** write a 1 to clear and a 0 to leave unchanged.
13363 	** Can only reset bits.
13364 	*/
13365 	if (chip->features & FE_66MHZ) {
13366 		if (!(status_reg & PCI_STATUS_66MHZ))
13367 			chip->features &= ~FE_66MHZ;
13368 	}
13369 	else {
13370 		if (status_reg & PCI_STATUS_66MHZ) {
13371 			status_reg = PCI_STATUS_66MHZ;
13372 			pci_write_config_word(pdev, PCI_STATUS, status_reg);
13373 			pci_read_config_word(pdev, PCI_STATUS, &status_reg);
13374 		}
13375 	}
13376 
13377 	/*
13378 	**	Some features are required to be enabled in order to
13379 	**	work around some chip problems. :) ;)
13380 	**	(ITEM 12 of a DEL about the 896 I haven't yet).
13381 	**	We must ensure the chip will use WRITE AND INVALIDATE.
13382 	**	The revision number limit is for now arbitrary.
13383 	*/
13384 	if (device_id == PCI_DEVICE_ID_NCR_53C896 && revision <= 0x10) {
13385 		chip->features	|= (FE_WRIE | FE_CLSE);
13386 		pci_fix_up	|=  3;	/* Force appropriate PCI fix-up */
13387 	}
13388 
13389 #ifdef	SCSI_NCR_PCI_FIX_UP_SUPPORT
13390 	/*
13391 	**    Try to fix up PCI config according to wished features.
13392 	*/
13393 	if ((pci_fix_up & 1) && (chip->features & FE_CLSE) &&
13394 	    !cache_line_size && suggested_cache_line_size) {
13395 		cache_line_size = suggested_cache_line_size;
13396 		pci_write_config_byte(pdev,
13397 				      PCI_CACHE_LINE_SIZE, cache_line_size);
13398 		printk(NAME53C8XX ": PCI_CACHE_LINE_SIZE set to %d (fix-up).\n",
13399 			cache_line_size);
13400 	}
13401 
13402 	if ((pci_fix_up & 2) && cache_line_size &&
13403 	    (chip->features & FE_WRIE) && !(command & PCI_COMMAND_INVALIDATE)) {
13404 		printk(NAME53C8XX": setting PCI_COMMAND_INVALIDATE (fix-up)\n");
13405 		command |= PCI_COMMAND_INVALIDATE;
13406 		pci_write_config_word(pdev, PCI_COMMAND, command);
13407 	}
13408 
13409 	/*
13410 	**    Tune PCI LATENCY TIMER according to burst max length transfer.
13411 	**    (latency timer >= burst length + 6, we add 10 to be quite sure)
13412 	*/
13413 
13414 	if (chip->burst_max && (latency_timer == 0 || (pci_fix_up & 4))) {
13415 		uchar lt = (1 << chip->burst_max) + 6 + 10;
13416 		if (latency_timer < lt) {
13417 			printk(NAME53C8XX
13418 			       ": changing PCI_LATENCY_TIMER from %d to %d.\n",
13419 			       (int) latency_timer, (int) lt);
13420 			latency_timer = lt;
13421 			pci_write_config_byte(pdev,
13422 					      PCI_LATENCY_TIMER, latency_timer);
13423 		}
13424 	}
13425 
13426 #endif	/* SCSI_NCR_PCI_FIX_UP_SUPPORT */
13427 
13428  	/*
13429 	**    Initialise ncr_device structure with items required by ncr_attach.
13430 	*/
13431 	device->pdev		= pdev;
13432 	device->slot.bus	= PciBusNumber(pdev);
13433 	device->slot.device_fn	= PciDeviceFn(pdev);
13434 	device->slot.base	= base;
13435 	device->slot.base_2	= base_2;
13436 	device->slot.base_c	= base_c;
13437 	device->slot.base_2_c	= base_2_c;
13438 	device->slot.io_port	= io_port;
13439 	device->slot.irq	= irq;
13440 	device->attach_done	= 0;
13441 
13442 	return 0;
13443 }
13444 
13445 
13446 /*===================================================================
13447 **    Detect and try to read SYMBIOS and TEKRAM NVRAM.
13448 **
13449 **    Data can be used to order booting of boards.
13450 **
13451 **    Data is saved in ncr_device structure if NVRAM found. This
13452 **    is then used to find drive boot order for ncr_attach().
13453 **
13454 **    NVRAM data is passed to Scsi_Host_Template later during
13455 **    ncr_attach() for any device set up.
13456 *===================================================================
13457 */
13458 #ifdef SCSI_NCR_NVRAM_SUPPORT
13459 static void __init ncr_get_nvram(ncr_device *devp, ncr_nvram *nvp)
13460 {
13461 	devp->nvram = nvp;
13462 	if (!nvp)
13463 		return;
13464 	/*
13465 	**    Get access to chip IO registers
13466 	*/
13467 #ifdef SCSI_NCR_IOMAPPED
13468 	request_region(devp->slot.io_port, 128, NAME53C8XX);
13469 	devp->slot.base_io = devp->slot.io_port;
13470 #else
13471 	devp->slot.reg =
13472 		(struct ncr_reg *) remap_pci_mem(devp->slot.base_c, 128);
13473 	if (!devp->slot.reg)
13474 		return;
13475 #endif
13476 
13477 	/*
13478 	**    Try to read SYMBIOS nvram.
13479 	**    Try to read TEKRAM nvram if Symbios nvram not found.
13480 	*/
13481 	if	(!sym_read_Symbios_nvram(&devp->slot, &nvp->data.Symbios))
13482 		nvp->type = SCSI_NCR_SYMBIOS_NVRAM;
13483 	else if	(!sym_read_Tekram_nvram(&devp->slot, devp->chip.device_id,
13484 					&nvp->data.Tekram))
13485 		nvp->type = SCSI_NCR_TEKRAM_NVRAM;
13486 	else {
13487 		nvp->type = 0;
13488 		devp->nvram = 0;
13489 	}
13490 
13491 	/*
13492 	** Release access to chip IO registers
13493 	*/
13494 #ifdef SCSI_NCR_IOMAPPED
13495 	release_region(devp->slot.base_io, 128);
13496 #else
13497 	unmap_pci_mem((u_long) devp->slot.reg, 128ul);
13498 #endif
13499 
13500 }
13501 #endif	/* SCSI_NCR_NVRAM_SUPPORT */
13502 
13503 /*
13504 **   Linux select queue depths function
13505 */
13506 
13507 #define DEF_DEPTH	(driver_setup.default_tags)
13508 #define ALL_TARGETS	-2
13509 #define NO_TARGET	-1
13510 #define ALL_LUNS	-2
13511 #define NO_LUN		-1
13512 
13513 static int device_queue_depth(ncb_p np, int target, int lun)
13514 {
13515 	int c, h, t, u, v;
13516 	char *p = driver_setup.tag_ctrl;
13517 	char *ep;
13518 
13519 	h = -1;
13520 	t = NO_TARGET;
13521 	u = NO_LUN;
13522 	while ((c = *p++) != 0) {
13523 		v = simple_strtoul(p, &ep, 0);
13524 		switch(c) {
13525 		case '/':
13526 			++h;
13527 			t = ALL_TARGETS;
13528 			u = ALL_LUNS;
13529 			break;
13530 		case 't':
13531 			if (t != target)
13532 				t = (target == v) ? v : NO_TARGET;
13533 			u = ALL_LUNS;
13534 			break;
13535 		case 'u':
13536 			if (u != lun)
13537 				u = (lun == v) ? v : NO_LUN;
13538 			break;
13539 		case 'q':
13540 			if (h == np->unit &&
13541 				(t == ALL_TARGETS || t == target) &&
13542 				(u == ALL_LUNS    || u == lun))
13543 				return v;
13544 			break;
13545 		case '-':
13546 			t = ALL_TARGETS;
13547 			u = ALL_LUNS;
13548 			break;
13549 		default:
13550 			break;
13551 		}
13552 		p = ep;
13553 	}
13554 	return DEF_DEPTH;
13555 }
13556 
13557 static void sym53c8xx_select_queue_depths(struct Scsi_Host *host, struct scsi_device *devlist)
13558 {
13559 	struct scsi_device *device;
13560 
13561 	for (device = devlist; device; device = device->next) {
13562 		ncb_p np;
13563 		tcb_p tp;
13564 		lcb_p lp;
13565 		int numtags;
13566 
13567 		if (device->host != host)
13568 			continue;
13569 
13570 		np = ((struct host_data *) host->hostdata)->ncb;
13571 		tp = &np->target[device->id];
13572 		lp = ncr_lp(np, tp, device->lun);
13573 
13574 		/*
13575 		**	Select queue depth from driver setup.
13576 		**	Donnot use more than configured by user.
13577 		**	Use at least 2.
13578 		**	Donnot use more than our maximum.
13579 		*/
13580 		numtags = device_queue_depth(np, device->id, device->lun);
13581 		if (numtags > tp->usrtags)
13582 			numtags = tp->usrtags;
13583 		if (!device->tagged_supported)
13584 			numtags = 1;
13585 		device->queue_depth = numtags;
13586 		if (device->queue_depth < 2)
13587 			device->queue_depth = 2;
13588 		if (device->queue_depth > MAX_TAGS)
13589 			device->queue_depth = MAX_TAGS;
13590 
13591 		/*
13592 		**	Since the queue depth is not tunable under Linux,
13593 		**	we need to know this value in order not to
13594 		**	announce stupid things to user.
13595 		*/
13596 		if (lp) {
13597 			lp->numtags = lp->maxtags = numtags;
13598 			lp->scdev_depth = device->queue_depth;
13599 		}
13600 		ncr_setup_tags (np, device->id, device->lun);
13601 
13602 #ifdef DEBUG_SYM53C8XX
13603 printk("sym53c8xx_select_queue_depth: host=%d, id=%d, lun=%d, depth=%d\n",
13604 	np->unit, device->id, device->lun, device->queue_depth);
13605 #endif
13606 	}
13607 }
13608 
13609 /*
13610 **   Linux entry point for info() function
13611 */
13612 const char *sym53c8xx_info (struct Scsi_Host *host)
13613 {
13614 	return SCSI_NCR_DRIVER_NAME;
13615 }
13616 
13617 /*
13618 **   Linux entry point of queuecommand() function
13619 */
13620 
13621 int sym53c8xx_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
13622 {
13623      ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
13624      unsigned long flags;
13625      int sts;
13626 
13627 #ifdef DEBUG_SYM53C8XX
13628 printk("sym53c8xx_queue_command\n");
13629 #endif
13630 
13631      cmd->scsi_done     = done;
13632      cmd->host_scribble = NULL;
13633      cmd->SCp.ptr       = NULL;
13634      cmd->SCp.buffer    = NULL;
13635 #ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
13636      __data_mapped(cmd) = 0;
13637      __data_mapping(cmd) = 0;
13638 #endif
13639 
13640      NCR_LOCK_NCB(np, flags);
13641 
13642      if ((sts = ncr_queue_command(np, cmd)) != DID_OK) {
13643 	  SetScsiResult(cmd, sts, 0);
13644 #ifdef DEBUG_SYM53C8XX
13645 printk("sym53c8xx : command not queued - result=%d\n", sts);
13646 #endif
13647      }
13648 #ifdef DEBUG_SYM53C8XX
13649      else
13650 printk("sym53c8xx : command successfully queued\n");
13651 #endif
13652 
13653      NCR_UNLOCK_NCB(np, flags);
13654 
13655      if (sts != DID_OK) {
13656           unmap_scsi_data(np, cmd);
13657           done(cmd);
13658      }
13659 
13660      return sts;
13661 }
13662 
13663 /*
13664 **   Linux entry point of the interrupt handler.
13665 **   Since linux versions > 1.3.70, we trust the kernel for
13666 **   passing the internal host descriptor as 'dev_id'.
13667 **   Otherwise, we scan the host list and call the interrupt
13668 **   routine for each host that uses this IRQ.
13669 */
13670 
13671 static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
13672 {
13673      unsigned long flags;
13674      ncb_p np = (ncb_p) dev_id;
13675      Scsi_Cmnd *done_list;
13676 
13677 #ifdef DEBUG_SYM53C8XX
13678      printk("sym53c8xx : interrupt received\n");
13679 #endif
13680 
13681      if (DEBUG_FLAGS & DEBUG_TINY) printk ("[");
13682 
13683      NCR_LOCK_NCB(np, flags);
13684      ncr_exception(np);
13685      done_list     = np->done_list;
13686      np->done_list = 0;
13687      NCR_UNLOCK_NCB(np, flags);
13688 
13689      if (DEBUG_FLAGS & DEBUG_TINY) printk ("]\n");
13690 
13691      if (done_list) {
13692           NCR_LOCK_SCSI_DONE(np, flags);
13693           ncr_flush_done_cmds(done_list);
13694           NCR_UNLOCK_SCSI_DONE(np, flags);
13695      }
13696 }
13697 
13698 /*
13699 **   Linux entry point of the timer handler
13700 */
13701 
13702 static void sym53c8xx_timeout(unsigned long npref)
13703 {
13704      ncb_p np = (ncb_p) npref;
13705      unsigned long flags;
13706      Scsi_Cmnd *done_list;
13707 
13708      NCR_LOCK_NCB(np, flags);
13709      ncr_timeout((ncb_p) np);
13710      done_list     = np->done_list;
13711      np->done_list = 0;
13712      NCR_UNLOCK_NCB(np, flags);
13713 
13714      if (done_list) {
13715           NCR_LOCK_SCSI_DONE(np, flags);
13716           ncr_flush_done_cmds(done_list);
13717           NCR_UNLOCK_SCSI_DONE(np, flags);
13718      }
13719 }
13720 
13721 /*
13722 **   Linux entry point of reset() function
13723 */
13724 
13725 #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
13726 int sym53c8xx_reset(Scsi_Cmnd *cmd, unsigned int reset_flags)
13727 #else
13728 int sym53c8xx_reset(Scsi_Cmnd *cmd)
13729 #endif
13730 {
13731 	ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
13732 	int sts;
13733 	unsigned long flags;
13734 	Scsi_Cmnd *done_list;
13735 
13736 #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
13737 	printk("sym53c8xx_reset: pid=%lu reset_flags=%x serial_number=%ld serial_number_at_timeout=%ld\n",
13738 		cmd->pid, reset_flags, cmd->serial_number, cmd->serial_number_at_timeout);
13739 #else
13740 	printk("sym53c8xx_reset: command pid %lu\n", cmd->pid);
13741 #endif
13742 
13743 	NCR_LOCK_NCB(np, flags);
13744 
13745 	/*
13746 	 * We have to just ignore reset requests in some situations.
13747 	 */
13748 #if defined SCSI_RESET_NOT_RUNNING
13749 	if (cmd->serial_number != cmd->serial_number_at_timeout) {
13750 		sts = SCSI_RESET_NOT_RUNNING;
13751 		goto out;
13752 	}
13753 #endif
13754 	/*
13755 	 * If the mid-level driver told us reset is synchronous, it seems
13756 	 * that we must call the done() callback for the involved command,
13757 	 * even if this command was not queued to the low-level driver,
13758 	 * before returning SCSI_RESET_SUCCESS.
13759 	 */
13760 
13761 #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
13762 	sts = ncr_reset_bus(np, cmd,
13763 	(reset_flags & (SCSI_RESET_SYNCHRONOUS | SCSI_RESET_ASYNCHRONOUS)) == SCSI_RESET_SYNCHRONOUS);
13764 #else
13765 	sts = ncr_reset_bus(np, cmd, 0);
13766 #endif
13767 
13768 	/*
13769 	 * Since we always reset the controller, when we return success,
13770 	 * we add this information to the return code.
13771 	 */
13772 #if defined SCSI_RESET_HOST_RESET
13773 	if (sts == SCSI_RESET_SUCCESS)
13774 		sts |= SCSI_RESET_HOST_RESET;
13775 #endif
13776 
13777 out:
13778 	done_list     = np->done_list;
13779 	np->done_list = 0;
13780 	NCR_UNLOCK_NCB(np, flags);
13781 
13782 	ncr_flush_done_cmds(done_list);
13783 
13784 	return sts;
13785 }
13786 
13787 /*
13788 **   Linux entry point of abort() function
13789 */
13790 
13791 int sym53c8xx_abort(Scsi_Cmnd *cmd)
13792 {
13793 	ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
13794 	int sts;
13795 	unsigned long flags;
13796 	Scsi_Cmnd *done_list;
13797 
13798 #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
13799 	printk("sym53c8xx_abort: pid=%lu serial_number=%ld serial_number_at_timeout=%ld\n",
13800 		cmd->pid, cmd->serial_number, cmd->serial_number_at_timeout);
13801 #else
13802 	printk("sym53c8xx_abort: command pid %lu\n", cmd->pid);
13803 #endif
13804 
13805 	NCR_LOCK_NCB(np, flags);
13806 
13807 #if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
13808 	/*
13809 	 * We have to just ignore abort requests in some situations.
13810 	 */
13811 	if (cmd->serial_number != cmd->serial_number_at_timeout) {
13812 		sts = SCSI_ABORT_NOT_RUNNING;
13813 		goto out;
13814 	}
13815 #endif
13816 
13817 	sts = ncr_abort_command(np, cmd);
13818 out:
13819 	done_list     = np->done_list;
13820 	np->done_list = 0;
13821 	NCR_UNLOCK_NCB(np, flags);
13822 
13823 	ncr_flush_done_cmds(done_list);
13824 
13825 	return sts;
13826 }
13827 
13828 
13829 #ifdef MODULE
13830 int sym53c8xx_release(struct Scsi_Host *host)
13831 {
13832 #ifdef DEBUG_SYM53C8XX
13833 printk("sym53c8xx : release\n");
13834 #endif
13835      ncr_detach(((struct host_data *) host->hostdata)->ncb);
13836 
13837      return 1;
13838 }
13839 #endif
13840 
13841 
13842 /*
13843 **	Scsi command waiting list management.
13844 **
13845 **	It may happen that we cannot insert a scsi command into the start queue,
13846 **	in the following circumstances.
13847 ** 		Too few preallocated ccb(s),
13848 **		maxtags < cmd_per_lun of the Linux host control block,
13849 **		etc...
13850 **	Such scsi commands are inserted into a waiting list.
13851 **	When a scsi command complete, we try to requeue the commands of the
13852 **	waiting list.
13853 */
13854 
13855 #define next_wcmd host_scribble
13856 
13857 static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd)
13858 {
13859 	Scsi_Cmnd *wcmd;
13860 
13861 #ifdef DEBUG_WAITING_LIST
13862 	printk("%s: cmd %lx inserted into waiting list\n", ncr_name(np), (u_long) cmd);
13863 #endif
13864 	cmd->next_wcmd = 0;
13865 	if (!(wcmd = np->waiting_list)) np->waiting_list = cmd;
13866 	else {
13867 		while ((wcmd->next_wcmd) != 0)
13868 			wcmd = (Scsi_Cmnd *) wcmd->next_wcmd;
13869 		wcmd->next_wcmd = (char *) cmd;
13870 	}
13871 }
13872 
13873 static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd)
13874 {
13875 	Scsi_Cmnd **pcmd = &np->waiting_list;
13876 
13877 	while (*pcmd) {
13878 		if (cmd == *pcmd) {
13879 			if (to_remove) {
13880 				*pcmd = (Scsi_Cmnd *) cmd->next_wcmd;
13881 				cmd->next_wcmd = 0;
13882 			}
13883 #ifdef DEBUG_WAITING_LIST
13884 	printk("%s: cmd %lx retrieved from waiting list\n", ncr_name(np), (u_long) cmd);
13885 #endif
13886 			return cmd;
13887 		}
13888 		pcmd = (Scsi_Cmnd **) &(*pcmd)->next_wcmd;
13889 	}
13890 	return 0;
13891 }
13892 
13893 static void process_waiting_list(ncb_p np, int sts)
13894 {
13895 	Scsi_Cmnd *waiting_list, *wcmd;
13896 
13897 	waiting_list = np->waiting_list;
13898 	np->waiting_list = 0;
13899 
13900 #ifdef DEBUG_WAITING_LIST
13901 	if (waiting_list) printk("%s: waiting_list=%lx processing sts=%d\n", ncr_name(np), (u_long) waiting_list, sts);
13902 #endif
13903 	while ((wcmd = waiting_list) != 0) {
13904 		waiting_list = (Scsi_Cmnd *) wcmd->next_wcmd;
13905 		wcmd->next_wcmd = 0;
13906 		if (sts == DID_OK) {
13907 #ifdef DEBUG_WAITING_LIST
13908 	printk("%s: cmd %lx trying to requeue\n", ncr_name(np), (u_long) wcmd);
13909 #endif
13910 			sts = ncr_queue_command(np, wcmd);
13911 		}
13912 		if (sts != DID_OK) {
13913 #ifdef DEBUG_WAITING_LIST
13914 	printk("%s: cmd %lx done forced sts=%d\n", ncr_name(np), (u_long) wcmd, sts);
13915 #endif
13916 			SetScsiResult(wcmd, sts, 0);
13917 			ncr_queue_done_cmd(np, wcmd);
13918 		}
13919 	}
13920 }
13921 
13922 #undef next_wcmd
13923 
13924 #ifdef SCSI_NCR_PROC_INFO_SUPPORT
13925 
13926 /*=========================================================================
13927 **	Proc file system stuff
13928 **
13929 **	A read operation returns adapter information.
13930 **	A write operation is a control command.
13931 **	The string is parsed in the driver code and the command is passed
13932 **	to the ncr_usercmd() function.
13933 **=========================================================================
13934 */
13935 
13936 #ifdef SCSI_NCR_USER_COMMAND_SUPPORT
13937 
13938 #define is_digit(c)	((c) >= '0' && (c) <= '9')
13939 #define digit_to_bin(c)	((c) - '0')
13940 #define is_space(c)	((c) == ' ' || (c) == '\t')
13941 
13942 static int skip_spaces(char *ptr, int len)
13943 {
13944 	int cnt, c;
13945 
13946 	for (cnt = len; cnt > 0 && (c = *ptr++) && is_space(c); cnt--);
13947 
13948 	return (len - cnt);
13949 }
13950 
13951 static int get_int_arg(char *ptr, int len, u_long *pv)
13952 {
13953 	int	cnt, c;
13954 	u_long	v;
13955 
13956 	for (v = 0, cnt = len; cnt > 0 && (c = *ptr++) && is_digit(c); cnt--) {
13957 		v = (v * 10) + digit_to_bin(c);
13958 	}
13959 
13960 	if (pv)
13961 		*pv = v;
13962 
13963 	return (len - cnt);
13964 }
13965 
13966 static int is_keyword(char *ptr, int len, char *verb)
13967 {
13968 	int verb_len = strlen(verb);
13969 
13970 	if (len >= strlen(verb) && !memcmp(verb, ptr, verb_len))
13971 		return verb_len;
13972 	else
13973 		return 0;
13974 
13975 }
13976 
13977 #define SKIP_SPACES(min_spaces)						\
13978 	if ((arg_len = skip_spaces(ptr, len)) < (min_spaces))		\
13979 		return -EINVAL;						\
13980 	ptr += arg_len; len -= arg_len;
13981 
13982 #define GET_INT_ARG(v)							\
13983 	if (!(arg_len = get_int_arg(ptr, len, &(v))))			\
13984 		return -EINVAL;						\
13985 	ptr += arg_len; len -= arg_len;
13986 
13987 
13988 /*
13989 **	Parse a control command
13990 */
13991 
13992 static int ncr_user_command(ncb_p np, char *buffer, int length)
13993 {
13994 	char *ptr	= buffer;
13995 	int len		= length;
13996 	struct usrcmd	 *uc = &np->user;
13997 	int		arg_len;
13998 	u_long 		target;
13999 
14000 	bzero(uc, sizeof(*uc));
14001 
14002 	if (len > 0 && ptr[len-1] == '\n')
14003 		--len;
14004 
14005 	if	((arg_len = is_keyword(ptr, len, "setsync")) != 0)
14006 		uc->cmd = UC_SETSYNC;
14007 	else if	((arg_len = is_keyword(ptr, len, "settags")) != 0)
14008 		uc->cmd = UC_SETTAGS;
14009 	else if	((arg_len = is_keyword(ptr, len, "setorder")) != 0)
14010 		uc->cmd = UC_SETORDER;
14011 	else if	((arg_len = is_keyword(ptr, len, "setverbose")) != 0)
14012 		uc->cmd = UC_SETVERBOSE;
14013 	else if	((arg_len = is_keyword(ptr, len, "setwide")) != 0)
14014 		uc->cmd = UC_SETWIDE;
14015 	else if	((arg_len = is_keyword(ptr, len, "setdebug")) != 0)
14016 		uc->cmd = UC_SETDEBUG;
14017 	else if	((arg_len = is_keyword(ptr, len, "setflag")) != 0)
14018 		uc->cmd = UC_SETFLAG;
14019 	else if	((arg_len = is_keyword(ptr, len, "resetdev")) != 0)
14020 		uc->cmd = UC_RESETDEV;
14021 	else if	((arg_len = is_keyword(ptr, len, "cleardev")) != 0)
14022 		uc->cmd = UC_CLEARDEV;
14023 	else
14024 		arg_len = 0;
14025 
14026 #ifdef DEBUG_PROC_INFO
14027 printk("ncr_user_command: arg_len=%d, cmd=%ld\n", arg_len, uc->cmd);
14028 #endif
14029 
14030 	if (!arg_len)
14031 		return -EINVAL;
14032 	ptr += arg_len; len -= arg_len;
14033 
14034 	switch(uc->cmd) {
14035 	case UC_SETSYNC:
14036 	case UC_SETTAGS:
14037 	case UC_SETWIDE:
14038 	case UC_SETFLAG:
14039 	case UC_RESETDEV:
14040 	case UC_CLEARDEV:
14041 		SKIP_SPACES(1);
14042 		if ((arg_len = is_keyword(ptr, len, "all")) != 0) {
14043 			ptr += arg_len; len -= arg_len;
14044 			uc->target = ~0;
14045 		} else {
14046 			GET_INT_ARG(target);
14047 			uc->target = (1<<target);
14048 #ifdef DEBUG_PROC_INFO
14049 printk("ncr_user_command: target=%ld\n", target);
14050 #endif
14051 		}
14052 		break;
14053 	}
14054 
14055 	switch(uc->cmd) {
14056 	case UC_SETVERBOSE:
14057 	case UC_SETSYNC:
14058 	case UC_SETTAGS:
14059 	case UC_SETWIDE:
14060 		SKIP_SPACES(1);
14061 		GET_INT_ARG(uc->data);
14062 #ifdef DEBUG_PROC_INFO
14063 printk("ncr_user_command: data=%ld\n", uc->data);
14064 #endif
14065 		break;
14066 	case UC_SETORDER:
14067 		SKIP_SPACES(1);
14068 		if	((arg_len = is_keyword(ptr, len, "simple")))
14069 			uc->data = M_SIMPLE_TAG;
14070 		else if	((arg_len = is_keyword(ptr, len, "ordered")))
14071 			uc->data = M_ORDERED_TAG;
14072 		else if	((arg_len = is_keyword(ptr, len, "default")))
14073 			uc->data = 0;
14074 		else
14075 			return -EINVAL;
14076 		break;
14077 	case UC_SETDEBUG:
14078 		while (len > 0) {
14079 			SKIP_SPACES(1);
14080 			if	((arg_len = is_keyword(ptr, len, "alloc")))
14081 				uc->data |= DEBUG_ALLOC;
14082 			else if	((arg_len = is_keyword(ptr, len, "phase")))
14083 				uc->data |= DEBUG_PHASE;
14084 			else if	((arg_len = is_keyword(ptr, len, "queue")))
14085 				uc->data |= DEBUG_QUEUE;
14086 			else if	((arg_len = is_keyword(ptr, len, "result")))
14087 				uc->data |= DEBUG_RESULT;
14088 			else if	((arg_len = is_keyword(ptr, len, "pointer")))
14089 				uc->data |= DEBUG_POINTER;
14090 			else if	((arg_len = is_keyword(ptr, len, "script")))
14091 				uc->data |= DEBUG_SCRIPT;
14092 			else if	((arg_len = is_keyword(ptr, len, "tiny")))
14093 				uc->data |= DEBUG_TINY;
14094 			else if	((arg_len = is_keyword(ptr, len, "timing")))
14095 				uc->data |= DEBUG_TIMING;
14096 			else if	((arg_len = is_keyword(ptr, len, "nego")))
14097 				uc->data |= DEBUG_NEGO;
14098 			else if	((arg_len = is_keyword(ptr, len, "tags")))
14099 				uc->data |= DEBUG_TAGS;
14100 			else
14101 				return -EINVAL;
14102 			ptr += arg_len; len -= arg_len;
14103 		}
14104 #ifdef DEBUG_PROC_INFO
14105 printk("ncr_user_command: data=%ld\n", uc->data);
14106 #endif
14107 		break;
14108 	case UC_SETFLAG:
14109 		while (len > 0) {
14110 			SKIP_SPACES(1);
14111 			if	((arg_len = is_keyword(ptr, len, "trace")))
14112 				uc->data |= UF_TRACE;
14113 			else if	((arg_len = is_keyword(ptr, len, "no_disc")))
14114 				uc->data |= UF_NODISC;
14115 			else
14116 				return -EINVAL;
14117 			ptr += arg_len; len -= arg_len;
14118 		}
14119 		break;
14120 	default:
14121 		break;
14122 	}
14123 
14124 	if (len)
14125 		return -EINVAL;
14126 	else {
14127 		unsigned long flags;
14128 
14129 		NCR_LOCK_NCB(np, flags);
14130 		ncr_usercmd (np);
14131 		NCR_UNLOCK_NCB(np, flags);
14132 	}
14133 	return length;
14134 }
14135 
14136 #endif	/* SCSI_NCR_USER_COMMAND_SUPPORT */
14137 
14138 #ifdef SCSI_NCR_USER_INFO_SUPPORT
14139 
14140 struct info_str
14141 {
14142 	char *buffer;
14143 	int length;
14144 	int offset;
14145 	int pos;
14146 };
14147 
14148 static void copy_mem_info(struct info_str *info, char *data, int len)
14149 {
14150 	if (info->pos + len > info->length)
14151 		len = info->length - info->pos;
14152 
14153 	if (info->pos + len < info->offset) {
14154 		info->pos += len;
14155 		return;
14156 	}
14157 	if (info->pos < info->offset) {
14158 		data += (info->offset - info->pos);
14159 		len  -= (info->offset - info->pos);
14160 	}
14161 
14162 	if (len > 0) {
14163 		memcpy(info->buffer + info->pos, data, len);
14164 		info->pos += len;
14165 	}
14166 }
14167 
14168 static int copy_info(struct info_str *info, char *fmt, ...)
14169 {
14170 	va_list args;
14171 	char buf[81];
14172 	int len;
14173 
14174 	va_start(args, fmt);
14175 	len = vsprintf(buf, fmt, args);
14176 	va_end(args);
14177 
14178 	copy_mem_info(info, buf, len);
14179 	return len;
14180 }
14181 
14182 /*
14183 **	Copy formatted information into the input buffer.
14184 */
14185 
14186 static int ncr_host_info(ncb_p np, char *ptr, off_t offset, int len)
14187 {
14188 	struct info_str info;
14189 
14190 	info.buffer	= ptr;
14191 	info.length	= len;
14192 	info.offset	= offset;
14193 	info.pos	= 0;
14194 
14195 	copy_info(&info, "General information:\n");
14196 	copy_info(&info, "  Chip " NAME53C "%s, device id 0x%x, "
14197 			 "revision id 0x%x\n",
14198 			 np->chip_name, np->device_id,	np->revision_id);
14199 	copy_info(&info, "  On PCI bus %d, device %d, function %d, "
14200 #ifdef __sparc__
14201 		"IRQ %s\n",
14202 #else
14203 		"IRQ %d\n",
14204 #endif
14205 		np->bus, (np->device_fn & 0xf8) >> 3, np->device_fn & 7,
14206 #ifdef __sparc__
14207 		__irq_itoa(np->irq));
14208 #else
14209 		(int) np->irq);
14210 #endif
14211 	copy_info(&info, "  Synchronous period factor %d, "
14212 			 "max commands per lun %d\n",
14213 			 (int) np->minsync, MAX_TAGS);
14214 
14215 	if (driver_setup.debug || driver_setup.verbose > 1) {
14216 		copy_info(&info, "  Debug flags 0x%x, verbosity level %d\n",
14217 			  driver_setup.debug, driver_setup.verbose);
14218 	}
14219 
14220 	return info.pos > info.offset? info.pos - info.offset : 0;
14221 }
14222 
14223 #endif /* SCSI_NCR_USER_INFO_SUPPORT */
14224 
14225 /*
14226 **	Entry point of the scsi proc fs of the driver.
14227 **	- func = 0 means read  (returns adapter infos)
14228 **	- func = 1 means write (parse user control command)
14229 */
14230 
14231 static int sym53c8xx_proc_info(char *buffer, char **start, off_t offset,
14232 			int length, int hostno, int func)
14233 {
14234 	struct Scsi_Host *host;
14235 	struct host_data *host_data;
14236 	ncb_p ncb = 0;
14237 	int retv;
14238 
14239 #ifdef DEBUG_PROC_INFO
14240 printk("sym53c8xx_proc_info: hostno=%d, func=%d\n", hostno, func);
14241 #endif
14242 
14243 	for (host = first_host; host; host = host->next) {
14244 		if (host->hostt != first_host->hostt)
14245 			continue;
14246 		if (host->host_no == hostno) {
14247 			host_data = (struct host_data *) host->hostdata;
14248 			ncb = host_data->ncb;
14249 			break;
14250 		}
14251 	}
14252 
14253 	if (!ncb)
14254 		return -EINVAL;
14255 
14256 	if (func) {
14257 #ifdef	SCSI_NCR_USER_COMMAND_SUPPORT
14258 		retv = ncr_user_command(ncb, buffer, length);
14259 #else
14260 		retv = -EINVAL;
14261 #endif
14262 	}
14263 	else {
14264 		if (start)
14265 			*start = buffer;
14266 #ifdef SCSI_NCR_USER_INFO_SUPPORT
14267 		retv = ncr_host_info(ncb, buffer, offset, length);
14268 #else
14269 		retv = -EINVAL;
14270 #endif
14271 	}
14272 
14273 	return retv;
14274 }
14275 
14276 
14277 /*=========================================================================
14278 **	End of proc file system stuff
14279 **=========================================================================
14280 */
14281 #endif
14282 
14283 
14284 #ifdef SCSI_NCR_NVRAM_SUPPORT
14285 
14286 /*
14287  *  24C16 EEPROM reading.
14288  *
14289  *  GPOI0 - data in/data out
14290  *  GPIO1 - clock
14291  *  Symbios NVRAM wiring now also used by Tekram.
14292  */
14293 
14294 #define SET_BIT 0
14295 #define CLR_BIT 1
14296 #define SET_CLK 2
14297 #define CLR_CLK 3
14298 
14299 /*
14300  *  Set/clear data/clock bit in GPIO0
14301  */
14302 static void __init
14303 S24C16_set_bit(ncr_slot *np, u_char write_bit, u_char *gpreg, int bit_mode)
14304 {
14305 	UDELAY (5);
14306 	switch (bit_mode){
14307 	case SET_BIT:
14308 		*gpreg |= write_bit;
14309 		break;
14310 	case CLR_BIT:
14311 		*gpreg &= 0xfe;
14312 		break;
14313 	case SET_CLK:
14314 		*gpreg |= 0x02;
14315 		break;
14316 	case CLR_CLK:
14317 		*gpreg &= 0xfd;
14318 		break;
14319 
14320 	}
14321 	OUTB (nc_gpreg, *gpreg);
14322 	UDELAY (5);
14323 }
14324 
14325 /*
14326  *  Send START condition to NVRAM to wake it up.
14327  */
14328 static void __init S24C16_start(ncr_slot *np, u_char *gpreg)
14329 {
14330 	S24C16_set_bit(np, 1, gpreg, SET_BIT);
14331 	S24C16_set_bit(np, 0, gpreg, SET_CLK);
14332 	S24C16_set_bit(np, 0, gpreg, CLR_BIT);
14333 	S24C16_set_bit(np, 0, gpreg, CLR_CLK);
14334 }
14335 
14336 /*
14337  *  Send STOP condition to NVRAM - puts NVRAM to sleep... ZZzzzz!!
14338  */
14339 static void __init S24C16_stop(ncr_slot *np, u_char *gpreg)
14340 {
14341 	S24C16_set_bit(np, 0, gpreg, SET_CLK);
14342 	S24C16_set_bit(np, 1, gpreg, SET_BIT);
14343 }
14344 
14345 /*
14346  *  Read or write a bit to the NVRAM,
14347  *  read if GPIO0 input else write if GPIO0 output
14348  */
14349 static void __init
14350 S24C16_do_bit(ncr_slot *np, u_char *read_bit, u_char write_bit, u_char *gpreg)
14351 {
14352 	S24C16_set_bit(np, write_bit, gpreg, SET_BIT);
14353 	S24C16_set_bit(np, 0, gpreg, SET_CLK);
14354 	if (read_bit)
14355 		*read_bit = INB (nc_gpreg);
14356 	S24C16_set_bit(np, 0, gpreg, CLR_CLK);
14357 	S24C16_set_bit(np, 0, gpreg, CLR_BIT);
14358 }
14359 
14360 /*
14361  *  Output an ACK to the NVRAM after reading,
14362  *  change GPIO0 to output and when done back to an input
14363  */
14364 static void __init
14365 S24C16_write_ack(ncr_slot *np, u_char write_bit, u_char *gpreg, u_char *gpcntl)
14366 {
14367 	OUTB (nc_gpcntl, *gpcntl & 0xfe);
14368 	S24C16_do_bit(np, 0, write_bit, gpreg);
14369 	OUTB (nc_gpcntl, *gpcntl);
14370 }
14371 
14372 /*
14373  *  Input an ACK from NVRAM after writing,
14374  *  change GPIO0 to input and when done back to an output
14375  */
14376 static void __init
14377 S24C16_read_ack(ncr_slot *np, u_char *read_bit, u_char *gpreg, u_char *gpcntl)
14378 {
14379 	OUTB (nc_gpcntl, *gpcntl | 0x01);
14380 	S24C16_do_bit(np, read_bit, 1, gpreg);
14381 	OUTB (nc_gpcntl, *gpcntl);
14382 }
14383 
14384 /*
14385  *  WRITE a byte to the NVRAM and then get an ACK to see it was accepted OK,
14386  *  GPIO0 must already be set as an output
14387  */
14388 static void __init
14389 S24C16_write_byte(ncr_slot *np, u_char *ack_data, u_char write_data,
14390 		  u_char *gpreg, u_char *gpcntl)
14391 {
14392 	int x;
14393 
14394 	for (x = 0; x < 8; x++)
14395 		S24C16_do_bit(np, 0, (write_data >> (7 - x)) & 0x01, gpreg);
14396 
14397 	S24C16_read_ack(np, ack_data, gpreg, gpcntl);
14398 }
14399 
14400 /*
14401  *  READ a byte from the NVRAM and then send an ACK to say we have got it,
14402  *  GPIO0 must already be set as an input
14403  */
14404 static void __init
14405 S24C16_read_byte(ncr_slot *np, u_char *read_data, u_char ack_data,
14406 	         u_char *gpreg, u_char *gpcntl)
14407 {
14408 	int x;
14409 	u_char read_bit;
14410 
14411 	*read_data = 0;
14412 	for (x = 0; x < 8; x++) {
14413 		S24C16_do_bit(np, &read_bit, 1, gpreg);
14414 		*read_data |= ((read_bit & 0x01) << (7 - x));
14415 	}
14416 
14417 	S24C16_write_ack(np, ack_data, gpreg, gpcntl);
14418 }
14419 
14420 /*
14421  *  Read 'len' bytes starting at 'offset'.
14422  */
14423 static int __init
14424 sym_read_S24C16_nvram (ncr_slot *np, int offset, u_char *data, int len)
14425 {
14426 	u_char	gpcntl, gpreg;
14427 	u_char	old_gpcntl, old_gpreg;
14428 	u_char	ack_data;
14429 	int	retv = 1;
14430 	int	x;
14431 
14432 	/* save current state of GPCNTL and GPREG */
14433 	old_gpreg	= INB (nc_gpreg);
14434 	old_gpcntl	= INB (nc_gpcntl);
14435 	gpcntl		= old_gpcntl & 0x1c;
14436 
14437 	/* set up GPREG & GPCNTL to set GPIO0 and GPIO1 in to known state */
14438 	OUTB (nc_gpreg,  old_gpreg);
14439 	OUTB (nc_gpcntl, gpcntl);
14440 
14441 	/* this is to set NVRAM into a known state with GPIO0/1 both low */
14442 	gpreg = old_gpreg;
14443 	S24C16_set_bit(np, 0, &gpreg, CLR_CLK);
14444 	S24C16_set_bit(np, 0, &gpreg, CLR_BIT);
14445 
14446 	/* now set NVRAM inactive with GPIO0/1 both high */
14447 	S24C16_stop(np, &gpreg);
14448 
14449 	/* activate NVRAM */
14450 	S24C16_start(np, &gpreg);
14451 
14452 	/* write device code and random address MSB */
14453 	S24C16_write_byte(np, &ack_data,
14454 		0xa0 | ((offset >> 7) & 0x0e), &gpreg, &gpcntl);
14455 	if (ack_data & 0x01)
14456 		goto out;
14457 
14458 	/* write random address LSB */
14459 	S24C16_write_byte(np, &ack_data,
14460 		offset & 0xff, &gpreg, &gpcntl);
14461 	if (ack_data & 0x01)
14462 		goto out;
14463 
14464 	/* regenerate START state to set up for reading */
14465 	S24C16_start(np, &gpreg);
14466 
14467 	/* rewrite device code and address MSB with read bit set (lsb = 0x01) */
14468 	S24C16_write_byte(np, &ack_data,
14469 		0xa1 | ((offset >> 7) & 0x0e), &gpreg, &gpcntl);
14470 	if (ack_data & 0x01)
14471 		goto out;
14472 
14473 	/* now set up GPIO0 for inputting data */
14474 	gpcntl |= 0x01;
14475 	OUTB (nc_gpcntl, gpcntl);
14476 
14477 	/* input all requested data - only part of total NVRAM */
14478 	for (x = 0; x < len; x++)
14479 		S24C16_read_byte(np, &data[x], (x == (len-1)), &gpreg, &gpcntl);
14480 
14481 	/* finally put NVRAM back in inactive mode */
14482 	gpcntl &= 0xfe;
14483 	OUTB (nc_gpcntl, gpcntl);
14484 	S24C16_stop(np, &gpreg);
14485 	retv = 0;
14486 out:
14487 	/* return GPIO0/1 to original states after having accessed NVRAM */
14488 	OUTB (nc_gpcntl, old_gpcntl);
14489 	OUTB (nc_gpreg,  old_gpreg);
14490 
14491 	return retv;
14492 }
14493 
14494 #undef SET_BIT
14495 #undef CLR_BIT
14496 #undef SET_CLK
14497 #undef CLR_CLK
14498 
14499 /*
14500  *  Try reading Symbios NVRAM.
14501  *  Return 0 if OK.
14502  */
14503 static int __init sym_read_Symbios_nvram (ncr_slot *np, Symbios_nvram *nvram)
14504 {
14505 	static u_char Symbios_trailer[6] = {0xfe, 0xfe, 0, 0, 0, 0};
14506 	u_char *data = (u_char *) nvram;
14507 	int len  = sizeof(*nvram);
14508 	u_short	csum;
14509 	int x;
14510 
14511 	/* probe the 24c16 and read the SYMBIOS 24c16 area */
14512 	if (sym_read_S24C16_nvram (np, SYMBIOS_NVRAM_ADDRESS, data, len))
14513 		return 1;
14514 
14515 	/* check valid NVRAM signature, verify byte count and checksum */
14516 	if (nvram->type != 0 ||
14517 	    memcmp(nvram->trailer, Symbios_trailer, 6) ||
14518 	    nvram->byte_count != len - 12)
14519 		return 1;
14520 
14521 	/* verify checksum */
14522 	for (x = 6, csum = 0; x < len - 6; x++)
14523 		csum += data[x];
14524 	if (csum != nvram->checksum)
14525 		return 1;
14526 
14527 	return 0;
14528 }
14529 
14530 /*
14531  *  93C46 EEPROM reading.
14532  *
14533  *  GPOI0 - data in
14534  *  GPIO1 - data out
14535  *  GPIO2 - clock
14536  *  GPIO4 - chip select
14537  *
14538  *  Used by Tekram.
14539  */
14540 
14541 /*
14542  *  Pulse clock bit in GPIO0
14543  */
14544 static void __init T93C46_Clk(ncr_slot *np, u_char *gpreg)
14545 {
14546 	OUTB (nc_gpreg, *gpreg | 0x04);
14547 	UDELAY (2);
14548 	OUTB (nc_gpreg, *gpreg);
14549 }
14550 
14551 /*
14552  *  Read bit from NVRAM
14553  */
14554 static void __init T93C46_Read_Bit(ncr_slot *np, u_char *read_bit, u_char *gpreg)
14555 {
14556 	UDELAY (2);
14557 	T93C46_Clk(np, gpreg);
14558 	*read_bit = INB (nc_gpreg);
14559 }
14560 
14561 /*
14562  *  Write bit to GPIO0
14563  */
14564 static void __init T93C46_Write_Bit(ncr_slot *np, u_char write_bit, u_char *gpreg)
14565 {
14566 	if (write_bit & 0x01)
14567 		*gpreg |= 0x02;
14568 	else
14569 		*gpreg &= 0xfd;
14570 
14571 	*gpreg |= 0x10;
14572 
14573 	OUTB (nc_gpreg, *gpreg);
14574 	UDELAY (2);
14575 
14576 	T93C46_Clk(np, gpreg);
14577 }
14578 
14579 /*
14580  *  Send STOP condition to NVRAM - puts NVRAM to sleep... ZZZzzz!!
14581  */
14582 static void __init T93C46_Stop(ncr_slot *np, u_char *gpreg)
14583 {
14584 	*gpreg &= 0xef;
14585 	OUTB (nc_gpreg, *gpreg);
14586 	UDELAY (2);
14587 
14588 	T93C46_Clk(np, gpreg);
14589 }
14590 
14591 /*
14592  *  Send read command and address to NVRAM
14593  */
14594 static void __init
14595 T93C46_Send_Command(ncr_slot *np, u_short write_data,
14596 		    u_char *read_bit, u_char *gpreg)
14597 {
14598 	int x;
14599 
14600 	/* send 9 bits, start bit (1), command (2), address (6)  */
14601 	for (x = 0; x < 9; x++)
14602 		T93C46_Write_Bit(np, (u_char) (write_data >> (8 - x)), gpreg);
14603 
14604 	*read_bit = INB (nc_gpreg);
14605 }
14606 
14607 /*
14608  *  READ 2 bytes from the NVRAM
14609  */
14610 static void __init
14611 T93C46_Read_Word(ncr_slot *np, u_short *nvram_data, u_char *gpreg)
14612 {
14613 	int x;
14614 	u_char read_bit;
14615 
14616 	*nvram_data = 0;
14617 	for (x = 0; x < 16; x++) {
14618 		T93C46_Read_Bit(np, &read_bit, gpreg);
14619 
14620 		if (read_bit & 0x01)
14621 			*nvram_data |=  (0x01 << (15 - x));
14622 		else
14623 			*nvram_data &= ~(0x01 << (15 - x));
14624 	}
14625 }
14626 
14627 /*
14628  *  Read Tekram NvRAM data.
14629  */
14630 static int __init
14631 T93C46_Read_Data(ncr_slot *np, u_short *data,int len,u_char *gpreg)
14632 {
14633 	u_char	read_bit;
14634 	int	x;
14635 
14636 	for (x = 0; x < len; x++)  {
14637 
14638 		/* output read command and address */
14639 		T93C46_Send_Command(np, 0x180 | x, &read_bit, gpreg);
14640 		if (read_bit & 0x01)
14641 			return 1; /* Bad */
14642 		T93C46_Read_Word(np, &data[x], gpreg);
14643 		T93C46_Stop(np, gpreg);
14644 	}
14645 
14646 	return 0;
14647 }
14648 
14649 /*
14650  *  Try reading 93C46 Tekram NVRAM.
14651  */
14652 static int __init
14653 sym_read_T93C46_nvram (ncr_slot *np, Tekram_nvram *nvram)
14654 {
14655 	u_char gpcntl, gpreg;
14656 	u_char old_gpcntl, old_gpreg;
14657 	int retv = 1;
14658 
14659 	/* save current state of GPCNTL and GPREG */
14660 	old_gpreg	= INB (nc_gpreg);
14661 	old_gpcntl	= INB (nc_gpcntl);
14662 
14663 	/* set up GPREG & GPCNTL to set GPIO0/1/2/4 in to known state, 0 in,
14664 	   1/2/4 out */
14665 	gpreg = old_gpreg & 0xe9;
14666 	OUTB (nc_gpreg, gpreg);
14667 	gpcntl = (old_gpcntl & 0xe9) | 0x09;
14668 	OUTB (nc_gpcntl, gpcntl);
14669 
14670 	/* input all of NVRAM, 64 words */
14671 	retv = T93C46_Read_Data(np, (u_short *) nvram,
14672 				sizeof(*nvram) / sizeof(short), &gpreg);
14673 
14674 	/* return GPIO0/1/2/4 to original states after having accessed NVRAM */
14675 	OUTB (nc_gpcntl, old_gpcntl);
14676 	OUTB (nc_gpreg,  old_gpreg);
14677 
14678 	return retv;
14679 }
14680 
14681 /*
14682  *  Try reading Tekram NVRAM.
14683  *  Return 0 if OK.
14684  */
14685 static int __init
14686 sym_read_Tekram_nvram (ncr_slot *np, u_short device_id, Tekram_nvram *nvram)
14687 {
14688 	u_char *data = (u_char *) nvram;
14689 	int len = sizeof(*nvram);
14690 	u_short	csum;
14691 	int x;
14692 
14693 	switch (device_id) {
14694 	case PCI_DEVICE_ID_NCR_53C885:
14695 	case PCI_DEVICE_ID_NCR_53C895:
14696 	case PCI_DEVICE_ID_NCR_53C896:
14697 		x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,
14698 					  data, len);
14699 		break;
14700 	case PCI_DEVICE_ID_NCR_53C875:
14701 		x = sym_read_S24C16_nvram(np, TEKRAM_24C16_NVRAM_ADDRESS,
14702 					  data, len);
14703 		if (!x)
14704 			break;
14705 	default:
14706 		x = sym_read_T93C46_nvram(np, nvram);
14707 		break;
14708 	}
14709 	if (x)
14710 		return 1;
14711 
14712 	/* verify checksum */
14713 	for (x = 0, csum = 0; x < len - 1; x += 2)
14714 		csum += data[x] + (data[x+1] << 8);
14715 	if (csum != 0x1234)
14716 		return 1;
14717 
14718 	return 0;
14719 }
14720 
14721 #endif	/* SCSI_NCR_NVRAM_SUPPORT */
14722 
14723 /*
14724 **	Module stuff
14725 */
14726 
14727 MODULE_LICENSE("GPL");
14728 
14729 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0)
14730 static
14731 #endif
14732 #if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0) || defined(MODULE)
14733 Scsi_Host_Template driver_template = SYM53C8XX;
14734 #include "scsi_module.c"
14735 #endif
14736