Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  aic7xxx.reg   Sprache: unbekannt

 
/*
 * Aic7xxx register and scratch ram definitions.
 *
 * Copyright (c) 1994-2001 Justin T. Gibbs.
 * Copyright (c) 2000-2001 Adaptec Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * $FreeBSD$
 */
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $"

/*
 * This file is processed by the aic7xxx_asm utility for use in assembling
 * firmware for the aic7xxx family of SCSI host adapters as well as to generate
 * a C header file for use in the kernel portion of the Aic7xxx driver.
 *
 * All page numbers refer to the Adaptec AIC-7770 Data Book available from
 * Adaptec's Technical Documents Department 1-800-934-2766
 */

/*
 * Registers marked "dont_generate_debug_code" are not (yet) referenced
 * from the driver code, and this keyword inhibit generation
 * of debug code for them.
 *
 * REG_PRETTY_PRINT config will complain if dont_generate_debug_code
 * is added to the register which is referenced in the driver.
 * Unreferenced register with no dont_generate_debug_code will result
 * in dead code. No warning is issued.
 */

/*
 * SCSI Sequence Control (p. 3-11).
 * Each bit, when set starts a specific SCSI sequence on the bus
 */
register SCSISEQ {
 address   0x000
 access_mode RW
 field TEMODE  0x80
 field ENSELO  0x40
 field ENSELI  0x20
 field ENRSELI  0x10
 field ENAUTOATNO 0x08
 field ENAUTOATNI 0x04
 field ENAUTOATNP 0x02
 field SCSIRSTO 0x01
}

/*
 * SCSI Transfer Control 0 Register (pp. 3-13).
 * Controls the SCSI module data path.
 */
register SXFRCTL0 {
 address   0x001
 access_mode RW
 field DFON  0x80
 field DFPEXP  0x40
 field FAST20  0x20
 field CLRSTCNT 0x10
 field SPIOEN  0x08
 field SCAMEN  0x04
 field CLRCHN  0x02
}

/*
 * SCSI Transfer Control 1 Register (pp. 3-14,15).
 * Controls the SCSI module data path.
 */
register SXFRCTL1 {
 address   0x002
 access_mode RW
 field BITBUCKET 0x80
 field SWRAPEN  0x40
 field ENSPCHK  0x20
 mask STIMESEL 0x18
 field ENSTIMER 0x04
 field ACTNEGEN 0x02
 field STPWEN  0x01 /* Powered Termination */
 dont_generate_debug_code
}

/*
 * SCSI Control Signal Read Register (p. 3-15).
 * Reads the actual state of the SCSI bus pins
 */
register SCSISIGI {
 address   0x003
 access_mode RO
 field CDI  0x80
 field IOI  0x40
 field MSGI  0x20
 field ATNI  0x10
 field SELI  0x08
 field BSYI  0x04
 field REQI  0x02
 field ACKI  0x01
/*
 * Possible phases in SCSISIGI
 */
 mask PHASE_MASK CDI|IOI|MSGI
 mask P_DATAOUT 0x00
 mask P_DATAIN IOI
 mask P_DATAOUT_DT P_DATAOUT|MSGI
 mask P_DATAIN_DT P_DATAIN|MSGI
 mask P_COMMAND CDI
 mask P_MESGOUT CDI|MSGI
 mask P_STATUS CDI|IOI
 mask P_MESGIN CDI|IOI|MSGI
}

/*
 * SCSI Control Signal Write Register (p. 3-16).
 * Writing to this register modifies the control signals on the bus.  Only
 * those signals that are allowed in the current mode (Initiator/Target) are
 * asserted.
 */
register SCSISIGO {
 address   0x003
 access_mode WO
 field CDO  0x80
 field IOO  0x40
 field MSGO  0x20
 field ATNO  0x10
 field SELO  0x08
 field BSYO  0x04
 field REQO  0x02
 field ACKO  0x01
/*
 * Possible phases to write into SCSISIG0
 */
 mask PHASE_MASK CDI|IOI|MSGI
 mask P_DATAOUT 0x00
 mask P_DATAIN IOI
 mask P_COMMAND CDI
 mask P_MESGOUT CDI|MSGI
 mask P_STATUS CDI|IOI
 mask P_MESGIN CDI|IOI|MSGI
 dont_generate_debug_code
}

/* 
 * SCSI Rate Control (p. 3-17).
 * Contents of this register determine the Synchronous SCSI data transfer
 * rate and the maximum synchronous Req/Ack offset.  An offset of 0 in the
 * SOFS (3:0) bits disables synchronous data transfers.  Any offset value
 * greater than 0 enables synchronous transfers.
 */
register SCSIRATE {
 address   0x004
 access_mode RW
 field WIDEXFER 0x80  /* Wide transfer control */
 field ENABLE_CRC 0x40  /* CRC for D-Phases */
 field SINGLE_EDGE 0x10  /* Disable DT Transfers */
 mask SXFR  0x70  /* Sync transfer rate */
 mask SXFR_ULTRA2 0x0f  /* Sync transfer rate */
 mask SOFS  0x0f  /* Sync offset */
}

/*
 * SCSI ID (p. 3-18).
 * Contains the ID of the board and the current target on the
 * selected channel.
 */
register SCSIID {
 address   0x005
 access_mode RW
 mask TID  0xf0  /* Target ID mask */
 mask TWIN_TID 0x70
 field TWIN_CHNLB 0x80
 mask OID  0x0f  /* Our ID mask */
 /*
  * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book)
  * The aic7890/91 allow an offset of up to 127 transfers in both wide
  * and narrow mode.
  */
 alias SCSIOFFSET
 mask SOFS_ULTRA2 0x7f  /* Sync offset U2 chips */
 dont_generate_debug_code
}

/*
 * SCSI Latched Data (p. 3-19).
 * Read/Write latches used to transfer data on the SCSI bus during
 * Automatic or Manual PIO mode.  SCSIDATH can be used for the
 * upper byte of a 16bit wide asynchronouse data phase transfer.
 */
