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