Annotation of Gnu-Mach/i386/i386at/gpl/linux/scsi/aic7xxx_reg.h, revision 1.1.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.