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