Merge from vendor branch LIBARCHIVE:
[dragonfly.git] / sys / dev / disk / aic7xxx / aic79xx.reg
1 /*
2  * Aic79xx register and scratch ram definitions.
3  *
4  * Copyright (c) 1994-2001, 2004 Justin T. Gibbs.
5  * Copyright (c) 2000-2002 Adaptec Inc.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions, and the following disclaimer,
13  *    without modification.
14  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
15  *    substantially similar to the "NO WARRANTY" disclaimer below
16  *    ("Disclaimer") and any redistribution must be conditioned upon
17  *    including a substantially similar Disclaimer requirement for further
18  *    binary redistribution.
19  * 3. Neither the names of the above-listed copyright holders nor the names
20  *    of any contributors may be used to endorse or promote products derived
21  *    from this software without specific prior written permission.
22  *
23  * Alternatively, this software may be distributed under the terms of the
24  * GNU General Public License ("GPL") version 2 as published by the Free
25  * Software Foundation.
26  *
27  * NO WARRANTY
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
36  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
37  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38  * POSSIBILITY OF SUCH DAMAGES.
39  *
40  * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.reg,v 1.18 2004/08/04 17:55:34 gibbs Exp $
41  * $DragonFly: src/sys/dev/disk/aic7xxx/aic79xx.reg,v 1.5 2007/07/06 02:40:58 pavalos Exp $
42  */
43 VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $"
44
45 /*
46  * This file is processed by the aic7xxx_asm utility for use in assembling
47  * firmware for the aic79xx family of SCSI host adapters as well as to generate
48  * a C header file for use in the kernel portion of the Aic79xx driver.
49  */
50
51 /* Register window Modes */
52 #define M_DFF0          0
53 #define M_DFF1          1
54 #define M_CCHAN         2
55 #define M_SCSI          3
56 #define M_CFG           4
57 #define M_DST_SHIFT     4
58
59 #define MK_MODE(src, dst) ((src) | ((dst) << M_DST_SHIFT))
60 #define SET_MODE(src, dst)                                              \
61         SET_SRC_MODE    src;                                            \
62         SET_DST_MODE    dst;                                            \
63         if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {                      \
64                 mvi     MK_MODE(src, dst) call set_mode_work_around;    \
65         } else {                                                        \
66                 mvi     MODE_PTR, MK_MODE(src, dst);                    \
67         }
68
69 #define RESTORE_MODE(mode)                                              \
70         if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {                      \
71                 mov     mode call set_mode_work_around;                 \
72         } else {                                                        \
73                 mov     MODE_PTR, mode;                                 \
74         }
75
76 #define SET_SEQINTCODE(code)                                            \
77         if ((ahd->bugs & AHD_INTCOLLISION_BUG) != 0) {                  \
78                 mvi     code call set_seqint_work_around;               \
79         } else {                                                        \
80                 mvi     SEQINTCODE, code;                               \
81         }
82
83 /*
84  * Mode Pointer
85  * Controls which of the 5, 512byte, address spaces should be used
86  * as the source and destination of any register accesses in our
87  * register window.
88  */
89 register MODE_PTR {
90         address                 0x000
91         access_mode     RW
92         field   DST_MODE        0x70
93         field   SRC_MODE        0x07
94         mode_pointer
95 }
96
97 const SRC_MODE_SHIFT    0
98 const DST_MODE_SHIFT    4
99
100 /*
101  * Host Interrupt Status
102  */
103 register INTSTAT {
104         address                 0x001
105         access_mode     RW
106         field   HWERRINT        0x80
107         field   BRKADRINT       0x40
108         field   SWTMINT         0x20
109         field   PCIINT          0x10
110         field   SCSIINT         0x08
111         field   SEQINT          0x04
112         field   CMDCMPLT        0x02
113         field   SPLTINT         0x01
114         mask    INT_PEND 0xFF
115 }
116
117 /*
118  * Sequencer Interrupt Code
119  */
120 register SEQINTCODE {
121         address                 0x002
122         access_mode     RW
123         field {
124                 NO_SEQINT,                      /* No seqint pending. */
125                 BAD_PHASE,                      /* unknown scsi bus phase */
126                 SEND_REJECT,                    /* sending a message reject */
127                 PROTO_VIOLATION,                /* Protocol Violation */
128                 NO_MATCH,                       /* no cmd match for reconnect */
129                 IGN_WIDE_RES,                   /* Complex IGN Wide Res Msg */
130                 PDATA_REINIT,                   /*
131                                                  * Returned to data phase
132                                                  * that requires data
133                                                  * transfer pointers to be
134                                                  * recalculated from the
135                                                  * transfer residual.
136                                                  */
137                 HOST_MSG_LOOP,                  /*
138                                                  * The bus is ready for the
139                                                  * host to perform another
140                                                  * message transaction.  This
141                                                  * mechanism is used for things
142                                                  * like sync/wide negotiation
143                                                  * that require a kernel based
144                                                  * message state engine.
145                                                  */
146                 BAD_STATUS,                     /* Bad status from target */
147                 DATA_OVERRUN,                   /*
148                                                  * Target attempted to write
149                                                  * beyond the bounds of its
150                                                  * command.
151                                                  */
152                 MKMSG_FAILED,                   /*
153                                                  * Target completed command
154                                                  * without honoring our ATN
155                                                  * request to issue a message. 
156                                                  */
157                 MISSED_BUSFREE,                 /*
158                                                  * The sequencer never saw
159                                                  * the bus go free after
160                                                  * either a command complete
161                                                  * or disconnect message.
162                                                  */
163                 DUMP_CARD_STATE,
164                 ILLEGAL_PHASE,
165                 INVALID_SEQINT,
166                 CFG4ISTAT_INTR,
167                 STATUS_OVERRUN,
168                 CFG4OVERRUN,
169                 ENTERING_NONPACK,
170                 TASKMGMT_FUNC_COMPLETE,         /*
171                                                  * Task management function
172                                                  * request completed with
173                                                  * an expected busfree.
174                                                  */
175                 TASKMGMT_CMD_CMPLT_OKAY,        /*
176                                                  * A command with a non-zero
177                                                  * task management function
178                                                  * has completed via the normal
179                                                  * command completion method
180                                                  * for commands with a zero
181                                                  * task management function.
182                                                  * This happens when an attempt
183                                                  * to abort a command loses
184                                                  * the race for the command to
185                                                  * complete normally.
186                                                  */
187                 TRACEPOINT0,
188                 TRACEPOINT1,
189                 TRACEPOINT2,
190                 TRACEPOINT3,
191                 SAW_HWERR,
192                 BAD_SCB_STATUS
193         }
194 }
195
196 /*
197  * Clear Host Interrupt
198  */
199 register CLRINT {
200         address                 0x003
201         access_mode     WO
202         field   CLRHWERRINT     0x80 /* Rev B or greater */
203         field   CLRBRKADRINT    0x40
204         field   CLRSWTMINT      0x20
205         field   CLRPCIINT       0x10
206         field   CLRSCSIINT      0x08
207         field   CLRSEQINT       0x04
208         field   CLRCMDINT       0x02
209         field   CLRSPLTINT      0x01
210 }
211
212 /*
213  * Error Register
214  */
215 register ERROR {
216         address                 0x004
217         access_mode     RO
218         field   CIOPARERR       0x80
219         field   CIOACCESFAIL    0x40 /* Rev B or greater */
220         field   MPARERR         0x20
221         field   DPARERR         0x10
222         field   SQPARERR        0x08
223         field   ILLOPCODE       0x04
224         field   DSCTMOUT        0x02
225 }
226
227 /*
228  * Clear Error
229  */
230 register CLRERR {
231         address                 0x004
232         access_mode     WO
233         field   CLRCIOPARERR    0x80
234         field   CLRCIOACCESFAIL 0x40 /* Rev B or greater */
235         field   CLRMPARERR      0x20
236         field   CLRDPARERR      0x10
237         field   CLRSQPARERR     0x08
238         field   CLRILLOPCODE    0x04
239         field   CLRDSCTMOUT     0x02
240 }
241
242 /*
243  * Host Control Register
244  * Overall host control of the device.
245  */
246 register HCNTRL {
247         address                 0x005
248         access_mode     RW
249         field   SEQ_RESET       0x80 /* Rev B or greater */
250         field   POWRDN          0x40
251         field   SWINT           0x10
252         field   SWTIMER_START_B 0x08 /* Rev B or greater */
253         field   PAUSE           0x04
254         field   INTEN           0x02
255         field   CHIPRST         0x01
256         field   CHIPRSTACK      0x01
257 }
258
259 /*
260  * Host New SCB Queue Offset
261  */
262 register HNSCB_QOFF {
263         address                 0x006
264         access_mode     RW
265         size            2
266 }
267
268 /*
269  * Host Empty SCB Queue Offset
270  */
271 register HESCB_QOFF {
272         address                 0x008
273         access_mode     RW
274 }
275
276 /*
277  * Host Mailbox
278  */
279 register HS_MAILBOX {
280         address                 0x00B
281         access_mode     RW
282         mask    HOST_TQINPOS    0x80    /* Boundary at either 0 or 128 */
283         mask    ENINT_COALESCE  0x40    /* Perform interrupt coalescing */
284 }
285
286 /*
287  * Sequencer Interupt Status
288  */
289 register SEQINTSTAT {
290         address                 0x00C
291         access_mode     RO
292         field   SEQ_SWTMRTO     0x10
293         field   SEQ_SEQINT      0x08
294         field   SEQ_SCSIINT     0x04
295         field   SEQ_PCIINT      0x02
296         field   SEQ_SPLTINT     0x01
297 }
298
299 /*
300  * Clear SEQ Interrupt
301  */
302 register CLRSEQINTSTAT {
303         address                 0x00C
304         access_mode     WO
305         field   CLRSEQ_SWTMRTO  0x10
306         field   CLRSEQ_SEQINT   0x08
307         field   CLRSEQ_SCSIINT  0x04
308         field   CLRSEQ_PCIINT   0x02
309         field   CLRSEQ_SPLTINT  0x01
310 }
311
312 /*
313  * Software Timer
314  */
315 register SWTIMER {
316         address                 0x00E
317         access_mode     RW
318         size            2
319 }
320
321 /*
322  * SEQ New SCB Queue Offset
323  */
324 register SNSCB_QOFF {
325         address                 0x010
326         access_mode     RW
327         size            2
328         modes           M_CCHAN
329 }
330
331 /*
332  * SEQ Empty SCB Queue Offset
333  */
334 register SESCB_QOFF {
335         address                 0x012
336         access_mode     RW
337         modes           M_CCHAN
338 }
339
340 /*
341  * SEQ Done SCB Queue Offset
342  */
343 register SDSCB_QOFF {
344         address                 0x014
345         access_mode     RW
346         modes           M_CCHAN
347         size            2
348 }
349
350 /*
351  * Queue Offset Control & Status
352  */
353 register QOFF_CTLSTA {
354         address                 0x016
355         access_mode     RW
356         modes           M_CCHAN
357         field   EMPTY_SCB_AVAIL 0x80
358         field   NEW_SCB_AVAIL   0x40
359         field   SDSCB_ROLLOVR   0x20
360         field   HS_MAILBOX_ACT  0x10
361         field   SCB_QSIZE       0x0F {
362                 SCB_QSIZE_4,
363                 SCB_QSIZE_8,
364                 SCB_QSIZE_16,
365                 SCB_QSIZE_32,
366                 SCB_QSIZE_64,
367                 SCB_QSIZE_128,
368                 SCB_QSIZE_256,
369                 SCB_QSIZE_512,
370                 SCB_QSIZE_1024,
371                 SCB_QSIZE_2048,
372                 SCB_QSIZE_4096,
373                 SCB_QSIZE_8192,
374                 SCB_QSIZE_16384
375         }
376 }
377
378 /*
379  * Interrupt Control
380  */
381 register INTCTL {
382         address                 0x018
383         access_mode     RW
384         field   SWTMINTMASK     0x80
385         field   SWTMINTEN       0x40
386         field   SWTIMER_START   0x20
387         field   AUTOCLRCMDINT   0x10
388         field   PCIINTEN        0x08
389         field   SCSIINTEN       0x04
390         field   SEQINTEN        0x02
391         field   SPLTINTEN       0x01
392 }
393
394 /*
395  * Data FIFO Control
396  */
397 register DFCNTRL {
398         address                 0x019
399         access_mode     RW
400         modes           M_DFF0, M_DFF1
401         field   PRELOADEN       0x80
402         field   SCSIENWRDIS     0x40    /* Rev B only. */
403         field   SCSIEN          0x20
404         field   SCSIENACK       0x20
405         field   HDMAEN          0x08
406         field   HDMAENACK       0x08
407         field   DIRECTION       0x04
408         field   DIRECTIONACK    0x04
409         field   FIFOFLUSH       0x02
410         field   FIFOFLUSHACK    0x02
411         field   DIRECTIONEN     0x01
412 }
413
414 /*
415  * Device Space Command 0
416  */
417 register DSCOMMAND0 {
418         address                 0x019
419         access_mode     RW
420         modes           M_CFG
421         field   CACHETHEN       0x80    /* Cache Threshold enable */
422         field   DPARCKEN        0x40    /* Data Parity Check Enable */
423         field   MPARCKEN        0x20    /* Memory Parity Check Enable */
424         field   EXTREQLCK       0x10    /* External Request Lock */
425         field   DISABLE_TWATE   0x02    /* Rev B or greater */
426         field   CIOPARCKEN      0x01    /* Internal bus parity error enable */
427 }
428
429 /*
430  * Data FIFO Status
431  */
432 register DFSTATUS {
433         address                 0x01A
434         access_mode     RO
435         modes           M_DFF0, M_DFF1
436         field   PRELOAD_AVAIL           0x80
437         field   PKT_PRELOAD_AVAIL       0x40
438         field   MREQPEND                0x10
439         field   HDONE                   0x08
440         field   DFTHRESH                0x04
441         field   FIFOFULL                0x02
442         field   FIFOEMP                 0x01
443 }
444
445 /*
446  * S/G Cache Pointer
447  */
448 register SG_CACHE_PRE {
449         address                 0x01B
450         access_mode     WO
451         modes           M_DFF0, M_DFF1
452         field   SG_ADDR_MASK    0xf8
453         field   ODD_SEG         0x04
454         field   LAST_SEG        0x02
455 }
456
457 register SG_CACHE_SHADOW {
458         address                 0x01B
459         access_mode     RO
460         modes           M_DFF0, M_DFF1
461         field   SG_ADDR_MASK    0xf8
462         field   ODD_SEG         0x04
463         field   LAST_SEG        0x02
464         field   LAST_SEG_DONE   0x01
465 }
466
467 /*
468  * Arbiter Control
469  */
470 register ARBCTL {
471         address                 0x01B
472         access_mode     RW
473         modes           M_CFG
474         field   RESET_HARB      0x80
475         field   RETRY_SWEN      0x08
476         field   USE_TIME        0x07
477 }
478
479 /*
480  * Data Channel Host Address
481  */
482 register HADDR {
483         address                 0x070
484         access_mode     RW
485         size            8
486         modes           M_DFF0, M_DFF1
487 }
488
489 /*
490  * Host Overlay DMA Address
491  */
492 register HODMAADR {
493         address                 0x070
494         access_mode     RW
495         size            8
496         modes           M_SCSI
497 }
498
499 /*
500  * PCI PLL Delay.
501  */
502 register PLLDELAY {
503         address                 0x070
504         access_mode     RW
505         size            1
506         modes           M_CFG
507         field   SPLIT_DROP_REQ  0x80
508 }
509
510 /*
511  * Data Channel Host Count
512  */
513 register HCNT {
514         address                 0x078
515         access_mode     RW
516         size            3
517         modes           M_DFF0, M_DFF1
518 }
519
520 /*
521  * Host Overlay DMA Count
522  */
523 register HODMACNT {
524         address                 0x078
525         access_mode     RW
526         size            2
527         modes           M_SCSI
528 }
529
530 /*
531  * Host Overlay DMA Enable
532  */
533 register HODMAEN {
534         address                 0x07A
535         access_mode     RW
536         modes           M_SCSI
537 }
538
539 /*
540  * Scatter/Gather Host Address
541  */
542 register SGHADDR {
543         address                 0x07C
544         access_mode     RW
545         size            8
546         modes           M_DFF0, M_DFF1
547 }
548
549 /*
550  * SCB Host Address
551  */
552 register SCBHADDR {
553         address                 0x07C
554         access_mode     RW
555         size            8
556         modes           M_CCHAN
557 }
558
559 /*
560  * Scatter/Gather Host Count
561  */
562 register SGHCNT {
563         address                 0x084
564         access_mode     RW
565         modes           M_DFF0, M_DFF1
566 }
567
568 /*
569  * SCB Host Count
570  */
571 register SCBHCNT {
572         address                 0x084
573         access_mode     RW
574         modes           M_CCHAN
575 }
576
577 /*
578  * Data FIFO Threshold
579  */
580 register DFF_THRSH {
581         address                 0x088
582         access_mode     RW
583         modes           M_CFG
584         field   WR_DFTHRSH      0x70 {
585                 WR_DFTHRSH_MIN,
586                 WR_DFTHRSH_25,
587                 WR_DFTHRSH_50,
588                 WR_DFTHRSH_63,
589                 WR_DFTHRSH_75,
590                 WR_DFTHRSH_85,
591                 WR_DFTHRSH_90,
592                 WR_DFTHRSH_MAX
593         }
594         field   RD_DFTHRSH      0x07 {
595                 RD_DFTHRSH_MIN,
596                 RD_DFTHRSH_25,
597                 RD_DFTHRSH_50,
598                 RD_DFTHRSH_63,
599                 RD_DFTHRSH_75,
600                 RD_DFTHRSH_85,
601                 RD_DFTHRSH_90,
602                 RD_DFTHRSH_MAX
603         }
604 }
605
606 /*
607  * ROM Address
608  */
609 register ROMADDR {
610         address                 0x08A
611         access_mode     RW
612         size            3
613 }
614
615 /*
616  * ROM Control
617  */
618 register ROMCNTRL {
619         address                 0x08D
620         access_mode     RW
621         field   ROMOP           0xE0
622         field   ROMSPD          0x18
623         field   REPEAT          0x02
624         field   RDY             0x01
625 }
626
627 /*
628  * ROM Data
629  */
630 register ROMDATA {
631         address                 0x08E
632         access_mode     RW
633 }
634
635 /*
636  * Data Channel Receive Message 0
637  */
638 register DCHRXMSG0 {
639         address                 0x090
640         access_mode     RO
641         modes           M_DFF0, M_DFF1
642         field           CDNUM   0xF8
643         field           CFNUM   0x07
644 }
645
646 /*
647  * CMC Recieve Message 0
648  */
649 register CMCRXMSG0 {
650         address                 0x090
651         access_mode     RO
652         modes           M_CCHAN
653         field           CDNUM   0xF8
654         field           CFNUM   0x07
655 }
656
657 /*
658  * Overlay Recieve Message 0
659  */
660 register OVLYRXMSG0 {
661         address                 0x090
662         access_mode     RO
663         modes           M_SCSI
664         field           CDNUM   0xF8
665         field           CFNUM   0x07
666 }
667
668 /*
669  * Relaxed Order Enable
670  */
671 register ROENABLE {
672         address                 0x090
673         access_mode     RW
674         modes           M_CFG
675         field   MSIROEN         0x20
676         field   OVLYROEN        0x10
677         field   CMCROEN         0x08
678         field   SGROEN          0x04
679         field   DCH1ROEN        0x02
680         field   DCH0ROEN        0x01
681 }
682
683 /*
684  * Data Channel Receive Message 1
685  */
686 register DCHRXMSG1 {
687         address                 0x091
688         access_mode     RO
689         modes           M_DFF0, M_DFF1
690         field   CBNUM           0xFF
691 }
692
693 /*
694  * CMC Recieve Message 1
695  */
696 register CMCRXMSG1 {
697         address                 0x091
698         access_mode     RO
699         modes           M_CCHAN
700         field   CBNUM           0xFF
701 }
702
703 /*
704  * Overlay Recieve Message 1
705  */
706 register OVLYRXMSG1 {
707         address                 0x091
708         access_mode     RO
709         modes           M_SCSI
710         field   CBNUM           0xFF
711 }
712
713 /*
714  * No Snoop Enable
715  */
716 register NSENABLE {
717         address                 0x091
718         access_mode     RW
719         modes           M_CFG
720         field   MSINSEN         0x20
721         field   OVLYNSEN        0x10
722         field   CMCNSEN         0x08
723         field   SGNSEN          0x04
724         field   DCH1NSEN        0x02
725         field   DCH0NSEN        0x01
726 }
727
728 /*
729  * Data Channel Receive Message 2
730  */
731 register DCHRXMSG2 {
732         address                 0x092
733         access_mode     RO
734         modes           M_DFF0, M_DFF1
735         field   MINDEX          0xFF
736 }
737
738 /*
739  * CMC Recieve Message 2
740  */
741 register CMCRXMSG2 {
742         address                 0x092
743         access_mode     RO
744         modes           M_CCHAN
745         field   MINDEX          0xFF
746 }
747
748 /*
749  * Overlay Recieve Message 2
750  */
751 register OVLYRXMSG2 {
752         address                 0x092
753         access_mode     RO
754         modes           M_SCSI
755         field   MINDEX          0xFF
756 }
757
758 /*
759  * Outstanding Split Transactions
760  */
761 register OST {
762         address                 0x092
763         access_mode     RW
764         modes           M_CFG
765 }
766
767 /*
768  * Data Channel Receive Message 3
769  */
770 register DCHRXMSG3 {
771         address                 0x093
772         access_mode     RO
773         modes           M_DFF0, M_DFF1
774         field   MCLASS          0x0F
775 }
776
777 /*
778  * CMC Recieve Message 3
779  */
780 register CMCRXMSG3 {
781         address                 0x093
782         access_mode     RO
783         modes           M_CCHAN
784         field   MCLASS          0x0F
785 }
786
787 /*
788  * Overlay Recieve Message 3
789  */
790 register OVLYRXMSG3 {
791         address                 0x093
792         access_mode     RO
793         modes           M_SCSI
794         field   MCLASS          0x0F
795 }
796
797 /*
798  * PCI-X Control
799  */
800 register PCIXCTL {
801         address                 0x093
802         access_mode     RW
803         modes           M_CFG
804         field   SERRPULSE       0x80
805         field   UNEXPSCIEN      0x20
806         field   SPLTSMADIS      0x10
807         field   SPLTSTADIS      0x08
808         field   SRSPDPEEN       0x04
809         field   TSCSERREN       0x02
810         field   CMPABCDIS       0x01
811 }
812
813 /*
814  * CMC Sequencer Byte Count
815  */
816 register CMCSEQBCNT {
817         address                 0x094
818         access_mode     RO
819         modes           M_CCHAN
820 }
821
822 /*
823  * Overlay Sequencer Byte Count
824  */
825 register OVLYSEQBCNT {
826         address                 0x094
827         access_mode     RO
828         modes           M_SCSI
829 }
830
831 /*
832  * Data Channel Sequencer Byte Count
833  */
834 register DCHSEQBCNT {
835         address                 0x094
836         access_mode     RO
837         size            2
838         modes           M_DFF0, M_DFF1
839 }
840
841 /*
842  * Data Channel Split Status 0
843  */
844 register DCHSPLTSTAT0 {
845         address                 0x096
846         access_mode     RW
847         modes           M_DFF0, M_DFF1
848         field   STAETERM        0x80
849         field   SCBCERR         0x40
850         field   SCADERR         0x20
851         field   SCDATBUCKET     0x10
852         field   CNTNOTCMPLT     0x08
853         field   RXOVRUN         0x04
854         field   RXSCEMSG        0x02
855         field   RXSPLTRSP       0x01
856 }
857
858 /*
859  * CMC Split Status 0
860  */
861 register CMCSPLTSTAT0 {
862         address                 0x096
863         access_mode     RW
864         modes           M_CCHAN
865         field   STAETERM        0x80
866         field   SCBCERR         0x40
867         field   SCADERR         0x20
868         field   SCDATBUCKET     0x10
869         field   CNTNOTCMPLT     0x08
870         field   RXOVRUN         0x04
871         field   RXSCEMSG        0x02
872         field   RXSPLTRSP       0x01
873 }
874
875 /*
876  * Overlay Split Status 0
877  */
878 register OVLYSPLTSTAT0 {
879         address                 0x096
880         access_mode     RW
881         modes           M_SCSI
882         field   STAETERM        0x80
883         field   SCBCERR         0x40
884         field   SCADERR         0x20
885         field   SCDATBUCKET     0x10
886         field   CNTNOTCMPLT     0x08
887         field   RXOVRUN         0x04
888         field   RXSCEMSG        0x02
889         field   RXSPLTRSP       0x01
890 }
891
892 /*
893  * Data Channel Split Status 1
894  */
895 register DCHSPLTSTAT1 {
896         address                 0x097
897         access_mode     RW
898         modes           M_DFF0, M_DFF1
899         field   RXDATABUCKET    0x01
900 }
901
902 /*
903  * CMC Split Status 1
904  */
905 register CMCSPLTSTAT1 {
906         address                 0x097
907         access_mode     RW
908         modes           M_CCHAN
909         field   RXDATABUCKET    0x01
910 }
911
912 /*
913  * Overlay Split Status 1
914  */
915 register OVLYSPLTSTAT1 {
916         address                 0x097
917         access_mode     RW
918         modes           M_SCSI
919         field   RXDATABUCKET    0x01
920 }
921
922 /*
923  * S/G Receive Message 0
924  */
925 register SGRXMSG0 {
926         address                 0x098
927         access_mode     RO
928         modes           M_DFF0, M_DFF1
929         field           CDNUM   0xF8
930         field           CFNUM   0x07
931 }
932
933 /*
934  * S/G Receive Message 1
935  */
936 register SGRXMSG1 {
937         address                 0x099
938         access_mode     RO
939         modes           M_DFF0, M_DFF1
940         field   CBNUM           0xFF
941 }
942
943 /*
944  * S/G Receive Message 2
945  */
946 register SGRXMSG2 {
947         address                 0x09A
948         access_mode     RO
949         modes           M_DFF0, M_DFF1
950         field   MINDEX          0xFF
951 }
952
953 /*
954  * S/G Receive Message 3
955  */
956 register SGRXMSG3 {
957         address                 0x09B
958         access_mode     RO
959         modes           M_DFF0, M_DFF1
960         field   MCLASS          0x0F
961 }
962
963 /*
964  * Slave Split Out Address 0
965  */
966 register SLVSPLTOUTADR0 {
967         address                 0x098
968         access_mode     RO
969         modes           M_SCSI
970         field   LOWER_ADDR      0x7F
971 }
972
973 /*
974  * Slave Split Out Address 1
975  */
976 register SLVSPLTOUTADR1 {
977         address                 0x099
978         access_mode     RO
979         modes           M_SCSI
980         field   REQ_DNUM        0xF8
981         field   REQ_FNUM        0x07
982 }
983
984 /*
985  * Slave Split Out Address 2
986  */
987 register SLVSPLTOUTADR2 {
988         address                 0x09A
989         access_mode     RO
990         modes           M_SCSI
991         field   REQ_BNUM        0xFF
992 }
993
994 /*
995  * Slave Split Out Address 3
996  */
997 register SLVSPLTOUTADR3 {
998         address                 0x09B
999         access_mode     RO
1000         modes           M_SCSI
1001         field   RLXORD          020
1002         field   TAG_NUM         0x1F
1003 }
1004
1005 /*
1006  * SG Sequencer Byte Count
1007  */
1008 register SGSEQBCNT {
1009         address                 0x09C
1010         access_mode     RO
1011         modes           M_DFF0, M_DFF1
1012 }
1013
1014 /*
1015  * Slave Split Out Attribute 0
1016  */
1017 register SLVSPLTOUTATTR0 {
1018         address                 0x09C
1019         access_mode     RO
1020         modes           M_SCSI
1021         field   LOWER_BCNT      0xFF
1022 }
1023
1024 /*
1025  * Slave Split Out Attribute 1
1026  */
1027 register SLVSPLTOUTATTR1 {
1028         address                 0x09D
1029         access_mode     RO
1030         modes           M_SCSI
1031         field   CMPLT_DNUM      0xF8
1032         field   CMPLT_FNUM      0x07
1033 }
1034
1035 /*
1036  * Slave Split Out Attribute 2
1037  */
1038 register SLVSPLTOUTATTR2 {
1039         address                 0x09E
1040         access_mode     RO
1041         size            2
1042         modes           M_SCSI
1043         field   CMPLT_BNUM      0xFF
1044 }
1045 /*
1046  * S/G Split Status 0
1047  */
1048 register SGSPLTSTAT0 {
1049         address                 0x09E
1050         access_mode     RW
1051         modes           M_DFF0, M_DFF1
1052         field   STAETERM        0x80
1053         field   SCBCERR         0x40
1054         field   SCADERR         0x20
1055         field   SCDATBUCKET     0x10
1056         field   CNTNOTCMPLT     0x08
1057         field   RXOVRUN         0x04
1058         field   RXSCEMSG        0x02
1059         field   RXSPLTRSP       0x01
1060 }
1061
1062 /*
1063  * S/G Split Status 1
1064  */
1065 register SGSPLTSTAT1 {
1066         address                 0x09F
1067         access_mode     RW
1068         modes           M_DFF0, M_DFF1
1069         field   RXDATABUCKET    0x01
1070 }
1071
1072 /*
1073  * Special Function
1074  */
1075 register SFUNCT {
1076         address                 0x09f
1077         access_mode     RW
1078         modes           M_CFG
1079         field   TEST_GROUP      0xF0
1080         field   TEST_NUM        0x0F
1081 }
1082
1083 /*
1084  * Data FIFO 0 PCI Status 
1085  */
1086 register DF0PCISTAT {
1087         address                 0x0A0
1088         access_mode     RW
1089         modes           M_CFG
1090         field   DPE             0x80
1091         field   SSE             0x40
1092         field   RMA             0x20
1093         field   RTA             0x10
1094         field   SCAAPERR        0x08
1095         field   RDPERR          0x04
1096         field   TWATERR         0x02
1097         field   DPR             0x01
1098 }
1099
1100 /*
1101  * Data FIFO 1 PCI Status 
1102  */
1103 register DF1PCISTAT {
1104         address                 0x0A1
1105         access_mode     RW
1106         modes           M_CFG
1107         field   DPE             0x80
1108         field   SSE             0x40
1109         field   RMA             0x20
1110         field   RTA             0x10
1111         field   SCAAPERR        0x08
1112         field   RDPERR          0x04
1113         field   TWATERR         0x02
1114         field   DPR             0x01
1115 }
1116
1117 /*
1118  * S/G PCI Status 
1119  */
1120 register SGPCISTAT {
1121         address                 0x0A2
1122         access_mode     RW
1123         modes           M_CFG
1124         field   DPE             0x80
1125         field   SSE             0x40
1126         field   RMA             0x20
1127         field   RTA             0x10
1128         field   SCAAPERR        0x08
1129         field   RDPERR          0x04
1130         field   DPR             0x01
1131 }
1132
1133 /*
1134  * CMC PCI Status 
1135  */
1136 register CMCPCISTAT {
1137         address                 0x0A3
1138         access_mode     RW
1139         modes           M_CFG
1140         field   DPE             0x80
1141         field   SSE             0x40
1142         field   RMA             0x20
1143         field   RTA             0x10
1144         field   SCAAPERR        0x08
1145         field   RDPERR          0x04
1146         field   TWATERR         0x02
1147         field   DPR             0x01
1148 }
1149
1150 /*
1151  * Overlay PCI Status 
1152  */
1153 register OVLYPCISTAT {
1154         address                 0x0A4
1155         access_mode     RW
1156         modes           M_CFG
1157         field   DPE             0x80
1158         field   SSE             0x40
1159         field   RMA             0x20
1160         field   RTA             0x10
1161         field   SCAAPERR        0x08
1162         field   RDPERR          0x04
1163         field   DPR             0x01
1164 }
1165
1166 /*
1167  * PCI Status for MSI Master DMA Transfer
1168  */
1169 register MSIPCISTAT {
1170         address                 0x0A6
1171         access_mode     RW
1172         modes           M_CFG
1173         field   SSE             0x40
1174         field   RMA             0x20
1175         field   RTA             0x10
1176         field   CLRPENDMSI      0x08
1177         field   TWATERR         0x02
1178         field   DPR             0x01
1179 }
1180
1181 /*
1182  * PCI Status for Target
1183  */
1184 register TARGPCISTAT {
1185         address                 0x0A7
1186         access_mode     RW
1187         modes           M_CFG
1188         field   DPE             0x80
1189         field   SSE             0x40
1190         field   STA             0x08
1191         field   TWATERR         0x02
1192 }
1193
1194 /*
1195  * LQ Packet In
1196  * The last LQ Packet recieved
1197  */
1198 register LQIN {
1199         address                 0x020
1200         access_mode     RW
1201         size            20
1202         modes           M_DFF0, M_DFF1, M_SCSI
1203 }
1204
1205 /*
1206  * SCB Type Pointer
1207  * SCB offset for Target Mode SCB type information
1208  */
1209 register TYPEPTR {
1210         address                 0x020
1211         access_mode     RW
1212         modes           M_CFG
1213 }
1214
1215 /*
1216  * Queue Tag Pointer
1217  * SCB offset to the Two Byte tag identifier used for target mode.
1218  */
1219 register TAGPTR {
1220         address                 0x021
1221         access_mode     RW
1222         modes           M_CFG
1223 }
1224
1225 /*
1226  * Logical Unit Number Pointer
1227  * SCB offset to the LSB (little endian) of the lun field.
1228  */
1229 register LUNPTR {
1230         address                 0x022
1231         access_mode     RW
1232         modes           M_CFG
1233 }
1234
1235 /*
1236  * Data Length Pointer
1237  * SCB offset for the 4 byte data length field in target mode.
1238  */
1239 register DATALENPTR {
1240         address                 0x023
1241         access_mode     RW
1242         modes           M_CFG
1243 }
1244
1245 /*
1246  * Status Length Pointer
1247  * SCB offset to the two byte status field in target SCBs.
1248  */
1249 register STATLENPTR {
1250         address                 0x024
1251         access_mode     RW
1252         modes           M_CFG
1253 }
1254
1255 /*
1256  * Command Length Pointer
1257  * Scb offset for the CDB length field in initiator SCBs.
1258  */
1259 register CMDLENPTR {
1260         address                 0x025
1261         access_mode     RW
1262         modes           M_CFG
1263 }
1264
1265 /*
1266  * Task Attribute Pointer
1267  * Scb offset for the byte field specifying the attribute byte
1268  * to be used in command packets.
1269  */ 
1270 register ATTRPTR {
1271         address                 0x026
1272         access_mode     RW
1273         modes           M_CFG
1274 }
1275
1276 /*
1277  * Task Management Flags Pointer
1278  * Scb offset for the byte field specifying the attribute flags
1279  * byte to be used in command packets.
1280  */ 
1281 register FLAGPTR {
1282         address                 0x027
1283         access_mode     RW
1284         modes           M_CFG
1285 }
1286
1287 /*
1288  * Command Pointer
1289  * Scb offset for the first byte in the CDB for initiator SCBs.
1290  */
1291 register CMDPTR {
1292         address                 0x028
1293         access_mode     RW
1294         modes           M_CFG
1295 }
1296
1297 /*
1298  * Queue Next Pointer
1299  * Scb offset for the 2 byte "next scb link".
1300  */
1301 register QNEXTPTR {
1302         address                 0x029
1303         access_mode     RW
1304         modes           M_CFG
1305 }
1306
1307 /*
1308  * SCSI ID Pointer
1309  * Scb offset to the value to place in the SCSIID register
1310  * during target mode connections.
1311  */
1312 register IDPTR {
1313         address                 0x02A
1314         access_mode     RW
1315         modes           M_CFG
1316 }
1317
1318 /*
1319  * Command Aborted Byte Pointer
1320  * Offset to the SCB flags field that includes the
1321  * "SCB aborted" status bit.
1322  */
1323 register ABRTBYTEPTR {
1324         address                 0x02B
1325         access_mode     RW
1326         modes           M_CFG
1327 }
1328
1329 /*
1330  * Command Aborted Bit Pointer
1331  * Bit offset in the SCB flags field for "SCB aborted" status.
1332  */
1333 register ABRTBITPTR {
1334         address                 0x02C
1335         access_mode     RW
1336         modes           M_CFG
1337 }
1338
1339 /*
1340  * Rev B or greater.
1341  */
1342 register MAXCMDBYTES {
1343         address                 0x02D
1344         access_mode     RW
1345         modes           M_CFG
1346 }
1347
1348 /*
1349  * Rev B or greater.
1350  */
1351 register MAXCMD2RCV {
1352         address                 0x02E
1353         access_mode     RW
1354         modes           M_CFG
1355 }
1356
1357 /*
1358  * Rev B or greater.
1359  */
1360 register SHORTTHRESH {
1361         address                 0x02F
1362         access_mode     RW
1363         modes           M_CFG
1364 }
1365
1366 /*
1367  * Logical Unit Number Length
1368  * The length, in bytes, of the SCB lun field.
1369  */
1370 register LUNLEN {
1371         address                 0x030
1372         access_mode     RW
1373         modes           M_CFG
1374         mask            ILUNLEN 0x0F
1375         mask            TLUNLEN 0xF0
1376 }
1377 const LUNLEN_SINGLE_LEVEL_LUN 0xF
1378
1379 /*
1380  * CDB Limit
1381  * The size, in bytes, of the embedded CDB field in initator SCBs.
1382  */
1383 register CDBLIMIT {
1384         address                 0x031
1385         access_mode     RW
1386         modes           M_CFG
1387 }
1388
1389 /*
1390  * Maximum Commands
1391  * The maximum number of commands to issue during a
1392  * single packetized connection.
1393  */
1394 register MAXCMD {
1395         address                 0x032
1396         access_mode     RW
1397         modes           M_CFG
1398 }
1399
1400 /*
1401  * Maximum Command Counter
1402  * The number of commands already sent during this connection
1403  */
1404 register MAXCMDCNT {
1405         address                 0x033
1406         access_mode     RW
1407         modes           M_CFG
1408 }
1409
1410 /*
1411  * LQ Packet Reserved Bytes
1412  * The bytes to be sent in the currently reserved fileds
1413  * of all LQ packets.
1414  */
1415 register LQRSVD01 {
1416         address                 0x034
1417         access_mode     RW
1418         modes           M_SCSI
1419 }
1420 register LQRSVD16 {
1421         address                 0x035
1422         access_mode     RW
1423         modes           M_SCSI
1424 }
1425 register LQRSVD17 {
1426         address                 0x036
1427         access_mode     RW
1428         modes           M_SCSI
1429 }
1430
1431 /*
1432  * Command Reserved 0
1433  * The byte to be sent for the reserved byte 0 of
1434  * outgoing command packets.
1435  */
1436 register CMDRSVD0 {
1437         address                 0x037
1438         access_mode     RW
1439         modes           M_CFG
1440 }
1441
1442 /*
1443  * LQ Manager Control 0
1444  */
1445 register LQCTL0 {
1446         address                 0x038
1447         access_mode     RW
1448         modes           M_CFG
1449         field   LQITARGCLT      0xC0
1450         field   LQIINITGCLT     0x30
1451         field   LQ0TARGCLT      0x0C
1452         field   LQ0INITGCLT     0x03
1453 }
1454
1455 /*
1456  * LQ Manager Control 1
1457  */
1458 register LQCTL1 {
1459         address                 0x038
1460         access_mode     RW
1461         modes           M_DFF0, M_DFF1, M_SCSI
1462         field   PCI2PCI         0x04
1463         field   SINGLECMD       0x02
1464         field   ABORTPENDING    0x01
1465 }
1466
1467 /*
1468  * LQ Manager Control 2
1469  */
1470 register LQCTL2 {
1471         address                 0x039
1472         access_mode     RW
1473         modes           M_DFF0, M_DFF1, M_SCSI
1474         field   LQIRETRY        0x80
1475         field   LQICONTINUE     0x40
1476         field   LQITOIDLE       0x20
1477         field   LQIPAUSE        0x10
1478         field   LQORETRY        0x08
1479         field   LQOCONTINUE     0x04
1480         field   LQOTOIDLE       0x02
1481         field   LQOPAUSE        0x01
1482 }
1483
1484 /*
1485  * SCSI RAM BIST0
1486  */
1487 register SCSBIST0 {
1488         address                 0x039
1489         access_mode     RW
1490         modes           M_CFG
1491         field   GSBISTERR       0x40
1492         field   GSBISTDONE      0x20
1493         field   GSBISTRUN       0x10
1494         field   OSBISTERR       0x04
1495         field   OSBISTDONE      0x02
1496         field   OSBISTRUN       0x01
1497 }
1498
1499 /*
1500  * SCSI Sequence Control0
1501  */
1502 register SCSISEQ0 {
1503         address                 0x03A
1504         access_mode     RW
1505         modes           M_DFF0, M_DFF1, M_SCSI
1506         field   TEMODEO         0x80
1507         field   ENSELO          0x40
1508         field   ENARBO          0x20
1509         field   FORCEBUSFREE    0x10
1510         field   SCSIRSTO        0x01
1511 }
1512
1513 /*
1514  * SCSI RAM BIST 1
1515  */
1516 register SCSBIST1 {
1517         address                 0x03A
1518         access_mode     RW
1519         modes           M_CFG
1520         field   NTBISTERR       0x04
1521         field   NTBISTDONE      0x02
1522         field   NTBISTRUN       0x01
1523 }
1524
1525 /*
1526  * SCSI Sequence Control 1
1527  */
1528 register SCSISEQ1 {
1529         address                 0x03B
1530         access_mode     RW
1531         modes           M_DFF0, M_DFF1, M_SCSI
1532         field   MANUALCTL       0x40
1533         field   ENSELI          0x20
1534         field   ENRSELI         0x10
1535         field   MANUALP         0x0C
1536         field   ENAUTOATNP      0x02
1537         field   ALTSTIM         0x01
1538 }
1539
1540 /*
1541  * SCSI Transfer Control 0
1542  */
1543 register SXFRCTL0 {
1544         address                 0x03C
1545         access_mode     RW
1546         modes           M_SCSI
1547         field   DFON            0x80
1548         field   DFPEXP          0x40
1549         field   BIOSCANCELEN    0x10
1550         field   SPIOEN          0x08
1551 }
1552
1553 /*
1554  * SCSI Transfer Control 1
1555  */
1556 register SXFRCTL1 {
1557         address                 0x03D
1558         access_mode     RW
1559         modes           M_SCSI
1560         field   BITBUCKET       0x80
1561         field   ENSACHK         0x40
1562         field   ENSPCHK         0x20
1563         field   STIMESEL        0x18
1564         field   ENSTIMER        0x04
1565         field   ACTNEGEN        0x02
1566         field   STPWEN          0x01
1567 }
1568
1569 /*
1570  * SCSI Transfer Control 2
1571  */
1572 register SXFRCTL2 {
1573         address                 0x03E
1574         access_mode     RW
1575         modes           M_SCSI
1576         field   AUTORSTDIS      0x10
1577         field   CMDDMAEN        0x08
1578         field   ASU             0x07
1579 }
1580
1581 /*
1582  * SCSI Bus Initiator IDs
1583  * Bitmask of observed initiators on the bus.
1584  */
1585 register BUSINITID {
1586         address                 0x03C
1587         access_mode     RW
1588         modes           M_CFG
1589         size            2
1590 }
1591
1592 /*
1593  * Data Length Counters
1594  * Packet byte counter.
1595  */
1596 register DLCOUNT {
1597         address                 0x03C
1598         access_mode     RW
1599         modes           M_DFF0, M_DFF1
1600         size            3
1601 }
1602
1603 /*
1604  * Data FIFO Status
1605  */
1606 register DFFSTAT {
1607         address                 0x03F
1608         access_mode     RW
1609         modes           M_SCSI
1610         field   FIFO1FREE       0x20
1611         field   FIFO0FREE       0x10
1612         /*
1613          * On the B, this enum only works
1614          * in the read direction.  For writes,
1615          * you must use the B version of the
1616          * CURRFIFO_0 definition which is defined
1617          * as a constant outside of this register
1618          * definition to avoid confusing the
1619          * register pretty printing code.
1620          */
1621         enum    CURRFIFO        0x03 {
1622                 CURRFIFO_0,
1623                 CURRFIFO_1,
1624                 CURRFIFO_NONE   0x3
1625         }
1626 }
1627
1628 const B_CURRFIFO_0 0x2
1629
1630 /*
1631  * SCSI Bus Target IDs
1632  * Bitmask of observed targets on the bus.
1633  */
1634 register BUSTARGID {
1635         address                 0x03E
1636         access_mode     RW
1637         modes           M_CFG
1638         size            2
1639 }
1640
1641 /*
1642  * SCSI Control Signal Out
1643  */
1644 register SCSISIGO {
1645         address                 0x040
1646         access_mode     RW
1647         modes           M_DFF0, M_DFF1, M_SCSI
1648         field   CDO             0x80
1649         field   IOO             0x40
1650         field   MSGO            0x20
1651         field   ATNO            0x10
1652         field   SELO            0x08
1653         field   BSYO            0x04
1654         field   REQO            0x02
1655         field   ACKO            0x01
1656 /*
1657  * Possible phases to write into SCSISIG0
1658  */
1659         enum    PHASE_MASK  CDO|IOO|MSGO {
1660                 P_DATAOUT       0x0,
1661                 P_DATAIN        IOO,
1662                 P_DATAOUT_DT    P_DATAOUT|MSGO,
1663                 P_DATAIN_DT     P_DATAIN|MSGO,
1664                 P_COMMAND       CDO,
1665                 P_MESGOUT       CDO|MSGO,
1666                 P_STATUS        CDO|IOO,
1667                 P_MESGIN        CDO|IOO|MSGO
1668         }
1669 }
1670
1671 register SCSISIGI {
1672         address                 0x041
1673         access_mode     RO
1674         modes           M_DFF0, M_DFF1, M_SCSI
1675         field   CDI             0x80
1676         field   IOI             0x40
1677         field   MSGI            0x20
1678         field   ATNI            0x10
1679         field   SELI            0x08
1680         field   BSYI            0x04
1681         field   REQI            0x02
1682         field   ACKI            0x01
1683 /*
1684  * Possible phases in SCSISIGI
1685  */
1686         enum    PHASE_MASK  CDO|IOO|MSGO {
1687                 P_DATAOUT       0x0,
1688                 P_DATAIN        IOO,
1689                 P_DATAOUT_DT    P_DATAOUT|MSGO,
1690                 P_DATAIN_DT     P_DATAIN|MSGO,
1691                 P_COMMAND       CDO,
1692                 P_MESGOUT       CDO|MSGO,
1693                 P_STATUS        CDO|IOO,
1694                 P_MESGIN        CDO|IOO|MSGO
1695         }
1696 }
1697
1698 /*
1699  * Multiple Target IDs
1700  * Bitmask of ids to respond as a target.
1701  */
1702 register MULTARGID {
1703         address                 0x040
1704         access_mode     RW
1705         modes           M_CFG
1706         size            2
1707 }
1708
1709 /*
1710  * SCSI Phase
1711  */
1712 register SCSIPHASE {
1713         address                 0x042
1714         access_mode     RO
1715         modes           M_DFF0, M_DFF1, M_SCSI
1716         field   STATUS_PHASE    0x20
1717         field   COMMAND_PHASE   0x10
1718         field   MSG_IN_PHASE    0x08
1719         field   MSG_OUT_PHASE   0x04
1720         field   DATA_PHASE_MASK 0x03 {
1721                 DATA_OUT_PHASE  0x01,
1722                 DATA_IN_PHASE   0x02
1723         }
1724 }
1725
1726 /*
1727  * SCSI Data 0 Image
1728  */
1729 register SCSIDAT0_IMG {
1730         address                 0x043
1731         access_mode     RW
1732         modes           M_DFF0, M_DFF1, M_SCSI
1733 }
1734
1735 /*
1736  * SCSI Latched Data
1737  */
1738 register SCSIDAT {
1739         address                 0x044
1740         access_mode     RW
1741         modes           M_DFF0, M_DFF1, M_SCSI
1742         size            2
1743 }
1744
1745 /*
1746  * SCSI Data Bus
1747  */
1748 register SCSIBUS {
1749         address                 0x046
1750         access_mode     RW
1751         modes           M_DFF0, M_DFF1, M_SCSI
1752         size            2
1753 }
1754
1755 /*
1756  * Target ID In
1757  */
1758 register TARGIDIN {
1759         address                 0x048
1760         access_mode     RO
1761         modes           M_DFF0, M_DFF1, M_SCSI
1762         field   CLKOUT          0x80
1763         field   TARGID          0x0F
1764 }
1765
1766 /*
1767  * Selection/Reselection ID
1768  * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
1769  * device did not set its own ID.
1770  */
1771 register SELID {
1772         address                 0x049
1773         access_mode     RW
1774         modes           M_DFF0, M_DFF1, M_SCSI
1775         field   SELID_MASK      0xf0
1776         field   ONEBIT          0x08
1777 }
1778
1779 /*
1780  * SCSI Block Control
1781  * Controls Bus type and channel selection.  SELWIDE allows for the
1782  * coexistence of 8bit and 16bit devices on a wide bus.
1783  */
1784 register SBLKCTL {
1785         address                 0x04A
1786         access_mode     RW
1787         modes           M_DFF0, M_DFF1, M_SCSI
1788         field   DIAGLEDEN       0x80
1789         field   DIAGLEDON       0x40
1790         field   ENAB40          0x08    /* LVD transceiver active */
1791         field   ENAB20          0x04    /* SE/HVD transceiver active */
1792         field   SELWIDE         0x02
1793 }
1794
1795 /*
1796  * Option Mode
1797  */
1798 register OPTIONMODE {
1799         address                 0x04A
1800         access_mode     RW
1801         modes           M_CFG
1802         field   BIOSCANCTL              0x80
1803         field   AUTOACKEN               0x40
1804         field   BIASCANCTL              0x20
1805         field   BUSFREEREV              0x10
1806         field   ENDGFORMCHK             0x04
1807         field   AUTO_MSGOUT_DE          0x02
1808         mask    OPTIONMODE_DEFAULTS     AUTO_MSGOUT_DE
1809 }
1810
1811 /*
1812  * SCSI Status 0
1813  */
1814 register SSTAT0 {
1815         address                 0x04B
1816         access_mode     RO
1817         modes           M_DFF0, M_DFF1, M_SCSI
1818         field   TARGET          0x80    /* Board acting as target */
1819         field   SELDO           0x40    /* Selection Done */
1820         field   SELDI           0x20    /* Board has been selected */
1821         field   SELINGO         0x10    /* Selection In Progress */
1822         field   IOERR           0x08    /* LVD Tranceiver mode changed */
1823         field   OVERRUN         0x04    /* SCSI Offset overrun detected */
1824         field   SPIORDY         0x02    /* SCSI PIO Ready */
1825         field   ARBDO           0x01    /* Arbitration Done Out */
1826 }
1827
1828 /*
1829  * Clear SCSI Interrupt 0
1830  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
1831  */
1832 register CLRSINT0 {
1833         address                 0x04B
1834         access_mode     WO
1835         modes           M_DFF0, M_DFF1, M_SCSI
1836         field   CLRSELDO        0x40
1837         field   CLRSELDI        0x20
1838         field   CLRSELINGO      0x10
1839         field   CLRIOERR        0x08
1840         field   CLROVERRUN      0x04
1841         field   CLRSPIORDY      0x02
1842         field   CLRARBDO        0x01
1843 }
1844
1845 /*
1846  * SCSI Interrupt Mode 0
1847  * Setting any bit will enable the corresponding function
1848  * in SIMODE0 to interrupt via the IRQ pin.
1849  */
1850 register SIMODE0 {
1851         address                 0x04B
1852         access_mode     RW
1853         modes           M_CFG
1854         field   ENSELDO         0x40
1855         field   ENSELDI         0x20
1856         field   ENSELINGO       0x10
1857         field   ENIOERR         0x08
1858         field   ENOVERRUN       0x04
1859         field   ENSPIORDY       0x02
1860         field   ENARBDO         0x01
1861 }
1862
1863 /*
1864  * SCSI Status 1
1865  */
1866 register SSTAT1 {
1867         address                 0x04C
1868         access_mode     RO
1869         modes           M_DFF0, M_DFF1, M_SCSI
1870         field   SELTO           0x80
1871         field   ATNTARG         0x40
1872         field   SCSIRSTI        0x20
1873         field   PHASEMIS        0x10
1874         field   BUSFREE         0x08
1875         field   SCSIPERR        0x04
1876         field   STRB2FAST       0x02
1877         field   REQINIT         0x01
1878 }
1879
1880 /*
1881  * Clear SCSI Interrupt 1
1882  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
1883  */
1884 register CLRSINT1 {
1885         address                 0x04C
1886         access_mode     WO
1887         modes           M_DFF0, M_DFF1, M_SCSI
1888         field   CLRSELTIMEO     0x80
1889         field   CLRATNO         0x40
1890         field   CLRSCSIRSTI     0x20
1891         field   CLRBUSFREE      0x08
1892         field   CLRSCSIPERR     0x04
1893         field   CLRSTRB2FAST    0x02
1894         field   CLRREQINIT      0x01
1895 }
1896
1897 /*
1898  * SCSI Status 2
1899  */
1900 register SSTAT2 {
1901         address                 0x04d
1902         access_mode     RO
1903         modes           M_DFF0, M_DFF1, M_SCSI
1904         field   BUSFREETIME     0xc0 {
1905                 BUSFREE_LQO     0x40,
1906                 BUSFREE_DFF0    0x80,
1907                 BUSFREE_DFF1    0xC0
1908         }
1909         field   NONPACKREQ      0x20
1910         field   EXP_ACTIVE      0x10    /* SCSI Expander Active */
1911         field   BSYX            0x08    /* Busy Expander */
1912         field   WIDE_RES        0x04    /* Modes 0 and 1 only */
1913         field   SDONE           0x02    /* Modes 0 and 1 only */
1914         field   DMADONE         0x01    /* Modes 0 and 1 only */
1915 }
1916
1917 /*
1918  * Clear SCSI Interrupt 2
1919  */
1920 register CLRSINT2 {
1921         address                 0x04D
1922         access_mode     WO
1923         modes           M_DFF0, M_DFF1, M_SCSI
1924         field   CLRNONPACKREQ   0x20
1925         field   CLRWIDE_RES     0x04    /* Modes 0 and 1 only */
1926         field   CLRSDONE        0x02    /* Modes 0 and 1 only */
1927         field   CLRDMADONE      0x01    /* Modes 0 and 1 only */
1928 }
1929
1930 /*
1931  * SCSI Interrupt Mode 2
1932  */
1933 register SIMODE2 {
1934         address                 0x04D
1935         access_mode     RW
1936         modes           M_CFG
1937         field   ENWIDE_RES      0x04
1938         field   ENSDONE         0x02
1939         field   ENDMADONE       0x01
1940 }
1941
1942 /*
1943  * Physical Error Diagnosis
1944  */
1945 register PERRDIAG {
1946         address                 0x04E
1947         access_mode     RO
1948         modes           M_DFF0, M_DFF1, M_SCSI
1949         field   HIZERO          0x80
1950         field   HIPERR          0x40
1951         field   PREVPHASE       0x20
1952         field   PARITYERR       0x10
1953         field   AIPERR          0x08
1954         field   CRCERR          0x04
1955         field   DGFORMERR       0x02
1956         field   DTERR           0x01
1957 }
1958
1959 /*
1960  * LQI Manager Current State
1961  */
1962 register LQISTATE {
1963         address                 0x04E
1964         access_mode     RO
1965         modes           M_CFG
1966 }
1967
1968 /*
1969  * SCSI Offset Count
1970  */
1971 register SOFFCNT {
1972         address                 0x04F
1973         access_mode     RO
1974         modes           M_DFF0, M_DFF1, M_SCSI
1975 }
1976
1977 /*
1978  * LQO Manager Current State
1979  */
1980 register LQOSTATE {
1981         address                 0x04F
1982         access_mode     RO
1983         modes           M_CFG
1984 }
1985
1986 /*
1987  * LQI Manager Status
1988  */
1989 register LQISTAT0 {
1990         address                 0x050
1991         access_mode     RO
1992         modes           M_DFF0, M_DFF1, M_SCSI
1993         field   LQIATNQAS       0x20
1994         field   LQICRCT1        0x10
1995         field   LQICRCT2        0x08
1996         field   LQIBADLQT       0x04
1997         field   LQIATNLQ        0x02
1998         field   LQIATNCMD       0x01
1999 }
2000
2001 /*
2002  * Clear LQI Interrupts 0
2003  */
2004 register CLRLQIINT0 {
2005         address                 0x050
2006         access_mode     WO
2007         modes           M_DFF0, M_DFF1, M_SCSI
2008         field   CLRLQIATNQAS    0x20
2009         field   CLRLQICRCT1     0x10
2010         field   CLRLQICRCT2     0x08
2011         field   CLRLQIBADLQT    0x04
2012         field   CLRLQIATNLQ     0x02
2013         field   CLRLQIATNCMD    0x01
2014 }
2015
2016 /*
2017  * LQI Manager Interrupt Mode 0
2018  */
2019 register LQIMODE0 {
2020         address                 0x050
2021         access_mode     RW
2022         modes           M_CFG
2023         field   ENLQIATNQASK    0x20
2024         field   ENLQICRCT1      0x10
2025         field   ENLQICRCT2      0x08
2026         field   ENLQIBADLQT     0x04
2027         field   ENLQIATNLQ      0x02
2028         field   ENLQIATNCMD     0x01
2029 }
2030
2031 /*
2032  * LQI Manager Status 1
2033  */
2034 register LQISTAT1 {
2035         address                 0x051
2036         access_mode     RO
2037         modes           M_DFF0, M_DFF1, M_SCSI
2038         field   LQIPHASE_LQ     0x80
2039         field   LQIPHASE_NLQ    0x40
2040         field   LQIABORT        0x20
2041         field   LQICRCI_LQ      0x10
2042         field   LQICRCI_NLQ     0x08
2043         field   LQIBADLQI       0x04
2044         field   LQIOVERI_LQ     0x02
2045         field   LQIOVERI_NLQ    0x01
2046 }
2047
2048 /*
2049  * Clear LQI Manager Interrupts1
2050  */
2051 register CLRLQIINT1 {
2052         address                 0x051
2053         access_mode     WO
2054         modes           M_DFF0, M_DFF1, M_SCSI
2055         field   CLRLQIPHASE_LQ  0x80
2056         field   CLRLQIPHASE_NLQ 0x40
2057         field   CLRLIQABORT     0x20
2058         field   CLRLQICRCI_LQ   0x10
2059         field   CLRLQICRCI_NLQ  0x08
2060         field   CLRLQIBADLQI    0x04
2061         field   CLRLQIOVERI_LQ  0x02
2062         field   CLRLQIOVERI_NLQ 0x01
2063 }
2064
2065 /*
2066  * LQI Manager Interrupt Mode 1
2067  */
2068 register LQIMODE1 {
2069         address                 0x051
2070         access_mode     RW
2071         modes           M_CFG
2072         field   ENLQIPHASE_LQ   0x80    /* LQIPHASE1 */
2073         field   ENLQIPHASE_NLQ  0x40    /* LQIPHASE2 */
2074         field   ENLIQABORT      0x20
2075         field   ENLQICRCI_LQ    0x10    /* LQICRCI1 */
2076         field   ENLQICRCI_NLQ   0x08    /* LQICRCI2 */
2077         field   ENLQIBADLQI     0x04
2078         field   ENLQIOVERI_LQ   0x02    /* LQIOVERI1 */
2079         field   ENLQIOVERI_NLQ  0x01    /* LQIOVERI2 */
2080 }
2081
2082 /*
2083  * LQI Manager Status 2
2084  */
2085 register LQISTAT2 {
2086         address                 0x052
2087         access_mode     RO
2088         modes           M_DFF0, M_DFF1, M_SCSI
2089         field   PACKETIZED      0x80
2090         field   LQIPHASE_OUTPKT 0x40
2091         field   LQIWORKONLQ     0x20
2092         field   LQIWAITFIFO     0x10
2093         field   LQISTOPPKT      0x08
2094         field   LQISTOPLQ       0x04
2095         field   LQISTOPCMD      0x02
2096         field   LQIGSAVAIL      0x01
2097 }
2098
2099 /*
2100  * SCSI Status 3
2101  */
2102 register SSTAT3 {
2103         address                 0x053
2104         access_mode     RO
2105         modes           M_DFF0, M_DFF1, M_SCSI
2106         field   NTRAMPERR       0x02
2107         field   OSRAMPERR       0x01
2108 }
2109
2110 /*
2111  * Clear SCSI Status 3
2112  */
2113 register CLRSINT3 {
2114         address                 0x053
2115         access_mode     WO
2116         modes           M_DFF0, M_DFF1, M_SCSI
2117         field   CLRNTRAMPERR    0x02
2118         field   CLROSRAMPERR    0x01
2119 }
2120
2121 /*
2122  * SCSI Interrupt Mode 3
2123  */
2124 register SIMODE3 {
2125         address                 0x053
2126         access_mode     RW
2127         modes           M_CFG
2128         field   ENNTRAMPERR     0x02
2129         field   ENOSRAMPERR     0x01
2130 }
2131
2132 /*
2133  * LQO Manager Status 0
2134  */
2135 register LQOSTAT0 {
2136         address                 0x054
2137         access_mode     RO
2138         modes           M_DFF0, M_DFF1, M_SCSI
2139         field   LQOTARGSCBPERR  0x10
2140         field   LQOSTOPT2       0x08
2141         field   LQOATNLQ        0x04
2142         field   LQOATNPKT       0x02
2143         field   LQOTCRC         0x01
2144 }
2145
2146 /*
2147  * Clear LQO Manager interrupt 0
2148  */
2149 register CLRLQOINT0 {
2150         address                 0x054
2151         access_mode     WO
2152         modes           M_DFF0, M_DFF1, M_SCSI
2153         field   CLRLQOTARGSCBPERR       0x10
2154         field   CLRLQOSTOPT2            0x08
2155         field   CLRLQOATNLQ             0x04
2156         field   CLRLQOATNPKT            0x02
2157         field   CLRLQOTCRC              0x01
2158 }
2159
2160 /*
2161  * LQO Manager Interrupt Mode 0
2162  */
2163 register LQOMODE0 {
2164         address                 0x054
2165         access_mode     RW
2166         modes           M_CFG
2167         field   ENLQOTARGSCBPERR        0x10
2168         field   ENLQOSTOPT2             0x08
2169         field   ENLQOATNLQ              0x04
2170         field   ENLQOATNPKT             0x02
2171         field   ENLQOTCRC               0x01
2172 }
2173
2174 /*
2175  * LQO Manager Status 1
2176  */
2177 register LQOSTAT1 {
2178         address                 0x055
2179         access_mode     RO
2180         modes           M_DFF0, M_DFF1, M_SCSI
2181         field   LQOINITSCBPERR  0x10
2182         field   LQOSTOPI2       0x08
2183         field   LQOBADQAS       0x04
2184         field   LQOBUSFREE      0x02
2185         field   LQOPHACHGINPKT  0x01
2186 }
2187
2188 /*
2189  * Clear LOQ Interrupt 1
2190  */
2191 register CLRLQOINT1 {
2192         address                 0x055
2193         access_mode     WO
2194         modes           M_DFF0, M_DFF1, M_SCSI
2195         field   CLRLQOINITSCBPERR       0x10
2196         field   CLRLQOSTOPI2            0x08
2197         field   CLRLQOBADQAS            0x04
2198         field   CLRLQOBUSFREE           0x02
2199         field   CLRLQOPHACHGINPKT       0x01
2200 }
2201
2202 /*
2203  * LQO Manager Interrupt Mode 1
2204  */
2205 register LQOMODE1 {
2206         address                 0x055
2207         access_mode     RW
2208         modes           M_CFG
2209         field   ENLQOINITSCBPERR        0x10
2210         field   ENLQOSTOPI2             0x08
2211         field   ENLQOBADQAS             0x04
2212         field   ENLQOBUSFREE            0x02
2213         field   ENLQOPHACHGINPKT        0x01
2214 }
2215
2216 /*
2217  * LQO Manager Status 2
2218  */
2219 register LQOSTAT2 {
2220         address                 0x056
2221         access_mode     RO
2222         modes           M_DFF0, M_DFF1, M_SCSI
2223         field   LQOPKT          0xE0
2224         field   LQOWAITFIFO     0x10
2225         field   LQOPHACHGOUTPKT 0x02    /* outside of packet boundaries. */
2226         field   LQOSTOP0        0x01    /* Stopped after sending all packets */
2227 }
2228
2229 /*
2230  * Output Synchronizer Space Count
2231  */
2232 register OS_SPACE_CNT {
2233         address                 0x056
2234         access_mode     RO
2235         modes           M_CFG
2236 }
2237
2238 /*
2239  * SCSI Interrupt Mode 1
2240  * Setting any bit will enable the corresponding function
2241  * in SIMODE1 to interrupt via the IRQ pin.
2242  */
2243 register SIMODE1 {
2244         address                 0x057
2245         access_mode     RW
2246         modes           M_DFF0, M_DFF1, M_SCSI
2247         field   ENSELTIMO       0x80
2248         field   ENATNTARG       0x40
2249         field   ENSCSIRST       0x20
2250         field   ENPHASEMIS      0x10
2251         field   ENBUSFREE       0x08
2252         field   ENSCSIPERR      0x04
2253         field   ENSTRB2FAST     0x02
2254         field   ENREQINIT       0x01
2255 }
2256
2257 /*
2258  * Good Status FIFO
2259  */
2260 register GSFIFO {
2261         address                 0x058
2262         access_mode     RO
2263         size            2
2264         modes           M_DFF0, M_DFF1, M_SCSI
2265 }
2266
2267 /*
2268  * Data FIFO SCSI Transfer Control
2269  */
2270 register DFFSXFRCTL {
2271         address                 0x05A
2272         access_mode     RW
2273         modes           M_DFF0, M_DFF1
2274         field   DFFBITBUCKET    0x08
2275         field   CLRSHCNT        0x04
2276         field   CLRCHN          0x02
2277         field   RSTCHN          0x01
2278 }
2279
2280 /*
2281  * Next SCSI Control Block
2282  */
2283 register NEXTSCB {
2284         address                 0x05A
2285         access_mode     RW
2286         size            2
2287         modes           M_SCSI
2288 }
2289
2290 /* Rev B only. */
2291 register LQOSCSCTL {
2292         address                 0x05A
2293         access_mode     RW
2294         size            1
2295         modes           M_CFG
2296         field           LQOH2A_VERSION  0x80
2297         field           LQONOCHKOVER    0x01
2298 }
2299
2300 /*
2301  * SEQ Interrupts
2302  */
2303 register SEQINTSRC {
2304         address                 0x05B
2305         access_mode     RO
2306         modes           M_DFF0, M_DFF1
2307         field   CTXTDONE        0x40
2308         field   SAVEPTRS        0x20
2309         field   CFG4DATA        0x10
2310         field   CFG4ISTAT       0x08
2311         field   CFG4TSTAT       0x04
2312         field   CFG4ICMD        0x02
2313         field   CFG4TCMD        0x01
2314 }
2315
2316 /*
2317  * Clear Arp Interrupts
2318  */
2319 register CLRSEQINTSRC {
2320         address                 0x05B
2321         access_mode     WO
2322         modes           M_DFF0, M_DFF1
2323         field   CLRCTXTDONE     0x40
2324         field   CLRSAVEPTRS     0x20
2325         field   CLRCFG4DATA     0x10
2326         field   CLRCFG4ISTAT    0x08
2327         field   CLRCFG4TSTAT    0x04
2328         field   CLRCFG4ICMD     0x02
2329         field   CLRCFG4TCMD     0x01
2330 }
2331
2332 /*
2333  * SEQ Interrupt Enabled (Shared)
2334  */
2335 register SEQIMODE {
2336         address                 0x05C
2337         access_mode     RW
2338         modes           M_DFF0, M_DFF1
2339         field   ENCTXTDONE      0x40
2340         field   ENSAVEPTRS      0x20
2341         field   ENCFG4DATA      0x10
2342         field   ENCFG4ISTAT     0x08
2343         field   ENCFG4TSTAT     0x04
2344         field   ENCFG4ICMD      0x02
2345         field   ENCFG4TCMD      0x01
2346 }
2347
2348 /*
2349  * Current SCSI Control Block
2350  */
2351 register CURRSCB {
2352         address                 0x05C
2353         access_mode     RW
2354         size            2
2355         modes           M_SCSI
2356 }
2357
2358 /*
2359  * Data FIFO Status
2360  */
2361 register MDFFSTAT {
2362         address                 0x05D
2363         access_mode     RO
2364         modes           M_DFF0, M_DFF1
2365         field   SHCNTNEGATIVE   0x40 /* Rev B or higher */
2366         field   SHCNTMINUS1     0x20 /* Rev B or higher */
2367         field   LASTSDONE       0x10
2368         field   SHVALID         0x08
2369         field   DLZERO          0x04 /* FIFO data ends on packet boundary. */
2370         field   DATAINFIFO      0x02
2371         field   FIFOFREE        0x01
2372 }
2373
2374 /*
2375  * CRC Control
2376  */
2377 register CRCCONTROL {
2378         address                 0x05d
2379         access_mode     RW
2380         modes           M_CFG
2381         field   CRCVALCHKEN             0x40
2382 }
2383
2384 /*
2385  * SCSI Test Control
2386  */
2387 register SCSITEST {
2388         address                 0x05E
2389         access_mode     RW
2390         modes           M_CFG
2391         field   CNTRTEST        0x08
2392         field   SEL_TXPLL_DEBUG 0x04
2393 }
2394
2395 /*
2396  * Data FIFO Queue Tag
2397  */
2398 register DFFTAG {
2399         address                 0x05E
2400         access_mode     RW
2401         size            2
2402         modes           M_DFF0, M_DFF1
2403 }
2404
2405 /*
2406  * Last SCSI Control Block
2407  */
2408 register LASTSCB {
2409         address                 0x05E
2410         access_mode     RW
2411         size            2
2412         modes           M_SCSI
2413 }
2414
2415 /*
2416  * SCSI I/O Cell Power-down Control
2417  */
2418 register IOPDNCTL {
2419         address                 0x05F
2420         access_mode     RW
2421         modes           M_CFG
2422         field   DISABLE_OE      0x80
2423         field   PDN_IDIST       0x04
2424         field   PDN_DIFFSENSE   0x01
2425 }
2426
2427 /*
2428  * Shaddow Host Address.
2429  */
2430 register SHADDR {
2431         address                 0x060
2432         access_mode     RO
2433         size            8
2434         modes           M_DFF0, M_DFF1
2435 }
2436
2437 /*
2438  * Data Group CRC Interval.
2439  */
2440 register DGRPCRCI {
2441         address                 0x060
2442         access_mode     RW
2443         size            2
2444         modes           M_CFG
2445 }
2446
2447 /*
2448  * Data Transfer Negotiation Address
2449  */
2450 register NEGOADDR {
2451         address                 0x060
2452         access_mode     RW
2453         modes           M_SCSI
2454 }
2455
2456 /*
2457  * Data Transfer Negotiation Data - Period Byte
2458  */
2459 register NEGPERIOD {
2460         address                 0x061
2461         access_mode     RW
2462         modes           M_SCSI
2463 }
2464
2465 /*
2466  * Packetized CRC Interval
2467  */
2468 register PACKCRCI {
2469         address                 0x062
2470         access_mode     RW
2471         size            2
2472         modes           M_CFG
2473 }
2474
2475 /*
2476  * Data Transfer Negotiation Data - Offset Byte
2477  */
2478 register NEGOFFSET {
2479         address                 0x062
2480         access_mode     RW
2481         modes           M_SCSI
2482 }
2483
2484 /*
2485  * Data Transfer Negotiation Data - PPR Options
2486  */
2487 register NEGPPROPTS {
2488         address                 0x063
2489         access_mode     RW
2490         modes           M_SCSI
2491         field   PPROPT_PACE     0x08
2492         field   PPROPT_QAS      0x04
2493         field   PPROPT_DT       0x02
2494         field   PPROPT_IUT      0x01
2495 }
2496
2497 /*
2498  * Data Transfer Negotiation Data -  Connection Options
2499  */
2500 register NEGCONOPTS {
2501         address                 0x064
2502         access_mode     RW
2503         modes           M_SCSI
2504         field   ENSNAPSHOT      0x40
2505         field   RTI_WRTDIS      0x20
2506         field   RTI_OVRDTRN     0x10
2507         field   ENSLOWCRC       0x08
2508         field   ENAUTOATNI      0x04
2509         field   ENAUTOATNO      0x02
2510         field   WIDEXFER        0x01
2511 }
2512
2513 /*
2514  * Negotiation Table Annex Column Index.
2515  */
2516 register ANNEXCOL {
2517         address                 0x065
2518         access_mode     RW
2519         modes           M_SCSI
2520 }
2521
2522 register SCSCHKN {
2523         address                 0x066
2524         access_mode     RW
2525         modes           M_CFG
2526         field   STSELSKIDDIS    0x40
2527         field   CURRFIFODEF     0x20
2528         field   WIDERESEN       0x10
2529         field   SDONEMSKDIS     0x08
2530         field   DFFACTCLR       0x04
2531         field   SHVALIDSTDIS    0x02
2532         field   LSTSGCLRDIS     0x01
2533 }
2534
2535 const AHD_ANNEXCOL_PER_DEV0     4
2536 const AHD_NUM_PER_DEV_ANNEXCOLS 4
2537 const AHD_ANNEXCOL_PRECOMP_SLEW 4
2538 const   AHD_PRECOMP_MASK        0x07
2539 const   AHD_PRECOMP_SHIFT       0
2540 const   AHD_PRECOMP_CUTBACK_17  0x04
2541 const   AHD_PRECOMP_CUTBACK_29  0x06
2542 const   AHD_PRECOMP_CUTBACK_37  0x07
2543 const   AHD_SLEWRATE_MASK       0x78
2544 const   AHD_SLEWRATE_SHIFT      3
2545 /*
2546  * Rev A has only a single bit (high bit of field) of slew adjustment.
2547  * Rev B has 4 bits.  The current default happens to be the same for both.
2548  */
2549 const   AHD_SLEWRATE_DEF_REVA   0x08
2550 const   AHD_SLEWRATE_DEF_REVB   0x08
2551
2552 /* Rev A does not have any amplitude setting. */
2553 const AHD_ANNEXCOL_AMPLITUDE    6
2554 const   AHD_AMPLITUDE_MASK      0x7
2555 const   AHD_AMPLITUDE_SHIFT     0
2556 const   AHD_AMPLITUDE_DEF       0x7
2557
2558 /*
2559  * Negotiation Table Annex Data Port.
2560  */
2561 register ANNEXDAT {
2562         address                 0x066
2563         access_mode     RW
2564         modes           M_SCSI
2565 }
2566
2567 /*
2568  * Initiator's Own Id.
2569  * The SCSI ID to use for Selection Out and seen during a reselection..
2570  */
2571 register IOWNID {
2572         address                 0x067
2573         access_mode     RW
2574         modes           M_SCSI
2575 }
2576
2577 /*
2578  * 960MHz Phase-Locked Loop Control 0
2579  */
2580 register PLL960CTL0 {
2581         address                 0x068
2582         access_mode     RW
2583         modes           M_CFG
2584         field   PLL_VCOSEL      0x80
2585         field   PLL_PWDN        0x40
2586         field   PLL_NS          0x30
2587         field   PLL_ENLUD       0x08
2588         field   PLL_ENLPF       0x04
2589         field   PLL_DLPF        0x02
2590         field   PLL_ENFBM       0x01
2591 }
2592
2593 /*
2594  * Target Own Id
2595  */
2596 register TOWNID {
2597         address                 0x069
2598         access_mode     RW
2599         modes           M_SCSI
2600 }
2601
2602 /*
2603  * 960MHz Phase-Locked Loop Control 1
2604  */
2605 register PLL960CTL1 {
2606         address                 0x069
2607         access_mode     RW
2608         modes           M_CFG
2609         field   PLL_CNTEN       0x80
2610         field   PLL_CNTCLR      0x40
2611         field   PLL_RST         0x01
2612 }
2613
2614 /*
2615  * Expander Signature
2616  */
2617 register XSIG {
2618         address                 0x06A
2619         access_mode     RW
2620         modes           M_SCSI
2621 }
2622
2623 /*
2624  * Shadow Byte Count
2625  */
2626 register SHCNT {
2627         address                 0x068
2628         access_mode     RW
2629         size            3
2630         modes           M_DFF0, M_DFF1
2631 }
2632
2633 /*
2634  * Selection Out ID
2635  */
2636 register SELOID {
2637         address                 0x06B
2638         access_mode     RW
2639         modes           M_SCSI
2640 }
2641
2642 /*
2643  * 960-MHz Phase-Locked Loop Test Count
2644  */
2645 register PLL960CNT0 {
2646         address                 0x06A
2647         access_mode     RO
2648         size            2
2649         modes           M_CFG
2650 }
2651
2652 /*
2653  * 400-MHz Phase-Locked Loop Control 0
2654  */
2655 register PLL400CTL0 {
2656         address                 0x06C
2657         access_mode     RW
2658         modes           M_CFG
2659         field   PLL_VCOSEL      0x80
2660         field   PLL_PWDN        0x40
2661         field   PLL_NS          0x30
2662         field   PLL_ENLUD       0x08
2663         field   PLL_ENLPF       0x04
2664         field   PLL_DLPF        0x02
2665         field   PLL_ENFBM       0x01
2666 }
2667
2668 /*
2669  * Arbitration Fairness
2670  */
2671 register FAIRNESS {
2672         address                 0x06C
2673         access_mode     RW
2674         size            2
2675         modes           M_SCSI
2676 }
2677
2678 /*
2679  * 400-MHz Phase-Locked Loop Control 1
2680  */
2681 register PLL400CTL1 {
2682         address                 0x06D
2683         access_mode     RW
2684         modes           M_CFG
2685         field   PLL_CNTEN       0x80
2686         field   PLL_CNTCLR      0x40
2687         field   PLL_RST         0x01
2688 }
2689
2690 /*
2691  * Arbitration Unfairness
2692  */
2693 register UNFAIRNESS {
2694         address                 0x06E
2695         access_mode     RW
2696         size            2
2697         modes           M_SCSI
2698 }
2699
2700 /*
2701  * 400-MHz Phase-Locked Loop Test Count
2702  */
2703 register PLL400CNT0 {
2704         address                 0x06E
2705         access_mode     RO
2706         size            2
2707         modes           M_CFG
2708 }
2709
2710 /*
2711  * SCB Page Pointer
2712  */
2713 register SCBPTR {
2714         address                 0x0A8
2715         access_mode     RW
2716         size            2
2717         modes           M_DFF0, M_DFF1, M_CCHAN, M_SCSI
2718 }
2719
2720 /*
2721  * CMC SCB Array Count
2722  * Number of bytes to transfer between CMC SCB memory and SCBRAM.
2723  * Transfers must be 8byte aligned and sized.
2724  */
2725 register CCSCBACNT {
2726         address                 0x0AB
2727         access_mode     RW
2728         modes           M_CCHAN
2729 }
2730
2731 /*
2732  * SCB Autopointer
2733  * SCB-Next Address Snooping logic.  When an SCB is transferred to
2734  * the card, the next SCB address to be used by the CMC array can
2735  * be autoloaded from that transfer.
2736  */
2737 register SCBAUTOPTR {
2738         address                 0x0AB
2739         access_mode     RW
2740         modes           M_CFG
2741         field   AUSCBPTR_EN     0x80
2742         field   SCBPTR_ADDR     0x38
2743         field   SCBPTR_OFF      0x07
2744 }
2745
2746 /*
2747  * CMC SG Ram Address Pointer
2748  */
2749 register CCSGADDR {
2750         address                 0x0AC
2751         access_mode     RW
2752         modes           M_DFF0, M_DFF1
2753 }
2754
2755 /*
2756  * CMC SCB RAM Address Pointer
2757  */
2758 register CCSCBADDR {
2759         address                 0x0AC
2760         access_mode     RW
2761         modes           M_CCHAN
2762 }
2763
2764 /*
2765  * CMC SCB Ram Back-up Address Pointer
2766  * Indicates the true stop location of transfers halted prior
2767  * to SCBHCNT going to 0.
2768  */
2769 register CCSCBADR_BK {
2770         address                 0x0AC
2771         access_mode     RO
2772         modes           M_CFG
2773 }
2774
2775 /*
2776  * CMC SG Control
2777  */
2778 register CCSGCTL {
2779         address                 0x0AD
2780         access_mode     RW
2781         modes           M_DFF0, M_DFF1
2782         field   CCSGDONE        0x80
2783         field   SG_CACHE_AVAIL  0x10
2784         field   CCSGENACK       0x08
2785         mask    CCSGEN          0x0C
2786         field   SG_FETCH_REQ    0x02
2787         field   CCSGRESET       0x01
2788 }
2789
2790 /*
2791  * CMD SCB Control
2792  */
2793 register CCSCBCTL {
2794         address                 0x0AD
2795         access_mode     RW
2796         modes           M_CCHAN
2797         field   CCSCBDONE       0x80
2798         field   ARRDONE         0x40
2799         field   CCARREN         0x10
2800         field   CCSCBEN         0x08
2801         field   CCSCBDIR        0x04
2802         field   CCSCBRESET      0x01
2803 }
2804
2805 /*
2806  * CMC Ram BIST
2807  */
2808 register CMC_RAMBIST {
2809         address                 0x0AD
2810         access_mode     RW
2811         modes           M_CFG
2812         field   SG_ELEMENT_SIZE         0x80
2813         field   SCBRAMBIST_FAIL         0x40
2814         field   SG_BIST_FAIL            0x20
2815         field   SG_BIST_EN              0x10
2816         field   CMC_BUFFER_BIST_FAIL    0x02
2817         field   CMC_BUFFER_BIST_EN      0x01
2818 }
2819
2820 /*
2821  * CMC SG RAM Data Port
2822  */
2823 register CCSGRAM {
2824         address                 0x0B0
2825         access_mode     RW
2826         modes           M_DFF0, M_DFF1
2827 }
2828
2829 /*
2830  * CMC SCB RAM Data Port
2831  */
2832 register CCSCBRAM {
2833         address                 0x0B0
2834         access_mode     RW
2835         modes           M_CCHAN
2836 }
2837
2838 /*
2839  * Flex DMA Address.
2840  */
2841 register FLEXADR {
2842         address                 0x0B0
2843         access_mode     RW
2844         size            3
2845         modes           M_SCSI
2846 }
2847
2848 /*
2849  * Flex DMA Byte Count
2850  */
2851 register FLEXCNT {
2852         address                 0x0B3
2853         access_mode     RW
2854         size            2
2855         modes           M_SCSI
2856 }
2857
2858 /*
2859  * Flex DMA Status
2860  */
2861 register FLEXDMASTAT {
2862         address                 0x0B5
2863         access_mode     RW
2864         modes           M_SCSI
2865         field   FLEXDMAERR      0x02
2866         field   FLEXDMADONE     0x01
2867 }
2868
2869 /*
2870  * Flex DMA Data Port
2871  */
2872 register FLEXDATA {
2873         address                 0x0B6
2874         access_mode     RW
2875         modes           M_SCSI
2876 }
2877
2878 /*
2879  * Board Data
2880  */
2881 register BRDDAT {
2882         address                 0x0B8
2883         access_mode     RW
2884         modes           M_SCSI
2885 }
2886
2887 /*
2888  * Board Control
2889  */
2890 register BRDCTL {
2891         address                 0x0B9
2892         access_mode     RW
2893         modes           M_SCSI
2894         field   FLXARBACK       0x80
2895         field   FLXARBREQ       0x40
2896         field   BRDADDR         0x38
2897         field   BRDEN           0x04
2898         field   BRDRW           0x02
2899         field   BRDSTB          0x01
2900 }
2901
2902 /*
2903  * Serial EEPROM Address
2904  */
2905 register SEEADR {
2906         address                 0x0BA
2907         access_mode     RW
2908         modes           M_SCSI
2909 }
2910
2911 /*
2912  * Serial EEPROM Data
2913  */
2914 register SEEDAT {
2915         address                 0x0BC
2916         access_mode     RW
2917         size            2
2918         modes           M_SCSI
2919 }
2920
2921 /*
2922  * Serial EEPROM Status
2923  */
2924 register SEESTAT {
2925         address                 0x0BE
2926         access_mode     RO
2927         modes           M_SCSI
2928         field   INIT_DONE       0x80
2929         field   SEEOPCODE       0x70
2930         field   LDALTID_L       0x08
2931         field   SEEARBACK       0x04
2932         field   SEEBUSY         0x02
2933         field   SEESTART        0x01
2934 }
2935
2936 /*
2937  * Serial EEPROM Control
2938  */
2939 register SEECTL {
2940         address                 0x0BE
2941         access_mode     RW
2942         modes           M_SCSI
2943         field   SEEOPCODE       0x70 {
2944                 SEEOP_ERASE     0x70,
2945                 SEEOP_READ      0x60,
2946                 SEEOP_WRITE     0x50,
2947         /*
2948          * The following four commands use special
2949          * addresses for differentiation.
2950          */
2951                 SEEOP_ERAL      0x40
2952         }
2953         mask    SEEOP_EWEN      0x40
2954         mask    SEEOP_WALL      0x40
2955         mask    SEEOP_EWDS      0x40
2956         field   SEERST          0x02
2957         field   SEESTART        0x01
2958 }
2959
2960 const SEEOP_ERAL_ADDR   0x80
2961 const SEEOP_EWEN_ADDR   0xC0
2962 const SEEOP_WRAL_ADDR   0x40
2963 const SEEOP_EWDS_ADDR   0x00
2964
2965 /*
2966  * SCB Counter
2967  */
2968 register SCBCNT {
2969         address                 0x0BF
2970         access_mode     RW
2971         modes           M_SCSI
2972 }
2973
2974 /*
2975  * Data FIFO Write Address
2976  * Pointer to the next QWD location to be written to the data FIFO.
2977  */
2978 register DFWADDR {
2979         address                 0x0C0
2980         access_mode     RW
2981         size            2
2982         modes           M_DFF0, M_DFF1
2983 }
2984
2985 /*
2986  * DSP Filter Control
2987  */
2988 register DSPFLTRCTL {
2989         address                 0x0C0
2990         access_mode     RW
2991         modes           M_CFG
2992         field   FLTRDISABLE     0x20
2993         field   EDGESENSE       0x10
2994         field   DSPFCNTSEL      0x0F
2995 }
2996
2997 /*
2998  * DSP Data Channel Control
2999  */
3000 register DSPDATACTL {
3001         address                 0x0C1
3002         access_mode     RW
3003         modes           M_CFG
3004         field   BYPASSENAB      0x80
3005         field   DESQDIS         0x10
3006         field   RCVROFFSTDIS    0x04
3007         field   XMITOFFSTDIS    0x02
3008 }
3009
3010 /*
3011  * Data FIFO Read Address
3012  * Pointer to the next QWD location to be read from the data FIFO.
3013  */
3014 register DFRADDR {
3015         address                 0x0C2
3016         access_mode     RW
3017         size            2
3018         modes           M_DFF0, M_DFF1
3019 }
3020
3021 /*
3022  * DSP REQ Control
3023  */
3024 register DSPREQCTL {
3025         address                 0x0C2
3026         access_mode     RW
3027         modes           M_CFG
3028         field   MANREQCTL       0xC0
3029         field   MANREQDLY       0x3F
3030 }
3031
3032 /*
3033  * DSP ACK Control
3034  */
3035 register DSPACKCTL {
3036         address                 0x0C3
3037         access_mode     RW
3038         modes           M_CFG
3039         field   MANACKCTL       0xC0
3040         field   MANACKDLY       0x3F
3041 }
3042
3043 /*
3044  * Data FIFO Data
3045  * Read/Write byte port into the data FIFO.  The read and write
3046  * FIFO pointers increment with each read and write respectively
3047  * to this port.
3048  */
3049 register DFDAT {
3050         address                 0x0C4
3051         access_mode     RW
3052         modes           M_DFF0, M_DFF1
3053 }
3054
3055 /*
3056  * DSP Channel Select
3057  */
3058 register DSPSELECT {
3059         address                 0x0C4
3060         access_mode     RW
3061         modes           M_CFG
3062         field   AUTOINCEN       0x80
3063         field   DSPSEL          0x1F
3064 }
3065
3066 const NUMDSPS 0x14
3067
3068 /*
3069  * Write Bias Control
3070  */
3071 register WRTBIASCTL {
3072         address                 0x0C5
3073         access_mode     WO
3074         modes           M_CFG
3075         field   AUTOXBCDIS      0x80
3076         field   XMITMANVAL      0x3F
3077 }
3078
3079 /*
3080  * Currently the WRTBIASCTL is the same as the default.
3081  */
3082 const WRTBIASCTL_HP_DEFAULT 0x0
3083
3084 /*
3085  * Receiver Bias Control
3086  */
3087 register RCVRBIOSCTL {
3088         address                 0x0C6
3089         access_mode     WO
3090         modes           M_CFG
3091         field   AUTORBCDIS      0x80
3092         field   RCVRMANVAL      0x3F
3093 }
3094
3095 /*
3096  * Write Bias Calculator
3097  */
3098 register WRTBIASCALC {
3099         address                 0x0C7
3100         access_mode     RO
3101         modes           M_CFG
3102 }
3103
3104 /*
3105  * Data FIFO Pointers
3106  * Contains the byte offset from DFWADDR and DWRADDR to the current
3107  * FIFO write/read locations.
3108  */
3109 register DFPTRS {
3110         address                 0x0C8
3111         access_mode     RW
3112         modes           M_DFF0, M_DFF1
3113 }
3114
3115 /*
3116  * Receiver Bias Calculator
3117  */
3118 register RCVRBIASCALC {
3119         address                 0x0C8
3120         access_mode     RO
3121         modes           M_CFG
3122 }
3123
3124 /*
3125  * Data FIFO Backup Read Pointer
3126  * Contains the data FIFO address to be restored if the last
3127  * data accessed from the data FIFO was not transferred successfully.
3128  */
3129 register DFBKPTR {
3130         address                 0x0C9
3131         access_mode     RW
3132         size            2
3133         modes           M_DFF0, M_DFF1
3134 }
3135
3136 /*
3137  * Skew Calculator
3138  */
3139 register SKEWCALC {
3140         address                 0x0C9
3141         access_mode     RO
3142         modes           M_CFG
3143 }
3144
3145 /*
3146  * Data FIFO Debug Control
3147  */
3148 register DFDBCTL {
3149         address                         0x0CB
3150         access_mode     RW
3151         modes           M_DFF0, M_DFF1
3152         field   DFF_CIO_WR_RDY          0x20
3153         field   DFF_CIO_RD_RDY          0x10
3154         field   DFF_DIR_ERR             0x08
3155         field   DFF_RAMBIST_FAIL        0x04
3156         field   DFF_RAMBIST_DONE        0x02
3157         field   DFF_RAMBIST_EN          0x01
3158 }
3159
3160 /*
3161  * Data FIFO Space Count
3162  * Number of FIFO locations that are free.
3163  */
3164 register DFSCNT {
3165         address                 0x0CC
3166         access_mode     RO
3167         size            2
3168         modes           M_DFF0, M_DFF1
3169 }
3170
3171 /*
3172  * Data FIFO Byte Count
3173  * Number of filled FIFO locations.
3174  */
3175 register DFBCNT {
3176         address                 0x0CE
3177         access_mode     RO
3178         size            2
3179         modes           M_DFF0, M_DFF1
3180 }
3181
3182 /*
3183  * Sequencer Program Overlay Address.
3184  * Low address must be written prior to high address.
3185  */
3186 register OVLYADDR {
3187         address                 0x0D4
3188         modes           M_SCSI
3189         size            2
3190         access_mode     RW
3191 }
3192
3193 /*
3194  * Sequencer Control 0
3195  * Error detection mode, speed configuration,
3196  * single step, breakpoints and program load.
3197  */
3198 register SEQCTL0 {
3199         address                 0x0D6
3200         access_mode RW
3201         field   PERRORDIS       0x80
3202         field   PAUSEDIS        0x40
3203         field   FAILDIS         0x20
3204         field   FASTMODE        0x10
3205         field   BRKADRINTEN     0x08
3206         field   STEP            0x04
3207         field   SEQRESET        0x02
3208         field   LOADRAM         0x01
3209 }
3210
3211 /*
3212  * Sequencer Control 1
3213  * Instruction RAM Diagnostics
3214  */
3215 register SEQCTL1 {
3216         address                 0x0D7
3217         access_mode RW
3218         field   OVRLAY_DATA_CHK 0x08
3219         field   RAMBIST_DONE    0x04
3220         field   RAMBIST_FAIL    0x02
3221         field   RAMBIST_EN      0x01
3222 }
3223
3224 /*
3225  * Sequencer Flags
3226  * Zero and Carry state of the ALU.
3227  */
3228 register FLAGS {
3229         address                 0x0D8
3230         access_mode RO
3231         field   ZERO            0x02
3232         field   CARRY           0x01
3233 }
3234
3235 /*
3236  * Sequencer Interrupt Control
3237  */ 
3238 register SEQINTCTL {
3239         address                 0x0D9
3240         access_mode RW
3241         field   INTVEC1DSL      0x80
3242         field   INT1_CONTEXT    0x20
3243         field   SCS_SEQ_INT1M1  0x10
3244         field   SCS_SEQ_INT1M0  0x08
3245         field   INTMASK2        0x04
3246         field   INTMASK1        0x02
3247         field   IRET            0x01
3248 }
3249
3250 /*
3251  * Sequencer RAM Data Port
3252  * Single byte window into the Sequencer Instruction Ram area starting
3253  * at the address specified by OVLYADDR.  To write a full instruction word,
3254  * simply write four bytes in succession.  OVLYADDR will increment after the
3255  * most significant instrution byte (the byte with the parity bit) is written.
3256  */
3257 register SEQRAM {
3258         address                 0x0DA
3259         access_mode RW
3260 }
3261
3262 /*
3263  * Sequencer Program Counter
3264  * Low byte must be written prior to high byte.
3265  */
3266 register PRGMCNT {
3267         address                 0x0DE
3268         access_mode     RW
3269         size            2
3270 }
3271
3272 /*
3273  * Accumulator
3274  */
3275 register ACCUM {
3276         address                 0x0E0
3277         access_mode RW
3278         accumulator
3279 }
3280
3281 /*
3282  * Source Index Register
3283  * Incrementing index for reads of SINDIR and the destination (low byte only)
3284  * for any immediate operands passed in jmp, jc, jnc, call instructions.
3285  * Example:
3286  *              mvi     0xFF    call some_routine;
3287  *
3288  *  Will set SINDEX[0] to 0xFF and call the routine "some_routine.
3289  */
3290 register SINDEX {
3291         address                 0x0E2
3292         access_mode     RW
3293         size            2
3294         sindex
3295 }
3296
3297 /*
3298  * Destination Index Register
3299  * Incrementing index for writes to DINDIR.  Can be used as a scratch register.
3300  */
3301 register DINDEX {
3302         address                 0x0E4
3303         access_mode     RW
3304         size            2
3305 }
3306
3307 /*
3308  * Break Address
3309  * Sequencer instruction breakpoint address address.
3310  */
3311 register BRKADDR0 {
3312         address                 0x0E6
3313         access_mode     RW
3314 }
3315
3316 register BRKADDR1 {
3317         address                 0x0E6
3318         access_mode     RW
3319         field   BRKDIS          0x80    /* Disable Breakpoint */
3320 }
3321
3322 /*
3323  * All Ones
3324  * All reads to this register return the value 0xFF.
3325  */
3326 register ALLONES {
3327         address                 0x0E8
3328         access_mode RO
3329         allones
3330 }
3331
3332 /*
3333  * All Zeros
3334  * All reads to this register return the value 0.
3335  */
3336 register ALLZEROS {
3337         address                 0x0EA
3338         access_mode RO
3339         allzeros
3340 }
3341
3342 /*
3343  * No Destination
3344  * Writes to this register have no effect.
3345  */
3346 register NONE {
3347         address                 0x0EA
3348         access_mode WO
3349         none
3350 }
3351
3352 /*
3353  * Source Index Indirect
3354  * Reading this register is equivalent to reading (register_base + SINDEX) and
3355  * incrementing SINDEX by 1.
3356  */
3357 register SINDIR {
3358         address                 0x0EC
3359         access_mode RO
3360 }
3361
3362 /*
3363  * Destination Index Indirect
3364  * Writing this register is equivalent to writing to (register_base + DINDEX)
3365  * and incrementing DINDEX by 1.
3366  */
3367 register DINDIR  {
3368         address                 0x0ED
3369         access_mode WO
3370 }
3371
3372 /*
3373  * Function One
3374  * 2's complement to bit value conversion.  Write the 2's complement value
3375  * (0-7 only) to the top nibble and retrieve the bit indexed by that value
3376  * on the next read of this register. 
3377  * Example:
3378  *      Write   0x60
3379  *      Read    0x40
3380  */
3381 register FUNCTION1 {
3382         address                 0x0F0
3383         access_mode RW
3384 }
3385
3386 /*
3387  * Stack
3388  * Window into the stack.  Each stack location is 10 bits wide reported
3389  * low byte followed by high byte.  There are 8 stack locations.
3390  */
3391 register STACK {
3392         address                 0x0F2
3393         access_mode RW
3394 }
3395
3396 /*
3397  * Interrupt Vector 1 Address
3398  * Interrupt branch address for SCS SEQ_INT1 mode 0 and 1 interrupts.
3399  */
3400 register INTVEC1_ADDR {
3401         address                 0x0F4
3402         access_mode     RW
3403         size            2
3404         modes           M_CFG
3405 }
3406
3407 /*
3408  * Current Address
3409  * Address of the SEQRAM instruction currently executing instruction.
3410  */
3411 register CURADDR {
3412         address                 0x0F4
3413         access_mode     RW
3414         size            2
3415         modes           M_SCSI
3416 }
3417
3418 /*
3419  * Interrupt Vector 2 Address
3420  * Interrupt branch address for HST_SEQ_INT2 interrupts.
3421  */
3422 register INTVEC2_ADDR {
3423         address                 0x0F6
3424         access_mode     RW
3425         size            2
3426         modes           M_CFG
3427 }
3428
3429 /*
3430  * Last Address
3431  * Address of the SEQRAM instruction executed prior to the current instruction.
3432  */
3433 register LASTADDR {
3434         address                 0x0F6
3435         access_mode     RW
3436         size            2
3437         modes           M_SCSI
3438 }
3439
3440 register AHD_PCI_CONFIG_BASE {
3441         address                 0x100
3442         access_mode     RW
3443         size            256
3444         modes           M_CFG
3445 }
3446
3447 /* ---------------------- Scratch RAM Offsets ------------------------- */
3448 scratch_ram {
3449         /* Mode Specific */
3450         address                 0x0A0
3451         size    8
3452         modes   0, 1, 2, 3
3453         REG0 {
3454                 size            2
3455         }
3456         REG1 {
3457                 size            2
3458         }
3459         REG_ISR {
3460                 size            2
3461         }
3462         SG_STATE {
3463                 size            1
3464                 field   SEGS_AVAIL      0x01
3465                 field   LOADING_NEEDED  0x02
3466                 field   FETCH_INPROG    0x04
3467         }
3468         /*
3469          * Track whether the transfer byte count for
3470          * the current data phase is odd.
3471          */
3472         DATA_COUNT_ODD {
3473                 size            1
3474         }
3475 }
3476
3477 scratch_ram {
3478         /* Mode Specific */
3479         address                 0x0F8
3480         size    8
3481         modes   0, 1, 2, 3
3482         LONGJMP_ADDR {
3483                 size            2
3484         }
3485         ACCUM_SAVE {
3486                 size            1
3487         }
3488 }
3489
3490
3491 scratch_ram {
3492         address                 0x100
3493         size    128
3494         modes   0, 1, 2, 3
3495         /*
3496          * Per "other-id" execution queues.  We use an array of
3497          * tail pointers into lists of SCBs sorted by "other-id".
3498          * The execution head pointer threads the head SCBs for
3499          * each list.
3500          */
3501         WAITING_SCB_TAILS {
3502                 size            32
3503         }
3504         WAITING_TID_HEAD {
3505                 size            2
3506         }
3507         WAITING_TID_TAIL {
3508                 size            2
3509         }
3510         /*
3511          * SCBID of the next SCB in the new SCB queue.
3512          */
3513         NEXT_QUEUED_SCB_ADDR {
3514                 size            4
3515         }
3516         /*
3517          * head of list of SCBs that have
3518          * completed but have not been
3519          * put into the qoutfifo.
3520          */
3521         COMPLETE_SCB_HEAD {
3522                 size            2
3523         }
3524         /*
3525          * The list of completed SCBs in
3526          * the active DMA.
3527          */
3528         COMPLETE_SCB_DMAINPROG_HEAD {
3529                 size            2
3530         }
3531         /*
3532          * head of list of SCBs that have
3533          * completed but need to be uploaded
3534          * to the host prior to being completed.
3535          */
3536         COMPLETE_DMA_SCB_HEAD {
3537                 size            2
3538         }
3539         /*
3540          * tail of list of SCBs that have
3541          * completed but need to be uploaded
3542          * to the host prior to being completed.
3543          */
3544         COMPLETE_DMA_SCB_TAIL {
3545                 size            2
3546         }
3547         /*
3548          * head of list of SCBs that have
3549          * been uploaded to the host, but cannot
3550          * be completed until the QFREEZE is in
3551          * full effect (i.e. no selections pending).
3552          */
3553         COMPLETE_ON_QFREEZE_HEAD {
3554                 size            2
3555         }
3556         /*
3557          * Counting semaphore to prevent new select-outs
3558          * The queue is frozen so long as the sequencer
3559          * and kernel freeze counts differ.
3560          */
3561         QFREEZE_COUNT {
3562                 size            2
3563         }
3564         KERNEL_QFREEZE_COUNT {
3565                 size            2
3566         }
3567         /*
3568          * Mode to restore on legacy idle loop exit.
3569          */
3570         SAVED_MODE {
3571                 size            1
3572         }
3573         /*
3574          * Single byte buffer used to designate the type or message
3575          * to send to a target.
3576          */
3577         MSG_OUT {
3578                 size            1
3579         }
3580         /* Parameters for DMA Logic */
3581         DMAPARAMS {
3582                 size            1
3583                 field   PRELOADEN       0x80
3584                 field   WIDEODD         0x40
3585                 field   SCSIEN          0x20
3586                 field   SDMAEN          0x10
3587                 field   SDMAENACK       0x10
3588                 field   HDMAEN          0x08
3589                 field   HDMAENACK       0x08
3590                 field   DIRECTION       0x04    /* Set indicates PCI->SCSI */
3591                 field   FIFOFLUSH       0x02
3592                 field   FIFORESET       0x01
3593         }
3594         SEQ_FLAGS {
3595                 size            1
3596                 field   NOT_IDENTIFIED          0x80
3597                 field   NO_CDB_SENT             0x40
3598                 field   TARGET_CMD_IS_TAGGED    0x40
3599                 field   DPHASE                  0x20
3600                 /* Target flags */
3601                 field   TARG_CMD_PENDING        0x10
3602                 field   CMDPHASE_PENDING        0x08
3603                 field   DPHASE_PENDING          0x04
3604                 field   SPHASE_PENDING          0x02
3605                 field   NO_DISCONNECT           0x01
3606         }
3607         /*
3608          * Temporary storage for the
3609          * target/channel/lun of a
3610          * reconnecting target
3611          */
3612         SAVED_SCSIID {
3613                 size            1
3614         }
3615         SAVED_LUN {
3616                 size            1
3617         }
3618         /*
3619          * The last bus phase as seen by the sequencer. 
3620          */
3621         LASTPHASE {
3622                 size            1
3623                 field   CDI             0x80
3624                 field   IOI             0x40
3625                 field   MSGI            0x20
3626                 field   P_BUSFREE       0x01
3627                 enum    PHASE_MASK  CDO|IOO|MSGO {
3628                         P_DATAOUT       0x0,
3629                         P_DATAIN        IOO,
3630                         P_DATAOUT_DT    P_DATAOUT|MSGO,
3631                         P_DATAIN_DT     P_DATAIN|MSGO,
3632                         P_COMMAND       CDO,
3633                         P_MESGOUT       CDO|MSGO,
3634                         P_STATUS        CDO|IOO,
3635                         P_MESGIN        CDO|IOO|MSGO
3636                 }
3637         }
3638         /*
3639          * Value to "or" into the SCBPTR[1] value to
3640          * indicate that an entry in the QINFIFO is valid.
3641          */
3642         QOUTFIFO_ENTRY_VALID_TAG {
3643                 size            1
3644         }
3645         /*
3646          * Kernel and sequencer offsets into the queue of
3647          * incoming target mode command descriptors.  The
3648          * queue is full when the KERNEL_TQINPOS == TQINPOS.
3649          */
3650         KERNEL_TQINPOS {
3651                 size            1
3652         }
3653         TQINPOS {                
3654                 size            1
3655         }
3656         /*
3657          * Base address of our shared data with the kernel driver in host
3658          * memory.  This includes the qoutfifo and target mode
3659          * incoming command queue.
3660          */
3661         SHARED_DATA_ADDR {
3662                 size            4
3663         }
3664         /*
3665          * Pointer to location in host memory for next
3666          * position in the qoutfifo.
3667          */
3668         QOUTFIFO_NEXT_ADDR {
3669                 size            4
3670         }
3671         ARG_1 {
3672                 size            1
3673                 mask    SEND_MSG                0x80
3674                 mask    SEND_SENSE              0x40
3675                 mask    SEND_REJ                0x20
3676                 mask    MSGOUT_PHASEMIS         0x10
3677                 mask    EXIT_MSG_LOOP           0x08
3678                 mask    CONT_MSG_LOOP_WRITE     0x04
3679                 mask    CONT_MSG_LOOP_READ      0x03
3680                 mask    CONT_MSG_LOOP_TARG      0x02
3681                 alias   RETURN_1
3682         }
3683         ARG_2 {
3684                 size            1
3685                 alias   RETURN_2
3686         }
3687
3688         /*
3689          * Snapshot of MSG_OUT taken after each message is sent.
3690          */
3691         LAST_MSG {
3692                 size            1
3693         }
3694
3695         /*
3696          * Sequences the kernel driver has okayed for us.  This allows
3697          * the driver to do things like prevent initiator or target
3698          * operations.
3699          */
3700         SCSISEQ_TEMPLATE {
3701                 size            1
3702                 field   MANUALCTL       0x40
3703                 field   ENSELI          0x20
3704                 field   ENRSELI         0x10
3705                 field   MANUALP         0x0C
3706                 field   ENAUTOATNP      0x02
3707                 field   ALTSTIM         0x01
3708         }
3709
3710         /*
3711          * The initiator specified tag for this target mode transaction.
3712          */
3713         INITIATOR_TAG {
3714                 size            1
3715         }
3716
3717         SEQ_FLAGS2 {
3718                 size            1
3719                 field   PENDING_MK_MESSAGE      0x01
3720                 field   TARGET_MSG_PENDING      0x02
3721                 field   SELECTOUT_QFROZEN       0x04
3722         }
3723
3724         ALLOCFIFO_SCBPTR {
3725                 size            2
3726         }
3727
3728         /*
3729          * The maximum amount of time to wait, when interrupt coalescing
3730          * is enabled, before issueing a CMDCMPLT interrupt for a completed
3731          * command.
3732          */
3733         INT_COALESCING_TIMER {
3734                 size            2
3735         }
3736
3737         /*
3738          * The maximum number of commands to coalesce into a single interrupt.
3739          * Actually the 2's complement of that value to simplify sequencer
3740          * code.
3741          */
3742         INT_COALESCING_MAXCMDS {
3743                 size            1
3744         }
3745
3746         /*
3747          * The minimum number of commands still outstanding required
3748          * to continue coalescing (2's complement of value).
3749          */
3750         INT_COALESCING_MINCMDS {
3751                 size            1
3752         }
3753
3754         /*
3755          * Number of commands "in-flight".
3756          */
3757         CMDS_PENDING {
3758                 size            2
3759         }
3760
3761         /*
3762          * The count of commands that have been coalesced.
3763          */
3764         INT_COALESCING_CMDCOUNT {
3765                 size            1
3766         }
3767
3768         /*
3769          * Since the HS_MAIBOX is self clearing, copy its contents to
3770          * this position in scratch ram every time it changes.
3771          */
3772         LOCAL_HS_MAILBOX {
3773                 size            1
3774         }
3775         /*
3776          * Target-mode CDB type to CDB length table used
3777          * in non-packetized operation.
3778          */
3779         CMDSIZE_TABLE {
3780                 size            8
3781         }
3782         /*
3783          * When an SCB with the MK_MESSAGE flag is
3784          * queued to the controller, it cannot enter
3785          * the waiting for selection list until the
3786          * selections for any previously queued
3787          * commands to that target complete.  During
3788          * the wait, the MK_MESSAGE SCB is queued
3789          * here.
3790          */
3791         MK_MESSAGE_SCB {
3792                 size            2
3793         }
3794         /*
3795          * Saved SCSIID of MK_MESSAGE_SCB to avoid
3796          * an extra SCBPTR operation when deciding
3797          * if the MK_MESSAGE_SCB can be run.
3798          */
3799         MK_MESSAGE_SCSIID {
3800                 size            1
3801         }
3802 }
3803
3804 /************************* Hardware SCB Definition ****************************/
3805 scb {
3806         address                 0x180
3807         size    64
3808         modes   0, 1, 2, 3
3809         SCB_RESIDUAL_DATACNT {
3810                 size    4
3811                 alias   SCB_CDB_STORE
3812                 alias   SCB_HOST_CDB_PTR
3813         }
3814         SCB_RESIDUAL_SGPTR {
3815                 size    4
3816                 field   SG_ADDR_MASK            0xf8    /* In the last byte */
3817                 field   SG_OVERRUN_RESID        0x02    /* In the first byte */
3818                 field   SG_LIST_NULL            0x01    /* In the first byte */
3819         }
3820         SCB_SCSI_STATUS {
3821                 size    1
3822                 alias   SCB_HOST_CDB_LEN
3823         }
3824         SCB_TARGET_PHASES {
3825                 size    1
3826         }
3827         SCB_TARGET_DATA_DIR {
3828                 size    1
3829         }
3830         SCB_TARGET_ITAG {
3831                 size    1
3832         }
3833         SCB_SENSE_BUSADDR {
3834                 /*
3835                  * Only valid if CDB length is less than 13 bytes or
3836                  * we are using a CDB pointer.  Otherwise contains
3837                  * the last 4 bytes of embedded cdb information.
3838                  */
3839                 size    4
3840                 alias   SCB_NEXT_COMPLETE
3841         }
3842         SCB_TAG {
3843                 alias   SCB_FIFO_USE_COUNT
3844                 size    2
3845         }
3846         SCB_CONTROL {
3847                 size    1
3848                 field   TARGET_SCB      0x80
3849                 field   DISCENB         0x40
3850                 field   TAG_ENB         0x20
3851                 field   MK_MESSAGE      0x10
3852                 field   STATUS_RCVD     0x08
3853                 field   DISCONNECTED    0x04
3854                 field   SCB_TAG_TYPE    0x03
3855         }
3856         SCB_SCSIID {
3857                 size    1
3858                 field   TID     0xF0
3859                 field   OID     0x0F
3860         }
3861         SCB_LUN {
3862                 size    1
3863                 field   LID     0xff
3864         }
3865         SCB_TASK_ATTRIBUTE {
3866                 size    1
3867                 /*
3868                  * Overloaded field for non-packetized 
3869                  * ignore wide residue message handling.
3870                  */
3871                 field   SCB_XFERLEN_ODD 0x01
3872         }
3873         SCB_CDB_LEN {
3874                 size    1
3875                 field   SCB_CDB_LEN_PTR 0x80    /* CDB in host memory */
3876         }
3877         SCB_TASK_MANAGEMENT {
3878                 size    1
3879         }
3880         SCB_DATAPTR {
3881                 size    8
3882         }
3883         SCB_DATACNT {
3884                 /*
3885                  * The last byte is really the high address bits for
3886                  * the data address.
3887                  */
3888                 size    4
3889                 field   SG_LAST_SEG             0x80    /* In the fourth byte */
3890                 field   SG_HIGH_ADDR_BITS       0x7F    /* In the fourth byte */
3891         }
3892         SCB_SGPTR {
3893                 size    4
3894                 field   SG_STATUS_VALID 0x04    /* In the first byte */
3895                 field   SG_FULL_RESID   0x02    /* In the first byte */
3896                 field   SG_LIST_NULL    0x01    /* In the first byte */
3897         }
3898         SCB_BUSADDR {
3899                 size    4
3900         }
3901         SCB_NEXT {
3902                 alias   SCB_NEXT_SCB_BUSADDR
3903                 size    2
3904         }
3905         SCB_NEXT2 {
3906                 size    2
3907         }
3908         SCB_SPARE {
3909                 size    8
3910                 alias   SCB_PKT_LUN
3911         }
3912         SCB_DISCONNECTED_LISTS {
3913                 size    8
3914         }
3915 }
3916
3917 /*********************************** Constants ********************************/
3918 const MK_MESSAGE_BIT_OFFSET     4
3919 const TID_SHIFT         4
3920 const TARGET_CMD_CMPLT  0xfe
3921 const INVALID_ADDR      0x80
3922 #define SCB_LIST_NULL   0xff
3923 #define QOUTFIFO_ENTRY_VALID_TOGGLE     0x80
3924
3925 const CCSGADDR_MAX      0x80
3926 const CCSCBADDR_MAX     0x80
3927 const CCSGRAM_MAXSEGS   16
3928
3929 /* Selection Timeout Timer Constants */
3930 const STIMESEL_SHIFT    3
3931 const STIMESEL_MIN      0x18
3932 const STIMESEL_BUG_ADJ  0x8
3933
3934 /* WDTR Message values */
3935 const BUS_8_BIT                 0x00
3936 const BUS_16_BIT                0x01
3937 const BUS_32_BIT                0x02
3938
3939 /* Offset maximums */
3940 const MAX_OFFSET                0xfe
3941 const MAX_OFFSET_PACED          0xfe
3942 const MAX_OFFSET_PACED_BUG      0x7f
3943 /*
3944  * Some 160 devices incorrectly accept 0xfe as a
3945  * sync offset, but will overrun this value.  Limit
3946  * to 0x7f for speed lower than U320 which will
3947  * avoid the persistent sync offset overruns.
3948  */
3949 const MAX_OFFSET_NON_PACED      0x7f
3950 const HOST_MSG                  0xff
3951
3952 /*
3953  * The size of our sense buffers.
3954  * Sense buffer mapping can be handled in either of two ways.
3955  * The first is to allocate a dmamap for each transaction.
3956  * Depending on the architecture, dmamaps can be costly. The
3957  * alternative is to statically map the buffers in much the same
3958  * way we handle our scatter gather lists.  The driver implements
3959  * the later.
3960  */
3961 const AHD_SENSE_BUFSIZE         256
3962
3963 /* Target mode command processing constants */
3964 const CMD_GROUP_CODE_SHIFT      0x05
3965
3966 const STATUS_BUSY               0x08
3967 const STATUS_QUEUE_FULL         0x28
3968 const STATUS_PKT_SENSE          0xFF
3969 const TARGET_DATA_IN            1
3970
3971 const SCB_TRANSFER_SIZE_FULL_LUN        56
3972 const SCB_TRANSFER_SIZE_1BYTE_LUN       48
3973 /* PKT_OVERRUN_BUFSIZE must be a multiple of 256 less than 64K */
3974 const PKT_OVERRUN_BUFSIZE       512
3975
3976 /*
3977  * Timer parameters.
3978  */
3979 const AHD_TIMER_US_PER_TICK     25
3980 const AHD_TIMER_MAX_TICKS       0xFFFF
3981 const AHD_TIMER_MAX_US          (AHD_TIMER_MAX_TICKS * AHD_TIMER_US_PER_TICK)
3982
3983 /*
3984  * Downloaded (kernel inserted) constants
3985  */
3986 const SG_PREFETCH_CNT download
3987 const SG_PREFETCH_CNT_LIMIT download
3988 const SG_PREFETCH_ALIGN_MASK download
3989 const SG_PREFETCH_ADDR_MASK download
3990 const SG_SIZEOF download
3991 const PKT_OVERRUN_BUFOFFSET download
3992 const SCB_TRANSFER_SIZE download
3993 const CACHELINE_MASK download
3994
3995 /*
3996  * BIOS SCB offsets
3997  */
3998 const NVRAM_SCB_OFFSET  0x2C