register SCSIDATL {
 address   0x006
 access_mode RW
 dont_generate_debug_code
}

register SCSIDATH {
 address   0x007
 access_mode RW
}

/*
 * SCSI Transfer Count (pp. 3-19,20)
 * These registers count down the number of bytes transferred
 * across the SCSI bus.  The counter is decremented only once
 * the data has been safely transferred.  SDONE in SSTAT0 is
 * set when STCNT goes to 0
 */ 
register STCNT {
 address   0x008
 size 3
 access_mode RW
 dont_generate_debug_code
}

/* ALT_MODE registers (Ultra2 and Ultra160 chips) */
register SXFRCTL2 {
 address   0x013
 access_mode RW
 field AUTORSTDIS 0x10
 field CMDDMAEN 0x08
 mask ASYNC_SETUP 0x07
}

/* ALT_MODE register on Ultra160 chips */
register OPTIONMODE {
 address   0x008
 access_mode RW
 count  2
 field AUTORATEEN  0x80
 field AUTOACKEN  0x40
 field ATNMGMNTEN  0x20
 field BUSFREEREV  0x10
 field EXPPHASEDIS  0x08
 field SCSIDATL_IMGEN  0x04
 field AUTO_MSGOUT_DE  0x02
 field DIS_MSGIN_DUALEDGE 0x01
 mask OPTIONMODE_DEFAULTS AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE
 dont_generate_debug_code
}

/* ALT_MODE register on Ultra160 chips */
register TARGCRCCNT {
 address   0x00a
 size 2
 access_mode RW
 count  2
 dont_generate_debug_code
}

/*
 * Clear SCSI Interrupt 0 (p. 3-20)
 * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
 */
register CLRSINT0 {
 address   0x00b
 access_mode WO
 field CLRSELDO 0x40
 field CLRSELDI 0x20
 field CLRSELINGO 0x10
 field CLRSWRAP 0x08
 field CLRIOERR 0x08 /* Ultra2 Only */
 field CLRSPIORDY 0x02
 dont_generate_debug_code
}

/*
 * SCSI Status 0 (p. 3-21)
 * Contains one set of SCSI Interrupt codes
 * These are most likely of interest to the sequencer
 */
register SSTAT0 {
 address   0x00b
 access_mode RO
 field TARGET  0x80 /* Board acting as target */
 field SELDO  0x40 /* Selection Done */
 field SELDI  0x20 /* Board has been selected */
 field SELINGO  0x10 /* Selection In Progress */
 field SWRAP  0x08 /* 24bit counter wrap */
 field IOERR  0x08 /* LVD Tranceiver mode changed */
 field SDONE  0x04 /* STCNT = 0x000000 */
 field SPIORDY  0x02 /* SCSI PIO Ready */
 field DMADONE  0x01 /* DMA transfer completed */
}

/*
 * Clear SCSI Interrupt 1 (p. 3-23)
 * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
 */
register CLRSINT1 {
 address   0x00c
 access_mode WO
 field CLRSELTIMEO 0x80
 field CLRATNO  0x40
 field CLRSCSIRSTI 0x20
 field CLRBUSFREE 0x08
 field CLRSCSIPERR 0x04
 field CLRPHASECHG 0x02
 field CLRREQINIT 0x01
 dont_generate_debug_code
}

/*
 * SCSI Status 1 (p. 3-24)
 */
register SSTAT1 {
 address   0x00c
 access_mode RO
 field SELTO  0x80
 field ATNTARG  0x40
 field SCSIRSTI 0x20
 field PHASEMIS 0x10
 field BUSFREE  0x08
 field SCSIPERR 0x04
 field PHASECHG 0x02
 field REQINIT  0x01
}

/*
 * SCSI Status 2 (pp. 3-25,26)
 */
register SSTAT2 {
 address   0x00d
 access_mode RO
 field OVERRUN  0x80
 field SHVALID  0x40 /* Shadow Layer non-zero */
 field EXP_ACTIVE 0x10 /* SCSI Expander Active */
 field CRCVALERR 0x08 /* CRC doesn't match (U3 only) */
 field CRCENDERR 0x04 /* No terminal CRC packet (U3 only) */
 field CRCREQERR 0x02 /* Illegal CRC packet req (U3 only) */
 field DUAL_EDGE_ERR 0x01 /* Incorrect data phase (U3 only) */
 mask SFCNT  0x1f
}

/*
 * SCSI Status 3 (p. 3-26)
 */
register SSTAT3 {
 address   0x00e
 access_mode RO
 count  2
 mask SCSICNT  0xf0
 mask OFFCNT  0x0f
 mask U2OFFCNT 0x7f
}

/*
 * SCSI ID for the aic7890/91 chips
 */
register SCSIID_ULTRA2 {
 address   0x00f
 access_mode RW
 mask TID  0xf0  /* Target ID mask */
 mask OID  0x0f  /* Our ID mask */
 dont_generate_debug_code
}

/*
 * SCSI Interrupt Mode 1 (p. 3-28)
 * Setting any bit will enable the corresponding function
 * in SIMODE0 to interrupt via the IRQ pin.
 */
register SIMODE0 {
 address   0x010
 access_mode RW
 count  2
 field ENSELDO  0x40
 field ENSELDI  0x20
 field ENSELINGO 0x10
 field ENSWRAP  0x08
 field ENIOERR  0x08 /* LVD Tranceiver mode changes */
 field ENSDONE  0x04
 field ENSPIORDY 0x02
 field ENDMADONE 0x01
}

/*
 * SCSI Interrupt Mode 1 (pp. 3-28,29)
 * Setting any bit will enable the corresponding function
 * in SIMODE1 to interrupt via the IRQ pin.
 */
