1 1.9 tsutsui /* $NetBSD: ihareg.h,v 1.9 2008/05/03 05:21:25 tsutsui Exp $ */ 2 1.4 tsutsui 3 1.4 tsutsui /*- 4 1.4 tsutsui * Device driver for the INI-9XXXU/UW or INIC-940/950 PCI SCSI Controller. 5 1.4 tsutsui * 6 1.4 tsutsui * Written for 386bsd and FreeBSD by 7 1.4 tsutsui * Winston Hung <winstonh (at) initio.com> 8 1.1 tsutsui * 9 1.4 tsutsui * Copyright (c) 1997-1999 Initio Corp. 10 1.1 tsutsui * Copyright (c) 2000 Ken Westerback 11 1.1 tsutsui * All rights reserved. 12 1.1 tsutsui * 13 1.1 tsutsui * Redistribution and use in source and binary forms, with or without 14 1.1 tsutsui * modification, are permitted provided that the following conditions 15 1.1 tsutsui * are met: 16 1.1 tsutsui * 1. Redistributions of source code must retain the above copyright 17 1.1 tsutsui * notice, this list of conditions and the following disclaimer, 18 1.1 tsutsui * without modification, immediately at the beginning of the file. 19 1.1 tsutsui * 2. The name of the author may not be used to endorse or promote products 20 1.1 tsutsui * derived from this software without specific prior written permission. 21 1.1 tsutsui * 22 1.1 tsutsui * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 1.1 tsutsui * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 1.1 tsutsui * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 1.1 tsutsui * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, 26 1.1 tsutsui * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 27 1.1 tsutsui * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 28 1.1 tsutsui * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 1.1 tsutsui * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 30 1.1 tsutsui * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 31 1.1 tsutsui * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 32 1.1 tsutsui * THE POSSIBILITY OF SUCH DAMAGE. 33 1.1 tsutsui */ 34 1.1 tsutsui 35 1.1 tsutsui /* 36 1.9 tsutsui * Ported to NetBSD by Izumi Tsutsui <tsutsui (at) NetBSD.org> from OpenBSD: 37 1.1 tsutsui * $OpenBSD: iha.h,v 1.2 2001/02/08 17:35:05 krw Exp $ 38 1.1 tsutsui */ 39 1.1 tsutsui 40 1.1 tsutsui /* 41 1.2 tsutsui * Tulip (aka inic-940/950) PCI Configuration Space Initio Specific Registers 42 1.1 tsutsui * 43 1.1 tsutsui * Offsets 0x00 through 0x3f are the standard PCI Configuration Header 44 1.1 tsutsui * registers. 45 1.1 tsutsui * 46 1.1 tsutsui * Offsets 0x40 through 0x4f, 0x51, 0x53, 0x57, 0x5b, 0x5e and 0x5f are 47 1.1 tsutsui * reserved registers. 48 1.1 tsutsui * 49 1.1 tsutsui * Registers 0x50 and 0x52 always read as 0. 50 1.1 tsutsui * 51 1.1 tsutsui * The register offset names and associated bit field names are taken 52 1.2 tsutsui * from the Inic-950 Data Sheet, Version 2.1, March 1997 53 1.1 tsutsui */ 54 1.1 tsutsui #define TUL_GCTRL0 0x54 /* R/W Global Control 0 */ 55 1.1 tsutsui #define EEPRG 0x04 /* Enable EEPROM Programming */ 56 1.1 tsutsui #define TUL_GCTRL1 0x55 /* R/W Global Control 1 */ 57 1.1 tsutsui #define ATDEN 0x01 /* Auto Termination Detect Enable */ 58 1.1 tsutsui #define TUL_GSTAT 0x56 /* R/W Global Status - connector type */ 59 1.1 tsutsui #define TUL_EPAD0 0x58 /* R/W External EEPROM Addr (lo byte) */ 60 1.1 tsutsui #define TUL_EPAD1 0x59 /* R/W External EEPROM Addr (hi byte) */ 61 1.1 tsutsui #define TUL_PNVPG 0x5A /* R/W Data port to external BIOS */ 62 1.1 tsutsui #define TUL_EPDATA 0x5C /* R/W EEPROM Data port */ 63 1.1 tsutsui #define TUL_NVRAM 0x5D /* R/W Non-volatile RAM port */ 64 1.1 tsutsui #define READ 0x80 /* Read from given NVRAM addr */ 65 1.1 tsutsui #define WRITE 0x40 /* Write to given NVRAM addr */ 66 1.1 tsutsui #define ENABLE_ERASE 0x30 /* Enable NVRAM Erase/Write */ 67 1.1 tsutsui #define NVRCS 0x08 /* Select external NVRAM */ 68 1.1 tsutsui #define NVRCK 0x04 /* NVRAM Clock */ 69 1.1 tsutsui #define NVRDO 0x02 /* NVRAM Write Data */ 70 1.1 tsutsui #define NVRDI 0x01 /* NVRAM Read Data */ 71 1.1 tsutsui 72 1.1 tsutsui /* 73 1.2 tsutsui * Tulip (aka inic-940/950) SCSI Registers 74 1.1 tsutsui */ 75 1.1 tsutsui #define TUL_STCNT0 0x80 /* R/W 24 bit SCSI Xfer Count */ 76 1.1 tsutsui #define TCNT 0x00ffffff /* SCSI Xfer Transfer Count */ 77 1.1 tsutsui #define TUL_SFIFOCNT 0x83 /* R/W 5 bit FIFO counter */ 78 1.1 tsutsui #define FIFOC 0x1f /* SCSI Offset Fifo Count */ 79 1.1 tsutsui #define TUL_SISTAT 0x84 /* R Interrupt Register */ 80 1.1 tsutsui #define RSELED 0x80 /* Reselected */ 81 1.1 tsutsui #define STIMEO 0x40 /* Selected/Reselected Timeout */ 82 1.1 tsutsui #define SBSRV 0x20 /* SCSI Bus Service */ 83 1.1 tsutsui #define SRSTD 0x10 /* SCSI Reset Detected */ 84 1.1 tsutsui #define DISCD 0x08 /* Disconnected Status */ 85 1.1 tsutsui #define SELED 0x04 /* Select Interrupt */ 86 1.1 tsutsui #define SCAMSCT 0x02 /* SCAM selected */ 87 1.1 tsutsui #define SCMDN 0x01 /* Command Complete */ 88 1.1 tsutsui #define TUL_SIEN 0x84 /* W Interrupt enable */ 89 1.1 tsutsui #define ALL_INTERRUPTS 0xff 90 1.1 tsutsui #define TUL_STAT0 0x85 /* R Status 0 */ 91 1.1 tsutsui #define INTPD 0x80 /* Interrupt pending */ 92 1.1 tsutsui #define SQACT 0x40 /* Sequencer active */ 93 1.1 tsutsui #define XFCZ 0x20 /* Xfer counter zero */ 94 1.1 tsutsui #define SFEMP 0x10 /* FIFO empty */ 95 1.1 tsutsui #define SPERR 0x08 /* SCSI parity error */ 96 1.1 tsutsui #define PH_MASK 0x07 /* SCSI phase mask */ 97 1.1 tsutsui #define TUL_SCTRL0 0x85 /* W Control 0 */ 98 1.1 tsutsui #define RSSQC 0x20 /* Reset sequence counter */ 99 1.1 tsutsui #define RSFIFO 0x10 /* Flush FIFO */ 100 1.1 tsutsui #define CMDAB 0x04 /* Abort command (sequence) */ 101 1.1 tsutsui #define RSMOD 0x02 /* Reset SCSI Chip */ 102 1.1 tsutsui #define RSCSI 0x01 /* Reset SCSI Bus */ 103 1.1 tsutsui #define TUL_STAT1 0x86 /* R Status 1 */ 104 1.1 tsutsui #define STRCV 0x80 /* Status received */ 105 1.1 tsutsui #define MSGST 0x40 /* Message sent */ 106 1.1 tsutsui #define CPDNE 0x20 /* Data phase done */ 107 1.1 tsutsui #define DPHDN 0x10 /* Data phase done */ 108 1.1 tsutsui #define STSNT 0x08 /* Status sent */ 109 1.1 tsutsui #define SXCMP 0x04 /* Xfer completed */ 110 1.1 tsutsui #define SLCMP 0x02 /* Selection completed */ 111 1.1 tsutsui #define ARBCMP 0x01 /* Arbitration completed */ 112 1.1 tsutsui #define TUL_SCTRL1 0x86 /* W Control 1 */ 113 1.1 tsutsui #define ENSCAM 0x80 /* Enable SCAM */ 114 1.1 tsutsui #define NIDARB 0x40 /* No ID for Arbitration */ 115 1.1 tsutsui #define ENLRS 0x20 /* Low Level Reselect */ 116 1.1 tsutsui #define PWDN 0x10 /* Power down mode */ 117 1.1 tsutsui #define WCPU 0x08 /* Wide CPU */ 118 1.1 tsutsui #define EHRSL 0x04 /* Enable HW reselect */ 119 1.1 tsutsui #define ESBUSOUT 0x02 /* Enable SCSI data bus out latch */ 120 1.1 tsutsui #define ESBUSIN 0x01 /* Enable SCSI data bus in latch */ 121 1.1 tsutsui #define TUL_SSTATUS2 0x87 /* R Status 2 */ 122 1.1 tsutsui #define SABRT 0x80 /* Command aborted */ 123 1.1 tsutsui #define OSCZ 0x40 /* Offset counter zero */ 124 1.1 tsutsui #define SFFUL 0x20 /* FIFO full */ 125 1.1 tsutsui #define TMCZ 0x10 /* Timeout counter zero */ 126 1.1 tsutsui #define BSYGN 0x08 /* Busy release */ 127 1.1 tsutsui #define PHMIS 0x04 /* Phase mismatch */ 128 1.1 tsutsui #define SBEN 0x02 /* SCSI data bus enable */ 129 1.1 tsutsui #define SRST 0x01 /* SCSI bus reset in progress */ 130 1.1 tsutsui #define TUL_SCONFIG0 0x87 /* W Configuration */ 131 1.1 tsutsui #define PHLAT 0x80 /* Enable phase latch */ 132 1.1 tsutsui #define ITMOD 0x40 /* Initiator mode */ 133 1.1 tsutsui #define SPCHK 0x20 /* Enable SCSI parity */ 134 1.1 tsutsui #define ADMA8 0x10 /* Alternate dma 8-bits mode */ 135 1.1 tsutsui #define ADMAW 0x08 /* Alternate dma 16-bits mode */ 136 1.1 tsutsui #define EDACK 0x04 /* Enable DACK in wide SCSI xfer */ 137 1.1 tsutsui #define ALTPD 0x02 /* Alternate sync period mode */ 138 1.1 tsutsui #define DSRST 0x01 /* Disable SCSI Reset signal */ 139 1.1 tsutsui #define SCONFIG0DEFAULT (PHLAT | ITMOD | ALTPD | DSRST) 140 1.1 tsutsui #define TUL_SOFSC 0x88 /* R Offset */ 141 1.1 tsutsui #define PERIOD_WIDE_SCSI 0x80 /* Enable Wide SCSI */ 142 1.1 tsutsui #define PERIOD_SYXPD 0x70 /* Synch. SCSI Xfer rate */ 143 1.1 tsutsui #define PERIOD_SYOFS 0x0f /* Synch. SCSI Offset */ 144 1.1 tsutsui #define TUL_SYNCM 0x88 /* W Sync. Xfer Period & Offset */ 145 1.1 tsutsui #define TUL_SBID 0x89 /* R SCSI BUS ID */ 146 1.1 tsutsui #define TUL_SID 0x89 /* W SCSI ID */ 147 1.1 tsutsui #define TUL_SALVC 0x8A /* R FIFO Avail Cnt/Identify Msg */ 148 1.6 jmc #define IHA_MSG_IDENTIFY_LUNMASK 0x07 149 1.1 tsutsui #define TUL_STIMO 0x8A /* W Sel/Resel Time Out Register */ 150 1.1 tsutsui #define STIMO_250MS 153 /* in units of 1.6385us */ 151 1.1 tsutsui #define TUL_SDATI 0x8B /* R SCSI Bus contents */ 152 1.1 tsutsui #define TUL_SDAT0 0x8B /* W SCSI Data Out */ 153 1.1 tsutsui #define TUL_SFIFO 0x8C /* R/W FIFO */ 154 1.1 tsutsui #define TUL_SSIGI 0x90 /* R SCSI signal in */ 155 1.1 tsutsui #define REQ 0x80 /* REQ signal */ 156 1.1 tsutsui #define ACK 0x40 /* ACK signal */ 157 1.1 tsutsui #define BSY 0x20 /* BSY signal */ 158 1.1 tsutsui #define SEL 0x10 /* SEL signal */ 159 1.1 tsutsui #define ATN 0x08 /* ATN signal */ 160 1.1 tsutsui #define MSG 0x04 /* MSG signal */ 161 1.1 tsutsui #define CD 0x02 /* C/D signal */ 162 1.1 tsutsui #define IO 0x01 /* I/O signal */ 163 1.1 tsutsui #define TUL_SSIGO 0x90 /* W SCSI signal out */ 164 1.1 tsutsui #define TUL_SCMD 0x91 /* R/W SCSI Command */ 165 1.1 tsutsui #define NO_OP 0x00 /* Place Holder for tulip_wait() */ 166 1.1 tsutsui #define SEL_NOATN 0x01 /* Select w/o ATN Sequence */ 167 1.7 wiz #define XF_FIFO_OUT 0x03 /* FIFO Xfer Information out */ 168 1.1 tsutsui #define MSG_ACCEPT 0x0F /* Message Accept */ 169 1.1 tsutsui #define SEL_ATN 0x11 /* Select w ATN Sequence */ 170 1.1 tsutsui #define SEL_ATNSTOP 0x12 /* Select w ATN & Stop Sequence */ 171 1.1 tsutsui #define SELATNSTOP 0x1E /* Select w ATN & Stop Sequence */ 172 1.1 tsutsui #define SEL_ATN3 0x31 /* Select w ATN3 Sequence */ 173 1.7 wiz #define XF_DMA_OUT 0x43 /* DMA Xfer Information out */ 174 1.1 tsutsui #define EN_RESEL 0x80 /* Enable Reselection */ 175 1.7 wiz #define XF_FIFO_IN 0x83 /* FIFO Xfer Information in */ 176 1.1 tsutsui #define CMD_COMP 0x84 /* Command Complete Sequence */ 177 1.7 wiz #define XF_DMA_IN 0xC3 /* DMA Xfer Information in */ 178 1.1 tsutsui #define TUL_STEST0 0x92 /* R/W Test0 */ 179 1.1 tsutsui #define TUL_STEST1 0x93 /* R/W Test1 */ 180 1.1 tsutsui 181 1.1 tsutsui /* 182 1.2 tsutsui * Tulip (aka inic-940/950) DMA Registers 183 1.1 tsutsui */ 184 1.1 tsutsui #define TUL_DXPA 0xC0 /* R/W DMA Xfer Physcl Addr 0-31*/ 185 1.1 tsutsui #define TUL_DXPAE 0xC4 /* R/W DMA Xfer Physcl Addr 32-63*/ 186 1.1 tsutsui #define TUL_DCXA 0xC8 /* R DMA Curr Xfer Physcl Addr 0-31*/ 187 1.1 tsutsui #define TUL_DCXAE 0xCC /* R DMA Curr Xfer Physcl Addr 32-63*/ 188 1.1 tsutsui #define TUL_DXC 0xD0 /* R/W DMA Xfer Counter */ 189 1.1 tsutsui #define TUL_DCXC 0xD4 /* R DMA Current Xfer Counter */ 190 1.1 tsutsui #define TUL_DCMD 0xD8 /* R/W DMA Command Register */ 191 1.1 tsutsui #define SGXFR 0x80 /* Scatter/Gather Xfer */ 192 1.1 tsutsui #define RSVD 0x40 /* Reserved - always reads as 0 */ 193 1.1 tsutsui #define XDIR 0x20 /* Xfer Direction 0/1 = out/in */ 194 1.1 tsutsui #define BMTST 0x10 /* Bus Master Test */ 195 1.1 tsutsui #define CLFIFO 0x08 /* Clear FIFO */ 196 1.1 tsutsui #define ABTXFR 0x04 /* Abort Xfer */ 197 1.1 tsutsui #define FRXFR 0x02 /* Force Xfer */ 198 1.1 tsutsui #define STRXFR 0x01 /* Start Xfer */ 199 1.1 tsutsui #define TUL_ISTUS0 0xDC /* R/W Interrupt Status Register */ 200 1.1 tsutsui #define DGINT 0x80 /* DMA Global Interrupt */ 201 1.1 tsutsui #define RSVRD0 0x40 /* Reserved */ 202 1.1 tsutsui #define RSVRD1 0x20 /* Reserved */ 203 1.1 tsutsui #define SCMP 0x10 /* SCSI Complete */ 204 1.1 tsutsui #define PXERR 0x08 /* PCI Xfer Error */ 205 1.1 tsutsui #define DABT 0x04 /* DMA Xfer Aborted */ 206 1.1 tsutsui #define FXCMP 0x02 /* Forced Xfer Complete */ 207 1.1 tsutsui #define XCMP 0x01 /* Bus Master Xfer Complete */ 208 1.1 tsutsui #define TUL_ISTUS1 0xDD /* R DMA status Register */ 209 1.1 tsutsui #define SCBSY 0x08 /* SCSI Busy */ 210 1.1 tsutsui #define FFULL 0x04 /* FIFO Full */ 211 1.1 tsutsui #define FEMPT 0x02 /* FIFO Empty */ 212 1.1 tsutsui #define XPEND 0x01 /* Xfer pending */ 213 1.1 tsutsui #define TUL_IMSK 0xE0 /* R/W Interrupt Mask Register */ 214 1.1 tsutsui #define MSCMP 0x10 /* Mask SCSI Complete */ 215 1.1 tsutsui #define MPXFER 0x08 /* Mask PCI Xfer Error */ 216 1.1 tsutsui #define MDABT 0x04 /* Mask Bus Master Abort */ 217 1.1 tsutsui #define MFCMP 0x02 /* Mask Force Xfer Complete */ 218 1.1 tsutsui #define MXCMP 0x01 /* Mask Bus Master Xfer Complete */ 219 1.1 tsutsui #define MASK_ALL (MXCMP | MFCMP | MDABT | MPXFER | MSCMP) 220 1.1 tsutsui #define TUL_DCTRL0 0xE4 /* R/W DMA Control Register */ 221 1.1 tsutsui #define SXSTP 0x80 /* SCSI Xfer Stop */ 222 1.1 tsutsui #define RPMOD 0x40 /* Reset PCI Module */ 223 1.1 tsutsui #define RSVRD2 0x20 /* SCSI Xfer Stop */ 224 1.1 tsutsui #define PWDWN 0x10 /* Power Down */ 225 1.1 tsutsui #define ENTM 0x08 /* Enable SCSI Terminator Low */ 226 1.1 tsutsui #define ENTMW 0x04 /* Enable SCSI Terminator High */ 227 1.1 tsutsui #define DISAFC 0x02 /* Disable Auto Clear */ 228 1.1 tsutsui #define LEDCTL 0x01 /* LED Control */ 229 1.1 tsutsui #define TUL_DCTRL1 0xE5 /* R/W DMA Control Register 1 */ 230 1.1 tsutsui #define SDWS 0x01 /* SCSI DMA Wait State */ 231 1.1 tsutsui #define TUL_DFIFO 0xE8 /* R/W DMA FIFO */ 232 1.1 tsutsui 233 1.1 tsutsui #define TUL_WCTRL 0xF7 /* ?/? Bus master wait state control */ 234 1.1 tsutsui #define TUL_DCTRL 0xFB /* ?/? DMA delay control */ 235