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