register SIMODE1 {
 address   0x011
 access_mode RW
 field ENSELTIMO 0x80
 field ENATNTARG 0x40
 field ENSCSIRST 0x20
 field ENPHASEMIS 0x10
 field ENBUSFREE 0x08
 field ENSCSIPERR 0x04
 field ENPHASECHG 0x02
 field ENREQINIT 0x01
}

/*
 * SCSI Data Bus (High) (p. 3-29)
 * This register reads data on the SCSI Data bus directly.
 */
register SCSIBUSL {
 address   0x012
 access_mode RW
}

register SCSIBUSH {
 address   0x013
 access_mode RW
}

/*
 * SCSI/Host Address (p. 3-30)
 * These registers hold the host address for the byte about to be
 * transferred on the SCSI bus.  They are counted up in the same
 * manner as STCNT is counted down.  SHADDR should always be used
 * to determine the address of the last byte transferred since HADDR
 * can be skewed by write ahead.
 */
register SHADDR {
 address   0x014
 size 4
 access_mode RO
 dont_generate_debug_code
}

/*
 * Selection Timeout Timer (p. 3-30)
 */
register SELTIMER {
 address   0x018
 access_mode RW
 count  1
 field STAGE6  0x20
 field STAGE5  0x10
 field STAGE4  0x08
 field STAGE3  0x04
 field STAGE2  0x02
 field STAGE1  0x01
 alias TARGIDIN
 dont_generate_debug_code
}

/*
 * Selection/Reselection ID (p. 3-31)
 * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
 * device did not set its own ID.
 */
register SELID {
 address   0x019
 access_mode RW
 mask SELID_MASK 0xf0
 field ONEBIT  0x08
 dont_generate_debug_code
}

register SCAMCTL {
 address   0x01a
 access_mode RW
 field ENSCAMSELO 0x80
 field CLRSCAMSELID 0x40
 field ALTSTIM  0x20
 field DFLTTID  0x10
 mask SCAMLVL  0x03
}

/*
 * Target Mode Selecting in ID bitmask (aic7890/91/96/97)
 */
register TARGID {
 address   0x01b
 size   2
 access_mode RW
 count  14
 dont_generate_debug_code
}

/*
 * Serial Port I/O Cabability register (p. 4-95 aic7860 Data Book)
 * Indicates if external logic has been attached to the chip to
 * perform the tasks of accessing a serial eeprom, testing termination
 * strength, and performing cable detection.  On the aic7860, most of
 * these features are handled on chip, but on the aic7855 an attached
 * aic3800 does the grunt work.
 */
register SPIOCAP {
 address   0x01b
 access_mode RW
 count  10
 field SOFT1  0x80
 field SOFT0  0x40
 field SOFTCMDEN 0x20 
 field EXT_BRDCTL 0x10 /* External Board control */
 field SEEPROM  0x08 /* External serial eeprom logic */
 field EEPROM  0x04 /* Writable external BIOS ROM */
 field ROM  0x02 /* Logic for accessing external ROM */
 field SSPIOCPS 0x01 /* Termination and cable detection */
 dont_generate_debug_code
}

register BRDCTL {
 address   0x01d
 count  11
 field BRDDAT7  0x80
 field BRDDAT6  0x40
 field BRDDAT5  0x20
 field BRDSTB  0x10
 field BRDCS  0x08
 field BRDRW  0x04
 field BRDCTL1  0x02
 field BRDCTL0  0x01
 /* 7890 Definitions */
 field BRDDAT4  0x10
 field BRDDAT3  0x08
 field BRDDAT2  0x04
 field BRDRW_ULTRA2 0x02
 field BRDSTB_ULTRA2 0x01
 dont_generate_debug_code
}

/*
 * Serial EEPROM Control (p. 4-92 in 7870 Databook)
 * Controls the reading and writing of an external serial 1-bit
 * EEPROM Device.  In order to access the serial EEPROM, you must
 * first set the SEEMS bit that generates a request to the memory
 * port for access to the serial EEPROM device.  When the memory
 * port is not busy servicing another request, it reconfigures
 * to allow access to the serial EEPROM.  When this happens, SEERDY
 * gets set high to verify that the memory port access has been
 * granted.  
 *
 * After successful arbitration for the memory port, the SEECS bit of 
 * the SEECTL register is connected to the chip select.  The SEECK, 
 * SEEDO, and SEEDI are connected to the clock, data out, and data in 
 * lines respectively.  The SEERDY bit of SEECTL is useful in that it 
 * gives us an 800 nsec timer.  After a write to the SEECTL register, 
 * the SEERDY goes high 800 nsec later.  The one exception to this is 
 * when we first request access to the memory port.  The SEERDY goes 
 * high to signify that access has been granted and, for this case, has 
 * no implied timing.
 *
 * See 93cx6.c for detailed information on the protocol necessary to 
 * read the serial EEPROM.
 */
register SEECTL {
 address   0x01e
 count  11
 field EXTARBACK 0x80
 field EXTARBREQ 0x40
 field SEEMS  0x20
 field SEERDY  0x10
 field SEECS  0x08
 field SEECK  0x04
 field SEEDO  0x02
 field SEEDI  0x01
 dont_generate_debug_code
}
/*
 * SCSI Block Control (p. 3-32)
 * Controls Bus type and channel selection.  In a twin channel configuration
 * addresses 0x00-0x1e are gated to the appropriate channel based on this
 * register.  SELWIDE allows for the coexistence of 8bit and 16bit devices
 * on a wide bus.
 */
register SBLKCTL {
 address   0x01f
 access_mode RW
 field DIAGLEDEN 0x80 /* Aic78X0 only */
 field DIAGLEDON 0x40 /* Aic78X0 only */
 field AUTOFLUSHDIS 0x20
 field SELBUSB  0x08
 field ENAB40  0x08 /* LVD transceiver active */
 field ENAB20  0x04 /* SE/HVD transceiver active */
 field SELWIDE  0x02
 field XCVR  0x01 /* External transceiver active */
}

/*
 * Sequencer Control (p. 3-33)
 * Error detection mode and speed configuration
 */
