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