cachepc-linux

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

aic7xxx.reg (38136B)


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