register SEQCTL {
 address   0x060
 access_mode RW
 count  15
 field PERRORDIS 0x80
 field PAUSEDIS 0x40
 field FAILDIS  0x20
 field FASTMODE 0x10
 field BRKADRINTEN 0x08
 field STEP  0x04
 field SEQRESET 0x02
 field LOADRAM  0x01
}

/*
 * Sequencer RAM Data (p. 3-34)
 * Single byte window into the Scratch Ram area starting at the address
 * specified by SEQADDR0 and SEQADDR1.  To write a full word, simply write
 * four bytes in succession.  The SEQADDRs will increment after the most
 * significant byte is written
 */
register SEQRAM {
 address   0x061
 access_mode RW
 count  2
 dont_generate_debug_code
}

/*
 * Sequencer Address Registers (p. 3-35)
 * Only the first bit of SEQADDR1 holds addressing information
 */
register SEQADDR0 {
 address   0x062
 access_mode RW
 dont_generate_debug_code
}

register SEQADDR1 {
 address   0x063
 access_mode RW
 count  8
 mask SEQADDR1_MASK 0x01
 dont_generate_debug_code
}

/*
 * Accumulator
 * We cheat by passing arguments in the Accumulator up to the kernel driver
 */
register ACCUM {
 address   0x064
 access_mode RW
 accumulator
 dont_generate_debug_code
}

register SINDEX {
 address   0x065
 access_mode RW
 sindex
 dont_generate_debug_code
}

register DINDEX {
 address   0x066
 access_mode RW
 dont_generate_debug_code
}

register ALLONES {
 address   0x069
 access_mode RO
 allones
 dont_generate_debug_code
}

register ALLZEROS {
 address   0x06a
 access_mode RO
 allzeros
 dont_generate_debug_code
}

register NONE {
 address   0x06a
 access_mode WO
 none
 dont_generate_debug_code
}

register FLAGS {
 address   0x06b
 access_mode RO
 count  18
 field ZERO  0x02
 field CARRY  0x01
 dont_generate_debug_code
}

register SINDIR {
 address   0x06c
 access_mode RO
 dont_generate_debug_code
}

register DINDIR  {
 address   0x06d
 access_mode WO
 dont_generate_debug_code
}

register FUNCTION1 {
 address   0x06e
 access_mode RW
}

register STACK {
 address   0x06f
 access_mode RO
 count  5
 dont_generate_debug_code
}

const STACK_SIZE 4

/*
 * Board Control (p. 3-43)
 */
register BCTL {
 address   0x084
 access_mode RW
 field ACE  0x08
 field ENABLE  0x01
}

/*
 * On the aic78X0 chips, Board Control is replaced by the DSCommand
 * register (p. 4-64)
 */
register DSCOMMAND0 {
 address   0x084
 access_mode RW
 count  7
 field CACHETHEN 0x80 /* Cache Threshold enable */
 field DPARCKEN 0x40 /* Data Parity Check Enable */
 field MPARCKEN 0x20 /* Memory Parity Check Enable */
 field EXTREQLCK 0x10 /* External Request Lock */
 /* aic7890/91/96/97 only */
 field INTSCBRAMSEL 0x08 /* Internal SCB RAM Select */
 field RAMPS  0x04 /* External SCB RAM Present */
 field USCBSIZE32 0x02 /* Use 32byte SCB Page Size */
 field CIOPARCKEN 0x01 /* Internal bus parity error enable */
 dont_generate_debug_code
}

register DSCOMMAND1 {
 address   0x085
 access_mode RW
 mask DSLATT  0xfc /* PCI latency timer (non-ultra2) */
 field HADDLDSEL1 0x02 /* Host Address Load Select Bits */
 field HADDLDSEL0 0x01
 dont_generate_debug_code
}

/*
 * Bus On/Off Time (p. 3-44) aic7770 only
 */
register BUSTIME {
 address   0x085
 access_mode RW
 count  2
 mask BOFF  0xf0
 mask BON  0x0f
 dont_generate_debug_code
}

/*
 * Bus Speed (p. 3-45) aic7770 only
 */
register BUSSPD {
 address   0x086
 access_mode RW
 count  2
 mask DFTHRSH  0xc0
 mask STBOFF  0x38
 mask STBON  0x07
 mask DFTHRSH_100 0xc0
 mask DFTHRSH_75 0x80
 dont_generate_debug_code
}

/* aic7850/55/60/70/80/95 only */
register DSPCISTATUS {
 address   0x086
 count  4
 mask DFTHRSH_100 0xc0
 dont_generate_debug_code
}

/* aic7890/91/96/97 only */
register HS_MAILBOX {
 address   0x086
 mask HOST_MAILBOX 0xF0
 mask SEQ_MAILBOX 0x0F
 mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */
 dont_generate_debug_code
}

const HOST_MAILBOX_SHIFT 4
const SEQ_MAILBOX_SHIFT 0

/*
 * Host Control (p. 3-47) R/W
 * Overall host control of the device.
 */
register HCNTRL {
 address   0x087
 access_mode RW
 count  14
 field POWRDN  0x40
 field SWINT  0x10
 field IRQMS  0x08
 field PAUSE  0x04
 field INTEN  0x02
 field CHIPRST  0x01
 field CHIPRSTACK 0x01
 dont_generate_debug_code
}

/*
 * Host Address (p. 3-48)
 * This register contains the address of the byte about
 * to be transferred across the host bus.
 */
register HADDR {
 address   0x088
 size 4
 access_mode RW
 dont_generate_debug_code
}

register HCNT {
 address   0x08c
 size 3
 access_mode RW
 dont_generate_debug_code
}

/*
 * SCB Pointer (p. 3-49)
 * Gate one of the SCBs into the SCBARRAY window.
 */
register SCBPTR {
 address   0x090
 access_mode RW
 dont_generate_debug_code
}

/*
 * Interrupt Status (p. 3-50)
 * Status for system interrupts
 */
