162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Aic7xxx register and scratch ram definitions.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (c) 1994-2001 Justin T. Gibbs.
562306a36Sopenharmony_ci * Copyright (c) 2000-2001 Adaptec Inc.
662306a36Sopenharmony_ci * All rights reserved.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
962306a36Sopenharmony_ci * modification, are permitted provided that the following conditions
1062306a36Sopenharmony_ci * are met:
1162306a36Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright
1262306a36Sopenharmony_ci *    notice, this list of conditions, and the following disclaimer,
1362306a36Sopenharmony_ci *    without modification.
1462306a36Sopenharmony_ci * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1562306a36Sopenharmony_ci *    substantially similar to the "NO WARRANTY" disclaimer below
1662306a36Sopenharmony_ci *    ("Disclaimer") and any redistribution must be conditioned upon
1762306a36Sopenharmony_ci *    including a substantially similar Disclaimer requirement for further
1862306a36Sopenharmony_ci *    binary redistribution.
1962306a36Sopenharmony_ci * 3. Neither the names of the above-listed copyright holders nor the names
2062306a36Sopenharmony_ci *    of any contributors may be used to endorse or promote products derived
2162306a36Sopenharmony_ci *    from this software without specific prior written permission.
2262306a36Sopenharmony_ci *
2362306a36Sopenharmony_ci * Alternatively, this software may be distributed under the terms of the
2462306a36Sopenharmony_ci * GNU General Public License ("GPL") version 2 as published by the Free
2562306a36Sopenharmony_ci * Software Foundation.
2662306a36Sopenharmony_ci *
2762306a36Sopenharmony_ci * NO WARRANTY
2862306a36Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2962306a36Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3062306a36Sopenharmony_ci * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3162306a36Sopenharmony_ci * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3262306a36Sopenharmony_ci * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3362306a36Sopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3462306a36Sopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3562306a36Sopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3662306a36Sopenharmony_ci * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
3762306a36Sopenharmony_ci * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3862306a36Sopenharmony_ci * POSSIBILITY OF SUCH DAMAGES.
3962306a36Sopenharmony_ci *
4062306a36Sopenharmony_ci * $FreeBSD$
4162306a36Sopenharmony_ci */
4262306a36Sopenharmony_ciVERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $"
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/*
4562306a36Sopenharmony_ci * This file is processed by the aic7xxx_asm utility for use in assembling
4662306a36Sopenharmony_ci * firmware for the aic7xxx family of SCSI host adapters as well as to generate
4762306a36Sopenharmony_ci * a C header file for use in the kernel portion of the Aic7xxx driver.
4862306a36Sopenharmony_ci *
4962306a36Sopenharmony_ci * All page numbers refer to the Adaptec AIC-7770 Data Book available from
5062306a36Sopenharmony_ci * Adaptec's Technical Documents Department 1-800-934-2766
5162306a36Sopenharmony_ci */
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci/*
5462306a36Sopenharmony_ci * Registers marked "dont_generate_debug_code" are not (yet) referenced
5562306a36Sopenharmony_ci * from the driver code, and this keyword inhibit generation
5662306a36Sopenharmony_ci * of debug code for them.
5762306a36Sopenharmony_ci *
5862306a36Sopenharmony_ci * REG_PRETTY_PRINT config will complain if dont_generate_debug_code
5962306a36Sopenharmony_ci * is added to the register which is referenced in the driver.
6062306a36Sopenharmony_ci * Unreferenced register with no dont_generate_debug_code will result
6162306a36Sopenharmony_ci * in dead code. No warning is issued.
6262306a36Sopenharmony_ci */
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci/*
6562306a36Sopenharmony_ci * SCSI Sequence Control (p. 3-11).
6662306a36Sopenharmony_ci * Each bit, when set starts a specific SCSI sequence on the bus
6762306a36Sopenharmony_ci */
6862306a36Sopenharmony_ciregister SCSISEQ {
6962306a36Sopenharmony_ci	address			0x000
7062306a36Sopenharmony_ci	access_mode RW
7162306a36Sopenharmony_ci	field	TEMODE		0x80
7262306a36Sopenharmony_ci	field	ENSELO		0x40
7362306a36Sopenharmony_ci	field	ENSELI		0x20
7462306a36Sopenharmony_ci	field	ENRSELI		0x10
7562306a36Sopenharmony_ci	field	ENAUTOATNO	0x08
7662306a36Sopenharmony_ci	field	ENAUTOATNI	0x04
7762306a36Sopenharmony_ci	field	ENAUTOATNP	0x02
7862306a36Sopenharmony_ci	field	SCSIRSTO	0x01
7962306a36Sopenharmony_ci}
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci/*
8262306a36Sopenharmony_ci * SCSI Transfer Control 0 Register (pp. 3-13).
8362306a36Sopenharmony_ci * Controls the SCSI module data path.
8462306a36Sopenharmony_ci */
8562306a36Sopenharmony_ciregister SXFRCTL0 {
8662306a36Sopenharmony_ci	address			0x001
8762306a36Sopenharmony_ci	access_mode RW
8862306a36Sopenharmony_ci	field	DFON		0x80
8962306a36Sopenharmony_ci	field	DFPEXP		0x40
9062306a36Sopenharmony_ci	field	FAST20		0x20
9162306a36Sopenharmony_ci	field	CLRSTCNT	0x10
9262306a36Sopenharmony_ci	field	SPIOEN		0x08
9362306a36Sopenharmony_ci	field	SCAMEN		0x04
9462306a36Sopenharmony_ci	field	CLRCHN		0x02
9562306a36Sopenharmony_ci}
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci/*
9862306a36Sopenharmony_ci * SCSI Transfer Control 1 Register (pp. 3-14,15).
9962306a36Sopenharmony_ci * Controls the SCSI module data path.
10062306a36Sopenharmony_ci */
10162306a36Sopenharmony_ciregister SXFRCTL1 {
10262306a36Sopenharmony_ci	address			0x002
10362306a36Sopenharmony_ci	access_mode RW
10462306a36Sopenharmony_ci	field	BITBUCKET	0x80
10562306a36Sopenharmony_ci	field	SWRAPEN		0x40
10662306a36Sopenharmony_ci	field	ENSPCHK		0x20
10762306a36Sopenharmony_ci	mask	STIMESEL	0x18
10862306a36Sopenharmony_ci	field	ENSTIMER	0x04
10962306a36Sopenharmony_ci	field	ACTNEGEN	0x02
11062306a36Sopenharmony_ci	field	STPWEN		0x01	/* Powered Termination */
11162306a36Sopenharmony_ci	dont_generate_debug_code
11262306a36Sopenharmony_ci}
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci/*
11562306a36Sopenharmony_ci * SCSI Control Signal Read Register (p. 3-15).
11662306a36Sopenharmony_ci * Reads the actual state of the SCSI bus pins
11762306a36Sopenharmony_ci */
11862306a36Sopenharmony_ciregister SCSISIGI {
11962306a36Sopenharmony_ci	address			0x003
12062306a36Sopenharmony_ci	access_mode RO
12162306a36Sopenharmony_ci	field	CDI		0x80
12262306a36Sopenharmony_ci	field	IOI		0x40
12362306a36Sopenharmony_ci	field	MSGI		0x20
12462306a36Sopenharmony_ci	field	ATNI		0x10
12562306a36Sopenharmony_ci	field	SELI		0x08
12662306a36Sopenharmony_ci	field	BSYI		0x04
12762306a36Sopenharmony_ci	field	REQI		0x02
12862306a36Sopenharmony_ci	field	ACKI		0x01
12962306a36Sopenharmony_ci/*
13062306a36Sopenharmony_ci * Possible phases in SCSISIGI
13162306a36Sopenharmony_ci */
13262306a36Sopenharmony_ci	mask	PHASE_MASK	CDI|IOI|MSGI
13362306a36Sopenharmony_ci	mask	P_DATAOUT	0x00
13462306a36Sopenharmony_ci	mask	P_DATAIN	IOI
13562306a36Sopenharmony_ci	mask	P_DATAOUT_DT	P_DATAOUT|MSGI
13662306a36Sopenharmony_ci	mask	P_DATAIN_DT	P_DATAIN|MSGI
13762306a36Sopenharmony_ci	mask	P_COMMAND	CDI
13862306a36Sopenharmony_ci	mask	P_MESGOUT	CDI|MSGI
13962306a36Sopenharmony_ci	mask	P_STATUS	CDI|IOI
14062306a36Sopenharmony_ci	mask	P_MESGIN	CDI|IOI|MSGI
14162306a36Sopenharmony_ci}
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci/*
14462306a36Sopenharmony_ci * SCSI Control Signal Write Register (p. 3-16).
14562306a36Sopenharmony_ci * Writing to this register modifies the control signals on the bus.  Only
14662306a36Sopenharmony_ci * those signals that are allowed in the current mode (Initiator/Target) are
14762306a36Sopenharmony_ci * asserted.
14862306a36Sopenharmony_ci */
14962306a36Sopenharmony_ciregister SCSISIGO {
15062306a36Sopenharmony_ci	address			0x003
15162306a36Sopenharmony_ci	access_mode WO
15262306a36Sopenharmony_ci	field	CDO		0x80
15362306a36Sopenharmony_ci	field	IOO		0x40
15462306a36Sopenharmony_ci	field	MSGO		0x20
15562306a36Sopenharmony_ci	field	ATNO		0x10
15662306a36Sopenharmony_ci	field	SELO		0x08
15762306a36Sopenharmony_ci	field	BSYO		0x04
15862306a36Sopenharmony_ci	field	REQO		0x02
15962306a36Sopenharmony_ci	field	ACKO		0x01
16062306a36Sopenharmony_ci/*
16162306a36Sopenharmony_ci * Possible phases to write into SCSISIG0
16262306a36Sopenharmony_ci */
16362306a36Sopenharmony_ci	mask	PHASE_MASK	CDI|IOI|MSGI
16462306a36Sopenharmony_ci	mask	P_DATAOUT	0x00
16562306a36Sopenharmony_ci	mask	P_DATAIN	IOI
16662306a36Sopenharmony_ci	mask	P_COMMAND	CDI
16762306a36Sopenharmony_ci	mask	P_MESGOUT	CDI|MSGI
16862306a36Sopenharmony_ci	mask	P_STATUS	CDI|IOI
16962306a36Sopenharmony_ci	mask	P_MESGIN	CDI|IOI|MSGI
17062306a36Sopenharmony_ci	dont_generate_debug_code
17162306a36Sopenharmony_ci}
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci/* 
17462306a36Sopenharmony_ci * SCSI Rate Control (p. 3-17).
17562306a36Sopenharmony_ci * Contents of this register determine the Synchronous SCSI data transfer
17662306a36Sopenharmony_ci * rate and the maximum synchronous Req/Ack offset.  An offset of 0 in the
17762306a36Sopenharmony_ci * SOFS (3:0) bits disables synchronous data transfers.  Any offset value
17862306a36Sopenharmony_ci * greater than 0 enables synchronous transfers.
17962306a36Sopenharmony_ci */
18062306a36Sopenharmony_ciregister SCSIRATE {
18162306a36Sopenharmony_ci	address			0x004
18262306a36Sopenharmony_ci	access_mode RW
18362306a36Sopenharmony_ci	field	WIDEXFER	0x80		/* Wide transfer control */
18462306a36Sopenharmony_ci	field	ENABLE_CRC	0x40		/* CRC for D-Phases */
18562306a36Sopenharmony_ci	field	SINGLE_EDGE	0x10		/* Disable DT Transfers */
18662306a36Sopenharmony_ci	mask	SXFR		0x70		/* Sync transfer rate */
18762306a36Sopenharmony_ci	mask	SXFR_ULTRA2	0x0f		/* Sync transfer rate */
18862306a36Sopenharmony_ci	mask	SOFS		0x0f		/* Sync offset */
18962306a36Sopenharmony_ci}
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci/*
19262306a36Sopenharmony_ci * SCSI ID (p. 3-18).
19362306a36Sopenharmony_ci * Contains the ID of the board and the current target on the
19462306a36Sopenharmony_ci * selected channel.
19562306a36Sopenharmony_ci */
19662306a36Sopenharmony_ciregister SCSIID	{
19762306a36Sopenharmony_ci	address			0x005
19862306a36Sopenharmony_ci	access_mode RW
19962306a36Sopenharmony_ci	mask	TID		0xf0		/* Target ID mask */
20062306a36Sopenharmony_ci	mask	TWIN_TID	0x70
20162306a36Sopenharmony_ci	field	TWIN_CHNLB	0x80
20262306a36Sopenharmony_ci	mask	OID		0x0f		/* Our ID mask */
20362306a36Sopenharmony_ci	/*
20462306a36Sopenharmony_ci	 * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book)
20562306a36Sopenharmony_ci	 * The aic7890/91 allow an offset of up to 127 transfers in both wide
20662306a36Sopenharmony_ci	 * and narrow mode.
20762306a36Sopenharmony_ci	 */
20862306a36Sopenharmony_ci	alias	SCSIOFFSET
20962306a36Sopenharmony_ci	mask	SOFS_ULTRA2	0x7f		/* Sync offset U2 chips */
21062306a36Sopenharmony_ci	dont_generate_debug_code
21162306a36Sopenharmony_ci}
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci/*
21462306a36Sopenharmony_ci * SCSI Latched Data (p. 3-19).
21562306a36Sopenharmony_ci * Read/Write latches used to transfer data on the SCSI bus during
21662306a36Sopenharmony_ci * Automatic or Manual PIO mode.  SCSIDATH can be used for the
21762306a36Sopenharmony_ci * upper byte of a 16bit wide asynchronouse data phase transfer.
21862306a36Sopenharmony_ci */
21962306a36Sopenharmony_ciregister SCSIDATL {
22062306a36Sopenharmony_ci	address			0x006
22162306a36Sopenharmony_ci	access_mode RW
22262306a36Sopenharmony_ci	dont_generate_debug_code
22362306a36Sopenharmony_ci}
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ciregister SCSIDATH {
22662306a36Sopenharmony_ci	address			0x007
22762306a36Sopenharmony_ci	access_mode RW
22862306a36Sopenharmony_ci}
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci/*
23162306a36Sopenharmony_ci * SCSI Transfer Count (pp. 3-19,20)
23262306a36Sopenharmony_ci * These registers count down the number of bytes transferred
23362306a36Sopenharmony_ci * across the SCSI bus.  The counter is decremented only once
23462306a36Sopenharmony_ci * the data has been safely transferred.  SDONE in SSTAT0 is
23562306a36Sopenharmony_ci * set when STCNT goes to 0
23662306a36Sopenharmony_ci */ 
23762306a36Sopenharmony_ciregister STCNT {
23862306a36Sopenharmony_ci	address			0x008
23962306a36Sopenharmony_ci	size	3
24062306a36Sopenharmony_ci	access_mode RW
24162306a36Sopenharmony_ci	dont_generate_debug_code
24262306a36Sopenharmony_ci}
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci/* ALT_MODE registers (Ultra2 and Ultra160 chips) */
24562306a36Sopenharmony_ciregister SXFRCTL2 {
24662306a36Sopenharmony_ci	address			0x013
24762306a36Sopenharmony_ci	access_mode RW
24862306a36Sopenharmony_ci	field	AUTORSTDIS	0x10
24962306a36Sopenharmony_ci	field	CMDDMAEN	0x08
25062306a36Sopenharmony_ci	mask	ASYNC_SETUP	0x07
25162306a36Sopenharmony_ci}
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci/* ALT_MODE register on Ultra160 chips */
25462306a36Sopenharmony_ciregister OPTIONMODE {
25562306a36Sopenharmony_ci	address			0x008
25662306a36Sopenharmony_ci	access_mode RW
25762306a36Sopenharmony_ci	count		2
25862306a36Sopenharmony_ci	field	AUTORATEEN		0x80
25962306a36Sopenharmony_ci	field	AUTOACKEN		0x40
26062306a36Sopenharmony_ci	field	ATNMGMNTEN		0x20
26162306a36Sopenharmony_ci	field	BUSFREEREV		0x10
26262306a36Sopenharmony_ci	field	EXPPHASEDIS		0x08
26362306a36Sopenharmony_ci	field	SCSIDATL_IMGEN		0x04
26462306a36Sopenharmony_ci	field	AUTO_MSGOUT_DE		0x02
26562306a36Sopenharmony_ci	field	DIS_MSGIN_DUALEDGE	0x01
26662306a36Sopenharmony_ci	mask	OPTIONMODE_DEFAULTS	AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE
26762306a36Sopenharmony_ci	dont_generate_debug_code
26862306a36Sopenharmony_ci}
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci/* ALT_MODE register on Ultra160 chips */
27162306a36Sopenharmony_ciregister TARGCRCCNT {
27262306a36Sopenharmony_ci	address			0x00a
27362306a36Sopenharmony_ci	size	2
27462306a36Sopenharmony_ci	access_mode RW
27562306a36Sopenharmony_ci	count		2
27662306a36Sopenharmony_ci	dont_generate_debug_code
27762306a36Sopenharmony_ci}
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci/*
28062306a36Sopenharmony_ci * Clear SCSI Interrupt 0 (p. 3-20)
28162306a36Sopenharmony_ci * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
28262306a36Sopenharmony_ci */
28362306a36Sopenharmony_ciregister CLRSINT0 {
28462306a36Sopenharmony_ci	address			0x00b
28562306a36Sopenharmony_ci	access_mode WO
28662306a36Sopenharmony_ci	field	CLRSELDO	0x40
28762306a36Sopenharmony_ci	field	CLRSELDI	0x20
28862306a36Sopenharmony_ci	field	CLRSELINGO	0x10
28962306a36Sopenharmony_ci	field	CLRSWRAP	0x08
29062306a36Sopenharmony_ci	field	CLRIOERR	0x08	/* Ultra2 Only */
29162306a36Sopenharmony_ci	field	CLRSPIORDY	0x02
29262306a36Sopenharmony_ci	dont_generate_debug_code
29362306a36Sopenharmony_ci}
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ci/*
29662306a36Sopenharmony_ci * SCSI Status 0 (p. 3-21)
29762306a36Sopenharmony_ci * Contains one set of SCSI Interrupt codes
29862306a36Sopenharmony_ci * These are most likely of interest to the sequencer
29962306a36Sopenharmony_ci */
30062306a36Sopenharmony_ciregister SSTAT0	{
30162306a36Sopenharmony_ci	address			0x00b
30262306a36Sopenharmony_ci	access_mode RO
30362306a36Sopenharmony_ci	field	TARGET		0x80	/* Board acting as target */
30462306a36Sopenharmony_ci	field	SELDO		0x40	/* Selection Done */
30562306a36Sopenharmony_ci	field	SELDI		0x20	/* Board has been selected */
30662306a36Sopenharmony_ci	field	SELINGO		0x10	/* Selection In Progress */
30762306a36Sopenharmony_ci	field	SWRAP		0x08	/* 24bit counter wrap */
30862306a36Sopenharmony_ci	field	IOERR		0x08	/* LVD Tranceiver mode changed */
30962306a36Sopenharmony_ci	field	SDONE		0x04	/* STCNT = 0x000000 */
31062306a36Sopenharmony_ci	field	SPIORDY		0x02	/* SCSI PIO Ready */
31162306a36Sopenharmony_ci	field	DMADONE		0x01	/* DMA transfer completed */
31262306a36Sopenharmony_ci}
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci/*
31562306a36Sopenharmony_ci * Clear SCSI Interrupt 1 (p. 3-23)
31662306a36Sopenharmony_ci * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
31762306a36Sopenharmony_ci */
31862306a36Sopenharmony_ciregister CLRSINT1 {
31962306a36Sopenharmony_ci	address			0x00c
32062306a36Sopenharmony_ci	access_mode WO
32162306a36Sopenharmony_ci	field	CLRSELTIMEO	0x80
32262306a36Sopenharmony_ci	field	CLRATNO		0x40
32362306a36Sopenharmony_ci	field	CLRSCSIRSTI	0x20
32462306a36Sopenharmony_ci	field	CLRBUSFREE	0x08
32562306a36Sopenharmony_ci	field	CLRSCSIPERR	0x04
32662306a36Sopenharmony_ci	field	CLRPHASECHG	0x02
32762306a36Sopenharmony_ci	field	CLRREQINIT	0x01
32862306a36Sopenharmony_ci	dont_generate_debug_code
32962306a36Sopenharmony_ci}
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci/*
33262306a36Sopenharmony_ci * SCSI Status 1 (p. 3-24)
33362306a36Sopenharmony_ci */
33462306a36Sopenharmony_ciregister SSTAT1	{
33562306a36Sopenharmony_ci	address			0x00c
33662306a36Sopenharmony_ci	access_mode RO
33762306a36Sopenharmony_ci	field	SELTO		0x80
33862306a36Sopenharmony_ci	field	ATNTARG 	0x40
33962306a36Sopenharmony_ci	field	SCSIRSTI	0x20
34062306a36Sopenharmony_ci	field	PHASEMIS	0x10
34162306a36Sopenharmony_ci	field	BUSFREE		0x08
34262306a36Sopenharmony_ci	field	SCSIPERR	0x04
34362306a36Sopenharmony_ci	field	PHASECHG	0x02
34462306a36Sopenharmony_ci	field	REQINIT		0x01
34562306a36Sopenharmony_ci}
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci/*
34862306a36Sopenharmony_ci * SCSI Status 2 (pp. 3-25,26)
34962306a36Sopenharmony_ci */
35062306a36Sopenharmony_ciregister SSTAT2 {
35162306a36Sopenharmony_ci	address			0x00d
35262306a36Sopenharmony_ci	access_mode RO
35362306a36Sopenharmony_ci	field	OVERRUN		0x80
35462306a36Sopenharmony_ci	field	SHVALID		0x40	/* Shadow Layer non-zero */
35562306a36Sopenharmony_ci	field	EXP_ACTIVE	0x10	/* SCSI Expander Active */
35662306a36Sopenharmony_ci	field	CRCVALERR	0x08	/* CRC doesn't match (U3 only) */
35762306a36Sopenharmony_ci	field	CRCENDERR	0x04	/* No terminal CRC packet (U3 only) */
35862306a36Sopenharmony_ci	field	CRCREQERR	0x02	/* Illegal CRC packet req (U3 only) */
35962306a36Sopenharmony_ci	field	DUAL_EDGE_ERR	0x01	/* Incorrect data phase (U3 only) */
36062306a36Sopenharmony_ci	mask	SFCNT		0x1f
36162306a36Sopenharmony_ci}
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci/*
36462306a36Sopenharmony_ci * SCSI Status 3 (p. 3-26)
36562306a36Sopenharmony_ci */
36662306a36Sopenharmony_ciregister SSTAT3 {
36762306a36Sopenharmony_ci	address			0x00e
36862306a36Sopenharmony_ci	access_mode RO
36962306a36Sopenharmony_ci	count		2
37062306a36Sopenharmony_ci	mask	SCSICNT		0xf0
37162306a36Sopenharmony_ci	mask	OFFCNT		0x0f
37262306a36Sopenharmony_ci	mask	U2OFFCNT	0x7f
37362306a36Sopenharmony_ci}
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci/*
37662306a36Sopenharmony_ci * SCSI ID for the aic7890/91 chips
37762306a36Sopenharmony_ci */
37862306a36Sopenharmony_ciregister SCSIID_ULTRA2 {
37962306a36Sopenharmony_ci	address			0x00f
38062306a36Sopenharmony_ci	access_mode RW
38162306a36Sopenharmony_ci	mask	TID		0xf0		/* Target ID mask */
38262306a36Sopenharmony_ci	mask	OID		0x0f		/* Our ID mask */
38362306a36Sopenharmony_ci	dont_generate_debug_code
38462306a36Sopenharmony_ci}
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_ci/*
38762306a36Sopenharmony_ci * SCSI Interrupt Mode 1 (p. 3-28)
38862306a36Sopenharmony_ci * Setting any bit will enable the corresponding function
38962306a36Sopenharmony_ci * in SIMODE0 to interrupt via the IRQ pin.
39062306a36Sopenharmony_ci */
39162306a36Sopenharmony_ciregister SIMODE0 {
39262306a36Sopenharmony_ci	address			0x010
39362306a36Sopenharmony_ci	access_mode RW
39462306a36Sopenharmony_ci	count		2
39562306a36Sopenharmony_ci	field	ENSELDO		0x40
39662306a36Sopenharmony_ci	field	ENSELDI		0x20
39762306a36Sopenharmony_ci	field	ENSELINGO	0x10
39862306a36Sopenharmony_ci	field	ENSWRAP		0x08
39962306a36Sopenharmony_ci	field	ENIOERR		0x08	/* LVD Tranceiver mode changes */
40062306a36Sopenharmony_ci	field	ENSDONE		0x04
40162306a36Sopenharmony_ci	field	ENSPIORDY	0x02
40262306a36Sopenharmony_ci	field	ENDMADONE	0x01
40362306a36Sopenharmony_ci}
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ci/*
40662306a36Sopenharmony_ci * SCSI Interrupt Mode 1 (pp. 3-28,29)
40762306a36Sopenharmony_ci * Setting any bit will enable the corresponding function
40862306a36Sopenharmony_ci * in SIMODE1 to interrupt via the IRQ pin.
40962306a36Sopenharmony_ci */
41062306a36Sopenharmony_ciregister SIMODE1 {
41162306a36Sopenharmony_ci	address			0x011
41262306a36Sopenharmony_ci	access_mode RW
41362306a36Sopenharmony_ci	field	ENSELTIMO	0x80
41462306a36Sopenharmony_ci	field	ENATNTARG	0x40
41562306a36Sopenharmony_ci	field	ENSCSIRST	0x20
41662306a36Sopenharmony_ci	field	ENPHASEMIS	0x10
41762306a36Sopenharmony_ci	field	ENBUSFREE	0x08
41862306a36Sopenharmony_ci	field	ENSCSIPERR	0x04
41962306a36Sopenharmony_ci	field	ENPHASECHG	0x02
42062306a36Sopenharmony_ci	field	ENREQINIT	0x01
42162306a36Sopenharmony_ci}
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci/*
42462306a36Sopenharmony_ci * SCSI Data Bus (High) (p. 3-29)
42562306a36Sopenharmony_ci * This register reads data on the SCSI Data bus directly.
42662306a36Sopenharmony_ci */
42762306a36Sopenharmony_ciregister SCSIBUSL {
42862306a36Sopenharmony_ci	address			0x012
42962306a36Sopenharmony_ci	access_mode RW
43062306a36Sopenharmony_ci}
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ciregister SCSIBUSH {
43362306a36Sopenharmony_ci	address			0x013
43462306a36Sopenharmony_ci	access_mode RW
43562306a36Sopenharmony_ci}
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci/*
43862306a36Sopenharmony_ci * SCSI/Host Address (p. 3-30)
43962306a36Sopenharmony_ci * These registers hold the host address for the byte about to be
44062306a36Sopenharmony_ci * transferred on the SCSI bus.  They are counted up in the same
44162306a36Sopenharmony_ci * manner as STCNT is counted down.  SHADDR should always be used
44262306a36Sopenharmony_ci * to determine the address of the last byte transferred since HADDR
44362306a36Sopenharmony_ci * can be skewed by write ahead.
44462306a36Sopenharmony_ci */
44562306a36Sopenharmony_ciregister SHADDR {
44662306a36Sopenharmony_ci	address			0x014
44762306a36Sopenharmony_ci	size	4
44862306a36Sopenharmony_ci	access_mode RO
44962306a36Sopenharmony_ci	dont_generate_debug_code
45062306a36Sopenharmony_ci}
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ci/*
45362306a36Sopenharmony_ci * Selection Timeout Timer (p. 3-30)
45462306a36Sopenharmony_ci */
45562306a36Sopenharmony_ciregister SELTIMER {
45662306a36Sopenharmony_ci	address			0x018
45762306a36Sopenharmony_ci	access_mode RW
45862306a36Sopenharmony_ci	count		1
45962306a36Sopenharmony_ci	field	STAGE6		0x20
46062306a36Sopenharmony_ci	field	STAGE5		0x10
46162306a36Sopenharmony_ci	field	STAGE4		0x08
46262306a36Sopenharmony_ci	field	STAGE3		0x04
46362306a36Sopenharmony_ci	field	STAGE2		0x02
46462306a36Sopenharmony_ci	field	STAGE1		0x01
46562306a36Sopenharmony_ci	alias	TARGIDIN
46662306a36Sopenharmony_ci	dont_generate_debug_code
46762306a36Sopenharmony_ci}
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ci/*
47062306a36Sopenharmony_ci * Selection/Reselection ID (p. 3-31)
47162306a36Sopenharmony_ci * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
47262306a36Sopenharmony_ci * device did not set its own ID.
47362306a36Sopenharmony_ci */
47462306a36Sopenharmony_ciregister SELID {
47562306a36Sopenharmony_ci	address			0x019
47662306a36Sopenharmony_ci	access_mode RW
47762306a36Sopenharmony_ci	mask	SELID_MASK	0xf0
47862306a36Sopenharmony_ci	field	ONEBIT		0x08
47962306a36Sopenharmony_ci	dont_generate_debug_code
48062306a36Sopenharmony_ci}
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ciregister SCAMCTL {
48362306a36Sopenharmony_ci	address			0x01a
48462306a36Sopenharmony_ci	access_mode RW
48562306a36Sopenharmony_ci	field	ENSCAMSELO	0x80
48662306a36Sopenharmony_ci	field	CLRSCAMSELID	0x40
48762306a36Sopenharmony_ci	field	ALTSTIM		0x20
48862306a36Sopenharmony_ci	field	DFLTTID		0x10
48962306a36Sopenharmony_ci	mask	SCAMLVL		0x03
49062306a36Sopenharmony_ci}
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_ci/*
49362306a36Sopenharmony_ci * Target Mode Selecting in ID bitmask (aic7890/91/96/97)
49462306a36Sopenharmony_ci */
49562306a36Sopenharmony_ciregister TARGID {
49662306a36Sopenharmony_ci	address			0x01b
49762306a36Sopenharmony_ci	size			2
49862306a36Sopenharmony_ci	access_mode RW
49962306a36Sopenharmony_ci	count		14
50062306a36Sopenharmony_ci	dont_generate_debug_code
50162306a36Sopenharmony_ci}
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci/*
50462306a36Sopenharmony_ci * Serial Port I/O Cabability register (p. 4-95 aic7860 Data Book)
50562306a36Sopenharmony_ci * Indicates if external logic has been attached to the chip to
50662306a36Sopenharmony_ci * perform the tasks of accessing a serial eeprom, testing termination
50762306a36Sopenharmony_ci * strength, and performing cable detection.  On the aic7860, most of
50862306a36Sopenharmony_ci * these features are handled on chip, but on the aic7855 an attached
50962306a36Sopenharmony_ci * aic3800 does the grunt work.
51062306a36Sopenharmony_ci */
51162306a36Sopenharmony_ciregister SPIOCAP {
51262306a36Sopenharmony_ci	address			0x01b
51362306a36Sopenharmony_ci	access_mode RW
51462306a36Sopenharmony_ci	count		10
51562306a36Sopenharmony_ci	field	SOFT1		0x80
51662306a36Sopenharmony_ci	field	SOFT0		0x40
51762306a36Sopenharmony_ci	field	SOFTCMDEN	0x20	
51862306a36Sopenharmony_ci	field	EXT_BRDCTL	0x10	/* External Board control */
51962306a36Sopenharmony_ci	field	SEEPROM		0x08	/* External serial eeprom logic */
52062306a36Sopenharmony_ci	field	EEPROM		0x04	/* Writable external BIOS ROM */
52162306a36Sopenharmony_ci	field	ROM		0x02	/* Logic for accessing external ROM */
52262306a36Sopenharmony_ci	field	SSPIOCPS	0x01	/* Termination and cable detection */
52362306a36Sopenharmony_ci	dont_generate_debug_code
52462306a36Sopenharmony_ci}
52562306a36Sopenharmony_ci
52662306a36Sopenharmony_ciregister BRDCTL	{
52762306a36Sopenharmony_ci	address			0x01d
52862306a36Sopenharmony_ci	count		11
52962306a36Sopenharmony_ci	field	BRDDAT7		0x80
53062306a36Sopenharmony_ci	field	BRDDAT6		0x40
53162306a36Sopenharmony_ci	field	BRDDAT5		0x20
53262306a36Sopenharmony_ci	field	BRDSTB		0x10
53362306a36Sopenharmony_ci	field	BRDCS		0x08
53462306a36Sopenharmony_ci	field	BRDRW		0x04
53562306a36Sopenharmony_ci	field	BRDCTL1		0x02
53662306a36Sopenharmony_ci	field	BRDCTL0		0x01
53762306a36Sopenharmony_ci	/* 7890 Definitions */
53862306a36Sopenharmony_ci	field	BRDDAT4		0x10
53962306a36Sopenharmony_ci	field	BRDDAT3		0x08
54062306a36Sopenharmony_ci	field	BRDDAT2		0x04
54162306a36Sopenharmony_ci	field	BRDRW_ULTRA2	0x02
54262306a36Sopenharmony_ci	field	BRDSTB_ULTRA2	0x01
54362306a36Sopenharmony_ci	dont_generate_debug_code
54462306a36Sopenharmony_ci}
54562306a36Sopenharmony_ci
54662306a36Sopenharmony_ci/*
54762306a36Sopenharmony_ci * Serial EEPROM Control (p. 4-92 in 7870 Databook)
54862306a36Sopenharmony_ci * Controls the reading and writing of an external serial 1-bit
54962306a36Sopenharmony_ci * EEPROM Device.  In order to access the serial EEPROM, you must
55062306a36Sopenharmony_ci * first set the SEEMS bit that generates a request to the memory
55162306a36Sopenharmony_ci * port for access to the serial EEPROM device.  When the memory
55262306a36Sopenharmony_ci * port is not busy servicing another request, it reconfigures
55362306a36Sopenharmony_ci * to allow access to the serial EEPROM.  When this happens, SEERDY
55462306a36Sopenharmony_ci * gets set high to verify that the memory port access has been
55562306a36Sopenharmony_ci * granted.  
55662306a36Sopenharmony_ci *
55762306a36Sopenharmony_ci * After successful arbitration for the memory port, the SEECS bit of 
55862306a36Sopenharmony_ci * the SEECTL register is connected to the chip select.  The SEECK, 
55962306a36Sopenharmony_ci * SEEDO, and SEEDI are connected to the clock, data out, and data in 
56062306a36Sopenharmony_ci * lines respectively.  The SEERDY bit of SEECTL is useful in that it 
56162306a36Sopenharmony_ci * gives us an 800 nsec timer.  After a write to the SEECTL register, 
56262306a36Sopenharmony_ci * the SEERDY goes high 800 nsec later.  The one exception to this is 
56362306a36Sopenharmony_ci * when we first request access to the memory port.  The SEERDY goes 
56462306a36Sopenharmony_ci * high to signify that access has been granted and, for this case, has 
56562306a36Sopenharmony_ci * no implied timing.
56662306a36Sopenharmony_ci *
56762306a36Sopenharmony_ci * See 93cx6.c for detailed information on the protocol necessary to 
56862306a36Sopenharmony_ci * read the serial EEPROM.
56962306a36Sopenharmony_ci */
57062306a36Sopenharmony_ciregister SEECTL {
57162306a36Sopenharmony_ci	address			0x01e
57262306a36Sopenharmony_ci	count		11
57362306a36Sopenharmony_ci	field	EXTARBACK	0x80
57462306a36Sopenharmony_ci	field	EXTARBREQ	0x40
57562306a36Sopenharmony_ci	field	SEEMS		0x20
57662306a36Sopenharmony_ci	field	SEERDY		0x10
57762306a36Sopenharmony_ci	field	SEECS		0x08
57862306a36Sopenharmony_ci	field	SEECK		0x04
57962306a36Sopenharmony_ci	field	SEEDO		0x02
58062306a36Sopenharmony_ci	field	SEEDI		0x01
58162306a36Sopenharmony_ci	dont_generate_debug_code
58262306a36Sopenharmony_ci}
58362306a36Sopenharmony_ci/*
58462306a36Sopenharmony_ci * SCSI Block Control (p. 3-32)
58562306a36Sopenharmony_ci * Controls Bus type and channel selection.  In a twin channel configuration
58662306a36Sopenharmony_ci * addresses 0x00-0x1e are gated to the appropriate channel based on this
58762306a36Sopenharmony_ci * register.  SELWIDE allows for the coexistence of 8bit and 16bit devices
58862306a36Sopenharmony_ci * on a wide bus.
58962306a36Sopenharmony_ci */
59062306a36Sopenharmony_ciregister SBLKCTL {
59162306a36Sopenharmony_ci	address			0x01f
59262306a36Sopenharmony_ci	access_mode RW
59362306a36Sopenharmony_ci	field	DIAGLEDEN	0x80	/* Aic78X0 only */
59462306a36Sopenharmony_ci	field	DIAGLEDON	0x40	/* Aic78X0 only */
59562306a36Sopenharmony_ci	field	AUTOFLUSHDIS	0x20
59662306a36Sopenharmony_ci	field	SELBUSB		0x08
59762306a36Sopenharmony_ci	field	ENAB40		0x08	/* LVD transceiver active */
59862306a36Sopenharmony_ci	field	ENAB20		0x04	/* SE/HVD transceiver active */
59962306a36Sopenharmony_ci	field	SELWIDE		0x02
60062306a36Sopenharmony_ci	field	XCVR		0x01	/* External transceiver active */
60162306a36Sopenharmony_ci}
60262306a36Sopenharmony_ci
60362306a36Sopenharmony_ci/*
60462306a36Sopenharmony_ci * Sequencer Control (p. 3-33)
60562306a36Sopenharmony_ci * Error detection mode and speed configuration
60662306a36Sopenharmony_ci */
60762306a36Sopenharmony_ciregister SEQCTL {
60862306a36Sopenharmony_ci	address			0x060
60962306a36Sopenharmony_ci	access_mode RW
61062306a36Sopenharmony_ci	count		15
61162306a36Sopenharmony_ci	field	PERRORDIS	0x80
61262306a36Sopenharmony_ci	field	PAUSEDIS	0x40
61362306a36Sopenharmony_ci	field	FAILDIS		0x20
61462306a36Sopenharmony_ci	field	FASTMODE	0x10
61562306a36Sopenharmony_ci	field	BRKADRINTEN	0x08
61662306a36Sopenharmony_ci	field	STEP		0x04
61762306a36Sopenharmony_ci	field	SEQRESET	0x02
61862306a36Sopenharmony_ci	field	LOADRAM		0x01
61962306a36Sopenharmony_ci}
62062306a36Sopenharmony_ci
62162306a36Sopenharmony_ci/*
62262306a36Sopenharmony_ci * Sequencer RAM Data (p. 3-34)
62362306a36Sopenharmony_ci * Single byte window into the Scratch Ram area starting at the address
62462306a36Sopenharmony_ci * specified by SEQADDR0 and SEQADDR1.  To write a full word, simply write
62562306a36Sopenharmony_ci * four bytes in succession.  The SEQADDRs will increment after the most
62662306a36Sopenharmony_ci * significant byte is written
62762306a36Sopenharmony_ci */
62862306a36Sopenharmony_ciregister SEQRAM {
62962306a36Sopenharmony_ci	address			0x061
63062306a36Sopenharmony_ci	access_mode RW
63162306a36Sopenharmony_ci	count		2
63262306a36Sopenharmony_ci	dont_generate_debug_code
63362306a36Sopenharmony_ci}
63462306a36Sopenharmony_ci
63562306a36Sopenharmony_ci/*
63662306a36Sopenharmony_ci * Sequencer Address Registers (p. 3-35)
63762306a36Sopenharmony_ci * Only the first bit of SEQADDR1 holds addressing information
63862306a36Sopenharmony_ci */
63962306a36Sopenharmony_ciregister SEQADDR0 {
64062306a36Sopenharmony_ci	address			0x062
64162306a36Sopenharmony_ci	access_mode RW
64262306a36Sopenharmony_ci	dont_generate_debug_code
64362306a36Sopenharmony_ci}
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ciregister SEQADDR1 {
64662306a36Sopenharmony_ci	address			0x063
64762306a36Sopenharmony_ci	access_mode RW
64862306a36Sopenharmony_ci	count		8
64962306a36Sopenharmony_ci	mask	SEQADDR1_MASK	0x01
65062306a36Sopenharmony_ci	dont_generate_debug_code
65162306a36Sopenharmony_ci}
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_ci/*
65462306a36Sopenharmony_ci * Accumulator
65562306a36Sopenharmony_ci * We cheat by passing arguments in the Accumulator up to the kernel driver
65662306a36Sopenharmony_ci */
65762306a36Sopenharmony_ciregister ACCUM {
65862306a36Sopenharmony_ci	address			0x064
65962306a36Sopenharmony_ci	access_mode RW
66062306a36Sopenharmony_ci	accumulator
66162306a36Sopenharmony_ci	dont_generate_debug_code
66262306a36Sopenharmony_ci}
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_ciregister SINDEX	{
66562306a36Sopenharmony_ci	address			0x065
66662306a36Sopenharmony_ci	access_mode RW
66762306a36Sopenharmony_ci	sindex
66862306a36Sopenharmony_ci	dont_generate_debug_code
66962306a36Sopenharmony_ci}
67062306a36Sopenharmony_ci
67162306a36Sopenharmony_ciregister DINDEX {
67262306a36Sopenharmony_ci	address			0x066
67362306a36Sopenharmony_ci	access_mode RW
67462306a36Sopenharmony_ci	dont_generate_debug_code
67562306a36Sopenharmony_ci}
67662306a36Sopenharmony_ci
67762306a36Sopenharmony_ciregister ALLONES {
67862306a36Sopenharmony_ci	address			0x069
67962306a36Sopenharmony_ci	access_mode RO
68062306a36Sopenharmony_ci	allones
68162306a36Sopenharmony_ci	dont_generate_debug_code
68262306a36Sopenharmony_ci}
68362306a36Sopenharmony_ci
68462306a36Sopenharmony_ciregister ALLZEROS {
68562306a36Sopenharmony_ci	address			0x06a
68662306a36Sopenharmony_ci	access_mode RO
68762306a36Sopenharmony_ci	allzeros
68862306a36Sopenharmony_ci	dont_generate_debug_code
68962306a36Sopenharmony_ci}
69062306a36Sopenharmony_ci
69162306a36Sopenharmony_ciregister NONE {
69262306a36Sopenharmony_ci	address			0x06a
69362306a36Sopenharmony_ci	access_mode WO
69462306a36Sopenharmony_ci	none
69562306a36Sopenharmony_ci	dont_generate_debug_code
69662306a36Sopenharmony_ci}
69762306a36Sopenharmony_ci
69862306a36Sopenharmony_ciregister FLAGS {
69962306a36Sopenharmony_ci	address			0x06b
70062306a36Sopenharmony_ci	access_mode RO
70162306a36Sopenharmony_ci	count		18
70262306a36Sopenharmony_ci	field	ZERO		0x02
70362306a36Sopenharmony_ci	field	CARRY		0x01
70462306a36Sopenharmony_ci	dont_generate_debug_code
70562306a36Sopenharmony_ci}
70662306a36Sopenharmony_ci
70762306a36Sopenharmony_ciregister SINDIR	{
70862306a36Sopenharmony_ci	address			0x06c
70962306a36Sopenharmony_ci	access_mode RO
71062306a36Sopenharmony_ci	dont_generate_debug_code
71162306a36Sopenharmony_ci}
71262306a36Sopenharmony_ci
71362306a36Sopenharmony_ciregister DINDIR	 {
71462306a36Sopenharmony_ci	address			0x06d
71562306a36Sopenharmony_ci	access_mode WO
71662306a36Sopenharmony_ci	dont_generate_debug_code
71762306a36Sopenharmony_ci}
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ciregister FUNCTION1 {
72062306a36Sopenharmony_ci	address			0x06e
72162306a36Sopenharmony_ci	access_mode RW
72262306a36Sopenharmony_ci}
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ciregister STACK {
72562306a36Sopenharmony_ci	address			0x06f
72662306a36Sopenharmony_ci	access_mode RO
72762306a36Sopenharmony_ci	count		5
72862306a36Sopenharmony_ci	dont_generate_debug_code
72962306a36Sopenharmony_ci}
73062306a36Sopenharmony_ci
73162306a36Sopenharmony_ciconst	STACK_SIZE	4
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_ci/*
73462306a36Sopenharmony_ci * Board Control (p. 3-43)
73562306a36Sopenharmony_ci */
73662306a36Sopenharmony_ciregister BCTL {
73762306a36Sopenharmony_ci	address			0x084
73862306a36Sopenharmony_ci	access_mode RW
73962306a36Sopenharmony_ci	field	ACE		0x08
74062306a36Sopenharmony_ci	field	ENABLE		0x01
74162306a36Sopenharmony_ci}
74262306a36Sopenharmony_ci
74362306a36Sopenharmony_ci/*
74462306a36Sopenharmony_ci * On the aic78X0 chips, Board Control is replaced by the DSCommand
74562306a36Sopenharmony_ci * register (p. 4-64)
74662306a36Sopenharmony_ci */
74762306a36Sopenharmony_ciregister DSCOMMAND0 {
74862306a36Sopenharmony_ci	address			0x084
74962306a36Sopenharmony_ci	access_mode RW
75062306a36Sopenharmony_ci	count		7
75162306a36Sopenharmony_ci	field	CACHETHEN	0x80	/* Cache Threshold enable */
75262306a36Sopenharmony_ci	field	DPARCKEN	0x40	/* Data Parity Check Enable */
75362306a36Sopenharmony_ci	field	MPARCKEN	0x20	/* Memory Parity Check Enable */
75462306a36Sopenharmony_ci	field	EXTREQLCK	0x10	/* External Request Lock */
75562306a36Sopenharmony_ci	/* aic7890/91/96/97 only */
75662306a36Sopenharmony_ci	field	INTSCBRAMSEL	0x08	/* Internal SCB RAM Select */
75762306a36Sopenharmony_ci	field	RAMPS		0x04	/* External SCB RAM Present */
75862306a36Sopenharmony_ci	field	USCBSIZE32	0x02	/* Use 32byte SCB Page Size */
75962306a36Sopenharmony_ci	field	CIOPARCKEN	0x01	/* Internal bus parity error enable */
76062306a36Sopenharmony_ci	dont_generate_debug_code
76162306a36Sopenharmony_ci}
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ciregister DSCOMMAND1 {
76462306a36Sopenharmony_ci	address			0x085
76562306a36Sopenharmony_ci	access_mode RW
76662306a36Sopenharmony_ci	mask	DSLATT		0xfc	/* PCI latency timer (non-ultra2) */
76762306a36Sopenharmony_ci	field	HADDLDSEL1	0x02	/* Host Address Load Select Bits */
76862306a36Sopenharmony_ci	field	HADDLDSEL0	0x01
76962306a36Sopenharmony_ci	dont_generate_debug_code
77062306a36Sopenharmony_ci}
77162306a36Sopenharmony_ci
77262306a36Sopenharmony_ci/*
77362306a36Sopenharmony_ci * Bus On/Off Time (p. 3-44) aic7770 only
77462306a36Sopenharmony_ci */
77562306a36Sopenharmony_ciregister BUSTIME {
77662306a36Sopenharmony_ci	address			0x085
77762306a36Sopenharmony_ci	access_mode RW
77862306a36Sopenharmony_ci	count		2
77962306a36Sopenharmony_ci	mask	BOFF		0xf0
78062306a36Sopenharmony_ci	mask	BON		0x0f
78162306a36Sopenharmony_ci	dont_generate_debug_code
78262306a36Sopenharmony_ci}
78362306a36Sopenharmony_ci
78462306a36Sopenharmony_ci/*
78562306a36Sopenharmony_ci * Bus Speed (p. 3-45) aic7770 only
78662306a36Sopenharmony_ci */
78762306a36Sopenharmony_ciregister BUSSPD {
78862306a36Sopenharmony_ci	address			0x086
78962306a36Sopenharmony_ci	access_mode RW
79062306a36Sopenharmony_ci	count		2
79162306a36Sopenharmony_ci	mask	DFTHRSH		0xc0
79262306a36Sopenharmony_ci	mask	STBOFF		0x38
79362306a36Sopenharmony_ci	mask	STBON		0x07
79462306a36Sopenharmony_ci	mask	DFTHRSH_100	0xc0
79562306a36Sopenharmony_ci	mask	DFTHRSH_75	0x80
79662306a36Sopenharmony_ci	dont_generate_debug_code
79762306a36Sopenharmony_ci}
79862306a36Sopenharmony_ci
79962306a36Sopenharmony_ci/* aic7850/55/60/70/80/95 only */
80062306a36Sopenharmony_ciregister DSPCISTATUS {
80162306a36Sopenharmony_ci	address			0x086
80262306a36Sopenharmony_ci	count		4
80362306a36Sopenharmony_ci	mask	DFTHRSH_100	0xc0
80462306a36Sopenharmony_ci	dont_generate_debug_code
80562306a36Sopenharmony_ci}
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_ci/* aic7890/91/96/97 only */
80862306a36Sopenharmony_ciregister HS_MAILBOX {
80962306a36Sopenharmony_ci	address			0x086
81062306a36Sopenharmony_ci	mask	HOST_MAILBOX	0xF0
81162306a36Sopenharmony_ci	mask	SEQ_MAILBOX	0x0F
81262306a36Sopenharmony_ci	mask	HOST_TQINPOS	0x80	/* Boundary at either 0 or 128 */
81362306a36Sopenharmony_ci	dont_generate_debug_code
81462306a36Sopenharmony_ci}
81562306a36Sopenharmony_ci
81662306a36Sopenharmony_ciconst	HOST_MAILBOX_SHIFT	4
81762306a36Sopenharmony_ciconst	SEQ_MAILBOX_SHIFT	0
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_ci/*
82062306a36Sopenharmony_ci * Host Control (p. 3-47) R/W
82162306a36Sopenharmony_ci * Overall host control of the device.
82262306a36Sopenharmony_ci */
82362306a36Sopenharmony_ciregister HCNTRL {
82462306a36Sopenharmony_ci	address			0x087
82562306a36Sopenharmony_ci	access_mode RW
82662306a36Sopenharmony_ci	count		14
82762306a36Sopenharmony_ci	field	POWRDN		0x40
82862306a36Sopenharmony_ci	field	SWINT		0x10
82962306a36Sopenharmony_ci	field	IRQMS		0x08
83062306a36Sopenharmony_ci	field	PAUSE		0x04
83162306a36Sopenharmony_ci	field	INTEN		0x02
83262306a36Sopenharmony_ci	field	CHIPRST		0x01
83362306a36Sopenharmony_ci	field	CHIPRSTACK	0x01
83462306a36Sopenharmony_ci	dont_generate_debug_code
83562306a36Sopenharmony_ci}
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_ci/*
83862306a36Sopenharmony_ci * Host Address (p. 3-48)
83962306a36Sopenharmony_ci * This register contains the address of the byte about
84062306a36Sopenharmony_ci * to be transferred across the host bus.
84162306a36Sopenharmony_ci */
84262306a36Sopenharmony_ciregister HADDR {
84362306a36Sopenharmony_ci	address			0x088
84462306a36Sopenharmony_ci	size	4
84562306a36Sopenharmony_ci	access_mode RW
84662306a36Sopenharmony_ci	dont_generate_debug_code
84762306a36Sopenharmony_ci}
84862306a36Sopenharmony_ci
84962306a36Sopenharmony_ciregister HCNT {
85062306a36Sopenharmony_ci	address			0x08c
85162306a36Sopenharmony_ci	size	3
85262306a36Sopenharmony_ci	access_mode RW
85362306a36Sopenharmony_ci	dont_generate_debug_code
85462306a36Sopenharmony_ci}
85562306a36Sopenharmony_ci
85662306a36Sopenharmony_ci/*
85762306a36Sopenharmony_ci * SCB Pointer (p. 3-49)
85862306a36Sopenharmony_ci * Gate one of the SCBs into the SCBARRAY window.
85962306a36Sopenharmony_ci */
86062306a36Sopenharmony_ciregister SCBPTR {
86162306a36Sopenharmony_ci	address			0x090
86262306a36Sopenharmony_ci	access_mode RW
86362306a36Sopenharmony_ci	dont_generate_debug_code
86462306a36Sopenharmony_ci}
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_ci/*
86762306a36Sopenharmony_ci * Interrupt Status (p. 3-50)
86862306a36Sopenharmony_ci * Status for system interrupts
86962306a36Sopenharmony_ci */
87062306a36Sopenharmony_ciregister INTSTAT {
87162306a36Sopenharmony_ci	address			0x091
87262306a36Sopenharmony_ci	access_mode RW
87362306a36Sopenharmony_ci	field	BRKADRINT 0x08
87462306a36Sopenharmony_ci	field	SCSIINT	  0x04
87562306a36Sopenharmony_ci	field	CMDCMPLT  0x02
87662306a36Sopenharmony_ci	field	SEQINT    0x01
87762306a36Sopenharmony_ci	mask	BAD_PHASE	SEQINT		/* unknown scsi bus phase */
87862306a36Sopenharmony_ci	mask	SEND_REJECT	0x10|SEQINT	/* sending a message reject */
87962306a36Sopenharmony_ci	mask	PROTO_VIOLATION	0x20|SEQINT	/* SCSI protocol violation */ 
88062306a36Sopenharmony_ci	mask	NO_MATCH	0x30|SEQINT	/* no cmd match for reconnect */
88162306a36Sopenharmony_ci	mask	IGN_WIDE_RES	0x40|SEQINT	/* Complex IGN Wide Res Msg */
88262306a36Sopenharmony_ci	mask	PDATA_REINIT	0x50|SEQINT	/*
88362306a36Sopenharmony_ci						 * Returned to data phase
88462306a36Sopenharmony_ci						 * that requires data
88562306a36Sopenharmony_ci						 * transfer pointers to be
88662306a36Sopenharmony_ci						 * recalculated from the
88762306a36Sopenharmony_ci						 * transfer residual.
88862306a36Sopenharmony_ci						 */
88962306a36Sopenharmony_ci	mask	HOST_MSG_LOOP	0x60|SEQINT	/*
89062306a36Sopenharmony_ci						 * The bus is ready for the
89162306a36Sopenharmony_ci						 * host to perform another
89262306a36Sopenharmony_ci						 * message transaction.  This
89362306a36Sopenharmony_ci						 * mechanism is used for things
89462306a36Sopenharmony_ci						 * like sync/wide negotiation
89562306a36Sopenharmony_ci						 * that require a kernel based
89662306a36Sopenharmony_ci						 * message state engine.
89762306a36Sopenharmony_ci						 */
89862306a36Sopenharmony_ci	mask	BAD_STATUS	0x70|SEQINT	/* Bad status from target */
89962306a36Sopenharmony_ci	mask	PERR_DETECTED	0x80|SEQINT	/*
90062306a36Sopenharmony_ci						 * Either the phase_lock
90162306a36Sopenharmony_ci						 * or inb_next routine has
90262306a36Sopenharmony_ci						 * noticed a parity error.
90362306a36Sopenharmony_ci						 */
90462306a36Sopenharmony_ci	mask	DATA_OVERRUN	0x90|SEQINT	/*
90562306a36Sopenharmony_ci						 * Target attempted to write
90662306a36Sopenharmony_ci						 * beyond the bounds of its
90762306a36Sopenharmony_ci						 * command.
90862306a36Sopenharmony_ci						 */
90962306a36Sopenharmony_ci	mask	MKMSG_FAILED	0xa0|SEQINT	/*
91062306a36Sopenharmony_ci						 * Target completed command
91162306a36Sopenharmony_ci						 * without honoring our ATN
91262306a36Sopenharmony_ci						 * request to issue a message. 
91362306a36Sopenharmony_ci						 */
91462306a36Sopenharmony_ci	mask	MISSED_BUSFREE	0xb0|SEQINT	/*
91562306a36Sopenharmony_ci						 * The sequencer never saw
91662306a36Sopenharmony_ci						 * the bus go free after
91762306a36Sopenharmony_ci						 * either a command complete
91862306a36Sopenharmony_ci						 * or disconnect message.
91962306a36Sopenharmony_ci						 */
92062306a36Sopenharmony_ci	mask	SCB_MISMATCH	0xc0|SEQINT	/*
92162306a36Sopenharmony_ci						 * Downloaded SCB's tag does
92262306a36Sopenharmony_ci						 * not match the entry we
92362306a36Sopenharmony_ci						 * intended to download.
92462306a36Sopenharmony_ci						 */
92562306a36Sopenharmony_ci	mask	NO_FREE_SCB	0xd0|SEQINT	/*
92662306a36Sopenharmony_ci						 * get_free_or_disc_scb failed.
92762306a36Sopenharmony_ci						 */
92862306a36Sopenharmony_ci	mask	OUT_OF_RANGE	0xe0|SEQINT
92962306a36Sopenharmony_ci
93062306a36Sopenharmony_ci	mask	SEQINT_MASK	0xf0|SEQINT	/* SEQINT Status Codes */
93162306a36Sopenharmony_ci	mask	INT_PEND  (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT)
93262306a36Sopenharmony_ci	dont_generate_debug_code
93362306a36Sopenharmony_ci}
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_ci/*
93662306a36Sopenharmony_ci * Hard Error (p. 3-53)
93762306a36Sopenharmony_ci * Reporting of catastrophic errors.  You usually cannot recover from
93862306a36Sopenharmony_ci * these without a full board reset.
93962306a36Sopenharmony_ci */
94062306a36Sopenharmony_ciregister ERROR {
94162306a36Sopenharmony_ci	address			0x092
94262306a36Sopenharmony_ci	access_mode RO
94362306a36Sopenharmony_ci	count		26
94462306a36Sopenharmony_ci	field	CIOPARERR	0x80	/* Ultra2 only */
94562306a36Sopenharmony_ci	field	PCIERRSTAT	0x40	/* PCI only */
94662306a36Sopenharmony_ci	field	MPARERR		0x20	/* PCI only */
94762306a36Sopenharmony_ci	field	DPARERR		0x10	/* PCI only */
94862306a36Sopenharmony_ci	field	SQPARERR	0x08
94962306a36Sopenharmony_ci	field	ILLOPCODE	0x04
95062306a36Sopenharmony_ci	field	ILLSADDR	0x02
95162306a36Sopenharmony_ci	field	ILLHADDR	0x01
95262306a36Sopenharmony_ci}
95362306a36Sopenharmony_ci
95462306a36Sopenharmony_ci/*
95562306a36Sopenharmony_ci * Clear Interrupt Status (p. 3-52)
95662306a36Sopenharmony_ci */
95762306a36Sopenharmony_ciregister CLRINT {
95862306a36Sopenharmony_ci	address			0x092
95962306a36Sopenharmony_ci	access_mode WO
96062306a36Sopenharmony_ci	count		24
96162306a36Sopenharmony_ci	field	CLRPARERR	0x10	/* PCI only */
96262306a36Sopenharmony_ci	field	CLRBRKADRINT	0x08
96362306a36Sopenharmony_ci	field	CLRSCSIINT      0x04
96462306a36Sopenharmony_ci	field	CLRCMDINT 	0x02
96562306a36Sopenharmony_ci	field	CLRSEQINT 	0x01
96662306a36Sopenharmony_ci	dont_generate_debug_code
96762306a36Sopenharmony_ci}
96862306a36Sopenharmony_ci
96962306a36Sopenharmony_ciregister DFCNTRL {
97062306a36Sopenharmony_ci	address			0x093
97162306a36Sopenharmony_ci	access_mode RW
97262306a36Sopenharmony_ci	field	PRELOADEN	0x80	/* aic7890 only */
97362306a36Sopenharmony_ci	field	WIDEODD		0x40
97462306a36Sopenharmony_ci	field	SCSIEN		0x20
97562306a36Sopenharmony_ci	field	SDMAEN		0x10
97662306a36Sopenharmony_ci	field	SDMAENACK	0x10
97762306a36Sopenharmony_ci	field	HDMAEN		0x08
97862306a36Sopenharmony_ci	field	HDMAENACK	0x08
97962306a36Sopenharmony_ci	field	DIRECTION	0x04
98062306a36Sopenharmony_ci	field	FIFOFLUSH	0x02
98162306a36Sopenharmony_ci	field	FIFORESET	0x01
98262306a36Sopenharmony_ci}
98362306a36Sopenharmony_ci
98462306a36Sopenharmony_ciregister DFSTATUS {
98562306a36Sopenharmony_ci	address			0x094
98662306a36Sopenharmony_ci	access_mode RO
98762306a36Sopenharmony_ci	field	PRELOAD_AVAIL	0x80
98862306a36Sopenharmony_ci	field	DFCACHETH	0x40
98962306a36Sopenharmony_ci	field	FIFOQWDEMP	0x20
99062306a36Sopenharmony_ci	field	MREQPEND	0x10
99162306a36Sopenharmony_ci	field	HDONE		0x08
99262306a36Sopenharmony_ci	field	DFTHRESH	0x04
99362306a36Sopenharmony_ci	field	FIFOFULL	0x02
99462306a36Sopenharmony_ci	field	FIFOEMP		0x01
99562306a36Sopenharmony_ci}
99662306a36Sopenharmony_ci
99762306a36Sopenharmony_ciregister DFWADDR {
99862306a36Sopenharmony_ci	address			0x95
99962306a36Sopenharmony_ci	access_mode RW
100062306a36Sopenharmony_ci	dont_generate_debug_code
100162306a36Sopenharmony_ci}
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_ciregister DFRADDR {
100462306a36Sopenharmony_ci	address			0x97
100562306a36Sopenharmony_ci	access_mode RW
100662306a36Sopenharmony_ci}
100762306a36Sopenharmony_ci
100862306a36Sopenharmony_ciregister DFDAT {
100962306a36Sopenharmony_ci	address			0x099
101062306a36Sopenharmony_ci	access_mode RW
101162306a36Sopenharmony_ci	dont_generate_debug_code
101262306a36Sopenharmony_ci}
101362306a36Sopenharmony_ci
101462306a36Sopenharmony_ci/*
101562306a36Sopenharmony_ci * SCB Auto Increment (p. 3-59)
101662306a36Sopenharmony_ci * Byte offset into the SCB Array and an optional bit to allow auto
101762306a36Sopenharmony_ci * incrementing of the address during download and upload operations
101862306a36Sopenharmony_ci */
101962306a36Sopenharmony_ciregister SCBCNT {
102062306a36Sopenharmony_ci	address			0x09a
102162306a36Sopenharmony_ci	access_mode RW
102262306a36Sopenharmony_ci	count		1
102362306a36Sopenharmony_ci	field	SCBAUTO		0x80
102462306a36Sopenharmony_ci	mask	SCBCNT_MASK	0x1f
102562306a36Sopenharmony_ci	dont_generate_debug_code
102662306a36Sopenharmony_ci}
102762306a36Sopenharmony_ci
102862306a36Sopenharmony_ci/*
102962306a36Sopenharmony_ci * Queue In FIFO (p. 3-60)
103062306a36Sopenharmony_ci * Input queue for queued SCBs (commands that the seqencer has yet to start)
103162306a36Sopenharmony_ci */
103262306a36Sopenharmony_ciregister QINFIFO {
103362306a36Sopenharmony_ci	address			0x09b
103462306a36Sopenharmony_ci	access_mode RW
103562306a36Sopenharmony_ci	count		12
103662306a36Sopenharmony_ci	dont_generate_debug_code
103762306a36Sopenharmony_ci}
103862306a36Sopenharmony_ci
103962306a36Sopenharmony_ci/*
104062306a36Sopenharmony_ci * Queue In Count (p. 3-60)
104162306a36Sopenharmony_ci * Number of queued SCBs
104262306a36Sopenharmony_ci */
104362306a36Sopenharmony_ciregister QINCNT	{
104462306a36Sopenharmony_ci	address			0x09c
104562306a36Sopenharmony_ci	access_mode RO
104662306a36Sopenharmony_ci}
104762306a36Sopenharmony_ci
104862306a36Sopenharmony_ci/*
104962306a36Sopenharmony_ci * Queue Out FIFO (p. 3-61)
105062306a36Sopenharmony_ci * Queue of SCBs that have completed and await the host
105162306a36Sopenharmony_ci */
105262306a36Sopenharmony_ciregister QOUTFIFO {
105362306a36Sopenharmony_ci	address			0x09d
105462306a36Sopenharmony_ci	access_mode WO
105562306a36Sopenharmony_ci	count		7
105662306a36Sopenharmony_ci	dont_generate_debug_code
105762306a36Sopenharmony_ci}
105862306a36Sopenharmony_ci
105962306a36Sopenharmony_ciregister CRCCONTROL1 {
106062306a36Sopenharmony_ci	address			0x09d
106162306a36Sopenharmony_ci	access_mode RW
106262306a36Sopenharmony_ci	count		3
106362306a36Sopenharmony_ci	field	CRCONSEEN		0x80
106462306a36Sopenharmony_ci	field	CRCVALCHKEN		0x40
106562306a36Sopenharmony_ci	field	CRCENDCHKEN		0x20
106662306a36Sopenharmony_ci	field	CRCREQCHKEN		0x10
106762306a36Sopenharmony_ci	field	TARGCRCENDEN		0x08
106862306a36Sopenharmony_ci	field	TARGCRCCNTEN		0x04
106962306a36Sopenharmony_ci	dont_generate_debug_code
107062306a36Sopenharmony_ci}
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_ci
107362306a36Sopenharmony_ci/*
107462306a36Sopenharmony_ci * Queue Out Count (p. 3-61)
107562306a36Sopenharmony_ci * Number of queued SCBs in the Out FIFO
107662306a36Sopenharmony_ci */
107762306a36Sopenharmony_ciregister QOUTCNT {
107862306a36Sopenharmony_ci	address			0x09e
107962306a36Sopenharmony_ci	access_mode RO
108062306a36Sopenharmony_ci}
108162306a36Sopenharmony_ci
108262306a36Sopenharmony_ciregister SCSIPHASE {
108362306a36Sopenharmony_ci	address			0x09e
108462306a36Sopenharmony_ci	access_mode RO
108562306a36Sopenharmony_ci	field	STATUS_PHASE	0x20
108662306a36Sopenharmony_ci	field	COMMAND_PHASE	0x10
108762306a36Sopenharmony_ci	field	MSG_IN_PHASE	0x08
108862306a36Sopenharmony_ci	field	MSG_OUT_PHASE	0x04
108962306a36Sopenharmony_ci	field	DATA_IN_PHASE	0x02
109062306a36Sopenharmony_ci	field	DATA_OUT_PHASE	0x01
109162306a36Sopenharmony_ci	mask	DATA_PHASE_MASK	0x03
109262306a36Sopenharmony_ci}
109362306a36Sopenharmony_ci
109462306a36Sopenharmony_ci/*
109562306a36Sopenharmony_ci * Special Function
109662306a36Sopenharmony_ci */
109762306a36Sopenharmony_ciregister SFUNCT {
109862306a36Sopenharmony_ci	address			0x09f
109962306a36Sopenharmony_ci	access_mode RW
110062306a36Sopenharmony_ci	count	    4
110162306a36Sopenharmony_ci	field	ALT_MODE	0x80
110262306a36Sopenharmony_ci	dont_generate_debug_code
110362306a36Sopenharmony_ci}
110462306a36Sopenharmony_ci
110562306a36Sopenharmony_ci/*
110662306a36Sopenharmony_ci * SCB Definition (p. 5-4)
110762306a36Sopenharmony_ci */
110862306a36Sopenharmony_ciscb {
110962306a36Sopenharmony_ci	address		0x0a0
111062306a36Sopenharmony_ci	size		64
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci	SCB_CDB_PTR {
111362306a36Sopenharmony_ci		size	4
111462306a36Sopenharmony_ci		alias	SCB_RESIDUAL_DATACNT
111562306a36Sopenharmony_ci		alias	SCB_CDB_STORE
111662306a36Sopenharmony_ci		dont_generate_debug_code
111762306a36Sopenharmony_ci	}
111862306a36Sopenharmony_ci	SCB_RESIDUAL_SGPTR {
111962306a36Sopenharmony_ci		size	4
112062306a36Sopenharmony_ci		dont_generate_debug_code
112162306a36Sopenharmony_ci	}
112262306a36Sopenharmony_ci	SCB_SCSI_STATUS {
112362306a36Sopenharmony_ci		size	1
112462306a36Sopenharmony_ci		dont_generate_debug_code
112562306a36Sopenharmony_ci	}
112662306a36Sopenharmony_ci	SCB_TARGET_PHASES {
112762306a36Sopenharmony_ci		size	1
112862306a36Sopenharmony_ci		dont_generate_debug_code
112962306a36Sopenharmony_ci	}
113062306a36Sopenharmony_ci	SCB_TARGET_DATA_DIR {
113162306a36Sopenharmony_ci		size	1
113262306a36Sopenharmony_ci		dont_generate_debug_code
113362306a36Sopenharmony_ci	}
113462306a36Sopenharmony_ci	SCB_TARGET_ITAG {
113562306a36Sopenharmony_ci		size	1
113662306a36Sopenharmony_ci		dont_generate_debug_code
113762306a36Sopenharmony_ci	}
113862306a36Sopenharmony_ci	SCB_DATAPTR {
113962306a36Sopenharmony_ci		size	4
114062306a36Sopenharmony_ci		dont_generate_debug_code
114162306a36Sopenharmony_ci	}
114262306a36Sopenharmony_ci	SCB_DATACNT {
114362306a36Sopenharmony_ci		/*
114462306a36Sopenharmony_ci		 * The last byte is really the high address bits for
114562306a36Sopenharmony_ci		 * the data address.
114662306a36Sopenharmony_ci		 */
114762306a36Sopenharmony_ci		size	4
114862306a36Sopenharmony_ci		field	SG_LAST_SEG		0x80	/* In the fourth byte */
114962306a36Sopenharmony_ci		mask	SG_HIGH_ADDR_BITS	0x7F	/* In the fourth byte */
115062306a36Sopenharmony_ci		dont_generate_debug_code
115162306a36Sopenharmony_ci	}
115262306a36Sopenharmony_ci	SCB_SGPTR {
115362306a36Sopenharmony_ci		size	4
115462306a36Sopenharmony_ci		field	SG_RESID_VALID	0x04	/* In the first byte */
115562306a36Sopenharmony_ci		field	SG_FULL_RESID	0x02	/* In the first byte */
115662306a36Sopenharmony_ci		field	SG_LIST_NULL	0x01	/* In the first byte */
115762306a36Sopenharmony_ci		dont_generate_debug_code
115862306a36Sopenharmony_ci	}
115962306a36Sopenharmony_ci	SCB_CONTROL {
116062306a36Sopenharmony_ci		size	1
116162306a36Sopenharmony_ci		field	TARGET_SCB			0x80
116262306a36Sopenharmony_ci		field	STATUS_RCVD			0x80
116362306a36Sopenharmony_ci		field	DISCENB				0x40
116462306a36Sopenharmony_ci		field	TAG_ENB				0x20
116562306a36Sopenharmony_ci		field	MK_MESSAGE			0x10
116662306a36Sopenharmony_ci		field	ULTRAENB			0x08
116762306a36Sopenharmony_ci		field	DISCONNECTED			0x04
116862306a36Sopenharmony_ci		mask	SCB_TAG_TYPE			0x03
116962306a36Sopenharmony_ci	}
117062306a36Sopenharmony_ci	SCB_SCSIID {
117162306a36Sopenharmony_ci		size	1
117262306a36Sopenharmony_ci		field	TWIN_CHNLB			0x80
117362306a36Sopenharmony_ci		mask	TWIN_TID			0x70
117462306a36Sopenharmony_ci		mask	TID				0xf0
117562306a36Sopenharmony_ci		mask	OID				0x0f
117662306a36Sopenharmony_ci	}
117762306a36Sopenharmony_ci	SCB_LUN {
117862306a36Sopenharmony_ci		field	SCB_XFERLEN_ODD			0x80
117962306a36Sopenharmony_ci		mask	LID				0x3f
118062306a36Sopenharmony_ci		size	1
118162306a36Sopenharmony_ci	}
118262306a36Sopenharmony_ci	SCB_TAG {
118362306a36Sopenharmony_ci		size	1
118462306a36Sopenharmony_ci	}
118562306a36Sopenharmony_ci	SCB_CDB_LEN {
118662306a36Sopenharmony_ci		size	1
118762306a36Sopenharmony_ci		dont_generate_debug_code
118862306a36Sopenharmony_ci	}
118962306a36Sopenharmony_ci	SCB_SCSIRATE {
119062306a36Sopenharmony_ci		size	1
119162306a36Sopenharmony_ci		dont_generate_debug_code
119262306a36Sopenharmony_ci	}
119362306a36Sopenharmony_ci	SCB_SCSIOFFSET {
119462306a36Sopenharmony_ci		size	1
119562306a36Sopenharmony_ci		count	1
119662306a36Sopenharmony_ci		dont_generate_debug_code
119762306a36Sopenharmony_ci	}
119862306a36Sopenharmony_ci	SCB_NEXT {
119962306a36Sopenharmony_ci		size	1
120062306a36Sopenharmony_ci		dont_generate_debug_code
120162306a36Sopenharmony_ci	}
120262306a36Sopenharmony_ci	SCB_64_SPARE {
120362306a36Sopenharmony_ci		size	16
120462306a36Sopenharmony_ci	}
120562306a36Sopenharmony_ci	SCB_64_BTT {
120662306a36Sopenharmony_ci		size	16
120762306a36Sopenharmony_ci		dont_generate_debug_code
120862306a36Sopenharmony_ci	}
120962306a36Sopenharmony_ci}
121062306a36Sopenharmony_ci
121162306a36Sopenharmony_ciconst	SCB_UPLOAD_SIZE		32
121262306a36Sopenharmony_ciconst	SCB_DOWNLOAD_SIZE	32
121362306a36Sopenharmony_ciconst	SCB_DOWNLOAD_SIZE_64	48
121462306a36Sopenharmony_ci
121562306a36Sopenharmony_ciconst	SG_SIZEOF	0x08		/* sizeof(struct ahc_dma) */
121662306a36Sopenharmony_ci
121762306a36Sopenharmony_ci/* --------------------- AHA-2840-only definitions -------------------- */
121862306a36Sopenharmony_ci
121962306a36Sopenharmony_ciregister SEECTL_2840 {
122062306a36Sopenharmony_ci	address			0x0c0
122162306a36Sopenharmony_ci	access_mode RW
122262306a36Sopenharmony_ci	count		2
122362306a36Sopenharmony_ci	field	CS_2840		0x04
122462306a36Sopenharmony_ci	field	CK_2840		0x02
122562306a36Sopenharmony_ci	field	DO_2840		0x01
122662306a36Sopenharmony_ci	dont_generate_debug_code
122762306a36Sopenharmony_ci}
122862306a36Sopenharmony_ci
122962306a36Sopenharmony_ciregister STATUS_2840 {
123062306a36Sopenharmony_ci	address			0x0c1
123162306a36Sopenharmony_ci	access_mode RW
123262306a36Sopenharmony_ci	count		4
123362306a36Sopenharmony_ci	field	EEPROM_TF	0x80
123462306a36Sopenharmony_ci	mask	BIOS_SEL	0x60
123562306a36Sopenharmony_ci	mask	ADSEL		0x1e
123662306a36Sopenharmony_ci	field	DI_2840		0x01
123762306a36Sopenharmony_ci	dont_generate_debug_code
123862306a36Sopenharmony_ci}
123962306a36Sopenharmony_ci
124062306a36Sopenharmony_ci/* --------------------- AIC-7870-only definitions -------------------- */
124162306a36Sopenharmony_ci
124262306a36Sopenharmony_ciregister CCHADDR {
124362306a36Sopenharmony_ci	address			0x0E0
124462306a36Sopenharmony_ci	size 8
124562306a36Sopenharmony_ci	dont_generate_debug_code
124662306a36Sopenharmony_ci}
124762306a36Sopenharmony_ci
124862306a36Sopenharmony_ciregister CCHCNT {
124962306a36Sopenharmony_ci	address			0x0E8
125062306a36Sopenharmony_ci	dont_generate_debug_code
125162306a36Sopenharmony_ci}
125262306a36Sopenharmony_ci
125362306a36Sopenharmony_ciregister CCSGRAM {
125462306a36Sopenharmony_ci	address			0x0E9
125562306a36Sopenharmony_ci	dont_generate_debug_code
125662306a36Sopenharmony_ci}
125762306a36Sopenharmony_ci
125862306a36Sopenharmony_ciregister CCSGADDR {
125962306a36Sopenharmony_ci	address			0x0EA
126062306a36Sopenharmony_ci	dont_generate_debug_code
126162306a36Sopenharmony_ci}
126262306a36Sopenharmony_ci
126362306a36Sopenharmony_ciregister CCSGCTL {
126462306a36Sopenharmony_ci	address			0x0EB
126562306a36Sopenharmony_ci	field	CCSGDONE	0x80
126662306a36Sopenharmony_ci	field	CCSGEN		0x08
126762306a36Sopenharmony_ci	field	SG_FETCH_NEEDED 0x02	/* Bit used for software state */
126862306a36Sopenharmony_ci	field	CCSGRESET	0x01
126962306a36Sopenharmony_ci	dont_generate_debug_code
127062306a36Sopenharmony_ci}
127162306a36Sopenharmony_ci
127262306a36Sopenharmony_ciregister CCSCBCNT {
127362306a36Sopenharmony_ci	address			0xEF
127462306a36Sopenharmony_ci	count		1
127562306a36Sopenharmony_ci	dont_generate_debug_code
127662306a36Sopenharmony_ci}
127762306a36Sopenharmony_ci
127862306a36Sopenharmony_ciregister CCSCBCTL {
127962306a36Sopenharmony_ci	address			0x0EE
128062306a36Sopenharmony_ci	field	CCSCBDONE	0x80
128162306a36Sopenharmony_ci	field	ARRDONE		0x40	/* SCB Array prefetch done */
128262306a36Sopenharmony_ci	field	CCARREN		0x10
128362306a36Sopenharmony_ci	field	CCSCBEN		0x08
128462306a36Sopenharmony_ci	field	CCSCBDIR	0x04
128562306a36Sopenharmony_ci	field	CCSCBRESET	0x01
128662306a36Sopenharmony_ci	dont_generate_debug_code
128762306a36Sopenharmony_ci}
128862306a36Sopenharmony_ci
128962306a36Sopenharmony_ciregister CCSCBADDR {
129062306a36Sopenharmony_ci	address			0x0ED
129162306a36Sopenharmony_ci	dont_generate_debug_code
129262306a36Sopenharmony_ci}
129362306a36Sopenharmony_ci
129462306a36Sopenharmony_ciregister CCSCBRAM {
129562306a36Sopenharmony_ci	address			0xEC
129662306a36Sopenharmony_ci	dont_generate_debug_code
129762306a36Sopenharmony_ci}
129862306a36Sopenharmony_ci
129962306a36Sopenharmony_ci/*
130062306a36Sopenharmony_ci * SCB bank address (7895/7896/97 only)
130162306a36Sopenharmony_ci */
130262306a36Sopenharmony_ciregister SCBBADDR {
130362306a36Sopenharmony_ci	address			0x0F0
130462306a36Sopenharmony_ci	access_mode RW
130562306a36Sopenharmony_ci	count		3
130662306a36Sopenharmony_ci	dont_generate_debug_code
130762306a36Sopenharmony_ci}
130862306a36Sopenharmony_ci
130962306a36Sopenharmony_ciregister CCSCBPTR {
131062306a36Sopenharmony_ci	address			0x0F1
131162306a36Sopenharmony_ci	dont_generate_debug_code
131262306a36Sopenharmony_ci}
131362306a36Sopenharmony_ci
131462306a36Sopenharmony_ciregister HNSCB_QOFF {
131562306a36Sopenharmony_ci	address			0x0F4
131662306a36Sopenharmony_ci	count		4
131762306a36Sopenharmony_ci	dont_generate_debug_code
131862306a36Sopenharmony_ci}
131962306a36Sopenharmony_ci
132062306a36Sopenharmony_ciregister SNSCB_QOFF {
132162306a36Sopenharmony_ci	address			0x0F6
132262306a36Sopenharmony_ci	dont_generate_debug_code
132362306a36Sopenharmony_ci}
132462306a36Sopenharmony_ci
132562306a36Sopenharmony_ciregister SDSCB_QOFF {
132662306a36Sopenharmony_ci	address			0x0F8
132762306a36Sopenharmony_ci	dont_generate_debug_code
132862306a36Sopenharmony_ci}
132962306a36Sopenharmony_ci
133062306a36Sopenharmony_ciregister QOFF_CTLSTA {
133162306a36Sopenharmony_ci	address			0x0FA
133262306a36Sopenharmony_ci	field	SCB_AVAIL	0x40
133362306a36Sopenharmony_ci	field	SNSCB_ROLLOVER	0x20
133462306a36Sopenharmony_ci	field	SDSCB_ROLLOVER	0x10
133562306a36Sopenharmony_ci	mask	SCB_QSIZE	0x07
133662306a36Sopenharmony_ci	mask	SCB_QSIZE_256	0x06
133762306a36Sopenharmony_ci	dont_generate_debug_code
133862306a36Sopenharmony_ci}
133962306a36Sopenharmony_ci
134062306a36Sopenharmony_ciregister DFF_THRSH {
134162306a36Sopenharmony_ci	address			0x0FB
134262306a36Sopenharmony_ci	mask	WR_DFTHRSH	0x70
134362306a36Sopenharmony_ci	mask	RD_DFTHRSH	0x07
134462306a36Sopenharmony_ci	mask	RD_DFTHRSH_MIN	0x00
134562306a36Sopenharmony_ci	mask	RD_DFTHRSH_25	0x01
134662306a36Sopenharmony_ci	mask	RD_DFTHRSH_50	0x02
134762306a36Sopenharmony_ci	mask	RD_DFTHRSH_63	0x03
134862306a36Sopenharmony_ci	mask	RD_DFTHRSH_75	0x04
134962306a36Sopenharmony_ci	mask	RD_DFTHRSH_85	0x05
135062306a36Sopenharmony_ci	mask	RD_DFTHRSH_90	0x06
135162306a36Sopenharmony_ci	mask	RD_DFTHRSH_MAX	0x07
135262306a36Sopenharmony_ci	mask	WR_DFTHRSH_MIN	0x00
135362306a36Sopenharmony_ci	mask	WR_DFTHRSH_25	0x10
135462306a36Sopenharmony_ci	mask	WR_DFTHRSH_50	0x20
135562306a36Sopenharmony_ci	mask	WR_DFTHRSH_63	0x30
135662306a36Sopenharmony_ci	mask	WR_DFTHRSH_75	0x40
135762306a36Sopenharmony_ci	mask	WR_DFTHRSH_85	0x50
135862306a36Sopenharmony_ci	mask	WR_DFTHRSH_90	0x60
135962306a36Sopenharmony_ci	mask	WR_DFTHRSH_MAX	0x70
136062306a36Sopenharmony_ci	count	4
136162306a36Sopenharmony_ci	dont_generate_debug_code
136262306a36Sopenharmony_ci}
136362306a36Sopenharmony_ci
136462306a36Sopenharmony_ciregister SG_CACHE_PRE {
136562306a36Sopenharmony_ci	access_mode WO
136662306a36Sopenharmony_ci	address			0x0fc
136762306a36Sopenharmony_ci	mask	SG_ADDR_MASK	0xf8
136862306a36Sopenharmony_ci	field	LAST_SEG	0x02
136962306a36Sopenharmony_ci	field	LAST_SEG_DONE	0x01
137062306a36Sopenharmony_ci	dont_generate_debug_code
137162306a36Sopenharmony_ci}
137262306a36Sopenharmony_ci
137362306a36Sopenharmony_ciregister SG_CACHE_SHADOW {
137462306a36Sopenharmony_ci	access_mode RO
137562306a36Sopenharmony_ci	address			0x0fc
137662306a36Sopenharmony_ci	mask	SG_ADDR_MASK	0xf8
137762306a36Sopenharmony_ci	field	LAST_SEG	0x02
137862306a36Sopenharmony_ci	field	LAST_SEG_DONE	0x01
137962306a36Sopenharmony_ci	dont_generate_debug_code
138062306a36Sopenharmony_ci}
138162306a36Sopenharmony_ci/* ---------------------- Scratch RAM Offsets ------------------------- */
138262306a36Sopenharmony_ci/* These offsets are either to values that are initialized by the board's
138362306a36Sopenharmony_ci * BIOS or are specified by the sequencer code.
138462306a36Sopenharmony_ci *
138562306a36Sopenharmony_ci * The host adapter card (at least the BIOS) uses 20-2f for SCSI
138662306a36Sopenharmony_ci * device information, 32-33 and 5a-5f as well. As it turns out, the
138762306a36Sopenharmony_ci * BIOS trashes 20-2f, writing the synchronous negotiation results
138862306a36Sopenharmony_ci * on top of the BIOS values, so we re-use those for our per-target
138962306a36Sopenharmony_ci * scratchspace (actually a value that can be copied directly into
139062306a36Sopenharmony_ci * SCSIRATE).  The kernel driver will enable synchronous negotiation
139162306a36Sopenharmony_ci * for all targets that have a value other than 0 in the lower four
139262306a36Sopenharmony_ci * bits of the target scratch space.  This should work regardless of
139362306a36Sopenharmony_ci * whether the bios has been installed.
139462306a36Sopenharmony_ci */
139562306a36Sopenharmony_ci
139662306a36Sopenharmony_ciscratch_ram {
139762306a36Sopenharmony_ci	address		0x020
139862306a36Sopenharmony_ci	size		58
139962306a36Sopenharmony_ci
140062306a36Sopenharmony_ci	/*
140162306a36Sopenharmony_ci	 * 1 byte per target starting at this address for configuration values
140262306a36Sopenharmony_ci	 */
140362306a36Sopenharmony_ci	BUSY_TARGETS {
140462306a36Sopenharmony_ci		alias		TARG_SCSIRATE
140562306a36Sopenharmony_ci		size		16
140662306a36Sopenharmony_ci		dont_generate_debug_code
140762306a36Sopenharmony_ci	}
140862306a36Sopenharmony_ci	/*
140962306a36Sopenharmony_ci	 * Bit vector of targets that have ULTRA enabled as set by
141062306a36Sopenharmony_ci	 * the BIOS.  The Sequencer relies on a per-SCB field to
141162306a36Sopenharmony_ci	 * control whether to enable Ultra transfers or not.  During
141262306a36Sopenharmony_ci	 * initialization, we read this field and reuse it for 2
141362306a36Sopenharmony_ci	 * entries in the busy target table.
141462306a36Sopenharmony_ci	 */
141562306a36Sopenharmony_ci	ULTRA_ENB {
141662306a36Sopenharmony_ci		alias		CMDSIZE_TABLE
141762306a36Sopenharmony_ci		size		2
141862306a36Sopenharmony_ci		count		2
141962306a36Sopenharmony_ci		dont_generate_debug_code
142062306a36Sopenharmony_ci	}
142162306a36Sopenharmony_ci	/*
142262306a36Sopenharmony_ci	 * Bit vector of targets that have disconnection disabled as set by
142362306a36Sopenharmony_ci	 * the BIOS.  The Sequencer relies in a per-SCB field to control the
142462306a36Sopenharmony_ci	 * disconnect priveldge.  During initialization, we read this field
142562306a36Sopenharmony_ci	 * and reuse it for 2 entries in the busy target table.
142662306a36Sopenharmony_ci	 */
142762306a36Sopenharmony_ci	DISC_DSB {
142862306a36Sopenharmony_ci		size		2
142962306a36Sopenharmony_ci		count		6
143062306a36Sopenharmony_ci		dont_generate_debug_code
143162306a36Sopenharmony_ci	}
143262306a36Sopenharmony_ci	CMDSIZE_TABLE_TAIL {
143362306a36Sopenharmony_ci		size		4
143462306a36Sopenharmony_ci	}
143562306a36Sopenharmony_ci	/*
143662306a36Sopenharmony_ci	 * Partial transfer past cacheline end to be
143762306a36Sopenharmony_ci	 * transferred using an extra S/G.
143862306a36Sopenharmony_ci	 */
143962306a36Sopenharmony_ci	MWI_RESIDUAL {
144062306a36Sopenharmony_ci		size		1
144162306a36Sopenharmony_ci		dont_generate_debug_code
144262306a36Sopenharmony_ci	}
144362306a36Sopenharmony_ci	/*
144462306a36Sopenharmony_ci	 * SCBID of the next SCB to be started by the controller.
144562306a36Sopenharmony_ci	 */
144662306a36Sopenharmony_ci	NEXT_QUEUED_SCB {
144762306a36Sopenharmony_ci		size		1
144862306a36Sopenharmony_ci		dont_generate_debug_code
144962306a36Sopenharmony_ci	}
145062306a36Sopenharmony_ci	/*
145162306a36Sopenharmony_ci	 * Single byte buffer used to designate the type or message
145262306a36Sopenharmony_ci	 * to send to a target.
145362306a36Sopenharmony_ci	 */
145462306a36Sopenharmony_ci	MSG_OUT {
145562306a36Sopenharmony_ci		size		1
145662306a36Sopenharmony_ci		dont_generate_debug_code
145762306a36Sopenharmony_ci	}
145862306a36Sopenharmony_ci	/* Parameters for DMA Logic */
145962306a36Sopenharmony_ci	DMAPARAMS {
146062306a36Sopenharmony_ci		size		1
146162306a36Sopenharmony_ci		count		12
146262306a36Sopenharmony_ci		field	PRELOADEN	0x80
146362306a36Sopenharmony_ci		field	WIDEODD		0x40
146462306a36Sopenharmony_ci		field	SCSIEN		0x20
146562306a36Sopenharmony_ci		field	SDMAEN		0x10
146662306a36Sopenharmony_ci		field	SDMAENACK	0x10
146762306a36Sopenharmony_ci		field	HDMAEN		0x08
146862306a36Sopenharmony_ci		field	HDMAENACK	0x08
146962306a36Sopenharmony_ci		field	DIRECTION	0x04	/* Set indicates PCI->SCSI */
147062306a36Sopenharmony_ci		field	FIFOFLUSH	0x02
147162306a36Sopenharmony_ci		field	FIFORESET	0x01
147262306a36Sopenharmony_ci		dont_generate_debug_code
147362306a36Sopenharmony_ci	}
147462306a36Sopenharmony_ci	SEQ_FLAGS {
147562306a36Sopenharmony_ci		size		1
147662306a36Sopenharmony_ci		field	NOT_IDENTIFIED		0x80
147762306a36Sopenharmony_ci		field	NO_CDB_SENT		0x40
147862306a36Sopenharmony_ci		field	TARGET_CMD_IS_TAGGED	0x40
147962306a36Sopenharmony_ci		field	DPHASE			0x20
148062306a36Sopenharmony_ci		/* Target flags */
148162306a36Sopenharmony_ci		field	TARG_CMD_PENDING	0x10
148262306a36Sopenharmony_ci		field	CMDPHASE_PENDING	0x08
148362306a36Sopenharmony_ci		field	DPHASE_PENDING		0x04
148462306a36Sopenharmony_ci		field	SPHASE_PENDING		0x02
148562306a36Sopenharmony_ci		field	NO_DISCONNECT		0x01
148662306a36Sopenharmony_ci	}
148762306a36Sopenharmony_ci	/*
148862306a36Sopenharmony_ci	 * Temporary storage for the
148962306a36Sopenharmony_ci	 * target/channel/lun of a
149062306a36Sopenharmony_ci	 * reconnecting target
149162306a36Sopenharmony_ci	 */
149262306a36Sopenharmony_ci	SAVED_SCSIID {
149362306a36Sopenharmony_ci		size		1
149462306a36Sopenharmony_ci		dont_generate_debug_code
149562306a36Sopenharmony_ci	}
149662306a36Sopenharmony_ci	SAVED_LUN {
149762306a36Sopenharmony_ci		size		1
149862306a36Sopenharmony_ci		dont_generate_debug_code
149962306a36Sopenharmony_ci	}
150062306a36Sopenharmony_ci	/*
150162306a36Sopenharmony_ci	 * The last bus phase as seen by the sequencer. 
150262306a36Sopenharmony_ci	 */
150362306a36Sopenharmony_ci	LASTPHASE {
150462306a36Sopenharmony_ci		size		1
150562306a36Sopenharmony_ci		field	CDI		0x80
150662306a36Sopenharmony_ci		field	IOI		0x40
150762306a36Sopenharmony_ci		field	MSGI		0x20
150862306a36Sopenharmony_ci		mask	PHASE_MASK	CDI|IOI|MSGI
150962306a36Sopenharmony_ci		mask	P_DATAOUT	0x00
151062306a36Sopenharmony_ci		mask	P_DATAIN	IOI
151162306a36Sopenharmony_ci		mask	P_COMMAND	CDI
151262306a36Sopenharmony_ci		mask	P_MESGOUT	CDI|MSGI
151362306a36Sopenharmony_ci		mask	P_STATUS	CDI|IOI
151462306a36Sopenharmony_ci		mask	P_MESGIN	CDI|IOI|MSGI
151562306a36Sopenharmony_ci		mask	P_BUSFREE	0x01
151662306a36Sopenharmony_ci	}
151762306a36Sopenharmony_ci	/*
151862306a36Sopenharmony_ci	 * head of list of SCBs awaiting
151962306a36Sopenharmony_ci	 * selection
152062306a36Sopenharmony_ci	 */
152162306a36Sopenharmony_ci	WAITING_SCBH {
152262306a36Sopenharmony_ci		size		1
152362306a36Sopenharmony_ci		dont_generate_debug_code
152462306a36Sopenharmony_ci	}
152562306a36Sopenharmony_ci	/*
152662306a36Sopenharmony_ci	 * head of list of SCBs that are
152762306a36Sopenharmony_ci	 * disconnected.  Used for SCB
152862306a36Sopenharmony_ci	 * paging.
152962306a36Sopenharmony_ci	 */
153062306a36Sopenharmony_ci	DISCONNECTED_SCBH {
153162306a36Sopenharmony_ci		size		1
153262306a36Sopenharmony_ci		dont_generate_debug_code
153362306a36Sopenharmony_ci	}
153462306a36Sopenharmony_ci	/*
153562306a36Sopenharmony_ci	 * head of list of SCBs that are
153662306a36Sopenharmony_ci	 * not in use.  Used for SCB paging.
153762306a36Sopenharmony_ci	 */
153862306a36Sopenharmony_ci	FREE_SCBH {
153962306a36Sopenharmony_ci		size		1
154062306a36Sopenharmony_ci		dont_generate_debug_code
154162306a36Sopenharmony_ci	}
154262306a36Sopenharmony_ci	/*
154362306a36Sopenharmony_ci	 * head of list of SCBs that have
154462306a36Sopenharmony_ci	 * completed but have not been
154562306a36Sopenharmony_ci	 * put into the qoutfifo.
154662306a36Sopenharmony_ci	 */
154762306a36Sopenharmony_ci	COMPLETE_SCBH {
154862306a36Sopenharmony_ci		size		1
154962306a36Sopenharmony_ci	}
155062306a36Sopenharmony_ci	/*
155162306a36Sopenharmony_ci	 * Address of the hardware scb array in the host.
155262306a36Sopenharmony_ci	 */
155362306a36Sopenharmony_ci	HSCB_ADDR {
155462306a36Sopenharmony_ci		size		4
155562306a36Sopenharmony_ci		dont_generate_debug_code
155662306a36Sopenharmony_ci	}
155762306a36Sopenharmony_ci	/*
155862306a36Sopenharmony_ci	 * Base address of our shared data with the kernel driver in host
155962306a36Sopenharmony_ci	 * memory.  This includes the qoutfifo and target mode
156062306a36Sopenharmony_ci	 * incoming command queue.
156162306a36Sopenharmony_ci	 */
156262306a36Sopenharmony_ci	SHARED_DATA_ADDR {
156362306a36Sopenharmony_ci		size		4
156462306a36Sopenharmony_ci		dont_generate_debug_code
156562306a36Sopenharmony_ci	}
156662306a36Sopenharmony_ci	KERNEL_QINPOS {
156762306a36Sopenharmony_ci		size		1
156862306a36Sopenharmony_ci		dont_generate_debug_code
156962306a36Sopenharmony_ci	}
157062306a36Sopenharmony_ci	QINPOS {
157162306a36Sopenharmony_ci		size		1
157262306a36Sopenharmony_ci		dont_generate_debug_code
157362306a36Sopenharmony_ci	}
157462306a36Sopenharmony_ci	QOUTPOS {
157562306a36Sopenharmony_ci		size		1
157662306a36Sopenharmony_ci		dont_generate_debug_code
157762306a36Sopenharmony_ci	}
157862306a36Sopenharmony_ci	/*
157962306a36Sopenharmony_ci	 * Kernel and sequencer offsets into the queue of
158062306a36Sopenharmony_ci	 * incoming target mode command descriptors.  The
158162306a36Sopenharmony_ci	 * queue is full when the KERNEL_TQINPOS == TQINPOS.
158262306a36Sopenharmony_ci	 */
158362306a36Sopenharmony_ci	KERNEL_TQINPOS {
158462306a36Sopenharmony_ci		size		1
158562306a36Sopenharmony_ci		dont_generate_debug_code
158662306a36Sopenharmony_ci	}
158762306a36Sopenharmony_ci	TQINPOS {
158862306a36Sopenharmony_ci		size		1
158962306a36Sopenharmony_ci		dont_generate_debug_code
159062306a36Sopenharmony_ci	}
159162306a36Sopenharmony_ci	ARG_1 {
159262306a36Sopenharmony_ci		size		1
159362306a36Sopenharmony_ci		count		1
159462306a36Sopenharmony_ci		mask	SEND_MSG		0x80
159562306a36Sopenharmony_ci		mask	SEND_SENSE		0x40
159662306a36Sopenharmony_ci		mask	SEND_REJ		0x20
159762306a36Sopenharmony_ci		mask	MSGOUT_PHASEMIS		0x10
159862306a36Sopenharmony_ci		mask	EXIT_MSG_LOOP		0x08
159962306a36Sopenharmony_ci		mask	CONT_MSG_LOOP		0x04
160062306a36Sopenharmony_ci		mask	CONT_TARG_SESSION	0x02
160162306a36Sopenharmony_ci		alias	RETURN_1
160262306a36Sopenharmony_ci		dont_generate_debug_code
160362306a36Sopenharmony_ci	}
160462306a36Sopenharmony_ci	ARG_2 {
160562306a36Sopenharmony_ci		size		1
160662306a36Sopenharmony_ci		alias	RETURN_2
160762306a36Sopenharmony_ci		dont_generate_debug_code
160862306a36Sopenharmony_ci	}
160962306a36Sopenharmony_ci
161062306a36Sopenharmony_ci	/*
161162306a36Sopenharmony_ci	 * Snapshot of MSG_OUT taken after each message is sent.
161262306a36Sopenharmony_ci	 */
161362306a36Sopenharmony_ci	LAST_MSG {
161462306a36Sopenharmony_ci		size		1
161562306a36Sopenharmony_ci		alias	TARG_IMMEDIATE_SCB
161662306a36Sopenharmony_ci		dont_generate_debug_code
161762306a36Sopenharmony_ci	}
161862306a36Sopenharmony_ci
161962306a36Sopenharmony_ci	/*
162062306a36Sopenharmony_ci	 * Sequences the kernel driver has okayed for us.  This allows
162162306a36Sopenharmony_ci	 * the driver to do things like prevent initiator or target
162262306a36Sopenharmony_ci	 * operations.
162362306a36Sopenharmony_ci	 */
162462306a36Sopenharmony_ci	SCSISEQ_TEMPLATE {
162562306a36Sopenharmony_ci		size		1
162662306a36Sopenharmony_ci		field	ENSELO		0x40
162762306a36Sopenharmony_ci		field	ENSELI		0x20
162862306a36Sopenharmony_ci		field	ENRSELI		0x10
162962306a36Sopenharmony_ci		field	ENAUTOATNO	0x08
163062306a36Sopenharmony_ci		field	ENAUTOATNI	0x04
163162306a36Sopenharmony_ci		field	ENAUTOATNP	0x02
163262306a36Sopenharmony_ci		dont_generate_debug_code
163362306a36Sopenharmony_ci	}
163462306a36Sopenharmony_ci}
163562306a36Sopenharmony_ci
163662306a36Sopenharmony_ciscratch_ram {
163762306a36Sopenharmony_ci	address		0x056
163862306a36Sopenharmony_ci	size		4
163962306a36Sopenharmony_ci	/*
164062306a36Sopenharmony_ci	 * These scratch ram locations are initialized by the 274X BIOS.
164162306a36Sopenharmony_ci	 * We reuse them after capturing the BIOS settings during
164262306a36Sopenharmony_ci	 * initialization.
164362306a36Sopenharmony_ci	 */
164462306a36Sopenharmony_ci
164562306a36Sopenharmony_ci	/*
164662306a36Sopenharmony_ci	 * The initiator specified tag for this target mode transaction.
164762306a36Sopenharmony_ci	 */
164862306a36Sopenharmony_ci	HA_274_BIOSGLOBAL {
164962306a36Sopenharmony_ci		size	1
165062306a36Sopenharmony_ci		field	HA_274_EXTENDED_TRANS	0x01
165162306a36Sopenharmony_ci		alias	INITIATOR_TAG
165262306a36Sopenharmony_ci		count		1
165362306a36Sopenharmony_ci		dont_generate_debug_code
165462306a36Sopenharmony_ci	}
165562306a36Sopenharmony_ci
165662306a36Sopenharmony_ci	SEQ_FLAGS2 {
165762306a36Sopenharmony_ci		size	1
165862306a36Sopenharmony_ci		field	SCB_DMA			0x01
165962306a36Sopenharmony_ci		field	TARGET_MSG_PENDING	0x02
166062306a36Sopenharmony_ci		dont_generate_debug_code
166162306a36Sopenharmony_ci	}
166262306a36Sopenharmony_ci}
166362306a36Sopenharmony_ci
166462306a36Sopenharmony_ciscratch_ram {
166562306a36Sopenharmony_ci	address		0x05a
166662306a36Sopenharmony_ci	size		6
166762306a36Sopenharmony_ci	/*
166862306a36Sopenharmony_ci	 * These are reserved registers in the card's scratch ram on the 2742.
166962306a36Sopenharmony_ci	 * The EISA configuration chip is mapped here.  On Rev E. of the
167062306a36Sopenharmony_ci	 * aic7770, the sequencer can use this area for scratch, but the
167162306a36Sopenharmony_ci	 * host cannot directly access these registers.  On later chips, this
167262306a36Sopenharmony_ci	 * area can be read and written by both the host and the sequencer.
167362306a36Sopenharmony_ci	 * Even on later chips, many of these locations are initialized by
167462306a36Sopenharmony_ci	 * the BIOS.
167562306a36Sopenharmony_ci	 */
167662306a36Sopenharmony_ci	SCSICONF {
167762306a36Sopenharmony_ci		size		1
167862306a36Sopenharmony_ci		count		12
167962306a36Sopenharmony_ci		field	TERM_ENB	0x80
168062306a36Sopenharmony_ci		field	RESET_SCSI	0x40
168162306a36Sopenharmony_ci		field	ENSPCHK		0x20
168262306a36Sopenharmony_ci		mask	HSCSIID		0x07	/* our SCSI ID */
168362306a36Sopenharmony_ci		mask	HWSCSIID	0x0f	/* our SCSI ID if Wide Bus */
168462306a36Sopenharmony_ci		dont_generate_debug_code
168562306a36Sopenharmony_ci	}
168662306a36Sopenharmony_ci	INTDEF {
168762306a36Sopenharmony_ci		address		0x05c
168862306a36Sopenharmony_ci		size		1
168962306a36Sopenharmony_ci		count		1
169062306a36Sopenharmony_ci		field	EDGE_TRIG	0x80
169162306a36Sopenharmony_ci		mask	VECTOR		0x0f
169262306a36Sopenharmony_ci		dont_generate_debug_code
169362306a36Sopenharmony_ci	}
169462306a36Sopenharmony_ci	HOSTCONF {
169562306a36Sopenharmony_ci		address		0x05d
169662306a36Sopenharmony_ci		size		1
169762306a36Sopenharmony_ci		count		1
169862306a36Sopenharmony_ci		dont_generate_debug_code
169962306a36Sopenharmony_ci	}
170062306a36Sopenharmony_ci	HA_274_BIOSCTRL	{
170162306a36Sopenharmony_ci		address		0x05f
170262306a36Sopenharmony_ci		size		1
170362306a36Sopenharmony_ci		count		1
170462306a36Sopenharmony_ci		mask	BIOSMODE		0x30
170562306a36Sopenharmony_ci		mask	BIOSDISABLED		0x30	
170662306a36Sopenharmony_ci		field	CHANNEL_B_PRIMARY	0x08
170762306a36Sopenharmony_ci		dont_generate_debug_code
170862306a36Sopenharmony_ci	}
170962306a36Sopenharmony_ci}
171062306a36Sopenharmony_ci
171162306a36Sopenharmony_ciscratch_ram {
171262306a36Sopenharmony_ci	address		0x070
171362306a36Sopenharmony_ci	size		16
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_ci	/*
171662306a36Sopenharmony_ci	 * Per target SCSI offset values for Ultra2 controllers.
171762306a36Sopenharmony_ci	 */
171862306a36Sopenharmony_ci	TARG_OFFSET {
171962306a36Sopenharmony_ci		size		16
172062306a36Sopenharmony_ci		count		1
172162306a36Sopenharmony_ci		dont_generate_debug_code
172262306a36Sopenharmony_ci	}
172362306a36Sopenharmony_ci}
172462306a36Sopenharmony_ci
172562306a36Sopenharmony_ciconst TID_SHIFT		4
172662306a36Sopenharmony_ciconst SCB_LIST_NULL	0xff
172762306a36Sopenharmony_ciconst TARGET_CMD_CMPLT	0xfe
172862306a36Sopenharmony_ci
172962306a36Sopenharmony_ciconst CCSGADDR_MAX	0x80
173062306a36Sopenharmony_ciconst CCSGRAM_MAXSEGS	16
173162306a36Sopenharmony_ci
173262306a36Sopenharmony_ci/* WDTR Message values */
173362306a36Sopenharmony_ciconst BUS_8_BIT			0x00
173462306a36Sopenharmony_ciconst BUS_16_BIT		0x01
173562306a36Sopenharmony_ciconst BUS_32_BIT		0x02
173662306a36Sopenharmony_ci
173762306a36Sopenharmony_ci/* Offset maximums */
173862306a36Sopenharmony_ciconst MAX_OFFSET_8BIT		0x0f
173962306a36Sopenharmony_ciconst MAX_OFFSET_16BIT		0x08
174062306a36Sopenharmony_ciconst MAX_OFFSET_ULTRA2		0x7f
174162306a36Sopenharmony_ciconst MAX_OFFSET		0x7f
174262306a36Sopenharmony_ciconst HOST_MSG			0xff
174362306a36Sopenharmony_ci
174462306a36Sopenharmony_ci/* Target mode command processing constants */
174562306a36Sopenharmony_ciconst CMD_GROUP_CODE_SHIFT	0x05
174662306a36Sopenharmony_ci
174762306a36Sopenharmony_ciconst STATUS_BUSY		0x08
174862306a36Sopenharmony_ciconst STATUS_QUEUE_FULL	0x28
174962306a36Sopenharmony_ciconst TARGET_DATA_IN		1
175062306a36Sopenharmony_ci
175162306a36Sopenharmony_ci/*
175262306a36Sopenharmony_ci * Downloaded (kernel inserted) constants
175362306a36Sopenharmony_ci */
175462306a36Sopenharmony_ci/* Offsets into the SCBID array where different data is stored */
175562306a36Sopenharmony_ciconst QOUTFIFO_OFFSET download
175662306a36Sopenharmony_ciconst QINFIFO_OFFSET download
175762306a36Sopenharmony_ciconst CACHESIZE_MASK download
175862306a36Sopenharmony_ciconst INVERTED_CACHESIZE_MASK download
175962306a36Sopenharmony_ciconst SG_PREFETCH_CNT download
176062306a36Sopenharmony_ciconst SG_PREFETCH_ALIGN_MASK download
176162306a36Sopenharmony_ciconst SG_PREFETCH_ADDR_MASK download
1762