[BACK]Return to iha.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/iha.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: iha.h,v 1.15 2004/01/19 00:44:33 krw Exp $ */
        !             2: /*-------------------------------------------------------------------------
        !             3:  *
        !             4:  * Device driver for the INI-9XXXU/UW or INIC-940/950  PCI SCSI Controller.
        !             5:  *
        !             6:  * Written for 386bsd and FreeBSD by
        !             7:  *     Winston Hung            <winstonh@initio.com>
        !             8:  *
        !             9:  * Copyright (c) 1997-1999 Initio Corp
        !            10:  * Copyright (c) 2000-2002 Ken Westerback
        !            11:  *
        !            12:  * Redistribution and use in source and binary forms, with or without
        !            13:  * modification, are permitted provided that the following conditions
        !            14:  * are met:
        !            15:  * 1. Redistributions of source code must retain the above copyright
        !            16:  *    notice, this list of conditions and the following disclaimer,
        !            17:  *    without modification, immediately at the beginning of the file.
        !            18:  * 2. The name of the author may not be used to endorse or promote products
        !            19:  *    derived from this software without specific prior written permission.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            22:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            23:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            24:  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
        !            25:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        !            26:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        !            27:  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
        !            29:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
        !            30:  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
        !            31:  * THE POSSIBILITY OF SUCH DAMAGE.
        !            32:  *
        !            33:  *-------------------------------------------------------------------------
        !            34:  */
        !            35:
        !            36: #define IHA_MAX_SG_ENTRIES     33
        !            37: #define IHA_MAX_TARGETS                16
        !            38: #define IHA_MAX_SCB            32
        !            39: #define IHA_MAX_EXTENDED_MSG    4 /* SDTR(3) and WDTR(4) only */
        !            40:
        !            41: /*
        !            42:  *   Scatter-Gather Element Structure
        !            43:  */
        !            44: struct iha_sg_element {
        !            45:        u_int32_t SG_Addr; /* Physical address of segment */
        !            46:        u_int32_t SG_Len;  /* Length of segment */
        !            47: };
        !            48:
        !            49: /*
        !            50:  * iha_scb - SCSI Request structure used by the
        !            51:  *          Tulip (aka inic-940/950). Note that 32
        !            52:  *          bit pointers and ints are assumed!
        !            53:  */
        !            54:
        !            55: struct iha_scb {
        !            56:        TAILQ_ENTRY(iha_scb) SCB_ScbList;
        !            57:
        !            58:        bus_dmamap_t    SCB_DataDma;    /* maps xfer buffer          */
        !            59:        bus_dmamap_t    SCB_SGDma;      /* maps scatter-gather list  */
        !            60:
        !            61:        int       SCB_Status;              /* Current status of the SCB      */
        !            62: #define                      STATUS_QUEUED   0    /*      SCB one of Free/Done/Pend */
        !            63: #define                      STATUS_RENT     1    /*      SCB allocated, not queued */
        !            64: #define                      STATUS_SELECT   2    /*      SCB being selected        */
        !            65: #define                      STATUS_BUSY     3    /*      SCB I/O is active         */
        !            66:        u_int8_t  SCB_NxtStat;             /* Next state function to apply   */
        !            67:        int       SCB_Flags;               /* SCB Flags (xs->flags + private)*/
        !            68: #define                      FLAG_RSENS      0x00010000 /*      Request Sense sent  */
        !            69: #define                      FLAG_SG         0x00020000 /*      Scatter/Gather used */
        !            70: #define                      FLAG_DIR        (SCSI_DATA_IN | SCSI_DATA_OUT)
        !            71:        u_int8_t  SCB_Target;              /* Target Id                      */
        !            72:        u_int8_t  SCB_Lun;                 /* Lun                            */
        !            73:        u_int32_t SCB_BufChars;            /* size of data buf               */
        !            74:        u_int32_t SCB_BufCharsLeft;        /* Chars left to xfer to/from buf */
        !            75:        u_int8_t  SCB_HaStat;              /* Status of Host Adapter         */
        !            76: #define                      HOST_OK         0x00 /*      OK - operation a success  */
        !            77: #define                      HOST_TIMED_OUT  0x01 /*      Request timed out         */
        !            78: #define                      HOST_SPERR      0x10 /*      SCSI parity error         */
        !            79: #define                      HOST_SEL_TOUT   0x11 /*      Selection Timeout         */
        !            80: #define                      HOST_DO_DU      0x12 /*      Data Over/Underrun        */
        !            81: #define                      HOST_BAD_PHAS   0x14 /*      Unexpected SCSI bus phase */
        !            82: #define                      HOST_SCSI_RST   0x1B /*      SCSI bus was reset        */
        !            83: #define                      HOST_DEV_RST    0x1C /*      Device was reset          */
        !            84:        u_int8_t  SCB_TaStat;              /* SCSI Status Byte               */
        !            85:        u_int8_t  SCB_Ident;               /* Identity Message               */
        !            86:        u_int8_t  SCB_TagMsg;              /* Tag Message                    */
        !            87:        u_int8_t  SCB_TagId;               /* Queue Tag                      */
        !            88:
        !            89:        u_int8_t  SCB_CDB[12];             /* SCSI command being executed    */
        !            90:        u_int8_t  SCB_CDBLen;              /* Length of SCSI command in CDB  */
        !            91:
        !            92:        struct scsi_xfer *SCB_Xs;          /* xs this SCB is executing       */
        !            93:
        !            94:        struct iha_sg_element SCB_SGList[IHA_MAX_SG_ENTRIES]; /* SG list     */
        !            95:        u_int16_t SCB_SGCount;             /* # segments in list             */
        !            96:        u_int16_t SCB_SGIdx;               /* index to current element       */
        !            97:
        !            98:        struct scsi_sense_data  SCB_ScsiSenseData; /* DMA-able sense buffer  */
        !            99:        struct tcs             *SCB_Tcs;           /* tcs for SCB_Target     */
        !           100: };
        !           101:
        !           102: /*
        !           103:  *   Target Device Control Structure
        !           104:  */
        !           105: struct tcs {
        !           106:        u_int16_t TCS_Flags;
        !           107: #define                      FLAG_SCSI_RATE     0x0007 /* Index into tul_rate_tbl[] */
        !           108: #define                      FLAG_EN_DISC       0x0008 /* Enable disconnect         */
        !           109: #define                      FLAG_NO_SYNC       0x0010 /* No sync data transfer     */
        !           110: #define                      FLAG_NO_WIDE       0x0020 /* No wide data transfer     */
        !           111: #define                      FLAG_1GIGA         0x0040 /* 255 hd/63 sec (64/32)     */
        !           112: #define                      FLAG_SPINUP        0x0080 /* Start disk drive          */
        !           113: #define                      FLAG_WIDE_DONE     0x0100 /* WDTR msg has been sent    */
        !           114: #define                      FLAG_SYNC_DONE     0x0200 /* SDTR msg has been sent    */
        !           115: #define                      FLAG_NO_NEG_SYNC   (FLAG_NO_SYNC | FLAG_SYNC_DONE)
        !           116: #define                      FLAG_NO_NEG_WIDE   (FLAG_NO_WIDE | FLAG_WIDE_DONE)
        !           117:        u_int8_t  TCS_JS_Period;
        !           118: #define                      PERIOD_WIDE_SCSI   0x80   /* Enable Wide SCSI          */
        !           119: #define                      PERIOD_SYXPD       0x70   /* Synch. SCSI Xfer rate     */
        !           120: #define                      PERIOD_SYOFS       0x0f   /* Synch. SCSI Offset        */
        !           121:        u_int8_t  TCS_SConfig0;
        !           122:        u_int8_t  TCS_TagCnt;
        !           123:
        !           124:        struct iha_scb  *TCS_NonTagScb;
        !           125: };
        !           126:
        !           127: struct iha_softc {
        !           128:        struct device        sc_dev;
        !           129:
        !           130:        bus_space_tag_t      sc_iot;
        !           131:        bus_space_handle_t   sc_ioh;
        !           132:
        !           133:        bus_dma_tag_t        sc_dmat;
        !           134:        bus_dmamap_t         sc_dmamap;
        !           135:
        !           136:        struct  scsi_link    sc_link;
        !           137:        struct  scsi_adapter sc_adapter;
        !           138:
        !           139:        void                *sc_ih;
        !           140:
        !           141:        /*
        !           142:         *   Initio specific fields
        !           143:         */
        !           144:        u_int8_t  HCS_Flags;
        !           145: #define                      FLAG_EXPECT_DISC       0x01
        !           146: #define                      FLAG_EXPECT_SELECT     0x02
        !           147: #define                      FLAG_EXPECT_RESET      0x10
        !           148: #define                      FLAG_EXPECT_DONE_DISC  0x20
        !           149:        u_int8_t  HCS_Semaph;
        !           150: #define                      SEMAPH_IN_MAIN         0x00   /* Already in tulip_main */
        !           151:        u_int8_t  HCS_Phase;                        /* MSG  C/D  I/O         */
        !           152: #define                      PHASE_DATA_OUT         0x00   /*  0    0    0          */
        !           153: #define                      PHASE_DATA_IN          0x01   /*  0    0    1          */
        !           154: #define                      PHASE_CMD_OUT          0x02   /*  0    1    0          */
        !           155: #define                      PHASE_STATUS_IN        0x03   /*  0    1    1          */
        !           156: #define                      PHASE_MSG_OUT          0x06   /*  1    1    0          */
        !           157: #define                      PHASE_MSG_IN           0x07   /*  1    1    1          */
        !           158:        u_int8_t  HCS_JSInt;
        !           159:        u_int8_t  HCS_JSStatus0;
        !           160:        u_int8_t  HCS_JSStatus1;
        !           161:        u_int8_t  HCS_SConf1;
        !           162:        u_int8_t  HCS_Msg[IHA_MAX_EXTENDED_MSG];    /* [0] len, [1] Msg Code */
        !           163:
        !           164:        struct iha_scb *HCS_Scb;                    /* SCB array             */
        !           165:        struct iha_scb *HCS_ActScb;         /* SCB using SCSI bus    */
        !           166:
        !           167:        TAILQ_HEAD(, iha_scb) HCS_FreeScb, HCS_PendScb, HCS_DoneScb;
        !           168:
        !           169:        struct tcs HCS_Tcs[IHA_MAX_TARGETS];
        !           170: };
        !           171:
        !           172: /*
        !           173:  *   EEPROM for one SCSI Channel
        !           174:  *
        !           175:  */
        !           176: struct iha_nvram_scsi {
        !           177:        u_int8_t  NVM_SCSI_Id;      /* 0x00 Channel Adapter SCSI Id          */
        !           178:        u_int8_t  NVM_SCSI_Cfg;     /* 0x01 Channel configuration            */
        !           179: #define                      CFG_SCSI_RESET 0x0001 /*     Reset bus at power up     */
        !           180: #define                      CFG_EN_PAR     0x0002 /*     SCSI parity enable        */
        !           181: #define                      CFG_ACT_TERM1  0x0004 /*     Enable active term 1      */
        !           182: #define                      CFG_ACT_TERM2  0x0008 /*     Enable active term 2      */
        !           183: #define                      CFG_AUTO_TERM  0x0010 /*     Enable auto terminator    */
        !           184: #define                      CFG_EN_PWR     0x0080 /*     Enable power mgmt         */
        !           185:        u_int8_t  NVM_SCSI_CfgByte2;        /* 0x02 Unused Channel Cfg byte 2*/
        !           186:        u_int8_t  NVM_SCSI_Targets;         /* 0x03 Number of SCSI targets   */
        !           187:                                            /* 0x04 Lower bytes of targ flags*/
        !           188:        u_int8_t  NVM_SCSI_TargetFlags[IHA_MAX_TARGETS];
        !           189: };
        !           190:
        !           191: /*
        !           192:  * Tulip (aka ini-940/950) Serial EEPROM Layout
        !           193:  *
        !           194:  */
        !           195: struct iha_nvram {
        !           196:        /* ---------- Header ------------------------------------------------*/
        !           197:        u_int16_t  NVM_Signature;              /* 0x00 NVRAM Signature       */
        !           198: #define                       SIGNATURE        0xC925
        !           199:        u_int8_t   NVM_Size;                   /* 0x02 Size of data structure*/
        !           200:        u_int8_t   NVM_Revision;               /* 0x03 Rev. of data structure*/
        !           201:
        !           202:        /* ---------- Host Adapter Structure --------------------------------*/
        !           203:        u_int8_t   NVM_ModelByte0;             /* 0x04 Model number (byte 0) */
        !           204:        u_int8_t   NVM_ModelByte1;             /* 0x05 Model number (byte 1) */
        !           205:        u_int8_t   NVM_ModelInfo;              /* 0x06 Model information     */
        !           206:        u_int8_t   NVM_NumOfCh;                /* 0x07 Number of SCSI channel*/
        !           207:        u_int8_t   NVM_BIOSConfig1;            /* 0x08 BIOS configuration 1  */
        !           208: #define                       BIOSCFG_ENABLE     0x01 /*      BIOS enable           */
        !           209: #define                       BIOSCFG_8DRIVE     0x02 /*      Support > 2 drives    */
        !           210: #define                       BIOSCFG_REMOVABLE  0x04 /*      Support removable drv */
        !           211: #define                       BIOSCFG_INT19      0x08 /*      Intercept int 19h     */
        !           212: #define                       BIOSCFG_BIOSSCAN   0x10 /*      Dynamic BIOS scan     */
        !           213: #define                       BIOSCFG_LUNSUPPORT 0x40 /*      Support LUN           */
        !           214: #define                       BIOSCFG_DEFAULT    (BIOSCFG_ENABLE)
        !           215:        u_int8_t   NVM_BIOSConfig2;            /* 0x09 BIOS configuration 2  */
        !           216:        u_int8_t   NVM_HAConfig1;              /* 0x0a Host adapter config 1 */
        !           217: #define                       HACFG_BOOTIDMASK   0x0F /*      Boot ID number        */
        !           218: #define                       HACFG_LUNMASK      0x70 /*      Boot LUN number       */
        !           219: #define                       HACFG_CHANMASK     0x80 /*      Boot Channel number   */
        !           220:        u_int8_t   NVM_HAConfig2;              /* 0x0b Host adapter config 2 */
        !           221:        struct iha_nvram_scsi NVM_Scsi[2];     /* 0x0c                       */
        !           222:        u_int8_t   NVM_Reserved[10];           /* 0x34                       */
        !           223:
        !           224:        /* --------- CheckSum -----------------------------------------------*/
        !           225:        u_int16_t  NVM_CheckSum;               /* 0x3E Checksum of NVRam     */
        !           226: };
        !           227:
        !           228: /*
        !           229:  *  Tulip (aka inic-940/950) PCI Configuration Space Initio Specific Registers
        !           230:  *
        !           231:  *  Offsets 0x00 through 0x3f are the standard PCI Configuration Header
        !           232:  *  registers.
        !           233:  *
        !           234:  *  Offsets 0x40 through 0x4f, 0x51, 0x53, 0x57, 0x5b, 0x5e and 0x5f are
        !           235:  *  reserved registers.
        !           236:  *
        !           237:  *  Registers 0x50 and 0x52 always read as 0.
        !           238:  *
        !           239:  *  The register offset names and associated bit field names are taken
        !           240:  *  from the Inic-950 Data Sheet, Version 2.1, March 1997
        !           241:  */
        !           242: #define TUL_GCTRL0     0x54           /* R/W Global Control 0               */
        !           243: #define            EEPRG           0x04       /*     Enable EEPROM Programming      */
        !           244: #define TUL_GCTRL1     0x55           /* R/W Global Control 1               */
        !           245: #define            ATDEN           0x01       /*     Auto Termination Detect Enable */
        !           246: #define TUL_GSTAT      0x56           /* R/W Global Status - connector type */
        !           247: #define TUL_EPAD0      0x58           /* R/W External EEPROM Addr (lo byte) */
        !           248: #define TUL_EPAD1      0x59           /* R/W External EEPROM Addr (hi byte) */
        !           249: #define TUL_PNVPG      0x5A           /* R/W Data port to external BIOS     */
        !           250: #define TUL_EPDATA     0x5C           /* R/W EEPROM Data port               */
        !           251: #define TUL_NVRAM      0x5D           /* R/W Non-volatile RAM port          */
        !           252: #define     NVREAD         0x80       /*     Read from given NVRAM addr     */
        !           253: #define     NVWRITE         0x40       /*     Write to given NVRAM addr             */
        !           254: #define     NVENABLE_ERASE  0x30       /*     Enable NVRAM Erase/Write       */
        !           255: #define            NVRCS           0x08       /*     Select external NVRAM          */
        !           256: #define            NVRCK           0x04       /*     NVRAM Clock                    */
        !           257: #define            NVRDO           0x02       /*     NVRAM Write Data               */
        !           258: #define            NVRDI           0x01       /*     NVRAM Read  Data               */
        !           259:
        !           260: /*
        !           261:  *   Tulip (aka inic-940/950) SCSI Registers
        !           262:  */
        !           263: #define TUL_STCNT0     0x80           /* R/W 24 bit SCSI Xfer Count         */
        !           264: #define            TCNT            0x00ffffff /*     SCSI Xfer Transfer Count       */
        !           265: #define TUL_SFIFOCNT   0x83           /* R/W  5 bit FIFO counter            */
        !           266: #define            FIFOC           0x1f       /*     SCSI Offset Fifo Count         */
        !           267: #define TUL_SISTAT     0x84           /* R   Interrupt Register             */
        !           268: #define            RSELED          0x80       /*     Reselected                     */
        !           269: #define            STIMEO          0x40       /*     Selected/Reselected Timeout    */
        !           270: #define            SBSRV           0x20       /*     SCSI Bus Service               */
        !           271: #define            SRSTD           0x10       /*     SCSI Reset Detected            */
        !           272: #define            DISCD           0x08       /*     Disconnected Status            */
        !           273: #define            SELED           0x04       /*     Select Interrupt               */
        !           274: #define            SCAMSCT         0x02       /*     SCAM selected                  */
        !           275: #define            SCMDN           0x01       /*     Command Complete               */
        !           276: #define TUL_SIEN       0x84           /* W   Interrupt enable               */
        !           277: #define            ALL_INTERRUPTS  0xff
        !           278: #define TUL_STAT0      0x85           /* R   Status 0                       */
        !           279: #define            INTPD           0x80       /*     Interrupt pending              */
        !           280: #define            SQACT           0x40       /*     Sequencer active               */
        !           281: #define            XFCZ            0x20       /*     Xfer counter zero              */
        !           282: #define            SFEMP           0x10       /*     FIFO empty                     */
        !           283: #define            SPERR           0x08       /*     SCSI parity error              */
        !           284: #define            PH_MASK         0x07       /*     SCSI phase mask                */
        !           285: #define TUL_SCTRL0     0x85           /* W   Control 0                      */
        !           286: #define            RSSQC           0x20       /*     Reset sequence counter         */
        !           287: #define            RSFIFO          0x10       /*     Flush FIFO                     */
        !           288: #define            CMDAB           0x04       /*     Abort command (sequence)       */
        !           289: #define            RSMOD           0x02       /*     Reset SCSI Chip                */
        !           290: #define            RSCSI           0x01       /*     Reset SCSI Bus                 */
        !           291: #define TUL_STAT1      0x86           /* R   Status 1                       */
        !           292: #define            STRCV           0x80       /*     Status received                */
        !           293: #define            MSGST           0x40       /*     Message sent                   */
        !           294: #define            CPDNE           0x20       /*     Data phase done                */
        !           295: #define            DPHDN           0x10       /*     Data phase done                */
        !           296: #define            STSNT           0x08       /*     Status sent                    */
        !           297: #define            SXCMP           0x04       /*     Xfer completed                 */
        !           298: #define            SLCMP           0x02       /*     Selection completed            */
        !           299: #define            ARBCMP          0x01       /*     Arbitration completed          */
        !           300: #define TUL_SCTRL1     0x86           /* W   Control 1                      */
        !           301: #define            ENSCAM          0x80       /*     Enable SCAM                    */
        !           302: #define            NIDARB          0x40       /*     No ID for Arbitration          */
        !           303: #define            ENLRS           0x20       /*     Low Level Reselect             */
        !           304: #define            PWDN            0x10       /*     Power down mode                */
        !           305: #define            WCPU            0x08       /*     Wide CPU                       */
        !           306: #define            EHRSL           0x04       /*     Enable HW reselect             */
        !           307: #define            ESBUSOUT        0x02       /*     Enable SCSI data bus out latch */
        !           308: #define            ESBUSIN         0x01       /*     Enable SCSI data bus in latch  */
        !           309: #define TUL_SSTATUS2   0x87           /* R   Status 2                       */
        !           310: #define            SABRT           0x80       /*     Command aborted                */
        !           311: #define            OSCZ            0x40       /*     Offset counter zero            */
        !           312: #define            SFFUL           0x20       /*     FIFO full                      */
        !           313: #define            TMCZ            0x10       /*     Timeout counter zero           */
        !           314: #define            BSYGN           0x08       /*     Busy release                   */
        !           315: #define            PHMIS           0x04       /*     Phase mismatch                 */
        !           316: #define            SBEN            0x02       /*     SCSI data bus enable           */
        !           317: #define            SRST            0x01       /*     SCSI bus reset in progress     */
        !           318: #define TUL_SCONFIG0   0x87           /* W   Configuration                  */
        !           319: #define            PHLAT           0x80       /*     Enable phase latch             */
        !           320: #define            ITMOD           0x40       /*     Initiator mode                 */
        !           321: #define            SPCHK           0x20       /*     Enable SCSI parity             */
        !           322: #define            ADMA8           0x10       /*     Alternate dma 8-bits mode      */
        !           323: #define            ADMAW           0x08       /*     Alternate dma 16-bits mode     */
        !           324: #define            EDACK           0x04       /*     Enable DACK in wide SCSI xfer  */
        !           325: #define            ALTPD           0x02       /*     Alternate sync period mode     */
        !           326: #define            DSRST           0x01       /*     Disable SCSI Reset signal      */
        !           327: #define            SCONFIG0DEFAULT (PHLAT | ITMOD | ALTPD | DSRST)
        !           328: #define TUL_SOFSC      0x88           /* R   Offset                         */
        !           329: #define TUL_SYNCM      0x88           /* W   Sync. Xfer Period & Offset     */
        !           330: #define TUL_SBID       0x89           /* R   SCSI BUS ID                    */
        !           331: #define TUL_SID                0x89           /* W   SCSI ID                        */
        !           332: #define TUL_SALVC      0x8A           /* R   FIFO Avail Cnt/Identify Msg    */
        !           333: #define TUL_STIMO      0x8A           /* W   Sel/Resel Time Out Register    */
        !           334: #define TUL_SDATI      0x8B           /* R   SCSI Bus contents              */
        !           335: #define TUL_SDAT0      0x8B           /* W   SCSI Data Out                  */
        !           336: #define TUL_SFIFO      0x8C           /* R/W FIFO                           */
        !           337: #define TUL_SSIGI      0x90           /* R   SCSI signal in                 */
        !           338: #define            REQ             0x80       /*     REQ signal                     */
        !           339: #define            ACK             0x40       /*     ACK signal                     */
        !           340: #define            BSY             0x20       /*     BSY signal                     */
        !           341: #define            SEL             0x10       /*     SEL signal                     */
        !           342: #define            ATN             0x08       /*     ATN signal                     */
        !           343: #define            MSG             0x04       /*     MSG signal                     */
        !           344: #define            CD              0x02       /*     C/D signal                     */
        !           345: #define            IO              0x01       /*     I/O signal                     */
        !           346: #define TUL_SSIGO      0x90           /* W   SCSI signal out                */
        !           347: #define TUL_SCMD       0x91           /* R/W SCSI Command                   */
        !           348: #define            NO_OP           0x00       /*     Place Holder for tulip_wait()  */
        !           349: #define            SEL_NOATN       0x01       /*     Select w/o ATN Sequence        */
        !           350: #define            XF_FIFO_OUT     0x03       /*     FIFO Xfer Information out      */
        !           351: #define            MSG_ACCEPT      0x0F       /*     Message Accept                 */
        !           352: #define            SEL_ATN         0x11       /*     Select w ATN Sequence          */
        !           353: #define            SEL_ATNSTOP     0x12       /*     Select w ATN & Stop Sequence   */
        !           354: #define            SELATNSTOP      0x1E       /*     Select w ATN & Stop Sequence   */
        !           355: #define            SEL_ATN3        0x31       /*     Select w ATN3 Sequence         */
        !           356: #define            XF_DMA_OUT      0x43       /*     DMA Xfer Information out       */
        !           357: #define            EN_RESEL        0x80       /*     Enable Reselection             */
        !           358: #define            XF_FIFO_IN      0x83       /*     FIFO Xfer Information in       */
        !           359: #define            CMD_COMP        0x84       /*     Command Complete Sequence      */
        !           360: #define            XF_DMA_IN       0xC3       /*     DMA Xfer Information in        */
        !           361: #define TUL_STEST0     0x92           /* R/W Test0                          */
        !           362: #define TUL_STEST1     0x93           /* R/W Test1                          */
        !           363:
        !           364: /*
        !           365:  *   Tulip (aka inic-940/950) DMA Registers
        !           366:  */
        !           367: #define TUL_DXPA       0xC0           /* R/W DMA      Xfer Physcl Addr  0-31*/
        !           368: #define TUL_DXPAE      0xC4           /* R/W DMA      Xfer Physcl Addr 32-63*/
        !           369: #define TUL_DCXA       0xC8           /* R   DMA Curr Xfer Physcl Addr  0-31*/
        !           370: #define TUL_DCXAE      0xCC           /* R   DMA Curr Xfer Physcl Addr 32-63*/
        !           371: #define TUL_DXC                0xD0           /* R/W DMA Xfer Counter               */
        !           372: #define TUL_DCXC       0xD4           /* R   DMA Current Xfer Counter       */
        !           373: #define TUL_DCMD       0xD8           /* R/W DMA Command Register           */
        !           374: #define            SGXFR           0x80       /*     Scatter/Gather Xfer            */
        !           375: #define            RSVD            0x40       /*     Reserved - always reads as 0   */
        !           376: #define            XDIR            0x20       /*     Xfer Direction 0/1 = out/in    */
        !           377: #define            BMTST           0x10       /*     Bus Master Test                */
        !           378: #define            CLFIFO          0x08       /*     Clear FIFO                     */
        !           379: #define            ABTXFR          0x04       /*     Abort Xfer                     */
        !           380: #define            FRXFR           0x02       /*     Force Xfer                     */
        !           381: #define            STRXFR          0x01       /*     Start Xfer                     */
        !           382: #define            ST_X_IN         (XDIR | STRXFR)
        !           383: #define            ST_X_OUT        (       STRXFR)
        !           384: #define            ST_SG_IN        (SGXFR | ST_X_IN)
        !           385: #define            ST_SG_OUT       (SGXFR | ST_X_OUT)
        !           386: #define TUL_ISTUS0     0xDC           /* R/W Interrupt Status Register      */
        !           387: #define            DGINT           0x80       /*     DMA Global Interrupt           */
        !           388: #define            RSVRD0          0x40       /*     Reserved                       */
        !           389: #define            RSVRD1          0x20       /*     Reserved                       */
        !           390: #define            SCMP            0x10       /*     SCSI Complete                  */
        !           391: #define            PXERR           0x08       /*     PCI Xfer Error                 */
        !           392: #define            DABT            0x04       /*     DMA Xfer Aborted               */
        !           393: #define            FXCMP           0x02       /*     Forced Xfer Complete           */
        !           394: #define            XCMP            0x01       /*     Bus Master Xfer Complete       */
        !           395: #define TUL_ISTUS1     0xDD           /* R   DMA status Register            */
        !           396: #define            SCBSY           0x08       /*     SCSI Busy                      */
        !           397: #define            FFULL           0x04       /*     FIFO Full                      */
        !           398: #define            FEMPT           0x02       /*     FIFO Empty                     */
        !           399: #define            XPEND           0x01       /*     Xfer pending                   */
        !           400: #define TUL_IMSK       0xE0           /* R/W Interrupt Mask Register        */
        !           401: #define            MSCMP           0x10       /*     Mask SCSI Complete             */
        !           402: #define            MPXFER          0x08       /*     Mask PCI Xfer Error            */
        !           403: #define            MDABT           0x04       /*     Mask Bus Master Abort          */
        !           404: #define            MFCMP           0x02       /*     Mask Force Xfer Complete       */
        !           405: #define            MXCMP           0x01       /*     Mask Bus Master Xfer Complete  */
        !           406: #define            MASK_ALL        (MXCMP | MFCMP | MDABT | MPXFER | MSCMP)
        !           407: #define TUL_DCTRL0     0xE4           /* R/W DMA Control Register           */
        !           408: #define            SXSTP           0x80       /*     SCSI Xfer Stop                 */
        !           409: #define            RPMOD           0x40       /*     Reset PCI Module               */
        !           410: #define            RSVRD2          0x20       /*     SCSI Xfer Stop                 */
        !           411: #define            PWDWN           0x10       /*     Power Down                     */
        !           412: #define            ENTM            0x08       /*     Enable SCSI Terminator Low     */
        !           413: #define            ENTMW           0x04       /*     Enable SCSI Terminator High    */
        !           414: #define            DISAFC          0x02       /*     Disable Auto Clear             */
        !           415: #define            LEDCTL          0x01       /*     LED Control                    */
        !           416: #define TUL_DCTRL1     0xE5           /* R/W DMA Control Register 1         */
        !           417: #define            SDWS            0x01       /*     SCSI DMA Wait State            */
        !           418: #define TUL_DFIFO      0xE8           /* R/W DMA FIFO                       */
        !           419:
        !           420: #define TUL_WCTRL      0xF7           /* ?/? Bus master wait state control  */
        !           421: #define TUL_DCTRL      0xFB           /* ?/? DMA delay control              */
        !           422:
        !           423: /* Functions used by higher SCSI layers, the kernel, or iha.c and iha_pci.c  */
        !           424:
        !           425: int  iha_scsi_cmd(struct scsi_xfer *);
        !           426: int  iha_intr(void *);
        !           427: void iha_minphys(struct buf *);
        !           428: int  iha_init_tulip(struct iha_softc *);
        !           429:
        !           430:

CVSweb