register INTSTAT {
 address   0x091
 access_mode RW
 field BRKADRINT 0x08
 field SCSIINT   0x04
 field CMDCMPLT  0x02
 field SEQINT    0x01
 mask BAD_PHASE SEQINT  /* unknown scsi bus phase */
 mask SEND_REJECT 0x10|SEQINT /* sending a message reject */
 mask PROTO_VIOLATION 0x20|SEQINT /* SCSI protocol violation */ 
 mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */
 mask IGN_WIDE_RES 0x40|SEQINT /* Complex IGN Wide Res Msg */
 mask PDATA_REINIT 0x50|SEQINT /*
       * Returned to data phase
       * that requires data
       * transfer pointers to be
       * recalculated from the
       * transfer residual.
       */
 mask HOST_MSG_LOOP 0x60|SEQINT /*
       * The bus is ready for the
       * host to perform another
       * message transaction.  This
       * mechanism is used for things
       * like sync/wide negotiation
       * that require a kernel based
       * message state engine.
       */
 mask BAD_STATUS 0x70|SEQINT /* Bad status from target */
 mask PERR_DETECTED 0x80|SEQINT /*
       * Either the phase_lock
       * or inb_next routine has
       * noticed a parity error.
       */
 mask DATA_OVERRUN 0x90|SEQINT /*
       * Target attempted to write
       * beyond the bounds of its
       * command.
       */
 mask MKMSG_FAILED 0xa0|SEQINT /*
       * Target completed command
       * without honoring our ATN
       * request to issue a message. 
       */
 mask MISSED_BUSFREE 0xb0|SEQINT /*
       * The sequencer never saw
       * the bus go free after
       * either a command complete
       * or disconnect message.
       */
 mask SCB_MISMATCH 0xc0|SEQINT /*
       * Downloaded SCB's tag does
       * not match the entry we
       * intended to download.
       */
 mask NO_FREE_SCB 0xd0|SEQINT /*
       * get_free_or_disc_scb failed.
       */
 mask OUT_OF_RANGE 0xe0|SEQINT

 mask SEQINT_MASK 0xf0|SEQINT /* SEQINT Status Codes */
 mask INT_PEND  (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT)
 dont_generate_debug_code
}

/*
 * Hard Error (p. 3-53)
 * Reporting of catastrophic errors.  You usually cannot recover from
 * these without a full board reset.
 */
register ERROR {
 address   0x092
 access_mode RO
 count  26
 field CIOPARERR 0x80 /* Ultra2 only */
 field PCIERRSTAT 0x40 /* PCI only */
 field MPARERR  0x20 /* PCI only */
 field DPARERR  0x10 /* PCI only */
 field SQPARERR 0x08
 field ILLOPCODE 0x04
 field ILLSADDR 0x02
 field ILLHADDR 0x01
}

/*
 * Clear Interrupt Status (p. 3-52)
 */
register CLRINT {
 address   0x092
 access_mode WO
 count  24
 field CLRPARERR 0x10 /* PCI only */
 field CLRBRKADRINT 0x08
 field CLRSCSIINT      0x04
 field CLRCMDINT  0x02
 field CLRSEQINT  0x01
 dont_generate_debug_code
}

register DFCNTRL {
 address   0x093
 access_mode RW
 field PRELOADEN 0x80 /* aic7890 only */
 field WIDEODD  0x40
 field SCSIEN  0x20
 field SDMAEN  0x10
 field SDMAENACK 0x10
 field HDMAEN  0x08
 field HDMAENACK 0x08
 field DIRECTION 0x04
 field FIFOFLUSH 0x02
 field FIFORESET 0x01
}

register DFSTATUS {
 address   0x094
 access_mode RO
 field PRELOAD_AVAIL 0x80
 field DFCACHETH 0x40
 field FIFOQWDEMP 0x20
 field MREQPEND 0x10
 field HDONE  0x08
 field DFTHRESH 0x04
 field FIFOFULL 0x02
 field FIFOEMP  0x01
}

register DFWADDR {
 address   0x95
 access_mode RW
 dont_generate_debug_code
}

register DFRADDR {
 address   0x97
 access_mode RW
}

register DFDAT {
 address   0x099
 access_mode RW
 dont_generate_debug_code
}

/*
 * SCB Auto Increment (p. 3-59)
 * Byte offset into the SCB Array and an optional bit to allow auto
 * incrementing of the address during download and upload operations
 */
register SCBCNT {
 address   0x09a
 access_mode RW
 count  1
 field SCBAUTO  0x80
 mask SCBCNT_MASK 0x1f
 dont_generate_debug_code
}

/*
 * Queue In FIFO (p. 3-60)
 * Input queue for queued SCBs (commands that the seqencer has yet to start)
 */
register QINFIFO {
 address   0x09b
 access_mode RW
 count  12
 dont_generate_debug_code
}

/*
 * Queue In Count (p. 3-60)
 * Number of queued SCBs
 */
register QINCNT {
 address   0x09c
 access_mode RO
}

/*
 * Queue Out FIFO (p. 3-61)
 * Queue of SCBs that have completed and await the host
 */
register QOUTFIFO {
 address   0x09d
 access_mode WO
 count  7
 dont_generate_debug_code
}

register CRCCONTROL1 {
 address   0x09d
 access_mode RW
 count  3
 field CRCONSEEN  0x80
 field CRCVALCHKEN  0x40
 field CRCENDCHKEN  0x20
 field CRCREQCHKEN  0x10
 field TARGCRCENDEN  0x08
 field TARGCRCCNTEN  0x04
 dont_generate_debug_code
}


/*
 * Queue Out Count (p. 3-61)
 * Number of queued SCBs in the Out FIFO
 */
register QOUTCNT {
 address   0x09e
 access_mode RO
}

