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