cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

aic79xx.reg (73911B)


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