register SCSIPHASE {
 address   0x09e
 access_mode RO
 field STATUS_PHASE 0x20
 field COMMAND_PHASE 0x10
 field MSG_IN_PHASE 0x08
 field MSG_OUT_PHASE 0x04
 field DATA_IN_PHASE 0x02
 field DATA_OUT_PHASE 0x01
 mask DATA_PHASE_MASK 0x03
}

/*
 * Special Function
 */
register SFUNCT {
 address   0x09f
 access_mode RW
 count     4
 field ALT_MODE 0x80
 dont_generate_debug_code
}

/*
 * SCB Definition (p. 5-4)
 */
scb {
 address  0x0a0
 size  64

 SCB_CDB_PTR {
  size 4
  alias SCB_RESIDUAL_DATACNT
  alias SCB_CDB_STORE
  dont_generate_debug_code
 }
 SCB_RESIDUAL_SGPTR {
  size 4
  dont_generate_debug_code
 }
 SCB_SCSI_STATUS {
  size 1
  dont_generate_debug_code
 }
 SCB_TARGET_PHASES {
  size 1
  dont_generate_debug_code
 }
 SCB_TARGET_DATA_DIR {
  size 1
  dont_generate_debug_code
 }
 SCB_TARGET_ITAG {
  size 1
  dont_generate_debug_code
 }
 SCB_DATAPTR {
  size 4
  dont_generate_debug_code
 }
 SCB_DATACNT {
  /*
   * The last byte is really the high address bits for
   * the data address.
   */
  size 4
  field SG_LAST_SEG  0x80 /* In the fourth byte */
  mask SG_HIGH_ADDR_BITS 0x7F /* In the fourth byte */
  dont_generate_debug_code
 }
 SCB_SGPTR {
  size 4
  field SG_RESID_VALID 0x04 /* In the first byte */
  field SG_FULL_RESID 0x02 /* In the first byte */
  field SG_LIST_NULL 0x01 /* In the first byte */
  dont_generate_debug_code
 }
 SCB_CONTROL {
  size 1
  field TARGET_SCB   0x80
  field STATUS_RCVD   0x80
  field DISCENB    0x40
  field TAG_ENB    0x20
  field MK_MESSAGE   0x10
  field ULTRAENB   0x08
  field DISCONNECTED   0x04
  mask SCB_TAG_TYPE   0x03
 }
 SCB_SCSIID {
  size 1
  field TWIN_CHNLB   0x80
  mask TWIN_TID   0x70
  mask TID    0xf0
  mask OID    0x0f
 }
 SCB_LUN {
  field SCB_XFERLEN_ODD   0x80
  mask LID    0x3f
  size 1
 }
 SCB_TAG {
  size 1
 }
 SCB_CDB_LEN {
  size 1
  dont_generate_debug_code
 }
 SCB_SCSIRATE {
  size 1
  dont_generate_debug_code
 }
 SCB_SCSIOFFSET {
  size 1
  count 1
  dont_generate_debug_code
 }
 SCB_NEXT {
  size 1
  dont_generate_debug_code
 }
 SCB_64_SPARE {
  size 16
 }
 SCB_64_BTT {
  size 16
  dont_generate_debug_code
 }
}

const SCB_UPLOAD_SIZE  32
const SCB_DOWNLOAD_SIZE 32
const SCB_DOWNLOAD_SIZE_64 48

const SG_SIZEOF 0x08  /* sizeof(struct ahc_dma) */

/* --------------------- AHA-2840-only definitions -------------------- */

register SEECTL_2840 {
 address   0x0c0
 access_mode RW
 count  2
 field CS_2840  0x04
 field CK_2840  0x02
 field DO_2840  0x01
 dont_generate_debug_code
}

register STATUS_2840 {
 address   0x0c1
 access_mode RW
 count  4
 field EEPROM_TF 0x80
 mask BIOS_SEL 0x60
 mask ADSEL  0x1e
 field DI_2840  0x01
 dont_generate_debug_code
}

/* --------------------- AIC-7870-only definitions -------------------- */

register CCHADDR {
 address   0x0E0
 size 8
 dont_generate_debug_code
}

register CCHCNT {
 address   0x0E8
 dont_generate_debug_code
}

register CCSGRAM {
 address   0x0E9
 dont_generate_debug_code
}

register CCSGADDR {
 address   0x0EA
 dont_generate_debug_code
}

register CCSGCTL {
 address   0x0EB
 field CCSGDONE 0x80
 field CCSGEN  0x08
 field SG_FETCH_NEEDED 0x02 /* Bit used for software state */
 field CCSGRESET 0x01
 dont_generate_debug_code
}

register CCSCBCNT {
 address   0xEF
 count  1
 dont_generate_debug_code
}

register CCSCBCTL {
 address   0x0EE
 field CCSCBDONE 0x80
 field ARRDONE  0x40 /* SCB Array prefetch done */
 field CCARREN  0x10
 field CCSCBEN  0x08
 field CCSCBDIR 0x04
 field CCSCBRESET 0x01
 dont_generate_debug_code
}

register CCSCBADDR {
 address   0x0ED
 dont_generate_debug_code
}

register CCSCBRAM {
 address   0xEC
 dont_generate_debug_code
}

/*
 * SCB bank address (7895/7896/97 only)
 */
register SCBBADDR {
 address   0x0F0
 access_mode RW
 count  3
 dont_generate_debug_code
}

register CCSCBPTR {
 address   0x0F1
 dont_generate_debug_code
}

register HNSCB_QOFF {
 address   0x0F4
 count  4
 dont_generate_debug_code
}

register SNSCB_QOFF {
 address   0x0F6
 dont_generate_debug_code
}

register SDSCB_QOFF {
 address   0x0F8
 dont_generate_debug_code
}

register QOFF_CTLSTA {
 address   0x0FA
 field SCB_AVAIL 0x40
 field SNSCB_ROLLOVER 0x20
 field SDSCB_ROLLOVER 0x10
 mask SCB_QSIZE 0x07
 mask SCB_QSIZE_256 0x06
 dont_generate_debug_code
}

