xref: /openbmc/linux/drivers/scsi/aic7xxx/aic79xx.reg (revision 1da177e4)
11da177e4SLinus Torvalds/*
21da177e4SLinus Torvalds * Aic79xx register and scratch ram definitions.
31da177e4SLinus Torvalds *
41da177e4SLinus Torvalds * Copyright (c) 1994-2001 Justin T. Gibbs.
51da177e4SLinus Torvalds * Copyright (c) 2000-2002 Adaptec Inc.
61da177e4SLinus Torvalds * All rights reserved.
71da177e4SLinus Torvalds *
81da177e4SLinus Torvalds * Redistribution and use in source and binary forms, with or without
91da177e4SLinus Torvalds * modification, are permitted provided that the following conditions
101da177e4SLinus Torvalds * are met:
111da177e4SLinus Torvalds * 1. Redistributions of source code must retain the above copyright
121da177e4SLinus Torvalds *    notice, this list of conditions, and the following disclaimer,
131da177e4SLinus Torvalds *    without modification.
141da177e4SLinus Torvalds * 2. Redistributions in binary form must reproduce at minimum a disclaimer
151da177e4SLinus Torvalds *    substantially similar to the "NO WARRANTY" disclaimer below
161da177e4SLinus Torvalds *    ("Disclaimer") and any redistribution must be conditioned upon
171da177e4SLinus Torvalds *    including a substantially similar Disclaimer requirement for further
181da177e4SLinus Torvalds *    binary redistribution.
191da177e4SLinus Torvalds * 3. Neither the names of the above-listed copyright holders nor the names
201da177e4SLinus Torvalds *    of any contributors may be used to endorse or promote products derived
211da177e4SLinus Torvalds *    from this software without specific prior written permission.
221da177e4SLinus Torvalds *
231da177e4SLinus Torvalds * Alternatively, this software may be distributed under the terms of the
241da177e4SLinus Torvalds * GNU General Public License ("GPL") version 2 as published by the Free
251da177e4SLinus Torvalds * Software Foundation.
261da177e4SLinus Torvalds *
271da177e4SLinus Torvalds * NO WARRANTY
281da177e4SLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
291da177e4SLinus Torvalds * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
301da177e4SLinus Torvalds * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
311da177e4SLinus Torvalds * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
321da177e4SLinus Torvalds * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
331da177e4SLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
341da177e4SLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
351da177e4SLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
361da177e4SLinus Torvalds * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
371da177e4SLinus Torvalds * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
381da177e4SLinus Torvalds * POSSIBILITY OF SUCH DAMAGES.
391da177e4SLinus Torvalds *
401da177e4SLinus Torvalds * $FreeBSD$
411da177e4SLinus Torvalds */
421da177e4SLinus TorvaldsVERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $"
431da177e4SLinus Torvalds
441da177e4SLinus Torvalds/*
451da177e4SLinus Torvalds * This file is processed by the aic7xxx_asm utility for use in assembling
461da177e4SLinus Torvalds * firmware for the aic79xx family of SCSI host adapters as well as to generate
471da177e4SLinus Torvalds * a C header file for use in the kernel portion of the Aic79xx driver.
481da177e4SLinus Torvalds */
491da177e4SLinus Torvalds
501da177e4SLinus Torvalds/* Register window Modes */
511da177e4SLinus Torvalds#define M_DFF0		0
521da177e4SLinus Torvalds#define M_DFF1		1
531da177e4SLinus Torvalds#define M_CCHAN		2
541da177e4SLinus Torvalds#define M_SCSI		3
551da177e4SLinus Torvalds#define M_CFG		4
561da177e4SLinus Torvalds#define M_DST_SHIFT	4
571da177e4SLinus Torvalds
581da177e4SLinus Torvalds#define MK_MODE(src, dst) ((src) | ((dst) << M_DST_SHIFT))
591da177e4SLinus Torvalds#define SET_MODE(src, dst)						\
601da177e4SLinus Torvalds	SET_SRC_MODE	src;						\
611da177e4SLinus Torvalds	SET_DST_MODE	dst;						\
621da177e4SLinus Torvalds	if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {			\
631da177e4SLinus Torvalds		mvi	MK_MODE(src, dst) call set_mode_work_around;	\
641da177e4SLinus Torvalds	} else {							\
651da177e4SLinus Torvalds		mvi	MODE_PTR, MK_MODE(src, dst);			\
661da177e4SLinus Torvalds	}
671da177e4SLinus Torvalds
681da177e4SLinus Torvalds#define TOGGLE_DFF_MODE							\
691da177e4SLinus Torvalds	if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {			\
701da177e4SLinus Torvalds		call	toggle_dff_mode_work_around;			\
711da177e4SLinus Torvalds	} else {							\
721da177e4SLinus Torvalds		xor	MODE_PTR, MK_MODE(M_DFF1, M_DFF1);		\
731da177e4SLinus Torvalds	}
741da177e4SLinus Torvalds
751da177e4SLinus Torvalds#define RESTORE_MODE(mode)						\
761da177e4SLinus Torvalds	if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {			\
771da177e4SLinus Torvalds		mov	mode call set_mode_work_around;			\
781da177e4SLinus Torvalds	} else {							\
791da177e4SLinus Torvalds		mov	MODE_PTR, mode;					\
801da177e4SLinus Torvalds	}
811da177e4SLinus Torvalds
821da177e4SLinus Torvalds#define SET_SEQINTCODE(code)						\
831da177e4SLinus Torvalds	if ((ahd->bugs & AHD_INTCOLLISION_BUG) != 0) {			\
841da177e4SLinus Torvalds		mvi	code call set_seqint_work_around;		\
851da177e4SLinus Torvalds	} else {							\
861da177e4SLinus Torvalds		mvi	SEQINTCODE, code;				\
871da177e4SLinus Torvalds	}
881da177e4SLinus Torvalds
891da177e4SLinus Torvalds/*
901da177e4SLinus Torvalds * Mode Pointer
911da177e4SLinus Torvalds * Controls which of the 5, 512byte, address spaces should be used
921da177e4SLinus Torvalds * as the source and destination of any register accesses in our
931da177e4SLinus Torvalds * register window.
941da177e4SLinus Torvalds */
951da177e4SLinus Torvaldsregister MODE_PTR {
961da177e4SLinus Torvalds	address			0x000
971da177e4SLinus Torvalds	access_mode	RW
981da177e4SLinus Torvalds	field	DST_MODE	0x70
991da177e4SLinus Torvalds	field	SRC_MODE	0x07
1001da177e4SLinus Torvalds	mode_pointer
1011da177e4SLinus Torvalds}
1021da177e4SLinus Torvalds
1031da177e4SLinus Torvaldsconst SRC_MODE_SHIFT	0
1041da177e4SLinus Torvaldsconst DST_MODE_SHIFT	4
1051da177e4SLinus Torvalds
1061da177e4SLinus Torvalds/*
1071da177e4SLinus Torvalds * Host Interrupt Status
1081da177e4SLinus Torvalds */
1091da177e4SLinus Torvaldsregister INTSTAT {
1101da177e4SLinus Torvalds	address			0x001
1111da177e4SLinus Torvalds	access_mode	RW
1121da177e4SLinus Torvalds	field	HWERRINT	0x80
1131da177e4SLinus Torvalds	field	BRKADRINT	0x40
1141da177e4SLinus Torvalds	field	SWTMINT		0x20
1151da177e4SLinus Torvalds	field	PCIINT		0x10
1161da177e4SLinus Torvalds	field	SCSIINT		0x08
1171da177e4SLinus Torvalds	field	SEQINT		0x04
1181da177e4SLinus Torvalds	field	CMDCMPLT	0x02
1191da177e4SLinus Torvalds	field	SPLTINT		0x01
1201da177e4SLinus Torvalds	mask	INT_PEND 0xFF
1211da177e4SLinus Torvalds}
1221da177e4SLinus Torvalds
1231da177e4SLinus Torvalds/*
1241da177e4SLinus Torvalds * Sequencer Interrupt Code
1251da177e4SLinus Torvalds */
1261da177e4SLinus Torvaldsregister SEQINTCODE {
1271da177e4SLinus Torvalds	address			0x002
1281da177e4SLinus Torvalds	access_mode	RW
1291da177e4SLinus Torvalds	field {
1301da177e4SLinus Torvalds		NO_SEQINT,			/* No seqint pending. */
1311da177e4SLinus Torvalds		BAD_PHASE,			/* unknown scsi bus phase */
1321da177e4SLinus Torvalds		SEND_REJECT,			/* sending a message reject */
1331da177e4SLinus Torvalds		PROTO_VIOLATION, 		/* Protocol Violation */
1341da177e4SLinus Torvalds		NO_MATCH,			/* no cmd match for reconnect */
1351da177e4SLinus Torvalds		IGN_WIDE_RES,			/* Complex IGN Wide Res Msg */
1361da177e4SLinus Torvalds		PDATA_REINIT,			/*
1371da177e4SLinus Torvalds						 * Returned to data phase
1381da177e4SLinus Torvalds						 * that requires data
1391da177e4SLinus Torvalds						 * transfer pointers to be
1401da177e4SLinus Torvalds						 * recalculated from the
1411da177e4SLinus Torvalds						 * transfer residual.
1421da177e4SLinus Torvalds						 */
1431da177e4SLinus Torvalds		HOST_MSG_LOOP,			/*
1441da177e4SLinus Torvalds						 * The bus is ready for the
1451da177e4SLinus Torvalds						 * host to perform another
1461da177e4SLinus Torvalds						 * message transaction.  This
1471da177e4SLinus Torvalds						 * mechanism is used for things
1481da177e4SLinus Torvalds						 * like sync/wide negotiation
1491da177e4SLinus Torvalds						 * that require a kernel based
1501da177e4SLinus Torvalds						 * message state engine.
1511da177e4SLinus Torvalds						 */
1521da177e4SLinus Torvalds		BAD_STATUS,			/* Bad status from target */
1531da177e4SLinus Torvalds		DATA_OVERRUN,			/*
1541da177e4SLinus Torvalds						 * Target attempted to write
1551da177e4SLinus Torvalds						 * beyond the bounds of its
1561da177e4SLinus Torvalds						 * command.
1571da177e4SLinus Torvalds						 */
1581da177e4SLinus Torvalds		MKMSG_FAILED,			/*
1591da177e4SLinus Torvalds						 * Target completed command
1601da177e4SLinus Torvalds						 * without honoring our ATN
1611da177e4SLinus Torvalds						 * request to issue a message.
1621da177e4SLinus Torvalds						 */
1631da177e4SLinus Torvalds		MISSED_BUSFREE,			/*
1641da177e4SLinus Torvalds						 * The sequencer never saw
1651da177e4SLinus Torvalds						 * the bus go free after
1661da177e4SLinus Torvalds						 * either a command complete
1671da177e4SLinus Torvalds						 * or disconnect message.
1681da177e4SLinus Torvalds						 */
1691da177e4SLinus Torvalds		DUMP_CARD_STATE,
1701da177e4SLinus Torvalds		ILLEGAL_PHASE,
1711da177e4SLinus Torvalds		INVALID_SEQINT,
1721da177e4SLinus Torvalds		CFG4ISTAT_INTR,
1731da177e4SLinus Torvalds		STATUS_OVERRUN,
1741da177e4SLinus Torvalds		CFG4OVERRUN,
1751da177e4SLinus Torvalds		ENTERING_NONPACK,
1761da177e4SLinus Torvalds		TASKMGMT_FUNC_COMPLETE,		/*
1771da177e4SLinus Torvalds						 * Task management function
1781da177e4SLinus Torvalds						 * request completed with
1791da177e4SLinus Torvalds						 * an expected busfree.
1801da177e4SLinus Torvalds						 */
1811da177e4SLinus Torvalds		TASKMGMT_CMD_CMPLT_OKAY,	/*
1821da177e4SLinus Torvalds						 * A command with a non-zero
1831da177e4SLinus Torvalds						 * task management function
1841da177e4SLinus Torvalds						 * has completed via the normal
1851da177e4SLinus Torvalds						 * command completion method
1861da177e4SLinus Torvalds						 * for commands with a zero
1871da177e4SLinus Torvalds						 * task management function.
1881da177e4SLinus Torvalds						 * This happens when an attempt
1891da177e4SLinus Torvalds						 * to abort a command loses
1901da177e4SLinus Torvalds						 * the race for the command to
1911da177e4SLinus Torvalds						 * complete normally.
1921da177e4SLinus Torvalds						 */
1931da177e4SLinus Torvalds		TRACEPOINT0,
1941da177e4SLinus Torvalds		TRACEPOINT1,
1951da177e4SLinus Torvalds		TRACEPOINT2,
1961da177e4SLinus Torvalds		TRACEPOINT3,
1971da177e4SLinus Torvalds		SAW_HWERR,
1981da177e4SLinus Torvalds		BAD_SCB_STATUS
1991da177e4SLinus Torvalds	}
2001da177e4SLinus Torvalds}
2011da177e4SLinus Torvalds
2021da177e4SLinus Torvalds/*
2031da177e4SLinus Torvalds * Clear Host Interrupt
2041da177e4SLinus Torvalds */
2051da177e4SLinus Torvaldsregister CLRINT {
2061da177e4SLinus Torvalds	address			0x003
2071da177e4SLinus Torvalds	access_mode	WO
2081da177e4SLinus Torvalds	field	CLRHWERRINT	0x80 /* Rev B or greater */
2091da177e4SLinus Torvalds	field	CLRBRKADRINT	0x40
2101da177e4SLinus Torvalds	field	CLRSWTMINT	0x20
2111da177e4SLinus Torvalds	field	CLRPCIINT	0x10
2121da177e4SLinus Torvalds	field	CLRSCSIINT	0x08
2131da177e4SLinus Torvalds	field	CLRSEQINT	0x04
2141da177e4SLinus Torvalds	field	CLRCMDINT	0x02
2151da177e4SLinus Torvalds	field	CLRSPLTINT	0x01
2161da177e4SLinus Torvalds}
2171da177e4SLinus Torvalds
2181da177e4SLinus Torvalds/*
2191da177e4SLinus Torvalds * Error Register
2201da177e4SLinus Torvalds */
2211da177e4SLinus Torvaldsregister ERROR {
2221da177e4SLinus Torvalds	address			0x004
2231da177e4SLinus Torvalds	access_mode	RO
2241da177e4SLinus Torvalds	field	CIOPARERR	0x80
2251da177e4SLinus Torvalds	field	CIOACCESFAIL	0x40 /* Rev B or greater */
2261da177e4SLinus Torvalds	field	MPARERR		0x20
2271da177e4SLinus Torvalds	field	DPARERR		0x10
2281da177e4SLinus Torvalds	field	SQPARERR	0x08
2291da177e4SLinus Torvalds	field	ILLOPCODE	0x04
2301da177e4SLinus Torvalds	field	DSCTMOUT	0x02
2311da177e4SLinus Torvalds}
2321da177e4SLinus Torvalds
2331da177e4SLinus Torvalds/*
2341da177e4SLinus Torvalds * Clear Error
2351da177e4SLinus Torvalds */
2361da177e4SLinus Torvaldsregister CLRERR {
2371da177e4SLinus Torvalds	address			0x004
2381da177e4SLinus Torvalds	access_mode 	WO
2391da177e4SLinus Torvalds	field	CLRCIOPARERR	0x80
2401da177e4SLinus Torvalds	field	CLRCIOACCESFAIL	0x40 /* Rev B or greater */
2411da177e4SLinus Torvalds	field	CLRMPARERR	0x20
2421da177e4SLinus Torvalds	field	CLRDPARERR	0x10
2431da177e4SLinus Torvalds	field	CLRSQPARERR	0x08
2441da177e4SLinus Torvalds	field	CLRILLOPCODE	0x04
2451da177e4SLinus Torvalds	field	CLRDSCTMOUT	0x02
2461da177e4SLinus Torvalds}
2471da177e4SLinus Torvalds
2481da177e4SLinus Torvalds/*
2491da177e4SLinus Torvalds * Host Control Register
2501da177e4SLinus Torvalds * Overall host control of the device.
2511da177e4SLinus Torvalds */
2521da177e4SLinus Torvaldsregister HCNTRL {
2531da177e4SLinus Torvalds	address			0x005
2541da177e4SLinus Torvalds	access_mode	RW
2551da177e4SLinus Torvalds	field	SEQ_RESET	0x80 /* Rev B or greater */
2561da177e4SLinus Torvalds	field	POWRDN		0x40
2571da177e4SLinus Torvalds	field	SWINT		0x10
2581da177e4SLinus Torvalds	field	SWTIMER_START_B	0x08 /* Rev B or greater */
2591da177e4SLinus Torvalds	field	PAUSE		0x04
2601da177e4SLinus Torvalds	field	INTEN		0x02
2611da177e4SLinus Torvalds	field	CHIPRST		0x01
2621da177e4SLinus Torvalds	field	CHIPRSTACK	0x01
2631da177e4SLinus Torvalds}
2641da177e4SLinus Torvalds
2651da177e4SLinus Torvalds/*
2661da177e4SLinus Torvalds * Host New SCB Queue Offset
2671da177e4SLinus Torvalds */
2681da177e4SLinus Torvaldsregister HNSCB_QOFF {
2691da177e4SLinus Torvalds	address			0x006
2701da177e4SLinus Torvalds	access_mode	RW
2711da177e4SLinus Torvalds	size		2
2721da177e4SLinus Torvalds}
2731da177e4SLinus Torvalds
2741da177e4SLinus Torvalds/*
2751da177e4SLinus Torvalds * Host Empty SCB Queue Offset
2761da177e4SLinus Torvalds */
2771da177e4SLinus Torvaldsregister HESCB_QOFF {
2781da177e4SLinus Torvalds	address			0x008
2791da177e4SLinus Torvalds	access_mode	RW
2801da177e4SLinus Torvalds}
2811da177e4SLinus Torvalds
2821da177e4SLinus Torvalds/*
2831da177e4SLinus Torvalds * Host Mailbox
2841da177e4SLinus Torvalds */
2851da177e4SLinus Torvaldsregister HS_MAILBOX {
2861da177e4SLinus Torvalds	address			0x00B
2871da177e4SLinus Torvalds	access_mode	RW
2881da177e4SLinus Torvalds	mask	HOST_TQINPOS	0x80	/* Boundary at either 0 or 128 */
2891da177e4SLinus Torvalds	mask	ENINT_COALESCE	0x40	/* Perform interrupt coalescing */
2901da177e4SLinus Torvalds}
2911da177e4SLinus Torvalds
2921da177e4SLinus Torvalds/*
2931da177e4SLinus Torvalds * Sequencer Interupt Status
2941da177e4SLinus Torvalds */
2951da177e4SLinus Torvaldsregister SEQINTSTAT {
2961da177e4SLinus Torvalds	address			0x00C
2971da177e4SLinus Torvalds	access_mode	RO
2981da177e4SLinus Torvalds	field	SEQ_SWTMRTO	0x10
2991da177e4SLinus Torvalds	field	SEQ_SEQINT	0x08
3001da177e4SLinus Torvalds	field	SEQ_SCSIINT	0x04
3011da177e4SLinus Torvalds	field	SEQ_PCIINT	0x02
3021da177e4SLinus Torvalds	field	SEQ_SPLTINT	0x01
3031da177e4SLinus Torvalds}
3041da177e4SLinus Torvalds
3051da177e4SLinus Torvalds/*
3061da177e4SLinus Torvalds * Clear SEQ Interrupt
3071da177e4SLinus Torvalds */
3081da177e4SLinus Torvaldsregister CLRSEQINTSTAT {
3091da177e4SLinus Torvalds	address			0x00C
3101da177e4SLinus Torvalds	access_mode	WO
3111da177e4SLinus Torvalds	field	CLRSEQ_SWTMRTO	0x10
3121da177e4SLinus Torvalds	field	CLRSEQ_SEQINT	0x08
3131da177e4SLinus Torvalds	field	CLRSEQ_SCSIINT	0x04
3141da177e4SLinus Torvalds	field	CLRSEQ_PCIINT	0x02
3151da177e4SLinus Torvalds	field	CLRSEQ_SPLTINT	0x01
3161da177e4SLinus Torvalds}
3171da177e4SLinus Torvalds
3181da177e4SLinus Torvalds/*
3191da177e4SLinus Torvalds * Software Timer
3201da177e4SLinus Torvalds */
3211da177e4SLinus Torvaldsregister SWTIMER {
3221da177e4SLinus Torvalds	address			0x00E
3231da177e4SLinus Torvalds	access_mode	RW
3241da177e4SLinus Torvalds	size		2
3251da177e4SLinus Torvalds}
3261da177e4SLinus Torvalds
3271da177e4SLinus Torvalds/*
3281da177e4SLinus Torvalds * SEQ New SCB Queue Offset
3291da177e4SLinus Torvalds */
3301da177e4SLinus Torvaldsregister SNSCB_QOFF {
3311da177e4SLinus Torvalds	address			0x010
3321da177e4SLinus Torvalds	access_mode	RW
3331da177e4SLinus Torvalds	size		2
3341da177e4SLinus Torvalds	modes		M_CCHAN
3351da177e4SLinus Torvalds}
3361da177e4SLinus Torvalds
3371da177e4SLinus Torvalds/*
3381da177e4SLinus Torvalds * SEQ Empty SCB Queue Offset
3391da177e4SLinus Torvalds */
3401da177e4SLinus Torvaldsregister SESCB_QOFF {
3411da177e4SLinus Torvalds	address			0x012
3421da177e4SLinus Torvalds	access_mode	RW
3431da177e4SLinus Torvalds	modes		M_CCHAN
3441da177e4SLinus Torvalds}
3451da177e4SLinus Torvalds
3461da177e4SLinus Torvalds/*
3471da177e4SLinus Torvalds * SEQ Done SCB Queue Offset
3481da177e4SLinus Torvalds */
3491da177e4SLinus Torvaldsregister SDSCB_QOFF {
3501da177e4SLinus Torvalds	address			0x014
3511da177e4SLinus Torvalds	access_mode	RW
3521da177e4SLinus Torvalds	modes		M_CCHAN
3531da177e4SLinus Torvalds	size		2
3541da177e4SLinus Torvalds}
3551da177e4SLinus Torvalds
3561da177e4SLinus Torvalds/*
3571da177e4SLinus Torvalds * Queue Offset Control & Status
3581da177e4SLinus Torvalds */
3591da177e4SLinus Torvaldsregister QOFF_CTLSTA {
3601da177e4SLinus Torvalds	address			0x016
3611da177e4SLinus Torvalds	access_mode	RW
3621da177e4SLinus Torvalds	modes		M_CCHAN
3631da177e4SLinus Torvalds	field	EMPTY_SCB_AVAIL	0x80
3641da177e4SLinus Torvalds	field	NEW_SCB_AVAIL	0x40
3651da177e4SLinus Torvalds	field	SDSCB_ROLLOVR	0x20
3661da177e4SLinus Torvalds	field	HS_MAILBOX_ACT	0x10
3671da177e4SLinus Torvalds	field	SCB_QSIZE	0x0F {
3681da177e4SLinus Torvalds		SCB_QSIZE_4,
3691da177e4SLinus Torvalds		SCB_QSIZE_8,
3701da177e4SLinus Torvalds		SCB_QSIZE_16,
3711da177e4SLinus Torvalds		SCB_QSIZE_32,
3721da177e4SLinus Torvalds		SCB_QSIZE_64,
3731da177e4SLinus Torvalds		SCB_QSIZE_128,
3741da177e4SLinus Torvalds		SCB_QSIZE_256,
3751da177e4SLinus Torvalds		SCB_QSIZE_512,
3761da177e4SLinus Torvalds		SCB_QSIZE_1024,
3771da177e4SLinus Torvalds		SCB_QSIZE_2048,
3781da177e4SLinus Torvalds		SCB_QSIZE_4096,
3791da177e4SLinus Torvalds		SCB_QSIZE_8192,
3801da177e4SLinus Torvalds		SCB_QSIZE_16384
3811da177e4SLinus Torvalds	}
3821da177e4SLinus Torvalds}
3831da177e4SLinus Torvalds
3841da177e4SLinus Torvalds/*
3851da177e4SLinus Torvalds * Interrupt Control
3861da177e4SLinus Torvalds */
3871da177e4SLinus Torvaldsregister INTCTL {
3881da177e4SLinus Torvalds	address			0x018
3891da177e4SLinus Torvalds	access_mode	RW
3901da177e4SLinus Torvalds	field	SWTMINTMASK	0x80
3911da177e4SLinus Torvalds	field	SWTMINTEN	0x40
3921da177e4SLinus Torvalds	field	SWTIMER_START	0x20
3931da177e4SLinus Torvalds	field	AUTOCLRCMDINT	0x10
3941da177e4SLinus Torvalds	field	PCIINTEN	0x08
3951da177e4SLinus Torvalds	field	SCSIINTEN	0x04
3961da177e4SLinus Torvalds	field	SEQINTEN	0x02
3971da177e4SLinus Torvalds	field	SPLTINTEN	0x01
3981da177e4SLinus Torvalds}
3991da177e4SLinus Torvalds
4001da177e4SLinus Torvalds/*
4011da177e4SLinus Torvalds * Data FIFO Control
4021da177e4SLinus Torvalds */
4031da177e4SLinus Torvaldsregister DFCNTRL {
4041da177e4SLinus Torvalds	address			0x019
4051da177e4SLinus Torvalds	access_mode	RW
4061da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
4071da177e4SLinus Torvalds	field	PRELOADEN	0x80
4081da177e4SLinus Torvalds	field	SCSIENWRDIS	0x40	/* Rev B only. */
4091da177e4SLinus Torvalds	field	SCSIEN		0x20
4101da177e4SLinus Torvalds	field	SCSIENACK	0x20
4111da177e4SLinus Torvalds	field	HDMAEN		0x08
4121da177e4SLinus Torvalds	field	HDMAENACK	0x08
4131da177e4SLinus Torvalds	field	DIRECTION	0x04
4141da177e4SLinus Torvalds	field	DIRECTIONACK	0x04
4151da177e4SLinus Torvalds	field	FIFOFLUSH	0x02
4161da177e4SLinus Torvalds	field	FIFOFLUSHACK	0x02
4171da177e4SLinus Torvalds	field	DIRECTIONEN	0x01
4181da177e4SLinus Torvalds}
4191da177e4SLinus Torvalds
4201da177e4SLinus Torvalds/*
4211da177e4SLinus Torvalds * Device Space Command 0
4221da177e4SLinus Torvalds */
4231da177e4SLinus Torvaldsregister DSCOMMAND0 {
4241da177e4SLinus Torvalds	address			0x019
4251da177e4SLinus Torvalds	access_mode	RW
4261da177e4SLinus Torvalds	modes		M_CFG
4271da177e4SLinus Torvalds	field	CACHETHEN	0x80	/* Cache Threshold enable */
4281da177e4SLinus Torvalds	field	DPARCKEN	0x40	/* Data Parity Check Enable */
4291da177e4SLinus Torvalds	field	MPARCKEN	0x20	/* Memory Parity Check Enable */
4301da177e4SLinus Torvalds	field	EXTREQLCK	0x10	/* External Request Lock */
4311da177e4SLinus Torvalds	field	DISABLE_TWATE	0x02	/* Rev B or greater */
4321da177e4SLinus Torvalds	field	CIOPARCKEN	0x01	/* Internal bus parity error enable */
4331da177e4SLinus Torvalds}
4341da177e4SLinus Torvalds
4351da177e4SLinus Torvalds/*
4361da177e4SLinus Torvalds * Data FIFO Status
4371da177e4SLinus Torvalds */
4381da177e4SLinus Torvaldsregister DFSTATUS {
4391da177e4SLinus Torvalds	address			0x01A
4401da177e4SLinus Torvalds	access_mode	RO
4411da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
4421da177e4SLinus Torvalds	field	PRELOAD_AVAIL		0x80
4431da177e4SLinus Torvalds	field	PKT_PRELOAD_AVAIL	0x40
4441da177e4SLinus Torvalds	field	MREQPEND		0x10
4451da177e4SLinus Torvalds	field	HDONE			0x08
4461da177e4SLinus Torvalds	field	DFTHRESH		0x04
4471da177e4SLinus Torvalds	field	FIFOFULL		0x02
4481da177e4SLinus Torvalds	field	FIFOEMP			0x01
4491da177e4SLinus Torvalds}
4501da177e4SLinus Torvalds
4511da177e4SLinus Torvalds/*
4521da177e4SLinus Torvalds * S/G Cache Pointer
4531da177e4SLinus Torvalds */
4541da177e4SLinus Torvaldsregister SG_CACHE_PRE {
4551da177e4SLinus Torvalds	address			0x01B
4561da177e4SLinus Torvalds	access_mode	WO
4571da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
4581da177e4SLinus Torvalds	field	SG_ADDR_MASK	0xf8
4591da177e4SLinus Torvalds	field	ODD_SEG		0x04
4601da177e4SLinus Torvalds	field	LAST_SEG	0x02
4611da177e4SLinus Torvalds}
4621da177e4SLinus Torvalds
4631da177e4SLinus Torvaldsregister SG_CACHE_SHADOW {
4641da177e4SLinus Torvalds	address			0x01B
4651da177e4SLinus Torvalds	access_mode	RO
4661da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
4671da177e4SLinus Torvalds	field	SG_ADDR_MASK	0xf8
4681da177e4SLinus Torvalds	field	ODD_SEG		0x04
4691da177e4SLinus Torvalds	field	LAST_SEG	0x02
4701da177e4SLinus Torvalds	field	LAST_SEG_DONE	0x01
4711da177e4SLinus Torvalds}
4721da177e4SLinus Torvalds
4731da177e4SLinus Torvalds/*
4741da177e4SLinus Torvalds * Arbiter Control
4751da177e4SLinus Torvalds */
4761da177e4SLinus Torvaldsregister ARBCTL {
4771da177e4SLinus Torvalds	address			0x01B
4781da177e4SLinus Torvalds	access_mode	RW
4791da177e4SLinus Torvalds	modes		M_CFG
4801da177e4SLinus Torvalds	field	RESET_HARB	0x80
4811da177e4SLinus Torvalds	field	RETRY_SWEN	0x08
4821da177e4SLinus Torvalds	field	USE_TIME	0x07
4831da177e4SLinus Torvalds}
4841da177e4SLinus Torvalds
4851da177e4SLinus Torvalds/*
4861da177e4SLinus Torvalds * Data Channel Host Address
4871da177e4SLinus Torvalds */
4881da177e4SLinus Torvaldsregister HADDR {
4891da177e4SLinus Torvalds	address			0x070
4901da177e4SLinus Torvalds	access_mode	RW
4911da177e4SLinus Torvalds	size		8
4921da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
4931da177e4SLinus Torvalds}
4941da177e4SLinus Torvalds
4951da177e4SLinus Torvalds/*
4961da177e4SLinus Torvalds * Host Overlay DMA Address
4971da177e4SLinus Torvalds */
4981da177e4SLinus Torvaldsregister HODMAADR {
4991da177e4SLinus Torvalds	address			0x070
5001da177e4SLinus Torvalds	access_mode	RW
5011da177e4SLinus Torvalds	size		8
5021da177e4SLinus Torvalds	modes		M_SCSI
5031da177e4SLinus Torvalds}
5041da177e4SLinus Torvalds
5051da177e4SLinus Torvalds/*
5061da177e4SLinus Torvalds * PCI PLL Delay.
5071da177e4SLinus Torvalds */
5081da177e4SLinus Torvaldsregister PLLDELAY {
5091da177e4SLinus Torvalds	address			0x070
5101da177e4SLinus Torvalds	access_mode	RW
5111da177e4SLinus Torvalds	size		1
5121da177e4SLinus Torvalds	modes		M_CFG
5131da177e4SLinus Torvalds	field	SPLIT_DROP_REQ	0x80
5141da177e4SLinus Torvalds}
5151da177e4SLinus Torvalds
5161da177e4SLinus Torvalds/*
5171da177e4SLinus Torvalds * Data Channel Host Count
5181da177e4SLinus Torvalds */
5191da177e4SLinus Torvaldsregister HCNT {
5201da177e4SLinus Torvalds	address			0x078
5211da177e4SLinus Torvalds	access_mode	RW
5221da177e4SLinus Torvalds	size		3
5231da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
5241da177e4SLinus Torvalds}
5251da177e4SLinus Torvalds
5261da177e4SLinus Torvalds/*
5271da177e4SLinus Torvalds * Host Overlay DMA Count
5281da177e4SLinus Torvalds */
5291da177e4SLinus Torvaldsregister HODMACNT {
5301da177e4SLinus Torvalds	address			0x078
5311da177e4SLinus Torvalds	access_mode	RW
5321da177e4SLinus Torvalds	size		2
5331da177e4SLinus Torvalds	modes		M_SCSI
5341da177e4SLinus Torvalds}
5351da177e4SLinus Torvalds
5361da177e4SLinus Torvalds/*
5371da177e4SLinus Torvalds * Host Overlay DMA Enable
5381da177e4SLinus Torvalds */
5391da177e4SLinus Torvaldsregister HODMAEN {
5401da177e4SLinus Torvalds	address			0x07A
5411da177e4SLinus Torvalds	access_mode	RW
5421da177e4SLinus Torvalds	modes		M_SCSI
5431da177e4SLinus Torvalds}
5441da177e4SLinus Torvalds
5451da177e4SLinus Torvalds/*
5461da177e4SLinus Torvalds * Scatter/Gather Host Address
5471da177e4SLinus Torvalds */
5481da177e4SLinus Torvaldsregister SGHADDR {
5491da177e4SLinus Torvalds	address			0x07C
5501da177e4SLinus Torvalds	access_mode	RW
5511da177e4SLinus Torvalds	size		8
5521da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
5531da177e4SLinus Torvalds}
5541da177e4SLinus Torvalds
5551da177e4SLinus Torvalds/*
5561da177e4SLinus Torvalds * SCB Host Address
5571da177e4SLinus Torvalds */
5581da177e4SLinus Torvaldsregister SCBHADDR {
5591da177e4SLinus Torvalds	address			0x07C
5601da177e4SLinus Torvalds	access_mode	RW
5611da177e4SLinus Torvalds	size		8
5621da177e4SLinus Torvalds	modes		M_CCHAN
5631da177e4SLinus Torvalds}
5641da177e4SLinus Torvalds
5651da177e4SLinus Torvalds/*
5661da177e4SLinus Torvalds * Scatter/Gather Host Count
5671da177e4SLinus Torvalds */
5681da177e4SLinus Torvaldsregister SGHCNT {
5691da177e4SLinus Torvalds	address			0x084
5701da177e4SLinus Torvalds	access_mode	RW
5711da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
5721da177e4SLinus Torvalds}
5731da177e4SLinus Torvalds
5741da177e4SLinus Torvalds/*
5751da177e4SLinus Torvalds * SCB Host Count
5761da177e4SLinus Torvalds */
5771da177e4SLinus Torvaldsregister SCBHCNT {
5781da177e4SLinus Torvalds	address			0x084
5791da177e4SLinus Torvalds	access_mode	RW
5801da177e4SLinus Torvalds	modes		M_CCHAN
5811da177e4SLinus Torvalds}
5821da177e4SLinus Torvalds
5831da177e4SLinus Torvalds/*
5841da177e4SLinus Torvalds * Data FIFO Threshold
5851da177e4SLinus Torvalds */
5861da177e4SLinus Torvaldsregister DFF_THRSH {
5871da177e4SLinus Torvalds	address			0x088
5881da177e4SLinus Torvalds	access_mode	RW
5891da177e4SLinus Torvalds	modes		M_CFG
5901da177e4SLinus Torvalds	field	WR_DFTHRSH	0x70 {
5911da177e4SLinus Torvalds		WR_DFTHRSH_MIN,
5921da177e4SLinus Torvalds		WR_DFTHRSH_25,
5931da177e4SLinus Torvalds		WR_DFTHRSH_50,
5941da177e4SLinus Torvalds		WR_DFTHRSH_63,
5951da177e4SLinus Torvalds		WR_DFTHRSH_75,
5961da177e4SLinus Torvalds		WR_DFTHRSH_85,
5971da177e4SLinus Torvalds		WR_DFTHRSH_90,
5981da177e4SLinus Torvalds		WR_DFTHRSH_MAX
5991da177e4SLinus Torvalds	}
6001da177e4SLinus Torvalds	field	RD_DFTHRSH	0x07 {
6011da177e4SLinus Torvalds		RD_DFTHRSH_MIN,
6021da177e4SLinus Torvalds		RD_DFTHRSH_25,
6031da177e4SLinus Torvalds		RD_DFTHRSH_50,
6041da177e4SLinus Torvalds		RD_DFTHRSH_63,
6051da177e4SLinus Torvalds		RD_DFTHRSH_75,
6061da177e4SLinus Torvalds		RD_DFTHRSH_85,
6071da177e4SLinus Torvalds		RD_DFTHRSH_90,
6081da177e4SLinus Torvalds		RD_DFTHRSH_MAX
6091da177e4SLinus Torvalds	}
6101da177e4SLinus Torvalds}
6111da177e4SLinus Torvalds
6121da177e4SLinus Torvalds/*
6131da177e4SLinus Torvalds * ROM Address
6141da177e4SLinus Torvalds */
6151da177e4SLinus Torvaldsregister ROMADDR {
6161da177e4SLinus Torvalds	address			0x08A
6171da177e4SLinus Torvalds	access_mode	RW
6181da177e4SLinus Torvalds	size		3
6191da177e4SLinus Torvalds}
6201da177e4SLinus Torvalds
6211da177e4SLinus Torvalds/*
6221da177e4SLinus Torvalds * ROM Control
6231da177e4SLinus Torvalds */
6241da177e4SLinus Torvaldsregister ROMCNTRL {
6251da177e4SLinus Torvalds	address			0x08D
6261da177e4SLinus Torvalds	access_mode	RW
6271da177e4SLinus Torvalds	field	ROMOP		0xE0
6281da177e4SLinus Torvalds	field	ROMSPD		0x18
6291da177e4SLinus Torvalds	field	REPEAT		0x02
6301da177e4SLinus Torvalds	field	RDY		0x01
6311da177e4SLinus Torvalds}
6321da177e4SLinus Torvalds
6331da177e4SLinus Torvalds/*
6341da177e4SLinus Torvalds * ROM Data
6351da177e4SLinus Torvalds */
6361da177e4SLinus Torvaldsregister ROMDATA {
6371da177e4SLinus Torvalds	address			0x08E
6381da177e4SLinus Torvalds	access_mode	RW
6391da177e4SLinus Torvalds}
6401da177e4SLinus Torvalds
6411da177e4SLinus Torvalds/*
6421da177e4SLinus Torvalds * Data Channel Receive Message 0
6431da177e4SLinus Torvalds */
6441da177e4SLinus Torvaldsregister DCHRXMSG0 {
6451da177e4SLinus Torvalds	address			0x090
6461da177e4SLinus Torvalds	access_mode	RO
6471da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
6481da177e4SLinus Torvalds	field		CDNUM	0xF8
6491da177e4SLinus Torvalds	field		CFNUM	0x07
6501da177e4SLinus Torvalds}
6511da177e4SLinus Torvalds
6521da177e4SLinus Torvalds/*
6531da177e4SLinus Torvalds * CMC Recieve Message 0
6541da177e4SLinus Torvalds */
6551da177e4SLinus Torvaldsregister CMCRXMSG0 {
6561da177e4SLinus Torvalds	address			0x090
6571da177e4SLinus Torvalds	access_mode	RO
6581da177e4SLinus Torvalds	modes		M_CCHAN
6591da177e4SLinus Torvalds	field		CDNUM	0xF8
6601da177e4SLinus Torvalds	field		CFNUM	0x07
6611da177e4SLinus Torvalds}
6621da177e4SLinus Torvalds
6631da177e4SLinus Torvalds/*
6641da177e4SLinus Torvalds * Overlay Recieve Message 0
6651da177e4SLinus Torvalds */
6661da177e4SLinus Torvaldsregister OVLYRXMSG0 {
6671da177e4SLinus Torvalds	address			0x090
6681da177e4SLinus Torvalds	access_mode	RO
6691da177e4SLinus Torvalds	modes		M_SCSI
6701da177e4SLinus Torvalds	field		CDNUM	0xF8
6711da177e4SLinus Torvalds	field		CFNUM	0x07
6721da177e4SLinus Torvalds}
6731da177e4SLinus Torvalds
6741da177e4SLinus Torvalds/*
6751da177e4SLinus Torvalds * Relaxed Order Enable
6761da177e4SLinus Torvalds */
6771da177e4SLinus Torvaldsregister ROENABLE {
6781da177e4SLinus Torvalds	address			0x090
6791da177e4SLinus Torvalds	access_mode	RW
6801da177e4SLinus Torvalds	modes		M_CFG
6811da177e4SLinus Torvalds	field	MSIROEN		0x20
6821da177e4SLinus Torvalds	field	OVLYROEN	0x10
6831da177e4SLinus Torvalds	field	CMCROEN		0x08
6841da177e4SLinus Torvalds	field	SGROEN		0x04
6851da177e4SLinus Torvalds	field	DCH1ROEN	0x02
6861da177e4SLinus Torvalds	field	DCH0ROEN	0x01
6871da177e4SLinus Torvalds}
6881da177e4SLinus Torvalds
6891da177e4SLinus Torvalds/*
6901da177e4SLinus Torvalds * Data Channel Receive Message 1
6911da177e4SLinus Torvalds */
6921da177e4SLinus Torvaldsregister DCHRXMSG1 {
6931da177e4SLinus Torvalds	address			0x091
6941da177e4SLinus Torvalds	access_mode	RO
6951da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
6961da177e4SLinus Torvalds	field	CBNUM		0xFF
6971da177e4SLinus Torvalds}
6981da177e4SLinus Torvalds
6991da177e4SLinus Torvalds/*
7001da177e4SLinus Torvalds * CMC Recieve Message 1
7011da177e4SLinus Torvalds */
7021da177e4SLinus Torvaldsregister CMCRXMSG1 {
7031da177e4SLinus Torvalds	address			0x091
7041da177e4SLinus Torvalds	access_mode	RO
7051da177e4SLinus Torvalds	modes		M_CCHAN
7061da177e4SLinus Torvalds	field	CBNUM		0xFF
7071da177e4SLinus Torvalds}
7081da177e4SLinus Torvalds
7091da177e4SLinus Torvalds/*
7101da177e4SLinus Torvalds * Overlay Recieve Message 1
7111da177e4SLinus Torvalds */
7121da177e4SLinus Torvaldsregister OVLYRXMSG1 {
7131da177e4SLinus Torvalds	address			0x091
7141da177e4SLinus Torvalds	access_mode	RO
7151da177e4SLinus Torvalds	modes		M_SCSI
7161da177e4SLinus Torvalds	field	CBNUM		0xFF
7171da177e4SLinus Torvalds}
7181da177e4SLinus Torvalds
7191da177e4SLinus Torvalds/*
7201da177e4SLinus Torvalds * No Snoop Enable
7211da177e4SLinus Torvalds */
7221da177e4SLinus Torvaldsregister NSENABLE {
7231da177e4SLinus Torvalds	address			0x091
7241da177e4SLinus Torvalds	access_mode	RW
7251da177e4SLinus Torvalds	modes		M_CFG
7261da177e4SLinus Torvalds	field	MSINSEN		0x20
7271da177e4SLinus Torvalds	field	OVLYNSEN	0x10
7281da177e4SLinus Torvalds	field	CMCNSEN		0x08
7291da177e4SLinus Torvalds	field	SGNSEN		0x04
7301da177e4SLinus Torvalds	field	DCH1NSEN	0x02
7311da177e4SLinus Torvalds	field	DCH0NSEN	0x01
7321da177e4SLinus Torvalds}
7331da177e4SLinus Torvalds
7341da177e4SLinus Torvalds/*
7351da177e4SLinus Torvalds * Data Channel Receive Message 2
7361da177e4SLinus Torvalds */
7371da177e4SLinus Torvaldsregister DCHRXMSG2 {
7381da177e4SLinus Torvalds	address			0x092
7391da177e4SLinus Torvalds	access_mode	RO
7401da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
7411da177e4SLinus Torvalds	field	MINDEX		0xFF
7421da177e4SLinus Torvalds}
7431da177e4SLinus Torvalds
7441da177e4SLinus Torvalds/*
7451da177e4SLinus Torvalds * CMC Recieve Message 2
7461da177e4SLinus Torvalds */
7471da177e4SLinus Torvaldsregister CMCRXMSG2 {
7481da177e4SLinus Torvalds	address			0x092
7491da177e4SLinus Torvalds	access_mode	RO
7501da177e4SLinus Torvalds	modes		M_CCHAN
7511da177e4SLinus Torvalds	field	MINDEX		0xFF
7521da177e4SLinus Torvalds}
7531da177e4SLinus Torvalds
7541da177e4SLinus Torvalds/*
7551da177e4SLinus Torvalds * Overlay Recieve Message 2
7561da177e4SLinus Torvalds */
7571da177e4SLinus Torvaldsregister OVLYRXMSG2 {
7581da177e4SLinus Torvalds	address			0x092
7591da177e4SLinus Torvalds	access_mode	RO
7601da177e4SLinus Torvalds	modes		M_SCSI
7611da177e4SLinus Torvalds	field	MINDEX		0xFF
7621da177e4SLinus Torvalds}
7631da177e4SLinus Torvalds
7641da177e4SLinus Torvalds/*
7651da177e4SLinus Torvalds * Outstanding Split Transactions
7661da177e4SLinus Torvalds */
7671da177e4SLinus Torvaldsregister OST {
7681da177e4SLinus Torvalds	address			0x092
7691da177e4SLinus Torvalds	access_mode	RW
7701da177e4SLinus Torvalds	modes		M_CFG
7711da177e4SLinus Torvalds}
7721da177e4SLinus Torvalds
7731da177e4SLinus Torvalds/*
7741da177e4SLinus Torvalds * Data Channel Receive Message 3
7751da177e4SLinus Torvalds */
7761da177e4SLinus Torvaldsregister DCHRXMSG3 {
7771da177e4SLinus Torvalds	address			0x093
7781da177e4SLinus Torvalds	access_mode	RO
7791da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
7801da177e4SLinus Torvalds	field	MCLASS		0x0F
7811da177e4SLinus Torvalds}
7821da177e4SLinus Torvalds
7831da177e4SLinus Torvalds/*
7841da177e4SLinus Torvalds * CMC Recieve Message 3
7851da177e4SLinus Torvalds */
7861da177e4SLinus Torvaldsregister CMCRXMSG3 {
7871da177e4SLinus Torvalds	address			0x093
7881da177e4SLinus Torvalds	access_mode	RO
7891da177e4SLinus Torvalds	modes		M_CCHAN
7901da177e4SLinus Torvalds	field	MCLASS		0x0F
7911da177e4SLinus Torvalds}
7921da177e4SLinus Torvalds
7931da177e4SLinus Torvalds/*
7941da177e4SLinus Torvalds * Overlay Recieve Message 3
7951da177e4SLinus Torvalds */
7961da177e4SLinus Torvaldsregister OVLYRXMSG3 {
7971da177e4SLinus Torvalds	address			0x093
7981da177e4SLinus Torvalds	access_mode	RO
7991da177e4SLinus Torvalds	modes		M_SCSI
8001da177e4SLinus Torvalds	field	MCLASS		0x0F
8011da177e4SLinus Torvalds}
8021da177e4SLinus Torvalds
8031da177e4SLinus Torvalds/*
8041da177e4SLinus Torvalds * PCI-X Control
8051da177e4SLinus Torvalds */
8061da177e4SLinus Torvaldsregister PCIXCTL {
8071da177e4SLinus Torvalds	address			0x093
8081da177e4SLinus Torvalds	access_mode	RW
8091da177e4SLinus Torvalds	modes		M_CFG
8101da177e4SLinus Torvalds	field	SERRPULSE	0x80
8111da177e4SLinus Torvalds	field	UNEXPSCIEN	0x20
8121da177e4SLinus Torvalds	field	SPLTSMADIS	0x10
8131da177e4SLinus Torvalds	field	SPLTSTADIS	0x08
8141da177e4SLinus Torvalds	field	SRSPDPEEN	0x04
8151da177e4SLinus Torvalds	field	TSCSERREN	0x02
8161da177e4SLinus Torvalds	field	CMPABCDIS	0x01
8171da177e4SLinus Torvalds}
8181da177e4SLinus Torvalds
8191da177e4SLinus Torvalds/*
8201da177e4SLinus Torvalds * CMC Sequencer Byte Count
8211da177e4SLinus Torvalds */
8221da177e4SLinus Torvaldsregister CMCSEQBCNT {
8231da177e4SLinus Torvalds	address			0x094
8241da177e4SLinus Torvalds	access_mode	RO
8251da177e4SLinus Torvalds	modes		M_CCHAN
8261da177e4SLinus Torvalds}
8271da177e4SLinus Torvalds
8281da177e4SLinus Torvalds/*
8291da177e4SLinus Torvalds * Overlay Sequencer Byte Count
8301da177e4SLinus Torvalds */
8311da177e4SLinus Torvaldsregister OVLYSEQBCNT {
8321da177e4SLinus Torvalds	address			0x094
8331da177e4SLinus Torvalds	access_mode	RO
8341da177e4SLinus Torvalds	modes		M_SCSI
8351da177e4SLinus Torvalds}
8361da177e4SLinus Torvalds
8371da177e4SLinus Torvalds/*
8381da177e4SLinus Torvalds * Data Channel Sequencer Byte Count
8391da177e4SLinus Torvalds */
8401da177e4SLinus Torvaldsregister DCHSEQBCNT {
8411da177e4SLinus Torvalds	address			0x094
8421da177e4SLinus Torvalds	access_mode	RO
8431da177e4SLinus Torvalds	size		2
8441da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
8451da177e4SLinus Torvalds}
8461da177e4SLinus Torvalds
8471da177e4SLinus Torvalds/*
8481da177e4SLinus Torvalds * Data Channel Split Status 0
8491da177e4SLinus Torvalds */
8501da177e4SLinus Torvaldsregister DCHSPLTSTAT0 {
8511da177e4SLinus Torvalds	address			0x096
8521da177e4SLinus Torvalds	access_mode	RW
8531da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
8541da177e4SLinus Torvalds	field	STAETERM	0x80
8551da177e4SLinus Torvalds	field	SCBCERR		0x40
8561da177e4SLinus Torvalds	field	SCADERR		0x20
8571da177e4SLinus Torvalds	field	SCDATBUCKET	0x10
8581da177e4SLinus Torvalds	field	CNTNOTCMPLT	0x08
8591da177e4SLinus Torvalds	field	RXOVRUN		0x04
8601da177e4SLinus Torvalds	field	RXSCEMSG	0x02
8611da177e4SLinus Torvalds	field	RXSPLTRSP	0x01
8621da177e4SLinus Torvalds}
8631da177e4SLinus Torvalds
8641da177e4SLinus Torvalds/*
8651da177e4SLinus Torvalds * CMC Split Status 0
8661da177e4SLinus Torvalds */
8671da177e4SLinus Torvaldsregister CMCSPLTSTAT0 {
8681da177e4SLinus Torvalds	address			0x096
8691da177e4SLinus Torvalds	access_mode	RW
8701da177e4SLinus Torvalds	modes		M_CCHAN
8711da177e4SLinus Torvalds	field	STAETERM	0x80
8721da177e4SLinus Torvalds	field	SCBCERR		0x40
8731da177e4SLinus Torvalds	field	SCADERR		0x20
8741da177e4SLinus Torvalds	field	SCDATBUCKET	0x10
8751da177e4SLinus Torvalds	field	CNTNOTCMPLT	0x08
8761da177e4SLinus Torvalds	field	RXOVRUN		0x04
8771da177e4SLinus Torvalds	field	RXSCEMSG	0x02
8781da177e4SLinus Torvalds	field	RXSPLTRSP	0x01
8791da177e4SLinus Torvalds}
8801da177e4SLinus Torvalds
8811da177e4SLinus Torvalds/*
8821da177e4SLinus Torvalds * Overlay Split Status 0
8831da177e4SLinus Torvalds */
8841da177e4SLinus Torvaldsregister OVLYSPLTSTAT0 {
8851da177e4SLinus Torvalds	address			0x096
8861da177e4SLinus Torvalds	access_mode	RW
8871da177e4SLinus Torvalds	modes		M_SCSI
8881da177e4SLinus Torvalds	field	STAETERM	0x80
8891da177e4SLinus Torvalds	field	SCBCERR		0x40
8901da177e4SLinus Torvalds	field	SCADERR		0x20
8911da177e4SLinus Torvalds	field	SCDATBUCKET	0x10
8921da177e4SLinus Torvalds	field	CNTNOTCMPLT	0x08
8931da177e4SLinus Torvalds	field	RXOVRUN		0x04
8941da177e4SLinus Torvalds	field	RXSCEMSG	0x02
8951da177e4SLinus Torvalds	field	RXSPLTRSP	0x01
8961da177e4SLinus Torvalds}
8971da177e4SLinus Torvalds
8981da177e4SLinus Torvalds/*
8991da177e4SLinus Torvalds * Data Channel Split Status 1
9001da177e4SLinus Torvalds */
9011da177e4SLinus Torvaldsregister DCHSPLTSTAT1 {
9021da177e4SLinus Torvalds	address			0x097
9031da177e4SLinus Torvalds	access_mode	RW
9041da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
9051da177e4SLinus Torvalds	field	RXDATABUCKET	0x01
9061da177e4SLinus Torvalds}
9071da177e4SLinus Torvalds
9081da177e4SLinus Torvalds/*
9091da177e4SLinus Torvalds * CMC Split Status 1
9101da177e4SLinus Torvalds */
9111da177e4SLinus Torvaldsregister CMCSPLTSTAT1 {
9121da177e4SLinus Torvalds	address			0x097
9131da177e4SLinus Torvalds	access_mode	RW
9141da177e4SLinus Torvalds	modes		M_CCHAN
9151da177e4SLinus Torvalds	field	RXDATABUCKET	0x01
9161da177e4SLinus Torvalds}
9171da177e4SLinus Torvalds
9181da177e4SLinus Torvalds/*
9191da177e4SLinus Torvalds * Overlay Split Status 1
9201da177e4SLinus Torvalds */
9211da177e4SLinus Torvaldsregister OVLYSPLTSTAT1 {
9221da177e4SLinus Torvalds	address			0x097
9231da177e4SLinus Torvalds	access_mode	RW
9241da177e4SLinus Torvalds	modes		M_SCSI
9251da177e4SLinus Torvalds	field	RXDATABUCKET	0x01
9261da177e4SLinus Torvalds}
9271da177e4SLinus Torvalds
9281da177e4SLinus Torvalds/*
9291da177e4SLinus Torvalds * S/G Receive Message 0
9301da177e4SLinus Torvalds */
9311da177e4SLinus Torvaldsregister SGRXMSG0 {
9321da177e4SLinus Torvalds	address			0x098
9331da177e4SLinus Torvalds	access_mode	RO
9341da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
9351da177e4SLinus Torvalds	field		CDNUM	0xF8
9361da177e4SLinus Torvalds	field		CFNUM	0x07
9371da177e4SLinus Torvalds}
9381da177e4SLinus Torvalds
9391da177e4SLinus Torvalds/*
9401da177e4SLinus Torvalds * S/G Receive Message 1
9411da177e4SLinus Torvalds */
9421da177e4SLinus Torvaldsregister SGRXMSG1 {
9431da177e4SLinus Torvalds	address			0x099
9441da177e4SLinus Torvalds	access_mode	RO
9451da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
9461da177e4SLinus Torvalds	field	CBNUM		0xFF
9471da177e4SLinus Torvalds}
9481da177e4SLinus Torvalds
9491da177e4SLinus Torvalds/*
9501da177e4SLinus Torvalds * S/G Receive Message 2
9511da177e4SLinus Torvalds */
9521da177e4SLinus Torvaldsregister SGRXMSG2 {
9531da177e4SLinus Torvalds	address			0x09A
9541da177e4SLinus Torvalds	access_mode	RO
9551da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
9561da177e4SLinus Torvalds	field	MINDEX		0xFF
9571da177e4SLinus Torvalds}
9581da177e4SLinus Torvalds
9591da177e4SLinus Torvalds/*
9601da177e4SLinus Torvalds * S/G Receive Message 3
9611da177e4SLinus Torvalds */
9621da177e4SLinus Torvaldsregister SGRXMSG3 {
9631da177e4SLinus Torvalds	address			0x09B
9641da177e4SLinus Torvalds	access_mode	RO
9651da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
9661da177e4SLinus Torvalds	field	MCLASS		0x0F
9671da177e4SLinus Torvalds}
9681da177e4SLinus Torvalds
9691da177e4SLinus Torvalds/*
9701da177e4SLinus Torvalds * Slave Split Out Address 0
9711da177e4SLinus Torvalds */
9721da177e4SLinus Torvaldsregister SLVSPLTOUTADR0 {
9731da177e4SLinus Torvalds	address			0x098
9741da177e4SLinus Torvalds	access_mode	RO
9751da177e4SLinus Torvalds	modes		M_SCSI
9761da177e4SLinus Torvalds	field	LOWER_ADDR	0x7F
9771da177e4SLinus Torvalds}
9781da177e4SLinus Torvalds
9791da177e4SLinus Torvalds/*
9801da177e4SLinus Torvalds * Slave Split Out Address 1
9811da177e4SLinus Torvalds */
9821da177e4SLinus Torvaldsregister SLVSPLTOUTADR1 {
9831da177e4SLinus Torvalds	address			0x099
9841da177e4SLinus Torvalds	access_mode	RO
9851da177e4SLinus Torvalds	modes		M_SCSI
9861da177e4SLinus Torvalds	field	REQ_DNUM	0xF8
9871da177e4SLinus Torvalds	field	REQ_FNUM	0x07
9881da177e4SLinus Torvalds}
9891da177e4SLinus Torvalds
9901da177e4SLinus Torvalds/*
9911da177e4SLinus Torvalds * Slave Split Out Address 2
9921da177e4SLinus Torvalds */
9931da177e4SLinus Torvaldsregister SLVSPLTOUTADR2 {
9941da177e4SLinus Torvalds	address			0x09A
9951da177e4SLinus Torvalds	access_mode	RO
9961da177e4SLinus Torvalds	modes		M_SCSI
9971da177e4SLinus Torvalds	field	REQ_BNUM	0xFF
9981da177e4SLinus Torvalds}
9991da177e4SLinus Torvalds
10001da177e4SLinus Torvalds/*
10011da177e4SLinus Torvalds * Slave Split Out Address 3
10021da177e4SLinus Torvalds */
10031da177e4SLinus Torvaldsregister SLVSPLTOUTADR3 {
10041da177e4SLinus Torvalds	address			0x09B
10051da177e4SLinus Torvalds	access_mode	RO
10061da177e4SLinus Torvalds	modes		M_SCSI
10071da177e4SLinus Torvalds	field	RLXORD		020
10081da177e4SLinus Torvalds	field	TAG_NUM		0x1F
10091da177e4SLinus Torvalds}
10101da177e4SLinus Torvalds
10111da177e4SLinus Torvalds/*
10121da177e4SLinus Torvalds * SG Sequencer Byte Count
10131da177e4SLinus Torvalds */
10141da177e4SLinus Torvaldsregister SGSEQBCNT {
10151da177e4SLinus Torvalds	address			0x09C
10161da177e4SLinus Torvalds	access_mode	RO
10171da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
10181da177e4SLinus Torvalds}
10191da177e4SLinus Torvalds
10201da177e4SLinus Torvalds/*
10211da177e4SLinus Torvalds * Slave Split Out Attribute 0
10221da177e4SLinus Torvalds */
10231da177e4SLinus Torvaldsregister SLVSPLTOUTATTR0 {
10241da177e4SLinus Torvalds	address			0x09C
10251da177e4SLinus Torvalds	access_mode	RO
10261da177e4SLinus Torvalds	modes		M_SCSI
10271da177e4SLinus Torvalds	field	LOWER_BCNT	0xFF
10281da177e4SLinus Torvalds}
10291da177e4SLinus Torvalds
10301da177e4SLinus Torvalds/*
10311da177e4SLinus Torvalds * Slave Split Out Attribute 1
10321da177e4SLinus Torvalds */
10331da177e4SLinus Torvaldsregister SLVSPLTOUTATTR1 {
10341da177e4SLinus Torvalds	address			0x09D
10351da177e4SLinus Torvalds	access_mode	RO
10361da177e4SLinus Torvalds	modes		M_SCSI
10371da177e4SLinus Torvalds	field	CMPLT_DNUM	0xF8
10381da177e4SLinus Torvalds	field	CMPLT_FNUM	0x07
10391da177e4SLinus Torvalds}
10401da177e4SLinus Torvalds
10411da177e4SLinus Torvalds/*
10421da177e4SLinus Torvalds * Slave Split Out Attribute 2
10431da177e4SLinus Torvalds */
10441da177e4SLinus Torvaldsregister SLVSPLTOUTATTR2 {
10451da177e4SLinus Torvalds	address			0x09E
10461da177e4SLinus Torvalds	access_mode	RO
10471da177e4SLinus Torvalds	size		2
10481da177e4SLinus Torvalds	modes		M_SCSI
10491da177e4SLinus Torvalds	field	CMPLT_BNUM	0xFF
10501da177e4SLinus Torvalds}
10511da177e4SLinus Torvalds/*
10521da177e4SLinus Torvalds * S/G Split Status 0
10531da177e4SLinus Torvalds */
10541da177e4SLinus Torvaldsregister SGSPLTSTAT0 {
10551da177e4SLinus Torvalds	address			0x09E
10561da177e4SLinus Torvalds	access_mode	RW
10571da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
10581da177e4SLinus Torvalds	field	STAETERM	0x80
10591da177e4SLinus Torvalds	field	SCBCERR		0x40
10601da177e4SLinus Torvalds	field	SCADERR		0x20
10611da177e4SLinus Torvalds	field	SCDATBUCKET	0x10
10621da177e4SLinus Torvalds	field	CNTNOTCMPLT	0x08
10631da177e4SLinus Torvalds	field	RXOVRUN		0x04
10641da177e4SLinus Torvalds	field	RXSCEMSG	0x02
10651da177e4SLinus Torvalds	field	RXSPLTRSP	0x01
10661da177e4SLinus Torvalds}
10671da177e4SLinus Torvalds
10681da177e4SLinus Torvalds/*
10691da177e4SLinus Torvalds * S/G Split Status 1
10701da177e4SLinus Torvalds */
10711da177e4SLinus Torvaldsregister SGSPLTSTAT1 {
10721da177e4SLinus Torvalds	address			0x09F
10731da177e4SLinus Torvalds	access_mode	RW
10741da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
10751da177e4SLinus Torvalds	field	RXDATABUCKET	0x01
10761da177e4SLinus Torvalds}
10771da177e4SLinus Torvalds
10781da177e4SLinus Torvalds/*
10791da177e4SLinus Torvalds * Special Function
10801da177e4SLinus Torvalds */
10811da177e4SLinus Torvaldsregister SFUNCT {
10821da177e4SLinus Torvalds	address			0x09f
10831da177e4SLinus Torvalds	access_mode	RW
10841da177e4SLinus Torvalds	modes		M_CFG
10851da177e4SLinus Torvalds	field	TEST_GROUP	0xF0
10861da177e4SLinus Torvalds	field	TEST_NUM	0x0F
10871da177e4SLinus Torvalds}
10881da177e4SLinus Torvalds
10891da177e4SLinus Torvalds/*
10901da177e4SLinus Torvalds * Data FIFO 0 PCI Status
10911da177e4SLinus Torvalds */
10921da177e4SLinus Torvaldsregister DF0PCISTAT {
10931da177e4SLinus Torvalds	address			0x0A0
10941da177e4SLinus Torvalds	access_mode	RW
10951da177e4SLinus Torvalds	modes		M_CFG
10961da177e4SLinus Torvalds	field	DPE		0x80
10971da177e4SLinus Torvalds	field	SSE		0x40
10981da177e4SLinus Torvalds	field	RMA		0x20
10991da177e4SLinus Torvalds	field	RTA		0x10
11001da177e4SLinus Torvalds	field	SCAAPERR	0x08
11011da177e4SLinus Torvalds	field	RDPERR		0x04
11021da177e4SLinus Torvalds	field	TWATERR		0x02
11031da177e4SLinus Torvalds	field	DPR		0x01
11041da177e4SLinus Torvalds}
11051da177e4SLinus Torvalds
11061da177e4SLinus Torvalds/*
11071da177e4SLinus Torvalds * Data FIFO 1 PCI Status
11081da177e4SLinus Torvalds */
11091da177e4SLinus Torvaldsregister DF1PCISTAT {
11101da177e4SLinus Torvalds	address			0x0A1
11111da177e4SLinus Torvalds	access_mode	RW
11121da177e4SLinus Torvalds	modes		M_CFG
11131da177e4SLinus Torvalds	field	DPE		0x80
11141da177e4SLinus Torvalds	field	SSE		0x40
11151da177e4SLinus Torvalds	field	RMA		0x20
11161da177e4SLinus Torvalds	field	RTA		0x10
11171da177e4SLinus Torvalds	field	SCAAPERR	0x08
11181da177e4SLinus Torvalds	field	RDPERR		0x04
11191da177e4SLinus Torvalds	field	TWATERR		0x02
11201da177e4SLinus Torvalds	field	DPR		0x01
11211da177e4SLinus Torvalds}
11221da177e4SLinus Torvalds
11231da177e4SLinus Torvalds/*
11241da177e4SLinus Torvalds * S/G PCI Status
11251da177e4SLinus Torvalds */
11261da177e4SLinus Torvaldsregister SGPCISTAT {
11271da177e4SLinus Torvalds	address			0x0A2
11281da177e4SLinus Torvalds	access_mode	RW
11291da177e4SLinus Torvalds	modes		M_CFG
11301da177e4SLinus Torvalds	field	DPE		0x80
11311da177e4SLinus Torvalds	field	SSE		0x40
11321da177e4SLinus Torvalds	field	RMA		0x20
11331da177e4SLinus Torvalds	field	RTA		0x10
11341da177e4SLinus Torvalds	field	SCAAPERR	0x08
11351da177e4SLinus Torvalds	field	RDPERR		0x04
11361da177e4SLinus Torvalds	field	DPR		0x01
11371da177e4SLinus Torvalds}
11381da177e4SLinus Torvalds
11391da177e4SLinus Torvalds/*
11401da177e4SLinus Torvalds * CMC PCI Status
11411da177e4SLinus Torvalds */
11421da177e4SLinus Torvaldsregister CMCPCISTAT {
11431da177e4SLinus Torvalds	address			0x0A3
11441da177e4SLinus Torvalds	access_mode	RW
11451da177e4SLinus Torvalds	modes		M_CFG
11461da177e4SLinus Torvalds	field	DPE		0x80
11471da177e4SLinus Torvalds	field	SSE		0x40
11481da177e4SLinus Torvalds	field	RMA		0x20
11491da177e4SLinus Torvalds	field	RTA		0x10
11501da177e4SLinus Torvalds	field	SCAAPERR	0x08
11511da177e4SLinus Torvalds	field	RDPERR		0x04
11521da177e4SLinus Torvalds	field	TWATERR		0x02
11531da177e4SLinus Torvalds	field	DPR		0x01
11541da177e4SLinus Torvalds}
11551da177e4SLinus Torvalds
11561da177e4SLinus Torvalds/*
11571da177e4SLinus Torvalds * Overlay PCI Status
11581da177e4SLinus Torvalds */
11591da177e4SLinus Torvaldsregister OVLYPCISTAT {
11601da177e4SLinus Torvalds	address			0x0A4
11611da177e4SLinus Torvalds	access_mode	RW
11621da177e4SLinus Torvalds	modes		M_CFG
11631da177e4SLinus Torvalds	field	DPE		0x80
11641da177e4SLinus Torvalds	field	SSE		0x40
11651da177e4SLinus Torvalds	field	RMA		0x20
11661da177e4SLinus Torvalds	field	RTA		0x10
11671da177e4SLinus Torvalds	field	SCAAPERR	0x08
11681da177e4SLinus Torvalds	field	RDPERR		0x04
11691da177e4SLinus Torvalds	field	DPR		0x01
11701da177e4SLinus Torvalds}
11711da177e4SLinus Torvalds
11721da177e4SLinus Torvalds/*
11731da177e4SLinus Torvalds * PCI Status for MSI Master DMA Transfer
11741da177e4SLinus Torvalds */
11751da177e4SLinus Torvaldsregister MSIPCISTAT {
11761da177e4SLinus Torvalds	address			0x0A6
11771da177e4SLinus Torvalds	access_mode	RW
11781da177e4SLinus Torvalds	modes		M_CFG
11791da177e4SLinus Torvalds	field	SSE		0x40
11801da177e4SLinus Torvalds	field	RMA		0x20
11811da177e4SLinus Torvalds	field	RTA		0x10
11821da177e4SLinus Torvalds	field	CLRPENDMSI	0x08
11831da177e4SLinus Torvalds	field	TWATERR		0x02
11841da177e4SLinus Torvalds	field	DPR		0x01
11851da177e4SLinus Torvalds}
11861da177e4SLinus Torvalds
11871da177e4SLinus Torvalds/*
11881da177e4SLinus Torvalds * PCI Status for Target
11891da177e4SLinus Torvalds */
11901da177e4SLinus Torvaldsregister TARGPCISTAT {
11911da177e4SLinus Torvalds	address			0x0A7
11921da177e4SLinus Torvalds	access_mode	RW
11931da177e4SLinus Torvalds	modes		M_CFG
11941da177e4SLinus Torvalds	field	DPE		0x80
11951da177e4SLinus Torvalds	field	SSE		0x40
11961da177e4SLinus Torvalds	field	STA		0x08
11971da177e4SLinus Torvalds	field	TWATERR		0x02
11981da177e4SLinus Torvalds}
11991da177e4SLinus Torvalds
12001da177e4SLinus Torvalds/*
12011da177e4SLinus Torvalds * LQ Packet In
12021da177e4SLinus Torvalds * The last LQ Packet received
12031da177e4SLinus Torvalds */
12041da177e4SLinus Torvaldsregister LQIN {
12051da177e4SLinus Torvalds	address			0x020
12061da177e4SLinus Torvalds	access_mode	RW
12071da177e4SLinus Torvalds	size		20
12081da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
12091da177e4SLinus Torvalds}
12101da177e4SLinus Torvalds
12111da177e4SLinus Torvalds/*
12121da177e4SLinus Torvalds * SCB Type Pointer
12131da177e4SLinus Torvalds * SCB offset for Target Mode SCB type information
12141da177e4SLinus Torvalds */
12151da177e4SLinus Torvaldsregister TYPEPTR {
12161da177e4SLinus Torvalds	address			0x020
12171da177e4SLinus Torvalds	access_mode	RW
12181da177e4SLinus Torvalds	modes		M_CFG
12191da177e4SLinus Torvalds}
12201da177e4SLinus Torvalds
12211da177e4SLinus Torvalds/*
12221da177e4SLinus Torvalds * Queue Tag Pointer
12231da177e4SLinus Torvalds * SCB offset to the Two Byte tag identifier used for target mode.
12241da177e4SLinus Torvalds */
12251da177e4SLinus Torvaldsregister TAGPTR {
12261da177e4SLinus Torvalds	address			0x021
12271da177e4SLinus Torvalds	access_mode	RW
12281da177e4SLinus Torvalds	modes		M_CFG
12291da177e4SLinus Torvalds}
12301da177e4SLinus Torvalds
12311da177e4SLinus Torvalds/*
12321da177e4SLinus Torvalds * Logical Unit Number Pointer
12331da177e4SLinus Torvalds * SCB offset to the LSB (little endian) of the lun field.
12341da177e4SLinus Torvalds */
12351da177e4SLinus Torvaldsregister LUNPTR {
12361da177e4SLinus Torvalds	address			0x022
12371da177e4SLinus Torvalds	access_mode	RW
12381da177e4SLinus Torvalds	modes		M_CFG
12391da177e4SLinus Torvalds}
12401da177e4SLinus Torvalds
12411da177e4SLinus Torvalds/*
12421da177e4SLinus Torvalds * Data Length Pointer
12431da177e4SLinus Torvalds * SCB offset for the 4 byte data length field in target mode.
12441da177e4SLinus Torvalds */
12451da177e4SLinus Torvaldsregister DATALENPTR {
12461da177e4SLinus Torvalds	address			0x023
12471da177e4SLinus Torvalds	access_mode	RW
12481da177e4SLinus Torvalds	modes		M_CFG
12491da177e4SLinus Torvalds}
12501da177e4SLinus Torvalds
12511da177e4SLinus Torvalds/*
12521da177e4SLinus Torvalds * Status Length Pointer
12531da177e4SLinus Torvalds * SCB offset to the two byte status field in target SCBs.
12541da177e4SLinus Torvalds */
12551da177e4SLinus Torvaldsregister STATLENPTR {
12561da177e4SLinus Torvalds	address			0x024
12571da177e4SLinus Torvalds	access_mode	RW
12581da177e4SLinus Torvalds	modes		M_CFG
12591da177e4SLinus Torvalds}
12601da177e4SLinus Torvalds
12611da177e4SLinus Torvalds/*
12621da177e4SLinus Torvalds * Command Length Pointer
12631da177e4SLinus Torvalds * Scb offset for the CDB length field in initiator SCBs.
12641da177e4SLinus Torvalds */
12651da177e4SLinus Torvaldsregister CMDLENPTR {
12661da177e4SLinus Torvalds	address			0x025
12671da177e4SLinus Torvalds	access_mode	RW
12681da177e4SLinus Torvalds	modes		M_CFG
12691da177e4SLinus Torvalds}
12701da177e4SLinus Torvalds
12711da177e4SLinus Torvalds/*
12721da177e4SLinus Torvalds * Task Attribute Pointer
12731da177e4SLinus Torvalds * Scb offset for the byte field specifying the attribute byte
12741da177e4SLinus Torvalds * to be used in command packets.
12751da177e4SLinus Torvalds */
12761da177e4SLinus Torvaldsregister ATTRPTR {
12771da177e4SLinus Torvalds	address			0x026
12781da177e4SLinus Torvalds	access_mode	RW
12791da177e4SLinus Torvalds	modes		M_CFG
12801da177e4SLinus Torvalds}
12811da177e4SLinus Torvalds
12821da177e4SLinus Torvalds/*
12831da177e4SLinus Torvalds * Task Management Flags Pointer
12841da177e4SLinus Torvalds * Scb offset for the byte field specifying the attribute flags
12851da177e4SLinus Torvalds * byte to be used in command packets.
12861da177e4SLinus Torvalds */
12871da177e4SLinus Torvaldsregister FLAGPTR {
12881da177e4SLinus Torvalds	address			0x027
12891da177e4SLinus Torvalds	access_mode	RW
12901da177e4SLinus Torvalds	modes		M_CFG
12911da177e4SLinus Torvalds}
12921da177e4SLinus Torvalds
12931da177e4SLinus Torvalds/*
12941da177e4SLinus Torvalds * Command Pointer
12951da177e4SLinus Torvalds * Scb offset for the first byte in the CDB for initiator SCBs.
12961da177e4SLinus Torvalds */
12971da177e4SLinus Torvaldsregister CMDPTR {
12981da177e4SLinus Torvalds	address			0x028
12991da177e4SLinus Torvalds	access_mode	RW
13001da177e4SLinus Torvalds	modes		M_CFG
13011da177e4SLinus Torvalds}
13021da177e4SLinus Torvalds
13031da177e4SLinus Torvalds/*
13041da177e4SLinus Torvalds * Queue Next Pointer
13051da177e4SLinus Torvalds * Scb offset for the 2 byte "next scb link".
13061da177e4SLinus Torvalds */
13071da177e4SLinus Torvaldsregister QNEXTPTR {
13081da177e4SLinus Torvalds	address			0x029
13091da177e4SLinus Torvalds	access_mode	RW
13101da177e4SLinus Torvalds	modes		M_CFG
13111da177e4SLinus Torvalds}
13121da177e4SLinus Torvalds
13131da177e4SLinus Torvalds/*
13141da177e4SLinus Torvalds * SCSI ID Pointer
13151da177e4SLinus Torvalds * Scb offset to the value to place in the SCSIID register
13161da177e4SLinus Torvalds * during target mode connections.
13171da177e4SLinus Torvalds */
13181da177e4SLinus Torvaldsregister IDPTR {
13191da177e4SLinus Torvalds	address			0x02A
13201da177e4SLinus Torvalds	access_mode	RW
13211da177e4SLinus Torvalds	modes		M_CFG
13221da177e4SLinus Torvalds}
13231da177e4SLinus Torvalds
13241da177e4SLinus Torvalds/*
13251da177e4SLinus Torvalds * Command Aborted Byte Pointer
13261da177e4SLinus Torvalds * Offset to the SCB flags field that includes the
13271da177e4SLinus Torvalds * "SCB aborted" status bit.
13281da177e4SLinus Torvalds */
13291da177e4SLinus Torvaldsregister ABRTBYTEPTR {
13301da177e4SLinus Torvalds	address			0x02B
13311da177e4SLinus Torvalds	access_mode	RW
13321da177e4SLinus Torvalds	modes		M_CFG
13331da177e4SLinus Torvalds}
13341da177e4SLinus Torvalds
13351da177e4SLinus Torvalds/*
13361da177e4SLinus Torvalds * Command Aborted Bit Pointer
13371da177e4SLinus Torvalds * Bit offset in the SCB flags field for "SCB aborted" status.
13381da177e4SLinus Torvalds */
13391da177e4SLinus Torvaldsregister ABRTBITPTR {
13401da177e4SLinus Torvalds	address			0x02C
13411da177e4SLinus Torvalds	access_mode	RW
13421da177e4SLinus Torvalds	modes		M_CFG
13431da177e4SLinus Torvalds}
13441da177e4SLinus Torvalds
13451da177e4SLinus Torvalds/*
13461da177e4SLinus Torvalds * Rev B or greater.
13471da177e4SLinus Torvalds */
13481da177e4SLinus Torvaldsregister MAXCMDBYTES {
13491da177e4SLinus Torvalds	address			0x02D
13501da177e4SLinus Torvalds	access_mode	RW
13511da177e4SLinus Torvalds	modes		M_CFG
13521da177e4SLinus Torvalds}
13531da177e4SLinus Torvalds
13541da177e4SLinus Torvalds/*
13551da177e4SLinus Torvalds * Rev B or greater.
13561da177e4SLinus Torvalds */
13571da177e4SLinus Torvaldsregister MAXCMD2RCV {
13581da177e4SLinus Torvalds	address			0x02E
13591da177e4SLinus Torvalds	access_mode	RW
13601da177e4SLinus Torvalds	modes		M_CFG
13611da177e4SLinus Torvalds}
13621da177e4SLinus Torvalds
13631da177e4SLinus Torvalds/*
13641da177e4SLinus Torvalds * Rev B or greater.
13651da177e4SLinus Torvalds */
13661da177e4SLinus Torvaldsregister SHORTTHRESH {
13671da177e4SLinus Torvalds	address			0x02F
13681da177e4SLinus Torvalds	access_mode	RW
13691da177e4SLinus Torvalds	modes		M_CFG
13701da177e4SLinus Torvalds}
13711da177e4SLinus Torvalds
13721da177e4SLinus Torvalds/*
13731da177e4SLinus Torvalds * Logical Unit Number Length
13741da177e4SLinus Torvalds * The length, in bytes, of the SCB lun field.
13751da177e4SLinus Torvalds */
13761da177e4SLinus Torvaldsregister LUNLEN {
13771da177e4SLinus Torvalds	address			0x030
13781da177e4SLinus Torvalds	access_mode	RW
13791da177e4SLinus Torvalds	modes		M_CFG
13801da177e4SLinus Torvalds	mask		ILUNLEN	0x0F
13811da177e4SLinus Torvalds	mask		TLUNLEN	0xF0
13821da177e4SLinus Torvalds}
13831da177e4SLinus Torvaldsconst LUNLEN_SINGLE_LEVEL_LUN 0xF
13841da177e4SLinus Torvalds
13851da177e4SLinus Torvalds/*
13861da177e4SLinus Torvalds * CDB Limit
13871da177e4SLinus Torvalds * The size, in bytes, of the embedded CDB field in initator SCBs.
13881da177e4SLinus Torvalds */
13891da177e4SLinus Torvaldsregister CDBLIMIT {
13901da177e4SLinus Torvalds	address			0x031
13911da177e4SLinus Torvalds	access_mode	RW
13921da177e4SLinus Torvalds	modes		M_CFG
13931da177e4SLinus Torvalds}
13941da177e4SLinus Torvalds
13951da177e4SLinus Torvalds/*
13961da177e4SLinus Torvalds * Maximum Commands
13971da177e4SLinus Torvalds * The maximum number of commands to issue during a
13981da177e4SLinus Torvalds * single packetized connection.
13991da177e4SLinus Torvalds */
14001da177e4SLinus Torvaldsregister MAXCMD {
14011da177e4SLinus Torvalds	address			0x032
14021da177e4SLinus Torvalds	access_mode	RW
14031da177e4SLinus Torvalds	modes		M_CFG
14041da177e4SLinus Torvalds}
14051da177e4SLinus Torvalds
14061da177e4SLinus Torvalds/*
14071da177e4SLinus Torvalds * Maximum Command Counter
14081da177e4SLinus Torvalds * The number of commands already sent during this connection
14091da177e4SLinus Torvalds */
14101da177e4SLinus Torvaldsregister MAXCMDCNT {
14111da177e4SLinus Torvalds	address			0x033
14121da177e4SLinus Torvalds	access_mode	RW
14131da177e4SLinus Torvalds	modes		M_CFG
14141da177e4SLinus Torvalds}
14151da177e4SLinus Torvalds
14161da177e4SLinus Torvalds/*
14171da177e4SLinus Torvalds * LQ Packet Reserved Bytes
14181da177e4SLinus Torvalds * The bytes to be sent in the currently reserved fileds
14191da177e4SLinus Torvalds * of all LQ packets.
14201da177e4SLinus Torvalds */
14211da177e4SLinus Torvaldsregister LQRSVD01 {
14221da177e4SLinus Torvalds	address			0x034
14231da177e4SLinus Torvalds	access_mode	RW
14241da177e4SLinus Torvalds	modes		M_SCSI
14251da177e4SLinus Torvalds}
14261da177e4SLinus Torvaldsregister LQRSVD16 {
14271da177e4SLinus Torvalds	address			0x035
14281da177e4SLinus Torvalds	access_mode	RW
14291da177e4SLinus Torvalds	modes		M_SCSI
14301da177e4SLinus Torvalds}
14311da177e4SLinus Torvaldsregister LQRSVD17 {
14321da177e4SLinus Torvalds	address			0x036
14331da177e4SLinus Torvalds	access_mode	RW
14341da177e4SLinus Torvalds	modes		M_SCSI
14351da177e4SLinus Torvalds}
14361da177e4SLinus Torvalds
14371da177e4SLinus Torvalds/*
14381da177e4SLinus Torvalds * Command Reserved 0
14391da177e4SLinus Torvalds * The byte to be sent for the reserved byte 0 of
14401da177e4SLinus Torvalds * outgoing command packets.
14411da177e4SLinus Torvalds */
14421da177e4SLinus Torvaldsregister CMDRSVD0 {
14431da177e4SLinus Torvalds	address			0x037
14441da177e4SLinus Torvalds	access_mode	RW
14451da177e4SLinus Torvalds	modes		M_CFG
14461da177e4SLinus Torvalds}
14471da177e4SLinus Torvalds
14481da177e4SLinus Torvalds/*
14491da177e4SLinus Torvalds * LQ Manager Control 0
14501da177e4SLinus Torvalds */
14511da177e4SLinus Torvaldsregister LQCTL0 {
14521da177e4SLinus Torvalds	address			0x038
14531da177e4SLinus Torvalds	access_mode	RW
14541da177e4SLinus Torvalds	modes		M_CFG
14551da177e4SLinus Torvalds	field	LQITARGCLT	0xC0
14561da177e4SLinus Torvalds	field	LQIINITGCLT	0x30
14571da177e4SLinus Torvalds	field	LQ0TARGCLT	0x0C
14581da177e4SLinus Torvalds	field	LQ0INITGCLT	0x03
14591da177e4SLinus Torvalds}
14601da177e4SLinus Torvalds
14611da177e4SLinus Torvalds/*
14621da177e4SLinus Torvalds * LQ Manager Control 1
14631da177e4SLinus Torvalds */
14641da177e4SLinus Torvaldsregister LQCTL1 {
14651da177e4SLinus Torvalds	address			0x038
14661da177e4SLinus Torvalds	access_mode	RW
14671da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
14681da177e4SLinus Torvalds	field	PCI2PCI		0x04
14691da177e4SLinus Torvalds	field	SINGLECMD	0x02
14701da177e4SLinus Torvalds	field	ABORTPENDING	0x01
14711da177e4SLinus Torvalds}
14721da177e4SLinus Torvalds
14731da177e4SLinus Torvalds/*
14741da177e4SLinus Torvalds * LQ Manager Control 2
14751da177e4SLinus Torvalds */
14761da177e4SLinus Torvaldsregister LQCTL2 {
14771da177e4SLinus Torvalds	address			0x039
14781da177e4SLinus Torvalds	access_mode	RW
14791da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
14801da177e4SLinus Torvalds	field	LQIRETRY	0x80
14811da177e4SLinus Torvalds	field	LQICONTINUE	0x40
14821da177e4SLinus Torvalds	field	LQITOIDLE	0x20
14831da177e4SLinus Torvalds	field	LQIPAUSE	0x10
14841da177e4SLinus Torvalds	field	LQORETRY	0x08
14851da177e4SLinus Torvalds	field	LQOCONTINUE	0x04
14861da177e4SLinus Torvalds	field	LQOTOIDLE	0x02
14871da177e4SLinus Torvalds	field	LQOPAUSE	0x01
14881da177e4SLinus Torvalds}
14891da177e4SLinus Torvalds
14901da177e4SLinus Torvalds/*
14911da177e4SLinus Torvalds * SCSI RAM BIST0
14921da177e4SLinus Torvalds */
14931da177e4SLinus Torvaldsregister SCSBIST0 {
14941da177e4SLinus Torvalds	address			0x039
14951da177e4SLinus Torvalds	access_mode	RW
14961da177e4SLinus Torvalds	modes		M_CFG
14971da177e4SLinus Torvalds	field	GSBISTERR	0x40
14981da177e4SLinus Torvalds	field	GSBISTDONE	0x20
14991da177e4SLinus Torvalds	field	GSBISTRUN	0x10
15001da177e4SLinus Torvalds	field	OSBISTERR	0x04
15011da177e4SLinus Torvalds	field	OSBISTDONE	0x02
15021da177e4SLinus Torvalds	field	OSBISTRUN	0x01
15031da177e4SLinus Torvalds}
15041da177e4SLinus Torvalds
15051da177e4SLinus Torvalds/*
15061da177e4SLinus Torvalds * SCSI Sequence Control0
15071da177e4SLinus Torvalds */
15081da177e4SLinus Torvaldsregister SCSISEQ0 {
15091da177e4SLinus Torvalds	address			0x03A
15101da177e4SLinus Torvalds	access_mode	RW
15111da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
15121da177e4SLinus Torvalds	field	TEMODEO		0x80
15131da177e4SLinus Torvalds	field	ENSELO		0x40
15141da177e4SLinus Torvalds	field	ENARBO		0x20
15151da177e4SLinus Torvalds	field	FORCEBUSFREE	0x10
15161da177e4SLinus Torvalds	field	SCSIRSTO	0x01
15171da177e4SLinus Torvalds}
15181da177e4SLinus Torvalds
15191da177e4SLinus Torvalds/*
15201da177e4SLinus Torvalds * SCSI RAM BIST 1
15211da177e4SLinus Torvalds */
15221da177e4SLinus Torvaldsregister SCSBIST1 {
15231da177e4SLinus Torvalds	address			0x03A
15241da177e4SLinus Torvalds	access_mode	RW
15251da177e4SLinus Torvalds	modes		M_CFG
15261da177e4SLinus Torvalds	field	NTBISTERR	0x04
15271da177e4SLinus Torvalds	field	NTBISTDONE	0x02
15281da177e4SLinus Torvalds	field	NTBISTRUN	0x01
15291da177e4SLinus Torvalds}
15301da177e4SLinus Torvalds
15311da177e4SLinus Torvalds/*
15321da177e4SLinus Torvalds * SCSI Sequence Control 1
15331da177e4SLinus Torvalds */
15341da177e4SLinus Torvaldsregister SCSISEQ1 {
15351da177e4SLinus Torvalds	address			0x03B
15361da177e4SLinus Torvalds	access_mode	RW
15371da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
15381da177e4SLinus Torvalds	field	MANUALCTL	0x40
15391da177e4SLinus Torvalds	field	ENSELI		0x20
15401da177e4SLinus Torvalds	field	ENRSELI		0x10
15411da177e4SLinus Torvalds	field	MANUALP		0x0C
15421da177e4SLinus Torvalds	field	ENAUTOATNP	0x02
15431da177e4SLinus Torvalds	field	ALTSTIM		0x01
15441da177e4SLinus Torvalds}
15451da177e4SLinus Torvalds
15461da177e4SLinus Torvalds/*
15471da177e4SLinus Torvalds * SCSI Transfer Control 0
15481da177e4SLinus Torvalds */
15491da177e4SLinus Torvaldsregister SXFRCTL0 {
15501da177e4SLinus Torvalds	address			0x03C
15511da177e4SLinus Torvalds	access_mode	RW
15521da177e4SLinus Torvalds	modes		M_SCSI
15531da177e4SLinus Torvalds	field	DFON		0x80
15541da177e4SLinus Torvalds	field	DFPEXP		0x40
15551da177e4SLinus Torvalds	field	BIOSCANCELEN	0x10
15561da177e4SLinus Torvalds	field	SPIOEN		0x08
15571da177e4SLinus Torvalds}
15581da177e4SLinus Torvalds
15591da177e4SLinus Torvalds/*
15601da177e4SLinus Torvalds * SCSI Transfer Control 1
15611da177e4SLinus Torvalds */
15621da177e4SLinus Torvaldsregister SXFRCTL1 {
15631da177e4SLinus Torvalds	address			0x03D
15641da177e4SLinus Torvalds	access_mode	RW
15651da177e4SLinus Torvalds	modes		M_SCSI
15661da177e4SLinus Torvalds	field	BITBUCKET	0x80
15671da177e4SLinus Torvalds	field	ENSACHK		0x40
15681da177e4SLinus Torvalds	field	ENSPCHK		0x20
15691da177e4SLinus Torvalds	field	STIMESEL	0x18
15701da177e4SLinus Torvalds	field	ENSTIMER	0x04
15711da177e4SLinus Torvalds	field	ACTNEGEN	0x02
15721da177e4SLinus Torvalds	field	STPWEN		0x01
15731da177e4SLinus Torvalds}
15741da177e4SLinus Torvalds
15751da177e4SLinus Torvalds/*
15761da177e4SLinus Torvalds * SCSI Transfer Control 2
15771da177e4SLinus Torvalds */
15781da177e4SLinus Torvaldsregister SXFRCTL2 {
15791da177e4SLinus Torvalds	address			0x03E
15801da177e4SLinus Torvalds	access_mode	RW
15811da177e4SLinus Torvalds	modes		M_SCSI
15821da177e4SLinus Torvalds	field	AUTORSTDIS	0x10
15831da177e4SLinus Torvalds	field	CMDDMAEN	0x08
15841da177e4SLinus Torvalds	field	ASU		0x07
15851da177e4SLinus Torvalds}
15861da177e4SLinus Torvalds
15871da177e4SLinus Torvalds/*
15881da177e4SLinus Torvalds * SCSI Bus Initiator IDs
15891da177e4SLinus Torvalds * Bitmask of observed initiators on the bus.
15901da177e4SLinus Torvalds */
15911da177e4SLinus Torvaldsregister BUSINITID {
15921da177e4SLinus Torvalds	address			0x03C
15931da177e4SLinus Torvalds	access_mode	RW
15941da177e4SLinus Torvalds	modes		M_CFG
15951da177e4SLinus Torvalds	size		2
15961da177e4SLinus Torvalds}
15971da177e4SLinus Torvalds
15981da177e4SLinus Torvalds/*
15991da177e4SLinus Torvalds * Data Length Counters
16001da177e4SLinus Torvalds * Packet byte counter.
16011da177e4SLinus Torvalds */
16021da177e4SLinus Torvaldsregister DLCOUNT {
16031da177e4SLinus Torvalds	address			0x03C
16041da177e4SLinus Torvalds	access_mode	RW
16051da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
16061da177e4SLinus Torvalds	size		3
16071da177e4SLinus Torvalds}
16081da177e4SLinus Torvalds
16091da177e4SLinus Torvalds/*
16101da177e4SLinus Torvalds * Data FIFO Status
16111da177e4SLinus Torvalds */
16121da177e4SLinus Torvaldsregister DFFSTAT {
16131da177e4SLinus Torvalds	address			0x03F
16141da177e4SLinus Torvalds	access_mode	RW
16151da177e4SLinus Torvalds	modes		M_SCSI
16161da177e4SLinus Torvalds	field	FIFO1FREE	0x20
16171da177e4SLinus Torvalds	field	FIFO0FREE	0x10
16181da177e4SLinus Torvalds	/*
16191da177e4SLinus Torvalds	 * On the B, this enum only works
16201da177e4SLinus Torvalds	 * in the read direction.  For writes,
16211da177e4SLinus Torvalds	 * you must use the B version of the
16221da177e4SLinus Torvalds	 * CURRFIFO_0 definition which is defined
16231da177e4SLinus Torvalds	 * as a constant outside of this register
16241da177e4SLinus Torvalds	 * definition to avoid confusing the
16251da177e4SLinus Torvalds	 * register pretty printing code.
16261da177e4SLinus Torvalds	 */
16271da177e4SLinus Torvalds	enum	CURRFIFO	0x03 {
16281da177e4SLinus Torvalds		CURRFIFO_0,
16291da177e4SLinus Torvalds		CURRFIFO_1,
16301da177e4SLinus Torvalds		CURRFIFO_NONE	0x3
16311da177e4SLinus Torvalds	}
16321da177e4SLinus Torvalds}
16331da177e4SLinus Torvalds
16341da177e4SLinus Torvaldsconst B_CURRFIFO_0 0x2
16351da177e4SLinus Torvalds
16361da177e4SLinus Torvalds/*
16371da177e4SLinus Torvalds * SCSI Bus Target IDs
16381da177e4SLinus Torvalds * Bitmask of observed targets on the bus.
16391da177e4SLinus Torvalds */
16401da177e4SLinus Torvaldsregister BUSTARGID {
16411da177e4SLinus Torvalds	address			0x03E
16421da177e4SLinus Torvalds	access_mode	RW
16431da177e4SLinus Torvalds	modes		M_CFG
16441da177e4SLinus Torvalds	size		2
16451da177e4SLinus Torvalds}
16461da177e4SLinus Torvalds
16471da177e4SLinus Torvalds/*
16481da177e4SLinus Torvalds * SCSI Control Signal Out
16491da177e4SLinus Torvalds */
16501da177e4SLinus Torvaldsregister SCSISIGO {
16511da177e4SLinus Torvalds	address			0x040
16521da177e4SLinus Torvalds	access_mode	RW
16531da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
16541da177e4SLinus Torvalds	field	CDO		0x80
16551da177e4SLinus Torvalds	field	IOO		0x40
16561da177e4SLinus Torvalds	field	MSGO		0x20
16571da177e4SLinus Torvalds	field	ATNO		0x10
16581da177e4SLinus Torvalds	field	SELO		0x08
16591da177e4SLinus Torvalds	field	BSYO		0x04
16601da177e4SLinus Torvalds	field	REQO		0x02
16611da177e4SLinus Torvalds	field	ACKO		0x01
16621da177e4SLinus Torvalds/*
16631da177e4SLinus Torvalds * Possible phases to write into SCSISIG0
16641da177e4SLinus Torvalds */
16651da177e4SLinus Torvalds	enum	PHASE_MASK  CDO|IOO|MSGO {
16661da177e4SLinus Torvalds		P_DATAOUT	0x0,
16671da177e4SLinus Torvalds		P_DATAIN	IOO,
16681da177e4SLinus Torvalds		P_DATAOUT_DT	P_DATAOUT|MSGO,
16691da177e4SLinus Torvalds		P_DATAIN_DT	P_DATAIN|MSGO,
16701da177e4SLinus Torvalds		P_COMMAND	CDO,
16711da177e4SLinus Torvalds		P_MESGOUT	CDO|MSGO,
16721da177e4SLinus Torvalds		P_STATUS	CDO|IOO,
16731da177e4SLinus Torvalds		P_MESGIN	CDO|IOO|MSGO
16741da177e4SLinus Torvalds	}
16751da177e4SLinus Torvalds}
16761da177e4SLinus Torvalds
16771da177e4SLinus Torvaldsregister SCSISIGI {
16781da177e4SLinus Torvalds	address			0x041
16791da177e4SLinus Torvalds	access_mode	RO
16801da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
16811da177e4SLinus Torvalds	field	CDI		0x80
16821da177e4SLinus Torvalds	field	IOI		0x40
16831da177e4SLinus Torvalds	field	MSGI		0x20
16841da177e4SLinus Torvalds	field	ATNI		0x10
16851da177e4SLinus Torvalds	field	SELI		0x08
16861da177e4SLinus Torvalds	field	BSYI		0x04
16871da177e4SLinus Torvalds	field	REQI		0x02
16881da177e4SLinus Torvalds	field	ACKI		0x01
16891da177e4SLinus Torvalds/*
16901da177e4SLinus Torvalds * Possible phases in SCSISIGI
16911da177e4SLinus Torvalds */
16921da177e4SLinus Torvalds	enum	PHASE_MASK  CDO|IOO|MSGO {
16931da177e4SLinus Torvalds		P_DATAOUT	0x0,
16941da177e4SLinus Torvalds		P_DATAIN	IOO,
16951da177e4SLinus Torvalds		P_DATAOUT_DT	P_DATAOUT|MSGO,
16961da177e4SLinus Torvalds		P_DATAIN_DT	P_DATAIN|MSGO,
16971da177e4SLinus Torvalds		P_COMMAND	CDO,
16981da177e4SLinus Torvalds		P_MESGOUT	CDO|MSGO,
16991da177e4SLinus Torvalds		P_STATUS	CDO|IOO,
17001da177e4SLinus Torvalds		P_MESGIN	CDO|IOO|MSGO
17011da177e4SLinus Torvalds	}
17021da177e4SLinus Torvalds}
17031da177e4SLinus Torvalds
17041da177e4SLinus Torvalds/*
17051da177e4SLinus Torvalds * Multiple Target IDs
17061da177e4SLinus Torvalds * Bitmask of ids to respond as a target.
17071da177e4SLinus Torvalds */
17081da177e4SLinus Torvaldsregister MULTARGID {
17091da177e4SLinus Torvalds	address			0x040
17101da177e4SLinus Torvalds	access_mode	RW
17111da177e4SLinus Torvalds	modes		M_CFG
17121da177e4SLinus Torvalds	size		2
17131da177e4SLinus Torvalds}
17141da177e4SLinus Torvalds
17151da177e4SLinus Torvalds/*
17161da177e4SLinus Torvalds * SCSI Phase
17171da177e4SLinus Torvalds */
17181da177e4SLinus Torvaldsregister SCSIPHASE {
17191da177e4SLinus Torvalds	address			0x042
17201da177e4SLinus Torvalds	access_mode	RO
17211da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17221da177e4SLinus Torvalds	field	STATUS_PHASE	0x20
17231da177e4SLinus Torvalds	field	COMMAND_PHASE	0x10
17241da177e4SLinus Torvalds	field	MSG_IN_PHASE	0x08
17251da177e4SLinus Torvalds	field	MSG_OUT_PHASE	0x04
17261da177e4SLinus Torvalds	field	DATA_PHASE_MASK	0x03 {
17271da177e4SLinus Torvalds		DATA_OUT_PHASE	0x01,
17281da177e4SLinus Torvalds		DATA_IN_PHASE	0x02
17291da177e4SLinus Torvalds	}
17301da177e4SLinus Torvalds}
17311da177e4SLinus Torvalds
17321da177e4SLinus Torvalds/*
17331da177e4SLinus Torvalds * SCSI Data 0 Image
17341da177e4SLinus Torvalds */
17351da177e4SLinus Torvaldsregister SCSIDAT0_IMG {
17361da177e4SLinus Torvalds	address			0x043
17371da177e4SLinus Torvalds	access_mode	RW
17381da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17391da177e4SLinus Torvalds}
17401da177e4SLinus Torvalds
17411da177e4SLinus Torvalds/*
17421da177e4SLinus Torvalds * SCSI Latched Data
17431da177e4SLinus Torvalds */
17441da177e4SLinus Torvaldsregister SCSIDAT {
17451da177e4SLinus Torvalds	address			0x044
17461da177e4SLinus Torvalds	access_mode	RW
17471da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17481da177e4SLinus Torvalds	size		2
17491da177e4SLinus Torvalds}
17501da177e4SLinus Torvalds
17511da177e4SLinus Torvalds/*
17521da177e4SLinus Torvalds * SCSI Data Bus
17531da177e4SLinus Torvalds */
17541da177e4SLinus Torvaldsregister SCSIBUS {
17551da177e4SLinus Torvalds	address			0x046
17561da177e4SLinus Torvalds	access_mode	RW
17571da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17581da177e4SLinus Torvalds	size		2
17591da177e4SLinus Torvalds}
17601da177e4SLinus Torvalds
17611da177e4SLinus Torvalds/*
17621da177e4SLinus Torvalds * Target ID In
17631da177e4SLinus Torvalds */
17641da177e4SLinus Torvaldsregister TARGIDIN {
17651da177e4SLinus Torvalds	address			0x048
17661da177e4SLinus Torvalds	access_mode	RO
17671da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17681da177e4SLinus Torvalds	field	CLKOUT		0x80
17691da177e4SLinus Torvalds	field	TARGID		0x0F
17701da177e4SLinus Torvalds}
17711da177e4SLinus Torvalds
17721da177e4SLinus Torvalds/*
17731da177e4SLinus Torvalds * Selection/Reselection ID
17741da177e4SLinus Torvalds * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
17751da177e4SLinus Torvalds * device did not set its own ID.
17761da177e4SLinus Torvalds */
17771da177e4SLinus Torvaldsregister SELID {
17781da177e4SLinus Torvalds	address			0x049
17791da177e4SLinus Torvalds	access_mode	RW
17801da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17811da177e4SLinus Torvalds	field	SELID_MASK	0xf0
17821da177e4SLinus Torvalds	field	ONEBIT		0x08
17831da177e4SLinus Torvalds}
17841da177e4SLinus Torvalds
17851da177e4SLinus Torvalds/*
17861da177e4SLinus Torvalds * SCSI Block Control
17871da177e4SLinus Torvalds * Controls Bus type and channel selection.  SELWIDE allows for the
17881da177e4SLinus Torvalds * coexistence of 8bit and 16bit devices on a wide bus.
17891da177e4SLinus Torvalds */
17901da177e4SLinus Torvaldsregister SBLKCTL {
17911da177e4SLinus Torvalds	address			0x04A
17921da177e4SLinus Torvalds	access_mode	RW
17931da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
17941da177e4SLinus Torvalds	field	DIAGLEDEN	0x80
17951da177e4SLinus Torvalds	field	DIAGLEDON	0x40
17961da177e4SLinus Torvalds	field	ENAB40		0x08	/* LVD transceiver active */
17971da177e4SLinus Torvalds	field	ENAB20		0x04	/* SE/HVD transceiver active */
17981da177e4SLinus Torvalds	field	SELWIDE		0x02
17991da177e4SLinus Torvalds}
18001da177e4SLinus Torvalds
18011da177e4SLinus Torvalds/*
18021da177e4SLinus Torvalds * Option Mode
18031da177e4SLinus Torvalds */
18041da177e4SLinus Torvaldsregister OPTIONMODE {
18051da177e4SLinus Torvalds	address			0x04A
18061da177e4SLinus Torvalds	access_mode	RW
18071da177e4SLinus Torvalds	modes		M_CFG
18081da177e4SLinus Torvalds	field	BIOSCANCTL		0x80
18091da177e4SLinus Torvalds	field	AUTOACKEN		0x40
18101da177e4SLinus Torvalds	field	BIASCANCTL		0x20
18111da177e4SLinus Torvalds	field	BUSFREEREV		0x10
18121da177e4SLinus Torvalds	field	ENDGFORMCHK		0x04
18131da177e4SLinus Torvalds	field	AUTO_MSGOUT_DE		0x02
18141da177e4SLinus Torvalds	mask	OPTIONMODE_DEFAULTS	AUTO_MSGOUT_DE
18151da177e4SLinus Torvalds}
18161da177e4SLinus Torvalds
18171da177e4SLinus Torvalds/*
18181da177e4SLinus Torvalds * SCSI Status 0
18191da177e4SLinus Torvalds */
18201da177e4SLinus Torvaldsregister SSTAT0	{
18211da177e4SLinus Torvalds	address			0x04B
18221da177e4SLinus Torvalds	access_mode	RO
18231da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
18241da177e4SLinus Torvalds	field	TARGET		0x80	/* Board acting as target */
18251da177e4SLinus Torvalds	field	SELDO		0x40	/* Selection Done */
18261da177e4SLinus Torvalds	field	SELDI		0x20	/* Board has been selected */
18271da177e4SLinus Torvalds	field	SELINGO		0x10	/* Selection In Progress */
18281da177e4SLinus Torvalds	field	IOERR		0x08	/* LVD Tranceiver mode changed */
18291da177e4SLinus Torvalds	field	OVERRUN		0x04	/* SCSI Offset overrun detected */
18301da177e4SLinus Torvalds	field	SPIORDY		0x02	/* SCSI PIO Ready */
18311da177e4SLinus Torvalds	field	ARBDO		0x01	/* Arbitration Done Out */
18321da177e4SLinus Torvalds}
18331da177e4SLinus Torvalds
18341da177e4SLinus Torvalds/*
18351da177e4SLinus Torvalds * Clear SCSI Interrupt 0
18361da177e4SLinus Torvalds * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
18371da177e4SLinus Torvalds */
18381da177e4SLinus Torvaldsregister CLRSINT0 {
18391da177e4SLinus Torvalds	address			0x04B
18401da177e4SLinus Torvalds	access_mode	WO
18411da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
18421da177e4SLinus Torvalds	field	CLRSELDO	0x40
18431da177e4SLinus Torvalds	field	CLRSELDI	0x20
18441da177e4SLinus Torvalds	field	CLRSELINGO	0x10
18451da177e4SLinus Torvalds	field	CLRIOERR	0x08
18461da177e4SLinus Torvalds	field	CLROVERRUN	0x04
18471da177e4SLinus Torvalds	field	CLRSPIORDY	0x02
18481da177e4SLinus Torvalds	field	CLRARBDO	0x01
18491da177e4SLinus Torvalds}
18501da177e4SLinus Torvalds
18511da177e4SLinus Torvalds/*
18521da177e4SLinus Torvalds * SCSI Interrupt Mode 0
18531da177e4SLinus Torvalds * Setting any bit will enable the corresponding function
18541da177e4SLinus Torvalds * in SIMODE0 to interrupt via the IRQ pin.
18551da177e4SLinus Torvalds */
18561da177e4SLinus Torvaldsregister SIMODE0 {
18571da177e4SLinus Torvalds	address			0x04B
18581da177e4SLinus Torvalds	access_mode	RW
18591da177e4SLinus Torvalds	modes		M_CFG
18601da177e4SLinus Torvalds	field	ENSELDO		0x40
18611da177e4SLinus Torvalds	field	ENSELDI		0x20
18621da177e4SLinus Torvalds	field	ENSELINGO	0x10
18631da177e4SLinus Torvalds	field	ENIOERR		0x08
18641da177e4SLinus Torvalds	field	ENOVERRUN	0x04
18651da177e4SLinus Torvalds	field	ENSPIORDY	0x02
18661da177e4SLinus Torvalds	field	ENARBDO		0x01
18671da177e4SLinus Torvalds}
18681da177e4SLinus Torvalds
18691da177e4SLinus Torvalds/*
18701da177e4SLinus Torvalds * SCSI Status 1
18711da177e4SLinus Torvalds */
18721da177e4SLinus Torvaldsregister SSTAT1 {
18731da177e4SLinus Torvalds	address			0x04C
18741da177e4SLinus Torvalds	access_mode	RO
18751da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
18761da177e4SLinus Torvalds	field	SELTO		0x80
18771da177e4SLinus Torvalds	field	ATNTARG 	0x40
18781da177e4SLinus Torvalds	field	SCSIRSTI	0x20
18791da177e4SLinus Torvalds	field	PHASEMIS	0x10
18801da177e4SLinus Torvalds	field	BUSFREE		0x08
18811da177e4SLinus Torvalds	field	SCSIPERR	0x04
18821da177e4SLinus Torvalds	field	STRB2FAST	0x02
18831da177e4SLinus Torvalds	field	REQINIT		0x01
18841da177e4SLinus Torvalds}
18851da177e4SLinus Torvalds
18861da177e4SLinus Torvalds/*
18871da177e4SLinus Torvalds * Clear SCSI Interrupt 1
18881da177e4SLinus Torvalds * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
18891da177e4SLinus Torvalds */
18901da177e4SLinus Torvaldsregister CLRSINT1 {
18911da177e4SLinus Torvalds	address			0x04C
18921da177e4SLinus Torvalds	access_mode	WO
18931da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
18941da177e4SLinus Torvalds	field	CLRSELTIMEO	0x80
18951da177e4SLinus Torvalds	field	CLRATNO		0x40
18961da177e4SLinus Torvalds	field	CLRSCSIRSTI	0x20
18971da177e4SLinus Torvalds	field	CLRBUSFREE	0x08
18981da177e4SLinus Torvalds	field	CLRSCSIPERR	0x04
18991da177e4SLinus Torvalds	field	CLRSTRB2FAST	0x02
19001da177e4SLinus Torvalds	field	CLRREQINIT	0x01
19011da177e4SLinus Torvalds}
19021da177e4SLinus Torvalds
19031da177e4SLinus Torvalds/*
19041da177e4SLinus Torvalds * SCSI Status 2
19051da177e4SLinus Torvalds */
19061da177e4SLinus Torvaldsregister SSTAT2 {
19071da177e4SLinus Torvalds	address			0x04d
19081da177e4SLinus Torvalds	access_mode	RO
19091da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
19101da177e4SLinus Torvalds	field	BUSFREETIME	0xc0 {
19111da177e4SLinus Torvalds		BUSFREE_LQO	0x40,
19121da177e4SLinus Torvalds		BUSFREE_DFF0	0x80,
19131da177e4SLinus Torvalds		BUSFREE_DFF1	0xC0
19141da177e4SLinus Torvalds	}
19151da177e4SLinus Torvalds	field	NONPACKREQ	0x20
19161da177e4SLinus Torvalds	field	EXP_ACTIVE	0x10	/* SCSI Expander Active */
19171da177e4SLinus Torvalds	field	BSYX		0x08	/* Busy Expander */
19181da177e4SLinus Torvalds	field	WIDE_RES	0x04	/* Modes 0 and 1 only */
19191da177e4SLinus Torvalds	field	SDONE		0x02	/* Modes 0 and 1 only */
19201da177e4SLinus Torvalds	field	DMADONE		0x01	/* Modes 0 and 1 only */
19211da177e4SLinus Torvalds}
19221da177e4SLinus Torvalds
19231da177e4SLinus Torvalds/*
19241da177e4SLinus Torvalds * Clear SCSI Interrupt 2
19251da177e4SLinus Torvalds */
19261da177e4SLinus Torvaldsregister CLRSINT2 {
19271da177e4SLinus Torvalds	address			0x04D
19281da177e4SLinus Torvalds	access_mode	WO
19291da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
19301da177e4SLinus Torvalds	field	CLRNONPACKREQ	0x20
19311da177e4SLinus Torvalds	field	CLRWIDE_RES	0x04	/* Modes 0 and 1 only */
19321da177e4SLinus Torvalds	field	CLRSDONE	0x02	/* Modes 0 and 1 only */
19331da177e4SLinus Torvalds	field	CLRDMADONE	0x01	/* Modes 0 and 1 only */
19341da177e4SLinus Torvalds}
19351da177e4SLinus Torvalds
19361da177e4SLinus Torvalds/*
19371da177e4SLinus Torvalds * SCSI Interrupt Mode 2
19381da177e4SLinus Torvalds */
19391da177e4SLinus Torvaldsregister SIMODE2 {
19401da177e4SLinus Torvalds	address			0x04D
19411da177e4SLinus Torvalds	access_mode	RW
19421da177e4SLinus Torvalds	modes		M_CFG
19431da177e4SLinus Torvalds	field	ENWIDE_RES	0x04
19441da177e4SLinus Torvalds	field	ENSDONE		0x02
19451da177e4SLinus Torvalds	field	ENDMADONE	0x01
19461da177e4SLinus Torvalds}
19471da177e4SLinus Torvalds
19481da177e4SLinus Torvalds/*
19491da177e4SLinus Torvalds * Physical Error Diagnosis
19501da177e4SLinus Torvalds */
19511da177e4SLinus Torvaldsregister PERRDIAG {
19521da177e4SLinus Torvalds	address			0x04E
19531da177e4SLinus Torvalds	access_mode	RO
19541da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
19551da177e4SLinus Torvalds	field	HIZERO		0x80
19561da177e4SLinus Torvalds	field	HIPERR		0x40
19571da177e4SLinus Torvalds	field	PREVPHASE	0x20
19581da177e4SLinus Torvalds	field	PARITYERR	0x10
19591da177e4SLinus Torvalds	field	AIPERR		0x08
19601da177e4SLinus Torvalds	field	CRCERR		0x04
19611da177e4SLinus Torvalds	field	DGFORMERR	0x02
19621da177e4SLinus Torvalds	field	DTERR		0x01
19631da177e4SLinus Torvalds}
19641da177e4SLinus Torvalds
19651da177e4SLinus Torvalds/*
19661da177e4SLinus Torvalds * LQI Manager Current State
19671da177e4SLinus Torvalds */
19681da177e4SLinus Torvaldsregister LQISTATE {
19691da177e4SLinus Torvalds	address			0x04E
19701da177e4SLinus Torvalds	access_mode	RO
19711da177e4SLinus Torvalds	modes		M_CFG
19721da177e4SLinus Torvalds}
19731da177e4SLinus Torvalds
19741da177e4SLinus Torvalds/*
19751da177e4SLinus Torvalds * SCSI Offset Count
19761da177e4SLinus Torvalds */
19771da177e4SLinus Torvaldsregister SOFFCNT {
19781da177e4SLinus Torvalds	address			0x04F
19791da177e4SLinus Torvalds	access_mode	RO
19801da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
19811da177e4SLinus Torvalds}
19821da177e4SLinus Torvalds
19831da177e4SLinus Torvalds/*
19841da177e4SLinus Torvalds * LQO Manager Current State
19851da177e4SLinus Torvalds */
19861da177e4SLinus Torvaldsregister LQOSTATE {
19871da177e4SLinus Torvalds	address			0x04F
19881da177e4SLinus Torvalds	access_mode	RO
19891da177e4SLinus Torvalds	modes		M_CFG
19901da177e4SLinus Torvalds}
19911da177e4SLinus Torvalds
19921da177e4SLinus Torvalds/*
19931da177e4SLinus Torvalds * LQI Manager Status
19941da177e4SLinus Torvalds */
19951da177e4SLinus Torvaldsregister LQISTAT0 {
19961da177e4SLinus Torvalds	address			0x050
19971da177e4SLinus Torvalds	access_mode	RO
19981da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
19991da177e4SLinus Torvalds	field	LQIATNQAS	0x20
20001da177e4SLinus Torvalds	field	LQICRCT1	0x10
20011da177e4SLinus Torvalds	field	LQICRCT2	0x08
20021da177e4SLinus Torvalds	field	LQIBADLQT	0x04
20031da177e4SLinus Torvalds	field	LQIATNLQ	0x02
20041da177e4SLinus Torvalds	field	LQIATNCMD	0x01
20051da177e4SLinus Torvalds}
20061da177e4SLinus Torvalds
20071da177e4SLinus Torvalds/*
20081da177e4SLinus Torvalds * Clear LQI Interrupts 0
20091da177e4SLinus Torvalds */
20101da177e4SLinus Torvaldsregister CLRLQIINT0 {
20111da177e4SLinus Torvalds	address			0x050
20121da177e4SLinus Torvalds	access_mode	WO
20131da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
20141da177e4SLinus Torvalds	field	CLRLQIATNQAS	0x20
20151da177e4SLinus Torvalds	field	CLRLQICRCT1	0x10
20161da177e4SLinus Torvalds	field	CLRLQICRCT2	0x08
20171da177e4SLinus Torvalds	field	CLRLQIBADLQT	0x04
20181da177e4SLinus Torvalds	field	CLRLQIATNLQ	0x02
20191da177e4SLinus Torvalds	field	CLRLQIATNCMD	0x01
20201da177e4SLinus Torvalds}
20211da177e4SLinus Torvalds
20221da177e4SLinus Torvalds/*
20231da177e4SLinus Torvalds * LQI Manager Interrupt Mode 0
20241da177e4SLinus Torvalds */
20251da177e4SLinus Torvaldsregister LQIMODE0 {
20261da177e4SLinus Torvalds	address			0x050
20271da177e4SLinus Torvalds	access_mode	RW
20281da177e4SLinus Torvalds	modes		M_CFG
20291da177e4SLinus Torvalds	field	ENLQIATNQASK	0x20
20301da177e4SLinus Torvalds	field	ENLQICRCT1	0x10
20311da177e4SLinus Torvalds	field	ENLQICRCT2	0x08
20321da177e4SLinus Torvalds	field	ENLQIBADLQT	0x04
20331da177e4SLinus Torvalds	field	ENLQIATNLQ	0x02
20341da177e4SLinus Torvalds	field	ENLQIATNCMD	0x01
20351da177e4SLinus Torvalds}
20361da177e4SLinus Torvalds
20371da177e4SLinus Torvalds/*
20381da177e4SLinus Torvalds * LQI Manager Status 1
20391da177e4SLinus Torvalds */
20401da177e4SLinus Torvaldsregister LQISTAT1 {
20411da177e4SLinus Torvalds	address			0x051
20421da177e4SLinus Torvalds	access_mode	RO
20431da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
20441da177e4SLinus Torvalds	field	LQIPHASE_LQ	0x80
20451da177e4SLinus Torvalds	field	LQIPHASE_NLQ	0x40
20461da177e4SLinus Torvalds	field	LQIABORT	0x20
20471da177e4SLinus Torvalds	field	LQICRCI_LQ	0x10
20481da177e4SLinus Torvalds	field	LQICRCI_NLQ	0x08
20491da177e4SLinus Torvalds	field	LQIBADLQI	0x04
20501da177e4SLinus Torvalds	field	LQIOVERI_LQ	0x02
20511da177e4SLinus Torvalds	field	LQIOVERI_NLQ	0x01
20521da177e4SLinus Torvalds}
20531da177e4SLinus Torvalds
20541da177e4SLinus Torvalds/*
20551da177e4SLinus Torvalds * Clear LQI Manager Interrupts1
20561da177e4SLinus Torvalds */
20571da177e4SLinus Torvaldsregister CLRLQIINT1 {
20581da177e4SLinus Torvalds	address			0x051
20591da177e4SLinus Torvalds	access_mode	WO
20601da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
20611da177e4SLinus Torvalds	field	CLRLQIPHASE_LQ	0x80
20621da177e4SLinus Torvalds	field	CLRLQIPHASE_NLQ	0x40
20631da177e4SLinus Torvalds	field	CLRLIQABORT	0x20
20641da177e4SLinus Torvalds	field	CLRLQICRCI_LQ	0x10
20651da177e4SLinus Torvalds	field	CLRLQICRCI_NLQ	0x08
20661da177e4SLinus Torvalds	field	CLRLQIBADLQI	0x04
20671da177e4SLinus Torvalds	field	CLRLQIOVERI_LQ	0x02
20681da177e4SLinus Torvalds	field	CLRLQIOVERI_NLQ	0x01
20691da177e4SLinus Torvalds}
20701da177e4SLinus Torvalds
20711da177e4SLinus Torvalds/*
20721da177e4SLinus Torvalds * LQI Manager Interrupt Mode 1
20731da177e4SLinus Torvalds */
20741da177e4SLinus Torvaldsregister LQIMODE1 {
20751da177e4SLinus Torvalds	address			0x051
20761da177e4SLinus Torvalds	access_mode	RW
20771da177e4SLinus Torvalds	modes		M_CFG
20781da177e4SLinus Torvalds	field	ENLQIPHASE_LQ	0x80	/* LQIPHASE1 */
20791da177e4SLinus Torvalds	field	ENLQIPHASE_NLQ	0x40	/* LQIPHASE2 */
20801da177e4SLinus Torvalds	field	ENLIQABORT	0x20
20811da177e4SLinus Torvalds	field	ENLQICRCI_LQ	0x10	/* LQICRCI1 */
20821da177e4SLinus Torvalds	field	ENLQICRCI_NLQ	0x08	/* LQICRCI2 */
20831da177e4SLinus Torvalds	field	ENLQIBADLQI	0x04
20841da177e4SLinus Torvalds	field	ENLQIOVERI_LQ	0x02	/* LQIOVERI1 */
20851da177e4SLinus Torvalds	field	ENLQIOVERI_NLQ	0x01	/* LQIOVERI2 */
20861da177e4SLinus Torvalds}
20871da177e4SLinus Torvalds
20881da177e4SLinus Torvalds/*
20891da177e4SLinus Torvalds * LQI Manager Status 2
20901da177e4SLinus Torvalds */
20911da177e4SLinus Torvaldsregister LQISTAT2 {
20921da177e4SLinus Torvalds	address			0x052
20931da177e4SLinus Torvalds	access_mode	RO
20941da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
20951da177e4SLinus Torvalds	field	PACKETIZED	0x80
20961da177e4SLinus Torvalds	field	LQIPHASE_OUTPKT	0x40
20971da177e4SLinus Torvalds	field	LQIWORKONLQ	0x20
20981da177e4SLinus Torvalds	field	LQIWAITFIFO	0x10
20991da177e4SLinus Torvalds	field	LQISTOPPKT	0x08
21001da177e4SLinus Torvalds	field	LQISTOPLQ	0x04
21011da177e4SLinus Torvalds	field	LQISTOPCMD	0x02
21021da177e4SLinus Torvalds	field	LQIGSAVAIL	0x01
21031da177e4SLinus Torvalds}
21041da177e4SLinus Torvalds
21051da177e4SLinus Torvalds/*
21061da177e4SLinus Torvalds * SCSI Status 3
21071da177e4SLinus Torvalds */
21081da177e4SLinus Torvaldsregister SSTAT3 {
21091da177e4SLinus Torvalds	address			0x053
21101da177e4SLinus Torvalds	access_mode	RO
21111da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
21121da177e4SLinus Torvalds	field	NTRAMPERR	0x02
21131da177e4SLinus Torvalds	field	OSRAMPERR	0x01
21141da177e4SLinus Torvalds}
21151da177e4SLinus Torvalds
21161da177e4SLinus Torvalds/*
21171da177e4SLinus Torvalds * Clear SCSI Status 3
21181da177e4SLinus Torvalds */
21191da177e4SLinus Torvaldsregister CLRSINT3 {
21201da177e4SLinus Torvalds	address			0x053
21211da177e4SLinus Torvalds	access_mode	WO
21221da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
21231da177e4SLinus Torvalds	field	CLRNTRAMPERR	0x02
21241da177e4SLinus Torvalds	field	CLROSRAMPERR	0x01
21251da177e4SLinus Torvalds}
21261da177e4SLinus Torvalds
21271da177e4SLinus Torvalds/*
21281da177e4SLinus Torvalds * SCSI Interrupt Mode 3
21291da177e4SLinus Torvalds */
21301da177e4SLinus Torvaldsregister SIMODE3 {
21311da177e4SLinus Torvalds	address			0x053
21321da177e4SLinus Torvalds	access_mode	RW
21331da177e4SLinus Torvalds	modes		M_CFG
21341da177e4SLinus Torvalds	field	ENNTRAMPERR	0x02
21351da177e4SLinus Torvalds	field	ENOSRAMPERR	0x01
21361da177e4SLinus Torvalds}
21371da177e4SLinus Torvalds
21381da177e4SLinus Torvalds/*
21391da177e4SLinus Torvalds * LQO Manager Status 0
21401da177e4SLinus Torvalds */
21411da177e4SLinus Torvaldsregister LQOSTAT0 {
21421da177e4SLinus Torvalds	address			0x054
21431da177e4SLinus Torvalds	access_mode	RO
21441da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
21451da177e4SLinus Torvalds	field	LQOTARGSCBPERR	0x10
21461da177e4SLinus Torvalds	field	LQOSTOPT2	0x08
21471da177e4SLinus Torvalds	field	LQOATNLQ	0x04
21481da177e4SLinus Torvalds	field	LQOATNPKT	0x02
21491da177e4SLinus Torvalds	field	LQOTCRC		0x01
21501da177e4SLinus Torvalds}
21511da177e4SLinus Torvalds
21521da177e4SLinus Torvalds/*
21531da177e4SLinus Torvalds * Clear LQO Manager interrupt 0
21541da177e4SLinus Torvalds */
21551da177e4SLinus Torvaldsregister CLRLQOINT0 {
21561da177e4SLinus Torvalds	address			0x054
21571da177e4SLinus Torvalds	access_mode	WO
21581da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
21591da177e4SLinus Torvalds	field	CLRLQOTARGSCBPERR	0x10
21601da177e4SLinus Torvalds	field	CLRLQOSTOPT2		0x08
21611da177e4SLinus Torvalds	field	CLRLQOATNLQ		0x04
21621da177e4SLinus Torvalds	field	CLRLQOATNPKT		0x02
21631da177e4SLinus Torvalds	field	CLRLQOTCRC		0x01
21641da177e4SLinus Torvalds}
21651da177e4SLinus Torvalds
21661da177e4SLinus Torvalds/*
21671da177e4SLinus Torvalds * LQO Manager Interrupt Mode 0
21681da177e4SLinus Torvalds */
21691da177e4SLinus Torvaldsregister LQOMODE0 {
21701da177e4SLinus Torvalds	address			0x054
21711da177e4SLinus Torvalds	access_mode	RW
21721da177e4SLinus Torvalds	modes		M_CFG
21731da177e4SLinus Torvalds	field	ENLQOTARGSCBPERR	0x10
21741da177e4SLinus Torvalds	field	ENLQOSTOPT2		0x08
21751da177e4SLinus Torvalds	field	ENLQOATNLQ		0x04
21761da177e4SLinus Torvalds	field	ENLQOATNPKT		0x02
21771da177e4SLinus Torvalds	field	ENLQOTCRC		0x01
21781da177e4SLinus Torvalds}
21791da177e4SLinus Torvalds
21801da177e4SLinus Torvalds/*
21811da177e4SLinus Torvalds * LQO Manager Status 1
21821da177e4SLinus Torvalds */
21831da177e4SLinus Torvaldsregister LQOSTAT1 {
21841da177e4SLinus Torvalds	address			0x055
21851da177e4SLinus Torvalds	access_mode	RO
21861da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
21871da177e4SLinus Torvalds	field	LQOINITSCBPERR	0x10
21881da177e4SLinus Torvalds	field	LQOSTOPI2	0x08
21891da177e4SLinus Torvalds	field	LQOBADQAS	0x04
21901da177e4SLinus Torvalds	field	LQOBUSFREE	0x02
21911da177e4SLinus Torvalds	field	LQOPHACHGINPKT	0x01
21921da177e4SLinus Torvalds}
21931da177e4SLinus Torvalds
21941da177e4SLinus Torvalds/*
21951da177e4SLinus Torvalds * Clear LOQ Interrupt 1
21961da177e4SLinus Torvalds */
21971da177e4SLinus Torvaldsregister CLRLQOINT1 {
21981da177e4SLinus Torvalds	address			0x055
21991da177e4SLinus Torvalds	access_mode	WO
22001da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
22011da177e4SLinus Torvalds	field	CLRLQOINITSCBPERR	0x10
22021da177e4SLinus Torvalds	field	CLRLQOSTOPI2		0x08
22031da177e4SLinus Torvalds	field	CLRLQOBADQAS		0x04
22041da177e4SLinus Torvalds	field	CLRLQOBUSFREE		0x02
22051da177e4SLinus Torvalds	field	CLRLQOPHACHGINPKT	0x01
22061da177e4SLinus Torvalds}
22071da177e4SLinus Torvalds
22081da177e4SLinus Torvalds/*
22091da177e4SLinus Torvalds * LQO Manager Interrupt Mode 1
22101da177e4SLinus Torvalds */
22111da177e4SLinus Torvaldsregister LQOMODE1 {
22121da177e4SLinus Torvalds	address			0x055
22131da177e4SLinus Torvalds	access_mode	RW
22141da177e4SLinus Torvalds	modes		M_CFG
22151da177e4SLinus Torvalds	field	ENLQOINITSCBPERR	0x10
22161da177e4SLinus Torvalds	field	ENLQOSTOPI2		0x08
22171da177e4SLinus Torvalds	field	ENLQOBADQAS		0x04
22181da177e4SLinus Torvalds	field	ENLQOBUSFREE		0x02
22191da177e4SLinus Torvalds	field	ENLQOPHACHGINPKT	0x01
22201da177e4SLinus Torvalds}
22211da177e4SLinus Torvalds
22221da177e4SLinus Torvalds/*
22231da177e4SLinus Torvalds * LQO Manager Status 2
22241da177e4SLinus Torvalds */
22251da177e4SLinus Torvaldsregister LQOSTAT2 {
22261da177e4SLinus Torvalds	address			0x056
22271da177e4SLinus Torvalds	access_mode	RO
22281da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
22291da177e4SLinus Torvalds	field	LQOPKT		0xE0
22301da177e4SLinus Torvalds	field	LQOWAITFIFO	0x10
22311da177e4SLinus Torvalds	field	LQOPHACHGOUTPKT	0x02	/* outside of packet boundaries. */
22321da177e4SLinus Torvalds	field	LQOSTOP0	0x01	/* Stopped after sending all packets */
22331da177e4SLinus Torvalds}
22341da177e4SLinus Torvalds
22351da177e4SLinus Torvalds/*
22361da177e4SLinus Torvalds * Output Synchronizer Space Count
22371da177e4SLinus Torvalds */
22381da177e4SLinus Torvaldsregister OS_SPACE_CNT {
22391da177e4SLinus Torvalds	address			0x056
22401da177e4SLinus Torvalds	access_mode	RO
22411da177e4SLinus Torvalds	modes		M_CFG
22421da177e4SLinus Torvalds}
22431da177e4SLinus Torvalds
22441da177e4SLinus Torvalds/*
22451da177e4SLinus Torvalds * SCSI Interrupt Mode 1
22461da177e4SLinus Torvalds * Setting any bit will enable the corresponding function
22471da177e4SLinus Torvalds * in SIMODE1 to interrupt via the IRQ pin.
22481da177e4SLinus Torvalds */
22491da177e4SLinus Torvaldsregister SIMODE1 {
22501da177e4SLinus Torvalds	address			0x057
22511da177e4SLinus Torvalds	access_mode	RW
22521da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
22531da177e4SLinus Torvalds	field	ENSELTIMO	0x80
22541da177e4SLinus Torvalds	field	ENATNTARG	0x40
22551da177e4SLinus Torvalds	field	ENSCSIRST	0x20
22561da177e4SLinus Torvalds	field	ENPHASEMIS	0x10
22571da177e4SLinus Torvalds	field	ENBUSFREE	0x08
22581da177e4SLinus Torvalds	field	ENSCSIPERR	0x04
22591da177e4SLinus Torvalds	field	ENSTRB2FAST	0x02
22601da177e4SLinus Torvalds	field	ENREQINIT	0x01
22611da177e4SLinus Torvalds}
22621da177e4SLinus Torvalds
22631da177e4SLinus Torvalds/*
22641da177e4SLinus Torvalds * Good Status FIFO
22651da177e4SLinus Torvalds */
22661da177e4SLinus Torvaldsregister GSFIFO {
22671da177e4SLinus Torvalds	address			0x058
22681da177e4SLinus Torvalds	access_mode	RO
22691da177e4SLinus Torvalds	size		2
22701da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_SCSI
22711da177e4SLinus Torvalds}
22721da177e4SLinus Torvalds
22731da177e4SLinus Torvalds/*
22741da177e4SLinus Torvalds * Data FIFO SCSI Transfer Control
22751da177e4SLinus Torvalds */
22761da177e4SLinus Torvaldsregister DFFSXFRCTL {
22771da177e4SLinus Torvalds	address			0x05A
22781da177e4SLinus Torvalds	access_mode	RW
22791da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
22801da177e4SLinus Torvalds	field	DFFBITBUCKET	0x08
22811da177e4SLinus Torvalds	field	CLRSHCNT	0x04
22821da177e4SLinus Torvalds	field	CLRCHN		0x02
22831da177e4SLinus Torvalds	field	RSTCHN		0x01
22841da177e4SLinus Torvalds}
22851da177e4SLinus Torvalds
22861da177e4SLinus Torvalds/*
22871da177e4SLinus Torvalds * Next SCSI Control Block
22881da177e4SLinus Torvalds */
22891da177e4SLinus Torvaldsregister NEXTSCB {
22901da177e4SLinus Torvalds	address			0x05A
22911da177e4SLinus Torvalds	access_mode	RW
22921da177e4SLinus Torvalds	size		2
22931da177e4SLinus Torvalds	modes		M_SCSI
22941da177e4SLinus Torvalds}
22951da177e4SLinus Torvalds
22961da177e4SLinus Torvalds/* Rev B only. */
22971da177e4SLinus Torvaldsregister LQOSCSCTL {
22981da177e4SLinus Torvalds	address			0x05A
22991da177e4SLinus Torvalds	access_mode	RW
23001da177e4SLinus Torvalds	size		1
23011da177e4SLinus Torvalds	modes		M_CFG
23021da177e4SLinus Torvalds	field		LQOH2A_VERSION	0x80
23031da177e4SLinus Torvalds	field		LQONOCHKOVER	0x01
23041da177e4SLinus Torvalds}
23051da177e4SLinus Torvalds
23061da177e4SLinus Torvalds/*
23071da177e4SLinus Torvalds * SEQ Interrupts
23081da177e4SLinus Torvalds */
23091da177e4SLinus Torvaldsregister SEQINTSRC {
23101da177e4SLinus Torvalds	address			0x05B
23111da177e4SLinus Torvalds	access_mode	RO
23121da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
23131da177e4SLinus Torvalds	field	CTXTDONE	0x40
23141da177e4SLinus Torvalds	field	SAVEPTRS	0x20
23151da177e4SLinus Torvalds	field	CFG4DATA	0x10
23161da177e4SLinus Torvalds	field	CFG4ISTAT	0x08
23171da177e4SLinus Torvalds	field	CFG4TSTAT	0x04
23181da177e4SLinus Torvalds	field	CFG4ICMD	0x02
23191da177e4SLinus Torvalds	field	CFG4TCMD	0x01
23201da177e4SLinus Torvalds}
23211da177e4SLinus Torvalds
23221da177e4SLinus Torvalds/*
23231da177e4SLinus Torvalds * Clear Arp Interrupts
23241da177e4SLinus Torvalds */
23251da177e4SLinus Torvaldsregister CLRSEQINTSRC {
23261da177e4SLinus Torvalds	address			0x05B
23271da177e4SLinus Torvalds	access_mode	WO
23281da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
23291da177e4SLinus Torvalds	field	CLRCTXTDONE	0x40
23301da177e4SLinus Torvalds	field	CLRSAVEPTRS	0x20
23311da177e4SLinus Torvalds	field	CLRCFG4DATA	0x10
23321da177e4SLinus Torvalds	field	CLRCFG4ISTAT	0x08
23331da177e4SLinus Torvalds	field	CLRCFG4TSTAT	0x04
23341da177e4SLinus Torvalds	field	CLRCFG4ICMD	0x02
23351da177e4SLinus Torvalds	field	CLRCFG4TCMD	0x01
23361da177e4SLinus Torvalds}
23371da177e4SLinus Torvalds
23381da177e4SLinus Torvalds/*
23391da177e4SLinus Torvalds * SEQ Interrupt Enabled (Shared)
23401da177e4SLinus Torvalds */
23411da177e4SLinus Torvaldsregister SEQIMODE {
23421da177e4SLinus Torvalds	address			0x05C
23431da177e4SLinus Torvalds	access_mode	RW
23441da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
23451da177e4SLinus Torvalds	field	ENCTXTDONE	0x40
23461da177e4SLinus Torvalds	field	ENSAVEPTRS	0x20
23471da177e4SLinus Torvalds	field	ENCFG4DATA	0x10
23481da177e4SLinus Torvalds	field	ENCFG4ISTAT	0x08
23491da177e4SLinus Torvalds	field	ENCFG4TSTAT	0x04
23501da177e4SLinus Torvalds	field	ENCFG4ICMD	0x02
23511da177e4SLinus Torvalds	field	ENCFG4TCMD	0x01
23521da177e4SLinus Torvalds}
23531da177e4SLinus Torvalds
23541da177e4SLinus Torvalds/*
23551da177e4SLinus Torvalds * Current SCSI Control Block
23561da177e4SLinus Torvalds */
23571da177e4SLinus Torvaldsregister CURRSCB {
23581da177e4SLinus Torvalds	address			0x05C
23591da177e4SLinus Torvalds	access_mode	RW
23601da177e4SLinus Torvalds	size		2
23611da177e4SLinus Torvalds	modes		M_SCSI
23621da177e4SLinus Torvalds}
23631da177e4SLinus Torvalds
23641da177e4SLinus Torvalds/*
23651da177e4SLinus Torvalds * Data FIFO Status
23661da177e4SLinus Torvalds */
23671da177e4SLinus Torvaldsregister MDFFSTAT {
23681da177e4SLinus Torvalds	address			0x05D
23691da177e4SLinus Torvalds	access_mode	RO
23701da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
23711da177e4SLinus Torvalds	field	SHCNTNEGATIVE	0x40 /* Rev B or higher */
23721da177e4SLinus Torvalds	field	SHCNTMINUS1	0x20 /* Rev B or higher */
23731da177e4SLinus Torvalds	field	LASTSDONE	0x10
23741da177e4SLinus Torvalds	field	SHVALID		0x08
23751da177e4SLinus Torvalds	field	DLZERO		0x04 /* FIFO data ends on packet boundary. */
23761da177e4SLinus Torvalds	field	DATAINFIFO	0x02
23771da177e4SLinus Torvalds	field	FIFOFREE	0x01
23781da177e4SLinus Torvalds}
23791da177e4SLinus Torvalds
23801da177e4SLinus Torvalds/*
23811da177e4SLinus Torvalds * CRC Control
23821da177e4SLinus Torvalds */
23831da177e4SLinus Torvaldsregister CRCCONTROL {
23841da177e4SLinus Torvalds	address			0x05d
23851da177e4SLinus Torvalds	access_mode	RW
23861da177e4SLinus Torvalds	modes		M_CFG
23871da177e4SLinus Torvalds	field	CRCVALCHKEN		0x40
23881da177e4SLinus Torvalds}
23891da177e4SLinus Torvalds
23901da177e4SLinus Torvalds/*
23911da177e4SLinus Torvalds * SCSI Test Control
23921da177e4SLinus Torvalds */
23931da177e4SLinus Torvaldsregister SCSITEST {
23941da177e4SLinus Torvalds	address			0x05E
23951da177e4SLinus Torvalds	access_mode	RW
23961da177e4SLinus Torvalds	modes		M_CFG
23971da177e4SLinus Torvalds	field	CNTRTEST	0x08
23981da177e4SLinus Torvalds	field	SEL_TXPLL_DEBUG	0x04
23991da177e4SLinus Torvalds}
24001da177e4SLinus Torvalds
24011da177e4SLinus Torvalds/*
24021da177e4SLinus Torvalds * Data FIFO Queue Tag
24031da177e4SLinus Torvalds */
24041da177e4SLinus Torvaldsregister DFFTAG {
24051da177e4SLinus Torvalds	address			0x05E
24061da177e4SLinus Torvalds	access_mode	RW
24071da177e4SLinus Torvalds	size		2
24081da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
24091da177e4SLinus Torvalds}
24101da177e4SLinus Torvalds
24111da177e4SLinus Torvalds/*
24121da177e4SLinus Torvalds * Last SCSI Control Block
24131da177e4SLinus Torvalds */
24141da177e4SLinus Torvaldsregister LASTSCB {
24151da177e4SLinus Torvalds	address			0x05E
24161da177e4SLinus Torvalds	access_mode	RW
24171da177e4SLinus Torvalds	size		2
24181da177e4SLinus Torvalds	modes		M_SCSI
24191da177e4SLinus Torvalds}
24201da177e4SLinus Torvalds
24211da177e4SLinus Torvalds/*
24221da177e4SLinus Torvalds * SCSI I/O Cell Power-down Control
24231da177e4SLinus Torvalds */
24241da177e4SLinus Torvaldsregister IOPDNCTL {
24251da177e4SLinus Torvalds	address			0x05F
24261da177e4SLinus Torvalds	access_mode	RW
24271da177e4SLinus Torvalds	modes		M_CFG
24281da177e4SLinus Torvalds	field	DISABLE_OE	0x80
24291da177e4SLinus Torvalds	field	PDN_IDIST	0x04
24301da177e4SLinus Torvalds	field	PDN_DIFFSENSE	0x01
24311da177e4SLinus Torvalds}
24321da177e4SLinus Torvalds
24331da177e4SLinus Torvalds/*
24341da177e4SLinus Torvalds * Shaddow Host Address.
24351da177e4SLinus Torvalds */
24361da177e4SLinus Torvaldsregister SHADDR {
24371da177e4SLinus Torvalds	address			0x060
24381da177e4SLinus Torvalds	access_mode	RO
24391da177e4SLinus Torvalds	size		8
24401da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
24411da177e4SLinus Torvalds}
24421da177e4SLinus Torvalds
24431da177e4SLinus Torvalds/*
24441da177e4SLinus Torvalds * Data Group CRC Interval.
24451da177e4SLinus Torvalds */
24461da177e4SLinus Torvaldsregister DGRPCRCI {
24471da177e4SLinus Torvalds	address			0x060
24481da177e4SLinus Torvalds	access_mode	RW
24491da177e4SLinus Torvalds	size		2
24501da177e4SLinus Torvalds	modes		M_CFG
24511da177e4SLinus Torvalds}
24521da177e4SLinus Torvalds
24531da177e4SLinus Torvalds/*
24541da177e4SLinus Torvalds * Data Transfer Negotiation Address
24551da177e4SLinus Torvalds */
24561da177e4SLinus Torvaldsregister NEGOADDR {
24571da177e4SLinus Torvalds	address			0x060
24581da177e4SLinus Torvalds	access_mode	RW
24591da177e4SLinus Torvalds	modes		M_SCSI
24601da177e4SLinus Torvalds}
24611da177e4SLinus Torvalds
24621da177e4SLinus Torvalds/*
24631da177e4SLinus Torvalds * Data Transfer Negotiation Data - Period Byte
24641da177e4SLinus Torvalds */
24651da177e4SLinus Torvaldsregister NEGPERIOD {
24661da177e4SLinus Torvalds	address			0x061
24671da177e4SLinus Torvalds	access_mode	RW
24681da177e4SLinus Torvalds	modes		M_SCSI
24691da177e4SLinus Torvalds}
24701da177e4SLinus Torvalds
24711da177e4SLinus Torvalds/*
24721da177e4SLinus Torvalds * Packetized CRC Interval
24731da177e4SLinus Torvalds */
24741da177e4SLinus Torvaldsregister PACKCRCI {
24751da177e4SLinus Torvalds	address			0x062
24761da177e4SLinus Torvalds	access_mode	RW
24771da177e4SLinus Torvalds	size		2
24781da177e4SLinus Torvalds	modes		M_CFG
24791da177e4SLinus Torvalds}
24801da177e4SLinus Torvalds
24811da177e4SLinus Torvalds/*
24821da177e4SLinus Torvalds * Data Transfer Negotiation Data - Offset Byte
24831da177e4SLinus Torvalds */
24841da177e4SLinus Torvaldsregister NEGOFFSET {
24851da177e4SLinus Torvalds	address			0x062
24861da177e4SLinus Torvalds	access_mode	RW
24871da177e4SLinus Torvalds	modes		M_SCSI
24881da177e4SLinus Torvalds}
24891da177e4SLinus Torvalds
24901da177e4SLinus Torvalds/*
24911da177e4SLinus Torvalds * Data Transfer Negotiation Data - PPR Options
24921da177e4SLinus Torvalds */
24931da177e4SLinus Torvaldsregister NEGPPROPTS {
24941da177e4SLinus Torvalds	address			0x063
24951da177e4SLinus Torvalds	access_mode	RW
24961da177e4SLinus Torvalds	modes		M_SCSI
24971da177e4SLinus Torvalds	field	PPROPT_PACE	0x08
24981da177e4SLinus Torvalds	field	PPROPT_QAS	0x04
24991da177e4SLinus Torvalds	field	PPROPT_DT	0x02
25001da177e4SLinus Torvalds	field	PPROPT_IUT	0x01
25011da177e4SLinus Torvalds}
25021da177e4SLinus Torvalds
25031da177e4SLinus Torvalds/*
25041da177e4SLinus Torvalds * Data Transfer Negotiation Data -  Connection Options
25051da177e4SLinus Torvalds */
25061da177e4SLinus Torvaldsregister NEGCONOPTS {
25071da177e4SLinus Torvalds	address			0x064
25081da177e4SLinus Torvalds	access_mode	RW
25091da177e4SLinus Torvalds	modes		M_SCSI
25101da177e4SLinus Torvalds	field	ENSNAPSHOT	0x40
25111da177e4SLinus Torvalds	field	RTI_WRTDIS	0x20
25121da177e4SLinus Torvalds	field	RTI_OVRDTRN	0x10
25131da177e4SLinus Torvalds	field	ENSLOWCRC	0x08
25141da177e4SLinus Torvalds	field	ENAUTOATNI	0x04
25151da177e4SLinus Torvalds	field	ENAUTOATNO	0x02
25161da177e4SLinus Torvalds	field	WIDEXFER	0x01
25171da177e4SLinus Torvalds}
25181da177e4SLinus Torvalds
25191da177e4SLinus Torvalds/*
25201da177e4SLinus Torvalds * Negotiation Table Annex Column Index.
25211da177e4SLinus Torvalds */
25221da177e4SLinus Torvaldsregister ANNEXCOL {
25231da177e4SLinus Torvalds	address			0x065
25241da177e4SLinus Torvalds	access_mode	RW
25251da177e4SLinus Torvalds	modes		M_SCSI
25261da177e4SLinus Torvalds}
25271da177e4SLinus Torvalds
25281da177e4SLinus Torvaldsregister SCSCHKN {
25291da177e4SLinus Torvalds	address			0x066
25301da177e4SLinus Torvalds	access_mode	RW
25311da177e4SLinus Torvalds	modes		M_CFG
25321da177e4SLinus Torvalds	field	STSELSKIDDIS	0x40
25331da177e4SLinus Torvalds	field	CURRFIFODEF	0x20
25341da177e4SLinus Torvalds	field	WIDERESEN	0x10
25351da177e4SLinus Torvalds	field	SDONEMSKDIS	0x08
25361da177e4SLinus Torvalds	field	DFFACTCLR	0x04
25371da177e4SLinus Torvalds	field	SHVALIDSTDIS	0x02
25381da177e4SLinus Torvalds	field	LSTSGCLRDIS	0x01
25391da177e4SLinus Torvalds}
25401da177e4SLinus Torvalds
25411da177e4SLinus Torvaldsconst AHD_ANNEXCOL_PER_DEV0	4
25421da177e4SLinus Torvaldsconst AHD_NUM_PER_DEV_ANNEXCOLS	4
25431da177e4SLinus Torvaldsconst AHD_ANNEXCOL_PRECOMP_SLEW	4
25441da177e4SLinus Torvaldsconst	AHD_PRECOMP_MASK	0x07
25451da177e4SLinus Torvaldsconst	AHD_PRECOMP_SHIFT	0
25461da177e4SLinus Torvaldsconst	AHD_PRECOMP_CUTBACK_17	0x04
25471da177e4SLinus Torvaldsconst	AHD_PRECOMP_CUTBACK_29	0x06
25481da177e4SLinus Torvaldsconst	AHD_PRECOMP_CUTBACK_37	0x07
25491da177e4SLinus Torvaldsconst	AHD_SLEWRATE_MASK	0x78
25501da177e4SLinus Torvaldsconst	AHD_SLEWRATE_SHIFT	3
25511da177e4SLinus Torvalds/*
25521da177e4SLinus Torvalds * Rev A has only a single bit (high bit of field) of slew adjustment.
25531da177e4SLinus Torvalds * Rev B has 4 bits.  The current default happens to be the same for both.
25541da177e4SLinus Torvalds */
25551da177e4SLinus Torvaldsconst	AHD_SLEWRATE_DEF_REVA	0x08
25561da177e4SLinus Torvaldsconst	AHD_SLEWRATE_DEF_REVB	0x08
25571da177e4SLinus Torvalds
25581da177e4SLinus Torvalds/* Rev A does not have any amplitude setting. */
25591da177e4SLinus Torvaldsconst AHD_ANNEXCOL_AMPLITUDE	6
25601da177e4SLinus Torvaldsconst	AHD_AMPLITUDE_MASK	0x7
25611da177e4SLinus Torvaldsconst	AHD_AMPLITUDE_SHIFT	0
25621da177e4SLinus Torvaldsconst	AHD_AMPLITUDE_DEF	0x7
25631da177e4SLinus Torvalds
25641da177e4SLinus Torvalds/*
25651da177e4SLinus Torvalds * Negotiation Table Annex Data Port.
25661da177e4SLinus Torvalds */
25671da177e4SLinus Torvaldsregister ANNEXDAT {
25681da177e4SLinus Torvalds	address			0x066
25691da177e4SLinus Torvalds	access_mode	RW
25701da177e4SLinus Torvalds	modes		M_SCSI
25711da177e4SLinus Torvalds}
25721da177e4SLinus Torvalds
25731da177e4SLinus Torvalds/*
25741da177e4SLinus Torvalds * Initiator's Own Id.
25751da177e4SLinus Torvalds * The SCSI ID to use for Selection Out and seen during a reselection..
25761da177e4SLinus Torvalds */
25771da177e4SLinus Torvaldsregister IOWNID {
25781da177e4SLinus Torvalds	address			0x067
25791da177e4SLinus Torvalds	access_mode	RW
25801da177e4SLinus Torvalds	modes		M_SCSI
25811da177e4SLinus Torvalds}
25821da177e4SLinus Torvalds
25831da177e4SLinus Torvalds/*
25841da177e4SLinus Torvalds * 960MHz Phase-Locked Loop Control 0
25851da177e4SLinus Torvalds */
25861da177e4SLinus Torvaldsregister PLL960CTL0 {
25871da177e4SLinus Torvalds	address			0x068
25881da177e4SLinus Torvalds	access_mode	RW
25891da177e4SLinus Torvalds	modes		M_CFG
25901da177e4SLinus Torvalds	field	PLL_VCOSEL	0x80
25911da177e4SLinus Torvalds	field	PLL_PWDN	0x40
25921da177e4SLinus Torvalds	field	PLL_NS		0x30
25931da177e4SLinus Torvalds	field	PLL_ENLUD	0x08
25941da177e4SLinus Torvalds	field	PLL_ENLPF	0x04
25951da177e4SLinus Torvalds	field	PLL_DLPF	0x02
25961da177e4SLinus Torvalds	field	PLL_ENFBM	0x01
25971da177e4SLinus Torvalds}
25981da177e4SLinus Torvalds
25991da177e4SLinus Torvalds/*
26001da177e4SLinus Torvalds * Target Own Id
26011da177e4SLinus Torvalds */
26021da177e4SLinus Torvaldsregister TOWNID {
26031da177e4SLinus Torvalds	address			0x069
26041da177e4SLinus Torvalds	access_mode	RW
26051da177e4SLinus Torvalds	modes		M_SCSI
26061da177e4SLinus Torvalds}
26071da177e4SLinus Torvalds
26081da177e4SLinus Torvalds/*
26091da177e4SLinus Torvalds * 960MHz Phase-Locked Loop Control 1
26101da177e4SLinus Torvalds */
26111da177e4SLinus Torvaldsregister PLL960CTL1 {
26121da177e4SLinus Torvalds	address			0x069
26131da177e4SLinus Torvalds	access_mode	RW
26141da177e4SLinus Torvalds	modes		M_CFG
26151da177e4SLinus Torvalds	field	PLL_CNTEN	0x80
26161da177e4SLinus Torvalds	field	PLL_CNTCLR	0x40
26171da177e4SLinus Torvalds	field	PLL_RST		0x01
26181da177e4SLinus Torvalds}
26191da177e4SLinus Torvalds
26201da177e4SLinus Torvalds/*
26211da177e4SLinus Torvalds * Expander Signature
26221da177e4SLinus Torvalds */
26231da177e4SLinus Torvaldsregister XSIG {
26241da177e4SLinus Torvalds	address			0x06A
26251da177e4SLinus Torvalds	access_mode	RW
26261da177e4SLinus Torvalds	modes		M_SCSI
26271da177e4SLinus Torvalds}
26281da177e4SLinus Torvalds
26291da177e4SLinus Torvalds/*
26301da177e4SLinus Torvalds * Shadow Byte Count
26311da177e4SLinus Torvalds */
26321da177e4SLinus Torvaldsregister SHCNT {
26331da177e4SLinus Torvalds	address			0x068
26341da177e4SLinus Torvalds	access_mode	RW
26351da177e4SLinus Torvalds	size		3
26361da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
26371da177e4SLinus Torvalds}
26381da177e4SLinus Torvalds
26391da177e4SLinus Torvalds/*
26401da177e4SLinus Torvalds * Selection Out ID
26411da177e4SLinus Torvalds */
26421da177e4SLinus Torvaldsregister SELOID {
26431da177e4SLinus Torvalds	address			0x06B
26441da177e4SLinus Torvalds	access_mode	RW
26451da177e4SLinus Torvalds	modes		M_SCSI
26461da177e4SLinus Torvalds}
26471da177e4SLinus Torvalds
26481da177e4SLinus Torvalds/*
26491da177e4SLinus Torvalds * 960-MHz Phase-Locked Loop Test Count
26501da177e4SLinus Torvalds */
26511da177e4SLinus Torvaldsregister PLL960CNT0 {
26521da177e4SLinus Torvalds	address			0x06A
26531da177e4SLinus Torvalds	access_mode	RO
26541da177e4SLinus Torvalds	size		2
26551da177e4SLinus Torvalds	modes		M_CFG
26561da177e4SLinus Torvalds}
26571da177e4SLinus Torvalds
26581da177e4SLinus Torvalds/*
26591da177e4SLinus Torvalds * 400-MHz Phase-Locked Loop Control 0
26601da177e4SLinus Torvalds */
26611da177e4SLinus Torvaldsregister PLL400CTL0 {
26621da177e4SLinus Torvalds	address			0x06C
26631da177e4SLinus Torvalds	access_mode	RW
26641da177e4SLinus Torvalds	modes		M_CFG
26651da177e4SLinus Torvalds	field	PLL_VCOSEL	0x80
26661da177e4SLinus Torvalds	field	PLL_PWDN	0x40
26671da177e4SLinus Torvalds	field	PLL_NS		0x30
26681da177e4SLinus Torvalds	field	PLL_ENLUD	0x08
26691da177e4SLinus Torvalds	field	PLL_ENLPF	0x04
26701da177e4SLinus Torvalds	field	PLL_DLPF	0x02
26711da177e4SLinus Torvalds	field	PLL_ENFBM	0x01
26721da177e4SLinus Torvalds}
26731da177e4SLinus Torvalds
26741da177e4SLinus Torvalds/*
26751da177e4SLinus Torvalds * Arbitration Fairness
26761da177e4SLinus Torvalds */
26771da177e4SLinus Torvaldsregister FAIRNESS {
26781da177e4SLinus Torvalds	address			0x06C
26791da177e4SLinus Torvalds	access_mode	RW
26801da177e4SLinus Torvalds	size		2
26811da177e4SLinus Torvalds	modes		M_SCSI
26821da177e4SLinus Torvalds}
26831da177e4SLinus Torvalds
26841da177e4SLinus Torvalds/*
26851da177e4SLinus Torvalds * 400-MHz Phase-Locked Loop Control 1
26861da177e4SLinus Torvalds */
26871da177e4SLinus Torvaldsregister PLL400CTL1 {
26881da177e4SLinus Torvalds	address			0x06D
26891da177e4SLinus Torvalds	access_mode	RW
26901da177e4SLinus Torvalds	modes		M_CFG
26911da177e4SLinus Torvalds	field	PLL_CNTEN	0x80
26921da177e4SLinus Torvalds	field	PLL_CNTCLR	0x40
26931da177e4SLinus Torvalds	field	PLL_RST		0x01
26941da177e4SLinus Torvalds}
26951da177e4SLinus Torvalds
26961da177e4SLinus Torvalds/*
26971da177e4SLinus Torvalds * Arbitration Unfairness
26981da177e4SLinus Torvalds */
26991da177e4SLinus Torvaldsregister UNFAIRNESS {
27001da177e4SLinus Torvalds	address			0x06E
27011da177e4SLinus Torvalds	access_mode	RW
27021da177e4SLinus Torvalds	size		2
27031da177e4SLinus Torvalds	modes		M_SCSI
27041da177e4SLinus Torvalds}
27051da177e4SLinus Torvalds
27061da177e4SLinus Torvalds/*
27071da177e4SLinus Torvalds * 400-MHz Phase-Locked Loop Test Count
27081da177e4SLinus Torvalds */
27091da177e4SLinus Torvaldsregister PLL400CNT0 {
27101da177e4SLinus Torvalds	address			0x06E
27111da177e4SLinus Torvalds	access_mode	RO
27121da177e4SLinus Torvalds	size		2
27131da177e4SLinus Torvalds	modes		M_CFG
27141da177e4SLinus Torvalds}
27151da177e4SLinus Torvalds
27161da177e4SLinus Torvalds/*
27171da177e4SLinus Torvalds * SCB Page Pointer
27181da177e4SLinus Torvalds */
27191da177e4SLinus Torvaldsregister SCBPTR {
27201da177e4SLinus Torvalds	address			0x0A8
27211da177e4SLinus Torvalds	access_mode	RW
27221da177e4SLinus Torvalds	size		2
27231da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1, M_CCHAN, M_SCSI
27241da177e4SLinus Torvalds}
27251da177e4SLinus Torvalds
27261da177e4SLinus Torvalds/*
27271da177e4SLinus Torvalds * CMC SCB Array Count
27281da177e4SLinus Torvalds * Number of bytes to transfer between CMC SCB memory and SCBRAM.
27291da177e4SLinus Torvalds * Transfers must be 8byte aligned and sized.
27301da177e4SLinus Torvalds */
27311da177e4SLinus Torvaldsregister CCSCBACNT {
27321da177e4SLinus Torvalds	address			0x0AB
27331da177e4SLinus Torvalds	access_mode	RW
27341da177e4SLinus Torvalds	modes		M_CCHAN
27351da177e4SLinus Torvalds}
27361da177e4SLinus Torvalds
27371da177e4SLinus Torvalds/*
27381da177e4SLinus Torvalds * SCB Autopointer
27391da177e4SLinus Torvalds * SCB-Next Address Snooping logic.  When an SCB is transferred to
27401da177e4SLinus Torvalds * the card, the next SCB address to be used by the CMC array can
27411da177e4SLinus Torvalds * be autoloaded from that transfer.
27421da177e4SLinus Torvalds */
27431da177e4SLinus Torvaldsregister SCBAUTOPTR {
27441da177e4SLinus Torvalds	address			0x0AB
27451da177e4SLinus Torvalds	access_mode	RW
27461da177e4SLinus Torvalds	modes		M_CFG
27471da177e4SLinus Torvalds	field	AUSCBPTR_EN	0x80
27481da177e4SLinus Torvalds	field	SCBPTR_ADDR	0x38
27491da177e4SLinus Torvalds	field	SCBPTR_OFF	0x07
27501da177e4SLinus Torvalds}
27511da177e4SLinus Torvalds
27521da177e4SLinus Torvalds/*
27531da177e4SLinus Torvalds * CMC SG Ram Address Pointer
27541da177e4SLinus Torvalds */
27551da177e4SLinus Torvaldsregister CCSGADDR {
27561da177e4SLinus Torvalds	address			0x0AC
27571da177e4SLinus Torvalds	access_mode	RW
27581da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
27591da177e4SLinus Torvalds}
27601da177e4SLinus Torvalds
27611da177e4SLinus Torvalds/*
27621da177e4SLinus Torvalds * CMC SCB RAM Address Pointer
27631da177e4SLinus Torvalds */
27641da177e4SLinus Torvaldsregister CCSCBADDR {
27651da177e4SLinus Torvalds	address			0x0AC
27661da177e4SLinus Torvalds	access_mode	RW
27671da177e4SLinus Torvalds	modes		M_CCHAN
27681da177e4SLinus Torvalds}
27691da177e4SLinus Torvalds
27701da177e4SLinus Torvalds/*
27711da177e4SLinus Torvalds * CMC SCB Ram Back-up Address Pointer
27721da177e4SLinus Torvalds * Indicates the true stop location of transfers halted prior
27731da177e4SLinus Torvalds * to SCBHCNT going to 0.
27741da177e4SLinus Torvalds */
27751da177e4SLinus Torvaldsregister CCSCBADR_BK {
27761da177e4SLinus Torvalds	address			0x0AC
27771da177e4SLinus Torvalds	access_mode	RO
27781da177e4SLinus Torvalds	modes		M_CFG
27791da177e4SLinus Torvalds}
27801da177e4SLinus Torvalds
27811da177e4SLinus Torvalds/*
27821da177e4SLinus Torvalds * CMC SG Control
27831da177e4SLinus Torvalds */
27841da177e4SLinus Torvaldsregister CCSGCTL {
27851da177e4SLinus Torvalds	address			0x0AD
27861da177e4SLinus Torvalds	access_mode	RW
27871da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
27881da177e4SLinus Torvalds	field	CCSGDONE	0x80
27891da177e4SLinus Torvalds	field	SG_CACHE_AVAIL	0x10
27901da177e4SLinus Torvalds	field	CCSGENACK	0x08
27911da177e4SLinus Torvalds	mask	CCSGEN		0x0C
27921da177e4SLinus Torvalds	field	SG_FETCH_REQ	0x02
27931da177e4SLinus Torvalds	field	CCSGRESET	0x01
27941da177e4SLinus Torvalds}
27951da177e4SLinus Torvalds
27961da177e4SLinus Torvalds/*
27971da177e4SLinus Torvalds * CMD SCB Control
27981da177e4SLinus Torvalds */
27991da177e4SLinus Torvaldsregister CCSCBCTL {
28001da177e4SLinus Torvalds	address			0x0AD
28011da177e4SLinus Torvalds	access_mode	RW
28021da177e4SLinus Torvalds	modes		M_CCHAN
28031da177e4SLinus Torvalds	field	CCSCBDONE	0x80
28041da177e4SLinus Torvalds	field	ARRDONE		0x40
28051da177e4SLinus Torvalds	field	CCARREN		0x10
28061da177e4SLinus Torvalds	field	CCSCBEN		0x08
28071da177e4SLinus Torvalds	field	CCSCBDIR	0x04
28081da177e4SLinus Torvalds	field	CCSCBRESET	0x01
28091da177e4SLinus Torvalds}
28101da177e4SLinus Torvalds
28111da177e4SLinus Torvalds/*
28121da177e4SLinus Torvalds * CMC Ram BIST
28131da177e4SLinus Torvalds */
28141da177e4SLinus Torvaldsregister CMC_RAMBIST {
28151da177e4SLinus Torvalds	address			0x0AD
28161da177e4SLinus Torvalds	access_mode	RW
28171da177e4SLinus Torvalds	modes		M_CFG
28181da177e4SLinus Torvalds	field	SG_ELEMENT_SIZE		0x80
28191da177e4SLinus Torvalds	field	SCBRAMBIST_FAIL		0x40
28201da177e4SLinus Torvalds	field	SG_BIST_FAIL		0x20
28211da177e4SLinus Torvalds	field	SG_BIST_EN		0x10
28221da177e4SLinus Torvalds	field	CMC_BUFFER_BIST_FAIL	0x02
28231da177e4SLinus Torvalds	field	CMC_BUFFER_BIST_EN	0x01
28241da177e4SLinus Torvalds}
28251da177e4SLinus Torvalds
28261da177e4SLinus Torvalds/*
28271da177e4SLinus Torvalds * CMC SG RAM Data Port
28281da177e4SLinus Torvalds */
28291da177e4SLinus Torvaldsregister CCSGRAM {
28301da177e4SLinus Torvalds	address			0x0B0
28311da177e4SLinus Torvalds	access_mode	RW
28321da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
28331da177e4SLinus Torvalds}
28341da177e4SLinus Torvalds
28351da177e4SLinus Torvalds/*
28361da177e4SLinus Torvalds * CMC SCB RAM Data Port
28371da177e4SLinus Torvalds */
28381da177e4SLinus Torvaldsregister CCSCBRAM {
28391da177e4SLinus Torvalds	address			0x0B0
28401da177e4SLinus Torvalds	access_mode	RW
28411da177e4SLinus Torvalds	modes		M_CCHAN
28421da177e4SLinus Torvalds}
28431da177e4SLinus Torvalds
28441da177e4SLinus Torvalds/*
28451da177e4SLinus Torvalds * Flex DMA Address.
28461da177e4SLinus Torvalds */
28471da177e4SLinus Torvaldsregister FLEXADR {
28481da177e4SLinus Torvalds	address			0x0B0
28491da177e4SLinus Torvalds	access_mode	RW
28501da177e4SLinus Torvalds	size		3
28511da177e4SLinus Torvalds	modes		M_SCSI
28521da177e4SLinus Torvalds}
28531da177e4SLinus Torvalds
28541da177e4SLinus Torvalds/*
28551da177e4SLinus Torvalds * Flex DMA Byte Count
28561da177e4SLinus Torvalds */
28571da177e4SLinus Torvaldsregister FLEXCNT {
28581da177e4SLinus Torvalds	address			0x0B3
28591da177e4SLinus Torvalds	access_mode	RW
28601da177e4SLinus Torvalds	size		2
28611da177e4SLinus Torvalds	modes		M_SCSI
28621da177e4SLinus Torvalds}
28631da177e4SLinus Torvalds
28641da177e4SLinus Torvalds/*
28651da177e4SLinus Torvalds * Flex DMA Status
28661da177e4SLinus Torvalds */
28671da177e4SLinus Torvaldsregister FLEXDMASTAT {
28681da177e4SLinus Torvalds	address			0x0B5
28691da177e4SLinus Torvalds	access_mode	RW
28701da177e4SLinus Torvalds	modes		M_SCSI
28711da177e4SLinus Torvalds	field	FLEXDMAERR	0x02
28721da177e4SLinus Torvalds	field	FLEXDMADONE	0x01
28731da177e4SLinus Torvalds}
28741da177e4SLinus Torvalds
28751da177e4SLinus Torvalds/*
28761da177e4SLinus Torvalds * Flex DMA Data Port
28771da177e4SLinus Torvalds */
28781da177e4SLinus Torvaldsregister FLEXDATA {
28791da177e4SLinus Torvalds	address			0x0B6
28801da177e4SLinus Torvalds	access_mode	RW
28811da177e4SLinus Torvalds	modes		M_SCSI
28821da177e4SLinus Torvalds}
28831da177e4SLinus Torvalds
28841da177e4SLinus Torvalds/*
28851da177e4SLinus Torvalds * Board Data
28861da177e4SLinus Torvalds */
28871da177e4SLinus Torvaldsregister BRDDAT {
28881da177e4SLinus Torvalds	address			0x0B8
28891da177e4SLinus Torvalds	access_mode	RW
28901da177e4SLinus Torvalds	modes		M_SCSI
28911da177e4SLinus Torvalds}
28921da177e4SLinus Torvalds
28931da177e4SLinus Torvalds/*
28941da177e4SLinus Torvalds * Board Control
28951da177e4SLinus Torvalds */
28961da177e4SLinus Torvaldsregister BRDCTL {
28971da177e4SLinus Torvalds	address			0x0B9
28981da177e4SLinus Torvalds	access_mode	RW
28991da177e4SLinus Torvalds	modes		M_SCSI
29001da177e4SLinus Torvalds	field	FLXARBACK	0x80
29011da177e4SLinus Torvalds	field	FLXARBREQ	0x40
29021da177e4SLinus Torvalds	field	BRDADDR		0x38
29031da177e4SLinus Torvalds	field	BRDEN		0x04
29041da177e4SLinus Torvalds	field	BRDRW		0x02
29051da177e4SLinus Torvalds	field	BRDSTB		0x01
29061da177e4SLinus Torvalds}
29071da177e4SLinus Torvalds
29081da177e4SLinus Torvalds/*
29091da177e4SLinus Torvalds * Serial EEPROM Address
29101da177e4SLinus Torvalds */
29111da177e4SLinus Torvaldsregister SEEADR {
29121da177e4SLinus Torvalds	address			0x0BA
29131da177e4SLinus Torvalds	access_mode	RW
29141da177e4SLinus Torvalds	modes		M_SCSI
29151da177e4SLinus Torvalds}
29161da177e4SLinus Torvalds
29171da177e4SLinus Torvalds/*
29181da177e4SLinus Torvalds * Serial EEPROM Data
29191da177e4SLinus Torvalds */
29201da177e4SLinus Torvaldsregister SEEDAT {
29211da177e4SLinus Torvalds	address			0x0BC
29221da177e4SLinus Torvalds	access_mode	RW
29231da177e4SLinus Torvalds	size		2
29241da177e4SLinus Torvalds	modes		M_SCSI
29251da177e4SLinus Torvalds}
29261da177e4SLinus Torvalds
29271da177e4SLinus Torvalds/*
29281da177e4SLinus Torvalds * Serial EEPROM Status
29291da177e4SLinus Torvalds */
29301da177e4SLinus Torvaldsregister SEESTAT {
29311da177e4SLinus Torvalds	address			0x0BE
29321da177e4SLinus Torvalds	access_mode	RO
29331da177e4SLinus Torvalds	modes		M_SCSI
29341da177e4SLinus Torvalds	field	INIT_DONE	0x80
29351da177e4SLinus Torvalds	field	SEEOPCODE	0x70
29361da177e4SLinus Torvalds	field	LDALTID_L	0x08
29371da177e4SLinus Torvalds	field	SEEARBACK	0x04
29381da177e4SLinus Torvalds	field	SEEBUSY		0x02
29391da177e4SLinus Torvalds	field	SEESTART	0x01
29401da177e4SLinus Torvalds}
29411da177e4SLinus Torvalds
29421da177e4SLinus Torvalds/*
29431da177e4SLinus Torvalds * Serial EEPROM Control
29441da177e4SLinus Torvalds */
29451da177e4SLinus Torvaldsregister SEECTL {
29461da177e4SLinus Torvalds	address			0x0BE
29471da177e4SLinus Torvalds	access_mode	RW
29481da177e4SLinus Torvalds	modes		M_SCSI
29491da177e4SLinus Torvalds	field	SEEOPCODE	0x70 {
29501da177e4SLinus Torvalds		SEEOP_ERASE	0x70,
29511da177e4SLinus Torvalds		SEEOP_READ	0x60,
29521da177e4SLinus Torvalds		SEEOP_WRITE	0x50,
29531da177e4SLinus Torvalds	/*
29541da177e4SLinus Torvalds	 * The following four commands use special
29551da177e4SLinus Torvalds	 * addresses for differentiation.
29561da177e4SLinus Torvalds	 */
29571da177e4SLinus Torvalds		SEEOP_ERAL	0x40
29581da177e4SLinus Torvalds	}
29591da177e4SLinus Torvalds	mask	SEEOP_EWEN	0x40
29601da177e4SLinus Torvalds	mask	SEEOP_WALL	0x40
29611da177e4SLinus Torvalds	mask	SEEOP_EWDS	0x40
29621da177e4SLinus Torvalds	field	SEERST		0x02
29631da177e4SLinus Torvalds	field	SEESTART	0x01
29641da177e4SLinus Torvalds}
29651da177e4SLinus Torvalds
29661da177e4SLinus Torvaldsconst SEEOP_ERAL_ADDR	0x80
29671da177e4SLinus Torvaldsconst SEEOP_EWEN_ADDR	0xC0
29681da177e4SLinus Torvaldsconst SEEOP_WRAL_ADDR	0x40
29691da177e4SLinus Torvaldsconst SEEOP_EWDS_ADDR	0x00
29701da177e4SLinus Torvalds
29711da177e4SLinus Torvalds/*
29721da177e4SLinus Torvalds * SCB Counter
29731da177e4SLinus Torvalds */
29741da177e4SLinus Torvaldsregister SCBCNT {
29751da177e4SLinus Torvalds	address			0x0BF
29761da177e4SLinus Torvalds	access_mode	RW
29771da177e4SLinus Torvalds	modes		M_SCSI
29781da177e4SLinus Torvalds}
29791da177e4SLinus Torvalds
29801da177e4SLinus Torvalds/*
29811da177e4SLinus Torvalds * Data FIFO Write Address
29821da177e4SLinus Torvalds * Pointer to the next QWD location to be written to the data FIFO.
29831da177e4SLinus Torvalds */
29841da177e4SLinus Torvaldsregister DFWADDR {
29851da177e4SLinus Torvalds	address			0x0C0
29861da177e4SLinus Torvalds	access_mode	RW
29871da177e4SLinus Torvalds	size		2
29881da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
29891da177e4SLinus Torvalds}
29901da177e4SLinus Torvalds
29911da177e4SLinus Torvalds/*
29921da177e4SLinus Torvalds * DSP Filter Control
29931da177e4SLinus Torvalds */
29941da177e4SLinus Torvaldsregister DSPFLTRCTL {
29951da177e4SLinus Torvalds	address			0x0C0
29961da177e4SLinus Torvalds	access_mode	RW
29971da177e4SLinus Torvalds	modes		M_CFG
29981da177e4SLinus Torvalds	field	FLTRDISABLE	0x20
29991da177e4SLinus Torvalds	field	EDGESENSE	0x10
30001da177e4SLinus Torvalds	field	DSPFCNTSEL	0x0F
30011da177e4SLinus Torvalds}
30021da177e4SLinus Torvalds
30031da177e4SLinus Torvalds/*
30041da177e4SLinus Torvalds * DSP Data Channel Control
30051da177e4SLinus Torvalds */
30061da177e4SLinus Torvaldsregister DSPDATACTL {
30071da177e4SLinus Torvalds	address			0x0C1
30081da177e4SLinus Torvalds	access_mode	RW
30091da177e4SLinus Torvalds	modes		M_CFG
30101da177e4SLinus Torvalds	field	BYPASSENAB	0x80
30111da177e4SLinus Torvalds	field	DESQDIS		0x10
30121da177e4SLinus Torvalds	field	RCVROFFSTDIS	0x04
30131da177e4SLinus Torvalds	field	XMITOFFSTDIS	0x02
30141da177e4SLinus Torvalds}
30151da177e4SLinus Torvalds
30161da177e4SLinus Torvalds/*
30171da177e4SLinus Torvalds * Data FIFO Read Address
30181da177e4SLinus Torvalds * Pointer to the next QWD location to be read from the data FIFO.
30191da177e4SLinus Torvalds */
30201da177e4SLinus Torvaldsregister DFRADDR {
30211da177e4SLinus Torvalds	address			0x0C2
30221da177e4SLinus Torvalds	access_mode	RW
30231da177e4SLinus Torvalds	size		2
30241da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
30251da177e4SLinus Torvalds}
30261da177e4SLinus Torvalds
30271da177e4SLinus Torvalds/*
30281da177e4SLinus Torvalds * DSP REQ Control
30291da177e4SLinus Torvalds */
30301da177e4SLinus Torvaldsregister DSPREQCTL {
30311da177e4SLinus Torvalds	address			0x0C2
30321da177e4SLinus Torvalds	access_mode	RW
30331da177e4SLinus Torvalds	modes		M_CFG
30341da177e4SLinus Torvalds	field	MANREQCTL	0xC0
30351da177e4SLinus Torvalds	field	MANREQDLY	0x3F
30361da177e4SLinus Torvalds}
30371da177e4SLinus Torvalds
30381da177e4SLinus Torvalds/*
30391da177e4SLinus Torvalds * DSP ACK Control
30401da177e4SLinus Torvalds */
30411da177e4SLinus Torvaldsregister DSPACKCTL {
30421da177e4SLinus Torvalds	address			0x0C3
30431da177e4SLinus Torvalds	access_mode	RW
30441da177e4SLinus Torvalds	modes		M_CFG
30451da177e4SLinus Torvalds	field	MANACKCTL	0xC0
30461da177e4SLinus Torvalds	field	MANACKDLY	0x3F
30471da177e4SLinus Torvalds}
30481da177e4SLinus Torvalds
30491da177e4SLinus Torvalds/*
30501da177e4SLinus Torvalds * Data FIFO Data
30511da177e4SLinus Torvalds * Read/Write byte port into the data FIFO.  The read and write
30521da177e4SLinus Torvalds * FIFO pointers increment with each read and write respectively
30531da177e4SLinus Torvalds * to this port.
30541da177e4SLinus Torvalds */
30551da177e4SLinus Torvaldsregister DFDAT {
30561da177e4SLinus Torvalds	address			0x0C4
30571da177e4SLinus Torvalds	access_mode	RW
30581da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
30591da177e4SLinus Torvalds}
30601da177e4SLinus Torvalds
30611da177e4SLinus Torvalds/*
30621da177e4SLinus Torvalds * DSP Channel Select
30631da177e4SLinus Torvalds */
30641da177e4SLinus Torvaldsregister DSPSELECT {
30651da177e4SLinus Torvalds	address			0x0C4
30661da177e4SLinus Torvalds	access_mode	RW
30671da177e4SLinus Torvalds	modes		M_CFG
30681da177e4SLinus Torvalds	field	AUTOINCEN	0x80
30691da177e4SLinus Torvalds	field	DSPSEL		0x1F
30701da177e4SLinus Torvalds}
30711da177e4SLinus Torvalds
30721da177e4SLinus Torvaldsconst NUMDSPS 0x14
30731da177e4SLinus Torvalds
30741da177e4SLinus Torvalds/*
30751da177e4SLinus Torvalds * Write Bias Control
30761da177e4SLinus Torvalds */
30771da177e4SLinus Torvaldsregister WRTBIASCTL {
30781da177e4SLinus Torvalds	address			0x0C5
30791da177e4SLinus Torvalds	access_mode	WO
30801da177e4SLinus Torvalds	modes		M_CFG
30811da177e4SLinus Torvalds	field	AUTOXBCDIS	0x80
30821da177e4SLinus Torvalds	field	XMITMANVAL	0x3F
30831da177e4SLinus Torvalds}
30841da177e4SLinus Torvalds
30851da177e4SLinus Torvalds/*
30861da177e4SLinus Torvalds * Currently the WRTBIASCTL is the same as the default.
30871da177e4SLinus Torvalds */
30881da177e4SLinus Torvaldsconst WRTBIASCTL_HP_DEFAULT 0x0
30891da177e4SLinus Torvalds
30901da177e4SLinus Torvalds/*
30911da177e4SLinus Torvalds * Receiver Bias Control
30921da177e4SLinus Torvalds */
30931da177e4SLinus Torvaldsregister RCVRBIOSCTL {
30941da177e4SLinus Torvalds	address			0x0C6
30951da177e4SLinus Torvalds	access_mode	WO
30961da177e4SLinus Torvalds	modes		M_CFG
30971da177e4SLinus Torvalds	field	AUTORBCDIS	0x80
30981da177e4SLinus Torvalds	field	RCVRMANVAL	0x3F
30991da177e4SLinus Torvalds}
31001da177e4SLinus Torvalds
31011da177e4SLinus Torvalds/*
31021da177e4SLinus Torvalds * Write Bias Calculator
31031da177e4SLinus Torvalds */
31041da177e4SLinus Torvaldsregister WRTBIASCALC {
31051da177e4SLinus Torvalds	address			0x0C7
31061da177e4SLinus Torvalds	access_mode	RO
31071da177e4SLinus Torvalds	modes		M_CFG
31081da177e4SLinus Torvalds}
31091da177e4SLinus Torvalds
31101da177e4SLinus Torvalds/*
31111da177e4SLinus Torvalds * Data FIFO Pointers
31121da177e4SLinus Torvalds * Contains the byte offset from DFWADDR and DWRADDR to the current
31131da177e4SLinus Torvalds * FIFO write/read locations.
31141da177e4SLinus Torvalds */
31151da177e4SLinus Torvaldsregister DFPTRS {
31161da177e4SLinus Torvalds	address			0x0C8
31171da177e4SLinus Torvalds	access_mode	RW
31181da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
31191da177e4SLinus Torvalds}
31201da177e4SLinus Torvalds
31211da177e4SLinus Torvalds/*
31221da177e4SLinus Torvalds * Receiver Bias Calculator
31231da177e4SLinus Torvalds */
31241da177e4SLinus Torvaldsregister RCVRBIASCALC {
31251da177e4SLinus Torvalds	address			0x0C8
31261da177e4SLinus Torvalds	access_mode	RO
31271da177e4SLinus Torvalds	modes		M_CFG
31281da177e4SLinus Torvalds}
31291da177e4SLinus Torvalds
31301da177e4SLinus Torvalds/*
31311da177e4SLinus Torvalds * Data FIFO Backup Read Pointer
31321da177e4SLinus Torvalds * Contains the data FIFO address to be restored if the last
31331da177e4SLinus Torvalds * data accessed from the data FIFO was not transferred successfully.
31341da177e4SLinus Torvalds */
31351da177e4SLinus Torvaldsregister DFBKPTR {
31361da177e4SLinus Torvalds	address			0x0C9
31371da177e4SLinus Torvalds	access_mode	RW
31381da177e4SLinus Torvalds	size		2
31391da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
31401da177e4SLinus Torvalds}
31411da177e4SLinus Torvalds
31421da177e4SLinus Torvalds/*
31431da177e4SLinus Torvalds * Skew Calculator
31441da177e4SLinus Torvalds */
31451da177e4SLinus Torvaldsregister SKEWCALC {
31461da177e4SLinus Torvalds	address			0x0C9
31471da177e4SLinus Torvalds	access_mode	RO
31481da177e4SLinus Torvalds	modes		M_CFG
31491da177e4SLinus Torvalds}
31501da177e4SLinus Torvalds
31511da177e4SLinus Torvalds/*
31521da177e4SLinus Torvalds * Data FIFO Debug Control
31531da177e4SLinus Torvalds */
31541da177e4SLinus Torvaldsregister DFDBCTL {
31551da177e4SLinus Torvalds	address				0x0CB
31561da177e4SLinus Torvalds	access_mode	RW
31571da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
31581da177e4SLinus Torvalds	field	DFF_CIO_WR_RDY		0x20
31591da177e4SLinus Torvalds	field	DFF_CIO_RD_RDY		0x10
31601da177e4SLinus Torvalds	field	DFF_DIR_ERR		0x08
31611da177e4SLinus Torvalds	field	DFF_RAMBIST_FAIL	0x04
31621da177e4SLinus Torvalds	field	DFF_RAMBIST_DONE	0x02
31631da177e4SLinus Torvalds	field	DFF_RAMBIST_EN		0x01
31641da177e4SLinus Torvalds}
31651da177e4SLinus Torvalds
31661da177e4SLinus Torvalds/*
31671da177e4SLinus Torvalds * Data FIFO Space Count
31681da177e4SLinus Torvalds * Number of FIFO locations that are free.
31691da177e4SLinus Torvalds */
31701da177e4SLinus Torvaldsregister DFSCNT {
31711da177e4SLinus Torvalds	address			0x0CC
31721da177e4SLinus Torvalds	access_mode	RO
31731da177e4SLinus Torvalds	size		2
31741da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
31751da177e4SLinus Torvalds}
31761da177e4SLinus Torvalds
31771da177e4SLinus Torvalds/*
31781da177e4SLinus Torvalds * Data FIFO Byte Count
31791da177e4SLinus Torvalds * Number of filled FIFO locations.
31801da177e4SLinus Torvalds */
31811da177e4SLinus Torvaldsregister DFBCNT {
31821da177e4SLinus Torvalds	address			0x0CE
31831da177e4SLinus Torvalds	access_mode	RO
31841da177e4SLinus Torvalds	size		2
31851da177e4SLinus Torvalds	modes		M_DFF0, M_DFF1
31861da177e4SLinus Torvalds}
31871da177e4SLinus Torvalds
31881da177e4SLinus Torvalds/*
31891da177e4SLinus Torvalds * Sequencer Program Overlay Address.
31901da177e4SLinus Torvalds * Low address must be written prior to high address.
31911da177e4SLinus Torvalds */
31921da177e4SLinus Torvaldsregister OVLYADDR {
31931da177e4SLinus Torvalds	address			0x0D4
31941da177e4SLinus Torvalds	modes		M_SCSI
31951da177e4SLinus Torvalds	size		2
31961da177e4SLinus Torvalds	access_mode	RW
31971da177e4SLinus Torvalds}
31981da177e4SLinus Torvalds
31991da177e4SLinus Torvalds/*
32001da177e4SLinus Torvalds * Sequencer Control 0
32011da177e4SLinus Torvalds * Error detection mode, speed configuration,
32021da177e4SLinus Torvalds * single step, breakpoints and program load.
32031da177e4SLinus Torvalds */
32041da177e4SLinus Torvaldsregister SEQCTL0 {
32051da177e4SLinus Torvalds	address			0x0D6
32061da177e4SLinus Torvalds	access_mode RW
32071da177e4SLinus Torvalds	field	PERRORDIS	0x80
32081da177e4SLinus Torvalds	field	PAUSEDIS	0x40
32091da177e4SLinus Torvalds	field	FAILDIS		0x20
32101da177e4SLinus Torvalds	field	FASTMODE	0x10
32111da177e4SLinus Torvalds	field	BRKADRINTEN	0x08
32121da177e4SLinus Torvalds	field	STEP		0x04
32131da177e4SLinus Torvalds	field	SEQRESET	0x02
32141da177e4SLinus Torvalds	field	LOADRAM		0x01
32151da177e4SLinus Torvalds}
32161da177e4SLinus Torvalds
32171da177e4SLinus Torvalds/*
32181da177e4SLinus Torvalds * Sequencer Control 1
32191da177e4SLinus Torvalds * Instruction RAM Diagnostics
32201da177e4SLinus Torvalds */
32211da177e4SLinus Torvaldsregister SEQCTL1 {
32221da177e4SLinus Torvalds	address			0x0D7
32231da177e4SLinus Torvalds	access_mode RW
32241da177e4SLinus Torvalds	field	OVRLAY_DATA_CHK	0x08
32251da177e4SLinus Torvalds	field	RAMBIST_DONE	0x04
32261da177e4SLinus Torvalds	field	RAMBIST_FAIL	0x02
32271da177e4SLinus Torvalds	field	RAMBIST_EN	0x01
32281da177e4SLinus Torvalds}
32291da177e4SLinus Torvalds
32301da177e4SLinus Torvalds/*
32311da177e4SLinus Torvalds * Sequencer Flags
32321da177e4SLinus Torvalds * Zero and Carry state of the ALU.
32331da177e4SLinus Torvalds */
32341da177e4SLinus Torvaldsregister FLAGS {
32351da177e4SLinus Torvalds	address			0x0D8
32361da177e4SLinus Torvalds	access_mode RO
32371da177e4SLinus Torvalds	field	ZERO		0x02
32381da177e4SLinus Torvalds	field	CARRY		0x01
32391da177e4SLinus Torvalds}
32401da177e4SLinus Torvalds
32411da177e4SLinus Torvalds/*
32421da177e4SLinus Torvalds * Sequencer Interrupt Control
32431da177e4SLinus Torvalds */
32441da177e4SLinus Torvaldsregister SEQINTCTL {
32451da177e4SLinus Torvalds	address			0x0D9
32461da177e4SLinus Torvalds	access_mode RW
32471da177e4SLinus Torvalds	field	INTVEC1DSL	0x80
32481da177e4SLinus Torvalds	field	INT1_CONTEXT	0x20
32491da177e4SLinus Torvalds	field	SCS_SEQ_INT1M1	0x10
32501da177e4SLinus Torvalds	field	SCS_SEQ_INT1M0	0x08
32511da177e4SLinus Torvalds	field	INTMASK2	0x04
32521da177e4SLinus Torvalds	field	INTMASK1	0x02
32531da177e4SLinus Torvalds	field	IRET		0x01
32541da177e4SLinus Torvalds}
32551da177e4SLinus Torvalds
32561da177e4SLinus Torvalds/*
32571da177e4SLinus Torvalds * Sequencer RAM Data Port
32581da177e4SLinus Torvalds * Single byte window into the Sequencer Instruction Ram area starting
32591da177e4SLinus Torvalds * at the address specified by OVLYADDR.  To write a full instruction word,
32601da177e4SLinus Torvalds * simply write four bytes in succession.  OVLYADDR will increment after the
32611da177e4SLinus Torvalds * most significant instrution byte (the byte with the parity bit) is written.
32621da177e4SLinus Torvalds */
32631da177e4SLinus Torvaldsregister SEQRAM {
32641da177e4SLinus Torvalds	address			0x0DA
32651da177e4SLinus Torvalds	access_mode RW
32661da177e4SLinus Torvalds}
32671da177e4SLinus Torvalds
32681da177e4SLinus Torvalds/*
32691da177e4SLinus Torvalds * Sequencer Program Counter
32701da177e4SLinus Torvalds * Low byte must be written prior to high byte.
32711da177e4SLinus Torvalds */
32721da177e4SLinus Torvaldsregister PRGMCNT {
32731da177e4SLinus Torvalds	address			0x0DE
32741da177e4SLinus Torvalds	access_mode	RW
32751da177e4SLinus Torvalds	size		2
32761da177e4SLinus Torvalds}
32771da177e4SLinus Torvalds
32781da177e4SLinus Torvalds/*
32791da177e4SLinus Torvalds * Accumulator
32801da177e4SLinus Torvalds */
32811da177e4SLinus Torvaldsregister ACCUM {
32821da177e4SLinus Torvalds	address			0x0E0
32831da177e4SLinus Torvalds	access_mode RW
32841da177e4SLinus Torvalds	accumulator
32851da177e4SLinus Torvalds}
32861da177e4SLinus Torvalds
32871da177e4SLinus Torvalds/*
32881da177e4SLinus Torvalds * Source Index Register
32891da177e4SLinus Torvalds * Incrementing index for reads of SINDIR and the destination (low byte only)
32901da177e4SLinus Torvalds * for any immediate operands passed in jmp, jc, jnc, call instructions.
32911da177e4SLinus Torvalds * Example:
32921da177e4SLinus Torvalds *		mvi	0xFF	call some_routine;
32931da177e4SLinus Torvalds *
32941da177e4SLinus Torvalds *  Will set SINDEX[0] to 0xFF and call the routine "some_routine.
32951da177e4SLinus Torvalds */
32961da177e4SLinus Torvaldsregister SINDEX	{
32971da177e4SLinus Torvalds	address			0x0E2
32981da177e4SLinus Torvalds	access_mode	RW
32991da177e4SLinus Torvalds	size		2
33001da177e4SLinus Torvalds	sindex
33011da177e4SLinus Torvalds}
33021da177e4SLinus Torvalds
33031da177e4SLinus Torvalds/*
33041da177e4SLinus Torvalds * Destination Index Register
33051da177e4SLinus Torvalds * Incrementing index for writes to DINDIR.  Can be used as a scratch register.
33061da177e4SLinus Torvalds */
33071da177e4SLinus Torvaldsregister DINDEX {
33081da177e4SLinus Torvalds	address			0x0E4
33091da177e4SLinus Torvalds	access_mode	RW
33101da177e4SLinus Torvalds	size		2
33111da177e4SLinus Torvalds}
33121da177e4SLinus Torvalds
33131da177e4SLinus Torvalds/*
33141da177e4SLinus Torvalds * Break Address
33151da177e4SLinus Torvalds * Sequencer instruction breakpoint address address.
33161da177e4SLinus Torvalds */
33171da177e4SLinus Torvaldsregister BRKADDR0 {
33181da177e4SLinus Torvalds	address			0x0E6
33191da177e4SLinus Torvalds	access_mode	RW
33201da177e4SLinus Torvalds}
33211da177e4SLinus Torvalds
33221da177e4SLinus Torvaldsregister BRKADDR1 {
33231da177e4SLinus Torvalds	address			0x0E6
33241da177e4SLinus Torvalds	access_mode	RW
33251da177e4SLinus Torvalds	field	BRKDIS		0x80	/* Disable Breakpoint */
33261da177e4SLinus Torvalds}
33271da177e4SLinus Torvalds
33281da177e4SLinus Torvalds/*
33291da177e4SLinus Torvalds * All Ones
33301da177e4SLinus Torvalds * All reads to this register return the value 0xFF.
33311da177e4SLinus Torvalds */
33321da177e4SLinus Torvaldsregister ALLONES {
33331da177e4SLinus Torvalds	address			0x0E8
33341da177e4SLinus Torvalds	access_mode RO
33351da177e4SLinus Torvalds	allones
33361da177e4SLinus Torvalds}
33371da177e4SLinus Torvalds
33381da177e4SLinus Torvalds/*
33391da177e4SLinus Torvalds * All Zeros
33401da177e4SLinus Torvalds * All reads to this register return the value 0.
33411da177e4SLinus Torvalds */
33421da177e4SLinus Torvaldsregister ALLZEROS {
33431da177e4SLinus Torvalds	address			0x0EA
33441da177e4SLinus Torvalds	access_mode RO
33451da177e4SLinus Torvalds	allzeros
33461da177e4SLinus Torvalds}
33471da177e4SLinus Torvalds
33481da177e4SLinus Torvalds/*
33491da177e4SLinus Torvalds * No Destination
33501da177e4SLinus Torvalds * Writes to this register have no effect.
33511da177e4SLinus Torvalds */
33521da177e4SLinus Torvaldsregister NONE {
33531da177e4SLinus Torvalds	address			0x0EA
33541da177e4SLinus Torvalds	access_mode WO
33551da177e4SLinus Torvalds	none
33561da177e4SLinus Torvalds}
33571da177e4SLinus Torvalds
33581da177e4SLinus Torvalds/*
33591da177e4SLinus Torvalds * Source Index Indirect
33601da177e4SLinus Torvalds * Reading this register is equivalent to reading (register_base + SINDEX) and
33611da177e4SLinus Torvalds * incrementing SINDEX by 1.
33621da177e4SLinus Torvalds */
33631da177e4SLinus Torvaldsregister SINDIR	{
33641da177e4SLinus Torvalds	address			0x0EC
33651da177e4SLinus Torvalds	access_mode RO
33661da177e4SLinus Torvalds}
33671da177e4SLinus Torvalds
33681da177e4SLinus Torvalds/*
33691da177e4SLinus Torvalds * Destination Index Indirect
33701da177e4SLinus Torvalds * Writing this register is equivalent to writing to (register_base + DINDEX)
33711da177e4SLinus Torvalds * and incrementing DINDEX by 1.
33721da177e4SLinus Torvalds */
33731da177e4SLinus Torvaldsregister DINDIR	 {
33741da177e4SLinus Torvalds	address			0x0ED
33751da177e4SLinus Torvalds	access_mode WO
33761da177e4SLinus Torvalds}
33771da177e4SLinus Torvalds
33781da177e4SLinus Torvalds/*
33791da177e4SLinus Torvalds * Function One
33801da177e4SLinus Torvalds * 2's complement to bit value conversion.  Write the 2's complement value
33811da177e4SLinus Torvalds * (0-7 only) to the top nibble and retrieve the bit indexed by that value
33821da177e4SLinus Torvalds * on the next read of this register.
33831da177e4SLinus Torvalds * Example:
33841da177e4SLinus Torvalds *	Write	0x60
33851da177e4SLinus Torvalds *	Read	0x40
33861da177e4SLinus Torvalds */
33871da177e4SLinus Torvaldsregister FUNCTION1 {
33881da177e4SLinus Torvalds	address			0x0F0
33891da177e4SLinus Torvalds	access_mode RW
33901da177e4SLinus Torvalds}
33911da177e4SLinus Torvalds
33921da177e4SLinus Torvalds/*
33931da177e4SLinus Torvalds * Stack
33941da177e4SLinus Torvalds * Window into the stack.  Each stack location is 10 bits wide reported
33951da177e4SLinus Torvalds * low byte followed by high byte.  There are 8 stack locations.
33961da177e4SLinus Torvalds */
33971da177e4SLinus Torvaldsregister STACK {
33981da177e4SLinus Torvalds	address			0x0F2
33991da177e4SLinus Torvalds	access_mode RW
34001da177e4SLinus Torvalds}
34011da177e4SLinus Torvalds
34021da177e4SLinus Torvalds/*
34031da177e4SLinus Torvalds * Interrupt Vector 1 Address
34041da177e4SLinus Torvalds * Interrupt branch address for SCS SEQ_INT1 mode 0 and 1 interrupts.
34051da177e4SLinus Torvalds */
34061da177e4SLinus Torvaldsregister INTVEC1_ADDR {
34071da177e4SLinus Torvalds	address			0x0F4
34081da177e4SLinus Torvalds	access_mode	RW
34091da177e4SLinus Torvalds	size		2
34101da177e4SLinus Torvalds	modes		M_CFG
34111da177e4SLinus Torvalds}
34121da177e4SLinus Torvalds
34131da177e4SLinus Torvalds/*
34141da177e4SLinus Torvalds * Current Address
34151da177e4SLinus Torvalds * Address of the SEQRAM instruction currently executing instruction.
34161da177e4SLinus Torvalds */
34171da177e4SLinus Torvaldsregister CURADDR {
34181da177e4SLinus Torvalds	address			0x0F4
34191da177e4SLinus Torvalds	access_mode	RW
34201da177e4SLinus Torvalds	size		2
34211da177e4SLinus Torvalds	modes		M_SCSI
34221da177e4SLinus Torvalds}
34231da177e4SLinus Torvalds
34241da177e4SLinus Torvalds/*
34251da177e4SLinus Torvalds * Interrupt Vector 2 Address
34261da177e4SLinus Torvalds * Interrupt branch address for HST_SEQ_INT2 interrupts.
34271da177e4SLinus Torvalds */
34281da177e4SLinus Torvaldsregister INTVEC2_ADDR {
34291da177e4SLinus Torvalds	address			0x0F6
34301da177e4SLinus Torvalds	access_mode	RW
34311da177e4SLinus Torvalds	size		2
34321da177e4SLinus Torvalds	modes		M_CFG
34331da177e4SLinus Torvalds}
34341da177e4SLinus Torvalds
34351da177e4SLinus Torvalds/*
34361da177e4SLinus Torvalds * Last Address
34371da177e4SLinus Torvalds * Address of the SEQRAM instruction executed prior to the current instruction.
34381da177e4SLinus Torvalds */
34391da177e4SLinus Torvaldsregister LASTADDR {
34401da177e4SLinus Torvalds	address			0x0F6
34411da177e4SLinus Torvalds	access_mode	RW
34421da177e4SLinus Torvalds	size		2
34431da177e4SLinus Torvalds	modes		M_SCSI
34441da177e4SLinus Torvalds}
34451da177e4SLinus Torvalds
34461da177e4SLinus Torvaldsregister AHD_PCI_CONFIG_BASE {
34471da177e4SLinus Torvalds	address			0x100
34481da177e4SLinus Torvalds	access_mode	RW
34491da177e4SLinus Torvalds	size		256
34501da177e4SLinus Torvalds	modes		M_CFG
34511da177e4SLinus Torvalds}
34521da177e4SLinus Torvalds
34531da177e4SLinus Torvalds/* ---------------------- Scratch RAM Offsets ------------------------- */
34541da177e4SLinus Torvaldsscratch_ram {
34551da177e4SLinus Torvalds	/* Mode Specific */
34561da177e4SLinus Torvalds	address			0x0A0
34571da177e4SLinus Torvalds	size	8
34581da177e4SLinus Torvalds	modes	0, 1, 2, 3
34591da177e4SLinus Torvalds	REG0 {
34601da177e4SLinus Torvalds		size		2
34611da177e4SLinus Torvalds	}
34621da177e4SLinus Torvalds	REG1 {
34631da177e4SLinus Torvalds		size		2
34641da177e4SLinus Torvalds	}
34651da177e4SLinus Torvalds	REG_ISR {
34661da177e4SLinus Torvalds		size		2
34671da177e4SLinus Torvalds	}
34681da177e4SLinus Torvalds	SG_STATE {
34691da177e4SLinus Torvalds		size		1
34701da177e4SLinus Torvalds		field	SEGS_AVAIL	0x01
34711da177e4SLinus Torvalds		field	LOADING_NEEDED	0x02
34721da177e4SLinus Torvalds		field	FETCH_INPROG	0x04
34731da177e4SLinus Torvalds	}
34741da177e4SLinus Torvalds	/*
34751da177e4SLinus Torvalds	 * Track whether the transfer byte count for
34761da177e4SLinus Torvalds	 * the current data phase is odd.
34771da177e4SLinus Torvalds	 */
34781da177e4SLinus Torvalds	DATA_COUNT_ODD {
34791da177e4SLinus Torvalds		size		1
34801da177e4SLinus Torvalds	}
34811da177e4SLinus Torvalds}
34821da177e4SLinus Torvalds
34831da177e4SLinus Torvaldsscratch_ram {
34841da177e4SLinus Torvalds	/* Mode Specific */
34851da177e4SLinus Torvalds	address			0x0F8
34861da177e4SLinus Torvalds	size	8
34871da177e4SLinus Torvalds	modes	0, 1, 2, 3
34881da177e4SLinus Torvalds	LONGJMP_ADDR {
34891da177e4SLinus Torvalds		size		2
34901da177e4SLinus Torvalds	}
34911da177e4SLinus Torvalds	ACCUM_SAVE {
34921da177e4SLinus Torvalds		size		1
34931da177e4SLinus Torvalds	}
34941da177e4SLinus Torvalds}
34951da177e4SLinus Torvalds
34961da177e4SLinus Torvalds
34971da177e4SLinus Torvaldsscratch_ram {
34981da177e4SLinus Torvalds	address			0x100
34991da177e4SLinus Torvalds	size	128
35001da177e4SLinus Torvalds	modes	0, 1, 2, 3
35011da177e4SLinus Torvalds	/*
35021da177e4SLinus Torvalds	 * Per "other-id" execution queues.  We use an array of
35031da177e4SLinus Torvalds	 * tail pointers into lists of SCBs sorted by "other-id".
35041da177e4SLinus Torvalds	 * The execution head pointer threads the head SCBs for
35051da177e4SLinus Torvalds	 * each list.
35061da177e4SLinus Torvalds	 */
35071da177e4SLinus Torvalds	WAITING_SCB_TAILS {
35081da177e4SLinus Torvalds		size		32
35091da177e4SLinus Torvalds	}
35101da177e4SLinus Torvalds	WAITING_TID_HEAD {
35111da177e4SLinus Torvalds		size		2
35121da177e4SLinus Torvalds	}
35131da177e4SLinus Torvalds	WAITING_TID_TAIL {
35141da177e4SLinus Torvalds		size		2
35151da177e4SLinus Torvalds	}
35161da177e4SLinus Torvalds	/*
35171da177e4SLinus Torvalds	 * SCBID of the next SCB in the new SCB queue.
35181da177e4SLinus Torvalds	 */
35191da177e4SLinus Torvalds	NEXT_QUEUED_SCB_ADDR {
35201da177e4SLinus Torvalds		size		4
35211da177e4SLinus Torvalds	}
35221da177e4SLinus Torvalds	/*
35231da177e4SLinus Torvalds	 * head of list of SCBs that have
35241da177e4SLinus Torvalds	 * completed but have not been
35251da177e4SLinus Torvalds	 * put into the qoutfifo.
35261da177e4SLinus Torvalds	 */
35271da177e4SLinus Torvalds	COMPLETE_SCB_HEAD {
35281da177e4SLinus Torvalds		size		2
35291da177e4SLinus Torvalds	}
35301da177e4SLinus Torvalds	/*
35311da177e4SLinus Torvalds	 * The list of completed SCBs in
35321da177e4SLinus Torvalds	 * the active DMA.
35331da177e4SLinus Torvalds	 */
35341da177e4SLinus Torvalds	COMPLETE_SCB_DMAINPROG_HEAD {
35351da177e4SLinus Torvalds		size		2
35361da177e4SLinus Torvalds	}
35371da177e4SLinus Torvalds	/*
35381da177e4SLinus Torvalds	 * head of list of SCBs that have
35391da177e4SLinus Torvalds	 * completed but need to be uploaded
35401da177e4SLinus Torvalds	 * to the host prior to being completed.
35411da177e4SLinus Torvalds	 */
35421da177e4SLinus Torvalds	COMPLETE_DMA_SCB_HEAD {
35431da177e4SLinus Torvalds		size		2
35441da177e4SLinus Torvalds	}
35451da177e4SLinus Torvalds	/* Counting semaphore to prevent new select-outs */
35461da177e4SLinus Torvalds	QFREEZE_COUNT {
35471da177e4SLinus Torvalds		size		2
35481da177e4SLinus Torvalds	}
35491da177e4SLinus Torvalds	/*
35501da177e4SLinus Torvalds	 * Mode to restore on legacy idle loop exit.
35511da177e4SLinus Torvalds	 */
35521da177e4SLinus Torvalds	SAVED_MODE {
35531da177e4SLinus Torvalds		size		1
35541da177e4SLinus Torvalds	}
35551da177e4SLinus Torvalds	/*
35561da177e4SLinus Torvalds	 * Single byte buffer used to designate the type or message
35571da177e4SLinus Torvalds	 * to send to a target.
35581da177e4SLinus Torvalds	 */
35591da177e4SLinus Torvalds	MSG_OUT {
35601da177e4SLinus Torvalds		size		1
35611da177e4SLinus Torvalds	}
35621da177e4SLinus Torvalds	/* Parameters for DMA Logic */
35631da177e4SLinus Torvalds	DMAPARAMS {
35641da177e4SLinus Torvalds		size		1
35651da177e4SLinus Torvalds		field	PRELOADEN	0x80
35661da177e4SLinus Torvalds		field	WIDEODD		0x40
35671da177e4SLinus Torvalds		field	SCSIEN		0x20
35681da177e4SLinus Torvalds		field	SDMAEN		0x10
35691da177e4SLinus Torvalds		field	SDMAENACK	0x10
35701da177e4SLinus Torvalds		field	HDMAEN		0x08
35711da177e4SLinus Torvalds		field	HDMAENACK	0x08
35721da177e4SLinus Torvalds		field	DIRECTION	0x04	/* Set indicates PCI->SCSI */
35731da177e4SLinus Torvalds		field	FIFOFLUSH	0x02
35741da177e4SLinus Torvalds		field	FIFORESET	0x01
35751da177e4SLinus Torvalds	}
35761da177e4SLinus Torvalds	SEQ_FLAGS {
35771da177e4SLinus Torvalds		size		1
35781da177e4SLinus Torvalds		field	NOT_IDENTIFIED		0x80
35791da177e4SLinus Torvalds		field	NO_CDB_SENT		0x40
35801da177e4SLinus Torvalds		field	TARGET_CMD_IS_TAGGED	0x40
35811da177e4SLinus Torvalds		field	DPHASE			0x20
35821da177e4SLinus Torvalds		/* Target flags */
35831da177e4SLinus Torvalds		field	TARG_CMD_PENDING	0x10
35841da177e4SLinus Torvalds		field	CMDPHASE_PENDING	0x08
35851da177e4SLinus Torvalds		field	DPHASE_PENDING		0x04
35861da177e4SLinus Torvalds		field	SPHASE_PENDING		0x02
35871da177e4SLinus Torvalds		field	NO_DISCONNECT		0x01
35881da177e4SLinus Torvalds	}
35891da177e4SLinus Torvalds	/*
35901da177e4SLinus Torvalds	 * Temporary storage for the
35911da177e4SLinus Torvalds	 * target/channel/lun of a
35921da177e4SLinus Torvalds	 * reconnecting target
35931da177e4SLinus Torvalds	 */
35941da177e4SLinus Torvalds	SAVED_SCSIID {
35951da177e4SLinus Torvalds		size		1
35961da177e4SLinus Torvalds	}
35971da177e4SLinus Torvalds	SAVED_LUN {
35981da177e4SLinus Torvalds		size		1
35991da177e4SLinus Torvalds	}
36001da177e4SLinus Torvalds	/*
36011da177e4SLinus Torvalds	 * The last bus phase as seen by the sequencer.
36021da177e4SLinus Torvalds	 */
36031da177e4SLinus Torvalds	LASTPHASE {
36041da177e4SLinus Torvalds		size		1
36051da177e4SLinus Torvalds		field	CDI		0x80
36061da177e4SLinus Torvalds		field	IOI		0x40
36071da177e4SLinus Torvalds		field	MSGI		0x20
36081da177e4SLinus Torvalds		field	P_BUSFREE	0x01
36091da177e4SLinus Torvalds		enum	PHASE_MASK  CDO|IOO|MSGO {
36101da177e4SLinus Torvalds			P_DATAOUT	0x0,
36111da177e4SLinus Torvalds			P_DATAIN	IOO,
36121da177e4SLinus Torvalds			P_DATAOUT_DT	P_DATAOUT|MSGO,
36131da177e4SLinus Torvalds			P_DATAIN_DT	P_DATAIN|MSGO,
36141da177e4SLinus Torvalds			P_COMMAND	CDO,
36151da177e4SLinus Torvalds			P_MESGOUT	CDO|MSGO,
36161da177e4SLinus Torvalds			P_STATUS	CDO|IOO,
36171da177e4SLinus Torvalds			P_MESGIN	CDO|IOO|MSGO
36181da177e4SLinus Torvalds		}
36191da177e4SLinus Torvalds	}
36201da177e4SLinus Torvalds	/*
36211da177e4SLinus Torvalds	 * Value to "or" into the SCBPTR[1] value to
36221da177e4SLinus Torvalds	 * indicate that an entry in the QINFIFO is valid.
36231da177e4SLinus Torvalds	 */
36241da177e4SLinus Torvalds	QOUTFIFO_ENTRY_VALID_TAG {
36251da177e4SLinus Torvalds		size		1
36261da177e4SLinus Torvalds	}
36271da177e4SLinus Torvalds	/*
36281da177e4SLinus Torvalds	 * Base address of our shared data with the kernel driver in host
36291da177e4SLinus Torvalds	 * memory.  This includes the qoutfifo and target mode
36301da177e4SLinus Torvalds	 * incoming command queue.
36311da177e4SLinus Torvalds	 */
36321da177e4SLinus Torvalds	SHARED_DATA_ADDR {
36331da177e4SLinus Torvalds		size		4
36341da177e4SLinus Torvalds	}
36351da177e4SLinus Torvalds	/*
36361da177e4SLinus Torvalds	 * Pointer to location in host memory for next
36371da177e4SLinus Torvalds	 * position in the qoutfifo.
36381da177e4SLinus Torvalds	 */
36391da177e4SLinus Torvalds	QOUTFIFO_NEXT_ADDR {
36401da177e4SLinus Torvalds		size		4
36411da177e4SLinus Torvalds	}
36421da177e4SLinus Torvalds	/*
36431da177e4SLinus Torvalds	 * Kernel and sequencer offsets into the queue of
36441da177e4SLinus Torvalds	 * incoming target mode command descriptors.  The
36451da177e4SLinus Torvalds	 * queue is full when the KERNEL_TQINPOS == TQINPOS.
36461da177e4SLinus Torvalds	 */
36471da177e4SLinus Torvalds	KERNEL_TQINPOS {
36481da177e4SLinus Torvalds		size		1
36491da177e4SLinus Torvalds	}
36501da177e4SLinus Torvalds	TQINPOS {
36511da177e4SLinus Torvalds		size		1
36521da177e4SLinus Torvalds	}
36531da177e4SLinus Torvalds	ARG_1 {
36541da177e4SLinus Torvalds		size		1
36551da177e4SLinus Torvalds		mask	SEND_MSG		0x80
36561da177e4SLinus Torvalds		mask	SEND_SENSE		0x40
36571da177e4SLinus Torvalds		mask	SEND_REJ		0x20
36581da177e4SLinus Torvalds		mask	MSGOUT_PHASEMIS		0x10
36591da177e4SLinus Torvalds		mask	EXIT_MSG_LOOP		0x08
36601da177e4SLinus Torvalds		mask	CONT_MSG_LOOP_WRITE	0x04
36611da177e4SLinus Torvalds		mask	CONT_MSG_LOOP_READ	0x03
36621da177e4SLinus Torvalds		mask	CONT_MSG_LOOP_TARG	0x02
36631da177e4SLinus Torvalds		alias	RETURN_1
36641da177e4SLinus Torvalds	}
36651da177e4SLinus Torvalds	ARG_2 {
36661da177e4SLinus Torvalds		size		1
36671da177e4SLinus Torvalds		alias	RETURN_2
36681da177e4SLinus Torvalds	}
36691da177e4SLinus Torvalds
36701da177e4SLinus Torvalds	/*
36711da177e4SLinus Torvalds	 * Snapshot of MSG_OUT taken after each message is sent.
36721da177e4SLinus Torvalds	 */
36731da177e4SLinus Torvalds	LAST_MSG {
36741da177e4SLinus Torvalds		size		1
36751da177e4SLinus Torvalds	}
36761da177e4SLinus Torvalds
36771da177e4SLinus Torvalds	/*
36781da177e4SLinus Torvalds	 * Sequences the kernel driver has okayed for us.  This allows
36791da177e4SLinus Torvalds	 * the driver to do things like prevent initiator or target
36801da177e4SLinus Torvalds	 * operations.
36811da177e4SLinus Torvalds	 */
36821da177e4SLinus Torvalds	SCSISEQ_TEMPLATE {
36831da177e4SLinus Torvalds		size		1
36841da177e4SLinus Torvalds		field	MANUALCTL	0x40
36851da177e4SLinus Torvalds		field	ENSELI		0x20
36861da177e4SLinus Torvalds		field	ENRSELI		0x10
36871da177e4SLinus Torvalds		field	MANUALP		0x0C
36881da177e4SLinus Torvalds		field	ENAUTOATNP	0x02
36891da177e4SLinus Torvalds		field	ALTSTIM		0x01
36901da177e4SLinus Torvalds	}
36911da177e4SLinus Torvalds
36921da177e4SLinus Torvalds	/*
36931da177e4SLinus Torvalds	 * The initiator specified tag for this target mode transaction.
36941da177e4SLinus Torvalds	 */
36951da177e4SLinus Torvalds	INITIATOR_TAG {
36961da177e4SLinus Torvalds		size		1
36971da177e4SLinus Torvalds	}
36981da177e4SLinus Torvalds
36991da177e4SLinus Torvalds	SEQ_FLAGS2 {
37001da177e4SLinus Torvalds		size		1
37011da177e4SLinus Torvalds		field	TARGET_MSG_PENDING	  0x02
37021da177e4SLinus Torvalds		field	SELECTOUT_QFROZEN	  0x04
37031da177e4SLinus Torvalds	}
37041da177e4SLinus Torvalds
37051da177e4SLinus Torvalds	ALLOCFIFO_SCBPTR {
37061da177e4SLinus Torvalds		size		2
37071da177e4SLinus Torvalds	}
37081da177e4SLinus Torvalds
37091da177e4SLinus Torvalds	/*
37101da177e4SLinus Torvalds	 * The maximum amount of time to wait, when interrupt coalescing
37111da177e4SLinus Torvalds	 * is enabled, before issueing a CMDCMPLT interrupt for a completed
37121da177e4SLinus Torvalds	 * command.
37131da177e4SLinus Torvalds	 */
37141da177e4SLinus Torvalds	INT_COALESCING_TIMER {
37151da177e4SLinus Torvalds		size		2
37161da177e4SLinus Torvalds	}
37171da177e4SLinus Torvalds
37181da177e4SLinus Torvalds	/*
37191da177e4SLinus Torvalds	 * The maximum number of commands to coalesce into a single interrupt.
37201da177e4SLinus Torvalds	 * Actually the 2's complement of that value to simplify sequencer
37211da177e4SLinus Torvalds	 * code.
37221da177e4SLinus Torvalds	 */
37231da177e4SLinus Torvalds	INT_COALESCING_MAXCMDS {
37241da177e4SLinus Torvalds		size		1
37251da177e4SLinus Torvalds	}
37261da177e4SLinus Torvalds
37271da177e4SLinus Torvalds	/*
37281da177e4SLinus Torvalds	 * The minimum number of commands still outstanding required
37291da177e4SLinus Torvalds	 * to continue coalescing (2's complement of value).
37301da177e4SLinus Torvalds	 */
37311da177e4SLinus Torvalds	INT_COALESCING_MINCMDS {
37321da177e4SLinus Torvalds		size		1
37331da177e4SLinus Torvalds	}
37341da177e4SLinus Torvalds
37351da177e4SLinus Torvalds	/*
37361da177e4SLinus Torvalds	 * Number of commands "in-flight".
37371da177e4SLinus Torvalds	 */
37381da177e4SLinus Torvalds	CMDS_PENDING {
37391da177e4SLinus Torvalds		size		2
37401da177e4SLinus Torvalds	}
37411da177e4SLinus Torvalds
37421da177e4SLinus Torvalds	/*
37431da177e4SLinus Torvalds	 * The count of commands that have been coalesced.
37441da177e4SLinus Torvalds	 */
37451da177e4SLinus Torvalds	INT_COALESCING_CMDCOUNT {
37461da177e4SLinus Torvalds		size		1
37471da177e4SLinus Torvalds	}
37481da177e4SLinus Torvalds
37491da177e4SLinus Torvalds	/*
37501da177e4SLinus Torvalds	 * Since the HS_MAIBOX is self clearing, copy its contents to
37511da177e4SLinus Torvalds	 * this position in scratch ram every time it changes.
37521da177e4SLinus Torvalds	 */
37531da177e4SLinus Torvalds	LOCAL_HS_MAILBOX {
37541da177e4SLinus Torvalds		size		1
37551da177e4SLinus Torvalds	}
37561da177e4SLinus Torvalds	/*
37571da177e4SLinus Torvalds	 * Target-mode CDB type to CDB length table used
37581da177e4SLinus Torvalds	 * in non-packetized operation.
37591da177e4SLinus Torvalds	 */
37601da177e4SLinus Torvalds	CMDSIZE_TABLE {
37611da177e4SLinus Torvalds		size		8
37621da177e4SLinus Torvalds	}
37631da177e4SLinus Torvalds}
37641da177e4SLinus Torvalds
37651da177e4SLinus Torvalds/************************* Hardware SCB Definition ****************************/
37661da177e4SLinus Torvaldsscb {
37671da177e4SLinus Torvalds	address			0x180
37681da177e4SLinus Torvalds	size	64
37691da177e4SLinus Torvalds	modes	0, 1, 2, 3
37701da177e4SLinus Torvalds	SCB_RESIDUAL_DATACNT {
37711da177e4SLinus Torvalds		size	4
37721da177e4SLinus Torvalds		alias	SCB_CDB_STORE
37731da177e4SLinus Torvalds		alias	SCB_HOST_CDB_PTR
37741da177e4SLinus Torvalds	}
37751da177e4SLinus Torvalds	SCB_RESIDUAL_SGPTR {
37761da177e4SLinus Torvalds		size	4
37771da177e4SLinus Torvalds		field	SG_ADDR_MASK		0xf8	/* In the last byte */
37781da177e4SLinus Torvalds		field	SG_OVERRUN_RESID	0x02	/* In the first byte */
37791da177e4SLinus Torvalds		field	SG_LIST_NULL		0x01	/* In the first byte */
37801da177e4SLinus Torvalds	}
37811da177e4SLinus Torvalds	SCB_SCSI_STATUS {
37821da177e4SLinus Torvalds		size	1
37831da177e4SLinus Torvalds		alias	SCB_HOST_CDB_LEN
37841da177e4SLinus Torvalds	}
37851da177e4SLinus Torvalds	SCB_TARGET_PHASES {
37861da177e4SLinus Torvalds		size	1
37871da177e4SLinus Torvalds	}
37881da177e4SLinus Torvalds	SCB_TARGET_DATA_DIR {
37891da177e4SLinus Torvalds		size	1
37901da177e4SLinus Torvalds	}
37911da177e4SLinus Torvalds	SCB_TARGET_ITAG {
37921da177e4SLinus Torvalds		size	1
37931da177e4SLinus Torvalds	}
37941da177e4SLinus Torvalds	SCB_SENSE_BUSADDR {
37951da177e4SLinus Torvalds		/*
37961da177e4SLinus Torvalds		 * Only valid if CDB length is less than 13 bytes or
37971da177e4SLinus Torvalds		 * we are using a CDB pointer.  Otherwise contains
37981da177e4SLinus Torvalds		 * the last 4 bytes of embedded cdb information.
37991da177e4SLinus Torvalds		 */
38001da177e4SLinus Torvalds		size	4
38011da177e4SLinus Torvalds		alias	SCB_NEXT_COMPLETE
38021da177e4SLinus Torvalds	}
38031da177e4SLinus Torvalds	SCB_TAG {
38041da177e4SLinus Torvalds		alias	SCB_FIFO_USE_COUNT
38051da177e4SLinus Torvalds		size	2
38061da177e4SLinus Torvalds	}
38071da177e4SLinus Torvalds	SCB_CONTROL {
38081da177e4SLinus Torvalds		size	1
38091da177e4SLinus Torvalds		field	TARGET_SCB	0x80
38101da177e4SLinus Torvalds		field	DISCENB		0x40
38111da177e4SLinus Torvalds		field	TAG_ENB		0x20
38121da177e4SLinus Torvalds		field	MK_MESSAGE	0x10
38131da177e4SLinus Torvalds		field	STATUS_RCVD	0x08
38141da177e4SLinus Torvalds		field	DISCONNECTED	0x04
38151da177e4SLinus Torvalds		field	SCB_TAG_TYPE	0x03
38161da177e4SLinus Torvalds	}
38171da177e4SLinus Torvalds	SCB_SCSIID {
38181da177e4SLinus Torvalds		size	1
38191da177e4SLinus Torvalds		field	TID	0xF0
38201da177e4SLinus Torvalds		field	OID	0x0F
38211da177e4SLinus Torvalds	}
38221da177e4SLinus Torvalds	SCB_LUN {
38231da177e4SLinus Torvalds		size	1
38241da177e4SLinus Torvalds		field	LID	0xff
38251da177e4SLinus Torvalds	}
38261da177e4SLinus Torvalds	SCB_TASK_ATTRIBUTE {
38271da177e4SLinus Torvalds		size	1
38281da177e4SLinus Torvalds		/*
38291da177e4SLinus Torvalds		 * Overloaded field for non-packetized
38301da177e4SLinus Torvalds		 * ignore wide residue message handling.
38311da177e4SLinus Torvalds		 */
38321da177e4SLinus Torvalds		field	SCB_XFERLEN_ODD	0x01
38331da177e4SLinus Torvalds	}
38341da177e4SLinus Torvalds	SCB_CDB_LEN {
38351da177e4SLinus Torvalds		size	1
38361da177e4SLinus Torvalds		field	SCB_CDB_LEN_PTR	0x80	/* CDB in host memory */
38371da177e4SLinus Torvalds	}
38381da177e4SLinus Torvalds	SCB_TASK_MANAGEMENT {
38391da177e4SLinus Torvalds		size	1
38401da177e4SLinus Torvalds	}
38411da177e4SLinus Torvalds	SCB_DATAPTR {
38421da177e4SLinus Torvalds		size	8
38431da177e4SLinus Torvalds	}
38441da177e4SLinus Torvalds	SCB_DATACNT {
38451da177e4SLinus Torvalds		/*
38461da177e4SLinus Torvalds		 * The last byte is really the high address bits for
38471da177e4SLinus Torvalds		 * the data address.
38481da177e4SLinus Torvalds		 */
38491da177e4SLinus Torvalds		size	4
38501da177e4SLinus Torvalds		field	SG_LAST_SEG		0x80	/* In the fourth byte */
38511da177e4SLinus Torvalds		field	SG_HIGH_ADDR_BITS	0x7F	/* In the fourth byte */
38521da177e4SLinus Torvalds	}
38531da177e4SLinus Torvalds	SCB_SGPTR {
38541da177e4SLinus Torvalds		size	4
38551da177e4SLinus Torvalds		field	SG_STATUS_VALID	0x04	/* In the first byte */
38561da177e4SLinus Torvalds		field	SG_FULL_RESID	0x02	/* In the first byte */
38571da177e4SLinus Torvalds		field	SG_LIST_NULL	0x01	/* In the first byte */
38581da177e4SLinus Torvalds	}
38591da177e4SLinus Torvalds	SCB_BUSADDR {
38601da177e4SLinus Torvalds		size	4
38611da177e4SLinus Torvalds	}
38621da177e4SLinus Torvalds	SCB_NEXT {
38631da177e4SLinus Torvalds		alias	SCB_NEXT_SCB_BUSADDR
38641da177e4SLinus Torvalds		size	2
38651da177e4SLinus Torvalds	}
38661da177e4SLinus Torvalds	SCB_NEXT2 {
38671da177e4SLinus Torvalds		size	2
38681da177e4SLinus Torvalds	}
38691da177e4SLinus Torvalds	SCB_SPARE {
38701da177e4SLinus Torvalds		size	8
38711da177e4SLinus Torvalds		alias	SCB_PKT_LUN
38721da177e4SLinus Torvalds	}
38731da177e4SLinus Torvalds	SCB_DISCONNECTED_LISTS {
38741da177e4SLinus Torvalds		size	8
38751da177e4SLinus Torvalds	}
38761da177e4SLinus Torvalds}
38771da177e4SLinus Torvalds
38781da177e4SLinus Torvalds/*********************************** Constants ********************************/
38791da177e4SLinus Torvaldsconst MK_MESSAGE_BIT_OFFSET	4
38801da177e4SLinus Torvaldsconst TID_SHIFT		4
38811da177e4SLinus Torvaldsconst TARGET_CMD_CMPLT	0xfe
38821da177e4SLinus Torvaldsconst INVALID_ADDR	0x80
38831da177e4SLinus Torvalds#define SCB_LIST_NULL	0xff
38841da177e4SLinus Torvalds#define QOUTFIFO_ENTRY_VALID_TOGGLE	0x80
38851da177e4SLinus Torvalds
38861da177e4SLinus Torvaldsconst CCSGADDR_MAX	0x80
38871da177e4SLinus Torvaldsconst CCSCBADDR_MAX	0x80
38881da177e4SLinus Torvaldsconst CCSGRAM_MAXSEGS	16
38891da177e4SLinus Torvalds
38901da177e4SLinus Torvalds/* Selection Timeout Timer Constants */
38911da177e4SLinus Torvaldsconst STIMESEL_SHIFT	3
38921da177e4SLinus Torvaldsconst STIMESEL_MIN	0x18
38931da177e4SLinus Torvaldsconst STIMESEL_BUG_ADJ	0x8
38941da177e4SLinus Torvalds
38951da177e4SLinus Torvalds/* WDTR Message values */
38961da177e4SLinus Torvaldsconst BUS_8_BIT			0x00
38971da177e4SLinus Torvaldsconst BUS_16_BIT		0x01
38981da177e4SLinus Torvaldsconst BUS_32_BIT		0x02
38991da177e4SLinus Torvalds
39001da177e4SLinus Torvalds/* Offset maximums */
39011da177e4SLinus Torvaldsconst MAX_OFFSET		0xfe
39021da177e4SLinus Torvaldsconst MAX_OFFSET_PACED		0xfe
39031da177e4SLinus Torvaldsconst MAX_OFFSET_PACED_BUG	0x7f
39041da177e4SLinus Torvalds/*
39051da177e4SLinus Torvalds * Some 160 devices incorrectly accept 0xfe as a
39061da177e4SLinus Torvalds * sync offset, but will overrun this value.  Limit
39071da177e4SLinus Torvalds * to 0x7f for speed lower than U320 which will
39081da177e4SLinus Torvalds * avoid the persistent sync offset overruns.
39091da177e4SLinus Torvalds */
39101da177e4SLinus Torvaldsconst MAX_OFFSET_NON_PACED	0x7f
39111da177e4SLinus Torvaldsconst HOST_MSG			0xff
39121da177e4SLinus Torvalds
39131da177e4SLinus Torvalds/*
39141da177e4SLinus Torvalds * The size of our sense buffers.
39151da177e4SLinus Torvalds * Sense buffer mapping can be handled in either of two ways.
39161da177e4SLinus Torvalds * The first is to allocate a dmamap for each transaction.
39171da177e4SLinus Torvalds * Depending on the architecture, dmamaps can be costly. The
39181da177e4SLinus Torvalds * alternative is to statically map the buffers in much the same
39191da177e4SLinus Torvalds * way we handle our scatter gather lists.  The driver implements
39201da177e4SLinus Torvalds * the later.
39211da177e4SLinus Torvalds */
39221da177e4SLinus Torvaldsconst AHD_SENSE_BUFSIZE		256
39231da177e4SLinus Torvalds
39241da177e4SLinus Torvalds/* Target mode command processing constants */
39251da177e4SLinus Torvaldsconst CMD_GROUP_CODE_SHIFT	0x05
39261da177e4SLinus Torvalds
39271da177e4SLinus Torvaldsconst STATUS_BUSY		0x08
39281da177e4SLinus Torvaldsconst STATUS_QUEUE_FULL		0x28
39291da177e4SLinus Torvaldsconst STATUS_PKT_SENSE		0xFF
39301da177e4SLinus Torvaldsconst TARGET_DATA_IN		1
39311da177e4SLinus Torvalds
39321da177e4SLinus Torvaldsconst SCB_TRANSFER_SIZE_FULL_LUN	56
39331da177e4SLinus Torvaldsconst SCB_TRANSFER_SIZE_1BYTE_LUN	48
39341da177e4SLinus Torvalds/* PKT_OVERRUN_BUFSIZE must be a multiple of 256 less than 64K */
39351da177e4SLinus Torvaldsconst PKT_OVERRUN_BUFSIZE	512
39361da177e4SLinus Torvalds
39371da177e4SLinus Torvalds/*
39381da177e4SLinus Torvalds * Timer parameters.
39391da177e4SLinus Torvalds */
39401da177e4SLinus Torvaldsconst AHD_TIMER_US_PER_TICK	25
39411da177e4SLinus Torvaldsconst AHD_TIMER_MAX_TICKS	0xFFFF
39421da177e4SLinus Torvaldsconst AHD_TIMER_MAX_US		(AHD_TIMER_MAX_TICKS * AHD_TIMER_US_PER_TICK)
39431da177e4SLinus Torvalds
39441da177e4SLinus Torvalds/*
39451da177e4SLinus Torvalds * Downloaded (kernel inserted) constants
39461da177e4SLinus Torvalds */
39471da177e4SLinus Torvaldsconst SG_PREFETCH_CNT download
39481da177e4SLinus Torvaldsconst SG_PREFETCH_CNT_LIMIT download
39491da177e4SLinus Torvaldsconst SG_PREFETCH_ALIGN_MASK download
39501da177e4SLinus Torvaldsconst SG_PREFETCH_ADDR_MASK download
39511da177e4SLinus Torvaldsconst SG_SIZEOF download
39521da177e4SLinus Torvaldsconst PKT_OVERRUN_BUFOFFSET download
39531da177e4SLinus Torvaldsconst SCB_TRANSFER_SIZE	download
39541da177e4SLinus Torvalds
39551da177e4SLinus Torvalds/*
39561da177e4SLinus Torvalds * BIOS SCB offsets
39571da177e4SLinus Torvalds */
39581da177e4SLinus Torvaldsconst NVRAM_SCB_OFFSET	0x2C
3959