Home | History | Annotate | Line # | Download | only in aic7xxx
aic7xxx.reg revision 1.1.6.2
      1 /*	$NetBSD: aic7xxx.reg,v 1.1.6.2 2000/11/20 11:41:33 bouyer Exp $	*/
      2 
      3 /*
      4  * Aic7xxx register and scratch ram definitions.
      5  *
      6  * Copyright (c) 1994-2000 Justin Gibbs.
      7  * All rights reserved.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions, and the following disclaimer,
     14  *    without modification.
     15  * 2. The name of the author may not be used to endorse or promote products
     16  *    derived from this software without specific prior written permission.
     17  *
     18  * Alternatively, this software may be distributed under the terms of the
     19  * the GNU Public License ("GPL").
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     24  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
     25  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     31  * SUCH DAMAGE.
     32  *
     33  * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.reg,v 1.20 2000/02/09 21:24:59 gibbs Exp $
     34  */
     35 
     36 /*
     37  * This file is processed by the aic7xxx_asm utility for use in assembling
     38  * firmware for the aic7xxx family of SCSI host adapters as well as to generate
     39  * a C header file for use in the kernel portion of the Aic7xxx driver.
     40  *
     41  * All page numbers refer to the Adaptec AIC-7770 Data Book available from
     42  * Adaptec's Technical Documents Department 1-800-934-2766
     43  */
     44 
     45 /*
     46  * SCSI Sequence Control (p. 3-11).
     47  * Each bit, when set starts a specific SCSI sequence on the bus
     48  */
     49 register SCSISEQ {
     50 	address			0x000
     51 	access_mode RW
     52 	bit	TEMODE		0x80
     53 	bit	ENSELO		0x40
     54 	bit	ENSELI		0x20
     55 	bit	ENRSELI		0x10
     56 	bit	ENAUTOATNO	0x08
     57 	bit	ENAUTOATNI	0x04
     58 	bit	ENAUTOATNP	0x02
     59 	bit	SCSIRSTO	0x01
     60 }
     61 
     62 /*
     63  * SCSI Transfer Control 0 Register (pp. 3-13).
     64  * Controls the SCSI module data path.
     65  */
     66 register SXFRCTL0 {
     67 	address			0x001
     68 	access_mode RW
     69 	bit	DFON		0x80
     70 	bit	DFPEXP		0x40
     71 	bit	FAST20		0x20
     72 	bit	CLRSTCNT	0x10
     73 	bit	SPIOEN		0x08
     74 	bit	SCAMEN		0x04
     75 	bit	CLRCHN		0x02
     76 }
     77 
     78 /*
     79  * SCSI Transfer Control 1 Register (pp. 3-14,15).
     80  * Controls the SCSI module data path.
     81  */
     82 register SXFRCTL1 {
     83 	address			0x002
     84 	access_mode RW
     85 	bit	BITBUCKET	0x80
     86 	bit	SWRAPEN		0x40
     87 	bit	ENSPCHK		0x20
     88 	mask	STIMESEL	0x18
     89 	bit	ENSTIMER	0x04
     90 	bit	ACTNEGEN	0x02
     91 	bit	STPWEN		0x01	/* Powered Termination */
     92 }
     93 
     94 /*
     95  * SCSI Control Signal Read Register (p. 3-15).
     96  * Reads the actual state of the SCSI bus pins
     97  */
     98 register SCSISIGI {
     99 	address			0x003
    100 	access_mode RO
    101 	bit	CDI		0x80
    102 	bit	IOI		0x40
    103 	bit	MSGI		0x20
    104 	bit	ATNI		0x10
    105 	bit	SELI		0x08
    106 	bit	BSYI		0x04
    107 	bit	REQI		0x02
    108 	bit	ACKI		0x01
    109 /*
    110  * Possible phases in SCSISIGI
    111  */
    112 	mask	PHASE_MASK	CDI|IOI|MSGI
    113 	mask	P_DATAOUT	0x00
    114 	mask	P_DATAIN	IOI
    115 	mask	P_COMMAND	CDI
    116 	mask	P_MESGOUT	CDI|MSGI
    117 	mask	P_STATUS	CDI|IOI
    118 	mask	P_MESGIN	CDI|IOI|MSGI
    119 }
    120 
    121 /*
    122  * SCSI Control Signal Write Register (p. 3-16).
    123  * Writing to this register modifies the control signals on the bus.  Only
    124  * those signals that are allowed in the current mode (Initiator/Target) are
    125  * asserted.
    126  */
    127 register SCSISIGO {
    128 	address			0x003
    129 	access_mode WO
    130 	bit	CDO		0x80
    131 	bit	IOO		0x40
    132 	bit	MSGO		0x20
    133 	bit	ATNO		0x10
    134 	bit	SELO		0x08
    135 	bit	BSYO		0x04
    136 	bit	REQO		0x02
    137 	bit	ACKO		0x01
    138 /*
    139  * Possible phases to write into SCSISIG0
    140  */
    141 	mask	PHASE_MASK	CDI|IOI|MSGI
    142 	mask	P_DATAOUT	0x00
    143 	mask	P_DATAIN	IOI
    144 	mask	P_COMMAND	CDI
    145 	mask	P_MESGOUT	CDI|MSGI
    146 	mask	P_STATUS	CDI|IOI
    147 	mask	P_MESGIN	CDI|IOI|MSGI
    148 }
    149 
    150 /*
    151  * SCSI Rate Control (p. 3-17).
    152  * Contents of this register determine the Synchronous SCSI data transfer
    153  * rate and the maximum synchronous Req/Ack offset.  An offset of 0 in the
    154  * SOFS (3:0) bits disables synchronous data transfers.  Any offset value
    155  * greater than 0 enables synchronous transfers.
    156  */
    157 register SCSIRATE {
    158 	address			0x004
    159 	access_mode RW
    160 	bit	WIDEXFER	0x80		/* Wide transfer control */
    161 	bit	ENABLE_CRC	0x40		/* CRC for D-Phases */
    162 	bit	SINGLE_EDGE	0x10		/* Disable DT Transfers */
    163 	mask	SXFR		0x70		/* Sync transfer rate */
    164 	mask	SXFR_ULTRA2	0x0f		/* Sync transfer rate */
    165 	mask	SOFS		0x0f		/* Sync offset */
    166 }
    167 
    168 /*
    169  * SCSI ID (p. 3-18).
    170  * Contains the ID of the board and the current target on the
    171  * selected channel.
    172  */
    173 register SCSIID	{
    174 	address			0x005
    175 	access_mode RW
    176 	mask	TID		0xf0		/* Target ID mask */
    177 	mask	OID		0x0f		/* Our ID mask */
    178 	/*
    179 	 * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book)
    180 	 * The aic7890/91 allow an offset of up to 127 transfers in both wide
    181 	 * and narrow mode.
    182 	 */
    183 	alias	SCSIOFFSET
    184 	mask	SOFS_ULTRA2	0x7f		/* Sync offset U2 chips */
    185 }
    186 
    187 /*
    188  * SCSI Latched Data (p. 3-19).
    189  * Read/Write latches used to transfer data on the SCSI bus during
    190  * Automatic or Manual PIO mode.  SCSIDATH can be used for the
    191  * upper byte of a 16bit wide asynchronouse data phase transfer.
    192  */
    193 register SCSIDATL {
    194 	address			0x006
    195 	access_mode RW
    196 }
    197 
    198 register SCSIDATH {
    199 	address			0x007
    200 	access_mode RW
    201 }
    202 
    203 /*
    204  * SCSI Transfer Count (pp. 3-19,20)
    205  * These registers count down the number of bytes transferred
    206  * across the SCSI bus.  The counter is decremented only once
    207  * the data has been safely transferred.  SDONE in SSTAT0 is
    208  * set when STCNT goes to 0
    209  */
    210 register STCNT {
    211 	address			0x008
    212 	size	3
    213 	access_mode RW
    214 }
    215 
    216 /* ALT_MODE register on Ultra160 chips */
    217 register OPTIONMODE {
    218 	address			0x008
    219 	access_mode RW
    220 	bit	AUTORATEEN		0x80
    221 	bit	AUTOACKEN		0x40
    222 	bit	ATNMGMNTEN		0x20
    223 	bit	BUSFREEREV		0x10
    224 	bit	EXPPHASEDIS		0x08
    225 	bit	SCSIDATL_IMGEN		0x04
    226 	bit	AUTO_MSGOUT_DE		0x02
    227 	bit	DIS_MSGIN_DUALEDGE	0x01
    228 	mask	OPTIONMODE_DEFAULTS	AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE
    229 }
    230 
    231 /* ALT_MODE register on Ultra160 chips */
    232 register TARGCRCCNT {
    233 	address			0x00a
    234 	size	2
    235 	access_mode RW
    236 }
    237 
    238 /*
    239  * Clear SCSI Interrupt 0 (p. 3-20)
    240  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
    241  */
    242 register CLRSINT0 {
    243 	address			0x00b
    244 	access_mode WO
    245 	bit	CLRSELDO	0x40
    246 	bit	CLRSELDI	0x20
    247 	bit	CLRSELINGO	0x10
    248 	bit	CLRSWRAP	0x08
    249 	bit	CLRSPIORDY	0x02
    250 }
    251 
    252 /*
    253  * SCSI Status 0 (p. 3-21)
    254  * Contains one set of SCSI Interrupt codes
    255  * These are most likely of interest to the sequencer
    256  */
    257 register SSTAT0	{
    258 	address			0x00b
    259 	access_mode RO
    260 	bit	TARGET		0x80	/* Board acting as target */
    261 	bit	SELDO		0x40	/* Selection Done */
    262 	bit	SELDI		0x20	/* Board has been selected */
    263 	bit	SELINGO		0x10	/* Selection In Progress */
    264 	bit	SWRAP		0x08	/* 24bit counter wrap */
    265 	bit	IOERR		0x08	/* LVD Tranceiver mode changed */
    266 	bit	SDONE		0x04	/* STCNT = 0x000000 */
    267 	bit	SPIORDY		0x02	/* SCSI PIO Ready */
    268 	bit	DMADONE		0x01	/* DMA transfer completed */
    269 }
    270 
    271 /*
    272  * Clear SCSI Interrupt 1 (p. 3-23)
    273  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
    274  */
    275 register CLRSINT1 {
    276 	address			0x00c
    277 	access_mode WO
    278 	bit	CLRSELTIMEO	0x80
    279 	bit	CLRATNO		0x40
    280 	bit	CLRSCSIRSTI	0x20
    281 	bit	CLRBUSFREE	0x08
    282 	bit	CLRSCSIPERR	0x04
    283 	bit	CLRPHASECHG	0x02
    284 	bit	CLRREQINIT	0x01
    285 }
    286 
    287 /*
    288  * SCSI Status 1 (p. 3-24)
    289  */
    290 register SSTAT1	{
    291 	address			0x00c
    292 	access_mode RO
    293 	bit	SELTO		0x80
    294 	bit	ATNTARG 	0x40
    295 	bit	SCSIRSTI	0x20
    296 	bit	PHASEMIS	0x10
    297 	bit	BUSFREE		0x08
    298 	bit	SCSIPERR	0x04
    299 	bit	PHASECHG	0x02
    300 	bit	REQINIT		0x01
    301 }
    302 
    303 /*
    304  * SCSI Status 2 (pp. 3-25,26)
    305  */
    306 register SSTAT2 {
    307 	address			0x00d
    308 	access_mode RO
    309 	bit	OVERRUN		0x80
    310 	bit	EXP_ACTIVE	0x10	/* SCSI Expander Active */
    311 	mask	SFCNT		0x1f
    312 }
    313 
    314 /*
    315  * SCSI Status 3 (p. 3-26)
    316  */
    317 register SSTAT3 {
    318 	address			0x00e
    319 	access_mode RO
    320 	mask	SCSICNT		0xf0
    321 	mask	OFFCNT		0x0f
    322 }
    323 
    324 /*
    325  * SCSI ID for the aic7890/91 chips
    326  */
    327 register SCSIID_ULTRA2 {
    328 	address			0x00f
    329 	access_mode RW
    330 	mask	TID		0xf0		/* Target ID mask */
    331 	mask	OID		0x0f		/* Our ID mask */
    332 }
    333 
    334 /*
    335  * SCSI Interrupt Mode 1 (p. 3-28)
    336  * Setting any bit will enable the corresponding function
    337  * in SIMODE0 to interrupt via the IRQ pin.
    338  */
    339 register SIMODE0 {
    340 	address			0x010
    341 	access_mode RW
    342 	bit	ENSELDO		0x40
    343 	bit	ENSELDI		0x20
    344 	bit	ENSELINGO	0x10
    345 	bit	ENSWRAP		0x08
    346 	bit	ENIOERR		0x08	/* LVD Tranceiver mode changes */
    347 	bit	ENSDONE		0x04
    348 	bit	ENSPIORDY	0x02
    349 	bit	ENDMADONE	0x01
    350 }
    351 
    352 /*
    353  * SCSI Interrupt Mode 1 (pp. 3-28,29)
    354  * Setting any bit will enable the corresponding function
    355  * in SIMODE1 to interrupt via the IRQ pin.
    356  */
    357 register SIMODE1 {
    358 	address			0x011
    359 	access_mode RW
    360 	bit	ENSELTIMO	0x80
    361 	bit	ENATNTARG	0x40
    362 	bit	ENSCSIRST	0x20
    363 	bit	ENPHASEMIS	0x10
    364 	bit	ENBUSFREE	0x08
    365 	bit	ENSCSIPERR	0x04
    366 	bit	ENPHASECHG	0x02
    367 	bit	ENREQINIT	0x01
    368 }
    369 
    370 /*
    371  * SCSI Data Bus (High) (p. 3-29)
    372  * This register reads data on the SCSI Data bus directly.
    373  */
    374 register SCSIBUSL {
    375 	address			0x012
    376 	access_mode RO
    377 }
    378 
    379 register SCSIBUSH {
    380 	address			0x013
    381 	access_mode RO
    382 }
    383 
    384 /*
    385  * SCSI/Host Address (p. 3-30)
    386  * These registers hold the host address for the byte about to be
    387  * transferred on the SCSI bus.  They are counted up in the same
    388  * manner as STCNT is counted down.  SHADDR should always be used
    389  * to determine the address of the last byte transferred since HADDR
    390  * can be skewed by write ahead.
    391  */
    392 register SHADDR {
    393 	address			0x014
    394 	size	4
    395 	access_mode RO
    396 }
    397 
    398 /*
    399  * Selection Timeout Timer (p. 3-30)
    400  */
    401 register SELTIMER {
    402 	address			0x018
    403 	access_mode RW
    404 	bit	STAGE6		0x20
    405 	bit	STAGE5		0x10
    406 	bit	STAGE4		0x08
    407 	bit	STAGE3		0x04
    408 	bit	STAGE2		0x02
    409 	bit	STAGE1		0x01
    410 	alias	TARGIDIN
    411 }
    412 
    413 /*
    414  * Selection/Reselection ID (p. 3-31)
    415  * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
    416  * device did not set its own ID.
    417  */
    418 register SELID {
    419 	address			0x019
    420 	access_mode RW
    421 	mask	SELID_MASK	0xf0
    422 	bit	ONEBIT		0x08
    423 }
    424 
    425 register SCAMCTL {
    426 	address			0x01a
    427 	access_mode RW
    428 	bit	ENSCAMSELO	0x80
    429 	bit	CLRSCAMSELID	0x40
    430 	bit	ALTSTIM		0x20
    431 	bit	DFLTTID		0x10
    432 	mask	SCAMLVL		0x03
    433 }
    434 
    435 /*
    436  * Target Mode Selecting in ID bitmask (aic7890/91/96/97)
    437  */
    438 register TARGID {
    439 	address			0x01b
    440 	size			2
    441 	access_mode RW
    442 }
    443 
    444 /*
    445  * Serial Port I/O Cabability register (p. 4-95 aic7860 Data Book)
    446  * Indicates if external logic has been attached to the chip to
    447  * perform the tasks of accessing a serial eeprom, testing termination
    448  * strength, and performing cable detection.  On the aic7860, most of
    449  * these features are handled on chip, but on the aic7855 an attached
    450  * aic3800 does the grunt work.
    451  */
    452 register SPIOCAP {
    453 	address			0x01b
    454 	access_mode RW
    455 	bit	SOFT1		0x80
    456 	bit	SOFT0		0x40
    457 	bit	SOFTCMDEN	0x20
    458 	bit	HAS_BRDCTL	0x10	/* External Board control */
    459 	bit	SEEPROM		0x08	/* External serial eeprom logic */
    460 	bit	EEPROM		0x04	/* Writable external BIOS ROM */
    461 	bit	ROM		0x02	/* Logic for accessing external ROM */
    462 	bit	SSPIOCPS	0x01	/* Termination and cable detection */
    463 }
    464 
    465 register BRDCTL	{
    466 	address			0x01d
    467 	bit	BRDDAT7		0x80
    468 	bit	BRDDAT6		0x40
    469 	bit	BRDDAT5		0x20
    470 	bit	BRDSTB		0x10
    471 	bit	BRDCS		0x08
    472 	bit	BRDRW		0x04
    473 	bit	BRDCTL1		0x02
    474 	bit	BRDCTL0		0x01
    475 	/* 7890 Definitions */
    476 	bit	BRDDAT4		0x10
    477 	bit	BRDDAT3		0x08
    478 	bit	BRDDAT2		0x04
    479 	bit	BRDRW_ULTRA2	0x02
    480 	bit	BRDSTB_ULTRA2	0x01
    481 }
    482 
    483 /*
    484  * Serial EEPROM Control (p. 4-92 in 7870 Databook)
    485  * Controls the reading and writing of an external serial 1-bit
    486  * EEPROM Device.  In order to access the serial EEPROM, you must
    487  * first set the SEEMS bit that generates a request to the memory
    488  * port for access to the serial EEPROM device.  When the memory
    489  * port is not busy servicing another request, it reconfigures
    490  * to allow access to the serial EEPROM.  When this happens, SEERDY
    491  * gets set high to verify that the memory port access has been
    492  * granted.
    493  *
    494  * After successful arbitration for the memory port, the SEECS bit of
    495  * the SEECTL register is connected to the chip select.  The SEECK,
    496  * SEEDO, and SEEDI are connected to the clock, data out, and data in
    497  * lines respectively.  The SEERDY bit of SEECTL is useful in that it
    498  * gives us an 800 nsec timer.  After a write to the SEECTL register,
    499  * the SEERDY goes high 800 nsec later.  The one exception to this is
    500  * when we first request access to the memory port.  The SEERDY goes
    501  * high to signify that access has been granted and, for this case, has
    502  * no implied timing.
    503  *
    504  * See 93cx6.c for detailed information on the protocol necessary to
    505  * read the serial EEPROM.
    506  */
    507 register SEECTL {
    508 	address			0x01e
    509 	bit	EXTARBACK	0x80
    510 	bit	EXTARBREQ	0x40
    511 	bit	SEEMS		0x20
    512 	bit	SEERDY		0x10
    513 	bit	SEECS		0x08
    514 	bit	SEECK		0x04
    515 	bit	SEEDO		0x02
    516 	bit	SEEDI		0x01
    517 }
    518 /*
    519  * SCSI Block Control (p. 3-32)
    520  * Controls Bus type and channel selection.  In a twin channel configuration
    521  * addresses 0x00-0x1e are gated to the appropriate channel based on this
    522  * register.  SELWIDE allows for the coexistence of 8bit and 16bit devices
    523  * on a wide bus.
    524  */
    525 register SBLKCTL {
    526 	address			0x01f
    527 	access_mode RW
    528 	bit	DIAGLEDEN	0x80	/* Aic78X0 only */
    529 	bit	DIAGLEDON	0x40	/* Aic78X0 only */
    530 	bit	AUTOFLUSHDIS	0x20
    531 	bit	SELBUSB		0x08
    532 	bit	ENAB40		0x08	/* LVD transceiver active */
    533 	bit	ENAB20		0x04	/* SE/HVD transceiver active */
    534 	bit	SELWIDE		0x02
    535 	bit	XCVR		0x01	/* External transceiver active */
    536 }
    537 
    538 /*
    539  * Sequencer Control (p. 3-33)
    540  * Error detection mode and speed configuration
    541  */
    542 register SEQCTL {
    543 	address			0x060
    544 	access_mode RW
    545 	bit	PERRORDIS	0x80
    546 	bit	PAUSEDIS	0x40
    547 	bit	FAILDIS		0x20
    548 	bit	FASTMODE	0x10
    549 	bit	BRKADRINTEN	0x08
    550 	bit	STEP		0x04
    551 	bit	SEQRESET	0x02
    552 	bit	LOADRAM		0x01
    553 }
    554 
    555 /*
    556  * Sequencer RAM Data (p. 3-34)
    557  * Single byte window into the Scratch Ram area starting at the address
    558  * specified by SEQADDR0 and SEQADDR1.  To write a full word, simply write
    559  * four bytes in succession.  The SEQADDRs will increment after the most
    560  * significant byte is written
    561  */
    562 register SEQRAM {
    563 	address			0x061
    564 	access_mode RW
    565 }
    566 
    567 /*
    568  * Sequencer Address Registers (p. 3-35)
    569  * Only the first bit of SEQADDR1 holds addressing information
    570  */
    571 register SEQADDR0 {
    572 	address			0x062
    573 	access_mode RW
    574 }
    575 
    576 register SEQADDR1 {
    577 	address			0x063
    578 	access_mode RW
    579 	mask	SEQADDR1_MASK	0x01
    580 }
    581 
    582 /*
    583  * Accumulator
    584  * We cheat by passing arguments in the Accumulator up to the kernel driver
    585  */
    586 register ACCUM {
    587 	address			0x064
    588 	access_mode RW
    589 	accumulator
    590 }
    591 
    592 register SINDEX	{
    593 	address			0x065
    594 	access_mode RW
    595 	sindex
    596 }
    597 
    598 register DINDEX {
    599 	address			0x066
    600 	access_mode RW
    601 }
    602 
    603 register ALLONES {
    604 	address			0x069
    605 	access_mode RO
    606 	allones
    607 }
    608 
    609 register ALLZEROS {
    610 	address			0x06a
    611 	access_mode RO
    612 	allzeros
    613 }
    614 
    615 register NONE {
    616 	address			0x06a
    617 	access_mode WO
    618 	none
    619 }
    620 
    621 register FLAGS {
    622 	address			0x06b
    623 	access_mode RO
    624 	bit	ZERO		0x02
    625 	bit	CARRY		0x01
    626 }
    627 
    628 register SINDIR	{
    629 	address			0x06c
    630 	access_mode RO
    631 }
    632 
    633 register DINDIR	 {
    634 	address			0x06d
    635 	access_mode WO
    636 }
    637 
    638 register FUNCTION1 {
    639 	address			0x06e
    640 	access_mode RW
    641 }
    642 
    643 register STACK {
    644 	address			0x06f
    645 	access_mode RO
    646 }
    647 
    648 /*
    649  * Board Control (p. 3-43)
    650  */
    651 register BCTL {
    652 	address			0x084
    653 	access_mode RW
    654 	bit	ACE		0x08
    655 	bit	ENABLE		0x01
    656 }
    657 
    658 /*
    659  * On the aic78X0 chips, Board Control is replaced by the DSCommand
    660  * register (p. 4-64)
    661  */
    662 register DSCOMMAND0 {
    663 	address			0x084
    664 	access_mode RW
    665 	bit	CACHETHEN	0x80	/* Cache Threshold enable */
    666 	bit	DPARCKEN	0x40	/* Data Parity Check Enable */
    667 	bit	MPARCKEN	0x20	/* Memory Parity Check Enable */
    668 	bit	EXTREQLCK	0x10	/* External Request Lock */
    669 	/* aic7890/91/96/97 only */
    670 	bit	INTSCBRAMSEL	0x08	/* Internal SCB RAM Select */
    671 	bit	RAMPS		0x04	/* External SCB RAM Present */
    672 	bit	USCBSIZE32	0x02	/* Use 32byte SCB Page Size */
    673 	bit	CIOPARCKEN	0x01	/* Internal bus parity error enable */
    674 }
    675 
    676 /*
    677  * Bus On/Off Time (p. 3-44)
    678  */
    679 register BUSTIME {
    680 	address			0x085
    681 	access_mode RW
    682 	mask	BOFF		0xf0
    683 	mask	BON		0x0f
    684 }
    685 
    686 /*
    687  * Bus Speed (p. 3-45) aic7770 only
    688  */
    689 register BUSSPD {
    690 	address			0x086
    691 	access_mode RW
    692 	mask	DFTHRSH		0xc0
    693 	mask	STBOFF		0x38
    694 	mask	STBON		0x07
    695 	mask	DFTHRSH_100	0xc0
    696 }
    697 
    698 /* aic7850/55/60/70/80/95 only */
    699 register DSPCISTATUS {
    700 	address			0x086
    701 	mask	DFTHRSH_100	0xc0
    702 }
    703 
    704 /* aic7890/91/96/97 only */
    705 register HS_MAILBOX {
    706 	address			0x086
    707 	mask	HOST_MAILBOX	0xF0
    708 	mask	SEQ_MAILBOX	0x0F
    709 }
    710 
    711 const	HOST_MAILBOX_SHIFT	4
    712 const	SEQ_MAILBOX_SHIFT	0
    713 
    714 /*
    715  * Host Control (p. 3-47) R/W
    716  * Overall host control of the device.
    717  */
    718 register HCNTRL {
    719 	address			0x087
    720 	access_mode RW
    721 	bit	POWRDN		0x40
    722 	bit	SWINT		0x10
    723 	bit	IRQMS		0x08
    724 	bit	PAUSE		0x04
    725 	bit	INTEN		0x02
    726 	bit	CHIPRST		0x01
    727 	bit	CHIPRSTACK	0x01
    728 }
    729 
    730 /*
    731  * Host Address (p. 3-48)
    732  * This register contains the address of the byte about
    733  * to be transferred across the host bus.
    734  */
    735 register HADDR {
    736 	address			0x088
    737 	size	4
    738 	access_mode RW
    739 }
    740 
    741 register HCNT {
    742 	address			0x08c
    743 	size	3
    744 	access_mode RW
    745 }
    746 
    747 /*
    748  * SCB Pointer (p. 3-49)
    749  * Gate one of the four SCBs into the SCBARRAY window.
    750  */
    751 register SCBPTR {
    752 	address			0x090
    753 	access_mode RW
    754 }
    755 
    756 /*
    757  * Interrupt Status (p. 3-50)
    758  * Status for system interrupts
    759  */
    760 register INTSTAT {
    761 	address			0x091
    762 	access_mode RW
    763 	bit	BRKADRINT 0x08
    764 	bit	SCSIINT	  0x04
    765 	bit	CMDCMPLT  0x02
    766 	bit	SEQINT    0x01
    767 	mask	BAD_PHASE	SEQINT		/* unknown scsi bus phase */
    768 	mask	SEND_REJECT	0x10|SEQINT	/* sending a message reject */
    769 	mask	NO_IDENT	0x20|SEQINT	/* no IDENTIFY after reconnect*/
    770 	mask	NO_MATCH	0x30|SEQINT	/* no cmd match for reconnect */
    771 	mask	UPDATE_TMSG_REQ	0x60|SEQINT	/* Update TMSG_REQ values */
    772 	mask	BAD_STATUS	0x70|SEQINT	/* Bad status from target */
    773 	mask	RESIDUAL	0x80|SEQINT	/* Residual byte count != 0 */
    774 	mask	TRACE_POINT	0x90|SEQINT
    775 	mask	HOST_MSG_LOOP	0xa0|SEQINT	/*
    776 						 * The bus is ready for the
    777 						 * host to perform another
    778 						 * message transaction.  This
    779 						 * mechanism is used for things
    780 						 * like sync/wide negotiation
    781 						 * that require a kernel based
    782 						 * message state engine.
    783 						 */
    784 	mask	PERR_DETECTED	0xb0|SEQINT	/*
    785 						 * Either the phase_lock
    786 						 * or inb_next routine has
    787 						 * noticed a parity error.
    788 						 */
    789 	mask	TRACEPOINT	0xd0|SEQINT
    790 	mask	MSGIN_PHASEMIS	0xe0|SEQINT	/*
    791 						 * Target changed phase on us
    792 						 * when we were expecting
    793 						 * another msgin byte.
    794 						 */
    795 	mask	DATA_OVERRUN	0xf0|SEQINT	/*
    796 						 * Target attempted to write
    797 						 * beyond the bounds of its
    798 						 * command.
    799 						 */
    800 
    801 	mask	SEQINT_MASK	0xf0|SEQINT	/* SEQINT Status Codes */
    802 	mask	INT_PEND  (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT)
    803 }
    804 
    805 /*
    806  * Hard Error (p. 3-53)
    807  * Reporting of catastrophic errors.  You usually cannot recover from
    808  * these without a full board reset.
    809  */
    810 register ERROR {
    811 	address			0x092
    812 	access_mode RO
    813 	bit	CIOPARERR	0x80	/* Ultra2 only */
    814 	bit	PCIERRSTAT	0x40	/* PCI only */
    815 	bit	MPARERR		0x20	/* PCI only */
    816 	bit	DPARERR		0x10	/* PCI only */
    817 	bit	SQPARERR	0x08
    818 	bit	ILLOPCODE	0x04
    819 	bit	ILLSADDR	0x02
    820 	bit	ILLHADDR	0x01
    821 }
    822 
    823 /*
    824  * Clear Interrupt Status (p. 3-52)
    825  */
    826 register CLRINT {
    827 	address			0x092
    828 	access_mode WO
    829 	bit	CLRPARERR	0x10	/* PCI only */
    830 	bit	CLRBRKADRINT	0x08
    831 	bit	CLRSCSIINT      0x04
    832 	bit	CLRCMDINT 	0x02
    833 	bit	CLRSEQINT 	0x01
    834 }
    835 
    836 register DFCNTRL {
    837 	address			0x093
    838 	access_mode RW
    839 	bit	PRELOADEN	0x80	/* aic7890 only */
    840 	bit	WIDEODD		0x40
    841 	bit	SCSIEN		0x20
    842 	bit	SDMAEN		0x10
    843 	bit	SDMAENACK	0x10
    844 	bit	HDMAEN		0x08
    845 	bit	HDMAENACK	0x08
    846 	bit	DIRECTION	0x04
    847 	bit	FIFOFLUSH	0x02
    848 	bit	FIFORESET	0x01
    849 }
    850 
    851 register DFSTATUS {
    852 	address			0x094
    853 	access_mode RO
    854 	bit	PRELOAD_AVAIL	0x80
    855 	bit	DWORDEMP	0x20
    856 	bit	MREQPEND	0x10
    857 	bit	HDONE		0x08
    858 	bit	DFTHRESH	0x04
    859 	bit	FIFOFULL	0x02
    860 	bit	FIFOEMP		0x01
    861 }
    862 
    863 register DFWADDR {
    864 	address			0x95
    865 	access_mode RW
    866 }
    867 
    868 register DFRADDR {
    869 	address			0x97
    870 	access_mode RW
    871 }
    872 
    873 register DFDAT {
    874 	address			0x099
    875 	access_mode RW
    876 }
    877 
    878 /*
    879  * SCB Auto Increment (p. 3-59)
    880  * Byte offset into the SCB Array and an optional bit to allow auto
    881  * incrementing of the address during download and upload operations
    882  */
    883 register SCBCNT {
    884 	address			0x09a
    885 	access_mode RW
    886 	bit	SCBAUTO		0x80
    887 	mask	SCBCNT_MASK	0x1f
    888 }
    889 
    890 /*
    891  * Queue In FIFO (p. 3-60)
    892  * Input queue for queued SCBs (commands that the seqencer has yet to start)
    893  */
    894 register QINFIFO {
    895 	address			0x09b
    896 	access_mode RW
    897 }
    898 
    899 /*
    900  * Queue In Count (p. 3-60)
    901  * Number of queued SCBs
    902  */
    903 register QINCNT	{
    904 	address			0x09c
    905 	access_mode RO
    906 }
    907 
    908 /*
    909  * Queue Out FIFO (p. 3-61)
    910  * Queue of SCBs that have completed and await the host
    911  */
    912 register QOUTFIFO {
    913 	address			0x09d
    914 	access_mode WO
    915 }
    916 
    917 register CRCCONTROL1 {
    918 	address			0x09d
    919 	access_mode RW
    920 	bit	CRCONSEEN		0x80
    921 	bit	CRCVALCHKEN		0x40
    922 	bit	CRCENDCHKEN		0x20
    923 	bit	CRCREQCHKEN		0x10
    924 	bit	TARGCRCENDEN		0x08
    925 	bit	TARGCRCCNTEN		0x04
    926 }
    927 
    928 
    929 /*
    930  * Queue Out Count (p. 3-61)
    931  * Number of queued SCBs in the Out FIFO
    932  */
    933 register QOUTCNT {
    934 	address			0x09e
    935 	access_mode RO
    936 }
    937 
    938 register SCSIPHASE {
    939 	address			0x09e
    940 	access_mode RO
    941 	bit	STATUS_PHASE	0x20
    942 	bit	COMMAND_PHASE	0x10
    943 	bit	MSG_IN_PHASE	0x08
    944 	bit	MSG_OUT_PHASE	0x04
    945 	bit	DATA_IN_PHASE	0x02
    946 	bit	DATA_OUT_PHASE	0x01
    947 }
    948 
    949 /*
    950  * Special Function
    951  */
    952 register SFUNCT {
    953 	address			0x09f
    954 	access_mode RW
    955 	bit	ALT_MODE	0x80
    956 }
    957 
    958 /*
    959  * SCB Definition (p. 5-4)
    960  */
    961 scb {
    962 	address			0x0a0
    963 	SCB_CONTROL {
    964 		size	1
    965 		bit	TARGET_SCB	0x80
    966 		bit	DISCENB         0x40
    967 		bit	TAG_ENB		0x20
    968 		bit	MK_MESSAGE      0x10
    969 		bit	ULTRAENB	0x08
    970 		bit	DISCONNECTED	0x04
    971 		mask	SCB_TAG_TYPE	0x03
    972 	}
    973 	SCB_TCL {
    974 		size	1
    975 		bit	SELBUSB		0x08
    976 		mask	TID		0xf0
    977 		mask	LID		0x07
    978 	}
    979 	SCB_TARGET_STATUS {
    980 		size	1
    981 	}
    982 	SCB_SGCOUNT {
    983 		size	1
    984 	}
    985 	SCB_SGPTR {
    986 		size	4
    987 	}
    988 	SCB_RESID_SGCNT {
    989 		size	1
    990 	}
    991 	SCB_RESID_DCNT	{
    992 		size	3
    993 	}
    994 	SCB_DATAPTR {
    995 		size	4
    996 	}
    997 	SCB_DATACNT {
    998 		/*
    999 		 * Really only 3 bytes, but padded to make
   1000 		 * the kernel's job easier.
   1001 		 */
   1002 		size	4
   1003 	}
   1004 	SCB_CMDPTR {
   1005 		alias	SCB_TARGET_PHASES
   1006 		bit	TARGET_DATA_IN	0x1	/* In the second byte */
   1007 		size	4
   1008 	}
   1009 	SCB_CMDLEN {
   1010 		alias	SCB_INITIATOR_TAG
   1011 		size	1
   1012 	}
   1013 	SCB_TAG {
   1014 		size	1
   1015 	}
   1016 	SCB_NEXT {
   1017 		size	1
   1018 	}
   1019 	SCB_SCSIRATE {
   1020 		size	1
   1021 	}
   1022 	SCB_SCSIOFFSET {
   1023 		size	1
   1024 	}
   1025 	SCB_SPARE	{
   1026 		size	3
   1027 	}
   1028 	SCB_CMDSTORE	{
   1029 		size	16
   1030 	}
   1031 	SCB_CMDSTORE_BUSADDR {
   1032 		size	4
   1033 	}
   1034 	SCB_64BYTE_SPARE {
   1035 		size	12
   1036 	}
   1037 }
   1038 
   1039 const	SCB_32BYTE_SIZE	28
   1040 const	SCB_64BYTE_SIZE	48
   1041 
   1042 const	SG_SIZEOF	0x08		/* sizeof(struct ahc_dma) */
   1043 
   1044 /* --------------------- AHA-2840-only definitions -------------------- */
   1045 
   1046 register SEECTL_2840 {
   1047 	address			0x0c0
   1048 	access_mode RW
   1049 	bit	CS_2840		0x04
   1050 	bit	CK_2840		0x02
   1051 	bit	DO_2840		0x01
   1052 }
   1053 
   1054 register STATUS_2840 {
   1055 	address			0x0c1
   1056 	access_mode RW
   1057 	bit	EEPROM_TF	0x80
   1058 	mask	BIOS_SEL	0x60
   1059 	mask	ADSEL		0x1e
   1060 	bit	DI_2840		0x01
   1061 }
   1062 
   1063 /* --------------------- AIC-7870-only definitions -------------------- */
   1064 
   1065 register CCHADDR {
   1066 	address			0x0E0
   1067 	size 8
   1068 }
   1069 
   1070 register CCHCNT {
   1071 	address			0x0E8
   1072 }
   1073 
   1074 register CCSGRAM {
   1075 	address			0x0E9
   1076 }
   1077 
   1078 register CCSGADDR {
   1079 	address			0x0EA
   1080 }
   1081 
   1082 register CCSGCTL {
   1083 	address			0x0EB
   1084 	bit	CCSGDONE	0x80
   1085 	bit	CCSGEN		0x08
   1086 	bit	FLAG		0x02
   1087 	bit	CCSGRESET	0x01
   1088 }
   1089 
   1090 register CCSCBCNT {
   1091 	address			0xEF
   1092 }
   1093 
   1094 register CCSCBCTL {
   1095 	address			0x0EE
   1096 	bit	CCSCBDONE	0x80
   1097 	bit	ARRDONE		0x40	/* SCB Array prefetch done */
   1098 	bit	CCARREN		0x10
   1099 	bit	CCSCBEN		0x08
   1100 	bit	CCSCBDIR	0x04
   1101 	bit	CCSCBRESET	0x01
   1102 }
   1103 
   1104 register CCSCBADDR {
   1105 	address			0x0ED
   1106 }
   1107 
   1108 register CCSCBRAM {
   1109 	address			0xEC
   1110 }
   1111 
   1112 /*
   1113  * SCB bank address (7895/7896/97 only)
   1114  */
   1115 register SCBBADDR {
   1116 	address			0x0F0
   1117 	access_mode RW
   1118 }
   1119 
   1120 register CCSCBPTR {
   1121 	address			0x0F1
   1122 }
   1123 
   1124 register HNSCB_QOFF {
   1125 	address			0x0F4
   1126 }
   1127 
   1128 register SNSCB_QOFF {
   1129 	address			0x0F6
   1130 }
   1131 
   1132 register SDSCB_QOFF {
   1133 	address			0x0F8
   1134 }
   1135 
   1136 register QOFF_CTLSTA {
   1137 	address			0x0FA
   1138 	bit	SCB_AVAIL	0x40
   1139 	bit	SNSCB_ROLLOVER	0x20
   1140 	bit	SDSCB_ROLLOVER	0x10
   1141 	mask	SCB_QSIZE	0x07
   1142 	mask	SCB_QSIZE_256	0x06
   1143 }
   1144 
   1145 register DFF_THRSH {
   1146 	address			0x0FB
   1147 	mask	WR_DFTHRSH	0x70
   1148 	mask	RD_DFTHRSH	0x07
   1149 	mask	RD_DFTHRSH_MIN	0x00
   1150 	mask	RD_DFTHRSH_25	0x01
   1151 	mask	RD_DFTHRSH_50	0x02
   1152 	mask	RD_DFTHRSH_63	0x03
   1153 	mask	RD_DFTHRSH_75	0x04
   1154 	mask	RD_DFTHRSH_85	0x05
   1155 	mask	RD_DFTHRSH_90	0x06
   1156 	mask	RD_DFTHRSH_MAX	0x07
   1157 	mask	WR_DFTHRSH_MIN	0x00
   1158 	mask	WR_DFTHRSH_25	0x10
   1159 	mask	WR_DFTHRSH_50	0x20
   1160 	mask	WR_DFTHRSH_63	0x30
   1161 	mask	WR_DFTHRSH_75	0x40
   1162 	mask	WR_DFTHRSH_85	0x50
   1163 	mask	WR_DFTHRSH_90	0x60
   1164 	mask	WR_DFTHRSH_MAX	0x70
   1165 }
   1166 
   1167 register SG_CACHEPTR {
   1168 	access_mode RW
   1169 	address			0x0fc
   1170 	mask	SG_USER_DATA	0xfc
   1171 	bit	LAST_SEG	0x02
   1172 	bit	LAST_SEG_DONE	0x01
   1173 }
   1174 
   1175 /* ---------------------- Scratch RAM Offsets ------------------------- */
   1176 /* These offsets are either to values that are initialized by the board's
   1177  * BIOS or are specified by the sequencer code.
   1178  *
   1179  * The host adapter card (at least the BIOS) uses 20-2f for SCSI
   1180  * device information, 32-33 and 5a-5f as well. As it turns out, the
   1181  * BIOS trashes 20-2f, writing the synchronous negotiation results
   1182  * on top of the BIOS values, so we re-use those for our per-target
   1183  * scratchspace (actually a value that can be copied directly into
   1184  * SCSIRATE).  The kernel driver will enable synchronous negotiation
   1185  * for all targets that have a value other than 0 in the lower four
   1186  * bits of the target scratch space.  This should work regardless of
   1187  * whether the bios has been installed.
   1188  */
   1189 
   1190 scratch_ram {
   1191 	address			0x020
   1192 
   1193 	/*
   1194 	 * 1 byte per target starting at this address for configuration values
   1195 	 */
   1196 	TARG_SCSIRATE {
   1197 		alias		CMDSIZE_TABLE
   1198 		size		16
   1199 	}
   1200 	/*
   1201 	 * Bit vector of targets that have ULTRA enabled.
   1202 	 */
   1203 	ULTRA_ENB {
   1204 		size		2
   1205 	}
   1206 	/*
   1207 	 * Bit vector of targets that have disconnection disabled.
   1208 	 */
   1209 	DISC_DSB {
   1210 		size		2
   1211 	}
   1212 	/*
   1213 	 * Single byte buffer used to designate the type or message
   1214 	 * to send to a target.
   1215 	 */
   1216 	MSG_OUT {
   1217 		size		1
   1218 	}
   1219 	/* Parameters for DMA Logic */
   1220 	DMAPARAMS {
   1221 		size		1
   1222 		bit	PRELOADEN	0x80
   1223 		bit	WIDEODD		0x40
   1224 		bit	SCSIEN		0x20
   1225 		bit	SDMAEN		0x10
   1226 		bit	SDMAENACK	0x10
   1227 		bit	HDMAEN		0x08
   1228 		bit	HDMAENACK	0x08
   1229 		bit	DIRECTION	0x04
   1230 		bit	FIFOFLUSH	0x02
   1231 		bit	FIFORESET	0x01
   1232 	}
   1233 	SEQ_FLAGS {
   1234 		size		1
   1235 		bit	IDENTIFY_SEEN		0x80
   1236 		bit	SCBPTR_VALID		0x40
   1237 		bit	DPHASE			0x20
   1238 		/* Target flags */
   1239 		bit	TARG_CMD_PENDING	0x10
   1240 		bit	CMDPHASE_PENDING	0x08
   1241 		bit	DPHASE_PENDING		0x04
   1242 		bit	SPHASE_PENDING		0x02
   1243 		bit	NO_DISCONNECT		0x01
   1244 	}
   1245 	/*
   1246 	 * Temporary storage for the
   1247 	 * target/channel/lun of a
   1248 	 * reconnecting target
   1249 	 */
   1250 	SAVED_TCL {
   1251 		size		1
   1252 	}
   1253 	/* Working value of the number of SG segments left */
   1254 	SG_COUNT {
   1255 		size		1
   1256 	}
   1257 	/* Working value of SG pointer */
   1258 	SG_NEXT	{
   1259 		size		4
   1260 	}
   1261 	/*
   1262 	 * The last bus phase as seen by the sequencer.
   1263 	 */
   1264 	LASTPHASE {
   1265 		size		1
   1266 		bit	CDI		0x80
   1267 		bit	IOI		0x40
   1268 		bit	MSGI		0x20
   1269 		mask	PHASE_MASK	CDI|IOI|MSGI
   1270 		mask	P_DATAOUT	0x00
   1271 		mask	P_DATAIN	IOI
   1272 		mask	P_COMMAND	CDI
   1273 		mask	P_MESGOUT	CDI|MSGI
   1274 		mask	P_STATUS	CDI|IOI
   1275 		mask	P_MESGIN	CDI|IOI|MSGI
   1276 		mask	P_BUSFREE	0x01
   1277 	}
   1278 	/*
   1279 	 * head of list of SCBs awaiting
   1280 	 * selection
   1281 	 */
   1282 	WAITING_SCBH {
   1283 		size		1
   1284 	}
   1285 	/*
   1286 	 * head of list of SCBs that are
   1287 	 * disconnected.  Used for SCB
   1288 	 * paging.
   1289 	 */
   1290 	DISCONNECTED_SCBH {
   1291 		size		1
   1292 	}
   1293 	/*
   1294 	 * head of list of SCBs that are
   1295 	 * not in use.  Used for SCB paging.
   1296 	 */
   1297 	FREE_SCBH {
   1298 		size		1
   1299 	}
   1300 	/*
   1301 	 * Address of the hardware scb array in the host.
   1302 	 */
   1303 	HSCB_ADDR {
   1304 		size		4
   1305 	}
   1306 	/*
   1307 	 * Address of the 256 byte array storing the SCBID of outstanding
   1308 	 * untagged SCBs indexed by TCL.
   1309 	 */
   1310 	SCBID_ADDR {
   1311 		size		4
   1312 	}
   1313 	/*
   1314 	 * Address of the array of command descriptors used to store
   1315 	 * information about incoming selections.
   1316 	 */
   1317 	TMODE_CMDADDR {
   1318 		size		4
   1319 	}
   1320 	KERNEL_QINPOS {
   1321 		size		1
   1322 	}
   1323 	QINPOS {
   1324 		size		1
   1325 	}
   1326 	QOUTPOS {
   1327 		size		1
   1328 	}
   1329 	/*
   1330 	 * Kernel and sequencer offsets into the queue of
   1331 	 * incoming target mode command descriptors.  The
   1332 	 * queue is full when the KERNEL_TQINPOS == TQINPOS.
   1333 	 */
   1334 	KERNEL_TQINPOS {
   1335 		size		1
   1336 	}
   1337 	TQINPOS {
   1338 		size		1
   1339 	}
   1340 	ARG_1 {
   1341 		size		1
   1342 		mask	SEND_MSG		0x80
   1343 		mask	SEND_SENSE		0x40
   1344 		mask	SEND_REJ		0x20
   1345 		mask	MSGOUT_PHASEMIS		0x10
   1346 		mask	EXIT_MSG_LOOP		0x08
   1347 		mask	CONT_MSG_LOOP		0x04
   1348 		mask	CONT_TARG_SESSION	0x02
   1349 		alias	RETURN_1
   1350 	}
   1351 	ARG_2 {
   1352 		size		1
   1353 		alias	RETURN_2
   1354 	}
   1355 
   1356 	/*
   1357 	 * Snapshot of MSG_OUT taken after each message is sent.
   1358 	 */
   1359 	LAST_MSG {
   1360 		size		1
   1361 	}
   1362 
   1363 	/*
   1364 	 * Number of times we have filled the CCSGRAM with prefetched
   1365 	 * SG elements.
   1366 	 */
   1367 	PREFETCH_CNT {
   1368 		size		1
   1369 	}
   1370 
   1371 	/*
   1372 	 * Interrupt kernel for a message to this target on
   1373 	 * the next transaction.  This is usually used for
   1374 	 * negotiation requests.
   1375 	 */
   1376 	TARGET_MSG_REQUEST {
   1377 		size		2
   1378 	}
   1379 
   1380 	/*
   1381 	 * Sequences the kernel driver has okayed for us.  This allows
   1382 	 * the driver to do things like prevent initiator or target
   1383 	 * operations.
   1384 	 */
   1385 	SCSISEQ_TEMPLATE {
   1386 		size		1
   1387 		bit	ENSELO		0x40
   1388 		bit	ENSELI		0x20
   1389 		bit	ENRSELI		0x10
   1390 		bit	ENAUTOATNO	0x08
   1391 		bit	ENAUTOATNI	0x04
   1392 		bit	ENAUTOATNP	0x02
   1393 	}
   1394 
   1395 	/*
   1396 	 * Track whether the transfer byte count for
   1397 	 * the current data phase is odd.
   1398 	 */
   1399 	DATA_COUNT_ODD {
   1400 		size		1
   1401 	}
   1402 
   1403 	/*
   1404 	 * The initiator specified tag for this target mode transaction.
   1405 	 */
   1406 	INITIATOR_TAG {
   1407 		size		1
   1408 	}
   1409 
   1410 	/*
   1411 	 * These are reserved registers in the card's scratch ram.  Some of
   1412 	 * the values are specified in the AHA2742 technical reference manual
   1413 	 * and are initialized by the BIOS at boot time.
   1414 	 */
   1415 	SCSICONF {
   1416 		address		0x05a
   1417 		size		1
   1418 		bit	TERM_ENB	0x80
   1419 		bit	RESET_SCSI	0x40
   1420 		bit	ENSPCHK		0x20
   1421 		mask	HSCSIID		0x07	/* our SCSI ID */
   1422 		mask	HWSCSIID	0x0f	/* our SCSI ID if Wide Bus */
   1423 	}
   1424 	HOSTCONF {
   1425 		address		0x05d
   1426 		size		1
   1427 	}
   1428 	HA_274_BIOSCTRL	{
   1429 		address		0x05f
   1430 		size		1
   1431 		mask	BIOSMODE		0x30
   1432 		mask	BIOSDISABLED		0x30
   1433 		bit	CHANNEL_B_PRIMARY	0x08
   1434 	}
   1435 	/*
   1436 	 * Per target SCSI offset values for Ultra2 controllers.
   1437 	 */
   1438 	TARG_OFFSET {
   1439 		address		0x070
   1440 		size		16
   1441 	}
   1442 }
   1443 
   1444 const SCB_LIST_NULL	0xff
   1445 const TARGET_CMD_CMPLT	0xfe
   1446 
   1447 const CCSGADDR_MAX	0x80
   1448 const CCSGRAM_MAXSEGS	16
   1449 
   1450 /* Offsets into the SCBID array where different data is stored */
   1451 const QOUTFIFO_OFFSET		0
   1452 const QINFIFO_OFFSET		1
   1453 const UNTAGGEDSCB_OFFSET	2
   1454 
   1455 /* WDTR Message values */
   1456 const BUS_8_BIT			0x00
   1457 const BUS_16_BIT		0x01
   1458 const BUS_32_BIT		0x02
   1459 
   1460 /* Offset maximums */
   1461 const MAX_OFFSET_8BIT		0x0f
   1462 const MAX_OFFSET_16BIT		0x08
   1463 const MAX_OFFSET_ULTRA2		0x7f
   1464 const HOST_MSG			0xff
   1465 
   1466 /* Target mode command processing constants */
   1467 const CMD_GROUP_CODE_SHIFT	0x05
   1468 
   1469 const TCL_TARGET_SHIFT		4
   1470 /* The update interval must be a power of 2 */
   1471 const TQINFIFO_UPDATE_CNT	32
   1472 
   1473 const STATUS_BUSY		0x08
   1474 const STATUS_QUEUE_FULL		0x28
   1475 
   1476 /*
   1477  * Downloaded (kernel inserted) constants
   1478  */
   1479 
   1480 /*
   1481  * Number of command descriptors in the command descriptor array.
   1482  * No longer used, but left here as an example for how downloaded
   1483  * constantants can be defined.
   1484 const TMODE_NUMCMDS	download
   1485  */
   1486