register DFF_THRSH {
 address   0x0FB
 mask WR_DFTHRSH 0x70
 mask RD_DFTHRSH 0x07
 mask RD_DFTHRSH_MIN 0x00
 mask RD_DFTHRSH_25 0x01
 mask RD_DFTHRSH_50 0x02
 mask RD_DFTHRSH_63 0x03
 mask RD_DFTHRSH_75 0x04
 mask RD_DFTHRSH_85 0x05
 mask RD_DFTHRSH_90 0x06
 mask RD_DFTHRSH_MAX 0x07
 mask WR_DFTHRSH_MIN 0x00
 mask WR_DFTHRSH_25 0x10
 mask WR_DFTHRSH_50 0x20
 mask WR_DFTHRSH_63 0x30
 mask WR_DFTHRSH_75 0x40
 mask WR_DFTHRSH_85 0x50
 mask WR_DFTHRSH_90 0x60
 mask WR_DFTHRSH_MAX 0x70
 count 4
 dont_generate_debug_code
}

register SG_CACHE_PRE {
 access_mode WO
 address   0x0fc
 mask SG_ADDR_MASK 0xf8
 field LAST_SEG 0x02
 field LAST_SEG_DONE 0x01
 dont_generate_debug_code
}

register SG_CACHE_SHADOW {
 access_mode RO
 address   0x0fc
 mask SG_ADDR_MASK 0xf8
 field LAST_SEG 0x02
 field LAST_SEG_DONE 0x01
 dont_generate_debug_code
}
/* ---------------------- Scratch RAM Offsets ------------------------- */
/* These offsets are either to values that are initialized by the board's
 * BIOS or are specified by the sequencer code.
 *
 * The host adapter card (at least the BIOS) uses 20-2f for SCSI
 * device information, 32-33 and 5a-5f as well. As it turns out, the
 * BIOS trashes 20-2f, writing the synchronous negotiation results
 * on top of the BIOS values, so we re-use those for our per-target
 * scratchspace (actually a value that can be copied directly into
 * SCSIRATE).  The kernel driver will enable synchronous negotiation
 * for all targets that have a value other than 0 in the lower four
 * bits of the target scratch space.  This should work regardless of
 * whether the bios has been installed.
 */

scratch_ram {
 address  0x020
 size  58

 /*
  * 1 byte per target starting at this address for configuration values
  */
 BUSY_TARGETS {
  alias  TARG_SCSIRATE
  size  16
  dont_generate_debug_code
 }
 /*
  * Bit vector of targets that have ULTRA enabled as set by
  * the BIOS.  The Sequencer relies on a per-SCB field to
  * control whether to enable Ultra transfers or not.  During
  * initialization, we read this field and reuse it for 2
  * entries in the busy target table.
  */
 ULTRA_ENB {
  alias  CMDSIZE_TABLE
  size  2
  count  2
  dont_generate_debug_code
 }
 /*
  * Bit vector of targets that have disconnection disabled as set by
  * the BIOS.  The Sequencer relies in a per-SCB field to control the
  * disconnect priveldge.  During initialization, we read this field
  * and reuse it for 2 entries in the busy target table.
  */
 DISC_DSB {
  size  2
  count  6
  dont_generate_debug_code
 }
 CMDSIZE_TABLE_TAIL {
  size  4
 }
 /*
  * Partial transfer past cacheline end to be
  * transferred using an extra S/G.
  */
 MWI_RESIDUAL {
  size  1
  dont_generate_debug_code
 }
 /*
  * SCBID of the next SCB to be started by the controller.
  */
 NEXT_QUEUED_SCB {
  size  1
  dont_generate_debug_code
 }
 /*
  * Single byte buffer used to designate the type or message
  * to send to a target.
  */
 MSG_OUT {
  size  1
  dont_generate_debug_code
 }
 /* Parameters for DMA Logic */
 DMAPARAMS {
  size  1
  count  12
  field PRELOADEN 0x80
  field WIDEODD  0x40
  field SCSIEN  0x20
  field SDMAEN  0x10
  field SDMAENACK 0x10
  field HDMAEN  0x08
  field HDMAENACK 0x08
  field DIRECTION 0x04 /* Set indicates PCI->SCSI */
  field FIFOFLUSH 0x02
  field FIFORESET 0x01
  dont_generate_debug_code
 }
 SEQ_FLAGS {
  size  1
  field NOT_IDENTIFIED  0x80
  field NO_CDB_SENT  0x40
  field TARGET_CMD_IS_TAGGED 0x40
  field DPHASE   0x20
  /* Target flags */
  field TARG_CMD_PENDING 0x10
  field CMDPHASE_PENDING 0x08
  field DPHASE_PENDING  0x04
  field SPHASE_PENDING  0x02
  field NO_DISCONNECT  0x01
 }
 /*
  * Temporary storage for the
  * target/channel/lun of a
  * reconnecting target
  */
 SAVED_SCSIID {
  size  1
  dont_generate_debug_code
 }
 SAVED_LUN {
  size  1
  dont_generate_debug_code
 }
 /*
  * The last bus phase as seen by the sequencer. 
  */
 LASTPHASE {
  size  1
  field CDI  0x80
  field IOI  0x40
  field MSGI  0x20
  mask PHASE_MASK CDI|IOI|MSGI
  mask P_DATAOUT 0x00
  mask P_DATAIN IOI
  mask P_COMMAND CDI
  mask P_MESGOUT CDI|MSGI
  mask P_STATUS CDI|IOI
  mask P_MESGIN CDI|IOI|MSGI
  mask P_BUSFREE 0x01
 }
 /*
  * head of list of SCBs awaiting
  * selection
  */
 WAITING_SCBH {
  size  1
  dont_generate_debug_code
 }
 /*
  * head of list of SCBs that are
  * disconnected.  Used for SCB
  * paging.
  */
 DISCONNECTED_SCBH {
  size  1
  dont_generate_debug_code
 }
 /*
  * head of list of SCBs that are
  * not in use.  Used for SCB paging.
  */
 FREE_SCBH {
  size  1
  dont_generate_debug_code
 }
 /*
  * head of list of SCBs that have
  * completed but have not been
  * put into the qoutfifo.
  */
 COMPLETE_SCBH {
  size  1
 }
 /*
  * Address of the hardware scb array in the host.
  */
 HSCB_ADDR {
  size  4
  dont_generate_debug_code
 }
 /*
  * Base address of our shared data with the kernel driver in host
  * memory.  This includes the qoutfifo and target mode
  * incoming command queue.
  */
 SHARED_DATA_ADDR {
  size  4
  dont_generate_debug_code
 }
 KERNEL_QINPOS {
  size  1
  dont_generate_debug_code
 }
 QINPOS {
  size  1
  dont_generate_debug_code
 }
 QOUTPOS {
  size  1
  dont_generate_debug_code
 }
 /*
  * Kernel and sequencer offsets into the queue of
  * incoming target mode command descriptors.  The
  * queue is full when the KERNEL_TQINPOS == TQINPOS.
  */
 KERNEL_TQINPOS {
  size  1
  dont_generate_debug_code
 }
 TQINPOS {
  size  1
  dont_generate_debug_code
 }
 ARG_1 {
  size  1
  count  1
  mask SEND_MSG  0x80
  mask SEND_SENSE  0x40
  mask SEND_REJ  0x20
  mask MSGOUT_PHASEMIS  0x10
  mask EXIT_MSG_LOOP  0x08
  mask CONT_MSG_LOOP  0x04
  mask CONT_TARG_SESSION 0x02
  alias RETURN_1
  dont_generate_debug_code
 }
 ARG_2 {
  size  1
  alias RETURN_2
  dont_generate_debug_code
 }

 /*
  * Snapshot of MSG_OUT taken after each message is sent.
  */
 LAST_MSG {
  size  1
  alias TARG_IMMEDIATE_SCB
  dont_generate_debug_code
 }

 /*
  * Sequences the kernel driver has okayed for us.  This allows
  * the driver to do things like prevent initiator or target
  * operations.
  */
 SCSISEQ_TEMPLATE {
  size  1
  field ENSELO  0x40
  field ENSELI  0x20
  field ENRSELI  0x10
  field ENAUTOATNO 0x08
  field ENAUTOATNI 0x04
  field ENAUTOATNP 0x02
  dont_generate_debug_code
 }
}

