OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [scsi/] [ncr53c8xx.c] - Blame information for rev 1780

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/******************************************************************************
2
**  Device driver for the PCI-SCSI NCR538XX controller family.
3
**
4
**  Copyright (C) 1994  Wolfgang Stanglmeier
5
**
6
**  This program is free software; you can redistribute it and/or modify
7
**  it under the terms of the GNU General Public License as published by
8
**  the Free Software Foundation; either version 2 of the License, or
9
**  (at your option) any later version.
10
**
11
**  This program is distributed in the hope that it will be useful,
12
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
**  GNU General Public License for more details.
15
**
16
**  You should have received a copy of the GNU General Public License
17
**  along with this program; if not, write to the Free Software
18
**  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
**
20
**-----------------------------------------------------------------------------
21
**
22
**  This driver has been ported to Linux from the FreeBSD NCR53C8XX driver
23
**  and is currently maintained by
24
**
25
**          Gerard Roudier              <groudier@free.fr>
26
**
27
**  Being given that this driver originates from the FreeBSD version, and
28
**  in order to keep synergy on both, any suggested enhancements and corrections
29
**  received on Linux are automatically a potential candidate for the FreeBSD
30
**  version.
31
**
32
**  The original driver has been written for 386bsd and FreeBSD by
33
**          Wolfgang Stanglmeier        <wolf@cologne.de>
34
**          Stefan Esser                <se@mi.Uni-Koeln.de>
35
**
36
**  And has been ported to NetBSD by
37
**          Charles M. Hannum           <mycroft@gnu.ai.mit.edu>
38
**
39
**-----------------------------------------------------------------------------
40
**
41
**                     Brief history
42
**
43
**  December 10 1995 by Gerard Roudier:
44
**     Initial port to Linux.
45
**
46
**  June 23 1996 by Gerard Roudier:
47
**     Support for 64 bits architectures (Alpha).
48
**
49
**  November 30 1996 by Gerard Roudier:
50
**     Support for Fast-20 scsi.
51
**     Support for large DMA fifo and 128 dwords bursting.
52
**
53
**  February 27 1997 by Gerard Roudier:
54
**     Support for Fast-40 scsi.
55
**     Support for on-Board RAM.
56
**
57
**  May 3 1997 by Gerard Roudier:
58
**     Full support for scsi scripts instructions pre-fetching.
59
**
60
**  May 19 1997 by Richard Waltham <dormouse@farsrobt.demon.co.uk>:
61
**     Support for NvRAM detection and reading.
62
**
63
**  August 18 1997 by Cort <cort@cs.nmt.edu>:
64
**     Support for Power/PC (Big Endian).
65
**
66
**  June 20 1998 by Gerard Roudier
67
**     Support for up to 64 tags per lun.
68
**     O(1) everywhere (C and SCRIPTS) for normal cases.
69
**     Low PCI traffic for command handling when on-chip RAM is present.
70
**     Aggressive SCSI SCRIPTS optimizations.
71
**
72
*******************************************************************************
73
*/
74
 
75
/*
76
**      Supported SCSI-II features:
77
**          Synchronous negotiation
78
**          Wide negotiation        (depends on the NCR Chip)
79
**          Enable disconnection
80
**          Tagged command queuing
81
**          Parity checking
82
**          Etc...
83
**
84
**      Supported NCR/SYMBIOS chips:
85
**              53C810          (8 bits, Fast SCSI-2, no rom BIOS)
86
**              53C815          (8 bits, Fast SCSI-2, on board rom BIOS)
87
**              53C820          (Wide,   Fast SCSI-2, no rom BIOS)
88
**              53C825          (Wide,   Fast SCSI-2, on board rom BIOS)
89
**              53C860          (8 bits, Fast 20,     no rom BIOS)
90
**              53C875          (Wide,   Fast 20,     on board rom BIOS)
91
**              53C895          (Wide,   Fast 40,     on board rom BIOS)
92
**              53C895A         (Wide,   Fast 40,     on board rom BIOS)
93
**              53C896          (Wide,   Fast 40,     on board rom BIOS)
94
**              53C897          (Wide,   Fast 40,     on board rom BIOS)
95
**              53C1510D        (Wide,   Fast 40,     on board rom BIOS)
96
**
97
**      Other features:
98
**              Memory mapped IO (linux-1.3.X and above only)
99
**              Module
100
**              Shared IRQ (since linux-1.3.72)
101
*/
102
 
103
/*
104
**      Name and version of the driver
105
*/
106
#define SCSI_NCR_DRIVER_NAME    "ncr53c8xx-3.4.3b-20010512"
107
 
108
#define SCSI_NCR_DEBUG_FLAGS    (0)
109
 
110
/*==========================================================
111
**
112
**      Include files
113
**
114
**==========================================================
115
*/
116
 
117
#define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
118
 
119
#include <linux/module.h>
120
#include <asm/dma.h>
121
#include <asm/io.h>
122
#include <asm/system.h>
123
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,17)
124
#include <linux/spinlock.h>
125
#elif LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
126
#include <asm/spinlock.h>
127
#endif
128
#include <linux/delay.h>
129
#include <linux/signal.h>
130
#include <linux/sched.h>
131
#include <linux/errno.h>
132
#include <linux/pci.h>
133
#include <linux/string.h>
134
#include <linux/mm.h>
135
#include <linux/ioport.h>
136
#include <linux/time.h>
137
#include <linux/timer.h>
138
#include <linux/stat.h>
139
 
140
#include <linux/version.h>
141
#include <linux/blk.h>
142
 
143
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,35)
144
#include <linux/init.h>
145
#endif
146
 
147
#ifndef __init
148
#define __init
149
#endif
150
#ifndef __initdata
151
#define __initdata
152
#endif
153
 
154
#if LINUX_VERSION_CODE <= LinuxVersionCode(2,1,92)
155
#include <linux/bios32.h>
156
#endif
157
 
158
#include "scsi.h"
159
#include "hosts.h"
160
#include "constants.h"
161
#include "sd.h"
162
 
163
#include <linux/types.h>
164
 
165
/*
166
**      Define BITS_PER_LONG for earlier linux versions.
167
*/
168
#ifndef BITS_PER_LONG
169
#if (~0UL) == 0xffffffffUL
170
#define BITS_PER_LONG   32
171
#else
172
#define BITS_PER_LONG   64
173
#endif
174
#endif
175
 
176
/*
177
**      Define the BSD style u_int32 and u_int64 type.
178
**      Are in fact u_int32_t and u_int64_t :-)
179
*/
180
typedef u32 u_int32;
181
typedef u64 u_int64;
182
typedef u_long          vm_offset_t;
183
#include "ncr53c8xx.h"
184
 
185
/*
186
**      Donnot compile integrity checking code for Linux-2.3.0
187
**      and above since SCSI data structures are not ready yet.
188
*/
189
/* #if LINUX_VERSION_CODE < LinuxVersionCode(2,3,0) */
190
#if 0
191
#define SCSI_NCR_INTEGRITY_CHECKING
192
#endif
193
 
194
#define NAME53C                 "ncr53c"
195
#define NAME53C8XX              "ncr53c8xx"
196
#define DRIVER_SMP_LOCK         ncr53c8xx_lock
197
 
198
#include "sym53c8xx_comm.h"
199
 
200
/*==========================================================
201
**
202
**      The CCB done queue uses an array of CCB virtual
203
**      addresses. Empty entries are flagged using the bogus
204
**      virtual address 0xffffffff.
205
**
206
**      Since PCI ensures that only aligned DWORDs are accessed
207
**      atomically, 64 bit little-endian architecture requires
208
**      to test the high order DWORD of the entry to determine
209
**      if it is empty or valid.
210
**
211
**      BTW, I will make things differently as soon as I will
212
**      have a better idea, but this is simple and should work.
213
**
214
**==========================================================
215
*/
216
 
217
#define SCSI_NCR_CCB_DONE_SUPPORT
218
#ifdef  SCSI_NCR_CCB_DONE_SUPPORT
219
 
220
#define MAX_DONE 24
221
#define CCB_DONE_EMPTY 0xffffffffUL
222
 
223
/* All 32 bit architectures */
224
#if BITS_PER_LONG == 32
225
#define CCB_DONE_VALID(cp)  (((u_long) cp) != CCB_DONE_EMPTY)
226
 
227
/* All > 32 bit (64 bit) architectures regardless endian-ness */
228
#else
229
#define CCB_DONE_VALID(cp)  \
230
        ((((u_long) cp) & 0xffffffff00000000ul) &&      \
231
         (((u_long) cp) & 0xfffffffful) != CCB_DONE_EMPTY)
232
#endif
233
 
234
#endif /* SCSI_NCR_CCB_DONE_SUPPORT */
235
 
236
/*==========================================================
237
**
238
**      Configuration and Debugging
239
**
240
**==========================================================
241
*/
242
 
243
/*
244
**    SCSI address of this device.
245
**    The boot routines should have set it.
246
**    If not, use this.
247
*/
248
 
249
#ifndef SCSI_NCR_MYADDR
250
#define SCSI_NCR_MYADDR      (7)
251
#endif
252
 
253
/*
254
**    The maximum number of tags per logic unit.
255
**    Used only for disk devices that support tags.
256
*/
257
 
258
#ifndef SCSI_NCR_MAX_TAGS
259
#define SCSI_NCR_MAX_TAGS    (8)
260
#endif
261
 
262
/*
263
**    TAGS are actually limited to 64 tags/lun.
264
**    We need to deal with power of 2, for alignment constraints.
265
*/
266
#if     SCSI_NCR_MAX_TAGS > 64
267
#define MAX_TAGS (64)
268
#else
269
#define MAX_TAGS SCSI_NCR_MAX_TAGS
270
#endif
271
 
272
#define NO_TAG  (255)
273
 
274
/*
275
**      Choose appropriate type for tag bitmap.
276
*/
277
#if     MAX_TAGS > 32
278
typedef u_int64 tagmap_t;
279
#else
280
typedef u_int32 tagmap_t;
281
#endif
282
 
283
/*
284
**    Number of targets supported by the driver.
285
**    n permits target numbers 0..n-1.
286
**    Default is 16, meaning targets #0..#15.
287
**    #7 .. is myself.
288
*/
289
 
290
#ifdef SCSI_NCR_MAX_TARGET
291
#define MAX_TARGET  (SCSI_NCR_MAX_TARGET)
292
#else
293
#define MAX_TARGET  (16)
294
#endif
295
 
296
/*
297
**    Number of logic units supported by the driver.
298
**    n enables logic unit numbers 0..n-1.
299
**    The common SCSI devices require only
300
**    one lun, so take 1 as the default.
301
*/
302
 
303
#ifdef SCSI_NCR_MAX_LUN
304
#define MAX_LUN    SCSI_NCR_MAX_LUN
305
#else
306
#define MAX_LUN    (1)
307
#endif
308
 
309
/*
310
**    Asynchronous pre-scaler (ns). Shall be 40
311
*/
312
 
313
#ifndef SCSI_NCR_MIN_ASYNC
314
#define SCSI_NCR_MIN_ASYNC (40)
315
#endif
316
 
317
/*
318
**    The maximum number of jobs scheduled for starting.
319
**    There should be one slot per target, and one slot
320
**    for each tag of each target in use.
321
**    The calculation below is actually quite silly ...
322
*/
323
 
324
#ifdef SCSI_NCR_CAN_QUEUE
325
#define MAX_START   (SCSI_NCR_CAN_QUEUE + 4)
326
#else
327
#define MAX_START   (MAX_TARGET + 7 * MAX_TAGS)
328
#endif
329
 
330
/*
331
**   We limit the max number of pending IO to 250.
332
**   since we donnot want to allocate more than 1
333
**   PAGE for 'scripth'.
334
*/
335
#if     MAX_START > 250
336
#undef  MAX_START
337
#define MAX_START 250
338
#endif
339
 
340
/*
341
**    The maximum number of segments a transfer is split into.
342
**    We support up to 127 segments for both read and write.
343
**    The data scripts are broken into 2 sub-scripts.
344
**    80 (MAX_SCATTERL) segments are moved from a sub-script
345
**    in on-chip RAM. This makes data transfers shorter than
346
**    80k (assuming 1k fs) as fast as possible.
347
*/
348
 
349
#define MAX_SCATTER (SCSI_NCR_MAX_SCATTER)
350
 
351
#if (MAX_SCATTER > 80)
352
#define MAX_SCATTERL    80
353
#define MAX_SCATTERH    (MAX_SCATTER - MAX_SCATTERL)
354
#else
355
#define MAX_SCATTERL    (MAX_SCATTER-1)
356
#define MAX_SCATTERH    1
357
#endif
358
 
359
/*
360
**      other
361
*/
362
 
363
#define NCR_SNOOP_TIMEOUT (1000000)
364
 
365
/*
366
**      Head of list of NCR boards
367
**
368
**      For kernel version < 1.3.70, host is retrieved by its irq level.
369
**      For later kernels, the internal host control block address
370
**      (struct ncb) is used as device id parameter of the irq stuff.
371
*/
372
 
373
static struct Scsi_Host         *first_host     = NULL;
374
static Scsi_Host_Template       *the_template   = NULL;
375
 
376
/*
377
**      Other definitions
378
*/
379
 
380
#define ScsiResult(host_code, scsi_code) (((host_code) << 16) + ((scsi_code) & 0x7f))
381
 
382
static void ncr53c8xx_select_queue_depths(
383
        struct Scsi_Host *host, struct scsi_device *devlist);
384
static void ncr53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
385
static void ncr53c8xx_timeout(unsigned long np);
386
 
387
#define initverbose (driver_setup.verbose)
388
#define bootverbose (np->verbose)
389
 
390
#ifdef SCSI_NCR_NVRAM_SUPPORT
391
static u_char Tekram_sync[16] __initdata =
392
        {25,31,37,43, 50,62,75,125, 12,15,18,21, 6,7,9,10};
393
#endif /* SCSI_NCR_NVRAM_SUPPORT */
394
 
395
/*==========================================================
396
**
397
**      Command control block states.
398
**
399
**==========================================================
400
*/
401
 
402
#define HS_IDLE         (0)
403
#define HS_BUSY         (1)
404
#define HS_NEGOTIATE    (2)     /* sync/wide data transfer*/
405
#define HS_DISCONNECT   (3)     /* Disconnected by target */
406
 
407
#define HS_DONEMASK     (0x80)
408
#define HS_COMPLETE     (4|HS_DONEMASK)
409
#define HS_SEL_TIMEOUT  (5|HS_DONEMASK) /* Selection timeout      */
410
#define HS_RESET        (6|HS_DONEMASK) /* SCSI reset             */
411
#define HS_ABORTED      (7|HS_DONEMASK) /* Transfer aborted       */
412
#define HS_TIMEOUT      (8|HS_DONEMASK) /* Software timeout       */
413
#define HS_FAIL         (9|HS_DONEMASK) /* SCSI or PCI bus errors */
414
#define HS_UNEXPECTED   (10|HS_DONEMASK)/* Unexpected disconnect  */
415
 
416
/*
417
**      Invalid host status values used by the SCRIPTS processor
418
**      when the nexus is not fully identified.
419
**      Shall never appear in a CCB.
420
*/
421
 
422
#define HS_INVALMASK    (0x40)
423
#define HS_SELECTING    (0|HS_INVALMASK)
424
#define HS_IN_RESELECT  (1|HS_INVALMASK)
425
#define HS_STARTING     (2|HS_INVALMASK)
426
 
427
/*
428
**      Flags set by the SCRIPT processor for commands
429
**      that have been skipped.
430
*/
431
#define HS_SKIPMASK     (0x20)
432
 
433
/*==========================================================
434
**
435
**      Software Interrupt Codes
436
**
437
**==========================================================
438
*/
439
 
440
#define SIR_BAD_STATUS          (1)
441
#define SIR_XXXXXXXXXX          (2)
442
#define SIR_NEGO_SYNC           (3)
443
#define SIR_NEGO_WIDE           (4)
444
#define SIR_NEGO_FAILED         (5)
445
#define SIR_NEGO_PROTO          (6)
446
#define SIR_REJECT_RECEIVED     (7)
447
#define SIR_REJECT_SENT         (8)
448
#define SIR_IGN_RESIDUE         (9)
449
#define SIR_MISSING_SAVE        (10)
450
#define SIR_RESEL_NO_MSG_IN     (11)
451
#define SIR_RESEL_NO_IDENTIFY   (12)
452
#define SIR_RESEL_BAD_LUN       (13)
453
#define SIR_RESEL_BAD_TARGET    (14)
454
#define SIR_RESEL_BAD_I_T_L     (15)
455
#define SIR_RESEL_BAD_I_T_L_Q   (16)
456
#define SIR_DONE_OVERFLOW       (17)
457
#define SIR_MAX                 (17)
458
 
459
/*==========================================================
460
**
461
**      Extended error codes.
462
**      xerr_status field of struct ccb.
463
**
464
**==========================================================
465
*/
466
 
467
#define XE_OK           (0)
468
#define XE_EXTRA_DATA   (1)     /* unexpected data phase */
469
#define XE_BAD_PHASE    (2)     /* illegal phase (4/5)   */
470
 
471
/*==========================================================
472
**
473
**      Negotiation status.
474
**      nego_status field       of struct ccb.
475
**
476
**==========================================================
477
*/
478
 
479
#define NS_NOCHANGE     (0)
480
#define NS_SYNC         (1)
481
#define NS_WIDE         (2)
482
#define NS_PPR          (4)
483
 
484
/*==========================================================
485
**
486
**      "Special features" of targets.
487
**      quirks field            of struct tcb.
488
**      actualquirks field      of struct ccb.
489
**
490
**==========================================================
491
*/
492
 
493
#define QUIRK_AUTOSAVE  (0x01)
494
#define QUIRK_NOMSG     (0x02)
495
#define QUIRK_NOSYNC    (0x10)
496
#define QUIRK_NOWIDE16  (0x20)
497
 
498
/*==========================================================
499
**
500
**      Capability bits in Inquire response byte 7.
501
**
502
**==========================================================
503
*/
504
 
505
#define INQ7_QUEUE      (0x02)
506
#define INQ7_SYNC       (0x10)
507
#define INQ7_WIDE16     (0x20)
508
 
509
/*==========================================================
510
**
511
**      Misc.
512
**
513
**==========================================================
514
*/
515
 
516
#define CCB_MAGIC       (0xf2691ad2)
517
 
518
/*==========================================================
519
**
520
**      Declaration of structs.
521
**
522
**==========================================================
523
*/
524
 
525
struct tcb;
526
struct lcb;
527
struct ccb;
528
struct ncb;
529
struct script;
530
 
531
typedef struct ncb * ncb_p;
532
typedef struct tcb * tcb_p;
533
typedef struct lcb * lcb_p;
534
typedef struct ccb * ccb_p;
535
 
536
struct link {
537
        ncrcmd  l_cmd;
538
        ncrcmd  l_paddr;
539
};
540
 
541
struct  usrcmd {
542
        u_long  target;
543
        u_long  lun;
544
        u_long  data;
545
        u_long  cmd;
546
};
547
 
548
#define UC_SETSYNC      10
549
#define UC_SETTAGS      11
550
#define UC_SETDEBUG     12
551
#define UC_SETORDER     13
552
#define UC_SETWIDE      14
553
#define UC_SETFLAG      15
554
#define UC_SETVERBOSE   17
555
 
556
#define UF_TRACE        (0x01)
557
#define UF_NODISC       (0x02)
558
#define UF_NOSCAN       (0x04)
559
 
560
/*========================================================================
561
**
562
**      Declaration of structs:         target control block
563
**
564
**========================================================================
565
*/
566
struct tcb {
567
        /*----------------------------------------------------------------
568
        **      During reselection the ncr jumps to this point with SFBR
569
        **      set to the encoded target number with bit 7 set.
570
        **      if it's not this target, jump to the next.
571
        **
572
        **      JUMP  IF (SFBR != #target#), @(next tcb)
573
        **----------------------------------------------------------------
574
        */
575
        struct link   jump_tcb;
576
 
577
        /*----------------------------------------------------------------
578
        **      Load the actual values for the sxfer and the scntl3
579
        **      register (sync/wide mode).
580
        **
581
        **      SCR_COPY (1), @(sval field of this tcb), @(sxfer  register)
582
        **      SCR_COPY (1), @(wval field of this tcb), @(scntl3 register)
583
        **----------------------------------------------------------------
584
        */
585
        ncrcmd  getscr[6];
586
 
587
        /*----------------------------------------------------------------
588
        **      Get the IDENTIFY message and load the LUN to SFBR.
589
        **
590
        **      CALL, <RESEL_LUN>
591
        **----------------------------------------------------------------
592
        */
593
        struct link   call_lun;
594
 
595
        /*----------------------------------------------------------------
596
        **      Now look for the right lun.
597
        **
598
        **      For i = 0 to 3
599
        **              SCR_JUMP ^ IFTRUE(MASK(i, 3)), @(first lcb mod. i)
600
        **
601
        **      Recent chips will prefetch the 4 JUMPS using only 1 burst.
602
        **      It is kind of hashcoding.
603
        **----------------------------------------------------------------
604
        */
605
        struct link     jump_lcb[4];    /* JUMPs for reselection        */
606
        lcb_p           lp[MAX_LUN];    /* The lcb's of this tcb        */
607
        u_char          inq_done;       /* Target capabilities received */
608
        u_char          inq_byte7;      /* Contains these capabilities  */
609
 
610
        /*----------------------------------------------------------------
611
        **      Pointer to the ccb used for negotiation.
612
        **      Prevent from starting a negotiation for all queued commands
613
        **      when tagged command queuing is enabled.
614
        **----------------------------------------------------------------
615
        */
616
        ccb_p   nego_cp;
617
 
618
        /*----------------------------------------------------------------
619
        **      statistical data
620
        **----------------------------------------------------------------
621
        */
622
        u_long  transfers;
623
        u_long  bytes;
624
 
625
        /*----------------------------------------------------------------
626
        **      negotiation of wide and synch transfer and device quirks.
627
        **----------------------------------------------------------------
628
        */
629
/*0*/   u_char  minsync;
630
/*1*/   u_char  sval;
631
/*2*/   u_short period;
632
/*0*/   u_char  maxoffs;
633
/*1*/   u_char  quirks;
634
/*2*/   u_char  widedone;
635
/*3*/   u_char  wval;
636
 
637
#ifdef SCSI_NCR_INTEGRITY_CHECKING
638
        u_char  ic_min_sync;
639
        u_char  ic_max_width;
640
        u_char  ic_maximums_set;
641
        u_char  ic_done;
642
#endif
643
 
644
        /*----------------------------------------------------------------
645
        **      User settable limits and options.
646
        **      These limits are read from the NVRAM if present.
647
        **----------------------------------------------------------------
648
        */
649
        u_char  usrsync;
650
        u_char  usrwide;
651
        u_char  usrtags;
652
        u_char  usrflag;
653
};
654
 
655
/*========================================================================
656
**
657
**      Declaration of structs:         lun control block
658
**
659
**========================================================================
660
*/
661
struct lcb {
662
        /*----------------------------------------------------------------
663
        **      During reselection the ncr jumps to this point
664
        **      with SFBR set to the "Identify" message.
665
        **      if it's not this lun, jump to the next.
666
        **
667
        **      JUMP  IF (SFBR != #lun#), @(next lcb of this target)
668
        **
669
        **      It is this lun. Load TEMP with the nexus jumps table
670
        **      address and jump to RESEL_TAG (or RESEL_NOTAG).
671
        **
672
        **              SCR_COPY (4), p_jump_ccb, TEMP,
673
        **              SCR_JUMP, <RESEL_TAG>
674
        **----------------------------------------------------------------
675
        */
676
        struct link     jump_lcb;
677
        ncrcmd          load_jump_ccb[3];
678
        struct link     jump_tag;
679
        ncrcmd          p_jump_ccb;     /* Jump table bus address       */
680
 
681
        /*----------------------------------------------------------------
682
        **      Jump table used by the script processor to directly jump
683
        **      to the CCB corresponding to the reselected nexus.
684
        **      Address is allocated on 256 bytes boundary in order to
685
        **      allow 8 bit calculation of the tag jump entry for up to
686
        **      64 possible tags.
687
        **----------------------------------------------------------------
688
        */
689
        u_int32         jump_ccb_0;     /* Default table if no tags     */
690
        u_int32         *jump_ccb;      /* Virtual address              */
691
 
692
        /*----------------------------------------------------------------
693
        **      CCB queue management.
694
        **----------------------------------------------------------------
695
        */
696
        XPT_QUEHEAD     free_ccbq;      /* Queue of available CCBs      */
697
        XPT_QUEHEAD     busy_ccbq;      /* Queue of busy CCBs           */
698
        XPT_QUEHEAD     wait_ccbq;      /* Queue of waiting for IO CCBs */
699
        XPT_QUEHEAD     skip_ccbq;      /* Queue of skipped CCBs        */
700
        u_char          actccbs;        /* Number of allocated CCBs     */
701
        u_char          busyccbs;       /* CCBs busy for this lun       */
702
        u_char          queuedccbs;     /* CCBs queued to the controller*/
703
        u_char          queuedepth;     /* Queue depth for this lun     */
704
        u_char          scdev_depth;    /* SCSI device queue depth      */
705
        u_char          maxnxs;         /* Max possible nexuses         */
706
 
707
        /*----------------------------------------------------------------
708
        **      Control of tagged command queuing.
709
        **      Tags allocation is performed using a circular buffer.
710
        **      This avoids using a loop for tag allocation.
711
        **----------------------------------------------------------------
712
        */
713
        u_char          ia_tag;         /* Allocation index             */
714
        u_char          if_tag;         /* Freeing index                */
715
        u_char cb_tags[MAX_TAGS];       /* Circular tags buffer */
716
        u_char          usetags;        /* Command queuing is active    */
717
        u_char          maxtags;        /* Max nr of tags asked by user */
718
        u_char          numtags;        /* Current number of tags       */
719
        u_char          inq_byte7;      /* Store unit CmdQ capabitility */
720
 
721
        /*----------------------------------------------------------------
722
        **      QUEUE FULL control and ORDERED tag control.
723
        **----------------------------------------------------------------
724
        */
725
        /*----------------------------------------------------------------
726
        **      QUEUE FULL and ORDERED tag control.
727
        **----------------------------------------------------------------
728
        */
729
        u_short         num_good;       /* Nr of GOOD since QUEUE FULL  */
730
        tagmap_t        tags_umap;      /* Used tags bitmap             */
731
        tagmap_t        tags_smap;      /* Tags in use at 'tag_stime'   */
732
        u_long          tags_stime;     /* Last time we set smap=umap   */
733
        ccb_p           held_ccb;       /* CCB held for QUEUE FULL      */
734
};
735
 
736
/*========================================================================
737
**
738
**      Declaration of structs:     the launch script.
739
**
740
**========================================================================
741
**
742
**      It is part of the CCB and is called by the scripts processor to
743
**      start or restart the data structure (nexus).
744
**      This 6 DWORDs mini script makes use of prefetching.
745
**
746
**------------------------------------------------------------------------
747
*/
748
struct launch {
749
        /*----------------------------------------------------------------
750
        **      SCR_COPY(4),    @(p_phys), @(dsa register)
751
        **      SCR_JUMP,       @(scheduler_point)
752
        **----------------------------------------------------------------
753
        */
754
        ncrcmd          setup_dsa[3];   /* Copy 'phys' address to dsa   */
755
        struct link     schedule;       /* Jump to scheduler point      */
756
        ncrcmd          p_phys;         /* 'phys' header bus address    */
757
};
758
 
759
/*========================================================================
760
**
761
**      Declaration of structs:     global HEADER.
762
**
763
**========================================================================
764
**
765
**      This substructure is copied from the ccb to a global address after
766
**      selection (or reselection) and copied back before disconnect.
767
**
768
**      These fields are accessible to the script processor.
769
**
770
**------------------------------------------------------------------------
771
*/
772
 
773
struct head {
774
        /*----------------------------------------------------------------
775
        **      Saved data pointer.
776
        **      Points to the position in the script responsible for the
777
        **      actual transfer transfer of data.
778
        **      It's written after reception of a SAVE_DATA_POINTER message.
779
        **      The goalpointer points after the last transfer command.
780
        **----------------------------------------------------------------
781
        */
782
        u_int32         savep;
783
        u_int32         lastp;
784
        u_int32         goalp;
785
 
786
        /*----------------------------------------------------------------
787
        **      Alternate data pointer.
788
        **      They are copied back to savep/lastp/goalp by the SCRIPTS
789
        **      when the direction is unknown and the device claims data out.
790
        **----------------------------------------------------------------
791
        */
792
        u_int32         wlastp;
793
        u_int32         wgoalp;
794
 
795
        /*----------------------------------------------------------------
796
        **      The virtual address of the ccb containing this header.
797
        **----------------------------------------------------------------
798
        */
799
        ccb_p   cp;
800
 
801
        /*----------------------------------------------------------------
802
        **      Status fields.
803
        **----------------------------------------------------------------
804
        */
805
        u_char          scr_st[4];      /* script status                */
806
        u_char          status[4];      /* host status. must be the     */
807
                                        /*  last DWORD of the header.   */
808
};
809
 
810
/*
811
**      The status bytes are used by the host and the script processor.
812
**
813
**      The byte corresponding to the host_status must be stored in the
814
**      last DWORD of the CCB header since it is used for command
815
**      completion (ncr_wakeup()). Doing so, we are sure that the header
816
**      has been entirely copied back to the CCB when the host_status is
817
**      seen complete by the CPU.
818
**
819
**      The last four bytes (status[4]) are copied to the scratchb register
820
**      (declared as scr0..scr3 in ncr_reg.h) just after the select/reselect,
821
**      and copied back just after disconnecting.
822
**      Inside the script the XX_REG are used.
823
**
824
**      The first four bytes (scr_st[4]) are used inside the script by
825
**      "COPY" commands.
826
**      Because source and destination must have the same alignment
827
**      in a DWORD, the fields HAVE to be at the choosen offsets.
828
**              xerr_st         0        (0x34)  scratcha
829
**              sync_st         1       (0x05)  sxfer
830
**              wide_st         3       (0x03)  scntl3
831
*/
832
 
833
/*
834
**      Last four bytes (script)
835
*/
836
#define  QU_REG scr0
837
#define  HS_REG scr1
838
#define  HS_PRT nc_scr1
839
#define  SS_REG scr2
840
#define  SS_PRT nc_scr2
841
#define  PS_REG scr3
842
 
843
/*
844
**      Last four bytes (host)
845
*/
846
#define  actualquirks  phys.header.status[0]
847
#define  host_status   phys.header.status[1]
848
#define  scsi_status   phys.header.status[2]
849
#define  parity_status phys.header.status[3]
850
 
851
/*
852
**      First four bytes (script)
853
*/
854
#define  xerr_st       header.scr_st[0]
855
#define  sync_st       header.scr_st[1]
856
#define  nego_st       header.scr_st[2]
857
#define  wide_st       header.scr_st[3]
858
 
859
/*
860
**      First four bytes (host)
861
*/
862
#define  xerr_status   phys.xerr_st
863
#define  nego_status   phys.nego_st
864
 
865
#if 0
866
#define  sync_status   phys.sync_st
867
#define  wide_status   phys.wide_st
868
#endif
869
 
870
/*==========================================================
871
**
872
**      Declaration of structs:     Data structure block
873
**
874
**==========================================================
875
**
876
**      During execution of a ccb by the script processor,
877
**      the DSA (data structure address) register points
878
**      to this substructure of the ccb.
879
**      This substructure contains the header with
880
**      the script-processor-changable data and
881
**      data blocks for the indirect move commands.
882
**
883
**----------------------------------------------------------
884
*/
885
 
886
struct dsb {
887
 
888
        /*
889
        **      Header.
890
        */
891
 
892
        struct head     header;
893
 
894
        /*
895
        **      Table data for Script
896
        */
897
 
898
        struct scr_tblsel  select;
899
        struct scr_tblmove smsg  ;
900
        struct scr_tblmove cmd   ;
901
        struct scr_tblmove sense ;
902
        struct scr_tblmove data [MAX_SCATTER];
903
};
904
 
905
 
906
/*========================================================================
907
**
908
**      Declaration of structs:     Command control block.
909
**
910
**========================================================================
911
*/
912
struct ccb {
913
        /*----------------------------------------------------------------
914
        **      This is the data structure which is pointed by the DSA
915
        **      register when it is executed by the script processor.
916
        **      It must be the first entry because it contains the header
917
        **      as first entry that must be cache line aligned.
918
        **----------------------------------------------------------------
919
        */
920
        struct dsb      phys;
921
 
922
        /*----------------------------------------------------------------
923
        **      Mini-script used at CCB execution start-up.
924
        **      Load the DSA with the data structure address (phys) and
925
        **      jump to SELECT. Jump to CANCEL if CCB is to be canceled.
926
        **----------------------------------------------------------------
927
        */
928
        struct launch   start;
929
 
930
        /*----------------------------------------------------------------
931
        **      Mini-script used at CCB relection to restart the nexus.
932
        **      Load the DSA with the data structure address (phys) and
933
        **      jump to RESEL_DSA. Jump to ABORT if CCB is to be aborted.
934
        **----------------------------------------------------------------
935
        */
936
        struct launch   restart;
937
 
938
        /*----------------------------------------------------------------
939
        **      If a data transfer phase is terminated too early
940
        **      (after reception of a message (i.e. DISCONNECT)),
941
        **      we have to prepare a mini script to transfer
942
        **      the rest of the data.
943
        **----------------------------------------------------------------
944
        */
945
        ncrcmd          patch[8];
946
 
947
        /*----------------------------------------------------------------
948
        **      The general SCSI driver provides a
949
        **      pointer to a control block.
950
        **----------------------------------------------------------------
951
        */
952
        Scsi_Cmnd       *cmd;           /* SCSI command                 */
953
        u_char          cdb_buf[16];    /* Copy of CDB                  */
954
        u_char          sense_buf[64];
955
        int             data_len;       /* Total data length            */
956
 
957
        /*----------------------------------------------------------------
958
        **      Message areas.
959
        **      We prepare a message to be sent after selection.
960
        **      We may use a second one if the command is rescheduled
961
        **      due to GETCC or QFULL.
962
        **      Contents are IDENTIFY and SIMPLE_TAG.
963
        **      While negotiating sync or wide transfer,
964
        **      a SDTR or WDTR message is appended.
965
        **----------------------------------------------------------------
966
        */
967
        u_char          scsi_smsg [8];
968
        u_char          scsi_smsg2[8];
969
 
970
        /*----------------------------------------------------------------
971
        **      Other fields.
972
        **----------------------------------------------------------------
973
        */
974
        u_long          p_ccb;          /* BUS address of this CCB      */
975
        u_char          sensecmd[6];    /* Sense command                */
976
        u_char          tag;            /* Tag for this transfer        */
977
                                        /*  255 means no tag            */
978
        u_char          target;
979
        u_char          lun;
980
        u_char          queued;
981
        u_char          auto_sense;
982
        ccb_p           link_ccb;       /* Host adapter CCB chain       */
983
        XPT_QUEHEAD     link_ccbq;      /* Link to unit CCB queue       */
984
        u_int32         startp;         /* Initial data pointer         */
985
        u_long          magic;          /* Free / busy  CCB flag        */
986
};
987
 
988
#define CCB_PHYS(cp,lbl)        (cp->p_ccb + offsetof(struct ccb, lbl))
989
 
990
 
991
/*========================================================================
992
**
993
**      Declaration of structs:     NCR device descriptor
994
**
995
**========================================================================
996
*/
997
struct ncb {
998
        /*----------------------------------------------------------------
999
        **      The global header.
1000
        **      It is accessible to both the host and the script processor.
1001
        **      Must be cache line size aligned (32 for x86) in order to
1002
        **      allow cache line bursting when it is copied to/from CCB.
1003
        **----------------------------------------------------------------
1004
        */
1005
        struct head     header;
1006
 
1007
        /*----------------------------------------------------------------
1008
        **      CCBs management queues.
1009
        **----------------------------------------------------------------
1010
        */
1011
        Scsi_Cmnd       *waiting_list;  /* Commands waiting for a CCB   */
1012
                                        /*  when lcb is not allocated.  */
1013
        Scsi_Cmnd       *done_list;     /* Commands waiting for done()  */
1014
                                        /* callback to be invoked.      */
1015
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,93)
1016
        spinlock_t      smp_lock;       /* Lock for SMP threading       */
1017
#endif
1018
 
1019
        /*----------------------------------------------------------------
1020
        **      Chip and controller indentification.
1021
        **----------------------------------------------------------------
1022
        */
1023
        int             unit;           /* Unit number                  */
1024
        char            chip_name[8];   /* Chip name                    */
1025
        char            inst_name[16];  /* ncb instance name            */
1026
 
1027
        /*----------------------------------------------------------------
1028
        **      Initial value of some IO register bits.
1029
        **      These values are assumed to have been set by BIOS, and may
1030
        **      be used for probing adapter implementation differences.
1031
        **----------------------------------------------------------------
1032
        */
1033
        u_char  sv_scntl0, sv_scntl3, sv_dmode, sv_dcntl, sv_ctest3, sv_ctest4,
1034
                sv_ctest5, sv_gpcntl, sv_stest2, sv_stest4;
1035
 
1036
        /*----------------------------------------------------------------
1037
        **      Actual initial value of IO register bits used by the
1038
        **      driver. They are loaded at initialisation according to
1039
        **      features that are to be enabled.
1040
        **----------------------------------------------------------------
1041
        */
1042
        u_char  rv_scntl0, rv_scntl3, rv_dmode, rv_dcntl, rv_ctest3, rv_ctest4,
1043
                rv_ctest5, rv_stest2;
1044
 
1045
        /*----------------------------------------------------------------
1046
        **      Targets management.
1047
        **      During reselection the ncr jumps to jump_tcb.
1048
        **      The SFBR register is loaded with the encoded target id.
1049
        **      For i = 0 to 3
1050
        **              SCR_JUMP ^ IFTRUE(MASK(i, 3)), @(next tcb mod. i)
1051
        **
1052
        **      Recent chips will prefetch the 4 JUMPS using only 1 burst.
1053
        **      It is kind of hashcoding.
1054
        **----------------------------------------------------------------
1055
        */
1056
        struct link     jump_tcb[4];    /* JUMPs for reselection        */
1057
        struct tcb  target[MAX_TARGET]; /* Target data                  */
1058
 
1059
        /*----------------------------------------------------------------
1060
        **      Virtual and physical bus addresses of the chip.
1061
        **----------------------------------------------------------------
1062
        */
1063
        vm_offset_t     vaddr;          /* Virtual and bus address of   */
1064
        vm_offset_t     paddr;          /*  chip's IO registers.        */
1065
        vm_offset_t     paddr2;         /* On-chip RAM bus address.     */
1066
        volatile                        /* Pointer to volatile for      */
1067
        struct ncr_reg  *reg;           /*  memory mapped IO.           */
1068
 
1069
        /*----------------------------------------------------------------
1070
        **      SCRIPTS virtual and physical bus addresses.
1071
        **      'script'  is loaded in the on-chip RAM if present.
1072
        **      'scripth' stays in main memory.
1073
        **----------------------------------------------------------------
1074
        */
1075
        struct script   *script0;       /* Copies of script and scripth */
1076
        struct scripth  *scripth0;      /*  relocated for this ncb.     */
1077
        struct scripth  *scripth;       /* Actual scripth virt. address */
1078
        u_long          p_script;       /* Actual script and scripth    */
1079
        u_long          p_scripth;      /*  bus addresses.              */
1080
 
1081
        /*----------------------------------------------------------------
1082
        **      General controller parameters and configuration.
1083
        **----------------------------------------------------------------
1084
        */
1085
        pcidev_t        pdev;
1086
        u_short         device_id;      /* PCI device id                */
1087
        u_char          revision_id;    /* PCI device revision id       */
1088
        u_char          bus;            /* PCI BUS number               */
1089
        u_char          device_fn;      /* PCI BUS device and function  */
1090
        u_long          base_io;        /* IO space base address        */
1091
        u_int           irq;            /* IRQ level                    */
1092
        u_int           features;       /* Chip features map            */
1093
        u_char          myaddr;         /* SCSI id of the adapter       */
1094
        u_char          maxburst;       /* log base 2 of dwords burst   */
1095
        u_char          maxwide;        /* Maximum transfer width       */
1096
        u_char          minsync;        /* Minimum sync period factor   */
1097
        u_char          maxsync;        /* Maximum sync period factor   */
1098
        u_char          maxoffs;        /* Max scsi offset              */
1099
        u_char          multiplier;     /* Clock multiplier (1,2,4)     */
1100
        u_char          clock_divn;     /* Number of clock divisors     */
1101
        u_long          clock_khz;      /* SCSI clock frequency in KHz  */
1102
 
1103
        /*----------------------------------------------------------------
1104
        **      Start queue management.
1105
        **      It is filled up by the host processor and accessed by the
1106
        **      SCRIPTS processor in order to start SCSI commands.
1107
        **----------------------------------------------------------------
1108
        */
1109
        u_short         squeueput;      /* Next free slot of the queue  */
1110
        u_short         actccbs;        /* Number of allocated CCBs     */
1111
        u_short         queuedccbs;     /* Number of CCBs in start queue*/
1112
        u_short         queuedepth;     /* Start queue depth            */
1113
 
1114
        /*----------------------------------------------------------------
1115
        **      Timeout handler.
1116
        **----------------------------------------------------------------
1117
        */
1118
        struct timer_list timer;        /* Timer handler link header    */
1119
        u_long          lasttime;
1120
        u_long          settle_time;    /* Resetting the SCSI BUS       */
1121
 
1122
        /*----------------------------------------------------------------
1123
        **      Debugging and profiling.
1124
        **----------------------------------------------------------------
1125
        */
1126
        struct ncr_reg  regdump;        /* Register dump                */
1127
        u_long          regtime;        /* Time it has been done        */
1128
 
1129
        /*----------------------------------------------------------------
1130
        **      Miscellaneous buffers accessed by the scripts-processor.
1131
        **      They shall be DWORD aligned, because they may be read or
1132
        **      written with a SCR_COPY script command.
1133
        **----------------------------------------------------------------
1134
        */
1135
        u_char          msgout[8];      /* Buffer for MESSAGE OUT       */
1136
        u_char          msgin [8];      /* Buffer for MESSAGE IN        */
1137
        u_int32         lastmsg;        /* Last SCSI message sent       */
1138
        u_char          scratch;        /* Scratch for SCSI receive     */
1139
 
1140
        /*----------------------------------------------------------------
1141
        **      Miscellaneous configuration and status parameters.
1142
        **----------------------------------------------------------------
1143
        */
1144
        u_char          disc;           /* Diconnection allowed         */
1145
        u_char          scsi_mode;      /* Current SCSI BUS mode        */
1146
        u_char          order;          /* Tag order to use             */
1147
        u_char          verbose;        /* Verbosity for this controller*/
1148
        int             ncr_cache;      /* Used for cache test at init. */
1149
        u_long          p_ncb;          /* BUS address of this NCB      */
1150
 
1151
        /*----------------------------------------------------------------
1152
        **      Command completion handling.
1153
        **----------------------------------------------------------------
1154
        */
1155
#ifdef SCSI_NCR_CCB_DONE_SUPPORT
1156
        struct ccb      *(ccb_done[MAX_DONE]);
1157
        int             ccb_done_ic;
1158
#endif
1159
        /*----------------------------------------------------------------
1160
        **      Fields that should be removed or changed.
1161
        **----------------------------------------------------------------
1162
        */
1163
        struct ccb      *ccb;           /* Global CCB                   */
1164
        struct usrcmd   user;           /* Command from user            */
1165
        u_char          release_stage;  /* Synchronisation stage on release  */
1166
 
1167
#ifdef SCSI_NCR_INTEGRITY_CHECKING
1168
        /*----------------------------------------------------------------
1169
        **      Fields that are used for integrity check
1170
        **----------------------------------------------------------------
1171
        */
1172
        unsigned char check_integrity; /* Enable midlayer integ.check on
1173
                                        * bus scan. */
1174
        unsigned char check_integ_par;  /* Set if par or Init. Det. error
1175
                                         * used only during integ check */
1176
#endif
1177
};
1178
 
1179
#define NCB_SCRIPT_PHYS(np,lbl)  (np->p_script  + offsetof (struct script, lbl))
1180
#define NCB_SCRIPTH_PHYS(np,lbl) (np->p_scripth + offsetof (struct scripth,lbl))
1181
 
1182
/*==========================================================
1183
**
1184
**
1185
**      Script for NCR-Processor.
1186
**
1187
**      Use ncr_script_fill() to create the variable parts.
1188
**      Use ncr_script_copy_and_bind() to make a copy and
1189
**      bind to physical addresses.
1190
**
1191
**
1192
**==========================================================
1193
**
1194
**      We have to know the offsets of all labels before
1195
**      we reach them (for forward jumps).
1196
**      Therefore we declare a struct here.
1197
**      If you make changes inside the script,
1198
**      DONT FORGET TO CHANGE THE LENGTHS HERE!
1199
**
1200
**----------------------------------------------------------
1201
*/
1202
 
1203
/*
1204
**      Script fragments which are loaded into the on-chip RAM
1205
**      of 825A, 875 and 895 chips.
1206
*/
1207
struct script {
1208
        ncrcmd  start           [  5];
1209
        ncrcmd  startpos        [  1];
1210
        ncrcmd  select          [  6];
1211
        ncrcmd  select2         [  9];
1212
        ncrcmd  loadpos         [  4];
1213
        ncrcmd  send_ident      [  9];
1214
        ncrcmd  prepare         [  6];
1215
        ncrcmd  prepare2        [  7];
1216
        ncrcmd  command         [  6];
1217
        ncrcmd  dispatch        [ 32];
1218
        ncrcmd  clrack          [  4];
1219
        ncrcmd  no_data         [ 17];
1220
        ncrcmd  status          [  8];
1221
        ncrcmd  msg_in          [  2];
1222
        ncrcmd  msg_in2         [ 16];
1223
        ncrcmd  msg_bad         [  4];
1224
        ncrcmd  setmsg          [  7];
1225
        ncrcmd  cleanup         [  6];
1226
        ncrcmd  complete        [  9];
1227
        ncrcmd  cleanup_ok      [  8];
1228
        ncrcmd  cleanup0        [  1];
1229
#ifndef SCSI_NCR_CCB_DONE_SUPPORT
1230
        ncrcmd  signal          [ 12];
1231
#else
1232
        ncrcmd  signal          [  9];
1233
        ncrcmd  done_pos        [  1];
1234
        ncrcmd  done_plug       [  2];
1235
        ncrcmd  done_end        [  7];
1236
#endif
1237
        ncrcmd  save_dp         [  7];
1238
        ncrcmd  restore_dp      [  5];
1239
        ncrcmd  disconnect      [ 17];
1240
        ncrcmd  msg_out         [  9];
1241
        ncrcmd  msg_out_done    [  7];
1242
        ncrcmd  idle            [  2];
1243
        ncrcmd  reselect        [  8];
1244
        ncrcmd  reselected      [  8];
1245
        ncrcmd  resel_dsa       [  6];
1246
        ncrcmd  loadpos1        [  4];
1247
        ncrcmd  resel_lun       [  6];
1248
        ncrcmd  resel_tag       [  6];
1249
        ncrcmd  jump_to_nexus   [  4];
1250
        ncrcmd  nexus_indirect  [  4];
1251
        ncrcmd  resel_notag     [  4];
1252
        ncrcmd  data_in         [MAX_SCATTERL * 4];
1253
        ncrcmd  data_in2        [  4];
1254
        ncrcmd  data_out        [MAX_SCATTERL * 4];
1255
        ncrcmd  data_out2       [  4];
1256
};
1257
 
1258
/*
1259
**      Script fragments which stay in main memory for all chips.
1260
*/
1261
struct scripth {
1262
        ncrcmd  tryloop         [MAX_START*2];
1263
        ncrcmd  tryloop2        [  2];
1264
#ifdef SCSI_NCR_CCB_DONE_SUPPORT
1265
        ncrcmd  done_queue      [MAX_DONE*5];
1266
        ncrcmd  done_queue2     [  2];
1267
#endif
1268
        ncrcmd  select_no_atn   [  8];
1269
        ncrcmd  cancel          [  4];
1270
        ncrcmd  skip            [  9];
1271
        ncrcmd  skip2           [ 19];
1272
        ncrcmd  par_err_data_in [  6];
1273
        ncrcmd  par_err_other   [  4];
1274
        ncrcmd  msg_reject      [  8];
1275
        ncrcmd  msg_ign_residue [ 24];
1276
        ncrcmd  msg_extended    [ 10];
1277
        ncrcmd  msg_ext_2       [ 10];
1278
        ncrcmd  msg_wdtr        [ 14];
1279
        ncrcmd  send_wdtr       [  7];
1280
        ncrcmd  msg_ext_3       [ 10];
1281
        ncrcmd  msg_sdtr        [ 14];
1282
        ncrcmd  send_sdtr       [  7];
1283
        ncrcmd  nego_bad_phase  [  4];
1284
        ncrcmd  msg_out_abort   [ 10];
1285
        ncrcmd  hdata_in        [MAX_SCATTERH * 4];
1286
        ncrcmd  hdata_in2       [  2];
1287
        ncrcmd  hdata_out       [MAX_SCATTERH * 4];
1288
        ncrcmd  hdata_out2      [  2];
1289
        ncrcmd  reset           [  4];
1290
        ncrcmd  aborttag        [  4];
1291
        ncrcmd  abort           [  2];
1292
        ncrcmd  abort_resel     [ 20];
1293
        ncrcmd  resend_ident    [  4];
1294
        ncrcmd  clratn_go_on    [  3];
1295
        ncrcmd  nxtdsp_go_on    [  1];
1296
        ncrcmd  sdata_in        [  8];
1297
        ncrcmd  data_io         [ 18];
1298
        ncrcmd  bad_identify    [ 12];
1299
        ncrcmd  bad_i_t_l       [  4];
1300
        ncrcmd  bad_i_t_l_q     [  4];
1301
        ncrcmd  bad_target      [  8];
1302
        ncrcmd  bad_status      [  8];
1303
        ncrcmd  start_ram       [  4];
1304
        ncrcmd  start_ram0      [  4];
1305
        ncrcmd  sto_restart     [  5];
1306
        ncrcmd  snooptest       [  9];
1307
        ncrcmd  snoopend        [  2];
1308
};
1309
 
1310
/*==========================================================
1311
**
1312
**
1313
**      Function headers.
1314
**
1315
**
1316
**==========================================================
1317
*/
1318
 
1319
static  void    ncr_alloc_ccb   (ncb_p np, u_char tn, u_char ln);
1320
static  void    ncr_complete    (ncb_p np, ccb_p cp);
1321
static  void    ncr_exception   (ncb_p np);
1322
static  void    ncr_free_ccb    (ncb_p np, ccb_p cp);
1323
static  void    ncr_init_ccb    (ncb_p np, ccb_p cp);
1324
static  void    ncr_init_tcb    (ncb_p np, u_char tn);
1325
static  lcb_p   ncr_alloc_lcb   (ncb_p np, u_char tn, u_char ln);
1326
static  lcb_p   ncr_setup_lcb   (ncb_p np, u_char tn, u_char ln,
1327
                                 u_char *inq_data);
1328
static  void    ncr_getclock    (ncb_p np, int mult);
1329
static  void    ncr_selectclock (ncb_p np, u_char scntl3);
1330
static  ccb_p   ncr_get_ccb     (ncb_p np, u_char tn, u_char ln);
1331
static  void    ncr_init        (ncb_p np, int reset, char * msg, u_long code);
1332
static  int     ncr_int_sbmc    (ncb_p np);
1333
static  int     ncr_int_par     (ncb_p np);
1334
static  void    ncr_int_ma      (ncb_p np);
1335
static  void    ncr_int_sir     (ncb_p np);
1336
static  void    ncr_int_sto     (ncb_p np);
1337
static  u_long  ncr_lookup      (char* id);
1338
static  void    ncr_negotiate   (struct ncb* np, struct tcb* tp);
1339
static  int     ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr);
1340
#ifdef SCSI_NCR_INTEGRITY_CHECKING
1341
static  int     ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr);
1342
#endif
1343
 
1344
static  void    ncr_script_copy_and_bind
1345
                                (ncb_p np, ncrcmd *src, ncrcmd *dst, int len);
1346
static  void    ncr_script_fill (struct script * scr, struct scripth * scripth);
1347
static  int     ncr_scatter     (ncb_p np, ccb_p cp, Scsi_Cmnd *cmd);
1348
static  void    ncr_getsync     (ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p);
1349
static  void    ncr_setsync     (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer);
1350
static  void    ncr_setup_tags  (ncb_p np, u_char tn, u_char ln);
1351
static  void    ncr_setwide     (ncb_p np, ccb_p cp, u_char wide, u_char ack);
1352
static  int     ncr_show_msg    (u_char * msg);
1353
static  void    ncr_print_msg   (ccb_p cp, char *label, u_char *msg);
1354
static  int     ncr_snooptest   (ncb_p np);
1355
static  void    ncr_timeout     (ncb_p np);
1356
static  void    ncr_wakeup      (ncb_p np, u_long code);
1357
static  void    ncr_wakeup_done (ncb_p np);
1358
static  void    ncr_start_next_ccb (ncb_p np, lcb_p lp, int maxn);
1359
static  void    ncr_put_start_queue(ncb_p np, ccb_p cp);
1360
static  void    ncr_start_reset (ncb_p np);
1361
static  int     ncr_reset_scsi_bus (ncb_p np, int enab_int, int settle_delay);
1362
 
1363
#ifdef SCSI_NCR_USER_COMMAND_SUPPORT
1364
static  void    ncr_usercmd     (ncb_p np);
1365
#endif
1366
 
1367
static int ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device);
1368
 
1369
static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd);
1370
static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd);
1371
static void process_waiting_list(ncb_p np, int sts);
1372
 
1373
#define remove_from_waiting_list(np, cmd) \
1374
                retrieve_from_waiting_list(1, (np), (cmd))
1375
#define requeue_waiting_list(np) process_waiting_list((np), DID_OK)
1376
#define reset_waiting_list(np) process_waiting_list((np), DID_RESET)
1377
 
1378
static inline char *ncr_name (ncb_p np)
1379
{
1380
        return np->inst_name;
1381
}
1382
 
1383
 
1384
/*==========================================================
1385
**
1386
**
1387
**      Scripts for NCR-Processor.
1388
**
1389
**      Use ncr_script_bind for binding to physical addresses.
1390
**
1391
**
1392
**==========================================================
1393
**
1394
**      NADDR generates a reference to a field of the controller data.
1395
**      PADDR generates a reference to another part of the script.
1396
**      RADDR generates a reference to a script processor register.
1397
**      FADDR generates a reference to a script processor register
1398
**              with offset.
1399
**
1400
**----------------------------------------------------------
1401
*/
1402
 
1403
#define RELOC_SOFTC     0x40000000
1404
#define RELOC_LABEL     0x50000000
1405
#define RELOC_REGISTER  0x60000000
1406
#if 0
1407
#define RELOC_KVAR      0x70000000
1408
#endif
1409
#define RELOC_LABELH    0x80000000
1410
#define RELOC_MASK      0xf0000000
1411
 
1412
#define NADDR(label)    (RELOC_SOFTC | offsetof(struct ncb, label))
1413
#define PADDR(label)    (RELOC_LABEL | offsetof(struct script, label))
1414
#define PADDRH(label)   (RELOC_LABELH | offsetof(struct scripth, label))
1415
#define RADDR(label)    (RELOC_REGISTER | REG(label))
1416
#define FADDR(label,ofs)(RELOC_REGISTER | ((REG(label))+(ofs)))
1417
#if 0
1418
#define KVAR(which)     (RELOC_KVAR | (which))
1419
#endif
1420
 
1421
#if 0
1422
#define SCRIPT_KVAR_JIFFIES     (0)
1423
#define SCRIPT_KVAR_FIRST               SCRIPT_KVAR_JIFFIES
1424
#define SCRIPT_KVAR_LAST                SCRIPT_KVAR_JIFFIES
1425
/*
1426
 * Kernel variables referenced in the scripts.
1427
 * THESE MUST ALL BE ALIGNED TO A 4-BYTE BOUNDARY.
1428
 */
1429
static void *script_kvars[] __initdata =
1430
        { (void *)&jiffies };
1431
#endif
1432
 
1433
static  struct script script0 __initdata = {
1434
/*--------------------------< START >-----------------------*/ {
1435
        /*
1436
        **      This NOP will be patched with LED ON
1437
        **      SCR_REG_REG (gpreg, SCR_AND, 0xfe)
1438
        */
1439
        SCR_NO_OP,
1440
                0,
1441
        /*
1442
        **      Clear SIGP.
1443
        */
1444
        SCR_FROM_REG (ctest2),
1445
                0,
1446
        /*
1447
        **      Then jump to a certain point in tryloop.
1448
        **      Due to the lack of indirect addressing the code
1449
        **      is self modifying here.
1450
        */
1451
        SCR_JUMP,
1452
}/*-------------------------< STARTPOS >--------------------*/,{
1453
                PADDRH(tryloop),
1454
 
1455
}/*-------------------------< SELECT >----------------------*/,{
1456
        /*
1457
        **      DSA     contains the address of a scheduled
1458
        **              data structure.
1459
        **
1460
        **      SCRATCHA contains the address of the script,
1461
        **              which starts the next entry.
1462
        **
1463
        **      Set Initiator mode.
1464
        **
1465
        **      (Target mode is left as an exercise for the reader)
1466
        */
1467
 
1468
        SCR_CLR (SCR_TRG),
1469
                0,
1470
        SCR_LOAD_REG (HS_REG, HS_SELECTING),
1471
                0,
1472
 
1473
        /*
1474
        **      And try to select this target.
1475
        */
1476
        SCR_SEL_TBL_ATN ^ offsetof (struct dsb, select),
1477
                PADDR (reselect),
1478
 
1479
}/*-------------------------< SELECT2 >----------------------*/,{
1480
        /*
1481
        **      Now there are 4 possibilities:
1482
        **
1483
        **      (1) The ncr looses arbitration.
1484
        **      This is ok, because it will try again,
1485
        **      when the bus becomes idle.
1486
        **      (But beware of the timeout function!)
1487
        **
1488
        **      (2) The ncr is reselected.
1489
        **      Then the script processor takes the jump
1490
        **      to the RESELECT label.
1491
        **
1492
        **      (3) The ncr wins arbitration.
1493
        **      Then it will execute SCRIPTS instruction until
1494
        **      the next instruction that checks SCSI phase.
1495
        **      Then will stop and wait for selection to be
1496
        **      complete or selection time-out to occur.
1497
        **      As a result the SCRIPTS instructions until
1498
        **      LOADPOS + 2 should be executed in parallel with
1499
        **      the SCSI core performing selection.
1500
        */
1501
 
1502
        /*
1503
        **      The M_REJECT problem seems to be due to a selection
1504
        **      timing problem.
1505
        **      Wait immediately for the selection to complete.
1506
        **      (2.5x behaves so)
1507
        */
1508
        SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_OUT)),
1509
                0,
1510
 
1511
        /*
1512
        **      Next time use the next slot.
1513
        */
1514
        SCR_COPY (4),
1515
                RADDR (temp),
1516
                PADDR (startpos),
1517
        /*
1518
        **      The ncr doesn't have an indirect load
1519
        **      or store command. So we have to
1520
        **      copy part of the control block to a
1521
        **      fixed place, where we can access it.
1522
        **
1523
        **      We patch the address part of a
1524
        **      COPY command with the DSA-register.
1525
        */
1526
        SCR_COPY_F (4),
1527
                RADDR (dsa),
1528
                PADDR (loadpos),
1529
        /*
1530
        **      then we do the actual copy.
1531
        */
1532
        SCR_COPY (sizeof (struct head)),
1533
        /*
1534
        **      continued after the next label ...
1535
        */
1536
}/*-------------------------< LOADPOS >---------------------*/,{
1537
                0,
1538
                NADDR (header),
1539
        /*
1540
        **      Wait for the next phase or the selection
1541
        **      to complete or time-out.
1542
        */
1543
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
1544
                PADDR (prepare),
1545
 
1546
}/*-------------------------< SEND_IDENT >----------------------*/,{
1547
        /*
1548
        **      Selection complete.
1549
        **      Send the IDENTIFY and SIMPLE_TAG messages
1550
        **      (and the M_X_SYNC_REQ message)
1551
        */
1552
        SCR_MOVE_TBL ^ SCR_MSG_OUT,
1553
                offsetof (struct dsb, smsg),
1554
        SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
1555
                PADDRH (resend_ident),
1556
        SCR_LOAD_REG (scratcha, 0x80),
1557
                0,
1558
        SCR_COPY (1),
1559
                RADDR (scratcha),
1560
                NADDR (lastmsg),
1561
}/*-------------------------< PREPARE >----------------------*/,{
1562
        /*
1563
        **      load the savep (saved pointer) into
1564
        **      the TEMP register (actual pointer)
1565
        */
1566
        SCR_COPY (4),
1567
                NADDR (header.savep),
1568
                RADDR (temp),
1569
        /*
1570
        **      Initialize the status registers
1571
        */
1572
        SCR_COPY (4),
1573
                NADDR (header.status),
1574
                RADDR (scr0),
1575
}/*-------------------------< PREPARE2 >---------------------*/,{
1576
        /*
1577
        **      Initialize the msgout buffer with a NOOP message.
1578
        */
1579
        SCR_LOAD_REG (scratcha, M_NOOP),
1580
                0,
1581
        SCR_COPY (1),
1582
                RADDR (scratcha),
1583
                NADDR (msgout),
1584
#if 0
1585
        SCR_COPY (1),
1586
                RADDR (scratcha),
1587
                NADDR (msgin),
1588
#endif
1589
        /*
1590
        **      Anticipate the COMMAND phase.
1591
        **      This is the normal case for initial selection.
1592
        */
1593
        SCR_JUMP ^ IFFALSE (WHEN (SCR_COMMAND)),
1594
                PADDR (dispatch),
1595
 
1596
}/*-------------------------< COMMAND >--------------------*/,{
1597
        /*
1598
        **      ... and send the command
1599
        */
1600
        SCR_MOVE_TBL ^ SCR_COMMAND,
1601
                offsetof (struct dsb, cmd),
1602
        /*
1603
        **      If status is still HS_NEGOTIATE, negotiation failed.
1604
        **      We check this here, since we want to do that
1605
        **      only once.
1606
        */
1607
        SCR_FROM_REG (HS_REG),
1608
                0,
1609
        SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
1610
                SIR_NEGO_FAILED,
1611
 
1612
}/*-----------------------< DISPATCH >----------------------*/,{
1613
        /*
1614
        **      MSG_IN is the only phase that shall be
1615
        **      entered at least once for each (re)selection.
1616
        **      So we test it first.
1617
        */
1618
        SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_IN)),
1619
                PADDR (msg_in),
1620
 
1621
        SCR_RETURN ^ IFTRUE (IF (SCR_DATA_OUT)),
1622
                0,
1623
        /*
1624
        **      DEL 397 - 53C875 Rev 3 - Part Number 609-0392410 - ITEM 4.
1625
        **      Possible data corruption during Memory Write and Invalidate.
1626
        **      This work-around resets the addressing logic prior to the
1627
        **      start of the first MOVE of a DATA IN phase.
1628
        **      (See README.ncr53c8xx for more information)
1629
        */
1630
        SCR_JUMPR ^ IFFALSE (IF (SCR_DATA_IN)),
1631
                20,
1632
        SCR_COPY (4),
1633
                RADDR (scratcha),
1634
                RADDR (scratcha),
1635
        SCR_RETURN,
1636
                0,
1637
        SCR_JUMP ^ IFTRUE (IF (SCR_STATUS)),
1638
                PADDR (status),
1639
        SCR_JUMP ^ IFTRUE (IF (SCR_COMMAND)),
1640
                PADDR (command),
1641
        SCR_JUMP ^ IFTRUE (IF (SCR_MSG_OUT)),
1642
                PADDR (msg_out),
1643
        /*
1644
        **      Discard one illegal phase byte, if required.
1645
        */
1646
        SCR_LOAD_REG (scratcha, XE_BAD_PHASE),
1647
                0,
1648
        SCR_COPY (1),
1649
                RADDR (scratcha),
1650
                NADDR (xerr_st),
1651
        SCR_JUMPR ^ IFFALSE (IF (SCR_ILG_OUT)),
1652
                8,
1653
        SCR_MOVE_ABS (1) ^ SCR_ILG_OUT,
1654
                NADDR (scratch),
1655
        SCR_JUMPR ^ IFFALSE (IF (SCR_ILG_IN)),
1656
                8,
1657
        SCR_MOVE_ABS (1) ^ SCR_ILG_IN,
1658
                NADDR (scratch),
1659
        SCR_JUMP,
1660
                PADDR (dispatch),
1661
 
1662
}/*-------------------------< CLRACK >----------------------*/,{
1663
        /*
1664
        **      Terminate possible pending message phase.
1665
        */
1666
        SCR_CLR (SCR_ACK),
1667
                0,
1668
        SCR_JUMP,
1669
                PADDR (dispatch),
1670
 
1671
}/*-------------------------< NO_DATA >--------------------*/,{
1672
        /*
1673
        **      The target wants to tranfer too much data
1674
        **      or in the wrong direction.
1675
        **      Remember that in extended error.
1676
        */
1677
        SCR_LOAD_REG (scratcha, XE_EXTRA_DATA),
1678
                0,
1679
        SCR_COPY (1),
1680
                RADDR (scratcha),
1681
                NADDR (xerr_st),
1682
        /*
1683
        **      Discard one data byte, if required.
1684
        */
1685
        SCR_JUMPR ^ IFFALSE (WHEN (SCR_DATA_OUT)),
1686
                8,
1687
        SCR_MOVE_ABS (1) ^ SCR_DATA_OUT,
1688
                NADDR (scratch),
1689
        SCR_JUMPR ^ IFFALSE (IF (SCR_DATA_IN)),
1690
                8,
1691
        SCR_MOVE_ABS (1) ^ SCR_DATA_IN,
1692
                NADDR (scratch),
1693
        /*
1694
        **      .. and repeat as required.
1695
        */
1696
        SCR_CALL,
1697
                PADDR (dispatch),
1698
        SCR_JUMP,
1699
                PADDR (no_data),
1700
 
1701
}/*-------------------------< STATUS >--------------------*/,{
1702
        /*
1703
        **      get the status
1704
        */
1705
        SCR_MOVE_ABS (1) ^ SCR_STATUS,
1706
                NADDR (scratch),
1707
        /*
1708
        **      save status to scsi_status.
1709
        **      mark as complete.
1710
        */
1711
        SCR_TO_REG (SS_REG),
1712
                0,
1713
        SCR_LOAD_REG (HS_REG, HS_COMPLETE),
1714
                0,
1715
        SCR_JUMP,
1716
                PADDR (dispatch),
1717
}/*-------------------------< MSG_IN >--------------------*/,{
1718
        /*
1719
        **      Get the first byte of the message
1720
        **      and save it to SCRATCHA.
1721
        **
1722
        **      The script processor doesn't negate the
1723
        **      ACK signal after this transfer.
1724
        */
1725
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
1726
                NADDR (msgin[0]),
1727
}/*-------------------------< MSG_IN2 >--------------------*/,{
1728
        /*
1729
        **      Handle this message.
1730
        */
1731
        SCR_JUMP ^ IFTRUE (DATA (M_COMPLETE)),
1732
                PADDR (complete),
1733
        SCR_JUMP ^ IFTRUE (DATA (M_DISCONNECT)),
1734
                PADDR (disconnect),
1735
        SCR_JUMP ^ IFTRUE (DATA (M_SAVE_DP)),
1736
                PADDR (save_dp),
1737
        SCR_JUMP ^ IFTRUE (DATA (M_RESTORE_DP)),
1738
                PADDR (restore_dp),
1739
        SCR_JUMP ^ IFTRUE (DATA (M_EXTENDED)),
1740
                PADDRH (msg_extended),
1741
        SCR_JUMP ^ IFTRUE (DATA (M_NOOP)),
1742
                PADDR (clrack),
1743
        SCR_JUMP ^ IFTRUE (DATA (M_REJECT)),
1744
                PADDRH (msg_reject),
1745
        SCR_JUMP ^ IFTRUE (DATA (M_IGN_RESIDUE)),
1746
                PADDRH (msg_ign_residue),
1747
        /*
1748
        **      Rest of the messages left as
1749
        **      an exercise ...
1750
        **
1751
        **      Unimplemented messages:
1752
        **      fall through to MSG_BAD.
1753
        */
1754
}/*-------------------------< MSG_BAD >------------------*/,{
1755
        /*
1756
        **      unimplemented message - reject it.
1757
        */
1758
        SCR_INT,
1759
                SIR_REJECT_SENT,
1760
        SCR_LOAD_REG (scratcha, M_REJECT),
1761
                0,
1762
}/*-------------------------< SETMSG >----------------------*/,{
1763
        SCR_COPY (1),
1764
                RADDR (scratcha),
1765
                NADDR (msgout),
1766
        SCR_SET (SCR_ATN),
1767
                0,
1768
        SCR_JUMP,
1769
                PADDR (clrack),
1770
}/*-------------------------< CLEANUP >-------------------*/,{
1771
        /*
1772
        **      dsa:    Pointer to ccb
1773
        **            or xxxxxxFF (no ccb)
1774
        **
1775
        **      HS_REG:   Host-Status (<>0!)
1776
        */
1777
        SCR_FROM_REG (dsa),
1778
                0,
1779
        SCR_JUMP ^ IFTRUE (DATA (0xff)),
1780
                PADDR (start),
1781
        /*
1782
        **      dsa is valid.
1783
        **      complete the cleanup.
1784
        */
1785
        SCR_JUMP,
1786
                PADDR (cleanup_ok),
1787
 
1788
}/*-------------------------< COMPLETE >-----------------*/,{
1789
        /*
1790
        **      Complete message.
1791
        **
1792
        **      Copy TEMP register to LASTP in header.
1793
        */
1794
        SCR_COPY (4),
1795
                RADDR (temp),
1796
                NADDR (header.lastp),
1797
        /*
1798
        **      When we terminate the cycle by clearing ACK,
1799
        **      the target may disconnect immediately.
1800
        **
1801
        **      We don't want to be told of an
1802
        **      "unexpected disconnect",
1803
        **      so we disable this feature.
1804
        */
1805
        SCR_REG_REG (scntl2, SCR_AND, 0x7f),
1806
                0,
1807
        /*
1808
        **      Terminate cycle ...
1809
        */
1810
        SCR_CLR (SCR_ACK|SCR_ATN),
1811
                0,
1812
        /*
1813
        **      ... and wait for the disconnect.
1814
        */
1815
        SCR_WAIT_DISC,
1816
                0,
1817
}/*-------------------------< CLEANUP_OK >----------------*/,{
1818
        /*
1819
        **      Save host status to header.
1820
        */
1821
        SCR_COPY (4),
1822
                RADDR (scr0),
1823
                NADDR (header.status),
1824
        /*
1825
        **      and copy back the header to the ccb.
1826
        */
1827
        SCR_COPY_F (4),
1828
                RADDR (dsa),
1829
                PADDR (cleanup0),
1830
        SCR_COPY (sizeof (struct head)),
1831
                NADDR (header),
1832
}/*-------------------------< CLEANUP0 >--------------------*/,{
1833
                0,
1834
}/*-------------------------< SIGNAL >----------------------*/,{
1835
        /*
1836
        **      if job not completed ...
1837
        */
1838
        SCR_FROM_REG (HS_REG),
1839
                0,
1840
        /*
1841
        **      ... start the next command.
1842
        */
1843
        SCR_JUMP ^ IFTRUE (MASK (0, (HS_DONEMASK|HS_SKIPMASK))),
1844
                PADDR(start),
1845
        /*
1846
        **      If command resulted in not GOOD status,
1847
        **      call the C code if needed.
1848
        */
1849
        SCR_FROM_REG (SS_REG),
1850
                0,
1851
        SCR_CALL ^ IFFALSE (DATA (S_GOOD)),
1852
                PADDRH (bad_status),
1853
 
1854
#ifndef SCSI_NCR_CCB_DONE_SUPPORT
1855
 
1856
        /*
1857
        **      ... signal completion to the host
1858
        */
1859
        SCR_INT_FLY,
1860
                0,
1861
        /*
1862
        **      Auf zu neuen Schandtaten!
1863
        */
1864
        SCR_JUMP,
1865
                PADDR(start),
1866
 
1867
#else   /* defined SCSI_NCR_CCB_DONE_SUPPORT */
1868
 
1869
        /*
1870
        **      ... signal completion to the host
1871
        */
1872
        SCR_JUMP,
1873
}/*------------------------< DONE_POS >---------------------*/,{
1874
                PADDRH (done_queue),
1875
}/*------------------------< DONE_PLUG >--------------------*/,{
1876
        SCR_INT,
1877
                SIR_DONE_OVERFLOW,
1878
}/*------------------------< DONE_END >---------------------*/,{
1879
        SCR_INT_FLY,
1880
                0,
1881
        SCR_COPY (4),
1882
                RADDR (temp),
1883
                PADDR (done_pos),
1884
        SCR_JUMP,
1885
                PADDR (start),
1886
 
1887
#endif  /* SCSI_NCR_CCB_DONE_SUPPORT */
1888
 
1889
}/*-------------------------< SAVE_DP >------------------*/,{
1890
        /*
1891
        **      SAVE_DP message:
1892
        **      Copy TEMP register to SAVEP in header.
1893
        */
1894
        SCR_COPY (4),
1895
                RADDR (temp),
1896
                NADDR (header.savep),
1897
        SCR_CLR (SCR_ACK),
1898
                0,
1899
        SCR_JUMP,
1900
                PADDR (dispatch),
1901
}/*-------------------------< RESTORE_DP >---------------*/,{
1902
        /*
1903
        **      RESTORE_DP message:
1904
        **      Copy SAVEP in header to TEMP register.
1905
        */
1906
        SCR_COPY (4),
1907
                NADDR (header.savep),
1908
                RADDR (temp),
1909
        SCR_JUMP,
1910
                PADDR (clrack),
1911
 
1912
}/*-------------------------< DISCONNECT >---------------*/,{
1913
        /*
1914
        **      DISCONNECTing  ...
1915
        **
1916
        **      disable the "unexpected disconnect" feature,
1917
        **      and remove the ACK signal.
1918
        */
1919
        SCR_REG_REG (scntl2, SCR_AND, 0x7f),
1920
                0,
1921
        SCR_CLR (SCR_ACK|SCR_ATN),
1922
                0,
1923
        /*
1924
        **      Wait for the disconnect.
1925
        */
1926
        SCR_WAIT_DISC,
1927
                0,
1928
        /*
1929
        **      Status is: DISCONNECTED.
1930
        */
1931
        SCR_LOAD_REG (HS_REG, HS_DISCONNECT),
1932
                0,
1933
        /*
1934
        **      If QUIRK_AUTOSAVE is set,
1935
        **      do an "save pointer" operation.
1936
        */
1937
        SCR_FROM_REG (QU_REG),
1938
                0,
1939
        SCR_JUMP ^ IFFALSE (MASK (QUIRK_AUTOSAVE, QUIRK_AUTOSAVE)),
1940
                PADDR (cleanup_ok),
1941
        /*
1942
        **      like SAVE_DP message:
1943
        **      Copy TEMP register to SAVEP in header.
1944
        */
1945
        SCR_COPY (4),
1946
                RADDR (temp),
1947
                NADDR (header.savep),
1948
        SCR_JUMP,
1949
                PADDR (cleanup_ok),
1950
 
1951
}/*-------------------------< MSG_OUT >-------------------*/,{
1952
        /*
1953
        **      The target requests a message.
1954
        */
1955
        SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
1956
                NADDR (msgout),
1957
        SCR_COPY (1),
1958
                NADDR (msgout),
1959
                NADDR (lastmsg),
1960
        /*
1961
        **      If it was no ABORT message ...
1962
        */
1963
        SCR_JUMP ^ IFTRUE (DATA (M_ABORT)),
1964
                PADDRH (msg_out_abort),
1965
        /*
1966
        **      ... wait for the next phase
1967
        **      if it's a message out, send it again, ...
1968
        */
1969
        SCR_JUMP ^ IFTRUE (WHEN (SCR_MSG_OUT)),
1970
                PADDR (msg_out),
1971
}/*-------------------------< MSG_OUT_DONE >--------------*/,{
1972
        /*
1973
        **      ... else clear the message ...
1974
        */
1975
        SCR_LOAD_REG (scratcha, M_NOOP),
1976
                0,
1977
        SCR_COPY (4),
1978
                RADDR (scratcha),
1979
                NADDR (msgout),
1980
        /*
1981
        **      ... and process the next phase
1982
        */
1983
        SCR_JUMP,
1984
                PADDR (dispatch),
1985
}/*-------------------------< IDLE >------------------------*/,{
1986
        /*
1987
        **      Nothing to do?
1988
        **      Wait for reselect.
1989
        **      This NOP will be patched with LED OFF
1990
        **      SCR_REG_REG (gpreg, SCR_OR, 0x01)
1991
        */
1992
        SCR_NO_OP,
1993
                0,
1994
}/*-------------------------< RESELECT >--------------------*/,{
1995
        /*
1996
        **      make the DSA invalid.
1997
        */
1998
        SCR_LOAD_REG (dsa, 0xff),
1999
                0,
2000
        SCR_CLR (SCR_TRG),
2001
                0,
2002
        SCR_LOAD_REG (HS_REG, HS_IN_RESELECT),
2003
                0,
2004
        /*
2005
        **      Sleep waiting for a reselection.
2006
        **      If SIGP is set, special treatment.
2007
        **
2008
        **      Zu allem bereit ..
2009
        */
2010
        SCR_WAIT_RESEL,
2011
                PADDR(start),
2012
}/*-------------------------< RESELECTED >------------------*/,{
2013
        /*
2014
        **      This NOP will be patched with LED ON
2015
        **      SCR_REG_REG (gpreg, SCR_AND, 0xfe)
2016
        */
2017
        SCR_NO_OP,
2018
                0,
2019
        /*
2020
        **      ... zu nichts zu gebrauchen ?
2021
        **
2022
        **      load the target id into the SFBR
2023
        **      and jump to the control block.
2024
        **
2025
        **      Look at the declarations of
2026
        **      - struct ncb
2027
        **      - struct tcb
2028
        **      - struct lcb
2029
        **      - struct ccb
2030
        **      to understand what's going on.
2031
        */
2032
        SCR_REG_SFBR (ssid, SCR_AND, 0x8F),
2033
                0,
2034
        SCR_TO_REG (sdid),
2035
                0,
2036
        SCR_JUMP,
2037
                NADDR (jump_tcb),
2038
 
2039
}/*-------------------------< RESEL_DSA >-------------------*/,{
2040
        /*
2041
        **      Ack the IDENTIFY or TAG previously received.
2042
        */
2043
        SCR_CLR (SCR_ACK),
2044
                0,
2045
        /*
2046
        **      The ncr doesn't have an indirect load
2047
        **      or store command. So we have to
2048
        **      copy part of the control block to a
2049
        **      fixed place, where we can access it.
2050
        **
2051
        **      We patch the address part of a
2052
        **      COPY command with the DSA-register.
2053
        */
2054
        SCR_COPY_F (4),
2055
                RADDR (dsa),
2056
                PADDR (loadpos1),
2057
        /*
2058
        **      then we do the actual copy.
2059
        */
2060
        SCR_COPY (sizeof (struct head)),
2061
        /*
2062
        **      continued after the next label ...
2063
        */
2064
 
2065
}/*-------------------------< LOADPOS1 >-------------------*/,{
2066
                0,
2067
                NADDR (header),
2068
        /*
2069
        **      The DSA contains the data structure address.
2070
        */
2071
        SCR_JUMP,
2072
                PADDR (prepare),
2073
 
2074
}/*-------------------------< RESEL_LUN >-------------------*/,{
2075
        /*
2076
        **      come back to this point
2077
        **      to get an IDENTIFY message
2078
        **      Wait for a msg_in phase.
2079
        */
2080
        SCR_INT ^ IFFALSE (WHEN (SCR_MSG_IN)),
2081
                SIR_RESEL_NO_MSG_IN,
2082
        /*
2083
        **      message phase.
2084
        **      Read the data directly from the BUS DATA lines.
2085
        **      This helps to support very old SCSI devices that
2086
        **      may reselect without sending an IDENTIFY.
2087
        */
2088
        SCR_FROM_REG (sbdl),
2089
                0,
2090
        /*
2091
        **      It should be an Identify message.
2092
        */
2093
        SCR_RETURN,
2094
                0,
2095
}/*-------------------------< RESEL_TAG >-------------------*/,{
2096
        /*
2097
        **      Read IDENTIFY + SIMPLE + TAG using a single MOVE.
2098
        **      Agressive optimization, is'nt it?
2099
        **      No need to test the SIMPLE TAG message, since the
2100
        **      driver only supports conformant devices for tags. ;-)
2101
        */
2102
        SCR_MOVE_ABS (3) ^ SCR_MSG_IN,
2103
                NADDR (msgin),
2104
        /*
2105
        **      Read the TAG from the SIDL.
2106
        **      Still an aggressive optimization. ;-)
2107
        **      Compute the CCB indirect jump address which
2108
        **      is (#TAG*2 & 0xfc) due to tag numbering using
2109
        **      1,3,5..MAXTAGS*2+1 actual values.
2110
        */
2111
        SCR_REG_SFBR (sidl, SCR_SHL, 0),
2112
                0,
2113
        SCR_SFBR_REG (temp, SCR_AND, 0xfc),
2114
                0,
2115
}/*-------------------------< JUMP_TO_NEXUS >-------------------*/,{
2116
        SCR_COPY_F (4),
2117
                RADDR (temp),
2118
                PADDR (nexus_indirect),
2119
        SCR_COPY (4),
2120
}/*-------------------------< NEXUS_INDIRECT >-------------------*/,{
2121
                0,
2122
                RADDR (temp),
2123
        SCR_RETURN,
2124
                0,
2125
}/*-------------------------< RESEL_NOTAG >-------------------*/,{
2126
        /*
2127
        **      No tag expected.
2128
        **      Read an throw away the IDENTIFY.
2129
        */
2130
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2131
                NADDR (msgin),
2132
        SCR_JUMP,
2133
                PADDR (jump_to_nexus),
2134
}/*-------------------------< DATA_IN >--------------------*/,{
2135
/*
2136
**      Because the size depends on the
2137
**      #define MAX_SCATTERL parameter,
2138
**      it is filled in at runtime.
2139
**
2140
**  ##===========< i=0; i<MAX_SCATTERL >=========
2141
**  ||  SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
2142
**  ||          PADDR (dispatch),
2143
**  ||  SCR_MOVE_TBL ^ SCR_DATA_IN,
2144
**  ||          offsetof (struct dsb, data[ i]),
2145
**  ##==========================================
2146
**
2147
**---------------------------------------------------------
2148
*/
2149
 
2150
}/*-------------------------< DATA_IN2 >-------------------*/,{
2151
        SCR_CALL,
2152
                PADDR (dispatch),
2153
        SCR_JUMP,
2154
                PADDR (no_data),
2155
}/*-------------------------< DATA_OUT >--------------------*/,{
2156
/*
2157
**      Because the size depends on the
2158
**      #define MAX_SCATTERL parameter,
2159
**      it is filled in at runtime.
2160
**
2161
**  ##===========< i=0; i<MAX_SCATTERL >=========
2162
**  ||  SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT)),
2163
**  ||          PADDR (dispatch),
2164
**  ||  SCR_MOVE_TBL ^ SCR_DATA_OUT,
2165
**  ||          offsetof (struct dsb, data[ i]),
2166
**  ##==========================================
2167
**
2168
**---------------------------------------------------------
2169
*/
2170
 
2171
}/*-------------------------< DATA_OUT2 >-------------------*/,{
2172
        SCR_CALL,
2173
                PADDR (dispatch),
2174
        SCR_JUMP,
2175
                PADDR (no_data),
2176
}/*--------------------------------------------------------*/
2177
};
2178
 
2179
static  struct scripth scripth0 __initdata = {
2180
/*-------------------------< TRYLOOP >---------------------*/{
2181
/*
2182
**      Start the next entry.
2183
**      Called addresses point to the launch script in the CCB.
2184
**      They are patched by the main processor.
2185
**
2186
**      Because the size depends on the
2187
**      #define MAX_START parameter, it is filled
2188
**      in at runtime.
2189
**
2190
**-----------------------------------------------------------
2191
**
2192
**  ##===========< I=0; i<MAX_START >===========
2193
**  ||  SCR_CALL,
2194
**  ||          PADDR (idle),
2195
**  ##==========================================
2196
**
2197
**-----------------------------------------------------------
2198
*/
2199
 
2200
}/*------------------------< TRYLOOP2 >---------------------*/,{
2201
        SCR_JUMP,
2202
                PADDRH(tryloop),
2203
 
2204
#ifdef SCSI_NCR_CCB_DONE_SUPPORT
2205
 
2206
}/*------------------------< DONE_QUEUE >-------------------*/,{
2207
/*
2208
**      Copy the CCB address to the next done entry.
2209
**      Because the size depends on the
2210
**      #define MAX_DONE parameter, it is filled
2211
**      in at runtime.
2212
**
2213
**-----------------------------------------------------------
2214
**
2215
**  ##===========< I=0; i<MAX_DONE >===========
2216
**  ||  SCR_COPY (sizeof(ccb_p)),
2217
**  ||          NADDR (header.cp),
2218
**  ||          NADDR (ccb_done[i]),
2219
**  ||  SCR_CALL,
2220
**  ||          PADDR (done_end),
2221
**  ##==========================================
2222
**
2223
**-----------------------------------------------------------
2224
*/
2225
 
2226
}/*------------------------< DONE_QUEUE2 >------------------*/,{
2227
        SCR_JUMP,
2228
                PADDRH (done_queue),
2229
 
2230
#endif /* SCSI_NCR_CCB_DONE_SUPPORT */
2231
}/*------------------------< SELECT_NO_ATN >-----------------*/,{
2232
        /*
2233
        **      Set Initiator mode.
2234
        **      And try to select this target without ATN.
2235
        */
2236
 
2237
        SCR_CLR (SCR_TRG),
2238
                0,
2239
        SCR_LOAD_REG (HS_REG, HS_SELECTING),
2240
                0,
2241
        SCR_SEL_TBL ^ offsetof (struct dsb, select),
2242
                PADDR (reselect),
2243
        SCR_JUMP,
2244
                PADDR (select2),
2245
 
2246
}/*-------------------------< CANCEL >------------------------*/,{
2247
 
2248
        SCR_LOAD_REG (scratcha, HS_ABORTED),
2249
                0,
2250
        SCR_JUMPR,
2251
                8,
2252
}/*-------------------------< SKIP >------------------------*/,{
2253
        SCR_LOAD_REG (scratcha, 0),
2254
                0,
2255
        /*
2256
        **      This entry has been canceled.
2257
        **      Next time use the next slot.
2258
        */
2259
        SCR_COPY (4),
2260
                RADDR (temp),
2261
                PADDR (startpos),
2262
        /*
2263
        **      The ncr doesn't have an indirect load
2264
        **      or store command. So we have to
2265
        **      copy part of the control block to a
2266
        **      fixed place, where we can access it.
2267
        **
2268
        **      We patch the address part of a
2269
        **      COPY command with the DSA-register.
2270
        */
2271
        SCR_COPY_F (4),
2272
                RADDR (dsa),
2273
                PADDRH (skip2),
2274
        /*
2275
        **      then we do the actual copy.
2276
        */
2277
        SCR_COPY (sizeof (struct head)),
2278
        /*
2279
        **      continued after the next label ...
2280
        */
2281
}/*-------------------------< SKIP2 >---------------------*/,{
2282
                0,
2283
                NADDR (header),
2284
        /*
2285
        **      Initialize the status registers
2286
        */
2287
        SCR_COPY (4),
2288
                NADDR (header.status),
2289
                RADDR (scr0),
2290
        /*
2291
        **      Force host status.
2292
        */
2293
        SCR_FROM_REG (scratcha),
2294
                0,
2295
        SCR_JUMPR ^ IFFALSE (MASK (0, HS_DONEMASK)),
2296
                16,
2297
        SCR_REG_REG (HS_REG, SCR_OR, HS_SKIPMASK),
2298
                0,
2299
        SCR_JUMPR,
2300
                8,
2301
        SCR_TO_REG (HS_REG),
2302
                0,
2303
        SCR_LOAD_REG (SS_REG, S_GOOD),
2304
                0,
2305
        SCR_JUMP,
2306
                PADDR (cleanup_ok),
2307
 
2308
},/*-------------------------< PAR_ERR_DATA_IN >---------------*/{
2309
        /*
2310
        **      Ignore all data in byte, until next phase
2311
        */
2312
        SCR_JUMP ^ IFFALSE (WHEN (SCR_DATA_IN)),
2313
                PADDRH (par_err_other),
2314
        SCR_MOVE_ABS (1) ^ SCR_DATA_IN,
2315
                NADDR (scratch),
2316
        SCR_JUMPR,
2317
                -24,
2318
},/*-------------------------< PAR_ERR_OTHER >------------------*/{
2319
        /*
2320
        **      count it.
2321
        */
2322
        SCR_REG_REG (PS_REG, SCR_ADD, 0x01),
2323
                0,
2324
        /*
2325
        **      jump to dispatcher.
2326
        */
2327
        SCR_JUMP,
2328
                PADDR (dispatch),
2329
}/*-------------------------< MSG_REJECT >---------------*/,{
2330
        /*
2331
        **      If a negotiation was in progress,
2332
        **      negotiation failed.
2333
        **      Otherwise, let the C code print
2334
        **      some message.
2335
        */
2336
        SCR_FROM_REG (HS_REG),
2337
                0,
2338
        SCR_INT ^ IFFALSE (DATA (HS_NEGOTIATE)),
2339
                SIR_REJECT_RECEIVED,
2340
        SCR_INT ^ IFTRUE (DATA (HS_NEGOTIATE)),
2341
                SIR_NEGO_FAILED,
2342
        SCR_JUMP,
2343
                PADDR (clrack),
2344
 
2345
}/*-------------------------< MSG_IGN_RESIDUE >----------*/,{
2346
        /*
2347
        **      Terminate cycle
2348
        */
2349
        SCR_CLR (SCR_ACK),
2350
                0,
2351
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2352
                PADDR (dispatch),
2353
        /*
2354
        **      get residue size.
2355
        */
2356
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2357
                NADDR (msgin[1]),
2358
        /*
2359
        **      Size is 0 .. ignore message.
2360
        */
2361
        SCR_JUMP ^ IFTRUE (DATA (0)),
2362
                PADDR (clrack),
2363
        /*
2364
        **      Size is not 1 .. have to interrupt.
2365
        */
2366
        SCR_JUMPR ^ IFFALSE (DATA (1)),
2367
                40,
2368
        /*
2369
        **      Check for residue byte in swide register
2370
        */
2371
        SCR_FROM_REG (scntl2),
2372
                0,
2373
        SCR_JUMPR ^ IFFALSE (MASK (WSR, WSR)),
2374
                16,
2375
        /*
2376
        **      There IS data in the swide register.
2377
        **      Discard it.
2378
        */
2379
        SCR_REG_REG (scntl2, SCR_OR, WSR),
2380
                0,
2381
        SCR_JUMP,
2382
                PADDR (clrack),
2383
        /*
2384
        **      Load again the size to the sfbr register.
2385
        */
2386
        SCR_FROM_REG (scratcha),
2387
                0,
2388
        SCR_INT,
2389
                SIR_IGN_RESIDUE,
2390
        SCR_JUMP,
2391
                PADDR (clrack),
2392
 
2393
}/*-------------------------< MSG_EXTENDED >-------------*/,{
2394
        /*
2395
        **      Terminate cycle
2396
        */
2397
        SCR_CLR (SCR_ACK),
2398
                0,
2399
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2400
                PADDR (dispatch),
2401
        /*
2402
        **      get length.
2403
        */
2404
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2405
                NADDR (msgin[1]),
2406
        /*
2407
        */
2408
        SCR_JUMP ^ IFTRUE (DATA (3)),
2409
                PADDRH (msg_ext_3),
2410
        SCR_JUMP ^ IFFALSE (DATA (2)),
2411
                PADDR (msg_bad),
2412
}/*-------------------------< MSG_EXT_2 >----------------*/,{
2413
        SCR_CLR (SCR_ACK),
2414
                0,
2415
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2416
                PADDR (dispatch),
2417
        /*
2418
        **      get extended message code.
2419
        */
2420
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2421
                NADDR (msgin[2]),
2422
        SCR_JUMP ^ IFTRUE (DATA (M_X_WIDE_REQ)),
2423
                PADDRH (msg_wdtr),
2424
        /*
2425
        **      unknown extended message
2426
        */
2427
        SCR_JUMP,
2428
                PADDR (msg_bad)
2429
}/*-------------------------< MSG_WDTR >-----------------*/,{
2430
        SCR_CLR (SCR_ACK),
2431
                0,
2432
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2433
                PADDR (dispatch),
2434
        /*
2435
        **      get data bus width
2436
        */
2437
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2438
                NADDR (msgin[3]),
2439
        /*
2440
        **      let the host do the real work.
2441
        */
2442
        SCR_INT,
2443
                SIR_NEGO_WIDE,
2444
        /*
2445
        **      let the target fetch our answer.
2446
        */
2447
        SCR_SET (SCR_ATN),
2448
                0,
2449
        SCR_CLR (SCR_ACK),
2450
                0,
2451
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
2452
                PADDRH (nego_bad_phase),
2453
 
2454
}/*-------------------------< SEND_WDTR >----------------*/,{
2455
        /*
2456
        **      Send the M_X_WIDE_REQ
2457
        */
2458
        SCR_MOVE_ABS (4) ^ SCR_MSG_OUT,
2459
                NADDR (msgout),
2460
        SCR_COPY (1),
2461
                NADDR (msgout),
2462
                NADDR (lastmsg),
2463
        SCR_JUMP,
2464
                PADDR (msg_out_done),
2465
 
2466
}/*-------------------------< MSG_EXT_3 >----------------*/,{
2467
        SCR_CLR (SCR_ACK),
2468
                0,
2469
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2470
                PADDR (dispatch),
2471
        /*
2472
        **      get extended message code.
2473
        */
2474
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2475
                NADDR (msgin[2]),
2476
        SCR_JUMP ^ IFTRUE (DATA (M_X_SYNC_REQ)),
2477
                PADDRH (msg_sdtr),
2478
        /*
2479
        **      unknown extended message
2480
        */
2481
        SCR_JUMP,
2482
                PADDR (msg_bad)
2483
 
2484
}/*-------------------------< MSG_SDTR >-----------------*/,{
2485
        SCR_CLR (SCR_ACK),
2486
                0,
2487
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_IN)),
2488
                PADDR (dispatch),
2489
        /*
2490
        **      get period and offset
2491
        */
2492
        SCR_MOVE_ABS (2) ^ SCR_MSG_IN,
2493
                NADDR (msgin[3]),
2494
        /*
2495
        **      let the host do the real work.
2496
        */
2497
        SCR_INT,
2498
                SIR_NEGO_SYNC,
2499
        /*
2500
        **      let the target fetch our answer.
2501
        */
2502
        SCR_SET (SCR_ATN),
2503
                0,
2504
        SCR_CLR (SCR_ACK),
2505
                0,
2506
        SCR_JUMP ^ IFFALSE (WHEN (SCR_MSG_OUT)),
2507
                PADDRH (nego_bad_phase),
2508
 
2509
}/*-------------------------< SEND_SDTR >-------------*/,{
2510
        /*
2511
        **      Send the M_X_SYNC_REQ
2512
        */
2513
        SCR_MOVE_ABS (5) ^ SCR_MSG_OUT,
2514
                NADDR (msgout),
2515
        SCR_COPY (1),
2516
                NADDR (msgout),
2517
                NADDR (lastmsg),
2518
        SCR_JUMP,
2519
                PADDR (msg_out_done),
2520
 
2521
}/*-------------------------< NEGO_BAD_PHASE >------------*/,{
2522
        SCR_INT,
2523
                SIR_NEGO_PROTO,
2524
        SCR_JUMP,
2525
                PADDR (dispatch),
2526
 
2527
}/*-------------------------< MSG_OUT_ABORT >-------------*/,{
2528
        /*
2529
        **      After ABORT message,
2530
        **
2531
        **      expect an immediate disconnect, ...
2532
        */
2533
        SCR_REG_REG (scntl2, SCR_AND, 0x7f),
2534
                0,
2535
        SCR_CLR (SCR_ACK|SCR_ATN),
2536
                0,
2537
        SCR_WAIT_DISC,
2538
                0,
2539
        /*
2540
        **      ... and set the status to "ABORTED"
2541
        */
2542
        SCR_LOAD_REG (HS_REG, HS_ABORTED),
2543
                0,
2544
        SCR_JUMP,
2545
                PADDR (cleanup),
2546
 
2547
}/*-------------------------< HDATA_IN >-------------------*/,{
2548
/*
2549
**      Because the size depends on the
2550
**      #define MAX_SCATTERH parameter,
2551
**      it is filled in at runtime.
2552
**
2553
**  ##==< i=MAX_SCATTERL; i<MAX_SCATTERL+MAX_SCATTERH >==
2554
**  ||  SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
2555
**  ||          PADDR (dispatch),
2556
**  ||  SCR_MOVE_TBL ^ SCR_DATA_IN,
2557
**  ||          offsetof (struct dsb, data[ i]),
2558
**  ##===================================================
2559
**
2560
**---------------------------------------------------------
2561
*/
2562
 
2563
}/*-------------------------< HDATA_IN2 >------------------*/,{
2564
        SCR_JUMP,
2565
                PADDR (data_in),
2566
 
2567
}/*-------------------------< HDATA_OUT >-------------------*/,{
2568
/*
2569
**      Because the size depends on the
2570
**      #define MAX_SCATTERH parameter,
2571
**      it is filled in at runtime.
2572
**
2573
**  ##==< i=MAX_SCATTERL; i<MAX_SCATTERL+MAX_SCATTERH >==
2574
**  ||  SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT)),
2575
**  ||          PADDR (dispatch),
2576
**  ||  SCR_MOVE_TBL ^ SCR_DATA_OUT,
2577
**  ||          offsetof (struct dsb, data[ i]),
2578
**  ##===================================================
2579
**
2580
**---------------------------------------------------------
2581
*/
2582
 
2583
}/*-------------------------< HDATA_OUT2 >------------------*/,{
2584
        SCR_JUMP,
2585
                PADDR (data_out),
2586
 
2587
}/*-------------------------< RESET >----------------------*/,{
2588
        /*
2589
        **      Send a M_RESET message if bad IDENTIFY
2590
        **      received on reselection.
2591
        */
2592
        SCR_LOAD_REG (scratcha, M_ABORT_TAG),
2593
                0,
2594
        SCR_JUMP,
2595
                PADDRH (abort_resel),
2596
}/*-------------------------< ABORTTAG >-------------------*/,{
2597
        /*
2598
        **      Abort a wrong tag received on reselection.
2599
        */
2600
        SCR_LOAD_REG (scratcha, M_ABORT_TAG),
2601
                0,
2602
        SCR_JUMP,
2603
                PADDRH (abort_resel),
2604
}/*-------------------------< ABORT >----------------------*/,{
2605
        /*
2606
        **      Abort a reselection when no active CCB.
2607
        */
2608
        SCR_LOAD_REG (scratcha, M_ABORT),
2609
                0,
2610
}/*-------------------------< ABORT_RESEL >----------------*/,{
2611
        SCR_COPY (1),
2612
                RADDR (scratcha),
2613
                NADDR (msgout),
2614
        SCR_SET (SCR_ATN),
2615
                0,
2616
        SCR_CLR (SCR_ACK),
2617
                0,
2618
        /*
2619
        **      and send it.
2620
        **      we expect an immediate disconnect
2621
        */
2622
        SCR_REG_REG (scntl2, SCR_AND, 0x7f),
2623
                0,
2624
        SCR_MOVE_ABS (1) ^ SCR_MSG_OUT,
2625
                NADDR (msgout),
2626
        SCR_COPY (1),
2627
                NADDR (msgout),
2628
                NADDR (lastmsg),
2629
        SCR_CLR (SCR_ACK|SCR_ATN),
2630
                0,
2631
        SCR_WAIT_DISC,
2632
                0,
2633
        SCR_JUMP,
2634
                PADDR (start),
2635
}/*-------------------------< RESEND_IDENT >-------------------*/,{
2636
        /*
2637
        **      The target stays in MSG OUT phase after having acked
2638
        **      Identify [+ Tag [+ Extended message ]]. Targets shall
2639
        **      behave this way on parity error.
2640
        **      We must send it again all the messages.
2641
        */
2642
        SCR_SET (SCR_ATN), /* Shall be asserted 2 deskew delays before the  */
2643
                0,         /* 1rst ACK = 90 ns. Hope the NCR is'nt too fast */
2644
        SCR_JUMP,
2645
                PADDR (send_ident),
2646
}/*-------------------------< CLRATN_GO_ON >-------------------*/,{
2647
        SCR_CLR (SCR_ATN),
2648
                0,
2649
        SCR_JUMP,
2650
}/*-------------------------< NXTDSP_GO_ON >-------------------*/,{
2651
                0,
2652
}/*-------------------------< SDATA_IN >-------------------*/,{
2653
        SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN)),
2654
                PADDR (dispatch),
2655
        SCR_MOVE_TBL ^ SCR_DATA_IN,
2656
                offsetof (struct dsb, sense),
2657
        SCR_CALL,
2658
                PADDR (dispatch),
2659
        SCR_JUMP,
2660
                PADDR (no_data),
2661
}/*-------------------------< DATA_IO >--------------------*/,{
2662
        /*
2663
        **      We jump here if the data direction was unknown at the
2664
        **      time we had to queue the command to the scripts processor.
2665
        **      Pointers had been set as follow in this situation:
2666
        **        savep   -->   DATA_IO
2667
        **        lastp   -->   start pointer when DATA_IN
2668
        **        goalp   -->   goal  pointer when DATA_IN
2669
        **        wlastp  -->   start pointer when DATA_OUT
2670
        **        wgoalp  -->   goal  pointer when DATA_OUT
2671
        **      This script sets savep/lastp/goalp according to the
2672
        **      direction chosen by the target.
2673
        */
2674
        SCR_JUMPR ^ IFTRUE (WHEN (SCR_DATA_OUT)),
2675
                32,
2676
        /*
2677
        **      Direction is DATA IN.
2678
        **      Warning: we jump here, even when phase is DATA OUT.
2679
        */
2680
        SCR_COPY (4),
2681
                NADDR (header.lastp),
2682
                NADDR (header.savep),
2683
 
2684
        /*
2685
        **      Jump to the SCRIPTS according to actual direction.
2686
        */
2687
        SCR_COPY (4),
2688
                NADDR (header.savep),
2689
                RADDR (temp),
2690
        SCR_RETURN,
2691
                0,
2692
        /*
2693
        **      Direction is DATA OUT.
2694
        */
2695
        SCR_COPY (4),
2696
                NADDR (header.wlastp),
2697
                NADDR (header.lastp),
2698
        SCR_COPY (4),
2699
                NADDR (header.wgoalp),
2700
                NADDR (header.goalp),
2701
        SCR_JUMPR,
2702
                -64,
2703
}/*-------------------------< BAD_IDENTIFY >---------------*/,{
2704
        /*
2705
        **      If message phase but not an IDENTIFY,
2706
        **      get some help from the C code.
2707
        **      Old SCSI device may behave so.
2708
        */
2709
        SCR_JUMPR ^ IFTRUE (MASK (0x80, 0x80)),
2710
                16,
2711
        SCR_INT,
2712
                SIR_RESEL_NO_IDENTIFY,
2713
        SCR_JUMP,
2714
                PADDRH (reset),
2715
        /*
2716
        **      Message is an IDENTIFY, but lun is unknown.
2717
        **      Read the message, since we got it directly
2718
        **      from the SCSI BUS data lines.
2719
        **      Signal problem to C code for logging the event.
2720
        **      Send a M_ABORT to clear all pending tasks.
2721
        */
2722
        SCR_INT,
2723
                SIR_RESEL_BAD_LUN,
2724
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2725
                NADDR (msgin),
2726
        SCR_JUMP,
2727
                PADDRH (abort),
2728
}/*-------------------------< BAD_I_T_L >------------------*/,{
2729
        /*
2730
        **      We donnot have a task for that I_T_L.
2731
        **      Signal problem to C code for logging the event.
2732
        **      Send a M_ABORT message.
2733
        */
2734
        SCR_INT,
2735
                SIR_RESEL_BAD_I_T_L,
2736
        SCR_JUMP,
2737
                PADDRH (abort),
2738
}/*-------------------------< BAD_I_T_L_Q >----------------*/,{
2739
        /*
2740
        **      We donnot have a task that matches the tag.
2741
        **      Signal problem to C code for logging the event.
2742
        **      Send a M_ABORTTAG message.
2743
        */
2744
        SCR_INT,
2745
                SIR_RESEL_BAD_I_T_L_Q,
2746
        SCR_JUMP,
2747
                PADDRH (aborttag),
2748
}/*-------------------------< BAD_TARGET >-----------------*/,{
2749
        /*
2750
        **      We donnot know the target that reselected us.
2751
        **      Grab the first message if any (IDENTIFY).
2752
        **      Signal problem to C code for logging the event.
2753
        **      M_RESET message.
2754
        */
2755
        SCR_INT,
2756
                SIR_RESEL_BAD_TARGET,
2757
        SCR_JUMPR ^ IFFALSE (WHEN (SCR_MSG_IN)),
2758
                8,
2759
        SCR_MOVE_ABS (1) ^ SCR_MSG_IN,
2760
                NADDR (msgin),
2761
        SCR_JUMP,
2762
                PADDRH (reset),
2763
}/*-------------------------< BAD_STATUS >-----------------*/,{
2764
        /*
2765
        **      If command resulted in either QUEUE FULL,
2766
        **      CHECK CONDITION or COMMAND TERMINATED,
2767
        **      call the C code.
2768
        */
2769
        SCR_INT ^ IFTRUE (DATA (S_QUEUE_FULL)),
2770
                SIR_BAD_STATUS,
2771
        SCR_INT ^ IFTRUE (DATA (S_CHECK_COND)),
2772
                SIR_BAD_STATUS,
2773
        SCR_INT ^ IFTRUE (DATA (S_TERMINATED)),
2774
                SIR_BAD_STATUS,
2775
        SCR_RETURN,
2776
                0,
2777
}/*-------------------------< START_RAM >-------------------*/,{
2778
        /*
2779
        **      Load the script into on-chip RAM,
2780
        **      and jump to start point.
2781
        */
2782
        SCR_COPY_F (4),
2783
                RADDR (scratcha),
2784
                PADDRH (start_ram0),
2785
        SCR_COPY (sizeof (struct script)),
2786
}/*-------------------------< START_RAM0 >--------------------*/,{
2787
                0,
2788
                PADDR (start),
2789
        SCR_JUMP,
2790
                PADDR (start),
2791
}/*-------------------------< STO_RESTART >-------------------*/,{
2792
        /*
2793
        **
2794
        **      Repair start queue (e.g. next time use the next slot)
2795
        **      and jump to start point.
2796
        */
2797
        SCR_COPY (4),
2798
                RADDR (temp),
2799
                PADDR (startpos),
2800
        SCR_JUMP,
2801
                PADDR (start),
2802
}/*-------------------------< SNOOPTEST >-------------------*/,{
2803
        /*
2804
        **      Read the variable.
2805
        */
2806
        SCR_COPY (4),
2807
                NADDR(ncr_cache),
2808
                RADDR (scratcha),
2809
        /*
2810
        **      Write the variable.
2811
        */
2812
        SCR_COPY (4),
2813
                RADDR (temp),
2814
                NADDR(ncr_cache),
2815
        /*
2816
        **      Read back the variable.
2817
        */
2818
        SCR_COPY (4),
2819
                NADDR(ncr_cache),
2820
                RADDR (temp),
2821
}/*-------------------------< SNOOPEND >-------------------*/,{
2822
        /*
2823
        **      And stop.
2824
        */
2825
        SCR_INT,
2826
                99,
2827
}/*--------------------------------------------------------*/
2828
};
2829
 
2830
/*==========================================================
2831
**
2832
**
2833
**      Fill in #define dependent parts of the script
2834
**
2835
**
2836
**==========================================================
2837
*/
2838
 
2839
void __init ncr_script_fill (struct script * scr, struct scripth * scrh)
2840
{
2841
        int     i;
2842
        ncrcmd  *p;
2843
 
2844
        p = scrh->tryloop;
2845
        for (i=0; i<MAX_START; i++) {
2846
                *p++ =SCR_CALL;
2847
                *p++ =PADDR (idle);
2848
        };
2849
 
2850
        assert ((u_long)p == (u_long)&scrh->tryloop + sizeof (scrh->tryloop));
2851
 
2852
#ifdef SCSI_NCR_CCB_DONE_SUPPORT
2853
 
2854
        p = scrh->done_queue;
2855
        for (i = 0; i<MAX_DONE; i++) {
2856
                *p++ =SCR_COPY (sizeof(ccb_p));
2857
                *p++ =NADDR (header.cp);
2858
                *p++ =NADDR (ccb_done[i]);
2859
                *p++ =SCR_CALL;
2860
                *p++ =PADDR (done_end);
2861
        }
2862
 
2863
        assert ((u_long)p ==(u_long)&scrh->done_queue+sizeof(scrh->done_queue));
2864
 
2865
#endif /* SCSI_NCR_CCB_DONE_SUPPORT */
2866
 
2867
        p = scrh->hdata_in;
2868
        for (i=0; i<MAX_SCATTERH; i++) {
2869
                *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN));
2870
                *p++ =PADDR (dispatch);
2871
                *p++ =SCR_MOVE_TBL ^ SCR_DATA_IN;
2872
                *p++ =offsetof (struct dsb, data[i]);
2873
        };
2874
        assert ((u_long)p == (u_long)&scrh->hdata_in + sizeof (scrh->hdata_in));
2875
 
2876
        p = scr->data_in;
2877
        for (i=MAX_SCATTERH; i<MAX_SCATTERH+MAX_SCATTERL; i++) {
2878
                *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_IN));
2879
                *p++ =PADDR (dispatch);
2880
                *p++ =SCR_MOVE_TBL ^ SCR_DATA_IN;
2881
                *p++ =offsetof (struct dsb, data[i]);
2882
        };
2883
        assert ((u_long)p == (u_long)&scr->data_in + sizeof (scr->data_in));
2884
 
2885
        p = scrh->hdata_out;
2886
        for (i=0; i<MAX_SCATTERH; i++) {
2887
                *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT));
2888
                *p++ =PADDR (dispatch);
2889
                *p++ =SCR_MOVE_TBL ^ SCR_DATA_OUT;
2890
                *p++ =offsetof (struct dsb, data[i]);
2891
        };
2892
        assert ((u_long)p==(u_long)&scrh->hdata_out + sizeof (scrh->hdata_out));
2893
 
2894
        p = scr->data_out;
2895
        for (i=MAX_SCATTERH; i<MAX_SCATTERH+MAX_SCATTERL; i++) {
2896
                *p++ =SCR_CALL ^ IFFALSE (WHEN (SCR_DATA_OUT));
2897
                *p++ =PADDR (dispatch);
2898
                *p++ =SCR_MOVE_TBL ^ SCR_DATA_OUT;
2899
                *p++ =offsetof (struct dsb, data[i]);
2900
        };
2901
 
2902
        assert ((u_long)p == (u_long)&scr->data_out + sizeof (scr->data_out));
2903
}
2904
 
2905
/*==========================================================
2906
**
2907
**
2908
**      Copy and rebind a script.
2909
**
2910
**
2911
**==========================================================
2912
*/
2913
 
2914
static void __init
2915
ncr_script_copy_and_bind (ncb_p np, ncrcmd *src, ncrcmd *dst, int len)
2916
{
2917
        ncrcmd  opcode, new, old, tmp1, tmp2;
2918
        ncrcmd  *start, *end;
2919
        int relocs;
2920
        int opchanged = 0;
2921
 
2922
        start = src;
2923
        end = src + len/4;
2924
 
2925
        while (src < end) {
2926
 
2927
                opcode = *src++;
2928
                *dst++ = cpu_to_scr(opcode);
2929
 
2930
                /*
2931
                **      If we forget to change the length
2932
                **      in struct script, a field will be
2933
                **      padded with 0. This is an illegal
2934
                **      command.
2935
                */
2936
 
2937
                if (opcode == 0) {
2938
                        printk (KERN_ERR "%s: ERROR0 IN SCRIPT at %d.\n",
2939
                                ncr_name(np), (int) (src-start-1));
2940
                        MDELAY (1000);
2941
                };
2942
 
2943
                if (DEBUG_FLAGS & DEBUG_SCRIPT)
2944
                        printk (KERN_DEBUG "%p:  <%x>\n",
2945
                                (src-1), (unsigned)opcode);
2946
 
2947
                /*
2948
                **      We don't have to decode ALL commands
2949
                */
2950
                switch (opcode >> 28) {
2951
 
2952
                case 0xc:
2953
                        /*
2954
                        **      COPY has TWO arguments.
2955
                        */
2956
                        relocs = 2;
2957
                        tmp1 = src[0];
2958
#ifdef  RELOC_KVAR
2959
                        if ((tmp1 & RELOC_MASK) == RELOC_KVAR)
2960
                                tmp1 = 0;
2961
#endif
2962
                        tmp2 = src[1];
2963
#ifdef  RELOC_KVAR
2964
                        if ((tmp2 & RELOC_MASK) == RELOC_KVAR)
2965
                                tmp2 = 0;
2966
#endif
2967
                        if ((tmp1 ^ tmp2) & 3) {
2968
                                printk (KERN_ERR"%s: ERROR1 IN SCRIPT at %d.\n",
2969
                                        ncr_name(np), (int) (src-start-1));
2970
                                MDELAY (1000);
2971
                        }
2972
                        /*
2973
                        **      If PREFETCH feature not enabled, remove
2974
                        **      the NO FLUSH bit if present.
2975
                        */
2976
                        if ((opcode & SCR_NO_FLUSH) && !(np->features & FE_PFEN)) {
2977
                                dst[-1] = cpu_to_scr(opcode & ~SCR_NO_FLUSH);
2978
                                ++opchanged;
2979
                        }
2980
                        break;
2981
 
2982
                case 0x0:
2983
                        /*
2984
                        **      MOVE (absolute address)
2985
                        */
2986
                        relocs = 1;
2987
                        break;
2988
 
2989
                case 0x8:
2990
                        /*
2991
                        **      JUMP / CALL
2992
                        **      dont't relocate if relative :-)
2993
                        */
2994
                        if (opcode & 0x00800000)
2995
                                relocs = 0;
2996
                        else
2997
                                relocs = 1;
2998
                        break;
2999
 
3000
                case 0x4:
3001
                case 0x5:
3002
                case 0x6:
3003
                case 0x7:
3004
                        relocs = 1;
3005
                        break;
3006
 
3007
                default:
3008
                        relocs = 0;
3009
                        break;
3010
                };
3011
 
3012
                if (relocs) {
3013
                        while (relocs--) {
3014
                                old = *src++;
3015
 
3016
                                switch (old & RELOC_MASK) {
3017
                                case RELOC_REGISTER:
3018
                                        new = (old & ~RELOC_MASK) + np->paddr;
3019
                                        break;
3020
                                case RELOC_LABEL:
3021
                                        new = (old & ~RELOC_MASK) + np->p_script;
3022
                                        break;
3023
                                case RELOC_LABELH:
3024
                                        new = (old & ~RELOC_MASK) + np->p_scripth;
3025
                                        break;
3026
                                case RELOC_SOFTC:
3027
                                        new = (old & ~RELOC_MASK) + np->p_ncb;
3028
                                        break;
3029
#ifdef  RELOC_KVAR
3030
                                case RELOC_KVAR:
3031
                                        if (((old & ~RELOC_MASK) <
3032
                                             SCRIPT_KVAR_FIRST) ||
3033
                                            ((old & ~RELOC_MASK) >
3034
                                             SCRIPT_KVAR_LAST))
3035
                                                panic("ncr KVAR out of range");
3036
                                        new = vtophys(script_kvars[old &
3037
                                            ~RELOC_MASK]);
3038
                                        break;
3039
#endif
3040
                                case 0:
3041
                                        /* Don't relocate a 0 address. */
3042
                                        if (old == 0) {
3043
                                                new = old;
3044
                                                break;
3045
                                        }
3046
                                        /* fall through */
3047
                                default:
3048
                                        panic("ncr_script_copy_and_bind: weird relocation %x\n", old);
3049
                                        break;
3050
                                }
3051
 
3052
                                *dst++ = cpu_to_scr(new);
3053
                        }
3054
                } else
3055
                        *dst++ = cpu_to_scr(*src++);
3056
 
3057
        };
3058
}
3059
 
3060
/*==========================================================
3061
**
3062
**
3063
**      Auto configuration:  attach and init a host adapter.
3064
**
3065
**
3066
**==========================================================
3067
*/
3068
 
3069
/*
3070
**      Linux host data structure
3071
**
3072
**      The script area is allocated in the host data structure
3073
**      because kmalloc() returns NULL during scsi initialisations
3074
**      with Linux 1.2.X
3075
*/
3076
 
3077
struct host_data {
3078
     struct ncb *ncb;
3079
};
3080
 
3081
/*
3082
**      Print something which allows to retrieve the controller type, unit,
3083
**      target, lun concerned by a kernel message.
3084
*/
3085
 
3086
static void PRINT_TARGET(ncb_p np, int target)
3087
{
3088
        printk(KERN_INFO "%s-<%d,*>: ", ncr_name(np), target);
3089
}
3090
 
3091
static void PRINT_LUN(ncb_p np, int target, int lun)
3092
{
3093
        printk(KERN_INFO "%s-<%d,%d>: ", ncr_name(np), target, lun);
3094
}
3095
 
3096
static void PRINT_ADDR(Scsi_Cmnd *cmd)
3097
{
3098
        struct host_data *host_data = (struct host_data *) cmd->host->hostdata;
3099
        PRINT_LUN(host_data->ncb, cmd->target, cmd->lun);
3100
}
3101
 
3102
/*==========================================================
3103
**
3104
**      NCR chip clock divisor table.
3105
**      Divisors are multiplied by 10,000,000 in order to make
3106
**      calculations more simple.
3107
**
3108
**==========================================================
3109
*/
3110
 
3111
#define _5M 5000000
3112
static u_long div_10M[] =
3113
        {2*_5M, 3*_5M, 4*_5M, 6*_5M, 8*_5M, 12*_5M, 16*_5M};
3114
 
3115
 
3116
/*===============================================================
3117
**
3118
**      Prepare io register values used by ncr_init() according
3119
**      to selected and supported features.
3120
**
3121
**      NCR chips allow burst lengths of 2, 4, 8, 16, 32, 64, 128
3122
**      transfers. 32,64,128 are only supported by 875 and 895 chips.
3123
**      We use log base 2 (burst length) as internal code, with
3124
**      value 0 meaning "burst disabled".
3125
**
3126
**===============================================================
3127
*/
3128
 
3129
/*
3130
 *      Burst length from burst code.
3131
 */
3132
#define burst_length(bc) (!(bc))? 0 : 1 << (bc)
3133
 
3134
/*
3135
 *      Burst code from io register bits.
3136
 */
3137
#define burst_code(dmode, ctest4, ctest5) \
3138
        (ctest4) & 0x80? 0 : (((dmode) & 0xc0) >> 6) + ((ctest5) & 0x04) + 1
3139
 
3140
/*
3141
 *      Set initial io register bits from burst code.
3142
 */
3143
static inline void ncr_init_burst(ncb_p np, u_char bc)
3144
{
3145
        np->rv_ctest4   &= ~0x80;
3146
        np->rv_dmode    &= ~(0x3 << 6);
3147
        np->rv_ctest5   &= ~0x4;
3148
 
3149
        if (!bc) {
3150
                np->rv_ctest4   |= 0x80;
3151
        }
3152
        else {
3153
                --bc;
3154
                np->rv_dmode    |= ((bc & 0x3) << 6);
3155
                np->rv_ctest5   |= (bc & 0x4);
3156
        }
3157
}
3158
 
3159
#ifdef SCSI_NCR_NVRAM_SUPPORT
3160
 
3161
/*
3162
**      Get target set-up from Symbios format NVRAM.
3163
*/
3164
 
3165
static void __init
3166
ncr_Symbios_setup_target(ncb_p np, int target, Symbios_nvram *nvram)
3167
{
3168
        tcb_p tp = &np->target[target];
3169
        Symbios_target *tn = &nvram->target[target];
3170
 
3171
        tp->usrsync = tn->sync_period ? (tn->sync_period + 3) / 4 : 255;
3172
        tp->usrwide = tn->bus_width == 0x10 ? 1 : 0;
3173
        tp->usrtags =
3174
                (tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? MAX_TAGS : 0;
3175
 
3176
        if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE))
3177
                tp->usrflag |= UF_NODISC;
3178
        if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME))
3179
                tp->usrflag |= UF_NOSCAN;
3180
}
3181
 
3182
/*
3183
**      Get target set-up from Tekram format NVRAM.
3184
*/
3185
 
3186
static void __init
3187
ncr_Tekram_setup_target(ncb_p np, int target, Tekram_nvram *nvram)
3188
{
3189
        tcb_p tp = &np->target[target];
3190
        struct Tekram_target *tn = &nvram->target[target];
3191
        int i;
3192
 
3193
        if (tn->flags & TEKRAM_SYNC_NEGO) {
3194
                i = tn->sync_index & 0xf;
3195
                tp->usrsync = Tekram_sync[i];
3196
        }
3197
 
3198
        tp->usrwide = (tn->flags & TEKRAM_WIDE_NEGO) ? 1 : 0;
3199
 
3200
        if (tn->flags & TEKRAM_TAGGED_COMMANDS) {
3201
                tp->usrtags = 2 << nvram->max_tags_index;
3202
        }
3203
 
3204
        if (!(tn->flags & TEKRAM_DISCONNECT_ENABLE))
3205
                tp->usrflag = UF_NODISC;
3206
 
3207
        /* If any device does not support parity, we will not use this option */
3208
        if (!(tn->flags & TEKRAM_PARITY_CHECK))
3209
                np->rv_scntl0  &= ~0x0a; /* SCSI parity checking disabled */
3210
}
3211
#endif /* SCSI_NCR_NVRAM_SUPPORT */
3212
 
3213
static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram)
3214
{
3215
        u_char  burst_max;
3216
        u_long  period;
3217
        int i;
3218
 
3219
        /*
3220
        **      Save assumed BIOS setting
3221
        */
3222
 
3223
        np->sv_scntl0   = INB(nc_scntl0) & 0x0a;
3224
        np->sv_scntl3   = INB(nc_scntl3) & 0x07;
3225
        np->sv_dmode    = INB(nc_dmode)  & 0xce;
3226
        np->sv_dcntl    = INB(nc_dcntl)  & 0xa8;
3227
        np->sv_ctest3   = INB(nc_ctest3) & 0x01;
3228
        np->sv_ctest4   = INB(nc_ctest4) & 0x80;
3229
        np->sv_ctest5   = INB(nc_ctest5) & 0x24;
3230
        np->sv_gpcntl   = INB(nc_gpcntl);
3231
        np->sv_stest2   = INB(nc_stest2) & 0x20;
3232
        np->sv_stest4   = INB(nc_stest4);
3233
 
3234
        /*
3235
        **      Wide ?
3236
        */
3237
 
3238
        np->maxwide     = (np->features & FE_WIDE)? 1 : 0;
3239
 
3240
        /*
3241
         *  Guess the frequency of the chip's clock.
3242
         */
3243
        if      (np->features & (FE_ULTRA3 | FE_ULTRA2))
3244
                np->clock_khz = 160000;
3245
        else if (np->features & FE_ULTRA)
3246
                np->clock_khz = 80000;
3247
        else
3248
                np->clock_khz = 40000;
3249
 
3250
        /*
3251
         *  Get the clock multiplier factor.
3252
         */
3253
        if      (np->features & FE_QUAD)
3254
                np->multiplier  = 4;
3255
        else if (np->features & FE_DBLR)
3256
                np->multiplier  = 2;
3257
        else
3258
                np->multiplier  = 1;
3259
 
3260
        /*
3261
         *  Measure SCSI clock frequency for chips
3262
         *  it may vary from assumed one.
3263
         */
3264
        if (np->features & FE_VARCLK)
3265
                ncr_getclock(np, np->multiplier);
3266
 
3267
        /*
3268
         * Divisor to be used for async (timer pre-scaler).
3269
         */
3270
        i = np->clock_divn - 1;
3271
        while (--i >= 0) {
3272
                if (10ul * SCSI_NCR_MIN_ASYNC * np->clock_khz > div_10M[i]) {
3273
                        ++i;
3274
                        break;
3275
                }
3276
        }
3277
        np->rv_scntl3 = i+1;
3278
 
3279
        /*
3280
         * Minimum synchronous period factor supported by the chip.
3281
         * Btw, 'period' is in tenths of nanoseconds.
3282
         */
3283
 
3284
        period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
3285
        if      (period <= 250)         np->minsync = 10;
3286
        else if (period <= 303)         np->minsync = 11;
3287
        else if (period <= 500)         np->minsync = 12;
3288
        else                            np->minsync = (period + 40 - 1) / 40;
3289
 
3290
        /*
3291
         * Check against chip SCSI standard support (SCSI-2,ULTRA,ULTRA2).
3292
         */
3293
 
3294
        if      (np->minsync < 25 && !(np->features & (FE_ULTRA|FE_ULTRA2)))
3295
                np->minsync = 25;
3296
        else if (np->minsync < 12 && !(np->features & FE_ULTRA2))
3297
                np->minsync = 12;
3298
 
3299
        /*
3300
         * Maximum synchronous period factor supported by the chip.
3301
         */
3302
 
3303
        period = (11 * div_10M[np->clock_divn - 1]) / (4 * np->clock_khz);
3304
        np->maxsync = period > 2540 ? 254 : period / 10;
3305
 
3306
        /*
3307
        **      Prepare initial value of other IO registers
3308
        */
3309
#if defined SCSI_NCR_TRUST_BIOS_SETTING
3310
        np->rv_scntl0   = np->sv_scntl0;
3311
        np->rv_dmode    = np->sv_dmode;
3312
        np->rv_dcntl    = np->sv_dcntl;
3313
        np->rv_ctest3   = np->sv_ctest3;
3314
        np->rv_ctest4   = np->sv_ctest4;
3315
        np->rv_ctest5   = np->sv_ctest5;
3316
        burst_max       = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
3317
#else
3318
 
3319
        /*
3320
        **      Select burst length (dwords)
3321
        */
3322
        burst_max       = driver_setup.burst_max;
3323
        if (burst_max == 255)
3324
                burst_max = burst_code(np->sv_dmode, np->sv_ctest4, np->sv_ctest5);
3325
        if (burst_max > 7)
3326
                burst_max = 7;
3327
        if (burst_max > np->maxburst)
3328
                burst_max = np->maxburst;
3329
 
3330
        /*
3331
        **      Select all supported special features
3332
        */
3333
        if (np->features & FE_ERL)
3334
                np->rv_dmode    |= ERL;         /* Enable Read Line */
3335
        if (np->features & FE_BOF)
3336
                np->rv_dmode    |= BOF;         /* Burst Opcode Fetch */
3337
        if (np->features & FE_ERMP)
3338
                np->rv_dmode    |= ERMP;        /* Enable Read Multiple */
3339
        if (np->features & FE_PFEN)
3340
                np->rv_dcntl    |= PFEN;        /* Prefetch Enable */
3341
        if (np->features & FE_CLSE)
3342
                np->rv_dcntl    |= CLSE;        /* Cache Line Size Enable */
3343
        if (np->features & FE_WRIE)
3344
                np->rv_ctest3   |= WRIE;        /* Write and Invalidate */
3345
        if (np->features & FE_DFS)
3346
                np->rv_ctest5   |= DFS;         /* Dma Fifo Size */
3347
 
3348
        /*
3349
        **      Select some other
3350
        */
3351
        if (driver_setup.master_parity)
3352
                np->rv_ctest4   |= MPEE;        /* Master parity checking */
3353
        if (driver_setup.scsi_parity)
3354
                np->rv_scntl0   |= 0x0a;        /*  full arb., ena parity, par->ATN  */
3355
 
3356
#ifdef SCSI_NCR_NVRAM_SUPPORT
3357
        /*
3358
        **      Get parity checking, host ID and verbose mode from NVRAM
3359
        **/
3360
        if (nvram) {
3361
                switch(nvram->type) {
3362
                case SCSI_NCR_TEKRAM_NVRAM:
3363
                        np->myaddr = nvram->data.Tekram.host_id & 0x0f;
3364
                        break;
3365
                case SCSI_NCR_SYMBIOS_NVRAM:
3366
                        if (!(nvram->data.Symbios.flags & SYMBIOS_PARITY_ENABLE))
3367
                                np->rv_scntl0  &= ~0x0a;
3368
                        np->myaddr = nvram->data.Symbios.host_id & 0x0f;
3369
                        if (nvram->data.Symbios.flags & SYMBIOS_VERBOSE_MSGS)
3370
                                np->verbose += 1;
3371
                        break;
3372
                }
3373
        }
3374
#endif
3375
        /*
3376
        **  Get SCSI addr of host adapter (set by bios?).
3377
        */
3378
        if (np->myaddr == 255) {
3379
                np->myaddr = INB(nc_scid) & 0x07;
3380
                if (!np->myaddr)
3381
                        np->myaddr = SCSI_NCR_MYADDR;
3382
        }
3383
 
3384
#endif /* SCSI_NCR_TRUST_BIOS_SETTING */
3385
 
3386
        /*
3387
         *      Prepare initial io register bits for burst length
3388
         */
3389
        ncr_init_burst(np, burst_max);
3390
 
3391
        /*
3392
        **      Set SCSI BUS mode.
3393
        **
3394
        **      - ULTRA2 chips (895/895A/896) report the current
3395
        **        BUS mode through the STEST4 IO register.
3396
        **      - For previous generation chips (825/825A/875),
3397
        **        user has to tell us how to check against HVD,
3398
        **        since a 100% safe algorithm is not possible.
3399
        */
3400
        np->scsi_mode = SMODE_SE;
3401
        if      (np->features & FE_ULTRA2)
3402
                np->scsi_mode = (np->sv_stest4 & SMODE);
3403
        else if (np->features & FE_DIFF) {
3404
                switch(driver_setup.diff_support) {
3405
                case 4: /* Trust previous settings if present, then GPIO3 */
3406
                        if (np->sv_scntl3) {
3407
                                if (np->sv_stest2 & 0x20)
3408
                                        np->scsi_mode = SMODE_HVD;
3409
                                break;
3410
                        }
3411
                case 3: /* SYMBIOS controllers report HVD through GPIO3 */
3412
                        if (nvram && nvram->type != SCSI_NCR_SYMBIOS_NVRAM)
3413
                                break;
3414
                        if (INB(nc_gpreg) & 0x08)
3415
                                break;
3416
                case 2: /* Set HVD unconditionally */
3417
                        np->scsi_mode = SMODE_HVD;
3418
                case 1: /* Trust previous settings for HVD */
3419
                        if (np->sv_stest2 & 0x20)
3420
                                np->scsi_mode = SMODE_HVD;
3421
                        break;
3422
                default:/* Don't care about HVD */
3423
                        break;
3424
                }
3425
        }
3426
        if (np->scsi_mode == SMODE_HVD)
3427
                np->rv_stest2 |= 0x20;
3428
 
3429
        /*
3430
        **      Set LED support from SCRIPTS.
3431
        **      Ignore this feature for boards known to use a
3432
        **      specific GPIO wiring and for the 895A or 896
3433
        **      that drive the LED directly.
3434
        **      Also probe initial setting of GPIO0 as output.
3435
        */
3436
        if ((driver_setup.led_pin ||
3437
             (nvram && nvram->type == SCSI_NCR_SYMBIOS_NVRAM)) &&
3438
            !(np->features & FE_LEDC) && !(np->sv_gpcntl & 0x01))
3439
                np->features |= FE_LED0;
3440
 
3441
        /*
3442
        **      Set irq mode.
3443
        */
3444
        switch(driver_setup.irqm & 3) {
3445
        case 2:
3446
                np->rv_dcntl    |= IRQM;
3447
                break;
3448
        case 1:
3449
                np->rv_dcntl    |= (np->sv_dcntl & IRQM);
3450
                break;
3451
        default:
3452
                break;
3453
        }
3454
 
3455
        /*
3456
        **      Configure targets according to driver setup.
3457
        **      If NVRAM present get targets setup from NVRAM.
3458
        **      Allow to override sync, wide and NOSCAN from
3459
        **      boot command line.
3460
        */
3461
        for (i = 0 ; i < MAX_TARGET ; i++) {
3462
                tcb_p tp = &np->target[i];
3463
 
3464
                tp->usrsync = 255;
3465
#ifdef SCSI_NCR_NVRAM_SUPPORT
3466
                if (nvram) {
3467
                        switch(nvram->type) {
3468
                        case SCSI_NCR_TEKRAM_NVRAM:
3469
                                ncr_Tekram_setup_target(np, i, &nvram->data.Tekram);
3470
                                break;
3471
                        case SCSI_NCR_SYMBIOS_NVRAM:
3472
                                ncr_Symbios_setup_target(np, i, &nvram->data.Symbios);
3473
                                break;
3474
                        }
3475
                        if (driver_setup.use_nvram & 0x2)
3476
                                tp->usrsync = driver_setup.default_sync;
3477
                        if (driver_setup.use_nvram & 0x4)
3478
                                tp->usrwide = driver_setup.max_wide;
3479
                        if (driver_setup.use_nvram & 0x8)
3480
                                tp->usrflag &= ~UF_NOSCAN;
3481
                }
3482
                else {
3483
#else
3484
                if (1) {
3485
#endif
3486
                        tp->usrsync = driver_setup.default_sync;
3487
                        tp->usrwide = driver_setup.max_wide;
3488
                        tp->usrtags = MAX_TAGS;
3489
                        if (!driver_setup.disconnection)
3490
                                np->target[i].usrflag = UF_NODISC;
3491
                }
3492
        }
3493
 
3494
        /*
3495
        **      Announce all that stuff to user.
3496
        */
3497
 
3498
        i = nvram ? nvram->type : 0;
3499
        printk(KERN_INFO "%s: %sID %d, Fast-%d%s%s\n", ncr_name(np),
3500
                i  == SCSI_NCR_SYMBIOS_NVRAM ? "Symbios format NVRAM, " :
3501
                (i == SCSI_NCR_TEKRAM_NVRAM  ? "Tekram format NVRAM, " : ""),
3502
                np->myaddr,
3503
                np->minsync < 12 ? 40 : (np->minsync < 25 ? 20 : 10),
3504
                (np->rv_scntl0 & 0xa)   ? ", Parity Checking"   : ", NO Parity",
3505
                (np->rv_stest2 & 0x20)  ? ", Differential"      : "");
3506
 
3507
        if (bootverbose > 1) {
3508
                printk (KERN_INFO "%s: initial SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
3509
                        "(hex) %02x/%02x/%02x/%02x/%02x/%02x\n",
3510
                        ncr_name(np), np->sv_scntl3, np->sv_dmode, np->sv_dcntl,
3511
                        np->sv_ctest3, np->sv_ctest4, np->sv_ctest5);
3512
 
3513
                printk (KERN_INFO "%s: final   SCNTL3/DMODE/DCNTL/CTEST3/4/5 = "
3514
                        "(hex) %02x/%02x/%02x/%02x/%02x/%02x\n",
3515
                        ncr_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl,
3516
                        np->rv_ctest3, np->rv_ctest4, np->rv_ctest5);
3517
        }
3518
 
3519
        if (bootverbose && np->paddr2)
3520
                printk (KERN_INFO "%s: on-chip RAM at 0x%lx\n",
3521
                        ncr_name(np), np->paddr2);
3522
 
3523
        return 0;
3524
}
3525
 
3526
/*
3527
**      Host attach and initialisations.
3528
**
3529
**      Allocate host data and ncb structure.
3530
**      Request IO region and remap MMIO region.
3531
**      Do chip initialization.
3532
**      If all is OK, install interrupt handling and
3533
**      start the timer daemon.
3534
*/
3535
 
3536
static int __init
3537
ncr_attach (Scsi_Host_Template *tpnt, int unit, ncr_device *device)
3538
{
3539
        struct host_data *host_data;
3540
        ncb_p np = 0;
3541
        struct Scsi_Host *instance = 0;
3542
        u_long flags = 0;
3543
        ncr_nvram *nvram = device->nvram;
3544
        int i;
3545
 
3546
        printk(KERN_INFO "ncr53c%s-%d: rev 0x%x on pci bus %d device %d function %d "
3547
#ifdef __sparc__
3548
                "irq %s\n",
3549
#else
3550
                "irq %d\n",
3551
#endif
3552
                device->chip.name, unit, device->chip.revision_id,
3553
                device->slot.bus, (device->slot.device_fn & 0xf8) >> 3,
3554
                device->slot.device_fn & 7,
3555
#ifdef __sparc__
3556
                __irq_itoa(device->slot.irq));
3557
#else
3558
                device->slot.irq);
3559
#endif
3560
 
3561
        /*
3562
        **      Allocate host_data structure
3563
        */
3564
        if (!(instance = scsi_register(tpnt, sizeof(*host_data))))
3565
                goto attach_error;
3566
        host_data = (struct host_data *) instance->hostdata;
3567
 
3568
        /*
3569
        **      Allocate the host control block.
3570
        */
3571
        np = __m_calloc_dma(device->pdev, sizeof(struct ncb), "NCB");
3572
        if (!np)
3573
                goto attach_error;
3574
        NCR_INIT_LOCK_NCB(np);
3575
        np->pdev  = device->pdev;
3576
        np->p_ncb = vtobus(np);
3577
        host_data->ncb = np;
3578
 
3579
        /*
3580
        **      Allocate the default CCB.
3581
        */
3582
        np->ccb = (ccb_p) m_calloc_dma(sizeof(struct ccb), "CCB");
3583
        if (!np->ccb)
3584
                goto attach_error;
3585
 
3586
        /*
3587
        **      Store input informations in the host data structure.
3588
        */
3589
        strncpy(np->chip_name, device->chip.name, sizeof(np->chip_name) - 1);
3590
        np->unit        = unit;
3591
        np->verbose     = driver_setup.verbose;
3592
        sprintf(np->inst_name, "ncr53c%s-%d", np->chip_name, np->unit);
3593
        np->device_id   = device->chip.device_id;
3594
        np->revision_id = device->chip.revision_id;
3595
        np->bus         = device->slot.bus;
3596
        np->device_fn   = device->slot.device_fn;
3597
        np->features    = device->chip.features;
3598
        np->clock_divn  = device->chip.nr_divisor;
3599
        np->maxoffs     = device->chip.offset_max;
3600
        np->maxburst    = device->chip.burst_max;
3601
        np->myaddr      = device->host_id;
3602
 
3603
        /*
3604
        **      Allocate SCRIPTS areas.
3605
        */
3606
        np->script0  = (struct script *)
3607
                        m_calloc_dma(sizeof(struct script), "SCRIPT");
3608
        if (!np->script0)
3609
                goto attach_error;
3610
        np->scripth0  = (struct scripth *)
3611
                        m_calloc_dma(sizeof(struct scripth), "SCRIPTH");
3612
        if (!np->scripth0)
3613
                goto attach_error;
3614
 
3615
        /*
3616
        **    Initialize timer structure
3617
        **
3618
        */
3619
        init_timer(&np->timer);
3620
        np->timer.data     = (unsigned long) np;
3621
        np->timer.function = ncr53c8xx_timeout;
3622
 
3623
        /*
3624
        **      Try to map the controller chip to
3625
        **      virtual and physical memory.
3626
        */
3627
 
3628
        np->paddr       = device->slot.base;
3629
        np->paddr2      = (np->features & FE_RAM)? device->slot.base_2 : 0;
3630
 
3631
#ifndef SCSI_NCR_IOMAPPED
3632
        np->vaddr = remap_pci_mem(device->slot.base_c, (u_long) 128);
3633
        if (!np->vaddr) {
3634
                printk(KERN_ERR
3635
                        "%s: can't map memory mapped IO region\n",ncr_name(np));
3636
                goto attach_error;
3637
        }
3638
        else
3639
                if (bootverbose > 1)
3640
                        printk(KERN_INFO
3641
                                "%s: using memory mapped IO at virtual address 0x%lx\n", ncr_name(np), (u_long) np->vaddr);
3642
 
3643
        /*
3644
        **      Make the controller's registers available.
3645
        **      Now the INB INW INL OUTB OUTW OUTL macros
3646
        **      can be used safely.
3647
        */
3648
 
3649
        np->reg = (struct ncr_reg*) np->vaddr;
3650
 
3651
#endif /* !defined SCSI_NCR_IOMAPPED */
3652
 
3653
        /*
3654
        **      Try to map the controller chip into iospace.
3655
        */
3656
 
3657
        request_region(device->slot.io_port, 128, "ncr53c8xx");
3658
        np->base_io = device->slot.io_port;
3659
 
3660
#ifdef SCSI_NCR_NVRAM_SUPPORT
3661
        if (nvram) {
3662
                switch(nvram->type) {
3663
                case SCSI_NCR_SYMBIOS_NVRAM:
3664
#ifdef SCSI_NCR_DEBUG_NVRAM
3665
                        ncr_display_Symbios_nvram(&nvram->data.Symbios);
3666
#endif
3667
                        break;
3668
                case SCSI_NCR_TEKRAM_NVRAM:
3669
#ifdef SCSI_NCR_DEBUG_NVRAM
3670
                        ncr_display_Tekram_nvram(&nvram->data.Tekram);
3671
#endif
3672
                        break;
3673
                default:
3674
                        nvram = 0;
3675
#ifdef SCSI_NCR_DEBUG_NVRAM
3676
                        printk(KERN_DEBUG "%s: NVRAM: None or invalid data.\n", ncr_name(np));
3677
#endif
3678
                }
3679
        }
3680
#endif
3681
 
3682
        /*
3683
        **      Do chip dependent initialization.
3684
        */
3685
        (void)ncr_prepare_setting(np, nvram);
3686
 
3687
        if (np->paddr2 && sizeof(struct script) > 4096) {
3688
                np->paddr2 = 0;
3689
                printk(KERN_WARNING "%s: script too large, NOT using on chip RAM.\n",
3690
                        ncr_name(np));
3691
        }
3692
 
3693
        /*
3694
        **      Fill Linux host instance structure
3695
        */
3696
        instance->max_channel   = 0;
3697
        instance->this_id       = np->myaddr;
3698
        instance->max_id        = np->maxwide ? 16 : 8;
3699
        instance->max_lun       = SCSI_NCR_MAX_LUN;
3700
#ifndef SCSI_NCR_IOMAPPED
3701
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,29)
3702
        instance->base          = (unsigned long) np->reg;
3703
#else
3704
        instance->base          = (char *) np->reg;
3705
#endif
3706
#endif
3707
        instance->irq           = device->slot.irq;
3708
        instance->unique_id     = device->slot.io_port;
3709
        instance->io_port       = device->slot.io_port;
3710
        instance->n_io_port     = 128;
3711
        instance->dma_channel   = 0;
3712
        instance->cmd_per_lun   = MAX_TAGS;
3713
        instance->can_queue     = (MAX_START-4);
3714
        instance->select_queue_depths = ncr53c8xx_select_queue_depths;
3715
        scsi_set_pci_device(instance, device->pdev);
3716
 
3717
#ifdef SCSI_NCR_INTEGRITY_CHECKING
3718
        np->check_integrity       = 0;
3719
        instance->check_integrity = 0;
3720
 
3721
#ifdef SCSI_NCR_ENABLE_INTEGRITY_CHECK
3722
        if ( !(driver_setup.bus_check & 0x04) ) {
3723
                np->check_integrity       = 1;
3724
                instance->check_integrity = 1;
3725
        }
3726
#endif
3727
#endif
3728
        /*
3729
        **      Patch script to physical addresses
3730
        */
3731
        ncr_script_fill (&script0, &scripth0);
3732
 
3733
        np->scripth     = np->scripth0;
3734
        np->p_scripth   = vtobus(np->scripth);
3735
 
3736
        np->p_script    = (np->paddr2) ?  np->paddr2 : vtobus(np->script0);
3737
 
3738
        ncr_script_copy_and_bind (np, (ncrcmd *) &script0, (ncrcmd *) np->script0, sizeof(struct script));
3739
        ncr_script_copy_and_bind (np, (ncrcmd *) &scripth0, (ncrcmd *) np->scripth0, sizeof(struct scripth));
3740
        np->ccb->p_ccb          = vtobus (np->ccb);
3741
 
3742
        /*
3743
        **    Patch the script for LED support.
3744
        */
3745
 
3746
        if (np->features & FE_LED0) {
3747
                np->script0->idle[0]  =
3748
                                cpu_to_scr(SCR_REG_REG(gpreg, SCR_OR,  0x01));
3749
                np->script0->reselected[0] =
3750
                                cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
3751
                np->script0->start[0] =
3752
                                cpu_to_scr(SCR_REG_REG(gpreg, SCR_AND, 0xfe));
3753
        }
3754
 
3755
        /*
3756
        **      Look for the target control block of this nexus.
3757
        **      For i = 0 to 3
3758
        **              JUMP ^ IFTRUE (MASK (i, 3)), @(next_lcb)
3759
        */
3760
        for (i = 0 ; i < 4 ; i++) {
3761
                np->jump_tcb[i].l_cmd   =
3762
                                cpu_to_scr((SCR_JUMP ^ IFTRUE (MASK (i, 3))));
3763
                np->jump_tcb[i].l_paddr =
3764
                                cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_target));
3765
        }
3766
 
3767
        /*
3768
        **      Reset chip.
3769
        */
3770
 
3771
        OUTB (nc_istat,  SRST);
3772
        UDELAY (100);
3773
        OUTB (nc_istat,  0   );
3774
 
3775
        /*
3776
        **      Now check the cache handling of the pci chipset.
3777
        */
3778
 
3779
        if (ncr_snooptest (np)) {
3780
                printk (KERN_ERR "CACHE INCORRECTLY CONFIGURED.\n");
3781
                goto attach_error;
3782
        };
3783
 
3784
        /*
3785
        **      Install the interrupt handler.
3786
        */
3787
 
3788
        if (request_irq(device->slot.irq, ncr53c8xx_intr,
3789
                        ((driver_setup.irqm & 0x10) ? 0 : SA_SHIRQ) |
3790
#if LINUX_VERSION_CODE < LinuxVersionCode(2,2,0)
3791
                        ((driver_setup.irqm & 0x20) ? 0 : SA_INTERRUPT),
3792
#else
3793
                        0,
3794
#endif
3795
                        "ncr53c8xx", np)) {
3796
#ifdef __sparc__
3797
                printk(KERN_ERR "%s: request irq %s failure\n",
3798
                        ncr_name(np), __irq_itoa(device->slot.irq));
3799
#else
3800
                printk(KERN_ERR "%s: request irq %d failure\n",
3801
                        ncr_name(np), device->slot.irq);
3802
#endif
3803
                goto attach_error;
3804
        }
3805
 
3806
        np->irq = device->slot.irq;
3807
 
3808
        /*
3809
        **      Initialize the fixed part of the default ccb.
3810
        */
3811
        ncr_init_ccb(np, np->ccb);
3812
 
3813
        /*
3814
        **      After SCSI devices have been opened, we cannot
3815
        **      reset the bus safely, so we do it here.
3816
        **      Interrupt handler does the real work.
3817
        **      Process the reset exception,
3818
        **      if interrupts are not enabled yet.
3819
        **      Then enable disconnects.
3820
        */
3821
        NCR_LOCK_NCB(np, flags);
3822
        if (ncr_reset_scsi_bus(np, 0, driver_setup.settle_delay) != 0) {
3823
                printk(KERN_ERR "%s: FATAL ERROR: CHECK SCSI BUS - CABLES, TERMINATION, DEVICE POWER etc.!\n", ncr_name(np));
3824
 
3825
                NCR_UNLOCK_NCB(np, flags);
3826
                goto attach_error;
3827
        }
3828
        ncr_exception (np);
3829
 
3830
        np->disc = 1;
3831
 
3832
        /*
3833
        **      The middle-level SCSI driver does not
3834
        **      wait for devices to settle.
3835
        **      Wait synchronously if more than 2 seconds.
3836
        */
3837
        if (driver_setup.settle_delay > 2) {
3838
                printk(KERN_INFO "%s: waiting %d seconds for scsi devices to settle...\n",
3839
                        ncr_name(np), driver_setup.settle_delay);
3840
                MDELAY (1000 * driver_setup.settle_delay);
3841
        }
3842
 
3843
        /*
3844
        **      Now let the generic SCSI driver
3845
        **      look for the SCSI devices on the bus ..
3846
        */
3847
 
3848
        /*
3849
        **      start the timeout daemon
3850
        */
3851
        np->lasttime=0;
3852
        ncr_timeout (np);
3853
 
3854
        /*
3855
        **  use SIMPLE TAG messages by default
3856
        */
3857
#ifdef SCSI_NCR_ALWAYS_SIMPLE_TAG
3858
        np->order = M_SIMPLE_TAG;
3859
#endif
3860
 
3861
        /*
3862
        **  Done.
3863
        */
3864
        if (!the_template) {
3865
                the_template = instance->hostt;
3866
                first_host = instance;
3867
        }
3868
 
3869
        NCR_UNLOCK_NCB(np, flags);
3870
 
3871
        return 0;
3872
 
3873
attach_error:
3874
        if (!instance) return -1;
3875
        printk(KERN_INFO "%s: detaching...\n", ncr_name(np));
3876
        if (!np)
3877
                goto unregister;
3878
#ifndef SCSI_NCR_IOMAPPED
3879
        if (np->vaddr) {
3880
#ifdef DEBUG_NCR53C8XX
3881
                printk(KERN_DEBUG "%s: releasing memory mapped IO region %lx[%d]\n", ncr_name(np), (u_long) np->vaddr, 128);
3882
#endif
3883
                unmap_pci_mem((vm_offset_t) np->vaddr, (u_long) 128);
3884
        }
3885
#endif /* !SCSI_NCR_IOMAPPED */
3886
        if (np->base_io) {
3887
#ifdef DEBUG_NCR53C8XX
3888
                printk(KERN_DEBUG "%s: releasing IO region %x[%d]\n", ncr_name(np), np->base_io, 128);
3889
#endif
3890
                release_region(np->base_io, 128);
3891
        }
3892
        if (np->irq) {
3893
#ifdef DEBUG_NCR53C8XX
3894
#ifdef __sparc__
3895
        printk(KERN_INFO "%s: freeing irq %s\n", ncr_name(np),
3896
               __irq_itoa(np->irq));
3897
#else
3898
        printk(KERN_INFO "%s: freeing irq %d\n", ncr_name(np), np->irq);
3899
#endif
3900
#endif
3901
                free_irq(np->irq, np);
3902
        }
3903
        if (np->scripth0)
3904
                m_free_dma(np->scripth0, sizeof(struct scripth), "SCRIPTH");
3905
        if (np->script0)
3906
                m_free_dma(np->script0, sizeof(struct script), "SCRIPT");
3907
        if (np->ccb)
3908
                m_free_dma(np->ccb, sizeof(struct ccb), "CCB");
3909
        m_free_dma(np, sizeof(struct ncb), "NCB");
3910
 
3911
unregister:
3912
        scsi_unregister(instance);
3913
 
3914
        return -1;
3915
 }
3916
 
3917
 
3918
/*==========================================================
3919
**
3920
**
3921
**      Done SCSI commands list management.
3922
**
3923
**      We donnot enter the scsi_done() callback immediately
3924
**      after a command has been seen as completed but we
3925
**      insert it into a list which is flushed outside any kind
3926
**      of driver critical section.
3927
**      This allows to do minimal stuff under interrupt and
3928
**      inside critical sections and to also avoid locking up
3929
**      on recursive calls to driver entry points under SMP.
3930
**      In fact, the only kernel point which is entered by the
3931
**      driver with a driver lock set is kmalloc(GFP_ATOMIC)
3932
**      that shall not reenter the driver under any circumstances,
3933
**      AFAIK.
3934
**
3935
**==========================================================
3936
*/
3937
static inline void ncr_queue_done_cmd(ncb_p np, Scsi_Cmnd *cmd)
3938
{
3939
        unmap_scsi_data(np, cmd);
3940
        cmd->host_scribble = (char *) np->done_list;
3941
        np->done_list = cmd;
3942
}
3943
 
3944
static inline void ncr_flush_done_cmds(Scsi_Cmnd *lcmd)
3945
{
3946
        Scsi_Cmnd *cmd;
3947
 
3948
        while (lcmd) {
3949
                cmd = lcmd;
3950
                lcmd = (Scsi_Cmnd *) cmd->host_scribble;
3951
                cmd->scsi_done(cmd);
3952
        }
3953
}
3954
 
3955
/*==========================================================
3956
**
3957
**
3958
**      Prepare the next negotiation message for integrity check,
3959
**      if needed.
3960
**
3961
**      Fill in the part of message buffer that contains the
3962
**      negotiation and the nego_status field of the CCB.
3963
**      Returns the size of the message in bytes.
3964
**
3965
**
3966
**==========================================================
3967
*/
3968
 
3969
#ifdef SCSI_NCR_INTEGRITY_CHECKING
3970
static int ncr_ic_nego(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd, u_char *msgptr)
3971
{
3972
        tcb_p tp = &np->target[cp->target];
3973
        int msglen = 0;
3974
        int nego = 0;
3975
        u_char no_increase;
3976
 
3977
        if (tp->inq_done) {
3978
 
3979
                if (!tp->ic_maximums_set) {
3980
                        tp->ic_maximums_set = 1;
3981
 
3982
                        /* check target and host adapter capabilities */
3983
                        if ( (tp->inq_byte7 & INQ7_WIDE16) &&
3984
                                        np->maxwide && tp->usrwide )
3985
                                tp->ic_max_width = 1;
3986
                        else
3987
                                tp->ic_max_width = 0;
3988
 
3989
                        if ((tp->inq_byte7 & INQ7_SYNC) && tp->maxoffs) {
3990
                                tp->ic_min_sync   = (tp->minsync < np->minsync) ?
3991
                                                        np->minsync : tp->minsync;
3992
                        }
3993
                        else
3994
                                tp->ic_min_sync   = 255;
3995
 
3996
                        tp->period   = 1;
3997
                        tp->widedone = 1;
3998
                }
3999
 
4000
                if (DEBUG_FLAGS & DEBUG_IC) {
4001
                        printk("%s: cmd->ic_nego %d, 1st byte 0x%2X\n",
4002
                                ncr_name(np), cmd->ic_nego, cmd->cmnd[0]);
4003
                }
4004
 
4005
                /* First command from integrity check routine will request
4006
                 * a PPR message.  Disable.
4007
                 */
4008
                if ((cmd->ic_nego & NS_PPR) == NS_PPR)
4009
                        cmd->ic_nego &= ~NS_PPR;
4010
                /* Previous command recorded a parity or an initiator
4011
                 * detected error condition. Force bus to narrow for this
4012
                 * target. Clear flag. Negotation on request sense.
4013
                 * Note: kernel forces 2 bus resets :o( but clears itself out.
4014
                 * Minor bug? in scsi_obsolete.c (ugly)
4015
                 */
4016
                if (np->check_integ_par) {
4017
                        printk("%s: Parity Error. Target set to narrow.\n",
4018
                                ncr_name(np));
4019
                        tp->ic_max_width = 0;
4020
                        tp->widedone = tp->period = 0;
4021
                }
4022
 
4023
                /* In case of a bus reset, ncr_negotiate will reset
4024
                 * the flags tp->widedone and tp->period to 0, forcing
4025
                 * a new negotiation.
4026
                 */
4027
                no_increase = 0;
4028
                if (tp->widedone == 0) {
4029
                        cmd->ic_nego = NS_WIDE;
4030
                        tp->widedone = 1;
4031
                        no_increase = 1;
4032
                }
4033
                else if (tp->period == 0) {
4034
                        cmd->ic_nego = NS_SYNC;
4035
                        tp->period = 1;
4036
                        no_increase = 1;
4037
                }
4038
 
4039
                switch (cmd->ic_nego) {
4040
                case NS_WIDE:
4041
                        /*
4042
                        **      negotiate wide transfers ?
4043
                        **      Do NOT negotiate if device only supports
4044
                        **      narrow.
4045
                        */
4046
                        if (tp->ic_max_width | np->check_integ_par) {
4047
                                nego = NS_WIDE;
4048
 
4049
                                msgptr[msglen++] = M_EXTENDED;
4050
                                msgptr[msglen++] = 2;
4051
                                msgptr[msglen++] = M_X_WIDE_REQ;
4052
                                msgptr[msglen++] = cmd->ic_nego_width & tp->ic_max_width;
4053
                        }
4054
                        else
4055
                                cmd->ic_nego_width &= tp->ic_max_width;
4056
 
4057
                        break;
4058
 
4059
                case NS_SYNC:
4060
                        /*
4061
                        **      negotiate synchronous transfers?
4062
                        **      Target must support sync transfers.
4063
                        **
4064
                        **      If period becomes longer than max, reset to async
4065
                        */
4066
 
4067
                        if (tp->inq_byte7 & INQ7_SYNC) {
4068
 
4069
                                nego = NS_SYNC;
4070
 
4071
                                msgptr[msglen++] = M_EXTENDED;
4072
                                msgptr[msglen++] = 3;
4073
                                msgptr[msglen++] = M_X_SYNC_REQ;
4074
 
4075
                                switch (cmd->ic_nego_sync) {
4076
                                case 2: /* increase the period */
4077
                                        if (!no_increase) {
4078
                                          if (tp->ic_min_sync <= 0x0A)
4079
                                              tp->ic_min_sync = 0x0C;
4080
                                          else if (tp->ic_min_sync <= 0x0C)
4081
                                              tp->ic_min_sync = 0x19;
4082
                                          else if (tp->ic_min_sync <= 0x19)
4083
                                              tp->ic_min_sync *= 2;
4084
                                          else {
4085
                                                tp->ic_min_sync = 255;
4086
                                                cmd->ic_nego_sync = 0;
4087
                                                tp->maxoffs = 0;
4088
                                           }
4089
                                        }
4090
                                        msgptr[msglen++] = tp->maxoffs?tp->ic_min_sync:0;
4091
                                        msgptr[msglen++] = tp->maxoffs;
4092
                                        break;
4093
 
4094
                                case 1: /* nego. to maximum */
4095
                                        msgptr[msglen++] = tp->maxoffs?tp->ic_min_sync:0;
4096
                                        msgptr[msglen++] = tp->maxoffs;
4097
                                        break;
4098
 
4099
                                case 0:  /* nego to async */
4100
                                default:
4101
                                        msgptr[msglen++] = 0;
4102
                                        msgptr[msglen++] = 0;
4103
                                        break;
4104
                                };
4105
                        }
4106
                        else
4107
                                cmd->ic_nego_sync = 0;
4108
                        break;
4109
 
4110
                case NS_NOCHANGE:
4111
                default:
4112
                        break;
4113
                };
4114
        };
4115
 
4116
        cp->nego_status = nego;
4117
        np->check_integ_par = 0;
4118
 
4119
        if (nego) {
4120
                tp->nego_cp = cp;
4121
                if (DEBUG_FLAGS & DEBUG_NEGO) {
4122
                        ncr_print_msg(cp, nego == NS_WIDE ?
4123
                          "wide/narrow msgout": "sync/async msgout", msgptr);
4124
                };
4125
        };
4126
 
4127
        return msglen;
4128
}
4129
#endif /* SCSI_NCR_INTEGRITY_CHECKING */
4130
 
4131
/*==========================================================
4132
**
4133
**
4134
**      Prepare the next negotiation message if needed.
4135
**
4136
**      Fill in the part of message buffer that contains the
4137
**      negotiation and the nego_status field of the CCB.
4138
**      Returns the size of the message in bytes.
4139
**
4140
**
4141
**==========================================================
4142
*/
4143
 
4144
 
4145
static int ncr_prepare_nego(ncb_p np, ccb_p cp, u_char *msgptr)
4146
{
4147
        tcb_p tp = &np->target[cp->target];
4148
        int msglen = 0;
4149
        int nego = 0;
4150
 
4151
        if (tp->inq_done) {
4152
 
4153
                /*
4154
                **      negotiate wide transfers ?
4155
                */
4156
 
4157
                if (!tp->widedone) {
4158
                        if (tp->inq_byte7 & INQ7_WIDE16) {
4159
                                nego = NS_WIDE;
4160
#ifdef SCSI_NCR_INTEGRITY_CHECKING
4161
                                if (tp->ic_done)
4162
                                         tp->usrwide &= tp->ic_max_width;
4163
#endif
4164
                        } else
4165
                                tp->widedone=1;
4166
 
4167
                };
4168
 
4169
                /*
4170
                **      negotiate synchronous transfers?
4171
                */
4172
 
4173
                if (!nego && !tp->period) {
4174
                        if (tp->inq_byte7 & INQ7_SYNC) {
4175
                                nego = NS_SYNC;
4176
#ifdef SCSI_NCR_INTEGRITY_CHECKING
4177
                                if ((tp->ic_done) &&
4178
                                              (tp->minsync < tp->ic_min_sync))
4179
                                         tp->minsync = tp->ic_min_sync;
4180
#endif
4181
                        } else {
4182
                                tp->period  =0xffff;
4183
                                PRINT_TARGET(np, cp->target);
4184
                                printk ("target did not report SYNC.\n");
4185
                        };
4186
                };
4187
        };
4188
 
4189
        switch (nego) {
4190
        case NS_SYNC:
4191
                msgptr[msglen++] = M_EXTENDED;
4192
                msgptr[msglen++] = 3;
4193
                msgptr[msglen++] = M_X_SYNC_REQ;
4194
                msgptr[msglen++] = tp->maxoffs ? tp->minsync : 0;
4195
                msgptr[msglen++] = tp->maxoffs;
4196
                break;
4197
        case NS_WIDE:
4198
                msgptr[msglen++] = M_EXTENDED;
4199
                msgptr[msglen++] = 2;
4200
                msgptr[msglen++] = M_X_WIDE_REQ;
4201
                msgptr[msglen++] = tp->usrwide;
4202
                break;
4203
        };
4204
 
4205
        cp->nego_status = nego;
4206
 
4207
        if (nego) {
4208
                tp->nego_cp = cp;
4209
                if (DEBUG_FLAGS & DEBUG_NEGO) {
4210
                        ncr_print_msg(cp, nego == NS_WIDE ?
4211
                                          "wide msgout":"sync_msgout", msgptr);
4212
                };
4213
        };
4214
 
4215
        return msglen;
4216
}
4217
 
4218
 
4219
 
4220
/*==========================================================
4221
**
4222
**
4223
**      Start execution of a SCSI command.
4224
**      This is called from the generic SCSI driver.
4225
**
4226
**
4227
**==========================================================
4228
*/
4229
static int ncr_queue_command (ncb_p np, Scsi_Cmnd *cmd)
4230
{
4231
/*      Scsi_Device        *device    = cmd->device; */
4232
        tcb_p tp                      = &np->target[cmd->target];
4233
        lcb_p lp                      = tp->lp[cmd->lun];
4234
        ccb_p cp;
4235
 
4236
        int     segments;
4237
        u_char  idmsg, *msgptr;
4238
        u_int  msglen;
4239
        int     direction;
4240
        u_int32 lastp, goalp;
4241
 
4242
        /*---------------------------------------------
4243
        **
4244
        **      Some shortcuts ...
4245
        **
4246
        **---------------------------------------------
4247
        */
4248
        if ((cmd->target == np->myaddr    ) ||
4249
                (cmd->target >= MAX_TARGET) ||
4250
                (cmd->lun    >= MAX_LUN   )) {
4251
                return(DID_BAD_TARGET);
4252
        }
4253
 
4254
        /*---------------------------------------------
4255
        **
4256
        **      Complete the 1st TEST UNIT READY command
4257
        **      with error condition if the device is
4258
        **      flagged NOSCAN, in order to speed up
4259
        **      the boot.
4260
        **
4261
        **---------------------------------------------
4262
        */
4263
        if ((cmd->cmnd[0] == 0 || cmd->cmnd[0] == 0x12) &&
4264
            (tp->usrflag & UF_NOSCAN)) {
4265
                tp->usrflag &= ~UF_NOSCAN;
4266
                return DID_BAD_TARGET;
4267
        }
4268
 
4269
        if (DEBUG_FLAGS & DEBUG_TINY) {
4270
                PRINT_ADDR(cmd);
4271
                printk ("CMD=%x ", cmd->cmnd[0]);
4272
        }
4273
 
4274
        /*---------------------------------------------------
4275
        **
4276
        **      Assign a ccb / bind cmd.
4277
        **      If resetting, shorten settle_time if necessary
4278
        **      in order to avoid spurious timeouts.
4279
        **      If resetting or no free ccb,
4280
        **      insert cmd into the waiting list.
4281
        **
4282
        **----------------------------------------------------
4283
        */
4284
        if (np->settle_time && cmd->timeout_per_command >= HZ) {
4285
                u_long tlimit = ktime_get(cmd->timeout_per_command - HZ);
4286
                if (ktime_dif(np->settle_time, tlimit) > 0)
4287
                        np->settle_time = tlimit;
4288
        }
4289
 
4290
        if (np->settle_time || !(cp=ncr_get_ccb (np, cmd->target, cmd->lun))) {
4291
                insert_into_waiting_list(np, cmd);
4292
                return(DID_OK);
4293
        }
4294
        cp->cmd = cmd;
4295
 
4296
        /*---------------------------------------------------
4297
        **
4298
        **      Enable tagged queue if asked by scsi ioctl
4299
        **
4300
        **----------------------------------------------------
4301
        */
4302
#if 0   /* This stuff was only useful for linux-1.2.13 */
4303
        if (lp && !lp->numtags && cmd->device && cmd->device->tagged_queue) {
4304
                lp->numtags = tp->usrtags;
4305
                ncr_setup_tags (np, cmd->target, cmd->lun);
4306
        }
4307
#endif
4308
 
4309
        /*----------------------------------------------------
4310
        **
4311
        **      Build the identify / tag / sdtr message
4312
        **
4313
        **----------------------------------------------------
4314
        */
4315
 
4316
        idmsg = M_IDENTIFY | cmd->lun;
4317
 
4318
        if (cp ->tag != NO_TAG ||
4319
                (cp != np->ccb && np->disc && !(tp->usrflag & UF_NODISC)))
4320
                idmsg |= 0x40;
4321
 
4322
        msgptr = cp->scsi_smsg;
4323
        msglen = 0;
4324
        msgptr[msglen++] = idmsg;
4325
 
4326
        if (cp->tag != NO_TAG) {
4327
                char order = np->order;
4328
 
4329
                /*
4330
                **      Force ordered tag if necessary to avoid timeouts
4331
                **      and to preserve interactivity.
4332
                */
4333
                if (lp && ktime_exp(lp->tags_stime)) {
4334
                        if (lp->tags_smap) {
4335
                                order = M_ORDERED_TAG;
4336
                                if ((DEBUG_FLAGS & DEBUG_TAGS)||bootverbose>2){
4337
                                        PRINT_ADDR(cmd);
4338
                                        printk("ordered tag forced.\n");
4339
                                }
4340
                        }
4341
                        lp->tags_stime = ktime_get(3*HZ);
4342
                        lp->tags_smap = lp->tags_umap;
4343
                }
4344
 
4345
                if (order == 0) {
4346
                        /*
4347
                        **      Ordered write ops, unordered read ops.
4348
                        */
4349
                        switch (cmd->cmnd[0]) {
4350
                        case 0x08:  /* READ_SMALL (6) */
4351
                        case 0x28:  /* READ_BIG  (10) */
4352
                        case 0xa8:  /* READ_HUGE (12) */
4353
                                order = M_SIMPLE_TAG;
4354
                                break;
4355
                        default:
4356
                                order = M_ORDERED_TAG;
4357
                        }
4358
                }
4359
                msgptr[msglen++] = order;
4360
                /*
4361
                **      Actual tags are numbered 1,3,5,..2*MAXTAGS+1,
4362
                **      since we may have to deal with devices that have
4363
                **      problems with #TAG 0 or too great #TAG numbers.
4364
                */
4365
                msgptr[msglen++] = (cp->tag << 1) + 1;
4366
        }
4367
 
4368
        /*----------------------------------------------------
4369
        **
4370
        **      Build the data descriptors
4371
        **
4372
        **----------------------------------------------------
4373
        */
4374
 
4375
        direction = scsi_data_direction(cmd);
4376
        if (direction != SCSI_DATA_NONE) {
4377
                segments = ncr_scatter (np, cp, cp->cmd);
4378
                if (segments < 0) {
4379
                        ncr_free_ccb(np, cp);
4380
                        return(DID_ERROR);
4381
                }
4382
        }
4383
        else {
4384
                cp->data_len = 0;
4385
                segments = 0;
4386
        }
4387
 
4388
        /*---------------------------------------------------
4389
        **
4390
        **      negotiation required?
4391
        **
4392
        **      (nego_status is filled by ncr_prepare_nego())
4393
        **
4394
        **---------------------------------------------------
4395
        */
4396
 
4397
        cp->nego_status = 0;
4398
 
4399
#ifdef SCSI_NCR_INTEGRITY_CHECKING
4400
        if ((np->check_integrity && tp->ic_done) || !np->check_integrity) {
4401
                 if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
4402
                        msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
4403
                 }
4404
        }
4405
        else if (np->check_integrity && (cmd->ic_in_progress)) {
4406
                msglen += ncr_ic_nego (np, cp, cmd, msgptr + msglen);
4407
        }
4408
        else if (np->check_integrity && cmd->ic_complete) {
4409
                /*
4410
                 * Midlayer signal to the driver that all of the scsi commands
4411
                 * for the integrity check have completed. Save the negotiated
4412
                 * parameters (extracted from sval and wval).
4413
                 */
4414
 
4415
                {
4416
                        u_char idiv;
4417
                        idiv = (tp->wval>>4) & 0x07;
4418
                        if ((tp->sval&0x1f) && idiv )
4419
                                tp->period = (((tp->sval>>5)+4)
4420
                                                *div_10M[idiv-1])/np->clock_khz;
4421
                        else
4422
                                tp->period = 0xffff;
4423
                }
4424
                /*
4425
                 * tp->period contains 10 times the transfer period,
4426
                 * which itself is 4 * the requested negotiation rate.
4427
                 */
4428
                if      (tp->period <= 250)     tp->ic_min_sync = 10;
4429
                else if (tp->period <= 303)     tp->ic_min_sync = 11;
4430
                else if (tp->period <= 500)     tp->ic_min_sync = 12;
4431
                else
4432
                                tp->ic_min_sync = (tp->period + 40 - 1) / 40;
4433
 
4434
 
4435
                /*
4436
                 * Negotiation for this target it complete.
4437
                 */
4438
                tp->ic_max_width =  (tp->wval & EWS) ? 1: 0;
4439
                tp->ic_done = 1;
4440
                tp->widedone = 1;
4441
 
4442
                printk("%s: Integrity Check Complete: \n", ncr_name(np));
4443
 
4444
                printk("%s: %s %s SCSI", ncr_name(np),
4445
                                (tp->sval&0x1f)?"SYNC":"ASYNC",
4446
                                tp->ic_max_width?"WIDE":"NARROW");
4447
 
4448
                if (tp->sval&0x1f) {
4449
                        u_long mbs = 10000 * (tp->ic_max_width + 1);
4450
 
4451
                        printk(" %d.%d  MB/s",
4452
                                (int) (mbs / tp->period), (int) (mbs % tp->period));
4453
 
4454
                        printk(" (%d ns, %d offset)\n",
4455
                                  tp->period/10, tp->sval&0x1f);
4456
                }
4457
                else
4458
                        printk(" %d MB/s. \n ", (tp->ic_max_width+1)*5);
4459
        }
4460
#else
4461
        if ((!tp->widedone || !tp->period) && !tp->nego_cp && lp) {
4462
                msglen += ncr_prepare_nego (np, cp, msgptr + msglen);
4463
        }
4464
#endif /* SCSI_NCR_INTEGRITY_CHECKING */
4465
 
4466
        /*----------------------------------------------------
4467
        **
4468
        **      Determine xfer direction.
4469
        **
4470
        **----------------------------------------------------
4471
        */
4472
        if (!cp->data_len)
4473
                direction = SCSI_DATA_NONE;
4474
 
4475
        /*
4476
        **      If data direction is UNKNOWN, speculate DATA_READ
4477
        **      but prepare alternate pointers for WRITE in case
4478
        **      of our speculation will be just wrong.
4479
        **      SCRIPTS will swap values if needed.
4480
        */
4481
        switch(direction) {
4482
        case SCSI_DATA_UNKNOWN:
4483
        case SCSI_DATA_WRITE:
4484
                goalp = NCB_SCRIPT_PHYS (np, data_out2) + 8;
4485
                if (segments <= MAX_SCATTERL)
4486
                        lastp = goalp - 8 - (segments * 16);
4487
                else {
4488
                        lastp = NCB_SCRIPTH_PHYS (np, hdata_out2);
4489
                        lastp -= (segments - MAX_SCATTERL) * 16;
4490
                }
4491
                if (direction != SCSI_DATA_UNKNOWN)
4492
                        break;
4493
                cp->phys.header.wgoalp  = cpu_to_scr(goalp);
4494
                cp->phys.header.wlastp  = cpu_to_scr(lastp);
4495
                /* fall through */
4496
        case SCSI_DATA_READ:
4497
                goalp = NCB_SCRIPT_PHYS (np, data_in2) + 8;
4498
                if (segments <= MAX_SCATTERL)
4499
                        lastp = goalp - 8 - (segments * 16);
4500
                else {
4501
                        lastp = NCB_SCRIPTH_PHYS (np, hdata_in2);
4502
                        lastp -= (segments - MAX_SCATTERL) * 16;
4503
                }
4504
                break;
4505
        default:
4506
        case SCSI_DATA_NONE:
4507
                lastp = goalp = NCB_SCRIPT_PHYS (np, no_data);
4508
                break;
4509
        }
4510
 
4511
        /*
4512
        **      Set all pointers values needed by SCRIPTS.
4513
        **      If direction is unknown, start at data_io.
4514
        */
4515
        cp->phys.header.lastp = cpu_to_scr(lastp);
4516
        cp->phys.header.goalp = cpu_to_scr(goalp);
4517
 
4518
        if (direction == SCSI_DATA_UNKNOWN)
4519
                cp->phys.header.savep =
4520
                        cpu_to_scr(NCB_SCRIPTH_PHYS (np, data_io));
4521
        else
4522
                cp->phys.header.savep= cpu_to_scr(lastp);
4523
 
4524
        /*
4525
        **      Save the initial data pointer in order to be able
4526
        **      to redo the command.
4527
        */
4528
        cp->startp = cp->phys.header.savep;
4529
 
4530
        /*----------------------------------------------------
4531
        **
4532
        **      fill in ccb
4533
        **
4534
        **----------------------------------------------------
4535
        **
4536
        **
4537
        **      physical -> virtual backlink
4538
        **      Generic SCSI command
4539
        */
4540
 
4541
        /*
4542
        **      Startqueue
4543
        */
4544
        cp->start.schedule.l_paddr   = cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
4545
        cp->restart.schedule.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, resel_dsa));
4546
        /*
4547
        **      select
4548
        */
4549
        cp->phys.select.sel_id          = cmd->target;
4550
        cp->phys.select.sel_scntl3      = tp->wval;
4551
        cp->phys.select.sel_sxfer       = tp->sval;
4552
        /*
4553
        **      message
4554
        */
4555
        cp->phys.smsg.addr              = cpu_to_scr(CCB_PHYS (cp, scsi_smsg));
4556
        cp->phys.smsg.size              = cpu_to_scr(msglen);
4557
 
4558
        /*
4559
        **      command
4560
        */
4561
        memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf)));
4562
        cp->phys.cmd.addr               = cpu_to_scr(CCB_PHYS (cp, cdb_buf[0]));
4563
        cp->phys.cmd.size               = cpu_to_scr(cmd->cmd_len);
4564
 
4565
        /*
4566
        **      status
4567
        */
4568
        cp->actualquirks                = tp->quirks;
4569
        cp->host_status                 = cp->nego_status ? HS_NEGOTIATE : HS_BUSY;
4570
        cp->scsi_status                 = S_ILLEGAL;
4571
        cp->parity_status               = 0;
4572
 
4573
        cp->xerr_status                 = XE_OK;
4574
#if 0
4575
        cp->sync_status                 = tp->sval;
4576
        cp->wide_status                 = tp->wval;
4577
#endif
4578
 
4579
        /*----------------------------------------------------
4580
        **
4581
        **      Critical region: start this job.
4582
        **
4583
        **----------------------------------------------------
4584
        */
4585
 
4586
        /*
4587
        **      activate this job.
4588
        */
4589
        cp->magic               = CCB_MAGIC;
4590
 
4591
        /*
4592
        **      insert next CCBs into start queue.
4593
        **      2 max at a time is enough to flush the CCB wait queue.
4594
        */
4595
        cp->auto_sense = 0;
4596
        if (lp)
4597
                ncr_start_next_ccb(np, lp, 2);
4598
        else
4599
                ncr_put_start_queue(np, cp);
4600
 
4601
        /*
4602
        **      Command is successfully queued.
4603
        */
4604
 
4605
        return(DID_OK);
4606
}
4607
 
4608
 
4609
/*==========================================================
4610
**
4611
**
4612
**      Insert a CCB into the start queue and wake up the
4613
**      SCRIPTS processor.
4614
**
4615
**
4616
**==========================================================
4617
*/
4618
 
4619
static void ncr_start_next_ccb(ncb_p np, lcb_p lp, int maxn)
4620
{
4621
        XPT_QUEHEAD *qp;
4622
        ccb_p cp;
4623
 
4624
        if (lp->held_ccb)
4625
                return;
4626
 
4627
        while (maxn-- && lp->queuedccbs < lp->queuedepth) {
4628
                qp = xpt_remque_head(&lp->wait_ccbq);
4629
                if (!qp)
4630
                        break;
4631
                ++lp->queuedccbs;
4632
                cp = xpt_que_entry(qp, struct ccb, link_ccbq);
4633
                xpt_insque_tail(qp, &lp->busy_ccbq);
4634
                lp->jump_ccb[cp->tag == NO_TAG ? 0 : cp->tag] =
4635
                        cpu_to_scr(CCB_PHYS (cp, restart));
4636
                ncr_put_start_queue(np, cp);
4637
        }
4638
}
4639
 
4640
static void ncr_put_start_queue(ncb_p np, ccb_p cp)
4641
{
4642
        u_short qidx;
4643
 
4644
        /*
4645
        **      insert into start queue.
4646
        */
4647
        if (!np->squeueput) np->squeueput = 1;
4648
        qidx = np->squeueput + 2;
4649
        if (qidx >= MAX_START + MAX_START) qidx = 1;
4650
 
4651
        np->scripth->tryloop [qidx] = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
4652
        MEMORY_BARRIER();
4653
        np->scripth->tryloop [np->squeueput] = cpu_to_scr(CCB_PHYS (cp, start));
4654
 
4655
        np->squeueput = qidx;
4656
        ++np->queuedccbs;
4657
        cp->queued = 1;
4658
 
4659
        if (DEBUG_FLAGS & DEBUG_QUEUE)
4660
                printk ("%s: queuepos=%d.\n", ncr_name (np), np->squeueput);
4661
 
4662
        /*
4663
        **      Script processor may be waiting for reselect.
4664
        **      Wake it up.
4665
        */
4666
        MEMORY_BARRIER();
4667
        OUTB (nc_istat, SIGP);
4668
}
4669
 
4670
 
4671
/*==========================================================
4672
**
4673
**
4674
**      Start reset process.
4675
**      If reset in progress do nothing.
4676
**      The interrupt handler will reinitialize the chip.
4677
**      The timeout handler will wait for settle_time before
4678
**      clearing it and so resuming command processing.
4679
**
4680
**
4681
**==========================================================
4682
*/
4683
static void ncr_start_reset(ncb_p np)
4684
{
4685
        if (!np->settle_time) {
4686
                (void) ncr_reset_scsi_bus(np, 1, driver_setup.settle_delay);
4687
        }
4688
 }
4689
 
4690
static int ncr_reset_scsi_bus(ncb_p np, int enab_int, int settle_delay)
4691
{
4692
        u_int32 term;
4693
        int retv = 0;
4694
 
4695
        np->settle_time = ktime_get(settle_delay * HZ);
4696
 
4697
        if (bootverbose > 1)
4698
                printk("%s: resetting, "
4699
                        "command processing suspended for %d seconds\n",
4700
                        ncr_name(np), settle_delay);
4701
 
4702
        OUTB (nc_istat, SRST);
4703
        UDELAY (100);
4704
        OUTB (nc_istat, 0);
4705
        UDELAY (2000);  /* The 895 needs time for the bus mode to settle */
4706
        if (enab_int)
4707
                OUTW (nc_sien, RST);
4708
        /*
4709
        **      Enable Tolerant, reset IRQD if present and
4710
        **      properly set IRQ mode, prior to resetting the bus.
4711
        */
4712
        OUTB (nc_stest3, TE);
4713
        OUTB (nc_dcntl, (np->rv_dcntl & IRQM));
4714
        OUTB (nc_scntl1, CRST);
4715
        UDELAY (200);
4716
 
4717
        if (!driver_setup.bus_check)
4718
                goto out;
4719
        /*
4720
        **      Check for no terminators or SCSI bus shorts to ground.
4721
        **      Read SCSI data bus, data parity bits and control signals.
4722
        **      We are expecting RESET to be TRUE and other signals to be
4723
        **      FALSE.
4724
        */
4725
 
4726
        term =  INB(nc_sstat0);
4727
        term =  ((term & 2) << 7) + ((term & 1) << 17); /* rst sdp0 */
4728
        term |= ((INB(nc_sstat2) & 0x01) << 26) |       /* sdp1     */
4729
                ((INW(nc_sbdl) & 0xff)   << 9)  |       /* d7-0     */
4730
                ((INW(nc_sbdl) & 0xff00) << 10) |       /* d15-8    */
4731
                INB(nc_sbcl);   /* req ack bsy sel atn msg cd io    */
4732
 
4733
        if (!(np->features & FE_WIDE))
4734
                term &= 0x3ffff;
4735
 
4736
        if (term != (2<<7)) {
4737
                printk("%s: suspicious SCSI data while resetting the BUS.\n",
4738
                        ncr_name(np));
4739
                printk("%s: %sdp0,d7-0,rst,req,ack,bsy,sel,atn,msg,c/d,i/o = "
4740
                        "0x%lx, expecting 0x%lx\n",
4741
                        ncr_name(np),
4742
                        (np->features & FE_WIDE) ? "dp1,d15-8," : "",
4743
                        (u_long)term, (u_long)(2<<7));
4744
                if (driver_setup.bus_check == 1)
4745
                        retv = 1;
4746
        }
4747
out:
4748
        OUTB (nc_scntl1, 0);
4749
        return retv;
4750
}
4751
 
4752
/*==========================================================
4753
**
4754
**
4755
**      Reset the SCSI BUS.
4756
**      This is called from the generic SCSI driver.
4757
**
4758
**
4759
**==========================================================
4760
*/
4761
static int ncr_reset_bus (ncb_p np, Scsi_Cmnd *cmd, int sync_reset)
4762
{
4763
/*      Scsi_Device        *device    = cmd->device; */
4764
        ccb_p cp;
4765
        int found;
4766
 
4767
/*
4768
 * Return immediately if reset is in progress.
4769
 */
4770
        if (np->settle_time) {
4771
                return SCSI_RESET_PUNT;
4772
        }
4773
/*
4774
 * Start the reset process.
4775
 * The script processor is then assumed to be stopped.
4776
 * Commands will now be queued in the waiting list until a settle
4777
 * delay of 2 seconds will be completed.
4778
 */
4779
        ncr_start_reset(np);
4780
/*
4781
 * First, look in the wakeup list
4782
 */
4783
        for (found=0, cp=np->ccb; cp; cp=cp->link_ccb) {
4784
                /*
4785
                **      look for the ccb of this command.
4786
                */
4787
                if (cp->host_status == HS_IDLE) continue;
4788
                if (cp->cmd == cmd) {
4789
                        found = 1;
4790
                        break;
4791
                }
4792
        }
4793
/*
4794
 * Then, look in the waiting list
4795
 */
4796
        if (!found && retrieve_from_waiting_list(0, np, cmd))
4797
                found = 1;
4798
/*
4799
 * Wake-up all awaiting commands with DID_RESET.
4800
 */
4801
        reset_waiting_list(np);
4802
/*
4803
 * Wake-up all pending commands with HS_RESET -> DID_RESET.
4804
 */
4805
        ncr_wakeup(np, HS_RESET);
4806
/*
4807
 * If the involved command was not in a driver queue, and the
4808
 * scsi driver told us reset is synchronous, and the command is not
4809
 * currently in the waiting list, complete it with DID_RESET status,
4810
 * in order to keep it alive.
4811
 */
4812
        if (!found && sync_reset && !retrieve_from_waiting_list(0, np, cmd)) {
4813
                cmd->result = ScsiResult(DID_RESET, 0);
4814
                ncr_queue_done_cmd(np, cmd);
4815
        }
4816
 
4817
        return SCSI_RESET_SUCCESS;
4818
}
4819
 
4820
/*==========================================================
4821
**
4822
**
4823
**      Abort an SCSI command.
4824
**      This is called from the generic SCSI driver.
4825
**
4826
**
4827
**==========================================================
4828
*/
4829
static int ncr_abort_command (ncb_p np, Scsi_Cmnd *cmd)
4830
{
4831
/*      Scsi_Device        *device    = cmd->device; */
4832
        ccb_p cp;
4833
        int found;
4834
        int retv;
4835
 
4836
/*
4837
 * First, look for the scsi command in the waiting list
4838
 */
4839
        if (remove_from_waiting_list(np, cmd)) {
4840
                cmd->result = ScsiResult(DID_ABORT, 0);
4841
                ncr_queue_done_cmd(np, cmd);
4842
                return SCSI_ABORT_SUCCESS;
4843
        }
4844
 
4845
/*
4846
 * Then, look in the wakeup list
4847
 */
4848
        for (found=0, cp=np->ccb; cp; cp=cp->link_ccb) {
4849
                /*
4850
                **      look for the ccb of this command.
4851
                */
4852
                if (cp->host_status == HS_IDLE) continue;
4853
                if (cp->cmd == cmd) {
4854
                        found = 1;
4855
                        break;
4856
                }
4857
        }
4858
 
4859
        if (!found) {
4860
                return SCSI_ABORT_NOT_RUNNING;
4861
        }
4862
 
4863
        if (np->settle_time) {
4864
                return SCSI_ABORT_SNOOZE;
4865
        }
4866
 
4867
        /*
4868
        **      If the CCB is active, patch schedule jumps for the
4869
        **      script to abort the command.
4870
        */
4871
 
4872
        switch(cp->host_status) {
4873
        case HS_BUSY:
4874
        case HS_NEGOTIATE:
4875
                printk ("%s: abort ccb=%p (cancel)\n", ncr_name (np), cp);
4876
                        cp->start.schedule.l_paddr =
4877
                                cpu_to_scr(NCB_SCRIPTH_PHYS (np, cancel));
4878
                retv = SCSI_ABORT_PENDING;
4879
                break;
4880
        case HS_DISCONNECT:
4881
                cp->restart.schedule.l_paddr =
4882
                                cpu_to_scr(NCB_SCRIPTH_PHYS (np, abort));
4883
                retv = SCSI_ABORT_PENDING;
4884
                break;
4885
        default:
4886
                retv = SCSI_ABORT_NOT_RUNNING;
4887
                break;
4888
 
4889
        }
4890
 
4891
        /*
4892
        **      If there are no requests, the script
4893
        **      processor will sleep on SEL_WAIT_RESEL.
4894
        **      Let's wake it up, since it may have to work.
4895
        */
4896
        OUTB (nc_istat, SIGP);
4897
 
4898
        return retv;
4899
}
4900
 
4901
/*==========================================================
4902
**
4903
**      Linux release module stuff.
4904
**
4905
**      Called before unloading the module
4906
**      Detach the host.
4907
**      We have to free resources and halt the NCR chip
4908
**
4909
**==========================================================
4910
*/
4911
 
4912
#ifdef MODULE
4913
static int ncr_detach(ncb_p np)
4914
{
4915
        ccb_p cp;
4916
        tcb_p tp;
4917
        lcb_p lp;
4918
        int target, lun;
4919
        int i;
4920
 
4921
        printk("%s: releasing host resources\n", ncr_name(np));
4922
 
4923
/*
4924
**      Stop the ncr_timeout process
4925
**      Set release_stage to 1 and wait that ncr_timeout() set it to 2.
4926
*/
4927
 
4928
#ifdef DEBUG_NCR53C8XX
4929
        printk("%s: stopping the timer\n", ncr_name(np));
4930
#endif
4931
        np->release_stage = 1;
4932
        for (i = 50 ; i && np->release_stage != 2 ; i--) MDELAY (100);
4933
        if (np->release_stage != 2)
4934
                printk("%s: the timer seems to be already stopped\n", ncr_name(np));
4935
        else np->release_stage = 2;
4936
 
4937
/*
4938
**      Disable chip interrupts
4939
*/
4940
 
4941
#ifdef DEBUG_NCR53C8XX
4942
        printk("%s: disabling chip interrupts\n", ncr_name(np));
4943
#endif
4944
        OUTW (nc_sien , 0);
4945
        OUTB (nc_dien , 0);
4946
 
4947
/*
4948
**      Free irq
4949
*/
4950
 
4951
#ifdef DEBUG_NCR53C8XX
4952
#ifdef __sparc__
4953
        printk("%s: freeing irq %s\n", ncr_name(np), __irq_itoa(np->irq));
4954
#else
4955
        printk("%s: freeing irq %d\n", ncr_name(np), np->irq);
4956
#endif
4957
#endif
4958
        free_irq(np->irq, np);
4959
 
4960
        /*
4961
        **      Reset NCR chip
4962
        **      Restore bios setting for automatic clock detection.
4963
        */
4964
 
4965
        printk("%s: resetting chip\n", ncr_name(np));
4966
        OUTB (nc_istat,  SRST);
4967
        UDELAY (100);
4968
        OUTB (nc_istat,  0   );
4969
 
4970
        OUTB(nc_dmode,  np->sv_dmode);
4971
        OUTB(nc_dcntl,  np->sv_dcntl);
4972
        OUTB(nc_ctest3, np->sv_ctest3);
4973
        OUTB(nc_ctest4, np->sv_ctest4);
4974
        OUTB(nc_ctest5, np->sv_ctest5);
4975
        OUTB(nc_gpcntl, np->sv_gpcntl);
4976
        OUTB(nc_stest2, np->sv_stest2);
4977
 
4978
        ncr_selectclock(np, np->sv_scntl3);
4979
 
4980
        /*
4981
        **      Release Memory mapped IO region and IO mapped region
4982
        */
4983
 
4984
#ifndef SCSI_NCR_IOMAPPED
4985
#ifdef DEBUG_NCR53C8XX
4986
        printk("%s: releasing memory mapped IO region %lx[%d]\n", ncr_name(np), (u_long) np->vaddr, 128);
4987
#endif
4988
        unmap_pci_mem((vm_offset_t) np->vaddr, (u_long) 128);
4989
#endif /* !SCSI_NCR_IOMAPPED */
4990
 
4991
#ifdef DEBUG_NCR53C8XX
4992
        printk("%s: releasing IO region %x[%d]\n", ncr_name(np), np->base_io, 128);
4993
#endif
4994
        release_region(np->base_io, 128);
4995
 
4996
        /*
4997
        **      Free allocated ccb(s)
4998
        */
4999
 
5000
        while ((cp=np->ccb->link_ccb) != NULL) {
5001
                np->ccb->link_ccb = cp->link_ccb;
5002
                if (cp->host_status) {
5003
                printk("%s: shall free an active ccb (host_status=%d)\n",
5004
                        ncr_name(np), cp->host_status);
5005
                }
5006
#ifdef DEBUG_NCR53C8XX
5007
        printk("%s: freeing ccb (%lx)\n", ncr_name(np), (u_long) cp);
5008
#endif
5009
                m_free_dma(cp, sizeof(*cp), "CCB");
5010
        }
5011
 
5012
        /*
5013
        **      Free allocated tp(s)
5014
        */
5015
 
5016
        for (target = 0; target < MAX_TARGET ; target++) {
5017
                tp=&np->target[target];
5018
                for (lun = 0 ; lun < MAX_LUN ; lun++) {
5019
                        lp = tp->lp[lun];
5020
                        if (lp) {
5021
#ifdef DEBUG_NCR53C8XX
5022
        printk("%s: freeing lp (%lx)\n", ncr_name(np), (u_long) lp);
5023
#endif
5024
                                if (lp->jump_ccb != &lp->jump_ccb_0)
5025
                                        m_free_dma(lp->jump_ccb,256,"JUMP_CCB");
5026
                                m_free_dma(lp, sizeof(*lp), "LCB");
5027
                        }
5028
                }
5029
        }
5030
 
5031
        if (np->scripth0)
5032
                m_free_dma(np->scripth0, sizeof(struct scripth), "SCRIPTH");
5033
        if (np->script0)
5034
                m_free_dma(np->script0, sizeof(struct script), "SCRIPT");
5035
        if (np->ccb)
5036
                m_free_dma(np->ccb, sizeof(struct ccb), "CCB");
5037
        m_free_dma(np, sizeof(struct ncb), "NCB");
5038
 
5039
        printk("%s: host resources successfully released\n", ncr_name(np));
5040
 
5041
        return 1;
5042
}
5043
#endif
5044
 
5045
/*==========================================================
5046
**
5047
**
5048
**      Complete execution of a SCSI command.
5049
**      Signal completion to the generic SCSI driver.
5050
**
5051
**
5052
**==========================================================
5053
*/
5054
 
5055
void ncr_complete (ncb_p np, ccb_p cp)
5056
{
5057
        Scsi_Cmnd *cmd;
5058
        tcb_p tp;
5059
        lcb_p lp;
5060
 
5061
        /*
5062
        **      Sanity check
5063
        */
5064
 
5065
        if (!cp || cp->magic != CCB_MAGIC || !cp->cmd)
5066
                return;
5067
 
5068
        /*
5069
        **      Print minimal debug information.
5070
        */
5071
 
5072
        if (DEBUG_FLAGS & DEBUG_TINY)
5073
                printk ("CCB=%lx STAT=%x/%x\n", (unsigned long)cp,
5074
                        cp->host_status,cp->scsi_status);
5075
 
5076
        /*
5077
        **      Get command, target and lun pointers.
5078
        */
5079
 
5080
        cmd = cp->cmd;
5081
        cp->cmd = NULL;
5082
        tp = &np->target[cmd->target];
5083
        lp = tp->lp[cmd->lun];
5084
 
5085
        /*
5086
        **      We donnot queue more than 1 ccb per target
5087
        **      with negotiation at any time. If this ccb was
5088
        **      used for negotiation, clear this info in the tcb.
5089
        */
5090
 
5091
        if (cp == tp->nego_cp)
5092
                tp->nego_cp = 0;
5093
 
5094
        /*
5095
        **      If auto-sense performed, change scsi status.
5096
        */
5097
        if (cp->auto_sense) {
5098
                cp->scsi_status = cp->auto_sense;
5099
        }
5100
 
5101
        /*
5102
        **      If we were recovering from queue full or performing
5103
        **      auto-sense, requeue skipped CCBs to the wait queue.
5104
        */
5105
 
5106
        if (lp && lp->held_ccb) {
5107
                if (cp == lp->held_ccb) {
5108
                        xpt_que_splice(&lp->skip_ccbq, &lp->wait_ccbq);
5109
                        xpt_que_init(&lp->skip_ccbq);
5110
                        lp->held_ccb = 0;
5111
                }
5112
        }
5113
 
5114
        /*
5115
        **      Check for parity errors.
5116
        */
5117
 
5118
        if (cp->parity_status > 1) {
5119
                PRINT_ADDR(cmd);
5120
                printk ("%d parity error(s).\n",cp->parity_status);
5121
        }
5122
 
5123
        /*
5124
        **      Check for extended errors.
5125
        */
5126
 
5127
        if (cp->xerr_status != XE_OK) {
5128
                PRINT_ADDR(cmd);
5129
                switch (cp->xerr_status) {
5130
                case XE_EXTRA_DATA:
5131
                        printk ("extraneous data discarded.\n");
5132
                        break;
5133
                case XE_BAD_PHASE:
5134
                        printk ("illegal scsi phase (4/5).\n");
5135
                        break;
5136
                default:
5137
                        printk ("extended error %d.\n", cp->xerr_status);
5138
                        break;
5139
                }
5140
                if (cp->host_status==HS_COMPLETE)
5141
                        cp->host_status = HS_FAIL;
5142
        }
5143
 
5144
        /*
5145
        **      Print out any error for debugging purpose.
5146
        */
5147
        if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
5148
                if (cp->host_status!=HS_COMPLETE || cp->scsi_status!=S_GOOD) {
5149
                        PRINT_ADDR(cmd);
5150
                        printk ("ERROR: cmd=%x host_status=%x scsi_status=%x\n",
5151
                                cmd->cmnd[0], cp->host_status, cp->scsi_status);
5152
                }
5153
        }
5154
 
5155
        /*
5156
        **      Check the status.
5157
        */
5158
        if (   (cp->host_status == HS_COMPLETE)
5159
                && (cp->scsi_status == S_GOOD ||
5160
                    cp->scsi_status == S_COND_MET)) {
5161
                /*
5162
                **      All went well (GOOD status).
5163
                **      CONDITION MET status is returned on
5164
                **      `Pre-Fetch' or `Search data' success.
5165
                */
5166
                cmd->result = ScsiResult(DID_OK, cp->scsi_status);
5167
 
5168
                /*
5169
                **      @RESID@
5170
                **      Could dig out the correct value for resid,
5171
                **      but it would be quite complicated.
5172
                */
5173
                /* if (cp->phys.header.lastp != cp->phys.header.goalp) */
5174
 
5175
                /*
5176
                **      Allocate the lcb if not yet.
5177
                */
5178
                if (!lp)
5179
                        ncr_alloc_lcb (np, cmd->target, cmd->lun);
5180
 
5181
                /*
5182
                **      On standard INQUIRY response (EVPD and CmDt
5183
                **      not set), setup logical unit according to
5184
                **      announced capabilities (we need the 1rst 7 bytes).
5185
                */
5186
                if (cmd->cmnd[0] == 0x12 && !(cmd->cmnd[1] & 0x3) &&
5187
                    cmd->cmnd[4] >= 7 && !cmd->use_sg) {
5188
                        sync_scsi_data(np, cmd);        /* SYNC the data */
5189
                        ncr_setup_lcb (np, cmd->target, cmd->lun,
5190
                                       (char *) cmd->request_buffer);
5191
                }
5192
 
5193
                tp->bytes     += cp->data_len;
5194
                tp->transfers ++;
5195
 
5196
                /*
5197
                **      If tags was reduced due to queue full,
5198
                **      increase tags if 1000 good status received.
5199
                */
5200
                if (lp && lp->usetags && lp->numtags < lp->maxtags) {
5201
                        ++lp->num_good;
5202
                        if (lp->num_good >= 1000) {
5203
                                lp->num_good = 0;
5204
                                ++lp->numtags;
5205
                                ncr_setup_tags (np, cmd->target, cmd->lun);
5206
                        }
5207
                }
5208
        } else if ((cp->host_status == HS_COMPLETE)
5209
                && (cp->scsi_status == S_CHECK_COND)) {
5210
                /*
5211
                **   Check condition code
5212
                */
5213
                cmd->result = ScsiResult(DID_OK, S_CHECK_COND);
5214
 
5215
                /*
5216
                **      Copy back sense data to caller's buffer.
5217
                */
5218
                memcpy(cmd->sense_buffer, cp->sense_buf,
5219
                       MIN(sizeof(cmd->sense_buffer), sizeof(cp->sense_buf)));
5220
 
5221
                if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
5222
                        u_char * p = (u_char*) & cmd->sense_buffer;
5223
                        int i;
5224
                        PRINT_ADDR(cmd);
5225
                        printk ("sense data:");
5226
                        for (i=0; i<14; i++) printk (" %x", *p++);
5227
                        printk (".\n");
5228
                }
5229
        } else if ((cp->host_status == HS_COMPLETE)
5230
                && (cp->scsi_status == S_CONFLICT)) {
5231
                /*
5232
                **   Reservation Conflict condition code
5233
                */
5234
                cmd->result = ScsiResult(DID_OK, S_CONFLICT);
5235
 
5236
        } else if ((cp->host_status == HS_COMPLETE)
5237
                && (cp->scsi_status == S_BUSY ||
5238
                    cp->scsi_status == S_QUEUE_FULL)) {
5239
 
5240
                /*
5241
                **   Target is busy.
5242
                */
5243
                cmd->result = ScsiResult(DID_OK, cp->scsi_status);
5244
 
5245
        } else if ((cp->host_status == HS_SEL_TIMEOUT)
5246
                || (cp->host_status == HS_TIMEOUT)) {
5247
 
5248
                /*
5249
                **   No response
5250
                */
5251
                cmd->result = ScsiResult(DID_TIME_OUT, cp->scsi_status);
5252
 
5253
        } else if (cp->host_status == HS_RESET) {
5254
 
5255
                /*
5256
                **   SCSI bus reset
5257
                */
5258
                cmd->result = ScsiResult(DID_RESET, cp->scsi_status);
5259
 
5260
        } else if (cp->host_status == HS_ABORTED) {
5261
 
5262
                /*
5263
                **   Transfer aborted
5264
                */
5265
                cmd->result = ScsiResult(DID_ABORT, cp->scsi_status);
5266
 
5267
        } else {
5268
 
5269
                /*
5270
                **  Other protocol messes
5271
                */
5272
                PRINT_ADDR(cmd);
5273
                printk ("COMMAND FAILED (%x %x) @%p.\n",
5274
                        cp->host_status, cp->scsi_status, cp);
5275
 
5276
                cmd->result = ScsiResult(DID_ERROR, cp->scsi_status);
5277
        }
5278
 
5279
        /*
5280
        **      trace output
5281
        */
5282
 
5283
        if (tp->usrflag & UF_TRACE) {
5284
                u_char * p;
5285
                int i;
5286
                PRINT_ADDR(cmd);
5287
                printk (" CMD:");
5288
                p = (u_char*) &cmd->cmnd[0];
5289
                for (i=0; i<cmd->cmd_len; i++) printk (" %x", *p++);
5290
 
5291
                if (cp->host_status==HS_COMPLETE) {
5292
                        switch (cp->scsi_status) {
5293
                        case S_GOOD:
5294
                                printk ("  GOOD");
5295
                                break;
5296
                        case S_CHECK_COND:
5297
                                printk ("  SENSE:");
5298
                                p = (u_char*) &cmd->sense_buffer;
5299
                                for (i=0; i<14; i++)
5300
                                        printk (" %x", *p++);
5301
                                break;
5302
                        default:
5303
                                printk ("  STAT: %x\n", cp->scsi_status);
5304
                                break;
5305
                        }
5306
                } else printk ("  HOSTERROR: %x", cp->host_status);
5307
                printk ("\n");
5308
        }
5309
 
5310
        /*
5311
        **      Free this ccb
5312
        */
5313
        ncr_free_ccb (np, cp);
5314
 
5315
        /*
5316
        **      requeue awaiting scsi commands for this lun.
5317
        */
5318
        if (lp && lp->queuedccbs < lp->queuedepth &&
5319
            !xpt_que_empty(&lp->wait_ccbq))
5320
                ncr_start_next_ccb(np, lp, 2);
5321
 
5322
        /*
5323
        **      requeue awaiting scsi commands for this controller.
5324
        */
5325
        if (np->waiting_list)
5326
                requeue_waiting_list(np);
5327
 
5328
        /*
5329
        **      signal completion to generic driver.
5330
        */
5331
        ncr_queue_done_cmd(np, cmd);
5332
}
5333
 
5334
/*==========================================================
5335
**
5336
**
5337
**      Signal all (or one) control block done.
5338
**
5339
**
5340
**==========================================================
5341
*/
5342
 
5343
/*
5344
**      This CCB has been skipped by the NCR.
5345
**      Queue it in the correponding unit queue.
5346
*/
5347
static void ncr_ccb_skipped(ncb_p np, ccb_p cp)
5348
{
5349
        tcb_p tp = &np->target[cp->target];
5350
        lcb_p lp = tp->lp[cp->lun];
5351
 
5352
        if (lp && cp != np->ccb) {
5353
                cp->host_status &= ~HS_SKIPMASK;
5354
                cp->start.schedule.l_paddr =
5355
                        cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
5356
                xpt_remque(&cp->link_ccbq);
5357
                xpt_insque_tail(&cp->link_ccbq, &lp->skip_ccbq);
5358
                if (cp->queued) {
5359
                        --lp->queuedccbs;
5360
                }
5361
        }
5362
        if (cp->queued) {
5363
                --np->queuedccbs;
5364
                cp->queued = 0;
5365
        }
5366
}
5367
 
5368
/*
5369
**      The NCR has completed CCBs.
5370
**      Look at the DONE QUEUE if enabled, otherwise scan all CCBs
5371
*/
5372
void ncr_wakeup_done (ncb_p np)
5373
{
5374
        ccb_p cp;
5375
#ifdef SCSI_NCR_CCB_DONE_SUPPORT
5376
        int i, j;
5377
 
5378
        i = np->ccb_done_ic;
5379
        while (1) {
5380
                j = i+1;
5381
                if (j >= MAX_DONE)
5382
                        j = 0;
5383
 
5384
                cp = np->ccb_done[j];
5385
                if (!CCB_DONE_VALID(cp))
5386
                        break;
5387
 
5388
                np->ccb_done[j] = (ccb_p) CCB_DONE_EMPTY;
5389
                np->scripth->done_queue[5*j + 4] =
5390
                                cpu_to_scr(NCB_SCRIPT_PHYS (np, done_plug));
5391
                MEMORY_BARRIER();
5392
                np->scripth->done_queue[5*i + 4] =
5393
                                cpu_to_scr(NCB_SCRIPT_PHYS (np, done_end));
5394
 
5395
                if (cp->host_status & HS_DONEMASK)
5396
                        ncr_complete (np, cp);
5397
                else if (cp->host_status & HS_SKIPMASK)
5398
                        ncr_ccb_skipped (np, cp);
5399
 
5400
                i = j;
5401
        }
5402
        np->ccb_done_ic = i;
5403
#else
5404
        cp = np->ccb;
5405
        while (cp) {
5406
                if (cp->host_status & HS_DONEMASK)
5407
                        ncr_complete (np, cp);
5408
                else if (cp->host_status & HS_SKIPMASK)
5409
                        ncr_ccb_skipped (np, cp);
5410
                cp = cp->link_ccb;
5411
        }
5412
#endif
5413
}
5414
 
5415
/*
5416
**      Complete all active CCBs.
5417
*/
5418
void ncr_wakeup (ncb_p np, u_long code)
5419
{
5420
        ccb_p cp = np->ccb;
5421
 
5422
        while (cp) {
5423
                if (cp->host_status != HS_IDLE) {
5424
                        cp->host_status = code;
5425
                        ncr_complete (np, cp);
5426
                }
5427
                cp = cp->link_ccb;
5428
        }
5429
}
5430
 
5431
/*==========================================================
5432
**
5433
**
5434
**      Start NCR chip.
5435
**
5436
**
5437
**==========================================================
5438
*/
5439
 
5440
void ncr_init (ncb_p np, int reset, char * msg, u_long code)
5441
{
5442
        int     i;
5443
 
5444
        /*
5445
        **      Reset chip if asked, otherwise just clear fifos.
5446
        */
5447
 
5448
        if (reset) {
5449
                OUTB (nc_istat,  SRST);
5450
                UDELAY (100);
5451
        }
5452
        else {
5453
                OUTB (nc_stest3, TE|CSF);
5454
                OUTONB (nc_ctest3, CLF);
5455
        }
5456
 
5457
        /*
5458
        **      Message.
5459
        */
5460
 
5461
        if (msg) printk (KERN_INFO "%s: restart (%s).\n", ncr_name (np), msg);
5462
 
5463
        /*
5464
        **      Clear Start Queue
5465
        */
5466
        np->queuedepth = MAX_START - 1; /* 1 entry needed as end marker */
5467
        for (i = 1; i < MAX_START + MAX_START; i += 2)
5468
                np->scripth0->tryloop[i] =
5469
                                cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
5470
 
5471
        /*
5472
        **      Start at first entry.
5473
        */
5474
        np->squeueput = 0;
5475
        np->script0->startpos[0] = cpu_to_scr(NCB_SCRIPTH_PHYS (np, tryloop));
5476
 
5477
        /*
5478
        **      Clear Done Queue
5479
        */
5480
        for (i = 0; i < MAX_DONE; i++) {
5481
                np->ccb_done[i] = (ccb_p) CCB_DONE_EMPTY;
5482
                np->scripth0->done_queue[5*i + 4] =
5483
                        cpu_to_scr(NCB_SCRIPT_PHYS (np, done_end));
5484
        }
5485
 
5486
        /*
5487
        **      Start at first entry.
5488
        */
5489
        np->script0->done_pos[0] = cpu_to_scr(NCB_SCRIPTH_PHYS (np,done_queue));
5490
        np->ccb_done_ic = MAX_DONE-1;
5491
        np->scripth0->done_queue[5*(MAX_DONE-1) + 4] =
5492
                        cpu_to_scr(NCB_SCRIPT_PHYS (np, done_plug));
5493
 
5494
        /*
5495
        **      Wakeup all pending jobs.
5496
        */
5497
        ncr_wakeup (np, code);
5498
 
5499
        /*
5500
        **      Init chip.
5501
        */
5502
 
5503
        OUTB (nc_istat,  0x00   );      /*  Remove Reset, abort */
5504
        UDELAY (2000);  /* The 895 needs time for the bus mode to settle */
5505
 
5506
        OUTB (nc_scntl0, np->rv_scntl0 | 0xc0);
5507
                                        /*  full arb., ena parity, par->ATN  */
5508
        OUTB (nc_scntl1, 0x00);         /*  odd parity, and remove CRST!! */
5509
 
5510
        ncr_selectclock(np, np->rv_scntl3);     /* Select SCSI clock */
5511
 
5512
        OUTB (nc_scid  , RRE|np->myaddr);       /* Adapter SCSI address */
5513
        OUTW (nc_respid, 1ul<<np->myaddr);      /* Id to respond to */
5514
        OUTB (nc_istat , SIGP   );              /*  Signal Process */
5515
        OUTB (nc_dmode , np->rv_dmode);         /* Burst length, dma mode */
5516
        OUTB (nc_ctest5, np->rv_ctest5);        /* Large fifo + large burst */
5517
 
5518
        OUTB (nc_dcntl , NOCOM|np->rv_dcntl);   /* Protect SFBR */
5519
        OUTB (nc_ctest3, np->rv_ctest3);        /* Write and invalidate */
5520
        OUTB (nc_ctest4, np->rv_ctest4);        /* Master parity checking */
5521
 
5522
        OUTB (nc_stest2, EXT|np->rv_stest2);    /* Extended Sreq/Sack filtering */
5523
        OUTB (nc_stest3, TE);                   /* TolerANT enable */
5524
        OUTB (nc_stime0, 0x0c   );              /* HTH disabled  STO 0.25 sec */
5525
 
5526
        /*
5527
        **      Disable disconnects.
5528
        */
5529
 
5530
        np->disc = 0;
5531
 
5532
        /*
5533
        **    Enable GPIO0 pin for writing if LED support.
5534
        */
5535
 
5536
        if (np->features & FE_LED0) {
5537
                OUTOFFB (nc_gpcntl, 0x01);
5538
        }
5539
 
5540
        /*
5541
        **      enable ints
5542
        */
5543
 
5544
        OUTW (nc_sien , STO|HTH|MA|SGE|UDC|RST|PAR);
5545
        OUTB (nc_dien , MDPE|BF|ABRT|SSI|SIR|IID);
5546
 
5547
        /*
5548
        **      For 895/6 enable SBMC interrupt and save current SCSI bus mode.
5549
        */
5550
        if (np->features & FE_ULTRA2) {
5551
                OUTONW (nc_sien, SBMC);
5552
                np->scsi_mode = INB (nc_stest4) & SMODE;
5553
        }
5554
 
5555
        /*
5556
        **      DEL 441 - 53C876 Rev 5 - Part Number 609-0392787/2788 - ITEM 2.
5557
        **      Disable overlapped arbitration.
5558
        **      All 896 chips are also affected by this errata.
5559
        */
5560
        if (np->device_id == PCI_DEVICE_ID_NCR_53C875)
5561
                OUTB (nc_ctest0, (1<<5));
5562
        else if (np->device_id == PCI_DEVICE_ID_NCR_53C896)
5563
                OUTB (nc_ccntl0, DPR);
5564
 
5565
        /*
5566
        **      Fill in target structure.
5567
        **      Reinitialize usrsync.
5568
        **      Reinitialize usrwide.
5569
        **      Prepare sync negotiation according to actual SCSI bus mode.
5570
        */
5571
 
5572
        for (i=0;i<MAX_TARGET;i++) {
5573
                tcb_p tp = &np->target[i];
5574
 
5575
                tp->sval    = 0;
5576
                tp->wval    = np->rv_scntl3;
5577
 
5578
                if (tp->usrsync != 255) {
5579
                        if (tp->usrsync <= np->maxsync) {
5580
                                if (tp->usrsync < np->minsync) {
5581
                                        tp->usrsync = np->minsync;
5582
                                }
5583
                        }
5584
                        else
5585
                                tp->usrsync = 255;
5586
                };
5587
 
5588
                if (tp->usrwide > np->maxwide)
5589
                        tp->usrwide = np->maxwide;
5590
 
5591
                ncr_negotiate (np, tp);
5592
        }
5593
 
5594
        /*
5595
        **    Start script processor.
5596
        */
5597
        if (np->paddr2) {
5598
                if (bootverbose)
5599
                        printk ("%s: Downloading SCSI SCRIPTS.\n",
5600
                                ncr_name(np));
5601
                OUTL (nc_scratcha, vtobus(np->script0));
5602
                OUTL_DSP (NCB_SCRIPTH_PHYS (np, start_ram));
5603
        }
5604
        else
5605
                OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
5606
}
5607
 
5608
/*==========================================================
5609
**
5610
**      Prepare the negotiation values for wide and
5611
**      synchronous transfers.
5612
**
5613
**==========================================================
5614
*/
5615
 
5616
static void ncr_negotiate (struct ncb* np, struct tcb* tp)
5617
{
5618
        /*
5619
        **      minsync unit is 4ns !
5620
        */
5621
 
5622
        u_long minsync = tp->usrsync;
5623
 
5624
        /*
5625
        **      SCSI bus mode limit
5626
        */
5627
 
5628
        if (np->scsi_mode && np->scsi_mode == SMODE_SE) {
5629
                if (minsync < 12) minsync = 12;
5630
        }
5631
 
5632
        /*
5633
        **      our limit ..
5634
        */
5635
 
5636
        if (minsync < np->minsync)
5637
                minsync = np->minsync;
5638
 
5639
        /*
5640
        **      divider limit
5641
        */
5642
 
5643
        if (minsync > np->maxsync)
5644
                minsync = 255;
5645
 
5646
        tp->minsync = minsync;
5647
        tp->maxoffs = (minsync<255 ? np->maxoffs : 0);
5648
 
5649
        /*
5650
        **      period=0: has to negotiate sync transfer
5651
        */
5652
 
5653
        tp->period=0;
5654
 
5655
        /*
5656
        **      widedone=0: has to negotiate wide transfer
5657
        */
5658
        tp->widedone=0;
5659
}
5660
 
5661
/*==========================================================
5662
**
5663
**      Get clock factor and sync divisor for a given
5664
**      synchronous factor period.
5665
**      Returns the clock factor (in sxfer) and scntl3
5666
**      synchronous divisor field.
5667
**
5668
**==========================================================
5669
*/
5670
 
5671
static void ncr_getsync(ncb_p np, u_char sfac, u_char *fakp, u_char *scntl3p)
5672
{
5673
        u_long  clk = np->clock_khz;    /* SCSI clock frequency in kHz  */
5674
        int     div = np->clock_divn;   /* Number of divisors supported */
5675
        u_long  fak;                    /* Sync factor in sxfer         */
5676
        u_long  per;                    /* Period in tenths of ns       */
5677
        u_long  kpc;                    /* (per * clk)                  */
5678
 
5679
        /*
5680
        **      Compute the synchronous period in tenths of nano-seconds
5681
        */
5682
        if      (sfac <= 10)    per = 250;
5683
        else if (sfac == 11)    per = 303;
5684
        else if (sfac == 12)    per = 500;
5685
        else                    per = 40 * sfac;
5686
 
5687
        /*
5688
        **      Look for the greatest clock divisor that allows an
5689
        **      input speed faster than the period.
5690
        */
5691
        kpc = per * clk;
5692
        while (--div >= 0)
5693
                if (kpc >= (div_10M[div] << 2)) break;
5694
 
5695
        /*
5696
        **      Calculate the lowest clock factor that allows an output
5697
        **      speed not faster than the period.
5698
        */
5699
        fak = (kpc - 1) / div_10M[div] + 1;
5700
 
5701
#if 0   /* This optimization does not seem very useful */
5702
 
5703
        per = (fak * div_10M[div]) / clk;
5704
 
5705
        /*
5706
        **      Why not to try the immediate lower divisor and to choose
5707
        **      the one that allows the fastest output speed ?
5708
        **      We dont want input speed too much greater than output speed.
5709
        */
5710
        if (div >= 1 && fak < 8) {
5711
                u_long fak2, per2;
5712
                fak2 = (kpc - 1) / div_10M[div-1] + 1;
5713
                per2 = (fak2 * div_10M[div-1]) / clk;
5714
                if (per2 < per && fak2 <= 8) {
5715
                        fak = fak2;
5716
                        per = per2;
5717
                        --div;
5718
                }
5719
        }
5720
#endif
5721
 
5722
        if (fak < 4) fak = 4;   /* Should never happen, too bad ... */
5723
 
5724
        /*
5725
        **      Compute and return sync parameters for the ncr
5726
        */
5727
        *fakp           = fak - 4;
5728
        *scntl3p        = ((div+1) << 4) + (sfac < 25 ? 0x80 : 0);
5729
}
5730
 
5731
 
5732
/*==========================================================
5733
**
5734
**      Set actual values, sync status and patch all ccbs of
5735
**      a target according to new sync/wide agreement.
5736
**
5737
**==========================================================
5738
*/
5739
 
5740
static void ncr_set_sync_wide_status (ncb_p np, u_char target)
5741
{
5742
        ccb_p cp;
5743
        tcb_p tp = &np->target[target];
5744
 
5745
        /*
5746
        **      set actual value and sync_status
5747
        */
5748
        OUTB (nc_sxfer, tp->sval);
5749
        np->sync_st = tp->sval;
5750
        OUTB (nc_scntl3, tp->wval);
5751
        np->wide_st = tp->wval;
5752
 
5753
        /*
5754
        **      patch ALL ccbs of this target.
5755
        */
5756
        for (cp = np->ccb; cp; cp = cp->link_ccb) {
5757
                if (!cp->cmd) continue;
5758
                if (cp->cmd->target != target) continue;
5759
#if 0
5760
                cp->sync_status = tp->sval;
5761
                cp->wide_status = tp->wval;
5762
#endif
5763
                cp->phys.select.sel_scntl3 = tp->wval;
5764
                cp->phys.select.sel_sxfer  = tp->sval;
5765
        };
5766
}
5767
 
5768
/*==========================================================
5769
**
5770
**      Switch sync mode for current job and it's target
5771
**
5772
**==========================================================
5773
*/
5774
 
5775
static void ncr_setsync (ncb_p np, ccb_p cp, u_char scntl3, u_char sxfer)
5776
{
5777
        Scsi_Cmnd *cmd;
5778
        tcb_p tp;
5779
        u_char target = INB (nc_sdid) & 0x0f;
5780
        u_char idiv;
5781
 
5782
        assert (cp && cp->cmd);
5783
        if (!cp) return;
5784
 
5785
        cmd = cp->cmd;
5786
        if (!cmd) return;
5787
 
5788
        assert (target == (cmd->target & 0xf));
5789
 
5790
        tp = &np->target[target];
5791
 
5792
        if (!scntl3 || !(sxfer & 0x1f))
5793
                scntl3 = np->rv_scntl3;
5794
        scntl3 = (scntl3 & 0xf0) | (tp->wval & EWS) | (np->rv_scntl3 & 0x07);
5795
 
5796
        /*
5797
        **      Deduce the value of controller sync period from scntl3.
5798
        **      period is in tenths of nano-seconds.
5799
        */
5800
 
5801
        idiv = ((scntl3 >> 4) & 0x7);
5802
        if ((sxfer & 0x1f) && idiv)
5803
                tp->period = (((sxfer>>5)+4)*div_10M[idiv-1])/np->clock_khz;
5804
        else
5805
                tp->period = 0xffff;
5806
 
5807
        /*
5808
        **       Stop there if sync parameters are unchanged
5809
        */
5810
        if (tp->sval == sxfer && tp->wval == scntl3) return;
5811
        tp->sval = sxfer;
5812
        tp->wval = scntl3;
5813
 
5814
        /*
5815
        **      Bells and whistles   ;-)
5816
        */
5817
        PRINT_TARGET(np, target);
5818
        if (sxfer & 0x01f) {
5819
                unsigned f10 = 100000 << (tp->widedone ? tp->widedone -1 : 0);
5820
                unsigned mb10 = (f10 + tp->period/2) / tp->period;
5821
                char *scsi;
5822
 
5823
                /*
5824
                **  Disable extended Sreq/Sack filtering
5825
                */
5826
                if (tp->period <= 2000) OUTOFFB (nc_stest2, EXT);
5827
 
5828
                /*
5829
                **      Bells and whistles   ;-)
5830
                */
5831
                if      (tp->period < 500)      scsi = "FAST-40";
5832
                else if (tp->period < 1000)     scsi = "FAST-20";
5833
                else if (tp->period < 2000)     scsi = "FAST-10";
5834
                else                            scsi = "FAST-5";
5835
 
5836
                printk ("%s %sSCSI %d.%d MB/s (%d ns, offset %d)\n", scsi,
5837
                        tp->widedone > 1 ? "WIDE " : "",
5838
                        mb10 / 10, mb10 % 10, tp->period / 10, sxfer & 0x1f);
5839
        } else
5840
                printk ("%sasynchronous.\n", tp->widedone > 1 ? "wide " : "");
5841
 
5842
        /*
5843
        **      set actual value and sync_status
5844
        **      patch ALL ccbs of this target.
5845
        */
5846
        ncr_set_sync_wide_status(np, target);
5847
}
5848
 
5849
/*==========================================================
5850
**
5851
**      Switch wide mode for current job and it's target
5852
**      SCSI specs say: a SCSI device that accepts a WDTR
5853
**      message shall reset the synchronous agreement to
5854
**      asynchronous mode.
5855
**
5856
**==========================================================
5857
*/
5858
 
5859
static void ncr_setwide (ncb_p np, ccb_p cp, u_char wide, u_char ack)
5860
{
5861
        Scsi_Cmnd *cmd;
5862
        u_short target = INB (nc_sdid) & 0x0f;
5863
        tcb_p tp;
5864
        u_char  scntl3;
5865
        u_char  sxfer;
5866
 
5867
        assert (cp && cp->cmd);
5868
        if (!cp) return;
5869
 
5870
        cmd = cp->cmd;
5871
        if (!cmd) return;
5872
 
5873
        assert (target == (cmd->target & 0xf));
5874
 
5875
        tp = &np->target[target];
5876
        tp->widedone  =  wide+1;
5877
        scntl3 = (tp->wval & (~EWS)) | (wide ? EWS : 0);
5878
 
5879
        sxfer = ack ? 0 : tp->sval;
5880
 
5881
        /*
5882
        **       Stop there if sync/wide parameters are unchanged
5883
        */
5884
        if (tp->sval == sxfer && tp->wval == scntl3) return;
5885
        tp->sval = sxfer;
5886
        tp->wval = scntl3;
5887
 
5888
        /*
5889
        **      Bells and whistles   ;-)
5890
        */
5891
        if (bootverbose >= 2) {
5892
                PRINT_TARGET(np, target);
5893
                if (scntl3 & EWS)
5894
                        printk ("WIDE SCSI (16 bit) enabled.\n");
5895
                else
5896
                        printk ("WIDE SCSI disabled.\n");
5897
        }
5898
 
5899
        /*
5900
        **      set actual value and sync_status
5901
        **      patch ALL ccbs of this target.
5902
        */
5903
        ncr_set_sync_wide_status(np, target);
5904
}
5905
 
5906
/*==========================================================
5907
**
5908
**      Switch tagged mode for a target.
5909
**
5910
**==========================================================
5911
*/
5912
 
5913
static void ncr_setup_tags (ncb_p np, u_char tn, u_char ln)
5914
{
5915
        tcb_p tp = &np->target[tn];
5916
        lcb_p lp = tp->lp[ln];
5917
        u_char   reqtags, maxdepth;
5918
 
5919
        /*
5920
        **      Just in case ...
5921
        */
5922
        if ((!tp) || (!lp))
5923
                return;
5924
 
5925
        /*
5926
        **      If SCSI device queue depth is not yet set, leave here.
5927
        */
5928
        if (!lp->scdev_depth)
5929
                return;
5930
 
5931
        /*
5932
        **      Donnot allow more tags than the SCSI driver can queue
5933
        **      for this device.
5934
        **      Donnot allow more tags than we can handle.
5935
        */
5936
        maxdepth = lp->scdev_depth;
5937
        if (maxdepth > lp->maxnxs)      maxdepth    = lp->maxnxs;
5938
        if (lp->maxtags > maxdepth)     lp->maxtags = maxdepth;
5939
        if (lp->numtags > maxdepth)     lp->numtags = maxdepth;
5940
 
5941
        /*
5942
        **      only devices conformant to ANSI Version >= 2
5943
        **      only devices capable of tagged commands
5944
        **      only if enabled by user ..
5945
        */
5946
        if ((lp->inq_byte7 & INQ7_QUEUE) && lp->numtags > 1) {
5947
                reqtags = lp->numtags;
5948
        } else {
5949
                reqtags = 1;
5950
        };
5951
 
5952
        /*
5953
        **      Update max number of tags
5954
        */
5955
        lp->numtags = reqtags;
5956
        if (lp->numtags > lp->maxtags)
5957
                lp->maxtags = lp->numtags;
5958
 
5959
        /*
5960
        **      If we want to switch tag mode, we must wait
5961
        **      for no CCB to be active.
5962
        */
5963
        if      (reqtags > 1 && lp->usetags) {   /* Stay in tagged mode    */
5964
                if (lp->queuedepth == reqtags)   /* Already announced      */
5965
                        return;
5966
                lp->queuedepth  = reqtags;
5967
        }
5968
        else if (reqtags <= 1 && !lp->usetags) { /* Stay in untagged mode  */
5969
                lp->queuedepth  = reqtags;
5970
                return;
5971
        }
5972
        else {                                   /* Want to switch tag mode */
5973
                if (lp->busyccbs)                /* If not yet safe, return */
5974
                        return;
5975
                lp->queuedepth  = reqtags;
5976
                lp->usetags     = reqtags > 1 ? 1 : 0;
5977
        }
5978
 
5979
        /*
5980
        **      Patch the lun mini-script, according to tag mode.
5981
        */
5982
        lp->jump_tag.l_paddr = lp->usetags?
5983
                        cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_tag)) :
5984
                        cpu_to_scr(NCB_SCRIPT_PHYS(np, resel_notag));
5985
 
5986
        /*
5987
        **      Announce change to user.
5988
        */
5989
        if (bootverbose) {
5990
                PRINT_LUN(np, tn, ln);
5991
                if (lp->usetags) {
5992
                        printk("tagged command queue depth set to %d\n", reqtags);
5993
                }
5994
                else {
5995
                        printk("tagged command queueing disabled\n");
5996
                }
5997
        }
5998
}
5999
 
6000
/*----------------------------------------------------
6001
**
6002
**      handle user commands
6003
**
6004
**----------------------------------------------------
6005
*/
6006
 
6007
#ifdef SCSI_NCR_USER_COMMAND_SUPPORT
6008
 
6009
static void ncr_usercmd (ncb_p np)
6010
{
6011
        u_char t;
6012
        tcb_p tp;
6013
 
6014
        switch (np->user.cmd) {
6015
 
6016
        case 0: return;
6017
 
6018
        case UC_SETSYNC:
6019
                for (t=0; t<MAX_TARGET; t++) {
6020
                        if (!((np->user.target>>t)&1)) continue;
6021
                        tp = &np->target[t];
6022
                        tp->usrsync = np->user.data;
6023
                        ncr_negotiate (np, tp);
6024
                };
6025
                break;
6026
 
6027
        case UC_SETTAGS:
6028
                for (t=0; t<MAX_TARGET; t++) {
6029
                        int ln;
6030
                        if (!((np->user.target>>t)&1)) continue;
6031
                        np->target[t].usrtags = np->user.data;
6032
                        for (ln = 0; ln < MAX_LUN; ln++) {
6033
                                lcb_p lp = np->target[t].lp[ln];
6034
                                if (!lp)
6035
                                        continue;
6036
                                lp->maxtags = lp->numtags = np->user.data;
6037
                                ncr_setup_tags (np, t, ln);
6038
                        }
6039
                };
6040
                break;
6041
 
6042
        case UC_SETDEBUG:
6043
#ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
6044
                ncr_debug = np->user.data;
6045
#endif
6046
                break;
6047
 
6048
        case UC_SETORDER:
6049
                np->order = np->user.data;
6050
                break;
6051
 
6052
        case UC_SETVERBOSE:
6053
                np->verbose = np->user.data;
6054
                break;
6055
 
6056
        case UC_SETWIDE:
6057
                for (t=0; t<MAX_TARGET; t++) {
6058
                        u_long size;
6059
                        if (!((np->user.target>>t)&1)) continue;
6060
                        tp = &np->target[t];
6061
                        size = np->user.data;
6062
                        if (size > np->maxwide) size=np->maxwide;
6063
                        tp->usrwide = size;
6064
                        ncr_negotiate (np, tp);
6065
                };
6066
                break;
6067
 
6068
        case UC_SETFLAG:
6069
                for (t=0; t<MAX_TARGET; t++) {
6070
                        if (!((np->user.target>>t)&1)) continue;
6071
                        tp = &np->target[t];
6072
                        tp->usrflag = np->user.data;
6073
                };
6074
                break;
6075
        }
6076
        np->user.cmd=0;
6077
}
6078
#endif
6079
 
6080
/*==========================================================
6081
**
6082
**
6083
**      ncr timeout handler.
6084
**
6085
**
6086
**==========================================================
6087
**
6088
**      Misused to keep the driver running when
6089
**      interrupts are not configured correctly.
6090
**
6091
**----------------------------------------------------------
6092
*/
6093
 
6094
static void ncr_timeout (ncb_p np)
6095
{
6096
        u_long  thistime = ktime_get(0);
6097
 
6098
        /*
6099
        **      If release process in progress, let's go
6100
        **      Set the release stage from 1 to 2 to synchronize
6101
        **      with the release process.
6102
        */
6103
 
6104
        if (np->release_stage) {
6105
                if (np->release_stage == 1) np->release_stage = 2;
6106
                return;
6107
        }
6108
 
6109
        np->timer.expires = ktime_get(SCSI_NCR_TIMER_INTERVAL);
6110
        add_timer(&np->timer);
6111
 
6112
        /*
6113
        **      If we are resetting the ncr, wait for settle_time before
6114
        **      clearing it. Then command processing will be resumed.
6115
        */
6116
        if (np->settle_time) {
6117
                if (np->settle_time <= thistime) {
6118
                        if (bootverbose > 1)
6119
                                printk("%s: command processing resumed\n", ncr_name(np));
6120
                        np->settle_time = 0;
6121
                        np->disc        = 1;
6122
                        requeue_waiting_list(np);
6123
                }
6124
                return;
6125
        }
6126
 
6127
        /*
6128
        **      Since the generic scsi driver only allows us 0.5 second
6129
        **      to perform abort of a command, we must look at ccbs about
6130
        **      every 0.25 second.
6131
        */
6132
        if (np->lasttime + 4*HZ < thistime) {
6133
                /*
6134
                **      block ncr interrupts
6135
                */
6136
                np->lasttime = thistime;
6137
        }
6138
 
6139
#ifdef SCSI_NCR_BROKEN_INTR
6140
        if (INB(nc_istat) & (INTF|SIP|DIP)) {
6141
 
6142
                /*
6143
                **      Process pending interrupts.
6144
                */
6145
                if (DEBUG_FLAGS & DEBUG_TINY) printk ("{");
6146
                ncr_exception (np);
6147
                if (DEBUG_FLAGS & DEBUG_TINY) printk ("}");
6148
        }
6149
#endif /* SCSI_NCR_BROKEN_INTR */
6150
}
6151
 
6152
/*==========================================================
6153
**
6154
**      log message for real hard errors
6155
**
6156
**      "ncr0 targ 0?: ERROR (ds:si) (so-si-sd) (sxfer/scntl3) @ name (dsp:dbc)."
6157
**      "             reg: r0 r1 r2 r3 r4 r5 r6 ..... rf."
6158
**
6159
**      exception register:
6160
**              ds:     dstat
6161
**              si:     sist
6162
**
6163
**      SCSI bus lines:
6164
**              so:     control lines as driver by NCR.
6165
**              si:     control lines as seen by NCR.
6166
**              sd:     scsi data lines as seen by NCR.
6167
**
6168
**      wide/fastmode:
6169
**              sxfer:  (see the manual)
6170
**              scntl3: (see the manual)
6171
**
6172
**      current script command:
6173
**              dsp:    script address (relative to start of script).
6174
**              dbc:    first word of script command.
6175
**
6176
**      First 16 register of the chip:
6177
**              r0..rf
6178
**
6179
**==========================================================
6180
*/
6181
 
6182
static void ncr_log_hard_error(ncb_p np, u_short sist, u_char dstat)
6183
{
6184
        u_int32 dsp;
6185
        int     script_ofs;
6186
        int     script_size;
6187
        char    *script_name;
6188
        u_char  *script_base;
6189
        int     i;
6190
 
6191
        dsp     = INL (nc_dsp);
6192
 
6193
        if (dsp > np->p_script && dsp <= np->p_script + sizeof(struct script)) {
6194
                script_ofs      = dsp - np->p_script;
6195
                script_size     = sizeof(struct script);
6196
                script_base     = (u_char *) np->script0;
6197
                script_name     = "script";
6198
        }
6199
        else if (np->p_scripth < dsp &&
6200
                 dsp <= np->p_scripth + sizeof(struct scripth)) {
6201
                script_ofs      = dsp - np->p_scripth;
6202
                script_size     = sizeof(struct scripth);
6203
                script_base     = (u_char *) np->scripth0;
6204
                script_name     = "scripth";
6205
        } else {
6206
                script_ofs      = dsp;
6207
                script_size     = 0;
6208
                script_base     = 0;
6209
                script_name     = "mem";
6210
        }
6211
 
6212
        printk ("%s:%d: ERROR (%x:%x) (%x-%x-%x) (%x/%x) @ (%s %x:%08x).\n",
6213
                ncr_name (np), (unsigned)INB (nc_sdid)&0x0f, dstat, sist,
6214
                (unsigned)INB (nc_socl), (unsigned)INB (nc_sbcl), (unsigned)INB (nc_sbdl),
6215
                (unsigned)INB (nc_sxfer),(unsigned)INB (nc_scntl3), script_name, script_ofs,
6216
                (unsigned)INL (nc_dbc));
6217
 
6218
        if (((script_ofs & 3) == 0) &&
6219
            (unsigned)script_ofs < script_size) {
6220
                printk ("%s: script cmd = %08x\n", ncr_name(np),
6221
                        scr_to_cpu((int) *(ncrcmd *)(script_base + script_ofs)));
6222
        }
6223
 
6224
        printk ("%s: regdump:", ncr_name(np));
6225
        for (i=0; i<16;i++)
6226
            printk (" %02x", (unsigned)INB_OFF(i));
6227
        printk (".\n");
6228
}
6229
 
6230
/*============================================================
6231
**
6232
**      ncr chip exception handler.
6233
**
6234
**============================================================
6235
**
6236
**      In normal cases, interrupt conditions occur one at a
6237
**      time. The ncr is able to stack in some extra registers
6238
**      other interrupts that will occurs after the first one.
6239
**      But severall interrupts may occur at the same time.
6240
**
6241
**      We probably should only try to deal with the normal
6242
**      case, but it seems that multiple interrupts occur in
6243
**      some cases that are not abnormal at all.
6244
**
6245
**      The most frequent interrupt condition is Phase Mismatch.
6246
**      We should want to service this interrupt quickly.
6247
**      A SCSI parity error may be delivered at the same time.
6248
**      The SIR interrupt is not very frequent in this driver,
6249
**      since the INTFLY is likely used for command completion
6250
**      signaling.
6251
**      The Selection Timeout interrupt may be triggered with
6252
**      IID and/or UDC.
6253
**      The SBMC interrupt (SCSI Bus Mode Change) may probably
6254
**      occur at any time.
6255
**
6256
**      This handler try to deal as cleverly as possible with all
6257
**      the above.
6258
**
6259
**============================================================
6260
*/
6261
 
6262
void ncr_exception (ncb_p np)
6263
{
6264
        u_char  istat, dstat;
6265
        u_short sist;
6266
        int     i;
6267
 
6268
        /*
6269
        **      interrupt on the fly ?
6270
        **      Since the global header may be copied back to a CCB
6271
        **      using a posted PCI memory write, the last operation on
6272
        **      the istat register is a READ in order to flush posted
6273
        **      PCI write commands.
6274
        */
6275
        istat = INB (nc_istat);
6276
        if (istat & INTF) {
6277
                OUTB (nc_istat, (istat & SIGP) | INTF);
6278
                istat = INB (nc_istat);
6279
                if (DEBUG_FLAGS & DEBUG_TINY) printk ("F ");
6280
                ncr_wakeup_done (np);
6281
        };
6282
 
6283
        if (!(istat & (SIP|DIP)))
6284
                return;
6285
 
6286
        if (istat & CABRT)
6287
                OUTB (nc_istat, CABRT);
6288
 
6289
        /*
6290
        **      Steinbach's Guideline for Systems Programming:
6291
        **      Never test for an error condition you don't know how to handle.
6292
        */
6293
 
6294
        sist  = (istat & SIP) ? INW (nc_sist)  : 0;
6295
        dstat = (istat & DIP) ? INB (nc_dstat) : 0;
6296
 
6297
        if (DEBUG_FLAGS & DEBUG_TINY)
6298
                printk ("<%d|%x:%x|%x:%x>",
6299
                        (int)INB(nc_scr0),
6300
                        dstat,sist,
6301
                        (unsigned)INL(nc_dsp),
6302
                        (unsigned)INL(nc_dbc));
6303
 
6304
        /*========================================================
6305
        **      First, interrupts we want to service cleanly.
6306
        **
6307
        **      Phase mismatch is the most frequent interrupt, and
6308
        **      so we have to service it as quickly and as cleanly
6309
        **      as possible.
6310
        **      Programmed interrupts are rarely used in this driver,
6311
        **      but we must handle them cleanly anyway.
6312
        **      We try to deal with PAR and SBMC combined with
6313
        **      some other interrupt(s).
6314
        **=========================================================
6315
        */
6316
 
6317
        if (!(sist  & (STO|GEN|HTH|SGE|UDC|RST)) &&
6318
            !(dstat & (MDPE|BF|ABRT|IID))) {
6319
                if ((sist & SBMC) && ncr_int_sbmc (np))
6320
                        return;
6321
                if ((sist & PAR)  && ncr_int_par  (np))
6322
                        return;
6323
                if (sist & MA) {
6324
                        ncr_int_ma (np);
6325
                        return;
6326
                }
6327
                if (dstat & SIR) {
6328
                        ncr_int_sir (np);
6329
                        return;
6330
                }
6331
                /*
6332
                **  DEL 397 - 53C875 Rev 3 - Part Number 609-0392410 - ITEM 2.
6333
                */
6334
                if (!(sist & (SBMC|PAR)) && !(dstat & SSI)) {
6335
                        printk( "%s: unknown interrupt(s) ignored, "
6336
                                "ISTAT=%x DSTAT=%x SIST=%x\n",
6337
                                ncr_name(np), istat, dstat, sist);
6338
                        return;
6339
                }
6340
                OUTONB_STD ();
6341
                return;
6342
        };
6343
 
6344
        /*========================================================
6345
        **      Now, interrupts that need some fixing up.
6346
        **      Order and multiple interrupts is so less important.
6347
        **
6348
        **      If SRST has been asserted, we just reset the chip.
6349
        **
6350
        **      Selection is intirely handled by the chip. If the
6351
        **      chip says STO, we trust it. Seems some other
6352
        **      interrupts may occur at the same time (UDC, IID), so
6353
        **      we ignore them. In any case we do enough fix-up
6354
        **      in the service routine.
6355
        **      We just exclude some fatal dma errors.
6356
        **=========================================================
6357
        */
6358
 
6359
        if (sist & RST) {
6360
                ncr_init (np, 1, bootverbose ? "scsi reset" : NULL, HS_RESET);
6361
                return;
6362
        };
6363
 
6364
        if ((sist & STO) &&
6365
                !(dstat & (MDPE|BF|ABRT))) {
6366
        /*
6367
        **      DEL 397 - 53C875 Rev 3 - Part Number 609-0392410 - ITEM 1.
6368
        */
6369
                OUTONB (nc_ctest3, CLF);
6370
 
6371
                ncr_int_sto (np);
6372
                return;
6373
        };
6374
 
6375
        /*=========================================================
6376
        **      Now, interrupts we are not able to recover cleanly.
6377
        **      (At least for the moment).
6378
        **
6379
        **      Do the register dump.
6380
        **      Log message for real hard errors.
6381
        **      Clear all fifos.
6382
        **      For MDPE, BF, ABORT, IID, SGE and HTH we reset the
6383
        **      BUS and the chip.
6384
        **      We are more soft for UDC.
6385
        **=========================================================
6386
        */
6387
 
6388
        if (ktime_exp(np->regtime)) {
6389
                np->regtime = ktime_get(10*HZ);
6390
                for (i = 0; i<sizeof(np->regdump); i++)
6391
                        ((char*)&np->regdump)[i] = INB_OFF(i);
6392
                np->regdump.nc_dstat = dstat;
6393
                np->regdump.nc_sist  = sist;
6394
        };
6395
 
6396
        ncr_log_hard_error(np, sist, dstat);
6397
 
6398
        printk ("%s: have to clear fifos.\n", ncr_name (np));
6399
        OUTB (nc_stest3, TE|CSF);
6400
        OUTONB (nc_ctest3, CLF);
6401
 
6402
        if ((sist & (SGE)) ||
6403
                (dstat & (MDPE|BF|ABRT|IID))) {
6404
                ncr_start_reset(np);
6405
                return;
6406
        };
6407
 
6408
        if (sist & HTH) {
6409
                printk ("%s: handshake timeout\n", ncr_name(np));
6410
                ncr_start_reset(np);
6411
                return;
6412
        };
6413
 
6414
        if (sist & UDC) {
6415
                printk ("%s: unexpected disconnect\n", ncr_name(np));
6416
                OUTB (HS_PRT, HS_UNEXPECTED);
6417
                OUTL_DSP (NCB_SCRIPT_PHYS (np, cleanup));
6418
                return;
6419
        };
6420
 
6421
        /*=========================================================
6422
        **      We just miss the cause of the interrupt. :(
6423
        **      Print a message. The timeout will do the real work.
6424
        **=========================================================
6425
        */
6426
        printk ("%s: unknown interrupt\n", ncr_name(np));
6427
}
6428
 
6429
/*==========================================================
6430
**
6431
**      ncr chip exception handler for selection timeout
6432
**
6433
**==========================================================
6434
**
6435
**      There seems to be a bug in the 53c810.
6436
**      Although a STO-Interrupt is pending,
6437
**      it continues executing script commands.
6438
**      But it will fail and interrupt (IID) on
6439
**      the next instruction where it's looking
6440
**      for a valid phase.
6441
**
6442
**----------------------------------------------------------
6443
*/
6444
 
6445
void ncr_int_sto (ncb_p np)
6446
{
6447
        u_long dsa;
6448
        ccb_p cp;
6449
        if (DEBUG_FLAGS & DEBUG_TINY) printk ("T");
6450
 
6451
        /*
6452
        **      look for ccb and set the status.
6453
        */
6454
 
6455
        dsa = INL (nc_dsa);
6456
        cp = np->ccb;
6457
        while (cp && (CCB_PHYS (cp, phys) != dsa))
6458
                cp = cp->link_ccb;
6459
 
6460
        if (cp) {
6461
                cp-> host_status = HS_SEL_TIMEOUT;
6462
                ncr_complete (np, cp);
6463
        };
6464
 
6465
        /*
6466
        **      repair start queue and jump to start point.
6467
        */
6468
 
6469
        OUTL_DSP (NCB_SCRIPTH_PHYS (np, sto_restart));
6470
        return;
6471
}
6472
 
6473
/*==========================================================
6474
**
6475
**      ncr chip exception handler for SCSI bus mode change
6476
**
6477
**==========================================================
6478
**
6479
**      spi2-r12 11.2.3 says a transceiver mode change must
6480
**      generate a reset event and a device that detects a reset
6481
**      event shall initiate a hard reset. It says also that a
6482
**      device that detects a mode change shall set data transfer
6483
**      mode to eight bit asynchronous, etc...
6484
**      So, just resetting should be enough.
6485
**
6486
**
6487
**----------------------------------------------------------
6488
*/
6489
 
6490
static int ncr_int_sbmc (ncb_p np)
6491
{
6492
        u_char scsi_mode = INB (nc_stest4) & SMODE;
6493
 
6494
        if (scsi_mode != np->scsi_mode) {
6495
                printk("%s: SCSI bus mode change from %x to %x.\n",
6496
                        ncr_name(np), np->scsi_mode, scsi_mode);
6497
 
6498
                np->scsi_mode = scsi_mode;
6499
 
6500
 
6501
                /*
6502
                **      Suspend command processing for 1 second and
6503
                **      reinitialize all except the chip.
6504
                */
6505
                np->settle_time = ktime_get(1*HZ);
6506
                ncr_init (np, 0, bootverbose ? "scsi mode change" : NULL, HS_RESET);
6507
                return 1;
6508
        }
6509
        return 0;
6510
}
6511
 
6512
/*==========================================================
6513
**
6514
**      ncr chip exception handler for SCSI parity error.
6515
**
6516
**==========================================================
6517
**
6518
**
6519
**----------------------------------------------------------
6520
*/
6521
 
6522
static int ncr_int_par (ncb_p np)
6523
{
6524
        u_char  hsts    = INB (HS_PRT);
6525
        u_int32 dbc     = INL (nc_dbc);
6526
        u_char  sstat1  = INB (nc_sstat1);
6527
        int phase       = -1;
6528
        int msg         = -1;
6529
        u_int32 jmp;
6530
 
6531
        printk("%s: SCSI parity error detected: SCR1=%d DBC=%x SSTAT1=%x\n",
6532
                ncr_name(np), hsts, dbc, sstat1);
6533
 
6534
        /*
6535
         *      Ignore the interrupt if the NCR is not connected
6536
         *      to the SCSI bus, since the right work should have
6537
         *      been done on unexpected disconnection handling.
6538
         */
6539
        if (!(INB (nc_scntl1) & ISCON))
6540
                return 0;
6541
 
6542
        /*
6543
         *      If the nexus is not clearly identified, reset the bus.
6544
         *      We will try to do better later.
6545
         */
6546
        if (hsts & HS_INVALMASK)
6547
                goto reset_all;
6548
 
6549
        /*
6550
         *      If the SCSI parity error occurs in MSG IN phase, prepare a
6551
         *      MSG PARITY message. Otherwise, prepare a INITIATOR DETECTED
6552
         *      ERROR message and let the device decide to retry the command
6553
         *      or to terminate with check condition. If we were in MSG IN
6554
         *      phase waiting for the response of a negotiation, we will
6555
         *      get SIR_NEGO_FAILED at dispatch.
6556
         */
6557
        if (!(dbc & 0xc0000000))
6558
                phase = (dbc >> 24) & 7;
6559
        if (phase == 7)
6560
                msg = M_PARITY;
6561
        else
6562
                msg = M_ID_ERROR;
6563
 
6564
#ifdef SCSI_NCR_INTEGRITY_CHECKING
6565
        /*
6566
        **      Save error message. For integrity check use only.
6567
        */
6568
        if (np->check_integrity)
6569
                np->check_integ_par = msg;
6570
#endif
6571
 
6572
        /*
6573
         *      If the NCR stopped on a MOVE ^ DATA_IN, we jump to a
6574
         *      script that will ignore all data in bytes until phase
6575
         *      change, since we are not sure the chip will wait the phase
6576
         *      change prior to delivering the interrupt.
6577
         */
6578
        if (phase == 1)
6579
                jmp = NCB_SCRIPTH_PHYS (np, par_err_data_in);
6580
        else
6581
                jmp = NCB_SCRIPTH_PHYS (np, par_err_other);
6582
 
6583
        OUTONB (nc_ctest3, CLF );       /* clear dma fifo  */
6584
        OUTB (nc_stest3, TE|CSF);       /* clear scsi fifo */
6585
 
6586
        np->msgout[0] = msg;
6587
        OUTL_DSP (jmp);
6588
        return 1;
6589
 
6590
reset_all:
6591
        ncr_start_reset(np);
6592
        return 1;
6593
}
6594
 
6595
/*==========================================================
6596
**
6597
**
6598
**      ncr chip exception handler for phase errors.
6599
**
6600
**
6601
**==========================================================
6602
**
6603
**      We have to construct a new transfer descriptor,
6604
**      to transfer the rest of the current block.
6605
**
6606
**----------------------------------------------------------
6607
*/
6608
 
6609
static void ncr_int_ma (ncb_p np)
6610
{
6611
        u_int32 dbc;
6612
        u_int32 rest;
6613
        u_int32 dsp;
6614
        u_int32 dsa;
6615
        u_int32 nxtdsp;
6616
        u_int32 newtmp;
6617
        u_int32 *vdsp;
6618
        u_int32 oadr, olen;
6619
        u_int32 *tblp;
6620
        ncrcmd *newcmd;
6621
        u_char  cmd, sbcl;
6622
        ccb_p   cp;
6623
 
6624
        dsp     = INL (nc_dsp);
6625
        dbc     = INL (nc_dbc);
6626
        sbcl    = INB (nc_sbcl);
6627
 
6628
        cmd     = dbc >> 24;
6629
        rest    = dbc & 0xffffff;
6630
 
6631
        /*
6632
        **      Take into account dma fifo and various buffers and latches,
6633
        **      only if the interrupted phase is an OUTPUT phase.
6634
        */
6635
 
6636
        if ((cmd & 1) == 0) {
6637
                u_char  ctest5, ss0, ss2;
6638
                u_short delta;
6639
 
6640
                ctest5 = (np->rv_ctest5 & DFS) ? INB (nc_ctest5) : 0;
6641
                if (ctest5 & DFS)
6642
                        delta=(((ctest5 << 8) | (INB (nc_dfifo) & 0xff)) - rest) & 0x3ff;
6643
                else
6644
                        delta=(INB (nc_dfifo) - rest) & 0x7f;
6645
 
6646
                /*
6647
                **      The data in the dma fifo has not been transferred to
6648
                **      the target -> add the amount to the rest
6649
                **      and clear the data.
6650
                **      Check the sstat2 register in case of wide transfer.
6651
                */
6652
 
6653
                rest += delta;
6654
                ss0  = INB (nc_sstat0);
6655
                if (ss0 & OLF) rest++;
6656
                if (ss0 & ORF) rest++;
6657
                if (INB(nc_scntl3) & EWS) {
6658
                        ss2 = INB (nc_sstat2);
6659
                        if (ss2 & OLF1) rest++;
6660
                        if (ss2 & ORF1) rest++;
6661
                };
6662
 
6663
                if (DEBUG_FLAGS & (DEBUG_TINY|DEBUG_PHASE))
6664
                        printk ("P%x%x RL=%d D=%d SS0=%x ", cmd&7, sbcl&7,
6665
                                (unsigned) rest, (unsigned) delta, ss0);
6666
 
6667
        } else  {
6668
                if (DEBUG_FLAGS & (DEBUG_TINY|DEBUG_PHASE))
6669
                        printk ("P%x%x RL=%d ", cmd&7, sbcl&7, rest);
6670
        }
6671
 
6672
        /*
6673
        **      Clear fifos.
6674
        */
6675
        OUTONB (nc_ctest3, CLF );       /* clear dma fifo  */
6676
        OUTB (nc_stest3, TE|CSF);       /* clear scsi fifo */
6677
 
6678
        /*
6679
        **      locate matching cp.
6680
        **      if the interrupted phase is DATA IN or DATA OUT,
6681
        **      trust the global header.
6682
        */
6683
        dsa = INL (nc_dsa);
6684
        if (!(cmd & 6)) {
6685
                cp = np->header.cp;
6686
                if (CCB_PHYS(cp, phys) != dsa)
6687
                        cp = 0;
6688
        } else {
6689
                cp  = np->ccb;
6690
                while (cp && (CCB_PHYS (cp, phys) != dsa))
6691
                        cp = cp->link_ccb;
6692
        }
6693
 
6694
        /*
6695
        **      try to find the interrupted script command,
6696
        **      and the address at which to continue.
6697
        */
6698
        vdsp    = 0;
6699
        nxtdsp  = 0;
6700
        if      (dsp >  np->p_script &&
6701
                 dsp <= np->p_script + sizeof(struct script)) {
6702
                vdsp = (u_int32 *)((char*)np->script0 + (dsp-np->p_script-8));
6703
                nxtdsp = dsp;
6704
        }
6705
        else if (dsp >  np->p_scripth &&
6706
                 dsp <= np->p_scripth + sizeof(struct scripth)) {
6707
                vdsp = (u_int32 *)((char*)np->scripth0 + (dsp-np->p_scripth-8));
6708
                nxtdsp = dsp;
6709
        }
6710
        else if (cp) {
6711
                if      (dsp == CCB_PHYS (cp, patch[2])) {
6712
                        vdsp = &cp->patch[0];
6713
                        nxtdsp = scr_to_cpu(vdsp[3]);
6714
                }
6715
                else if (dsp == CCB_PHYS (cp, patch[6])) {
6716
                        vdsp = &cp->patch[4];
6717
                        nxtdsp = scr_to_cpu(vdsp[3]);
6718
                }
6719
        }
6720
 
6721
        /*
6722
        **      log the information
6723
        */
6724
 
6725
        if (DEBUG_FLAGS & DEBUG_PHASE) {
6726
                printk ("\nCP=%p CP2=%p DSP=%x NXT=%x VDSP=%p CMD=%x ",
6727
                        cp, np->header.cp,
6728
                        (unsigned)dsp,
6729
                        (unsigned)nxtdsp, vdsp, cmd);
6730
        };
6731
 
6732
        /*
6733
        **      cp=0 means that the DSA does not point to a valid control
6734
        **      block. This should not happen since we donnot use multi-byte
6735
        **      move while we are being reselected ot after command complete.
6736
        **      We are not able to recover from such a phase error.
6737
        */
6738
        if (!cp) {
6739
                printk ("%s: SCSI phase error fixup: "
6740
                        "CCB already dequeued (0x%08lx)\n",
6741
                        ncr_name (np), (u_long) np->header.cp);
6742
                goto reset_all;
6743
        }
6744
 
6745
        /*
6746
        **      get old startaddress and old length.
6747
        */
6748
 
6749
        oadr = scr_to_cpu(vdsp[1]);
6750
 
6751
        if (cmd & 0x10) {       /* Table indirect */
6752
                tblp = (u_int32 *) ((char*) &cp->phys + oadr);
6753
                olen = scr_to_cpu(tblp[0]);
6754
                oadr = scr_to_cpu(tblp[1]);
6755
        } else {
6756
                tblp = (u_int32 *) 0;
6757
                olen = scr_to_cpu(vdsp[0]) & 0xffffff;
6758
        };
6759
 
6760
        if (DEBUG_FLAGS & DEBUG_PHASE) {
6761
                printk ("OCMD=%x\nTBLP=%p OLEN=%x OADR=%x\n",
6762
                        (unsigned) (scr_to_cpu(vdsp[0]) >> 24),
6763
                        tblp,
6764
                        (unsigned) olen,
6765
                        (unsigned) oadr);
6766
        };
6767
 
6768
        /*
6769
        **      check cmd against assumed interrupted script command.
6770
        */
6771
 
6772
        if (cmd != (scr_to_cpu(vdsp[0]) >> 24)) {
6773
                PRINT_ADDR(cp->cmd);
6774
                printk ("internal error: cmd=%02x != %02x=(vdsp[0] >> 24)\n",
6775
                        (unsigned)cmd, (unsigned)scr_to_cpu(vdsp[0]) >> 24);
6776
 
6777
                goto reset_all;
6778
        }
6779
 
6780
        /*
6781
        **      cp != np->header.cp means that the header of the CCB
6782
        **      currently being processed has not yet been copied to
6783
        **      the global header area. That may happen if the device did
6784
        **      not accept all our messages after having been selected.
6785
        */
6786
        if (cp != np->header.cp) {
6787
                printk ("%s: SCSI phase error fixup: "
6788
                        "CCB address mismatch (0x%08lx != 0x%08lx)\n",
6789
                        ncr_name (np), (u_long) cp, (u_long) np->header.cp);
6790
        }
6791
 
6792
        /*
6793
        **      if old phase not dataphase, leave here.
6794
        */
6795
 
6796
        if (cmd & 0x06) {
6797
                PRINT_ADDR(cp->cmd);
6798
                printk ("phase change %x-%x %d@%08x resid=%d.\n",
6799
                        cmd&7, sbcl&7, (unsigned)olen,
6800
                        (unsigned)oadr, (unsigned)rest);
6801
                goto unexpected_phase;
6802
        };
6803
 
6804
        /*
6805
        **      choose the correct patch area.
6806
        **      if savep points to one, choose the other.
6807
        */
6808
 
6809
        newcmd = cp->patch;
6810
        newtmp = CCB_PHYS (cp, patch);
6811
        if (newtmp == scr_to_cpu(cp->phys.header.savep)) {
6812
                newcmd = &cp->patch[4];
6813
                newtmp = CCB_PHYS (cp, patch[4]);
6814
        }
6815
 
6816
        /*
6817
        **      fillin the commands
6818
        */
6819
 
6820
        newcmd[0] = cpu_to_scr(((cmd & 0x0f) << 24) | rest);
6821
        newcmd[1] = cpu_to_scr(oadr + olen - rest);
6822
        newcmd[2] = cpu_to_scr(SCR_JUMP);
6823
        newcmd[3] = cpu_to_scr(nxtdsp);
6824
 
6825
        if (DEBUG_FLAGS & DEBUG_PHASE) {
6826
                PRINT_ADDR(cp->cmd);
6827
                printk ("newcmd[%d] %x %x %x %x.\n",
6828
                        (int) (newcmd - cp->patch),
6829
                        (unsigned)scr_to_cpu(newcmd[0]),
6830
                        (unsigned)scr_to_cpu(newcmd[1]),
6831
                        (unsigned)scr_to_cpu(newcmd[2]),
6832
                        (unsigned)scr_to_cpu(newcmd[3]));
6833
        }
6834
        /*
6835
        **      fake the return address (to the patch).
6836
        **      and restart script processor at dispatcher.
6837
        */
6838
        OUTL (nc_temp, newtmp);
6839
        OUTL_DSP (NCB_SCRIPT_PHYS (np, dispatch));
6840
        return;
6841
 
6842
        /*
6843
        **      Unexpected phase changes that occurs when the current phase
6844
        **      is not a DATA IN or DATA OUT phase are due to error conditions.
6845
        **      Such event may only happen when the SCRIPTS is using a
6846
        **      multibyte SCSI MOVE.
6847
        **
6848
        **      Phase change            Some possible cause
6849
        **
6850
        **      COMMAND  --> MSG IN     SCSI parity error detected by target.
6851
        **      COMMAND  --> STATUS     Bad command or refused by target.
6852
        **      MSG OUT  --> MSG IN     Message rejected by target.
6853
        **      MSG OUT  --> COMMAND    Bogus target that discards extended
6854
        **                              negotiation messages.
6855
        **
6856
        **      The code below does not care of the new phase and so
6857
        **      trusts the target. Why to annoy it ?
6858
        **      If the interrupted phase is COMMAND phase, we restart at
6859
        **      dispatcher.
6860
        **      If a target does not get all the messages after selection,
6861
        **      the code assumes blindly that the target discards extended
6862
        **      messages and clears the negotiation status.
6863
        **      If the target does not want all our response to negotiation,
6864
        **      we force a SIR_NEGO_PROTO interrupt (it is a hack that avoids
6865
        **      bloat for such a should_not_happen situation).
6866
        **      In all other situation, we reset the BUS.
6867
        **      Are these assumptions reasonnable ? (Wait and see ...)
6868
        */
6869
unexpected_phase:
6870
        dsp -= 8;
6871
        nxtdsp = 0;
6872
 
6873
        switch (cmd & 7) {
6874
        case 2: /* COMMAND phase */
6875
                nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
6876
                break;
6877
#if 0
6878
        case 3: /* STATUS  phase */
6879
                nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
6880
                break;
6881
#endif
6882
        case 6: /* MSG OUT phase */
6883
                np->scripth->nxtdsp_go_on[0] = cpu_to_scr(dsp + 8);
6884
                if      (dsp == NCB_SCRIPT_PHYS (np, send_ident)) {
6885
                        cp->host_status = HS_BUSY;
6886
                        nxtdsp = NCB_SCRIPTH_PHYS (np, clratn_go_on);
6887
                }
6888
                else if (dsp == NCB_SCRIPTH_PHYS (np, send_wdtr) ||
6889
                         dsp == NCB_SCRIPTH_PHYS (np, send_sdtr)) {
6890
                        nxtdsp = NCB_SCRIPTH_PHYS (np, nego_bad_phase);
6891
                }
6892
                break;
6893
#if 0
6894
        case 7: /* MSG IN  phase */
6895
                nxtdsp = NCB_SCRIPT_PHYS (np, clrack);
6896
                break;
6897
#endif
6898
        }
6899
 
6900
        if (nxtdsp) {
6901
                OUTL_DSP (nxtdsp);
6902
                return;
6903
        }
6904
 
6905
reset_all:
6906
        ncr_start_reset(np);
6907
}
6908
 
6909
 
6910
static void ncr_sir_to_redo(ncb_p np, int num, ccb_p cp)
6911
{
6912
        Scsi_Cmnd *cmd  = cp->cmd;
6913
        tcb_p tp        = &np->target[cmd->target];
6914
        lcb_p lp        = tp->lp[cmd->lun];
6915
        XPT_QUEHEAD     *qp;
6916
        ccb_p           cp2;
6917
        int             disc_cnt = 0;
6918
        int             busy_cnt = 0;
6919
        u_int32         startp;
6920
        u_char          s_status = INB (SS_PRT);
6921
 
6922
        /*
6923
        **      Let the SCRIPTS processor skip all not yet started CCBs,
6924
        **      and count disconnected CCBs. Since the busy queue is in
6925
        **      the same order as the chip start queue, disconnected CCBs
6926
        **      are before cp and busy ones after.
6927
        */
6928
        if (lp) {
6929
                qp = lp->busy_ccbq.blink;
6930
                while (qp != &lp->busy_ccbq) {
6931
                        cp2 = xpt_que_entry(qp, struct ccb, link_ccbq);
6932
                        qp  = qp->blink;
6933
                        ++busy_cnt;
6934
                        if (cp2 == cp)
6935
                                break;
6936
                        cp2->start.schedule.l_paddr =
6937
                        cpu_to_scr(NCB_SCRIPTH_PHYS (np, skip));
6938
                }
6939
                lp->held_ccb = cp;      /* Requeue when this one completes */
6940
                disc_cnt = lp->queuedccbs - busy_cnt;
6941
        }
6942
 
6943
        switch(s_status) {
6944
        default:        /* Just for safety, should never happen */
6945
        case S_QUEUE_FULL:
6946
                /*
6947
                **      Decrease number of tags to the number of
6948
                **      disconnected commands.
6949
                */
6950
                if (!lp)
6951
                        goto out;
6952
                if (bootverbose >= 1) {
6953
                        PRINT_ADDR(cmd);
6954
                        printk ("QUEUE FULL! %d busy, %d disconnected CCBs\n",
6955
                                busy_cnt, disc_cnt);
6956
                }
6957
                if (disc_cnt < lp->numtags) {
6958
                        lp->numtags     = disc_cnt > 2 ? disc_cnt : 2;
6959
                        lp->num_good    = 0;
6960
                        ncr_setup_tags (np, cmd->target, cmd->lun);
6961
                }
6962
                /*
6963
                **      Requeue the command to the start queue.
6964
                **      If any disconnected commands,
6965
                **              Clear SIGP.
6966
                **              Jump to reselect.
6967
                */
6968
                cp->phys.header.savep = cp->startp;
6969
                cp->host_status = HS_BUSY;
6970
                cp->scsi_status = S_ILLEGAL;
6971
 
6972
                ncr_put_start_queue(np, cp);
6973
                if (disc_cnt)
6974
                        INB (nc_ctest2);                /* Clear SIGP */
6975
                OUTL_DSP (NCB_SCRIPT_PHYS (np, reselect));
6976
                return;
6977
        case S_TERMINATED:
6978
        case S_CHECK_COND:
6979
                /*
6980
                **      If we were requesting sense, give up.
6981
                */
6982
                if (cp->auto_sense)
6983
                        goto out;
6984
 
6985
                /*
6986
                **      Device returned CHECK CONDITION status.
6987
                **      Prepare all needed data strutures for getting
6988
                **      sense data.
6989
                **
6990
                **      identify message
6991
                */
6992
                cp->scsi_smsg2[0]        = M_IDENTIFY | cmd->lun;
6993
                cp->phys.smsg.addr      = cpu_to_scr(CCB_PHYS (cp, scsi_smsg2));
6994
                cp->phys.smsg.size      = cpu_to_scr(1);
6995
 
6996
                /*
6997
                **      sense command
6998
                */
6999
                cp->phys.cmd.addr       = cpu_to_scr(CCB_PHYS (cp, sensecmd));
7000
                cp->phys.cmd.size       = cpu_to_scr(6);
7001
 
7002
                /*
7003
                **      patch requested size into sense command
7004
                */
7005
                cp->sensecmd[0]          = 0x03;
7006
                cp->sensecmd[1]         = cmd->lun << 5;
7007
                cp->sensecmd[4]         = sizeof(cp->sense_buf);
7008
 
7009
                /*
7010
                **      sense data
7011
                */
7012
                bzero(cp->sense_buf, sizeof(cp->sense_buf));
7013
                cp->phys.sense.addr     = cpu_to_scr(CCB_PHYS(cp,sense_buf[0]));
7014
                cp->phys.sense.size     = cpu_to_scr(sizeof(cp->sense_buf));
7015
 
7016
                /*
7017
                **      requeue the command.
7018
                */
7019
                startp = cpu_to_scr(NCB_SCRIPTH_PHYS (np, sdata_in));
7020
 
7021
                cp->phys.header.savep   = startp;
7022
                cp->phys.header.goalp   = startp + 24;
7023
                cp->phys.header.lastp   = startp;
7024
                cp->phys.header.wgoalp  = startp + 24;
7025
                cp->phys.header.wlastp  = startp;
7026
 
7027
                cp->host_status = HS_BUSY;
7028
                cp->scsi_status = S_ILLEGAL;
7029
                cp->auto_sense  = s_status;
7030
 
7031
                cp->start.schedule.l_paddr =
7032
                        cpu_to_scr(NCB_SCRIPT_PHYS (np, select));
7033
 
7034
                /*
7035
                **      Select without ATN for quirky devices.
7036
                */
7037
                if (tp->quirks & QUIRK_NOMSG)
7038
                        cp->start.schedule.l_paddr =
7039
                        cpu_to_scr(NCB_SCRIPTH_PHYS (np, select_no_atn));
7040
 
7041
                ncr_put_start_queue(np, cp);
7042
 
7043
                OUTL_DSP (NCB_SCRIPT_PHYS (np, start));
7044
                return;
7045
        }
7046
 
7047
out:
7048
        OUTONB_STD ();
7049
        return;
7050
}
7051
 
7052
 
7053
/*==========================================================
7054
**
7055
**
7056
**      ncr chip exception handler for programmed interrupts.
7057
**
7058
**
7059
**==========================================================
7060
*/
7061
 
7062
static int ncr_show_msg (u_char * msg)
7063
{
7064
        u_char i;
7065
        printk ("%x",*msg);
7066
        if (*msg==M_EXTENDED) {
7067
                for (i=1;i<8;i++) {
7068
                        if (i-1>msg[1]) break;
7069
                        printk ("-%x",msg[i]);
7070
                };
7071
                return (i+1);
7072
        } else if ((*msg & 0xf0) == 0x20) {
7073
                printk ("-%x",msg[1]);
7074
                return (2);
7075
        };
7076
        return (1);
7077
}
7078
 
7079
static void ncr_print_msg ( ccb_p cp, char *label, u_char *msg)
7080
{
7081
        if (cp)
7082
                PRINT_ADDR(cp->cmd);
7083
        if (label)
7084
                printk("%s: ", label);
7085
 
7086
        (void) ncr_show_msg (msg);
7087
        printk(".\n");
7088
}
7089
 
7090
void ncr_int_sir (ncb_p np)
7091
{
7092
        u_char scntl3;
7093
        u_char chg, ofs, per, fak, wide;
7094
        u_char num = INB (nc_dsps);
7095
        ccb_p   cp=0;
7096
        u_long  dsa    = INL (nc_dsa);
7097
        u_char  target = INB (nc_sdid) & 0x0f;
7098
        tcb_p   tp     = &np->target[target];
7099
 
7100
        if (DEBUG_FLAGS & DEBUG_TINY) printk ("I#%d", num);
7101
 
7102
        switch (num) {
7103
        case SIR_RESEL_NO_MSG_IN:
7104
        case SIR_RESEL_NO_IDENTIFY:
7105
                /*
7106
                **      If devices reselecting without sending an IDENTIFY
7107
                **      message still exist, this should help.
7108
                **      We just assume lun=0, 1 CCB, no tag.
7109
                */
7110
                if (tp->lp[0]) {
7111
                        OUTL_DSP (scr_to_cpu(tp->lp[0]->jump_ccb[0]));
7112
                        return;
7113
                }
7114
        case SIR_RESEL_BAD_TARGET:      /* Will send a TARGET RESET message */
7115
        case SIR_RESEL_BAD_LUN:         /* Will send a TARGET RESET message */
7116
        case SIR_RESEL_BAD_I_T_L_Q:     /* Will send an ABORT TAG message   */
7117
        case SIR_RESEL_BAD_I_T_L:       /* Will send an ABORT message       */
7118
                printk ("%s:%d: SIR %d, "
7119
                        "incorrect nexus identification on reselection\n",
7120
                        ncr_name (np), target, num);
7121
                goto out;
7122
        case SIR_DONE_OVERFLOW:
7123
                printk ("%s:%d: SIR %d, "
7124
                        "CCB done queue overflow\n",
7125
                        ncr_name (np), target, num);
7126
                goto out;
7127
        case SIR_BAD_STATUS:
7128
                cp = np->header.cp;
7129
                if (!cp || CCB_PHYS (cp, phys) != dsa)
7130
                        goto out;
7131
                ncr_sir_to_redo(np, num, cp);
7132
                return;
7133
        default:
7134
                /*
7135
                **      lookup the ccb
7136
                */
7137
                cp = np->ccb;
7138
                while (cp && (CCB_PHYS (cp, phys) != dsa))
7139
                        cp = cp->link_ccb;
7140
 
7141
                assert (cp && cp == np->header.cp);
7142
 
7143
                if (!cp || cp != np->header.cp)
7144
                        goto out;
7145
        }
7146
 
7147
        switch (num) {
7148
/*-----------------------------------------------------------------------------
7149
**
7150
**      Was Sie schon immer ueber transfermode negotiation wissen wollten ...
7151
**
7152
**      We try to negotiate sync and wide transfer only after
7153
**      a successful inquire command. We look at byte 7 of the
7154
**      inquire data to determine the capabilities of the target.
7155
**
7156
**      When we try to negotiate, we append the negotiation message
7157
**      to the identify and (maybe) simple tag message.
7158
**      The host status field is set to HS_NEGOTIATE to mark this
7159
**      situation.
7160
**
7161
**      If the target doesn't answer this message immidiately
7162
**      (as required by the standard), the SIR_NEGO_FAIL interrupt
7163
**      will be raised eventually.
7164
**      The handler removes the HS_NEGOTIATE status, and sets the
7165
**      negotiated value to the default (async / nowide).
7166
**
7167
**      If we receive a matching answer immediately, we check it
7168
**      for validity, and set the values.
7169
**
7170
**      If we receive a Reject message immediately, we assume the
7171
**      negotiation has failed, and fall back to standard values.
7172
**
7173
**      If we receive a negotiation message while not in HS_NEGOTIATE
7174
**      state, it's a target initiated negotiation. We prepare a
7175
**      (hopefully) valid answer, set our parameters, and send back
7176
**      this answer to the target.
7177
**
7178
**      If the target doesn't fetch the answer (no message out phase),
7179
**      we assume the negotiation has failed, and fall back to default
7180
**      settings.
7181
**
7182
**      When we set the values, we adjust them in all ccbs belonging
7183
**      to this target, in the controller's register, and in the "phys"
7184
**      field of the controller's struct ncb.
7185
**
7186
**      Possible cases:            hs  sir   msg_in value  send   goto
7187
**      We try to negotiate:
7188
**      -> target doesn't msgin    NEG FAIL  noop   defa.  -      dispatch
7189
**      -> target rejected our msg NEG FAIL  reject defa.  -      dispatch
7190
**      -> target answered  (ok)   NEG SYNC  sdtr   set    -      clrack
7191
**      -> target answered (!ok)   NEG SYNC  sdtr   defa.  REJ--->msg_bad
7192
**      -> target answered  (ok)   NEG WIDE  wdtr   set    -      clrack
7193
**      -> target answered (!ok)   NEG WIDE  wdtr   defa.  REJ--->msg_bad
7194
**      -> any other msgin         NEG FAIL  noop   defa.  -      dispatch
7195
**
7196
**      Target tries to negotiate:
7197
**      -> incoming message        --- SYNC  sdtr   set    SDTR   -
7198
**      -> incoming message        --- WIDE  wdtr   set    WDTR   -
7199
**      We sent our answer:
7200
**      -> target doesn't msgout   --- PROTO ?      defa.  -      dispatch
7201
**
7202
**-----------------------------------------------------------------------------
7203
*/
7204
 
7205
        case SIR_NEGO_FAILED:
7206
                /*-------------------------------------------------------
7207
                **
7208
                **      Negotiation failed.
7209
                **      Target doesn't send an answer message,
7210
                **      or target rejected our message.
7211
                **
7212
                **      Remove negotiation request.
7213
                **
7214
                **-------------------------------------------------------
7215
                */
7216
                OUTB (HS_PRT, HS_BUSY);
7217
 
7218
                /* fall through */
7219
 
7220
        case SIR_NEGO_PROTO:
7221
                /*-------------------------------------------------------
7222
                **
7223
                **      Negotiation failed.
7224
                **      Target doesn't fetch the answer message.
7225
                **
7226
                **-------------------------------------------------------
7227
                */
7228
 
7229
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7230
                        PRINT_ADDR(cp->cmd);
7231
                        printk ("negotiation failed sir=%x status=%x.\n",
7232
                                num, cp->nego_status);
7233
                };
7234
 
7235
                /*
7236
                **      any error in negotiation:
7237
                **      fall back to default mode.
7238
                */
7239
                switch (cp->nego_status) {
7240
 
7241
                case NS_SYNC:
7242
                        ncr_setsync (np, cp, 0, 0xe0);
7243
                        break;
7244
 
7245
                case NS_WIDE:
7246
                        ncr_setwide (np, cp, 0, 0);
7247
                        break;
7248
 
7249
                };
7250
                np->msgin [0] = M_NOOP;
7251
                np->msgout[0] = M_NOOP;
7252
                cp->nego_status = 0;
7253
                break;
7254
 
7255
        case SIR_NEGO_SYNC:
7256
                /*
7257
                **      Synchronous request message received.
7258
                */
7259
 
7260
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7261
                        PRINT_ADDR(cp->cmd);
7262
                        printk ("sync msgin: ");
7263
                        (void) ncr_show_msg (np->msgin);
7264
                        printk (".\n");
7265
                };
7266
 
7267
                /*
7268
                **      get requested values.
7269
                */
7270
 
7271
                chg = 0;
7272
                per = np->msgin[3];
7273
                ofs = np->msgin[4];
7274
                if (ofs==0) per=255;
7275
 
7276
                /*
7277
                **      if target sends SDTR message,
7278
                **            it CAN transfer synch.
7279
                */
7280
 
7281
                if (ofs)
7282
                        tp->inq_byte7 |= INQ7_SYNC;
7283
 
7284
                /*
7285
                **      check values against driver limits.
7286
                */
7287
 
7288
                if (per < np->minsync)
7289
                        {chg = 1; per = np->minsync;}
7290
                if (per < tp->minsync)
7291
                        {chg = 1; per = tp->minsync;}
7292
                if (ofs > tp->maxoffs)
7293
                        {chg = 1; ofs = tp->maxoffs;}
7294
 
7295
                /*
7296
                **      Check against controller limits.
7297
                */
7298
                fak     = 7;
7299
                scntl3  = 0;
7300
                if (ofs != 0) {
7301
                        ncr_getsync(np, per, &fak, &scntl3);
7302
                        if (fak > 7) {
7303
                                chg = 1;
7304
                                ofs = 0;
7305
                        }
7306
                }
7307
                if (ofs == 0) {
7308
                        fak     = 7;
7309
                        per     = 0;
7310
                        scntl3  = 0;
7311
                        tp->minsync = 0;
7312
                }
7313
 
7314
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7315
                        PRINT_ADDR(cp->cmd);
7316
                        printk ("sync: per=%d scntl3=0x%x ofs=%d fak=%d chg=%d.\n",
7317
                                per, scntl3, ofs, fak, chg);
7318
                }
7319
 
7320
                if (INB (HS_PRT) == HS_NEGOTIATE) {
7321
                        OUTB (HS_PRT, HS_BUSY);
7322
                        switch (cp->nego_status) {
7323
 
7324
                        case NS_SYNC:
7325
                                /*
7326
                                **      This was an answer message
7327
                                */
7328
                                if (chg) {
7329
                                        /*
7330
                                        **      Answer wasn't acceptable.
7331
                                        */
7332
                                        ncr_setsync (np, cp, 0, 0xe0);
7333
                                        OUTL_DSP (NCB_SCRIPT_PHYS (np, msg_bad));
7334
                                } else {
7335
                                        /*
7336
                                        **      Answer is ok.
7337
                                        */
7338
                                        ncr_setsync (np, cp, scntl3, (fak<<5)|ofs);
7339
                                        OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
7340
                                };
7341
                                return;
7342
 
7343
                        case NS_WIDE:
7344
                                ncr_setwide (np, cp, 0, 0);
7345
                                break;
7346
                        };
7347
                };
7348
 
7349
                /*
7350
                **      It was a request. Set value and
7351
                **      prepare an answer message
7352
                */
7353
 
7354
                ncr_setsync (np, cp, scntl3, (fak<<5)|ofs);
7355
 
7356
                np->msgout[0] = M_EXTENDED;
7357
                np->msgout[1] = 3;
7358
                np->msgout[2] = M_X_SYNC_REQ;
7359
                np->msgout[3] = per;
7360
                np->msgout[4] = ofs;
7361
 
7362
                cp->nego_status = NS_SYNC;
7363
 
7364
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7365
                        PRINT_ADDR(cp->cmd);
7366
                        printk ("sync msgout: ");
7367
                        (void) ncr_show_msg (np->msgout);
7368
                        printk (".\n");
7369
                }
7370
 
7371
                if (!ofs) {
7372
                        OUTL_DSP (NCB_SCRIPT_PHYS (np, msg_bad));
7373
                        return;
7374
                }
7375
                np->msgin [0] = M_NOOP;
7376
 
7377
                break;
7378
 
7379
        case SIR_NEGO_WIDE:
7380
                /*
7381
                **      Wide request message received.
7382
                */
7383
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7384
                        PRINT_ADDR(cp->cmd);
7385
                        printk ("wide msgin: ");
7386
                        (void) ncr_show_msg (np->msgin);
7387
                        printk (".\n");
7388
                };
7389
 
7390
                /*
7391
                **      get requested values.
7392
                */
7393
 
7394
                chg  = 0;
7395
                wide = np->msgin[3];
7396
 
7397
                /*
7398
                **      if target sends WDTR message,
7399
                **            it CAN transfer wide.
7400
                */
7401
 
7402
                if (wide)
7403
                        tp->inq_byte7 |= INQ7_WIDE16;
7404
 
7405
                /*
7406
                **      check values against driver limits.
7407
                */
7408
 
7409
                if (wide > tp->usrwide)
7410
                        {chg = 1; wide = tp->usrwide;}
7411
 
7412
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7413
                        PRINT_ADDR(cp->cmd);
7414
                        printk ("wide: wide=%d chg=%d.\n", wide, chg);
7415
                }
7416
 
7417
                if (INB (HS_PRT) == HS_NEGOTIATE) {
7418
                        OUTB (HS_PRT, HS_BUSY);
7419
                        switch (cp->nego_status) {
7420
 
7421
                        case NS_WIDE:
7422
                                /*
7423
                                **      This was an answer message
7424
                                */
7425
                                if (chg) {
7426
                                        /*
7427
                                        **      Answer wasn't acceptable.
7428
                                        */
7429
                                        ncr_setwide (np, cp, 0, 1);
7430
                                        OUTL_DSP (NCB_SCRIPT_PHYS (np, msg_bad));
7431
                                } else {
7432
                                        /*
7433
                                        **      Answer is ok.
7434
                                        */
7435
                                        ncr_setwide (np, cp, wide, 1);
7436
                                        OUTL_DSP (NCB_SCRIPT_PHYS (np, clrack));
7437
                                };
7438
                                return;
7439
 
7440
                        case NS_SYNC:
7441
                                ncr_setsync (np, cp, 0, 0xe0);
7442
                                break;
7443
                        };
7444
                };
7445
 
7446
                /*
7447
                **      It was a request, set value and
7448
                **      prepare an answer message
7449
                */
7450
 
7451
                ncr_setwide (np, cp, wide, 1);
7452
 
7453
                np->msgout[0] = M_EXTENDED;
7454
                np->msgout[1] = 2;
7455
                np->msgout[2] = M_X_WIDE_REQ;
7456
                np->msgout[3] = wide;
7457
 
7458
                np->msgin [0] = M_NOOP;
7459
 
7460
                cp->nego_status = NS_WIDE;
7461
 
7462
                if (DEBUG_FLAGS & DEBUG_NEGO) {
7463
                        PRINT_ADDR(cp->cmd);
7464
                        printk ("wide msgout: ");
7465
                        (void) ncr_show_msg (np->msgin);
7466
                        printk (".\n");
7467
                }
7468
                break;
7469
 
7470
/*--------------------------------------------------------------------
7471
**
7472
**      Processing of special messages
7473
**
7474
**--------------------------------------------------------------------
7475
*/
7476
 
7477
        case SIR_REJECT_RECEIVED:
7478
                /*-----------------------------------------------
7479
                **
7480
                **      We received a M_REJECT message.
7481
                **
7482
                **-----------------------------------------------
7483
                */
7484
 
7485
                PRINT_ADDR(cp->cmd);
7486
                printk ("M_REJECT received (%x:%x).\n",
7487
                        (unsigned)scr_to_cpu(np->lastmsg), np->msgout[0]);
7488
                break;
7489
 
7490
        case SIR_REJECT_SENT:
7491
                /*-----------------------------------------------
7492
                **
7493
                **      We received an unknown message
7494
                **
7495
                **-----------------------------------------------
7496
                */
7497
 
7498
                PRINT_ADDR(cp->cmd);
7499
                printk ("M_REJECT sent for ");
7500
                (void) ncr_show_msg (np->msgin);
7501
                printk (".\n");
7502
                break;
7503
 
7504
/*--------------------------------------------------------------------
7505
**
7506
**      Processing of special messages
7507
**
7508
**--------------------------------------------------------------------
7509
*/
7510
 
7511
        case SIR_IGN_RESIDUE:
7512
                /*-----------------------------------------------
7513
                **
7514
                **      We received an IGNORE RESIDUE message,
7515
                **      which couldn't be handled by the script.
7516
                **
7517
                **-----------------------------------------------
7518
                */
7519
 
7520
                PRINT_ADDR(cp->cmd);
7521
                printk ("M_IGN_RESIDUE received, but not yet implemented.\n");
7522
                break;
7523
#if 0
7524
        case SIR_MISSING_SAVE:
7525
                /*-----------------------------------------------
7526
                **
7527
                **      We received an DISCONNECT message,
7528
                **      but the datapointer wasn't saved before.
7529
                **
7530
                **-----------------------------------------------
7531
                */
7532
 
7533
                PRINT_ADDR(cp->cmd);
7534
                printk ("M_DISCONNECT received, but datapointer not saved: "
7535
                        "data=%x save=%x goal=%x.\n",
7536
                        (unsigned) INL (nc_temp),
7537
                        (unsigned) scr_to_cpu(np->header.savep),
7538
                        (unsigned) scr_to_cpu(np->header.goalp));
7539
                break;
7540
#endif
7541
        };
7542
 
7543
out:
7544
        OUTONB_STD ();
7545
}
7546
 
7547
/*==========================================================
7548
**
7549
**
7550
**      Acquire a control block
7551
**
7552
**
7553
**==========================================================
7554
*/
7555
 
7556
static  ccb_p ncr_get_ccb (ncb_p np, u_char tn, u_char ln)
7557
{
7558
        tcb_p tp = &np->target[tn];
7559
        lcb_p lp = tp->lp[ln];
7560
        u_char tag = NO_TAG;
7561
        ccb_p cp = (ccb_p) 0;
7562
 
7563
        /*
7564
        **      Lun structure available ?
7565
        */
7566
        if (lp) {
7567
                XPT_QUEHEAD *qp;
7568
                /*
7569
                **      Keep from using more tags than we can handle.
7570
                */
7571
                if (lp->usetags && lp->busyccbs >= lp->maxnxs)
7572
                        return (ccb_p) 0;
7573
 
7574
                /*
7575
                **      Allocate a new CCB if needed.
7576
                */
7577
                if (xpt_que_empty(&lp->free_ccbq))
7578
                        ncr_alloc_ccb(np, tn, ln);
7579
 
7580
                /*
7581
                **      Tune tag mode if asked by user.
7582
                */
7583
                if (lp->queuedepth != lp->numtags) {
7584
                        ncr_setup_tags(np, tn, ln);
7585
                }
7586
 
7587
                /*
7588
                **      Look for free CCB
7589
                */
7590
                qp = xpt_remque_head(&lp->free_ccbq);
7591
                if (qp) {
7592
                        cp = xpt_que_entry(qp, struct ccb, link_ccbq);
7593
                        if (cp->magic) {
7594
                                PRINT_LUN(np, tn, ln);
7595
                                printk ("ccb free list corrupted (@%p)\n", cp);
7596
                                cp = 0;
7597
                        }
7598
                        else {
7599
                                xpt_insque_tail(qp, &lp->wait_ccbq);
7600
                                ++lp->busyccbs;
7601
                        }
7602
                }
7603
 
7604
                /*
7605
                **      If a CCB is available,
7606
                **      Get a tag for this nexus if required.
7607
                */
7608
                if (cp) {
7609
                        if (lp->usetags)
7610
                                tag = lp->cb_tags[lp->ia_tag];
7611
                }
7612
                else if (lp->actccbs > 0)
7613
                        return (ccb_p) 0;
7614
        }
7615
 
7616
        /*
7617
        **      if nothing available, take the default.
7618
        */
7619
        if (!cp)
7620
                cp = np->ccb;
7621
 
7622
        /*
7623
        **      Wait until available.
7624
        */
7625
#if 0
7626
        while (cp->magic) {
7627
                if (flags & SCSI_NOSLEEP) break;
7628
                if (tsleep ((caddr_t)cp, PRIBIO|PCATCH, "ncr", 0))
7629
                        break;
7630
        };
7631
#endif
7632
 
7633
        if (cp->magic)
7634
                return ((ccb_p) 0);
7635
 
7636
        cp->magic = 1;
7637
 
7638
        /*
7639
        **      Move to next available tag if tag used.
7640
        */
7641
        if (lp) {
7642
                if (tag != NO_TAG) {
7643
                        ++lp->ia_tag;
7644
                        if (lp->ia_tag == MAX_TAGS)
7645
                                lp->ia_tag = 0;
7646
                        lp->tags_umap |= (((tagmap_t) 1) << tag);
7647
                }
7648
        }
7649
 
7650
        /*
7651
        **      Remember all informations needed to free this CCB.
7652
        */
7653
        cp->tag    = tag;
7654
        cp->target = tn;
7655
        cp->lun    = ln;
7656
 
7657
        if (DEBUG_FLAGS & DEBUG_TAGS) {
7658
                PRINT_LUN(np, tn, ln);
7659
                printk ("ccb @%p using tag %d.\n", cp, tag);
7660
        }
7661
 
7662
        return cp;
7663
}
7664
 
7665
/*==========================================================
7666
**
7667
**
7668
**      Release one control block
7669
**
7670
**
7671
**==========================================================
7672
*/
7673
 
7674
static void ncr_free_ccb (ncb_p np, ccb_p cp)
7675
{
7676
        tcb_p tp = &np->target[cp->target];
7677
        lcb_p lp = tp->lp[cp->lun];
7678
 
7679
        if (DEBUG_FLAGS & DEBUG_TAGS) {
7680
                PRINT_LUN(np, cp->target, cp->lun);
7681
                printk ("ccb @%p freeing tag %d.\n", cp, cp->tag);
7682
        }
7683
 
7684
        /*
7685
        **      If lun control block available,
7686
        **      decrement active commands and increment credit,
7687
        **      free the tag if any and remove the JUMP for reselect.
7688
        */
7689
        if (lp) {
7690
                if (cp->tag != NO_TAG) {
7691
                        lp->cb_tags[lp->if_tag++] = cp->tag;
7692
                        if (lp->if_tag == MAX_TAGS)
7693
                                lp->if_tag = 0;
7694
                        lp->tags_umap &= ~(((tagmap_t) 1) << cp->tag);
7695
                        lp->tags_smap &= lp->tags_umap;
7696
                        lp->jump_ccb[cp->tag] =
7697
                                cpu_to_scr(NCB_SCRIPTH_PHYS(np, bad_i_t_l_q));
7698
                } else {
7699
                        lp->jump_ccb[0] =
7700
                                cpu_to_scr(NCB_SCRIPTH_PHYS(np, bad_i_t_l));
7701
                }
7702
        }
7703
 
7704
        /*
7705
        **      Make this CCB available.
7706
        */
7707
 
7708
        if (lp) {
7709
                if (cp != np->ccb) {
7710
                        xpt_remque(&cp->link_ccbq);
7711
                        xpt_insque_head(&cp->link_ccbq, &lp->free_ccbq);
7712
                }
7713
                --lp->busyccbs;
7714
                if (cp->queued) {
7715
                        --lp->queuedccbs;
7716
                }
7717
        }
7718
        cp -> host_status = HS_IDLE;
7719
        cp -> magic = 0;
7720
        if (cp->queued) {
7721
                --np->queuedccbs;
7722
                cp->queued = 0;
7723
        }
7724
 
7725
#if 0
7726
        if (cp == np->ccb)
7727
                wakeup ((caddr_t) cp);
7728
#endif
7729
}
7730
 
7731
 
7732
#define ncr_reg_bus_addr(r) (np->paddr + offsetof (struct ncr_reg, r))
7733
 
7734
/*------------------------------------------------------------------------
7735
**      Initialize the fixed part of a CCB structure.
7736
**------------------------------------------------------------------------
7737
**------------------------------------------------------------------------
7738
*/
7739
static void ncr_init_ccb(ncb_p np, ccb_p cp)
7740
{
7741
        ncrcmd copy_4 = np->features & FE_PFEN ? SCR_COPY(4) : SCR_COPY_F(4);
7742
 
7743
        /*
7744
        **      Remember virtual and bus address of this ccb.
7745
        */
7746
        cp->p_ccb          = vtobus(cp);
7747
        cp->phys.header.cp = cp;
7748
 
7749
        /*
7750
        **      This allows xpt_remque to work for the default ccb.
7751
        */
7752
        xpt_que_init(&cp->link_ccbq);
7753
 
7754
        /*
7755
        **      Initialyze the start and restart launch script.
7756
        **
7757
        **      COPY(4) @(...p_phys), @(dsa)
7758
        **      JUMP @(sched_point)
7759
        */
7760
        cp->start.setup_dsa[0]    = cpu_to_scr(copy_4);
7761
        cp->start.setup_dsa[1]   = cpu_to_scr(CCB_PHYS(cp, start.p_phys));
7762
        cp->start.setup_dsa[2]   = cpu_to_scr(ncr_reg_bus_addr(nc_dsa));
7763
        cp->start.schedule.l_cmd = cpu_to_scr(SCR_JUMP);
7764
        cp->start.p_phys         = cpu_to_scr(CCB_PHYS(cp, phys));
7765
 
7766
        bcopy(&cp->start, &cp->restart, sizeof(cp->restart));
7767
 
7768
        cp->start.schedule.l_paddr   = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle));
7769
        cp->restart.schedule.l_paddr = cpu_to_scr(NCB_SCRIPTH_PHYS (np, abort));
7770
}
7771
 
7772
 
7773
/*------------------------------------------------------------------------
7774
**      Allocate a CCB and initialize its fixed part.
7775
**------------------------------------------------------------------------
7776
**------------------------------------------------------------------------
7777
*/
7778
static void ncr_alloc_ccb(ncb_p np, u_char tn, u_char ln)
7779
{
7780
        tcb_p tp = &np->target[tn];
7781
        lcb_p lp = tp->lp[ln];
7782
        ccb_p cp = 0;
7783
 
7784
        /*
7785
        **      Allocate memory for this CCB.
7786
        */
7787
        cp = m_calloc_dma(sizeof(struct ccb), "CCB");
7788
        if (!cp)
7789
                return;
7790
 
7791
        /*
7792
        **      Count it and initialyze it.
7793
        */
7794
        lp->actccbs++;
7795
        np->actccbs++;
7796
        bzero (cp, sizeof (*cp));
7797
        ncr_init_ccb(np, cp);
7798
 
7799
        /*
7800
        **      Chain into wakeup list and free ccb queue and take it
7801
        **      into account for tagged commands.
7802
        */
7803
        cp->link_ccb      = np->ccb->link_ccb;
7804
        np->ccb->link_ccb = cp;
7805
 
7806
        xpt_insque_head(&cp->link_ccbq, &lp->free_ccbq);
7807
        ncr_setup_tags (np, tn, ln);
7808
}
7809
 
7810
/*==========================================================
7811
**
7812
**
7813
**      Allocation of resources for Targets/Luns/Tags.
7814
**
7815
**
7816
**==========================================================
7817
*/
7818
 
7819
 
7820
/*------------------------------------------------------------------------
7821
**      Target control block initialisation.
7822
**------------------------------------------------------------------------
7823
**      This data structure is fully initialized after a SCSI command
7824
**      has been successfully completed for this target.
7825
**      It contains a SCRIPT that is called on target reselection.
7826
**------------------------------------------------------------------------
7827
*/
7828
static void ncr_init_tcb (ncb_p np, u_char tn)
7829
{
7830
        tcb_p tp = &np->target[tn];
7831
        ncrcmd copy_1 = np->features & FE_PFEN ? SCR_COPY(1) : SCR_COPY_F(1);
7832
        int th = tn & 3;
7833
        int i;
7834
 
7835
        /*
7836
        **      Jump to next tcb if SFBR does not match this target.
7837
        **      JUMP  IF (SFBR != #target#), @(next tcb)
7838
        */
7839
        tp->jump_tcb.l_cmd   =
7840
                cpu_to_scr((SCR_JUMP ^ IFFALSE (DATA (0x80 + tn))));
7841
        tp->jump_tcb.l_paddr = np->jump_tcb[th].l_paddr;
7842
 
7843
        /*
7844
        **      Load the synchronous transfer register.
7845
        **      COPY @(tp->sval), @(sxfer)
7846
        */
7847
        tp->getscr[0] =  cpu_to_scr(copy_1);
7848
        tp->getscr[1] = cpu_to_scr(vtobus (&tp->sval));
7849
        tp->getscr[2] = cpu_to_scr(ncr_reg_bus_addr(nc_sxfer));
7850
 
7851
        /*
7852
        **      Load the timing register.
7853
        **      COPY @(tp->wval), @(scntl3)
7854
        */
7855
        tp->getscr[3] = cpu_to_scr(copy_1);
7856
        tp->getscr[4] = cpu_to_scr(vtobus (&tp->wval));
7857
        tp->getscr[5] = cpu_to_scr(ncr_reg_bus_addr(nc_scntl3));
7858
 
7859
        /*
7860
        **      Get the IDENTIFY message and the lun.
7861
        **      CALL @script(resel_lun)
7862
        */
7863
        tp->call_lun.l_cmd   = cpu_to_scr(SCR_CALL);
7864
        tp->call_lun.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, resel_lun));
7865
 
7866
        /*
7867
        **      Look for the lun control block of this nexus.
7868
        **      For i = 0 to 3
7869
        **              JUMP ^ IFTRUE (MASK (i, 3)), @(next_lcb)
7870
        */
7871
        for (i = 0 ; i < 4 ; i++) {
7872
                tp->jump_lcb[i].l_cmd   =
7873
                                cpu_to_scr((SCR_JUMP ^ IFTRUE (MASK (i, 3))));
7874
                tp->jump_lcb[i].l_paddr =
7875
                                cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_identify));
7876
        }
7877
 
7878
        /*
7879
        **      Link this target control block to the JUMP chain.
7880
        */
7881
        np->jump_tcb[th].l_paddr = cpu_to_scr(vtobus (&tp->jump_tcb));
7882
 
7883
        /*
7884
        **      These assert's should be moved at driver initialisations.
7885
        */
7886
        assert (( (offsetof(struct ncr_reg, nc_sxfer) ^
7887
                offsetof(struct tcb    , sval    )) &3) == 0);
7888
        assert (( (offsetof(struct ncr_reg, nc_scntl3) ^
7889
                offsetof(struct tcb    , wval    )) &3) == 0);
7890
}
7891
 
7892
 
7893
/*------------------------------------------------------------------------
7894
**      Lun control block allocation and initialization.
7895
**------------------------------------------------------------------------
7896
**      This data structure is allocated and initialized after a SCSI
7897
**      command has been successfully completed for this target/lun.
7898
**------------------------------------------------------------------------
7899
*/
7900
static lcb_p ncr_alloc_lcb (ncb_p np, u_char tn, u_char ln)
7901
{
7902
        tcb_p tp = &np->target[tn];
7903
        lcb_p lp = tp->lp[ln];
7904
        ncrcmd copy_4 = np->features & FE_PFEN ? SCR_COPY(4) : SCR_COPY_F(4);
7905
        int lh = ln & 3;
7906
 
7907
        /*
7908
        **      Already done, return.
7909
        */
7910
        if (lp)
7911
                return lp;
7912
 
7913
        /*
7914
        **      Allocate the lcb.
7915
        */
7916
        lp = m_calloc_dma(sizeof(struct lcb), "LCB");
7917
        if (!lp)
7918
                goto fail;
7919
        bzero(lp, sizeof(*lp));
7920
        tp->lp[ln] = lp;
7921
 
7922
        /*
7923
        **      Initialize the target control block if not yet.
7924
        */
7925
        if (!tp->jump_tcb.l_cmd)
7926
                ncr_init_tcb(np, tn);
7927
 
7928
        /*
7929
        **      Initialize the CCB queue headers.
7930
        */
7931
        xpt_que_init(&lp->free_ccbq);
7932
        xpt_que_init(&lp->busy_ccbq);
7933
        xpt_que_init(&lp->wait_ccbq);
7934
        xpt_que_init(&lp->skip_ccbq);
7935
 
7936
        /*
7937
        **      Set max CCBs to 1 and use the default 1 entry
7938
        **      jump table by default.
7939
        */
7940
        lp->maxnxs      = 1;
7941
        lp->jump_ccb    = &lp->jump_ccb_0;
7942
        lp->p_jump_ccb  = cpu_to_scr(vtobus(lp->jump_ccb));
7943
 
7944
        /*
7945
        **      Initilialyze the reselect script:
7946
        **
7947
        **      Jump to next lcb if SFBR does not match this lun.
7948
        **      Load TEMP with the CCB direct jump table bus address.
7949
        **      Get the SIMPLE TAG message and the tag.
7950
        **
7951
        **      JUMP  IF (SFBR != #lun#), @(next lcb)
7952
        **      COPY @(lp->p_jump_ccb),   @(temp)
7953
        **      JUMP @script(resel_notag)
7954
        */
7955
        lp->jump_lcb.l_cmd   =
7956
                cpu_to_scr((SCR_JUMP ^ IFFALSE (MASK (0x80+ln, 0xff))));
7957
        lp->jump_lcb.l_paddr = tp->jump_lcb[lh].l_paddr;
7958
 
7959
        lp->load_jump_ccb[0] = cpu_to_scr(copy_4);
7960
        lp->load_jump_ccb[1] = cpu_to_scr(vtobus (&lp->p_jump_ccb));
7961
        lp->load_jump_ccb[2] = cpu_to_scr(ncr_reg_bus_addr(nc_temp));
7962
 
7963
        lp->jump_tag.l_cmd   = cpu_to_scr(SCR_JUMP);
7964
        lp->jump_tag.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, resel_notag));
7965
 
7966
        /*
7967
        **      Link this lun control block to the JUMP chain.
7968
        */
7969
        tp->jump_lcb[lh].l_paddr = cpu_to_scr(vtobus (&lp->jump_lcb));
7970
 
7971
        /*
7972
        **      Initialize command queuing control.
7973
        */
7974
        lp->busyccbs    = 1;
7975
        lp->queuedccbs  = 1;
7976
        lp->queuedepth  = 1;
7977
fail:
7978
        return lp;
7979
}
7980
 
7981
 
7982
/*------------------------------------------------------------------------
7983
**      Lun control block setup on INQUIRY data received.
7984
**------------------------------------------------------------------------
7985
**      We only support WIDE, SYNC for targets and CMDQ for logical units.
7986
**      This setup is done on each INQUIRY since we are expecting user
7987
**      will play with CHANGE DEFINITION commands. :-)
7988
**------------------------------------------------------------------------
7989
*/
7990
static lcb_p ncr_setup_lcb (ncb_p np, u_char tn, u_char ln, u_char *inq_data)
7991
{
7992
        tcb_p tp = &np->target[tn];
7993
        lcb_p lp = tp->lp[ln];
7994
        u_char inq_byte7;
7995
 
7996
        /*
7997
        **      If no lcb, try to allocate it.
7998
        */
7999
        if (!lp && !(lp = ncr_alloc_lcb(np, tn, ln)))
8000
                goto fail;
8001
 
8002
        /*
8003
        **      Get device quirks from a speciality table.
8004
        */
8005
        tp->quirks = ncr_lookup (inq_data);
8006
        if (tp->quirks && bootverbose) {
8007
                PRINT_LUN(np, tn, ln);
8008
                printk ("quirks=%x.\n", tp->quirks);
8009
        }
8010
 
8011
        /*
8012
        **      Evaluate trustable target/unit capabilities.
8013
        **      We only believe device version >= SCSI-2 that
8014
        **      use appropriate response data format (2).
8015
        **      But it seems that some CCS devices also
8016
        **      support SYNC and I donnot want to frustrate
8017
        **      anybody. ;-)
8018
        */
8019
        inq_byte7 = 0;
8020
        if      ((inq_data[2] & 0x7) >= 2 && (inq_data[3] & 0xf) == 2)
8021
                inq_byte7 = inq_data[7];
8022
        else if ((inq_data[2] & 0x7) == 1 && (inq_data[3] & 0xf) == 1)
8023
                inq_byte7 = INQ7_SYNC;
8024
 
8025
        /*
8026
        **      Throw away announced LUN capabilities if we are told
8027
        **      that there is no real device supported by the logical unit.
8028
        */
8029
        if ((inq_data[0] & 0xe0) > 0x20 || (inq_data[0] & 0x1f) == 0x1f)
8030
                inq_byte7 &= (INQ7_SYNC | INQ7_WIDE16);
8031
 
8032
        /*
8033
        **      If user is wanting SYNC, force this feature.
8034
        */
8035
        if (driver_setup.force_sync_nego)
8036
                inq_byte7 |= INQ7_SYNC;
8037
 
8038
        /*
8039
        **      Prepare negotiation if SIP capabilities have changed.
8040
        */
8041
        tp->inq_done = 1;
8042
        if ((inq_byte7 ^ tp->inq_byte7) & (INQ7_SYNC | INQ7_WIDE16)) {
8043
                tp->inq_byte7 = inq_byte7;
8044
                ncr_negotiate(np, tp);
8045
        }
8046
 
8047
        /*
8048
        **      If unit supports tagged commands, allocate the
8049
        **      CCB JUMP table if not yet.
8050
        */
8051
        if ((inq_byte7 & INQ7_QUEUE) && lp->jump_ccb == &lp->jump_ccb_0) {
8052
                int i;
8053
                lp->jump_ccb = m_calloc_dma(256, "JUMP_CCB");
8054
                if (!lp->jump_ccb) {
8055
                        lp->jump_ccb = &lp->jump_ccb_0;
8056
                        goto fail;
8057
                }
8058
                lp->p_jump_ccb = cpu_to_scr(vtobus(lp->jump_ccb));
8059
                for (i = 0 ; i < 64 ; i++)
8060
                        lp->jump_ccb[i] =
8061
                                cpu_to_scr(NCB_SCRIPTH_PHYS (np, bad_i_t_l_q));
8062
                for (i = 0 ; i < MAX_TAGS ; i++)
8063
                        lp->cb_tags[i] = i;
8064
                lp->maxnxs = MAX_TAGS;
8065
                lp->tags_stime = ktime_get(3*HZ);
8066
        }
8067
 
8068
        /*
8069
        **      Adjust tagged queueing status if needed.
8070
        */
8071
        if ((inq_byte7 ^ lp->inq_byte7) & INQ7_QUEUE) {
8072
                lp->inq_byte7 = inq_byte7;
8073
                lp->numtags   = lp->maxtags;
8074
                ncr_setup_tags (np, tn, ln);
8075
        }
8076
 
8077
fail:
8078
        return lp;
8079
}
8080
 
8081
/*==========================================================
8082
**
8083
**
8084
**      Build Scatter Gather Block
8085
**
8086
**
8087
**==========================================================
8088
**
8089
**      The transfer area may be scattered among
8090
**      several non adjacent physical pages.
8091
**
8092
**      We may use MAX_SCATTER blocks.
8093
**
8094
**----------------------------------------------------------
8095
*/
8096
 
8097
/*
8098
**      We try to reduce the number of interrupts caused
8099
**      by unexpected phase changes due to disconnects.
8100
**      A typical harddisk may disconnect before ANY block.
8101
**      If we wanted to avoid unexpected phase changes at all
8102
**      we had to use a break point every 512 bytes.
8103
**      Of course the number of scatter/gather blocks is
8104
**      limited.
8105
**      Under Linux, the scatter/gatter blocks are provided by
8106
**      the generic driver. We just have to copy addresses and
8107
**      sizes to the data segment array.
8108
*/
8109
 
8110
static  int     ncr_scatter(ncb_p np, ccb_p cp, Scsi_Cmnd *cmd)
8111
{
8112
        struct scr_tblmove *data;
8113
        int segment     = 0;
8114
        int use_sg      = (int) cmd->use_sg;
8115
 
8116
        data            = cp->phys.data;
8117
        cp->data_len    = 0;
8118
 
8119
        if (!use_sg) {
8120
                if (cmd->request_bufflen) {
8121
                        u_long baddr = map_scsi_single_data(np, cmd);
8122
 
8123
                        data = &data[MAX_SCATTER - 1];
8124
                        data[0].addr = cpu_to_scr(baddr);
8125
                        data[0].size = cpu_to_scr(cmd->request_bufflen);
8126
                        cp->data_len = cmd->request_bufflen;
8127
                        segment = 1;
8128
                }
8129
        }
8130
        else if (use_sg <= MAX_SCATTER) {
8131
                struct scatterlist *scatter = (struct scatterlist *)cmd->buffer;
8132
 
8133
                use_sg = map_scsi_sg_data(np, cmd);
8134
                data = &data[MAX_SCATTER - use_sg];
8135
 
8136
                while (segment < use_sg) {
8137
                        u_long baddr = scsi_sg_dma_address(&scatter[segment]);
8138
                        unsigned int len = scsi_sg_dma_len(&scatter[segment]);
8139
 
8140
                        data[segment].addr = cpu_to_scr(baddr);
8141
                        data[segment].size = cpu_to_scr(len);
8142
                        cp->data_len      += len;
8143
                        ++segment;
8144
                }
8145
        }
8146
        else {
8147
                return -1;
8148
        }
8149
 
8150
        return segment;
8151
}
8152
 
8153
/*==========================================================
8154
**
8155
**
8156
**      Test the pci bus snoop logic :-(
8157
**
8158
**      Has to be called with interrupts disabled.
8159
**
8160
**
8161
**==========================================================
8162
*/
8163
 
8164
#ifndef SCSI_NCR_IOMAPPED
8165
static int __init ncr_regtest (struct ncb* np)
8166
{
8167
        register volatile u_int32 data;
8168
        /*
8169
        **      ncr registers may NOT be cached.
8170
        **      write 0xffffffff to a read only register area,
8171
        **      and try to read it back.
8172
        */
8173
        data = 0xffffffff;
8174
        OUTL_OFF(offsetof(struct ncr_reg, nc_dstat), data);
8175
        data = INL_OFF(offsetof(struct ncr_reg, nc_dstat));
8176
#if 1
8177
        if (data == 0xffffffff) {
8178
#else
8179
        if ((data & 0xe2f0fffd) != 0x02000080) {
8180
#endif
8181
                printk ("CACHE TEST FAILED: reg dstat-sstat2 readback %x.\n",
8182
                        (unsigned) data);
8183
                return (0x10);
8184
        };
8185
        return (0);
8186
}
8187
#endif
8188
 
8189
static int __init ncr_snooptest (struct ncb* np)
8190
{
8191
        u_int32 ncr_rd, ncr_wr, ncr_bk, host_rd, host_wr, pc;
8192
        int     i, err=0;
8193
#ifndef SCSI_NCR_IOMAPPED
8194
        if (np->reg) {
8195
            err |= ncr_regtest (np);
8196
            if (err) return (err);
8197
        }
8198
#endif
8199
        /*
8200
        **      init
8201
        */
8202
        pc  = NCB_SCRIPTH_PHYS (np, snooptest);
8203
        host_wr = 1;
8204
        ncr_wr  = 2;
8205
        /*
8206
        **      Set memory and register.
8207
        */
8208
        np->ncr_cache = cpu_to_scr(host_wr);
8209
        OUTL (nc_temp, ncr_wr);
8210
        /*
8211
        **      Start script (exchange values)
8212
        */
8213
        OUTL_DSP (pc);
8214
        /*
8215
        **      Wait 'til done (with timeout)
8216
        */
8217
        for (i=0; i<NCR_SNOOP_TIMEOUT; i++)
8218
                if (INB(nc_istat) & (INTF|SIP|DIP))
8219
                        break;
8220
        /*
8221
        **      Save termination position.
8222
        */
8223
        pc = INL (nc_dsp);
8224
        /*
8225
        **      Read memory and register.
8226
        */
8227
        host_rd = scr_to_cpu(np->ncr_cache);
8228
        ncr_rd  = INL (nc_scratcha);
8229
        ncr_bk  = INL (nc_temp);
8230
        /*
8231
        **      Reset ncr chip
8232
        */
8233
        OUTB (nc_istat,  SRST);
8234
        UDELAY (100);
8235
        OUTB (nc_istat,  0   );
8236
        /*
8237
        **      check for timeout
8238
        */
8239
        if (i>=NCR_SNOOP_TIMEOUT) {
8240
                printk ("CACHE TEST FAILED: timeout.\n");
8241
                return (0x20);
8242
        };
8243
        /*
8244
        **      Check termination position.
8245
        */
8246
        if (pc != NCB_SCRIPTH_PHYS (np, snoopend)+8) {
8247
                printk ("CACHE TEST FAILED: script execution failed.\n");
8248
                printk ("start=%08lx, pc=%08lx, end=%08lx\n",
8249
                        (u_long) NCB_SCRIPTH_PHYS (np, snooptest), (u_long) pc,
8250
                        (u_long) NCB_SCRIPTH_PHYS (np, snoopend) +8);
8251
                return (0x40);
8252
        };
8253
        /*
8254
        **      Show results.
8255
        */
8256
        if (host_wr != ncr_rd) {
8257
                printk ("CACHE TEST FAILED: host wrote %d, ncr read %d.\n",
8258
                        (int) host_wr, (int) ncr_rd);
8259
                err |= 1;
8260
        };
8261
        if (host_rd != ncr_wr) {
8262
                printk ("CACHE TEST FAILED: ncr wrote %d, host read %d.\n",
8263
                        (int) ncr_wr, (int) host_rd);
8264
                err |= 2;
8265
        };
8266
        if (ncr_bk != ncr_wr) {
8267
                printk ("CACHE TEST FAILED: ncr wrote %d, read back %d.\n",
8268
                        (int) ncr_wr, (int) ncr_bk);
8269
                err |= 4;
8270
        };
8271
        return (err);
8272
}
8273
 
8274
/*==========================================================
8275
**
8276
**
8277
**      Device lookup.
8278
**
8279
**      @GENSCSI@ should be integrated to scsiconf.c
8280
**
8281
**
8282
**==========================================================
8283
*/
8284
 
8285
struct table_entry {
8286
        char *  manufacturer;
8287
        char *  model;
8288
        char *  version;
8289
        u_long  info;
8290
};
8291
 
8292
static struct table_entry device_tab[] =
8293
{
8294
#if 0
8295
        {"", "", "", QUIRK_NOMSG},
8296
#endif
8297
        {"SONY", "SDT-5000", "3.17", QUIRK_NOMSG},
8298
        {"WangDAT", "Model 2600", "01.7", QUIRK_NOMSG},
8299
        {"WangDAT", "Model 3200", "02.2", QUIRK_NOMSG},
8300
        {"WangDAT", "Model 1300", "02.4", QUIRK_NOMSG},
8301
        {"", "", "", 0} /* catch all: must be last entry. */
8302
};
8303
 
8304
static u_long ncr_lookup(char * id)
8305
{
8306
        struct table_entry * p = device_tab;
8307
        char *d, *r, c;
8308
 
8309
        for (;;p++) {
8310
 
8311
                d = id+8;
8312
                r = p->manufacturer;
8313
                while ((c=*r++)) if (c!=*d++) break;
8314
                if (c) continue;
8315
 
8316
                d = id+16;
8317
                r = p->model;
8318
                while ((c=*r++)) if (c!=*d++) break;
8319
                if (c) continue;
8320
 
8321
                d = id+32;
8322
                r = p->version;
8323
                while ((c=*r++)) if (c!=*d++) break;
8324
                if (c) continue;
8325
 
8326
                return (p->info);
8327
        }
8328
}
8329
 
8330
/*==========================================================
8331
**
8332
**      Determine the ncr's clock frequency.
8333
**      This is essential for the negotiation
8334
**      of the synchronous transfer rate.
8335
**
8336
**==========================================================
8337
**
8338
**      Note: we have to return the correct value.
8339
**      THERE IS NO SAVE DEFAULT VALUE.
8340
**
8341
**      Most NCR/SYMBIOS boards are delivered with a 40 Mhz clock.
8342
**      53C860 and 53C875 rev. 1 support fast20 transfers but
8343
**      do not have a clock doubler and so are provided with a
8344
**      80 MHz clock. All other fast20 boards incorporate a doubler
8345
**      and so should be delivered with a 40 MHz clock.
8346
**      The future fast40 chips (895/895) use a 40 Mhz base clock
8347
**      and provide a clock quadrupler (160 Mhz). The code below
8348
**      tries to deal as cleverly as possible with all this stuff.
8349
**
8350
**----------------------------------------------------------
8351
*/
8352
 
8353
/*
8354
 *      Select NCR SCSI clock frequency
8355
 */
8356
static void ncr_selectclock(ncb_p np, u_char scntl3)
8357
{
8358
        if (np->multiplier < 2) {
8359
                OUTB(nc_scntl3, scntl3);
8360
                return;
8361
        }
8362
 
8363
        if (bootverbose >= 2)
8364
                printk ("%s: enabling clock multiplier\n", ncr_name(np));
8365
 
8366
        OUTB(nc_stest1, DBLEN);    /* Enable clock multiplier             */
8367
        if (np->multiplier > 2) {  /* Poll bit 5 of stest4 for quadrupler */
8368
                int i = 20;
8369
                while (!(INB(nc_stest4) & LCKFRQ) && --i > 0)
8370
                        UDELAY (20);
8371
                if (!i)
8372
                        printk("%s: the chip cannot lock the frequency\n", ncr_name(np));
8373
        } else                  /* Wait 20 micro-seconds for doubler    */
8374
                UDELAY (20);
8375
        OUTB(nc_stest3, HSC);           /* Halt the scsi clock          */
8376
        OUTB(nc_scntl3, scntl3);
8377
        OUTB(nc_stest1, (DBLEN|DBLSEL));/* Select clock multiplier      */
8378
        OUTB(nc_stest3, 0x00);          /* Restart scsi clock           */
8379
}
8380
 
8381
 
8382
/*
8383
 *      calculate NCR SCSI clock frequency (in KHz)
8384
 */
8385
static unsigned __init ncrgetfreq (ncb_p np, int gen)
8386
{
8387
        unsigned ms = 0;
8388
        char count = 0;
8389
 
8390
        /*
8391
         * Measure GEN timer delay in order
8392
         * to calculate SCSI clock frequency
8393
         *
8394
         * This code will never execute too
8395
         * many loop iterations (if DELAY is
8396
         * reasonably correct). It could get
8397
         * too low a delay (too high a freq.)
8398
         * if the CPU is slow executing the
8399
         * loop for some reason (an NMI, for
8400
         * example). For this reason we will
8401
         * if multiple measurements are to be
8402
         * performed trust the higher delay
8403
         * (lower frequency returned).
8404
         */
8405
        OUTB (nc_stest1, 0);     /* make sure clock doubler is OFF */
8406
        OUTW (nc_sien , 0);      /* mask all scsi interrupts */
8407
        (void) INW (nc_sist);   /* clear pending scsi interrupt */
8408
        OUTB (nc_dien , 0);      /* mask all dma interrupts */
8409
        (void) INW (nc_sist);   /* another one, just to be sure :) */
8410
        OUTB (nc_scntl3, 4);    /* set pre-scaler to divide by 3 */
8411
        OUTB (nc_stime1, 0);     /* disable general purpose timer */
8412
        OUTB (nc_stime1, gen);  /* set to nominal delay of 1<<gen * 125us */
8413
        while (!(INW(nc_sist) & GEN) && ms++ < 100000) {
8414
                for (count = 0; count < 10; count ++)
8415
                        UDELAY (100);   /* count ms */
8416
        }
8417
        OUTB (nc_stime1, 0);     /* disable general purpose timer */
8418
        /*
8419
         * set prescaler to divide by whatever 0 means
8420
         * 0 ought to choose divide by 2, but appears
8421
         * to set divide by 3.5 mode in my 53c810 ...
8422
         */
8423
        OUTB (nc_scntl3, 0);
8424
 
8425
        if (bootverbose >= 2)
8426
                printk ("%s: Delay (GEN=%d): %u msec\n", ncr_name(np), gen, ms);
8427
        /*
8428
         * adjust for prescaler, and convert into KHz
8429
         */
8430
        return ms ? ((1 << gen) * 4340) / ms : 0;
8431
}
8432
 
8433
/*
8434
 *      Get/probe NCR SCSI clock frequency
8435
 */
8436
static void __init ncr_getclock (ncb_p np, int mult)
8437
{
8438
        unsigned char scntl3 = INB(nc_scntl3);
8439
        unsigned char stest1 = INB(nc_stest1);
8440
        unsigned f1;
8441
 
8442
        np->multiplier = 1;
8443
        f1 = 40000;
8444
 
8445
        /*
8446
        **      True with 875 or 895 with clock multiplier selected
8447
        */
8448
        if (mult > 1 && (stest1 & (DBLEN+DBLSEL)) == DBLEN+DBLSEL) {
8449
                if (bootverbose >= 2)
8450
                        printk ("%s: clock multiplier found\n", ncr_name(np));
8451
                np->multiplier = mult;
8452
        }
8453
 
8454
        /*
8455
        **      If multiplier not found or scntl3 not 7,5,3,
8456
        **      reset chip and get frequency from general purpose timer.
8457
        **      Otherwise trust scntl3 BIOS setting.
8458
        */
8459
        if (np->multiplier != mult || (scntl3 & 7) < 3 || !(scntl3 & 1)) {
8460
                unsigned f2;
8461
 
8462
                OUTB(nc_istat, SRST); UDELAY (5); OUTB(nc_istat, 0);
8463
 
8464
                (void) ncrgetfreq (np, 11);     /* throw away first result */
8465
                f1 = ncrgetfreq (np, 11);
8466
                f2 = ncrgetfreq (np, 11);
8467
 
8468
                if (bootverbose)
8469
                        printk ("%s: NCR clock is %uKHz, %uKHz\n", ncr_name(np), f1, f2);
8470
 
8471
                if (f1 > f2) f1 = f2;           /* trust lower result   */
8472
 
8473
                if      (f1 <   45000)          f1 =  40000;
8474
                else if (f1 <   55000)          f1 =  50000;
8475
                else                            f1 =  80000;
8476
 
8477
                if (f1 < 80000 && mult > 1) {
8478
                        if (bootverbose >= 2)
8479
                                printk ("%s: clock multiplier assumed\n", ncr_name(np));
8480
                        np->multiplier  = mult;
8481
                }
8482
        } else {
8483
                if      ((scntl3 & 7) == 3)     f1 =  40000;
8484
                else if ((scntl3 & 7) == 5)     f1 =  80000;
8485
                else                            f1 = 160000;
8486
 
8487
                f1 /= np->multiplier;
8488
        }
8489
 
8490
        /*
8491
        **      Compute controller synchronous parameters.
8492
        */
8493
        f1              *= np->multiplier;
8494
        np->clock_khz   = f1;
8495
}
8496
 
8497
/*===================== LINUX ENTRY POINTS SECTION ==========================*/
8498
 
8499
/*
8500
**   Linux select queue depths function
8501
*/
8502
 
8503
static void ncr53c8xx_select_queue_depths(struct Scsi_Host *host, struct scsi_device *devlist)
8504
{
8505
        struct scsi_device *device;
8506
 
8507
        for (device = devlist; device; device = device->next) {
8508
                ncb_p np;
8509
                tcb_p tp;
8510
                lcb_p lp;
8511
                int numtags;
8512
 
8513
                if (device->host != host)
8514
                        continue;
8515
 
8516
                np = ((struct host_data *) host->hostdata)->ncb;
8517
                tp = &np->target[device->id];
8518
                lp = tp->lp[device->lun];
8519
 
8520
                /*
8521
                **      Select queue depth from driver setup.
8522
                **      Donnot use more than configured by user.
8523
                **      Use at least 2.
8524
                **      Donnot use more than our maximum.
8525
                */
8526
                numtags = device_queue_depth(np->unit, device->id, device->lun);
8527
                if (numtags > tp->usrtags)
8528
                        numtags = tp->usrtags;
8529
                if (!device->tagged_supported)
8530
                        numtags = 1;
8531
                device->queue_depth = numtags;
8532
                if (device->queue_depth < 2)
8533
                        device->queue_depth = 2;
8534
                if (device->queue_depth > MAX_TAGS)
8535
                        device->queue_depth = MAX_TAGS;
8536
 
8537
                /*
8538
                **      Since the queue depth is not tunable under Linux,
8539
                **      we need to know this value in order not to
8540
                **      announce stupid things to user.
8541
                */
8542
                if (lp) {
8543
                        lp->numtags = lp->maxtags = numtags;
8544
                        lp->scdev_depth = device->queue_depth;
8545
                }
8546
                ncr_setup_tags (np, device->id, device->lun);
8547
 
8548
#ifdef DEBUG_NCR53C8XX
8549
printk("ncr53c8xx_select_queue_depth: host=%d, id=%d, lun=%d, depth=%d\n",
8550
        np->unit, device->id, device->lun, device->queue_depth);
8551
#endif
8552
        }
8553
}
8554
 
8555
/*
8556
**   Linux entry point of queuecommand() function
8557
*/
8558
 
8559
int ncr53c8xx_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *))
8560
{
8561
     ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
8562
     unsigned long flags;
8563
     int sts;
8564
 
8565
#ifdef DEBUG_NCR53C8XX
8566
printk("ncr53c8xx_queue_command\n");
8567
#endif
8568
 
8569
     cmd->scsi_done     = done;
8570
     cmd->host_scribble = NULL;
8571
#ifdef SCSI_NCR_DYNAMIC_DMA_MAPPING
8572
     cmd->__data_mapped = 0;
8573
     cmd->__data_mapping = 0;
8574
#endif
8575
 
8576
     NCR_LOCK_NCB(np, flags);
8577
 
8578
     if ((sts = ncr_queue_command(np, cmd)) != DID_OK) {
8579
          cmd->result = ScsiResult(sts, 0);
8580
#ifdef DEBUG_NCR53C8XX
8581
printk("ncr53c8xx : command not queued - result=%d\n", sts);
8582
#endif
8583
     }
8584
#ifdef DEBUG_NCR53C8XX
8585
     else
8586
printk("ncr53c8xx : command successfully queued\n");
8587
#endif
8588
 
8589
     NCR_UNLOCK_NCB(np, flags);
8590
 
8591
     if (sts != DID_OK) {
8592
          unmap_scsi_data(np, cmd);
8593
          done(cmd);
8594
     }
8595
 
8596
     return sts;
8597
}
8598
 
8599
/*
8600
**   Linux entry point of the interrupt handler.
8601
**   Since linux versions > 1.3.70, we trust the kernel for
8602
**   passing the internal host descriptor as 'dev_id'.
8603
**   Otherwise, we scan the host list and call the interrupt
8604
**   routine for each host that uses this IRQ.
8605
*/
8606
 
8607
static void ncr53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
8608
{
8609
     unsigned long flags;
8610
     ncb_p np = (ncb_p) dev_id;
8611
     Scsi_Cmnd *done_list;
8612
 
8613
#ifdef DEBUG_NCR53C8XX
8614
     printk("ncr53c8xx : interrupt received\n");
8615
#endif
8616
 
8617
     if (DEBUG_FLAGS & DEBUG_TINY) printk ("[");
8618
 
8619
     NCR_LOCK_NCB(np, flags);
8620
     ncr_exception(np);
8621
     done_list     = np->done_list;
8622
     np->done_list = 0;
8623
     NCR_UNLOCK_NCB(np, flags);
8624
 
8625
     if (DEBUG_FLAGS & DEBUG_TINY) printk ("]\n");
8626
 
8627
     if (done_list) {
8628
          NCR_LOCK_SCSI_DONE(np, flags);
8629
          ncr_flush_done_cmds(done_list);
8630
          NCR_UNLOCK_SCSI_DONE(np, flags);
8631
     }
8632
}
8633
 
8634
/*
8635
**   Linux entry point of the timer handler
8636
*/
8637
 
8638
static void ncr53c8xx_timeout(unsigned long npref)
8639
{
8640
     ncb_p np = (ncb_p) npref;
8641
     unsigned long flags;
8642
     Scsi_Cmnd *done_list;
8643
 
8644
     NCR_LOCK_NCB(np, flags);
8645
     ncr_timeout((ncb_p) np);
8646
     done_list     = np->done_list;
8647
     np->done_list = 0;
8648
     NCR_UNLOCK_NCB(np, flags);
8649
 
8650
     if (done_list) {
8651
          NCR_LOCK_SCSI_DONE(np, flags);
8652
          ncr_flush_done_cmds(done_list);
8653
          NCR_UNLOCK_SCSI_DONE(np, flags);
8654
     }
8655
}
8656
 
8657
/*
8658
**   Linux entry point of reset() function
8659
*/
8660
 
8661
#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
8662
int ncr53c8xx_reset(Scsi_Cmnd *cmd, unsigned int reset_flags)
8663
#else
8664
int ncr53c8xx_reset(Scsi_Cmnd *cmd)
8665
#endif
8666
{
8667
        ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
8668
        int sts;
8669
        unsigned long flags;
8670
        Scsi_Cmnd *done_list;
8671
 
8672
#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
8673
        printk("ncr53c8xx_reset: pid=%lu reset_flags=%x serial_number=%ld serial_number_at_timeout=%ld\n",
8674
                cmd->pid, reset_flags, cmd->serial_number, cmd->serial_number_at_timeout);
8675
#else
8676
        printk("ncr53c8xx_reset: command pid %lu\n", cmd->pid);
8677
#endif
8678
 
8679
        NCR_LOCK_NCB(np, flags);
8680
 
8681
        /*
8682
         * We have to just ignore reset requests in some situations.
8683
         */
8684
#if defined SCSI_RESET_NOT_RUNNING
8685
        if (cmd->serial_number != cmd->serial_number_at_timeout) {
8686
                sts = SCSI_RESET_NOT_RUNNING;
8687
                goto out;
8688
        }
8689
#endif
8690
        /*
8691
         * If the mid-level driver told us reset is synchronous, it seems
8692
         * that we must call the done() callback for the involved command,
8693
         * even if this command was not queued to the low-level driver,
8694
         * before returning SCSI_RESET_SUCCESS.
8695
         */
8696
 
8697
#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
8698
        sts = ncr_reset_bus(np, cmd,
8699
        (reset_flags & (SCSI_RESET_SYNCHRONOUS | SCSI_RESET_ASYNCHRONOUS)) == SCSI_RESET_SYNCHRONOUS);
8700
#else
8701
        sts = ncr_reset_bus(np, cmd, 0);
8702
#endif
8703
 
8704
        /*
8705
         * Since we always reset the controller, when we return success,
8706
         * we add this information to the return code.
8707
         */
8708
#if defined SCSI_RESET_HOST_RESET
8709
        if (sts == SCSI_RESET_SUCCESS)
8710
                sts |= SCSI_RESET_HOST_RESET;
8711
#endif
8712
 
8713
out:
8714
        done_list     = np->done_list;
8715
        np->done_list = 0;
8716
        NCR_UNLOCK_NCB(np, flags);
8717
 
8718
        ncr_flush_done_cmds(done_list);
8719
 
8720
        return sts;
8721
}
8722
 
8723
/*
8724
**   Linux entry point of abort() function
8725
*/
8726
 
8727
int ncr53c8xx_abort(Scsi_Cmnd *cmd)
8728
{
8729
        ncb_p np = ((struct host_data *) cmd->host->hostdata)->ncb;
8730
        int sts;
8731
        unsigned long flags;
8732
        Scsi_Cmnd *done_list;
8733
 
8734
#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
8735
        printk("ncr53c8xx_abort: pid=%lu serial_number=%ld serial_number_at_timeout=%ld\n",
8736
                cmd->pid, cmd->serial_number, cmd->serial_number_at_timeout);
8737
#else
8738
        printk("ncr53c8xx_abort: command pid %lu\n", cmd->pid);
8739
#endif
8740
 
8741
        NCR_LOCK_NCB(np, flags);
8742
 
8743
#if defined SCSI_RESET_SYNCHRONOUS && defined SCSI_RESET_ASYNCHRONOUS
8744
        /*
8745
         * We have to just ignore abort requests in some situations.
8746
         */
8747
        if (cmd->serial_number != cmd->serial_number_at_timeout) {
8748
                sts = SCSI_ABORT_NOT_RUNNING;
8749
                goto out;
8750
        }
8751
#endif
8752
 
8753
        sts = ncr_abort_command(np, cmd);
8754
out:
8755
        done_list     = np->done_list;
8756
        np->done_list = 0;
8757
        NCR_UNLOCK_NCB(np, flags);
8758
 
8759
        ncr_flush_done_cmds(done_list);
8760
 
8761
        return sts;
8762
}
8763
 
8764
 
8765
#ifdef MODULE
8766
int ncr53c8xx_release(struct Scsi_Host *host)
8767
{
8768
#ifdef DEBUG_NCR53C8XX
8769
printk("ncr53c8xx : release\n");
8770
#endif
8771
     ncr_detach(((struct host_data *) host->hostdata)->ncb);
8772
 
8773
     return 1;
8774
}
8775
#endif
8776
 
8777
 
8778
/*
8779
**      Scsi command waiting list management.
8780
**
8781
**      It may happen that we cannot insert a scsi command into the start queue,
8782
**      in the following circumstances.
8783
**              Too few preallocated ccb(s),
8784
**              maxtags < cmd_per_lun of the Linux host control block,
8785
**              etc...
8786
**      Such scsi commands are inserted into a waiting list.
8787
**      When a scsi command complete, we try to requeue the commands of the
8788
**      waiting list.
8789
*/
8790
 
8791
#define next_wcmd host_scribble
8792
 
8793
static void insert_into_waiting_list(ncb_p np, Scsi_Cmnd *cmd)
8794
{
8795
        Scsi_Cmnd *wcmd;
8796
 
8797
#ifdef DEBUG_WAITING_LIST
8798
        printk("%s: cmd %lx inserted into waiting list\n", ncr_name(np), (u_long) cmd);
8799
#endif
8800
        cmd->next_wcmd = 0;
8801
        if (!(wcmd = np->waiting_list)) np->waiting_list = cmd;
8802
        else {
8803
                while ((wcmd->next_wcmd) != 0)
8804
                        wcmd = (Scsi_Cmnd *) wcmd->next_wcmd;
8805
                wcmd->next_wcmd = (char *) cmd;
8806
        }
8807
}
8808
 
8809
static Scsi_Cmnd *retrieve_from_waiting_list(int to_remove, ncb_p np, Scsi_Cmnd *cmd)
8810
{
8811
        Scsi_Cmnd **pcmd = &np->waiting_list;
8812
 
8813
        while (*pcmd) {
8814
                if (cmd == *pcmd) {
8815
                        if (to_remove) {
8816
                                *pcmd = (Scsi_Cmnd *) cmd->next_wcmd;
8817
                                cmd->next_wcmd = 0;
8818
                        }
8819
#ifdef DEBUG_WAITING_LIST
8820
        printk("%s: cmd %lx retrieved from waiting list\n", ncr_name(np), (u_long) cmd);
8821
#endif
8822
                        return cmd;
8823
                }
8824
                pcmd = (Scsi_Cmnd **) &(*pcmd)->next_wcmd;
8825
        }
8826
        return 0;
8827
}
8828
 
8829
static void process_waiting_list(ncb_p np, int sts)
8830
{
8831
        Scsi_Cmnd *waiting_list, *wcmd;
8832
 
8833
        waiting_list = np->waiting_list;
8834
        np->waiting_list = 0;
8835
 
8836
#ifdef DEBUG_WAITING_LIST
8837
        if (waiting_list) printk("%s: waiting_list=%lx processing sts=%d\n", ncr_name(np), (u_long) waiting_list, sts);
8838
#endif
8839
        while ((wcmd = waiting_list) != 0) {
8840
                waiting_list = (Scsi_Cmnd *) wcmd->next_wcmd;
8841
                wcmd->next_wcmd = 0;
8842
                if (sts == DID_OK) {
8843
#ifdef DEBUG_WAITING_LIST
8844
        printk("%s: cmd %lx trying to requeue\n", ncr_name(np), (u_long) wcmd);
8845
#endif
8846
                        sts = ncr_queue_command(np, wcmd);
8847
                }
8848
                if (sts != DID_OK) {
8849
#ifdef DEBUG_WAITING_LIST
8850
        printk("%s: cmd %lx done forced sts=%d\n", ncr_name(np), (u_long) wcmd, sts);
8851
#endif
8852
                        wcmd->result = ScsiResult(sts, 0);
8853
                        ncr_queue_done_cmd(np, wcmd);
8854
                }
8855
        }
8856
}
8857
 
8858
#undef next_wcmd
8859
 
8860
#ifdef SCSI_NCR_PROC_INFO_SUPPORT
8861
 
8862
/*=========================================================================
8863
**      Proc file system stuff
8864
**
8865
**      A read operation returns profile information.
8866
**      A write operation is a control command.
8867
**      The string is parsed in the driver code and the command is passed
8868
**      to the ncr_usercmd() function.
8869
**=========================================================================
8870
*/
8871
 
8872
#ifdef SCSI_NCR_USER_COMMAND_SUPPORT
8873
 
8874
#define is_digit(c)     ((c) >= '0' && (c) <= '9')
8875
#define digit_to_bin(c) ((c) - '0')
8876
#define is_space(c)     ((c) == ' ' || (c) == '\t')
8877
 
8878
static int skip_spaces(char *ptr, int len)
8879
{
8880
        int cnt, c;
8881
 
8882
        for (cnt = len; cnt > 0 && (c = *ptr++) && is_space(c); cnt--);
8883
 
8884
        return (len - cnt);
8885
}
8886
 
8887
static int get_int_arg(char *ptr, int len, u_long *pv)
8888
{
8889
        int     cnt, c;
8890
        u_long  v;
8891
 
8892
        for (v = 0, cnt = len; cnt > 0 && (c = *ptr++) && is_digit(c); cnt--) {
8893
                v = (v * 10) + digit_to_bin(c);
8894
        }
8895
 
8896
        if (pv)
8897
                *pv = v;
8898
 
8899
        return (len - cnt);
8900
}
8901
 
8902
static int is_keyword(char *ptr, int len, char *verb)
8903
{
8904
        int verb_len = strlen(verb);
8905
 
8906
        if (len >= strlen(verb) && !memcmp(verb, ptr, verb_len))
8907
                return verb_len;
8908
        else
8909
                return 0;
8910
 
8911
}
8912
 
8913
#define SKIP_SPACES(min_spaces)                                         \
8914
        if ((arg_len = skip_spaces(ptr, len)) < (min_spaces))           \
8915
                return -EINVAL;                                         \
8916
        ptr += arg_len; len -= arg_len;
8917
 
8918
#define GET_INT_ARG(v)                                                  \
8919
        if (!(arg_len = get_int_arg(ptr, len, &(v))))                   \
8920
                return -EINVAL;                                         \
8921
        ptr += arg_len; len -= arg_len;
8922
 
8923
 
8924
/*
8925
**      Parse a control command
8926
*/
8927
 
8928
static int ncr_user_command(ncb_p np, char *buffer, int length)
8929
{
8930
        char *ptr       = buffer;
8931
        int len         = length;
8932
        struct usrcmd    *uc = &np->user;
8933
        int             arg_len;
8934
        u_long          target;
8935
 
8936
        bzero(uc, sizeof(*uc));
8937
 
8938
        if (len > 0 && ptr[len-1] == '\n')
8939
                --len;
8940
 
8941
        if      ((arg_len = is_keyword(ptr, len, "setsync")) != 0)
8942
                uc->cmd = UC_SETSYNC;
8943
        else if ((arg_len = is_keyword(ptr, len, "settags")) != 0)
8944
                uc->cmd = UC_SETTAGS;
8945
        else if ((arg_len = is_keyword(ptr, len, "setorder")) != 0)
8946
                uc->cmd = UC_SETORDER;
8947
        else if ((arg_len = is_keyword(ptr, len, "setverbose")) != 0)
8948
                uc->cmd = UC_SETVERBOSE;
8949
        else if ((arg_len = is_keyword(ptr, len, "setwide")) != 0)
8950
                uc->cmd = UC_SETWIDE;
8951
        else if ((arg_len = is_keyword(ptr, len, "setdebug")) != 0)
8952
                uc->cmd = UC_SETDEBUG;
8953
        else if ((arg_len = is_keyword(ptr, len, "setflag")) != 0)
8954
                uc->cmd = UC_SETFLAG;
8955
        else
8956
                arg_len = 0;
8957
 
8958
#ifdef DEBUG_PROC_INFO
8959
printk("ncr_user_command: arg_len=%d, cmd=%ld\n", arg_len, uc->cmd);
8960
#endif
8961
 
8962
        if (!arg_len)
8963
                return -EINVAL;
8964
        ptr += arg_len; len -= arg_len;
8965
 
8966
        switch(uc->cmd) {
8967
        case UC_SETSYNC:
8968
        case UC_SETTAGS:
8969
        case UC_SETWIDE:
8970
        case UC_SETFLAG:
8971
                SKIP_SPACES(1);
8972
                if ((arg_len = is_keyword(ptr, len, "all")) != 0) {
8973
                        ptr += arg_len; len -= arg_len;
8974
                        uc->target = ~0;
8975
                } else {
8976
                        GET_INT_ARG(target);
8977
                        uc->target = (1<<target);
8978
#ifdef DEBUG_PROC_INFO
8979
printk("ncr_user_command: target=%ld\n", target);
8980
#endif
8981
                }
8982
                break;
8983
        }
8984
 
8985
        switch(uc->cmd) {
8986
        case UC_SETVERBOSE:
8987
        case UC_SETSYNC:
8988
        case UC_SETTAGS:
8989
        case UC_SETWIDE:
8990
                SKIP_SPACES(1);
8991
                GET_INT_ARG(uc->data);
8992
#ifdef DEBUG_PROC_INFO
8993
printk("ncr_user_command: data=%ld\n", uc->data);
8994
#endif
8995
                break;
8996
        case UC_SETORDER:
8997
                SKIP_SPACES(1);
8998
                if      ((arg_len = is_keyword(ptr, len, "simple")))
8999
                        uc->data = M_SIMPLE_TAG;
9000
                else if ((arg_len = is_keyword(ptr, len, "ordered")))
9001
                        uc->data = M_ORDERED_TAG;
9002
                else if ((arg_len = is_keyword(ptr, len, "default")))
9003
                        uc->data = 0;
9004
                else
9005
                        return -EINVAL;
9006
                break;
9007
        case UC_SETDEBUG:
9008
                while (len > 0) {
9009
                        SKIP_SPACES(1);
9010
                        if      ((arg_len = is_keyword(ptr, len, "alloc")))
9011
                                uc->data |= DEBUG_ALLOC;
9012
                        else if ((arg_len = is_keyword(ptr, len, "phase")))
9013
                                uc->data |= DEBUG_PHASE;
9014
                        else if ((arg_len = is_keyword(ptr, len, "queue")))
9015
                                uc->data |= DEBUG_QUEUE;
9016
                        else if ((arg_len = is_keyword(ptr, len, "result")))
9017
                                uc->data |= DEBUG_RESULT;
9018
                        else if ((arg_len = is_keyword(ptr, len, "scatter")))
9019
                                uc->data |= DEBUG_SCATTER;
9020
                        else if ((arg_len = is_keyword(ptr, len, "script")))
9021
                                uc->data |= DEBUG_SCRIPT;
9022
                        else if ((arg_len = is_keyword(ptr, len, "tiny")))
9023
                                uc->data |= DEBUG_TINY;
9024
                        else if ((arg_len = is_keyword(ptr, len, "timing")))
9025
                                uc->data |= DEBUG_TIMING;
9026
                        else if ((arg_len = is_keyword(ptr, len, "nego")))
9027
                                uc->data |= DEBUG_NEGO;
9028
                        else if ((arg_len = is_keyword(ptr, len, "tags")))
9029
                                uc->data |= DEBUG_TAGS;
9030
                        else
9031
                                return -EINVAL;
9032
                        ptr += arg_len; len -= arg_len;
9033
                }
9034
#ifdef DEBUG_PROC_INFO
9035
printk("ncr_user_command: data=%ld\n", uc->data);
9036
#endif
9037
                break;
9038
        case UC_SETFLAG:
9039
                while (len > 0) {
9040
                        SKIP_SPACES(1);
9041
                        if      ((arg_len = is_keyword(ptr, len, "trace")))
9042
                                uc->data |= UF_TRACE;
9043
                        else if ((arg_len = is_keyword(ptr, len, "no_disc")))
9044
                                uc->data |= UF_NODISC;
9045
                        else
9046
                                return -EINVAL;
9047
                        ptr += arg_len; len -= arg_len;
9048
                }
9049
                break;
9050
        default:
9051
                break;
9052
        }
9053
 
9054
        if (len)
9055
                return -EINVAL;
9056
        else {
9057
                long flags;
9058
 
9059
                NCR_LOCK_NCB(np, flags);
9060
                ncr_usercmd (np);
9061
                NCR_UNLOCK_NCB(np, flags);
9062
        }
9063
        return length;
9064
}
9065
 
9066
#endif  /* SCSI_NCR_USER_COMMAND_SUPPORT */
9067
 
9068
 
9069
#ifdef SCSI_NCR_USER_INFO_SUPPORT
9070
/*
9071
**      Copy formatted information into the input buffer.
9072
*/
9073
 
9074
static int ncr_host_info(ncb_p np, char *ptr, off_t offset, int len)
9075
{
9076
        struct info_str info;
9077
 
9078
        info.buffer     = ptr;
9079
        info.length     = len;
9080
        info.offset     = offset;
9081
        info.pos        = 0;
9082
 
9083
        copy_info(&info, "  Chip NCR53C%s, device id 0x%x, "
9084
                         "revision id 0x%x\n",
9085
                         np->chip_name, np->device_id,  np->revision_id);
9086
        copy_info(&info, "  On PCI bus %d, device %d, function %d, "
9087
#ifdef __sparc__
9088
                "IRQ %s\n",
9089
#else
9090
                "IRQ %d\n",
9091
#endif
9092
                np->bus, (np->device_fn & 0xf8) >> 3, np->device_fn & 7,
9093
#ifdef __sparc__
9094
                __irq_itoa(np->irq));
9095
#else
9096
                (int) np->irq);
9097
#endif
9098
        copy_info(&info, "  Synchronous period factor %d, "
9099
                         "max commands per lun %d\n",
9100
                         (int) np->minsync, MAX_TAGS);
9101
 
9102
        if (driver_setup.debug || driver_setup.verbose > 1) {
9103
                copy_info(&info, "  Debug flags 0x%x, verbosity level %d\n",
9104
                          driver_setup.debug, driver_setup.verbose);
9105
        }
9106
 
9107
        return info.pos > info.offset? info.pos - info.offset : 0;
9108
}
9109
 
9110
#endif /* SCSI_NCR_USER_INFO_SUPPORT */
9111
 
9112
/*
9113
**      Entry point of the scsi proc fs of the driver.
9114
**      - func = 0 means read  (returns profile data)
9115
**      - func = 1 means write (parse user control command)
9116
*/
9117
 
9118
static int ncr53c8xx_proc_info(char *buffer, char **start, off_t offset,
9119
                        int length, int hostno, int func)
9120
{
9121
        struct Scsi_Host *host;
9122
        struct host_data *host_data;
9123
        ncb_p ncb = 0;
9124
        int retv;
9125
 
9126
#ifdef DEBUG_PROC_INFO
9127
printk("ncr53c8xx_proc_info: hostno=%d, func=%d\n", hostno, func);
9128
#endif
9129
 
9130
        for (host = first_host; host; host = host->next) {
9131
                if (host->hostt == the_template && host->host_no == hostno) {
9132
                        host_data = (struct host_data *) host->hostdata;
9133
                        ncb = host_data->ncb;
9134
                        break;
9135
                }
9136
        }
9137
 
9138
        if (!ncb)
9139
                return -EINVAL;
9140
 
9141
        if (func) {
9142
#ifdef  SCSI_NCR_USER_COMMAND_SUPPORT
9143
                retv = ncr_user_command(ncb, buffer, length);
9144
#else
9145
                retv = -EINVAL;
9146
#endif
9147
        }
9148
        else {
9149
                if (start)
9150
                        *start = buffer;
9151
#ifdef SCSI_NCR_USER_INFO_SUPPORT
9152
                retv = ncr_host_info(ncb, buffer, offset, length);
9153
#else
9154
                retv = -EINVAL;
9155
#endif
9156
        }
9157
 
9158
        return retv;
9159
}
9160
 
9161
/*=========================================================================
9162
**      End of proc file system stuff
9163
**=========================================================================
9164
*/
9165
#endif
9166
 
9167
 
9168
/*==========================================================
9169
**
9170
**      /proc directory entry.
9171
**
9172
**==========================================================
9173
*/
9174
#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
9175
static struct proc_dir_entry proc_scsi_ncr53c8xx = {
9176
    PROC_SCSI_NCR53C8XX, 9, NAME53C8XX,
9177
    S_IFDIR | S_IRUGO | S_IXUGO, 2
9178
};
9179
#endif
9180
 
9181
/*==========================================================
9182
**
9183
**      Boot command line.
9184
**
9185
**==========================================================
9186
*/
9187
#ifdef  MODULE
9188
char *ncr53c8xx = 0;     /* command line passed by insmod */
9189
# if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,30)
9190
MODULE_PARM(ncr53c8xx, "s");
9191
# endif
9192
#endif
9193
 
9194
int __init ncr53c8xx_setup(char *str)
9195
{
9196
        return sym53c8xx__setup(str);
9197
}
9198
 
9199
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,13)
9200
#ifndef MODULE
9201
__setup("ncr53c8xx=", ncr53c8xx_setup);
9202
#endif
9203
#endif
9204
 
9205
/*===================================================================
9206
**
9207
**   SYM53C8XX supported device list
9208
**
9209
**===================================================================
9210
*/
9211
 
9212
static u_short  ncr_chip_ids[]   __initdata = {
9213
        PCI_DEVICE_ID_NCR_53C810,
9214
        PCI_DEVICE_ID_NCR_53C815,
9215
        PCI_DEVICE_ID_NCR_53C820,
9216
        PCI_DEVICE_ID_NCR_53C825,
9217
        PCI_DEVICE_ID_NCR_53C860,
9218
        PCI_DEVICE_ID_NCR_53C875,
9219
        PCI_DEVICE_ID_NCR_53C875J,
9220
        PCI_DEVICE_ID_NCR_53C885,
9221
        PCI_DEVICE_ID_NCR_53C895,
9222
        PCI_DEVICE_ID_NCR_53C896,
9223
        PCI_DEVICE_ID_NCR_53C895A,
9224
        PCI_DEVICE_ID_NCR_53C1510D
9225
};
9226
 
9227
/*==========================================================
9228
**
9229
**      Chip detection entry point.
9230
**
9231
**==========================================================
9232
*/
9233
int __init ncr53c8xx_detect(Scsi_Host_Template *tpnt)
9234
{
9235
        /*
9236
        **    Initialize driver general stuff.
9237
        */
9238
#ifdef SCSI_NCR_PROC_INFO_SUPPORT
9239
#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27)
9240
     tpnt->proc_dir  = &proc_scsi_ncr53c8xx;
9241
#else
9242
     tpnt->proc_name = NAME53C8XX;
9243
#endif
9244
     tpnt->proc_info = ncr53c8xx_proc_info;
9245
#endif
9246
 
9247
#if     defined(SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT) && defined(MODULE)
9248
if (ncr53c8xx)
9249
        ncr53c8xx_setup(ncr53c8xx);
9250
#endif
9251
 
9252
        return sym53c8xx__detect(tpnt, ncr_chip_ids,
9253
                                 sizeof(ncr_chip_ids)/sizeof(ncr_chip_ids[0]));
9254
}
9255
 
9256
/*==========================================================
9257
**
9258
**   Entry point for info() function
9259
**
9260
**==========================================================
9261
*/
9262
const char *ncr53c8xx_info (struct Scsi_Host *host)
9263
{
9264
        return SCSI_NCR_DRIVER_NAME;
9265
}
9266
 
9267
/*
9268
**      Module stuff
9269
*/
9270
MODULE_LICENSE("GPL");
9271
 
9272
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0)
9273
static
9274
#endif
9275
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0) || defined(MODULE)
9276
Scsi_Host_Template driver_template = NCR53C8XX;
9277
#include "scsi_module.c"
9278
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.