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