scratch_ram {
 address  0x056
 size  4
 /*
  * These scratch ram locations are initialized by the 274X BIOS.
  * We reuse them after capturing the BIOS settings during
  * initialization.
  */

 /*
  * The initiator specified tag for this target mode transaction.
  */
 HA_274_BIOSGLOBAL {
  size 1
  field HA_274_EXTENDED_TRANS 0x01
  alias INITIATOR_TAG
  count  1
  dont_generate_debug_code
 }

 SEQ_FLAGS2 {
  size 1
  field SCB_DMA   0x01
  field TARGET_MSG_PENDING 0x02
  dont_generate_debug_code
 }
}

scratch_ram {
 address  0x05a
 size  6
 /*
  * These are reserved registers in the card's scratch ram on the 2742.
  * The EISA configuration chip is mapped here.  On Rev E. of the
  * aic7770, the sequencer can use this area for scratch, but the
  * host cannot directly access these registers.  On later chips, this
  * area can be read and written by both the host and the sequencer.
  * Even on later chips, many of these locations are initialized by
  * the BIOS.
  */
 SCSICONF {
  size  1
  count  12
  field TERM_ENB 0x80
  field RESET_SCSI 0x40
  field ENSPCHK  0x20
  mask HSCSIID  0x07 /* our SCSI ID */
  mask HWSCSIID 0x0f /* our SCSI ID if Wide Bus */
  dont_generate_debug_code
 }
 INTDEF {
  address  0x05c
  size  1
  count  1
  field EDGE_TRIG 0x80
  mask VECTOR  0x0f
  dont_generate_debug_code
 }
 HOSTCONF {
  address  0x05d
  size  1
  count  1
  dont_generate_debug_code
 }
 HA_274_BIOSCTRL {
  address  0x05f
  size  1
  count  1
  mask BIOSMODE  0x30
  mask BIOSDISABLED  0x30 
  field CHANNEL_B_PRIMARY 0x08
  dont_generate_debug_code
 }
}

scratch_ram {
 address  0x070
 size  16

 /*
  * Per target SCSI offset values for Ultra2 controllers.
  */
 TARG_OFFSET {
  size  16
  count  1
  dont_generate_debug_code
 }
}

const TID_SHIFT  4
const SCB_LIST_NULL 0xff
const TARGET_CMD_CMPLT 0xfe

const CCSGADDR_MAX 0x80
const CCSGRAM_MAXSEGS 16

/* WDTR Message values */
const BUS_8_BIT   0x00
const BUS_16_BIT  0x01
const BUS_32_BIT  0x02

/* Offset maximums */
const MAX_OFFSET_8BIT  0x0f
const MAX_OFFSET_16BIT  0x08
const MAX_OFFSET_ULTRA2  0x7f
const MAX_OFFSET  0x7f
const HOST_MSG   0xff

/* Target mode command processing constants */
const CMD_GROUP_CODE_SHIFT 0x05

const STATUS_BUSY  0x08
const STATUS_QUEUE_FULL 0x28
const TARGET_DATA_IN  1

/*
 * Downloaded (kernel inserted) constants
 */
/* Offsets into the SCBID array where different data is stored */
const QOUTFIFO_OFFSET download
const QINFIFO_OFFSET download
const CACHESIZE_MASK download
const INVERTED_CACHESIZE_MASK download
const SG_PREFETCH_CNT download
const SG_PREFETCH_ALIGN_MASK download
const SG_PREFETCH_ADDR_MASK download

[ Dauer der Verarbeitung: 0.7 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge