Annotation of Gnu-Mach/i386/i386at/gpl/linux/scsi/aic7xxx_reg.h, revision 1.1

1.1     ! root        1: /*+M*************************************************************************
        !             2:  * Adaptec AIC7xxx register and scratch ram definitions.
        !             3:  *
        !             4:  * Copyright (c) 1994, 1995, 1996 Justin T. Gibbs.
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * This program is free software; you can redistribute it and/or modify
        !             8:  * it under the terms of the GNU General Public License as published by
        !             9:  * the Free Software Foundation; either version 2, or (at your option)
        !            10:  * any later version.
        !            11:  *
        !            12:  * This program is distributed in the hope that it will be useful,
        !            13:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            15:  * GNU General Public License for more details.
        !            16:  *
        !            17:  * You should have received a copy of the GNU General Public License
        !            18:  * along with this program; see the file COPYING.  If not, write to
        !            19:  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            20:  *
        !            21:  * $Id: aic7xxx_reg.h,v 1.1.1.1 1997/02/25 21:27:47 thomas Exp $
        !            22:  *-M*************************************************************************/
        !            23: 
        !            24: /*
        !            25:  * This header is shared by the sequencer code and the kernel level driver.
        !            26:  *
        !            27:  * All page numbers refer to the Adaptec AIC-7770 Data Book availible from
        !            28:  * Adaptec's Technical Documents Department 1-800-934-2766
        !            29:  */
        !            30: 
        !            31: /*
        !            32:  * SCSI Sequence Control (p. 3-11).
        !            33:  * Each bit, when set starts a specific SCSI sequence on the bus
        !            34:  */
        !            35: #define SCSISEQ                        0x000
        !            36: #define                TEMODEO         0x80
        !            37: #define                ENSELO          0x40
        !            38: #define                ENSELI          0x20
        !            39: #define                ENRSELI         0x10
        !            40: #define                ENAUTOATNO      0x08
        !            41: #define                ENAUTOATNI      0x04
        !            42: #define                ENAUTOATNP      0x02
        !            43: #define                SCSIRSTO        0x01
        !            44: 
        !            45: /*
        !            46:  * SCSI Transfer Control 0 Register (pp. 3-13).
        !            47:  * Controls the SCSI module data path.
        !            48:  */
        !            49: #define        SXFRCTL0                0x001
        !            50: #define                DFON            0x80
        !            51: #define                DFPEXP          0x40
        !            52: #define                ULTRAEN         0x20
        !            53: #define                CLRSTCNT        0x10
        !            54: #define                SPIOEN          0x08
        !            55: #define                SCAMEN          0x04
        !            56: #define                CLRCHN          0x02
        !            57: /*  UNUSED                     0x01 */
        !            58: 
        !            59: /*
        !            60:  * SCSI Transfer Control 1 Register (pp. 3-14,15).
        !            61:  * Controls the SCSI module data path.
        !            62:  */
        !            63: #define        SXFRCTL1                0x002
        !            64: #define                BITBUCKET       0x80
        !            65: #define                SWRAPEN         0x40
        !            66: #define                ENSPCHK         0x20
        !            67: #define                STIMESEL        0x18
        !            68: #define                ENSTIMER        0x04
        !            69: #define                ACTNEGEN        0x02
        !            70: #define                STPWEN          0x01    /* Powered Termination */
        !            71: 
        !            72: /*
        !            73:  * SCSI Control Signal Read Register (p. 3-15).
        !            74:  * Reads the actual state of the SCSI bus pins
        !            75:  */
        !            76: #define SCSISIGI               0x003
        !            77: #define                CDI             0x80
        !            78: #define                IOI             0x40
        !            79: #define                MSGI            0x20
        !            80: #define                ATNI            0x10
        !            81: #define                SELI            0x08
        !            82: #define                BSYI            0x04
        !            83: #define                REQI            0x02
        !            84: #define                ACKI            0x01
        !            85: 
        !            86: /*
        !            87:  * Possible phases in SCSISIGI
        !            88:  */
        !            89: #define                PHASE_MASK      0xe0
        !            90: #define                P_DATAOUT       0x00
        !            91: #define                P_DATAIN        0x40
        !            92: #define                P_COMMAND       0x80
        !            93: #define                P_MESGOUT       0xa0
        !            94: #define                P_STATUS        0xc0
        !            95: #define                P_MESGIN        0xe0
        !            96: /*
        !            97:  * SCSI Contol Signal Write Register (p. 3-16).
        !            98:  * Writing to this register modifies the control signals on the bus.  Only
        !            99:  * those signals that are allowed in the current mode (Initiator/Target) are
        !           100:  * asserted.
        !           101:  */
        !           102: #define SCSISIGO               0x003
        !           103: #define                CDO             0x80
        !           104: #define                IOO             0x40
        !           105: #define                MSGO            0x20
        !           106: #define                ATNO            0x10
        !           107: #define                SELO            0x08
        !           108: #define                BSYO            0x04
        !           109: #define                REQO            0x02
        !           110: #define                ACKO            0x01
        !           111: 
        !           112: /* 
        !           113:  * SCSI Rate Control (p. 3-17).
        !           114:  * Contents of this register determine the Synchronous SCSI data transfer
        !           115:  * rate and the maximum synchronous Req/Ack offset.  An offset of 0 in the
        !           116:  * SOFS (3:0) bits disables synchronous data transfers.  Any offset value
        !           117:  * greater than 0 enables synchronous transfers.
        !           118:  */
        !           119: #define SCSIRATE               0x004
        !           120: #define                WIDEXFER        0x80            /* Wide transfer control */
        !           121: #define                SXFR            0x70            /* Sync transfer rate */
        !           122: #define                SOFS            0x0f            /* Sync offset */
        !           123: 
        !           124: /*
        !           125:  * SCSI ID (p. 3-18).
        !           126:  * Contains the ID of the board and the current target on the
        !           127:  * selected channel.
        !           128:  */
        !           129: #define SCSIID                 0x005
        !           130: #define                TID             0xf0            /* Target ID mask */
        !           131: #define                OID             0x0f            /* Our ID mask */
        !           132: 
        !           133: /*
        !           134:  * SCSI Latched Data (p. 3-19).
        !           135:  * Read/Write latchs used to transfer data on the SCSI bus during
        !           136:  * Automatic or Manual PIO mode.  SCSIDATH can be used for the
        !           137:  * upper byte of a 16bit wide asyncronouse data phase transfer.
        !           138:  */
        !           139: #define SCSIDATL               0x006
        !           140: #define SCSIDATH               0x007
        !           141: 
        !           142: /*
        !           143:  * SCSI Transfer Count (pp. 3-19,20)
        !           144:  * These registers count down the number of bytes transfered
        !           145:  * across the SCSI bus.  The counter is decremented only once
        !           146:  * the data has been safely transfered.  SDONE in SSTAT0 is
        !           147:  * set when STCNT goes to 0
        !           148:  */ 
        !           149: #define STCNT                  0x008
        !           150: #define STCNT0                 0x008
        !           151: #define STCNT1                 0x009
        !           152: #define STCNT2                 0x00a
        !           153: 
        !           154: /*
        !           155:  * Clear SCSI Interrupt 0 (p. 3-20)
        !           156:  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
        !           157:  */
        !           158: #define        CLRSINT0                0x00b
        !           159: #define                CLRSELDO        0x40
        !           160: #define                CLRSELDI        0x20
        !           161: #define                CLRSELINGO      0x10
        !           162: #define                CLRSWRAP        0x08
        !           163: /*  UNUSED                     0x04 */
        !           164: #define                CLRSPIORDY      0x02
        !           165: /*  UNUSED                     0x01 */
        !           166: 
        !           167: /*
        !           168:  * SCSI Status 0 (p. 3-21)
        !           169:  * Contains one set of SCSI Interrupt codes
        !           170:  * These are most likely of interest to the sequencer
        !           171:  */
        !           172: #define SSTAT0                 0x00b
        !           173: #define                TARGET          0x80            /* Board acting as target */
        !           174: #define                SELDO           0x40            /* Selection Done */
        !           175: #define                SELDI           0x20            /* Board has been selected */
        !           176: #define                SELINGO         0x10            /* Selection In Progress */
        !           177: #define                SWRAP           0x08            /* 24bit counter wrap */
        !           178: #define                SDONE           0x04            /* STCNT = 0x000000 */
        !           179: #define                SPIORDY         0x02            /* SCSI PIO Ready */
        !           180: #define                DMADONE         0x01            /* DMA transfer completed */
        !           181: 
        !           182: /*
        !           183:  * Clear SCSI Interrupt 1 (p. 3-23)
        !           184:  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
        !           185:  */
        !           186: #define CLRSINT1               0x00c
        !           187: #define                CLRSELTIMEO     0x80
        !           188: #define                CLRATNO         0x40
        !           189: #define                CLRSCSIRSTI     0x20
        !           190: /*  UNUSED                     0x10 */
        !           191: #define                CLRBUSFREE      0x08
        !           192: #define                CLRSCSIPERR     0x04
        !           193: #define                CLRPHASECHG     0x02
        !           194: #define                CLRREQINIT      0x01
        !           195: 
        !           196: /*
        !           197:  * SCSI Status 1 (p. 3-24)
        !           198:  */
        !           199: #define SSTAT1                 0x00c
        !           200: #define                SELTO           0x80
        !           201: #define                ATNTARG         0x40
        !           202: #define                SCSIRSTI        0x20
        !           203: #define                PHASEMIS        0x10
        !           204: #define                BUSFREE         0x08
        !           205: #define                SCSIPERR        0x04
        !           206: #define                PHASECHG        0x02
        !           207: #define                REQINIT         0x01
        !           208: 
        !           209: /*
        !           210:  * SCSI Interrupt Mode 1 (pp. 3-28,29)
        !           211:  * Setting any bit will enable the corresponding function
        !           212:  * in SIMODE1 to interrupt via the IRQ pin.
        !           213:  */
        !           214: #define        SIMODE1                 0x011
        !           215: #define                ENSELTIMO       0x80
        !           216: #define                ENATNTARG       0x40
        !           217: #define                ENSCSIRST       0x20
        !           218: #define                ENPHASEMIS      0x10
        !           219: #define                ENBUSFREE       0x08
        !           220: #define                ENSCSIPERR      0x04
        !           221: #define                ENPHASECHG      0x02
        !           222: #define                ENREQINIT       0x01
        !           223: 
        !           224: /*
        !           225:  * SCSI Data Bus (High) (p. 3-29)
        !           226:  * This register reads data on the SCSI Data bus directly.
        !           227:  */
        !           228: #define        SCSIBUSL                0x012
        !           229: #define        SCSIBUSH                0x013
        !           230: 
        !           231: /*
        !           232:  * SCSI/Host Address (p. 3-30)
        !           233:  * These registers hold the host address for the byte about to be
        !           234:  * transfered on the SCSI bus.  They are counted up in the same
        !           235:  * manner as STCNT is counted down.  SHADDR should always be used
        !           236:  * to determine the address of the last byte transfered since HADDR
        !           237:  * can be squewed by write ahead.
        !           238:  */
        !           239: #define        SHADDR                  0x014
        !           240: #define        SHADDR0                 0x014
        !           241: #define        SHADDR1                 0x015
        !           242: #define        SHADDR2                 0x016
        !           243: #define        SHADDR3                 0x017
        !           244: 
        !           245: /*
        !           246:  * Selection/Reselection ID (p. 3-31)
        !           247:  * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
        !           248:  * device did not set its own ID.
        !           249:  */
        !           250: #define SELID                  0x019
        !           251: #define                SELID_MASK      0xf0
        !           252: #define                ONEBIT          0x08
        !           253: /*  UNUSED                     0x07 */
        !           254: 
        !           255: /*
        !           256:  * SCSI Block Control (p. 3-32)
        !           257:  * Controls Bus type and channel selection.  In a twin channel configuration
        !           258:  * addresses 0x00-0x1e are gated to the appropriate channel based on this
        !           259:  * register.  SELWIDE allows for the coexistence of 8bit and 16bit devices
        !           260:  * on a wide bus.
        !           261:  */
        !           262: #define SBLKCTL                        0x01f
        !           263: #define                DIAGLEDEN       0x80    /* Aic78X0 only */
        !           264: #define                DIAGLEDON       0x40    /* Aic78X0 only */
        !           265: #define                AUTOFLUSHDIS    0x20
        !           266: /*  UNUSED                     0x10 */
        !           267: #define                SELBUS_MASK     0x0a
        !           268: #define                SELBUSB         0x08
        !           269: /*  UNUSED                     0x04 */
        !           270: #define                SELWIDE         0x02
        !           271: /*  UNUSED                     0x01 */
        !           272: #define                SELNARROW       0x00
        !           273: 
        !           274: /*
        !           275:  * Sequencer Control (p. 3-33)
        !           276:  * Error detection mode and speed configuration
        !           277:  */
        !           278: #define SEQCTL                 0x060
        !           279: #define                PERRORDIS       0x80
        !           280: #define                PAUSEDIS        0x40
        !           281: #define                FAILDIS         0x20
        !           282: #define        FASTMODE        0x10
        !           283: #define                BRKADRINTEN     0x08
        !           284: #define                STEP            0x04
        !           285: #define                SEQRESET        0x02
        !           286: #define                LOADRAM         0x01
        !           287: 
        !           288: /*
        !           289:  * Sequencer RAM Data (p. 3-34)
        !           290:  * Single byte window into the Scratch Ram area starting at the address
        !           291:  * specified by SEQADDR0 and SEQADDR1.  To write a full word, simply write
        !           292:  * four bytes in sucessesion.  The SEQADDRs will increment after the most
        !           293:  * significant byte is written
        !           294:  */
        !           295: #define SEQRAM                 0x061
        !           296: 
        !           297: /*
        !           298:  * Sequencer Address Registers (p. 3-35)
        !           299:  * Only the first bit of SEQADDR1 holds addressing information
        !           300:  */
        !           301: #define SEQADDR0               0x062
        !           302: #define SEQADDR1               0x063
        !           303: #define        SEQADDR1_MASK   0x01
        !           304: 
        !           305: /*
        !           306:  * Accumulator
        !           307:  * We cheat by passing arguments in the Accumulator up to the kernel driver
        !           308:  */
        !           309: #define ACCUM                  0x064
        !           310: 
        !           311: #define SINDEX                 0x065
        !           312: #define DINDEX                 0x066
        !           313: #define ALLZEROS               0x06a
        !           314: #define NONE                   0x06a
        !           315: #define SINDIR                 0x06c
        !           316: #define DINDIR                 0x06d
        !           317: #define FUNCTION1              0x06e
        !           318: 
        !           319: /*
        !           320:  * Host Address (p. 3-48)
        !           321:  * This register contains the address of the byte about
        !           322:  * to be transfered across the host bus.
        !           323:  */
        !           324: #define HADDR                  0x088
        !           325: #define HADDR0                 0x088
        !           326: #define HADDR1                 0x089
        !           327: #define HADDR2                 0x08a
        !           328: #define HADDR3                 0x08b
        !           329: 
        !           330: #define HCNT                   0x08c
        !           331: #define HCNT0                  0x08c
        !           332: #define HCNT1                  0x08d
        !           333: #define HCNT2                  0x08e
        !           334: 
        !           335: /*
        !           336:  * SCB Pointer (p. 3-49)
        !           337:  * Gate one of the four SCBs into the SCBARRAY window.
        !           338:  */
        !           339: #define SCBPTR                 0x090
        !           340: 
        !           341: /*
        !           342:  * Board Control (p. 3-43)
        !           343:  */
        !           344: #define BCTL                   0x084
        !           345: /*   RSVD                      0xf0 */
        !           346: #define                ACE             0x08    /* Support for external processors */
        !           347: /*   RSVD                      0x06 */
        !           348: #define                ENABLE          0x01
        !           349: 
        !           350: /*
        !           351:  * On the aic78X0 chips, Board Control is replaced by the DSCommand
        !           352:  * register (p. 4-64)
        !           353:  */
        !           354: #define        DSCOMMAND               0x084
        !           355: #define                CACHETHEN       0x80    /* Cache Threshold enable */
        !           356: #define                DPARCKEN        0x40    /* Data Parity Check Enable */
        !           357: #define                MPARCKEN        0x20    /* Memory Parity Check Enable */
        !           358: #define                EXTREQLCK       0x10    /* External Request Lock */
        !           359: 
        !           360: /*
        !           361:  * Bus On/Off Time (p. 3-44)
        !           362:  */
        !           363: #define BUSTIME                        0x085
        !           364: #define                BOFF            0xf0
        !           365: #define                BON             0x0f
        !           366: #define                BOFF_60BCLKS    0xf0
        !           367: 
        !           368: /*
        !           369:  * Bus Speed (p. 3-45)
        !           370:  */
        !           371: #define        BUSSPD                  0x086
        !           372: #define                DFTHRSH         0xc0
        !           373: #define                STBOFF          0x38
        !           374: #define                STBON           0x07
        !           375: #define                DFTHRSH_100     0xc0
        !           376: 
        !           377: /*
        !           378:  * Host Control (p. 3-47) R/W
        !           379:  * Overal host control of the device.
        !           380:  */
        !           381: #define HCNTRL                 0x087
        !           382: /*    UNUSED                   0x80 */
        !           383: #define                POWRDN          0x40
        !           384: /*    UNUSED                   0x20 */
        !           385: #define                SWINT           0x10
        !           386: #define                IRQMS           0x08
        !           387: #define                PAUSE           0x04
        !           388: #define                INTEN           0x02
        !           389: #define                CHIPRST         0x01
        !           390: 
        !           391: /*
        !           392:  * Interrupt Status (p. 3-50)
        !           393:  * Status for system interrupts
        !           394:  */
        !           395: #define INTSTAT                        0x091
        !           396: #define                SEQINT_MASK     0xf1            /* SEQINT Status Codes */
        !           397: #define                        BAD_PHASE       0x01    /* unknown scsi bus phase */
        !           398: #define                        SEND_REJECT     0x11    /* sending a message reject */
        !           399: #define                        NO_IDENT        0x21    /* no IDENTIFY after reconnect*/
        !           400: #define                        NO_MATCH        0x31    /* no cmd match for reconnect */
        !           401: #define                        SDTR_MSG        0x41    /* SDTR message recieved */
        !           402: #define                        WDTR_MSG        0x51    /* WDTR message recieved */
        !           403: #define                        REJECT_MSG      0x61    /* Reject message recieved */
        !           404: #define                        BAD_STATUS      0x71    /* Bad status from target */
        !           405: #define                        RESIDUAL        0x81    /* Residual byte count != 0 */
        !           406: #define                        ABORT_TAG       0x91    /* Sent an ABORT_TAG message */
        !           407: #define                        AWAITING_MSG    0xa1    /*
        !           408:                                                 * Kernel requested to specify
        !           409:                                                  * a message to this target
        !           410:                                                  * (command was null), so tell
        !           411:                                                  * it that it can fill the
        !           412:                                                  * message buffer.
        !           413:                                                  */
        !           414: #define                        IMMEDDONE       0xb1    /*
        !           415:                                                 * An immediate command has
        !           416:                                                 * completed
        !           417:                                                 */
        !           418: #define                        MSG_BUFFER_BUSY 0xc1    /*
        !           419:                                                 * Sequencer wants to use the
        !           420:                                                 * message buffer, but it
        !           421:                                                 * already contains a message
        !           422:                                                 */
        !           423: #define                        MSGIN_PHASEMIS  0xd1    /*
        !           424:                                                 * Target changed phase on us
        !           425:                                                 * when we were expecting
        !           426:                                                 * another msgin byte.
        !           427:                                                 */
        !           428: #define                        PARITY_ERROR    0xe1    /*
        !           429:                                                 * Sequencer detected a parity
        !           430:                                                 * error.
        !           431:                                                 */
        !           432: #define        BRKADRINT 0x08
        !           433: #define                SCSIINT   0x04
        !           434: #define                CMDCMPLT  0x02
        !           435: #define                SEQINT    0x01
        !           436: #define                INT_PEND  (BRKADRINT | SEQINT | SCSIINT | CMDCMPLT)
        !           437: 
        !           438: /*
        !           439:  * Hard Error (p. 3-53)
        !           440:  * Reporting of catastrophic errors.  You usually cannot recover from
        !           441:  * these without a full board reset.
        !           442:  */
        !           443: #define ERROR                  0x092
        !           444: /*    UNUSED                   0xf0 */
        !           445: #define                PARERR          0x08
        !           446: #define                ILLOPCODE       0x04
        !           447: #define                ILLSADDR        0x02
        !           448: #define                ILLHADDR        0x01
        !           449: 
        !           450: /*
        !           451:  * Clear Interrupt Status (p. 3-52)
        !           452:  */
        !           453: #define CLRINT                 0x092
        !           454: #define                CLRBRKADRINT    0x08
        !           455: #define                CLRSCSIINT      0x04
        !           456: #define                CLRCMDINT       0x02
        !           457: #define                CLRSEQINT       0x01
        !           458: 
        !           459: #define        DFCNTRL                 0x093
        !           460: #define                WIDEODD         0x40
        !           461: #define                SCSIEN          0x20
        !           462: #define                SDMAEN          0x10
        !           463: #define                SDMAENACK       0x10
        !           464: #define                HDMAEN          0x08
        !           465: #define                HDMAENACK       0x08
        !           466: #define                DIRECTION       0x04
        !           467: #define                FIFOFLUSH       0x02
        !           468: #define                FIFORESET       0x01
        !           469: 
        !           470: #define        DFSTATUS                0x094
        !           471: #define                HDONE           0x08
        !           472: #define                FIFOEMP         0x01
        !           473: 
        !           474: #define        DFDAT                   0x099
        !           475: 
        !           476: /*
        !           477:  * SCB Auto Increment (p. 3-59)
        !           478:  * Byte offset into the SCB Array and an optional bit to allow auto
        !           479:  * incrementing of the address during download and upload operations
        !           480:  */
        !           481: #define SCBCNT                 0x09a
        !           482: #define                SCBAUTO         0x80
        !           483: #define                SCBCNT_MASK     0x1f
        !           484: 
        !           485: /*
        !           486:  * Queue In FIFO (p. 3-60)
        !           487:  * Input queue for queued SCBs (commands that the seqencer has yet to start)
        !           488:  */
        !           489: #define QINFIFO                        0x09b
        !           490: 
        !           491: /*
        !           492:  * Queue In Count (p. 3-60)
        !           493:  * Number of queued SCBs
        !           494:  */
        !           495: #define QINCNT                 0x09c
        !           496: 
        !           497: /*
        !           498:  * Queue Out FIFO (p. 3-61)
        !           499:  * Queue of SCBs that have completed and await the host
        !           500:  */
        !           501: #define QOUTFIFO               0x09d
        !           502: 
        !           503: /*
        !           504:  * Queue Out Count (p. 3-61)
        !           505:  * Number of queued SCBs in the Out FIFO
        !           506:  */
        !           507: #define QOUTCNT                        0x09e
        !           508: 
        !           509: /*
        !           510:  * SCB Definition (p. 5-4)
        !           511:  * The two reserved bytes at SCBARRAY+1[23] are expected to be set to
        !           512:  * zero. Bit 3 in SCBARRAY+0 is used as an internal flag to indicate
        !           513:  * whether or not to DMA an SCB from host ram. This flag prevents the
        !           514:  * "re-fetching" of transactions that are requed because the target is
        !           515:  * busy with another command. We also use bits 6 & 7 to indicate whether
        !           516:  * or not to initiate SDTR or WDTR repectively when starting this command.
        !           517:  */
        !           518: #define SCBARRAY               0x0a0
        !           519: #define        SCB_CONTROL             0x0a0
        !           520: #define                NEEDWDTR        0x80
        !           521: #define                DISCENB         0x40
        !           522: #define                TAG_ENB         0x20
        !           523: #define                NEEDSDTR        0x10
        !           524: #define                DISCONNECTED    0x04
        !           525: #define                SCB_TAG_TYPE    0x03
        !           526: #define        SCB_TCL                 0x0a1
        !           527: #define        SCB_TARGET_STATUS       0x0a2
        !           528: #define        SCB_SGCOUNT             0x0a3
        !           529: #define        SCB_SGPTR               0x0a4
        !           530: #define                SCB_SGPTR0      0x0a4
        !           531: #define                SCB_SGPTR1      0x0a5
        !           532: #define                SCB_SGPTR2      0x0a6
        !           533: #define                SCB_SGPTR3      0x0a7
        !           534: #define        SCB_RESID_SGCNT         0x0a8
        !           535: #define SCB_RESID_DCNT         0x0a9
        !           536: #define                SCB_RESID_DCNT0 0x0a9
        !           537: #define                SCB_RESID_DCNT1 0x0aa
        !           538: #define                SCB_RESID_DCNT2 0x0ab
        !           539: #define SCB_DATAPTR            0x0ac
        !           540: #define                SCB_DATAPTR0    0x0ac
        !           541: #define                SCB_DATAPTR1    0x0ad
        !           542: #define                SCB_DATAPTR2    0x0ae
        !           543: #define                SCB_DATAPTR3    0x0af
        !           544: #define        SCB_DATACNT             0x0b0
        !           545: #define                SCB_DATACNT0    0x0b0
        !           546: #define                SCB_DATACNT1    0x0b1
        !           547: #define                SCB_DATACNT2    0x0b2
        !           548: /* UNUSED - QUAD PADDING       0x0b3 */
        !           549: #define SCB_CMDPTR             0x0b4
        !           550: #define                SCB_CMDPTR0     0x0b4
        !           551: #define                SCB_CMDPTR1     0x0b5
        !           552: #define                SCB_CMDPTR2     0x0b6
        !           553: #define                SCB_CMDPTR3     0x0b7
        !           554: #define        SCB_CMDLEN              0x0b8
        !           555: #define        SCB_NEXT_WAITING        0x0b9
        !           556: 
        !           557: #ifdef linux
        !           558: #define        SG_SIZEOF               0x0c            /* sizeof(struct scatterlist) */
        !           559: #else
        !           560: #define        SG_SIZEOF               0x08            /* sizeof(struct ahc_dma) */
        !           561: #endif
        !           562: 
        !           563: /* --------------------- AHA-2840-only definitions -------------------- */
        !           564: 
        !           565: #define        SEECTL_2840             0x0c0
        !           566: /*     UNUSED                  0xf8 */
        !           567: #define                CS_2840         0x04
        !           568: #define                CK_2840         0x02
        !           569: #define                DO_2840         0x01
        !           570: 
        !           571: #define        STATUS_2840             0x0c1
        !           572: #define                EEPROM_TF       0x80
        !           573: #define                BIOS_SEL        0x60
        !           574: #define                ADSEL           0x1e
        !           575: #define                DI_2840         0x01
        !           576: 
        !           577: /* --------------------- AIC-7870-only definitions -------------------- */
        !           578: 
        !           579: #define DSPCISTATUS            0x086
        !           580: 
        !           581: /*
        !           582:  * Serial EEPROM Control (p. 4-92 in 7870 Databook)
        !           583:  * Controls the reading and writing of an external serial 1-bit
        !           584:  * EEPROM Device.  In order to access the serial EEPROM, you must
        !           585:  * first set the SEEMS bit that generates a request to the memory
        !           586:  * port for access to the serial EEPROM device.  When the memory
        !           587:  * port is not busy servicing another request, it reconfigures
        !           588:  * to allow access to the serial EEPROM.  When this happens, SEERDY
        !           589:  * gets set high to verify that the memory port access has been
        !           590:  * granted.  
        !           591:  *
        !           592:  * After successful arbitration for the memory port, the SEECS bit of 
        !           593:  * the SEECTL register is connected to the chip select.  The SEECK, 
        !           594:  * SEEDO, and SEEDI are connected to the clock, data out, and data in 
        !           595:  * lines respectively.  The SEERDY bit of SEECTL is useful in that it 
        !           596:  * gives us an 800 nsec timer.  After a write to the SEECTL register, 
        !           597:  * the SEERDY goes high 800 nsec later.  The one exception to this is 
        !           598:  * when we first request access to the memory port.  The SEERDY goes 
        !           599:  * high to signify that access has been granted and, for this case, has 
        !           600:  * no implied timing.
        !           601:  *
        !           602:  * See 93cx6.c for detailed information on the protocol necessary to 
        !           603:  * read the serial EEPROM.
        !           604:  */
        !           605: #define SEECTL                 0x01e
        !           606: #define                EXTARBACK       0x80
        !           607: #define                EXTARBREQ       0x40
        !           608: #define                SEEMS           0x20
        !           609: #define                SEERDY          0x10
        !           610: #define                SEECS           0x08
        !           611: #define                SEECK           0x04
        !           612: #define                SEEDO           0x02
        !           613: #define                SEEDI           0x01
        !           614: 
        !           615: /* ---------------------- Scratch RAM Offsets ------------------------- */
        !           616: /* These offsets are either to values that are initialized by the board's
        !           617:  * BIOS or are specified by the sequencer code.
        !           618:  *
        !           619:  * The host adapter card (at least the BIOS) uses 20-2f for SCSI
        !           620:  * device information, 32-33 and 5a-5f as well. As it turns out, the
        !           621:  * BIOS trashes 20-2f, writing the synchronous negotiation results
        !           622:  * on top of the BIOS values, so we re-use those for our per-target
        !           623:  * scratchspace (actually a value that can be copied directly into
        !           624:  * SCSIRATE).  The kernel driver will enable synchronous negotiation
        !           625:  * for all targets that have a value other than 0 in the lower four
        !           626:  * bits of the target scratch space.  This should work regardless of
        !           627:  * whether the bios has been installed.
        !           628:  */
        !           629: 
        !           630: /*
        !           631:  * 1 byte per target starting at this address for configuration values
        !           632:  */
        !           633: #define TARG_SCRATCH           0x020
        !           634: 
        !           635: /*
        !           636:  * The sequencer will stick the frist byte of any rejected message here so
        !           637:  * we can see what is getting thrown away.
        !           638:  */
        !           639: #define REJBYTE                        0x031
        !           640: 
        !           641: /*
        !           642:  * Bit vector of targets that have disconnection disabled.
        !           643:  */
        !           644: #define        DISC_DSB                0x032
        !           645: #define                DISC_DSB_A      0x032
        !           646: #define                DISC_DSB_B      0x033
        !           647: 
        !           648: /*
        !           649:  * Length of pending message
        !           650:  */
        !           651: #define MSG_LEN                        0x034
        !           652: 
        !           653: #define MSG0                   0x035
        !           654: #define                COMP_MSG0       0xcb      /* 2's complement of MSG0 */
        !           655: #define MSG1                   0x036
        !           656: #define MSG2                   0x037
        !           657: #define MSG3                   0x038
        !           658: #define MSG4                   0x039
        !           659: #define MSG5                   0x03a
        !           660: 
        !           661: /*
        !           662:  * These are offsets into the card's scratch ram.  Some of the values are
        !           663:  * specified in the AHA2742 technical reference manual and are initialized
        !           664:  * by the BIOS at boot time.
        !           665:  */
        !           666: #define LASTPHASE              0x049
        !           667: #define ARG_1                  0x04a
        !           668: #define RETURN_1               0x04a
        !           669: #define                SEND_SENSE      0x80
        !           670: #define                SEND_WDTR       0x80
        !           671: #define                SEND_SDTR       0x80
        !           672: #define                SEND_REJ        0x40
        !           673: 
        !           674: #define SIGSTATE               0x04b
        !           675: 
        !           676: #define DMAPARAMS              0x04c   /* Parameters for DMA Logic */
        !           677: 
        !           678: #define        SG_COUNT                0x04d
        !           679: #define        SG_NEXT                 0x04e   /* working value of SG pointer */
        !           680: #define                SG_NEXT0        0x04e
        !           681: #define                SG_NEXT1        0x04f
        !           682: #define                SG_NEXT2        0x050
        !           683: #define                SG_NEXT3        0x051
        !           684: 
        !           685: #define        SCBCOUNT                0x052   /*
        !           686:                                         * Number of SCBs supported by
        !           687:                                         * this card.
        !           688:                                         */
        !           689: #define FLAGS                  0x053
        !           690: #define                SINGLE_BUS      0x00
        !           691: #define                TWIN_BUS        0x01
        !           692: #define                WIDE_BUS        0x02
        !           693: #define                DPHASE          0x04
        !           694: #define                MAXOFFSET       0x08
        !           695: #define                IDENTIFY_SEEN   0x40
        !           696: #define                RESELECTED      0x80
        !           697: 
        !           698: #define        ACTIVE_A                0x054
        !           699: #define        ACTIVE_B                0x055
        !           700: #define        SAVED_TCL               0x056   /*
        !           701:                                         * Temporary storage for the
        !           702:                                         * target/channel/lun of a
        !           703:                                         * reconnecting target
        !           704:                                         */
        !           705: #define WAITING_SCBH           0x057   /*
        !           706:                                         * head of list of SCBs awaiting
        !           707:                                         * selection
        !           708:                                         */
        !           709: #define WAITING_SCBT           0x058   /*
        !           710:                                         * tail of list of SCBs awaiting
        !           711:                                         * selection
        !           712:                                         */
        !           713: #define        COMP_SCBCOUNT           0x059
        !           714: #define                SCB_LIST_NULL   0xff
        !           715: 
        !           716: #define SCSICONF               0x05a
        !           717: #define HOSTCONF               0x05d
        !           718: 
        !           719: #define HA_274_BIOSCTRL                0x05f
        !           720: #define BIOSMODE               0x30
        !           721: #define BIOSDISABLED           0x30
        !           722: 
        !           723: /* Message codes */
        !           724: #define MSG_EXTENDED           0x01
        !           725: #define                MSG_SDTR        0x01
        !           726: #define                MSG_WDTR        0x03
        !           727: #define MSG_SDPTRS             0x02
        !           728: #define MSG_RDPTRS             0x03
        !           729: #define MSG_DISCONNECT         0x04
        !           730: #define MSG_INITIATOR_DET_ERROR        0x05
        !           731: #define MSG_ABORT              0x06
        !           732: #define        MSG_REJECT              0x07
        !           733: #define MSG_NOP                        0x08
        !           734: #define MSG_MSG_PARITY_ERROR   0x09
        !           735: #define MSG_BUS_DEVICE_RESET   0x0c
        !           736: #define MSG_SIMPLE_TAG         0x20
        !           737: #define MSG_IDENTIFY           0x80
        !           738: 
        !           739: /* WDTR Message values */
        !           740: #define        BUS_8_BIT               0x00
        !           741: #define BUS_16_BIT             0x01
        !           742: #define BUS_32_BIT             0x02
        !           743: 
        !           744: #define MAX_OFFSET_8BIT                0x0f
        !           745: #define MAX_OFFSET_16BIT       0x08
        !           746: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.