1 1.1 fvdl /* 2 1.1 fvdl * Aic7xxx register and scratch ram definitions. 3 1.1 fvdl * 4 1.2 fvdl * Copyright (c) 1994-2001 Justin T. Gibbs. 5 1.2 fvdl * Copyright (c) 2000-2001 Adaptec Inc. 6 1.1 fvdl * All rights reserved. 7 1.1 fvdl * 8 1.1 fvdl * Redistribution and use in source and binary forms, with or without 9 1.1 fvdl * modification, are permitted provided that the following conditions 10 1.1 fvdl * are met: 11 1.1 fvdl * 1. Redistributions of source code must retain the above copyright 12 1.1 fvdl * notice, this list of conditions, and the following disclaimer, 13 1.1 fvdl * without modification. 14 1.2 fvdl * 2. Redistributions in binary form must reproduce at minimum a disclaimer 15 1.2 fvdl * substantially similar to the "NO WARRANTY" disclaimer below 16 1.2 fvdl * ("Disclaimer") and any redistribution must be conditioned upon 17 1.2 fvdl * including a substantially similar Disclaimer requirement for further 18 1.2 fvdl * binary redistribution. 19 1.2 fvdl * 3. Neither the names of the above-listed copyright holders nor the names 20 1.2 fvdl * of any contributors may be used to endorse or promote products derived 21 1.2 fvdl * from this software without specific prior written permission. 22 1.1 fvdl * 23 1.1 fvdl * Alternatively, this software may be distributed under the terms of the 24 1.2 fvdl * GNU General Public License ("GPL") version 2 as published by the Free 25 1.2 fvdl * Software Foundation. 26 1.1 fvdl * 27 1.2 fvdl * NO WARRANTY 28 1.2 fvdl * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 29 1.2 fvdl * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 30 1.2 fvdl * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 31 1.2 fvdl * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 32 1.2 fvdl * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 1.1 fvdl * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 1.1 fvdl * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 1.2 fvdl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36 1.2 fvdl * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 37 1.2 fvdl * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38 1.2 fvdl * POSSIBILITY OF SUCH DAMAGES. 39 1.1 fvdl * 40 1.2 fvdl * $FreeBSD: /repoman/r/ncvs/src/sys/dev/aic7xxx/aic7xxx.reg,v 1.43 2003/01/20 20:44:55 gibbs Exp $ 41 1.1 fvdl */ 42 1.8 andvar VERSION = "$NetBSD: aic7xxx.reg,v 1.8 2025/08/18 20:59:56 andvar Exp $" 43 1.1 fvdl 44 1.1 fvdl /* 45 1.1 fvdl * This file is processed by the aic7xxx_asm utility for use in assembling 46 1.1 fvdl * firmware for the aic7xxx family of SCSI host adapters as well as to generate 47 1.1 fvdl * a C header file for use in the kernel portion of the Aic7xxx driver. 48 1.1 fvdl * 49 1.1 fvdl * All page numbers refer to the Adaptec AIC-7770 Data Book available from 50 1.1 fvdl * Adaptec's Technical Documents Department 1-800-934-2766 51 1.1 fvdl */ 52 1.1 fvdl 53 1.1 fvdl /* 54 1.1 fvdl * SCSI Sequence Control (p. 3-11). 55 1.1 fvdl * Each bit, when set starts a specific SCSI sequence on the bus 56 1.1 fvdl */ 57 1.1 fvdl register SCSISEQ { 58 1.1 fvdl address 0x000 59 1.1 fvdl access_mode RW 60 1.2 fvdl field TEMODE 0x80 61 1.2 fvdl field ENSELO 0x40 62 1.2 fvdl field ENSELI 0x20 63 1.2 fvdl field ENRSELI 0x10 64 1.2 fvdl field ENAUTOATNO 0x08 65 1.2 fvdl field ENAUTOATNI 0x04 66 1.2 fvdl field ENAUTOATNP 0x02 67 1.2 fvdl field SCSIRSTO 0x01 68 1.1 fvdl } 69 1.1 fvdl 70 1.1 fvdl /* 71 1.1 fvdl * SCSI Transfer Control 0 Register (pp. 3-13). 72 1.1 fvdl * Controls the SCSI module data path. 73 1.1 fvdl */ 74 1.1 fvdl register SXFRCTL0 { 75 1.1 fvdl address 0x001 76 1.1 fvdl access_mode RW 77 1.2 fvdl field DFON 0x80 78 1.2 fvdl field DFPEXP 0x40 79 1.2 fvdl field FAST20 0x20 80 1.2 fvdl field CLRSTCNT 0x10 81 1.2 fvdl field SPIOEN 0x08 82 1.2 fvdl field SCAMEN 0x04 83 1.2 fvdl field CLRCHN 0x02 84 1.1 fvdl } 85 1.1 fvdl 86 1.1 fvdl /* 87 1.1 fvdl * SCSI Transfer Control 1 Register (pp. 3-14,15). 88 1.1 fvdl * Controls the SCSI module data path. 89 1.1 fvdl */ 90 1.1 fvdl register SXFRCTL1 { 91 1.1 fvdl address 0x002 92 1.1 fvdl access_mode RW 93 1.2 fvdl field BITBUCKET 0x80 94 1.2 fvdl field SWRAPEN 0x40 95 1.2 fvdl field ENSPCHK 0x20 96 1.1 fvdl mask STIMESEL 0x18 97 1.2 fvdl field ENSTIMER 0x04 98 1.2 fvdl field ACTNEGEN 0x02 99 1.2 fvdl field STPWEN 0x01 /* Powered Termination */ 100 1.1 fvdl } 101 1.1 fvdl 102 1.1 fvdl /* 103 1.1 fvdl * SCSI Control Signal Read Register (p. 3-15). 104 1.1 fvdl * Reads the actual state of the SCSI bus pins 105 1.1 fvdl */ 106 1.1 fvdl register SCSISIGI { 107 1.1 fvdl address 0x003 108 1.1 fvdl access_mode RO 109 1.2 fvdl field CDI 0x80 110 1.2 fvdl field IOI 0x40 111 1.2 fvdl field MSGI 0x20 112 1.2 fvdl field ATNI 0x10 113 1.2 fvdl field SELI 0x08 114 1.2 fvdl field BSYI 0x04 115 1.2 fvdl field REQI 0x02 116 1.2 fvdl field ACKI 0x01 117 1.1 fvdl /* 118 1.1 fvdl * Possible phases in SCSISIGI 119 1.1 fvdl */ 120 1.1 fvdl mask PHASE_MASK CDI|IOI|MSGI 121 1.1 fvdl mask P_DATAOUT 0x00 122 1.1 fvdl mask P_DATAIN IOI 123 1.2 fvdl mask P_DATAOUT_DT P_DATAOUT|MSGI 124 1.2 fvdl mask P_DATAIN_DT P_DATAIN|MSGI 125 1.1 fvdl mask P_COMMAND CDI 126 1.1 fvdl mask P_MESGOUT CDI|MSGI 127 1.1 fvdl mask P_STATUS CDI|IOI 128 1.1 fvdl mask P_MESGIN CDI|IOI|MSGI 129 1.1 fvdl } 130 1.1 fvdl 131 1.1 fvdl /* 132 1.1 fvdl * SCSI Control Signal Write Register (p. 3-16). 133 1.1 fvdl * Writing to this register modifies the control signals on the bus. Only 134 1.1 fvdl * those signals that are allowed in the current mode (Initiator/Target) are 135 1.1 fvdl * asserted. 136 1.1 fvdl */ 137 1.1 fvdl register SCSISIGO { 138 1.1 fvdl address 0x003 139 1.1 fvdl access_mode WO 140 1.2 fvdl field CDO 0x80 141 1.2 fvdl field IOO 0x40 142 1.2 fvdl field MSGO 0x20 143 1.2 fvdl field ATNO 0x10 144 1.2 fvdl field SELO 0x08 145 1.2 fvdl field BSYO 0x04 146 1.2 fvdl field REQO 0x02 147 1.2 fvdl field ACKO 0x01 148 1.1 fvdl /* 149 1.1 fvdl * Possible phases to write into SCSISIG0 150 1.1 fvdl */ 151 1.1 fvdl mask PHASE_MASK CDI|IOI|MSGI 152 1.1 fvdl mask P_DATAOUT 0x00 153 1.1 fvdl mask P_DATAIN IOI 154 1.1 fvdl mask P_COMMAND CDI 155 1.1 fvdl mask P_MESGOUT CDI|MSGI 156 1.1 fvdl mask P_STATUS CDI|IOI 157 1.1 fvdl mask P_MESGIN CDI|IOI|MSGI 158 1.1 fvdl } 159 1.1 fvdl 160 1.3 perry /* 161 1.1 fvdl * SCSI Rate Control (p. 3-17). 162 1.1 fvdl * Contents of this register determine the Synchronous SCSI data transfer 163 1.1 fvdl * rate and the maximum synchronous Req/Ack offset. An offset of 0 in the 164 1.1 fvdl * SOFS (3:0) bits disables synchronous data transfers. Any offset value 165 1.1 fvdl * greater than 0 enables synchronous transfers. 166 1.1 fvdl */ 167 1.1 fvdl register SCSIRATE { 168 1.1 fvdl address 0x004 169 1.1 fvdl access_mode RW 170 1.2 fvdl field WIDEXFER 0x80 /* Wide transfer control */ 171 1.2 fvdl field ENABLE_CRC 0x40 /* CRC for D-Phases */ 172 1.2 fvdl field SINGLE_EDGE 0x10 /* Disable DT Transfers */ 173 1.1 fvdl mask SXFR 0x70 /* Sync transfer rate */ 174 1.1 fvdl mask SXFR_ULTRA2 0x0f /* Sync transfer rate */ 175 1.1 fvdl mask SOFS 0x0f /* Sync offset */ 176 1.1 fvdl } 177 1.1 fvdl 178 1.1 fvdl /* 179 1.1 fvdl * SCSI ID (p. 3-18). 180 1.1 fvdl * Contains the ID of the board and the current target on the 181 1.1 fvdl * selected channel. 182 1.1 fvdl */ 183 1.1 fvdl register SCSIID { 184 1.1 fvdl address 0x005 185 1.1 fvdl access_mode RW 186 1.1 fvdl mask TID 0xf0 /* Target ID mask */ 187 1.2 fvdl mask TWIN_TID 0x70 188 1.2 fvdl field TWIN_CHNLB 0x80 189 1.1 fvdl mask OID 0x0f /* Our ID mask */ 190 1.1 fvdl /* 191 1.1 fvdl * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book) 192 1.1 fvdl * The aic7890/91 allow an offset of up to 127 transfers in both wide 193 1.1 fvdl * and narrow mode. 194 1.1 fvdl */ 195 1.1 fvdl alias SCSIOFFSET 196 1.1 fvdl mask SOFS_ULTRA2 0x7f /* Sync offset U2 chips */ 197 1.1 fvdl } 198 1.1 fvdl 199 1.1 fvdl /* 200 1.1 fvdl * SCSI Latched Data (p. 3-19). 201 1.1 fvdl * Read/Write latches used to transfer data on the SCSI bus during 202 1.1 fvdl * Automatic or Manual PIO mode. SCSIDATH can be used for the 203 1.1 fvdl * upper byte of a 16bit wide asynchronouse data phase transfer. 204 1.1 fvdl */ 205 1.1 fvdl register SCSIDATL { 206 1.1 fvdl address 0x006 207 1.1 fvdl access_mode RW 208 1.1 fvdl } 209 1.1 fvdl 210 1.1 fvdl register SCSIDATH { 211 1.1 fvdl address 0x007 212 1.1 fvdl access_mode RW 213 1.1 fvdl } 214 1.1 fvdl 215 1.1 fvdl /* 216 1.1 fvdl * SCSI Transfer Count (pp. 3-19,20) 217 1.1 fvdl * These registers count down the number of bytes transferred 218 1.1 fvdl * across the SCSI bus. The counter is decremented only once 219 1.1 fvdl * the data has been safely transferred. SDONE in SSTAT0 is 220 1.1 fvdl * set when STCNT goes to 0 221 1.3 perry */ 222 1.1 fvdl register STCNT { 223 1.1 fvdl address 0x008 224 1.1 fvdl size 3 225 1.1 fvdl access_mode RW 226 1.1 fvdl } 227 1.1 fvdl 228 1.2 fvdl /* ALT_MODE registers (Ultra2 and Ultra160 chips) */ 229 1.2 fvdl register SXFRCTL2 { 230 1.2 fvdl address 0x013 231 1.2 fvdl access_mode RW 232 1.2 fvdl field AUTORSTDIS 0x10 233 1.2 fvdl field CMDDMAEN 0x08 234 1.2 fvdl mask ASYNC_SETUP 0x07 235 1.2 fvdl } 236 1.2 fvdl 237 1.1 fvdl /* ALT_MODE register on Ultra160 chips */ 238 1.1 fvdl register OPTIONMODE { 239 1.1 fvdl address 0x008 240 1.1 fvdl access_mode RW 241 1.2 fvdl field AUTORATEEN 0x80 242 1.2 fvdl field AUTOACKEN 0x40 243 1.2 fvdl field ATNMGMNTEN 0x20 244 1.2 fvdl field BUSFREEREV 0x10 245 1.2 fvdl field EXPPHASEDIS 0x08 246 1.2 fvdl field SCSIDATL_IMGEN 0x04 247 1.2 fvdl field AUTO_MSGOUT_DE 0x02 248 1.2 fvdl field DIS_MSGIN_DUALEDGE 0x01 249 1.1 fvdl mask OPTIONMODE_DEFAULTS AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE 250 1.1 fvdl } 251 1.1 fvdl 252 1.1 fvdl /* ALT_MODE register on Ultra160 chips */ 253 1.1 fvdl register TARGCRCCNT { 254 1.1 fvdl address 0x00a 255 1.1 fvdl size 2 256 1.1 fvdl access_mode RW 257 1.1 fvdl } 258 1.1 fvdl 259 1.1 fvdl /* 260 1.1 fvdl * Clear SCSI Interrupt 0 (p. 3-20) 261 1.1 fvdl * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0. 262 1.1 fvdl */ 263 1.1 fvdl register CLRSINT0 { 264 1.1 fvdl address 0x00b 265 1.1 fvdl access_mode WO 266 1.2 fvdl field CLRSELDO 0x40 267 1.2 fvdl field CLRSELDI 0x20 268 1.2 fvdl field CLRSELINGO 0x10 269 1.2 fvdl field CLRSWRAP 0x08 270 1.2 fvdl field CLRIOERR 0x08 /* Ultra2 Only */ 271 1.2 fvdl field CLRSPIORDY 0x02 272 1.1 fvdl } 273 1.1 fvdl 274 1.1 fvdl /* 275 1.1 fvdl * SCSI Status 0 (p. 3-21) 276 1.1 fvdl * Contains one set of SCSI Interrupt codes 277 1.1 fvdl * These are most likely of interest to the sequencer 278 1.1 fvdl */ 279 1.1 fvdl register SSTAT0 { 280 1.1 fvdl address 0x00b 281 1.1 fvdl access_mode RO 282 1.2 fvdl field TARGET 0x80 /* Board acting as target */ 283 1.2 fvdl field SELDO 0x40 /* Selection Done */ 284 1.2 fvdl field SELDI 0x20 /* Board has been selected */ 285 1.2 fvdl field SELINGO 0x10 /* Selection In Progress */ 286 1.2 fvdl field SWRAP 0x08 /* 24bit counter wrap */ 287 1.8 andvar field IOERR 0x08 /* LVD Transceiver mode changed */ 288 1.2 fvdl field SDONE 0x04 /* STCNT = 0x000000 */ 289 1.2 fvdl field SPIORDY 0x02 /* SCSI PIO Ready */ 290 1.2 fvdl field DMADONE 0x01 /* DMA transfer completed */ 291 1.1 fvdl } 292 1.1 fvdl 293 1.1 fvdl /* 294 1.1 fvdl * Clear SCSI Interrupt 1 (p. 3-23) 295 1.1 fvdl * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1. 296 1.1 fvdl */ 297 1.1 fvdl register CLRSINT1 { 298 1.1 fvdl address 0x00c 299 1.1 fvdl access_mode WO 300 1.2 fvdl field CLRSELTIMEO 0x80 301 1.2 fvdl field CLRATNO 0x40 302 1.2 fvdl field CLRSCSIRSTI 0x20 303 1.2 fvdl field CLRBUSFREE 0x08 304 1.2 fvdl field CLRSCSIPERR 0x04 305 1.2 fvdl field CLRPHASECHG 0x02 306 1.2 fvdl field CLRREQINIT 0x01 307 1.1 fvdl } 308 1.1 fvdl 309 1.1 fvdl /* 310 1.1 fvdl * SCSI Status 1 (p. 3-24) 311 1.1 fvdl */ 312 1.1 fvdl register SSTAT1 { 313 1.1 fvdl address 0x00c 314 1.1 fvdl access_mode RO 315 1.2 fvdl field SELTO 0x80 316 1.2 fvdl field ATNTARG 0x40 317 1.2 fvdl field SCSIRSTI 0x20 318 1.2 fvdl field PHASEMIS 0x10 319 1.2 fvdl field BUSFREE 0x08 320 1.2 fvdl field SCSIPERR 0x04 321 1.2 fvdl field PHASECHG 0x02 322 1.2 fvdl field REQINIT 0x01 323 1.1 fvdl } 324 1.1 fvdl 325 1.1 fvdl /* 326 1.1 fvdl * SCSI Status 2 (pp. 3-25,26) 327 1.1 fvdl */ 328 1.1 fvdl register SSTAT2 { 329 1.1 fvdl address 0x00d 330 1.1 fvdl access_mode RO 331 1.2 fvdl field OVERRUN 0x80 332 1.6 andvar field SHVALID 0x40 /* Shadow Layer non-zero */ 333 1.2 fvdl field EXP_ACTIVE 0x10 /* SCSI Expander Active */ 334 1.2 fvdl field CRCVALERR 0x08 /* CRC doesn't match (U3 only) */ 335 1.2 fvdl field CRCENDERR 0x04 /* No terminal CRC packet (U3 only) */ 336 1.2 fvdl field CRCREQERR 0x02 /* Illegal CRC packet req (U3 only) */ 337 1.2 fvdl field DUAL_EDGE_ERR 0x01 /* Incorrect data phase (U3 only) */ 338 1.1 fvdl mask SFCNT 0x1f 339 1.1 fvdl } 340 1.1 fvdl 341 1.1 fvdl /* 342 1.1 fvdl * SCSI Status 3 (p. 3-26) 343 1.1 fvdl */ 344 1.1 fvdl register SSTAT3 { 345 1.1 fvdl address 0x00e 346 1.1 fvdl access_mode RO 347 1.1 fvdl mask SCSICNT 0xf0 348 1.1 fvdl mask OFFCNT 0x0f 349 1.2 fvdl mask U2OFFCNT 0x7f 350 1.1 fvdl } 351 1.1 fvdl 352 1.1 fvdl /* 353 1.1 fvdl * SCSI ID for the aic7890/91 chips 354 1.1 fvdl */ 355 1.1 fvdl register SCSIID_ULTRA2 { 356 1.1 fvdl address 0x00f 357 1.1 fvdl access_mode RW 358 1.1 fvdl mask TID 0xf0 /* Target ID mask */ 359 1.1 fvdl mask OID 0x0f /* Our ID mask */ 360 1.1 fvdl } 361 1.1 fvdl 362 1.1 fvdl /* 363 1.1 fvdl * SCSI Interrupt Mode 1 (p. 3-28) 364 1.1 fvdl * Setting any bit will enable the corresponding function 365 1.1 fvdl * in SIMODE0 to interrupt via the IRQ pin. 366 1.1 fvdl */ 367 1.1 fvdl register SIMODE0 { 368 1.1 fvdl address 0x010 369 1.1 fvdl access_mode RW 370 1.2 fvdl field ENSELDO 0x40 371 1.2 fvdl field ENSELDI 0x20 372 1.2 fvdl field ENSELINGO 0x10 373 1.2 fvdl field ENSWRAP 0x08 374 1.8 andvar field ENIOERR 0x08 /* LVD Transceiver mode changes */ 375 1.2 fvdl field ENSDONE 0x04 376 1.2 fvdl field ENSPIORDY 0x02 377 1.2 fvdl field ENDMADONE 0x01 378 1.1 fvdl } 379 1.1 fvdl 380 1.1 fvdl /* 381 1.1 fvdl * SCSI Interrupt Mode 1 (pp. 3-28,29) 382 1.1 fvdl * Setting any bit will enable the corresponding function 383 1.1 fvdl * in SIMODE1 to interrupt via the IRQ pin. 384 1.1 fvdl */ 385 1.1 fvdl register SIMODE1 { 386 1.1 fvdl address 0x011 387 1.1 fvdl access_mode RW 388 1.2 fvdl field ENSELTIMO 0x80 389 1.2 fvdl field ENATNTARG 0x40 390 1.2 fvdl field ENSCSIRST 0x20 391 1.2 fvdl field ENPHASEMIS 0x10 392 1.2 fvdl field ENBUSFREE 0x08 393 1.2 fvdl field ENSCSIPERR 0x04 394 1.2 fvdl field ENPHASECHG 0x02 395 1.2 fvdl field ENREQINIT 0x01 396 1.1 fvdl } 397 1.1 fvdl 398 1.1 fvdl /* 399 1.1 fvdl * SCSI Data Bus (High) (p. 3-29) 400 1.1 fvdl * This register reads data on the SCSI Data bus directly. 401 1.1 fvdl */ 402 1.1 fvdl register SCSIBUSL { 403 1.1 fvdl address 0x012 404 1.2 fvdl access_mode RW 405 1.1 fvdl } 406 1.1 fvdl 407 1.1 fvdl register SCSIBUSH { 408 1.1 fvdl address 0x013 409 1.2 fvdl access_mode RW 410 1.1 fvdl } 411 1.1 fvdl 412 1.1 fvdl /* 413 1.1 fvdl * SCSI/Host Address (p. 3-30) 414 1.1 fvdl * These registers hold the host address for the byte about to be 415 1.1 fvdl * transferred on the SCSI bus. They are counted up in the same 416 1.1 fvdl * manner as STCNT is counted down. SHADDR should always be used 417 1.1 fvdl * to determine the address of the last byte transferred since HADDR 418 1.1 fvdl * can be skewed by write ahead. 419 1.1 fvdl */ 420 1.1 fvdl register SHADDR { 421 1.1 fvdl address 0x014 422 1.1 fvdl size 4 423 1.1 fvdl access_mode RO 424 1.1 fvdl } 425 1.1 fvdl 426 1.1 fvdl /* 427 1.1 fvdl * Selection Timeout Timer (p. 3-30) 428 1.1 fvdl */ 429 1.1 fvdl register SELTIMER { 430 1.1 fvdl address 0x018 431 1.1 fvdl access_mode RW 432 1.2 fvdl field STAGE6 0x20 433 1.2 fvdl field STAGE5 0x10 434 1.2 fvdl field STAGE4 0x08 435 1.2 fvdl field STAGE3 0x04 436 1.2 fvdl field STAGE2 0x02 437 1.2 fvdl field STAGE1 0x01 438 1.1 fvdl alias TARGIDIN 439 1.1 fvdl } 440 1.1 fvdl 441 1.1 fvdl /* 442 1.1 fvdl * Selection/Reselection ID (p. 3-31) 443 1.1 fvdl * Upper four bits are the device id. The ONEBIT is set when the re/selecting 444 1.1 fvdl * device did not set its own ID. 445 1.1 fvdl */ 446 1.1 fvdl register SELID { 447 1.1 fvdl address 0x019 448 1.1 fvdl access_mode RW 449 1.1 fvdl mask SELID_MASK 0xf0 450 1.2 fvdl field ONEBIT 0x08 451 1.1 fvdl } 452 1.1 fvdl 453 1.1 fvdl register SCAMCTL { 454 1.1 fvdl address 0x01a 455 1.1 fvdl access_mode RW 456 1.2 fvdl field ENSCAMSELO 0x80 457 1.2 fvdl field CLRSCAMSELID 0x40 458 1.2 fvdl field ALTSTIM 0x20 459 1.2 fvdl field DFLTTID 0x10 460 1.1 fvdl mask SCAMLVL 0x03 461 1.1 fvdl } 462 1.1 fvdl 463 1.1 fvdl /* 464 1.1 fvdl * Target Mode Selecting in ID bitmask (aic7890/91/96/97) 465 1.1 fvdl */ 466 1.1 fvdl register TARGID { 467 1.1 fvdl address 0x01b 468 1.1 fvdl size 2 469 1.1 fvdl access_mode RW 470 1.1 fvdl } 471 1.1 fvdl 472 1.1 fvdl /* 473 1.7 andvar * Serial Port I/O Capability register (p. 4-95 aic7860 Data Book) 474 1.1 fvdl * Indicates if external logic has been attached to the chip to 475 1.1 fvdl * perform the tasks of accessing a serial eeprom, testing termination 476 1.1 fvdl * strength, and performing cable detection. On the aic7860, most of 477 1.1 fvdl * these features are handled on chip, but on the aic7855 an attached 478 1.1 fvdl * aic3800 does the grunt work. 479 1.1 fvdl */ 480 1.1 fvdl register SPIOCAP { 481 1.1 fvdl address 0x01b 482 1.1 fvdl access_mode RW 483 1.2 fvdl field SOFT1 0x80 484 1.2 fvdl field SOFT0 0x40 485 1.3 perry field SOFTCMDEN 0x20 486 1.2 fvdl field EXT_BRDCTL 0x10 /* External Board control */ 487 1.2 fvdl field SEEPROM 0x08 /* External serial eeprom logic */ 488 1.2 fvdl field EEPROM 0x04 /* Writable external BIOS ROM */ 489 1.2 fvdl field ROM 0x02 /* Logic for accessing external ROM */ 490 1.2 fvdl field SSPIOCPS 0x01 /* Termination and cable detection */ 491 1.1 fvdl } 492 1.1 fvdl 493 1.1 fvdl register BRDCTL { 494 1.1 fvdl address 0x01d 495 1.2 fvdl field BRDDAT7 0x80 496 1.2 fvdl field BRDDAT6 0x40 497 1.2 fvdl field BRDDAT5 0x20 498 1.2 fvdl field BRDSTB 0x10 499 1.2 fvdl field BRDCS 0x08 500 1.2 fvdl field BRDRW 0x04 501 1.2 fvdl field BRDCTL1 0x02 502 1.2 fvdl field BRDCTL0 0x01 503 1.1 fvdl /* 7890 Definitions */ 504 1.2 fvdl field BRDDAT4 0x10 505 1.2 fvdl field BRDDAT3 0x08 506 1.2 fvdl field BRDDAT2 0x04 507 1.2 fvdl field BRDRW_ULTRA2 0x02 508 1.2 fvdl field BRDSTB_ULTRA2 0x01 509 1.1 fvdl } 510 1.1 fvdl 511 1.1 fvdl /* 512 1.1 fvdl * Serial EEPROM Control (p. 4-92 in 7870 Databook) 513 1.1 fvdl * Controls the reading and writing of an external serial 1-bit 514 1.1 fvdl * EEPROM Device. In order to access the serial EEPROM, you must 515 1.1 fvdl * first set the SEEMS bit that generates a request to the memory 516 1.1 fvdl * port for access to the serial EEPROM device. When the memory 517 1.1 fvdl * port is not busy servicing another request, it reconfigures 518 1.1 fvdl * to allow access to the serial EEPROM. When this happens, SEERDY 519 1.1 fvdl * gets set high to verify that the memory port access has been 520 1.3 perry * granted. 521 1.1 fvdl * 522 1.3 perry * After successful arbitration for the memory port, the SEECS bit of 523 1.3 perry * the SEECTL register is connected to the chip select. The SEECK, 524 1.3 perry * SEEDO, and SEEDI are connected to the clock, data out, and data in 525 1.3 perry * lines respectively. The SEERDY bit of SEECTL is useful in that it 526 1.3 perry * gives us an 800 nsec timer. After a write to the SEECTL register, 527 1.3 perry * the SEERDY goes high 800 nsec later. The one exception to this is 528 1.3 perry * when we first request access to the memory port. The SEERDY goes 529 1.3 perry * high to signify that access has been granted and, for this case, has 530 1.1 fvdl * no implied timing. 531 1.1 fvdl * 532 1.3 perry * See 93cx6.c for detailed information on the protocol necessary to 533 1.1 fvdl * read the serial EEPROM. 534 1.1 fvdl */ 535 1.1 fvdl register SEECTL { 536 1.1 fvdl address 0x01e 537 1.2 fvdl field EXTARBACK 0x80 538 1.2 fvdl field EXTARBREQ 0x40 539 1.2 fvdl field SEEMS 0x20 540 1.2 fvdl field SEERDY 0x10 541 1.2 fvdl field SEECS 0x08 542 1.2 fvdl field SEECK 0x04 543 1.2 fvdl field SEEDO 0x02 544 1.2 fvdl field SEEDI 0x01 545 1.1 fvdl } 546 1.1 fvdl /* 547 1.1 fvdl * SCSI Block Control (p. 3-32) 548 1.1 fvdl * Controls Bus type and channel selection. In a twin channel configuration 549 1.1 fvdl * addresses 0x00-0x1e are gated to the appropriate channel based on this 550 1.1 fvdl * register. SELWIDE allows for the coexistence of 8bit and 16bit devices 551 1.1 fvdl * on a wide bus. 552 1.1 fvdl */ 553 1.1 fvdl register SBLKCTL { 554 1.1 fvdl address 0x01f 555 1.1 fvdl access_mode RW 556 1.2 fvdl field DIAGLEDEN 0x80 /* Aic78X0 only */ 557 1.2 fvdl field DIAGLEDON 0x40 /* Aic78X0 only */ 558 1.2 fvdl field AUTOFLUSHDIS 0x20 559 1.2 fvdl field SELBUSB 0x08 560 1.2 fvdl field ENAB40 0x08 /* LVD transceiver active */ 561 1.2 fvdl field ENAB20 0x04 /* SE/HVD transceiver active */ 562 1.2 fvdl field SELWIDE 0x02 563 1.2 fvdl field XCVR 0x01 /* External transceiver active */ 564 1.1 fvdl } 565 1.1 fvdl 566 1.1 fvdl /* 567 1.1 fvdl * Sequencer Control (p. 3-33) 568 1.1 fvdl * Error detection mode and speed configuration 569 1.1 fvdl */ 570 1.1 fvdl register SEQCTL { 571 1.1 fvdl address 0x060 572 1.1 fvdl access_mode RW 573 1.2 fvdl field PERRORDIS 0x80 574 1.2 fvdl field PAUSEDIS 0x40 575 1.2 fvdl field FAILDIS 0x20 576 1.2 fvdl field FASTMODE 0x10 577 1.2 fvdl field BRKADRINTEN 0x08 578 1.2 fvdl field STEP 0x04 579 1.2 fvdl field SEQRESET 0x02 580 1.2 fvdl field LOADRAM 0x01 581 1.1 fvdl } 582 1.1 fvdl 583 1.1 fvdl /* 584 1.1 fvdl * Sequencer RAM Data (p. 3-34) 585 1.1 fvdl * Single byte window into the Scratch Ram area starting at the address 586 1.1 fvdl * specified by SEQADDR0 and SEQADDR1. To write a full word, simply write 587 1.1 fvdl * four bytes in succession. The SEQADDRs will increment after the most 588 1.1 fvdl * significant byte is written 589 1.1 fvdl */ 590 1.1 fvdl register SEQRAM { 591 1.1 fvdl address 0x061 592 1.1 fvdl access_mode RW 593 1.1 fvdl } 594 1.1 fvdl 595 1.1 fvdl /* 596 1.1 fvdl * Sequencer Address Registers (p. 3-35) 597 1.1 fvdl * Only the first bit of SEQADDR1 holds addressing information 598 1.1 fvdl */ 599 1.1 fvdl register SEQADDR0 { 600 1.1 fvdl address 0x062 601 1.1 fvdl access_mode RW 602 1.1 fvdl } 603 1.1 fvdl 604 1.1 fvdl register SEQADDR1 { 605 1.1 fvdl address 0x063 606 1.1 fvdl access_mode RW 607 1.1 fvdl mask SEQADDR1_MASK 0x01 608 1.1 fvdl } 609 1.1 fvdl 610 1.1 fvdl /* 611 1.1 fvdl * Accumulator 612 1.1 fvdl * We cheat by passing arguments in the Accumulator up to the kernel driver 613 1.1 fvdl */ 614 1.1 fvdl register ACCUM { 615 1.1 fvdl address 0x064 616 1.1 fvdl access_mode RW 617 1.1 fvdl accumulator 618 1.1 fvdl } 619 1.1 fvdl 620 1.1 fvdl register SINDEX { 621 1.1 fvdl address 0x065 622 1.1 fvdl access_mode RW 623 1.1 fvdl sindex 624 1.1 fvdl } 625 1.1 fvdl 626 1.1 fvdl register DINDEX { 627 1.1 fvdl address 0x066 628 1.1 fvdl access_mode RW 629 1.1 fvdl } 630 1.1 fvdl 631 1.1 fvdl register ALLONES { 632 1.1 fvdl address 0x069 633 1.1 fvdl access_mode RO 634 1.1 fvdl allones 635 1.1 fvdl } 636 1.1 fvdl 637 1.1 fvdl register ALLZEROS { 638 1.1 fvdl address 0x06a 639 1.1 fvdl access_mode RO 640 1.1 fvdl allzeros 641 1.1 fvdl } 642 1.1 fvdl 643 1.1 fvdl register NONE { 644 1.1 fvdl address 0x06a 645 1.1 fvdl access_mode WO 646 1.1 fvdl none 647 1.1 fvdl } 648 1.1 fvdl 649 1.1 fvdl register FLAGS { 650 1.1 fvdl address 0x06b 651 1.1 fvdl access_mode RO 652 1.2 fvdl field ZERO 0x02 653 1.2 fvdl field CARRY 0x01 654 1.1 fvdl } 655 1.1 fvdl 656 1.1 fvdl register SINDIR { 657 1.1 fvdl address 0x06c 658 1.1 fvdl access_mode RO 659 1.1 fvdl } 660 1.1 fvdl 661 1.1 fvdl register DINDIR { 662 1.1 fvdl address 0x06d 663 1.1 fvdl access_mode WO 664 1.1 fvdl } 665 1.1 fvdl 666 1.1 fvdl register FUNCTION1 { 667 1.1 fvdl address 0x06e 668 1.1 fvdl access_mode RW 669 1.1 fvdl } 670 1.1 fvdl 671 1.1 fvdl register STACK { 672 1.1 fvdl address 0x06f 673 1.1 fvdl access_mode RO 674 1.1 fvdl } 675 1.1 fvdl 676 1.2 fvdl const STACK_SIZE 4 677 1.2 fvdl 678 1.1 fvdl /* 679 1.1 fvdl * Board Control (p. 3-43) 680 1.1 fvdl */ 681 1.1 fvdl register BCTL { 682 1.1 fvdl address 0x084 683 1.1 fvdl access_mode RW 684 1.2 fvdl field ACE 0x08 685 1.2 fvdl field ENABLE 0x01 686 1.1 fvdl } 687 1.1 fvdl 688 1.1 fvdl /* 689 1.1 fvdl * On the aic78X0 chips, Board Control is replaced by the DSCommand 690 1.1 fvdl * register (p. 4-64) 691 1.1 fvdl */ 692 1.1 fvdl register DSCOMMAND0 { 693 1.1 fvdl address 0x084 694 1.1 fvdl access_mode RW 695 1.2 fvdl field CACHETHEN 0x80 /* Cache Threshold enable */ 696 1.2 fvdl field DPARCKEN 0x40 /* Data Parity Check Enable */ 697 1.2 fvdl field MPARCKEN 0x20 /* Memory Parity Check Enable */ 698 1.2 fvdl field EXTREQLCK 0x10 /* External Request Lock */ 699 1.1 fvdl /* aic7890/91/96/97 only */ 700 1.2 fvdl field INTSCBRAMSEL 0x08 /* Internal SCB RAM Select */ 701 1.2 fvdl field RAMPS 0x04 /* External SCB RAM Present */ 702 1.2 fvdl field USCBSIZE32 0x02 /* Use 32byte SCB Page Size */ 703 1.2 fvdl field CIOPARCKEN 0x01 /* Internal bus parity error enable */ 704 1.2 fvdl } 705 1.2 fvdl 706 1.2 fvdl register DSCOMMAND1 { 707 1.2 fvdl address 0x085 708 1.2 fvdl access_mode RW 709 1.2 fvdl mask DSLATT 0xfc /* PCI latency timer (non-ultra2) */ 710 1.2 fvdl field HADDLDSEL1 0x02 /* Host Address Load Select Bits */ 711 1.2 fvdl field HADDLDSEL0 0x01 712 1.1 fvdl } 713 1.1 fvdl 714 1.1 fvdl /* 715 1.2 fvdl * Bus On/Off Time (p. 3-44) aic7770 only 716 1.1 fvdl */ 717 1.1 fvdl register BUSTIME { 718 1.1 fvdl address 0x085 719 1.1 fvdl access_mode RW 720 1.1 fvdl mask BOFF 0xf0 721 1.1 fvdl mask BON 0x0f 722 1.1 fvdl } 723 1.1 fvdl 724 1.1 fvdl /* 725 1.1 fvdl * Bus Speed (p. 3-45) aic7770 only 726 1.1 fvdl */ 727 1.1 fvdl register BUSSPD { 728 1.1 fvdl address 0x086 729 1.1 fvdl access_mode RW 730 1.1 fvdl mask DFTHRSH 0xc0 731 1.1 fvdl mask STBOFF 0x38 732 1.1 fvdl mask STBON 0x07 733 1.1 fvdl mask DFTHRSH_100 0xc0 734 1.2 fvdl mask DFTHRSH_75 0x80 735 1.1 fvdl } 736 1.1 fvdl 737 1.1 fvdl /* aic7850/55/60/70/80/95 only */ 738 1.1 fvdl register DSPCISTATUS { 739 1.1 fvdl address 0x086 740 1.1 fvdl mask DFTHRSH_100 0xc0 741 1.1 fvdl } 742 1.1 fvdl 743 1.1 fvdl /* aic7890/91/96/97 only */ 744 1.1 fvdl register HS_MAILBOX { 745 1.1 fvdl address 0x086 746 1.1 fvdl mask HOST_MAILBOX 0xF0 747 1.1 fvdl mask SEQ_MAILBOX 0x0F 748 1.2 fvdl mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */ 749 1.1 fvdl } 750 1.1 fvdl 751 1.1 fvdl const HOST_MAILBOX_SHIFT 4 752 1.1 fvdl const SEQ_MAILBOX_SHIFT 0 753 1.1 fvdl 754 1.1 fvdl /* 755 1.1 fvdl * Host Control (p. 3-47) R/W 756 1.1 fvdl * Overall host control of the device. 757 1.1 fvdl */ 758 1.1 fvdl register HCNTRL { 759 1.1 fvdl address 0x087 760 1.1 fvdl access_mode RW 761 1.2 fvdl field POWRDN 0x40 762 1.2 fvdl field SWINT 0x10 763 1.2 fvdl field IRQMS 0x08 764 1.2 fvdl field PAUSE 0x04 765 1.2 fvdl field INTEN 0x02 766 1.2 fvdl field CHIPRST 0x01 767 1.2 fvdl field CHIPRSTACK 0x01 768 1.1 fvdl } 769 1.1 fvdl 770 1.1 fvdl /* 771 1.1 fvdl * Host Address (p. 3-48) 772 1.1 fvdl * This register contains the address of the byte about 773 1.1 fvdl * to be transferred across the host bus. 774 1.1 fvdl */ 775 1.1 fvdl register HADDR { 776 1.1 fvdl address 0x088 777 1.1 fvdl size 4 778 1.1 fvdl access_mode RW 779 1.1 fvdl } 780 1.1 fvdl 781 1.1 fvdl register HCNT { 782 1.1 fvdl address 0x08c 783 1.1 fvdl size 3 784 1.1 fvdl access_mode RW 785 1.1 fvdl } 786 1.1 fvdl 787 1.1 fvdl /* 788 1.1 fvdl * SCB Pointer (p. 3-49) 789 1.2 fvdl * Gate one of the SCBs into the SCBARRAY window. 790 1.1 fvdl */ 791 1.1 fvdl register SCBPTR { 792 1.1 fvdl address 0x090 793 1.1 fvdl access_mode RW 794 1.1 fvdl } 795 1.1 fvdl 796 1.1 fvdl /* 797 1.1 fvdl * Interrupt Status (p. 3-50) 798 1.1 fvdl * Status for system interrupts 799 1.1 fvdl */ 800 1.1 fvdl register INTSTAT { 801 1.1 fvdl address 0x091 802 1.1 fvdl access_mode RW 803 1.2 fvdl field BRKADRINT 0x08 804 1.2 fvdl field SCSIINT 0x04 805 1.2 fvdl field CMDCMPLT 0x02 806 1.2 fvdl field SEQINT 0x01 807 1.1 fvdl mask BAD_PHASE SEQINT /* unknown scsi bus phase */ 808 1.1 fvdl mask SEND_REJECT 0x10|SEQINT /* sending a message reject */ 809 1.3 perry mask PROTO_VIOLATION 0x20|SEQINT /* SCSI protocol violation */ 810 1.1 fvdl mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */ 811 1.2 fvdl mask IGN_WIDE_RES 0x40|SEQINT /* Complex IGN Wide Res Msg */ 812 1.2 fvdl mask PDATA_REINIT 0x50|SEQINT /* 813 1.2 fvdl * Returned to data phase 814 1.2 fvdl * that requires data 815 1.2 fvdl * transfer pointers to be 816 1.2 fvdl * recalculated from the 817 1.2 fvdl * transfer residual. 818 1.2 fvdl */ 819 1.2 fvdl mask HOST_MSG_LOOP 0x60|SEQINT /* 820 1.1 fvdl * The bus is ready for the 821 1.1 fvdl * host to perform another 822 1.1 fvdl * message transaction. This 823 1.1 fvdl * mechanism is used for things 824 1.1 fvdl * like sync/wide negotiation 825 1.1 fvdl * that require a kernel based 826 1.1 fvdl * message state engine. 827 1.1 fvdl */ 828 1.2 fvdl mask BAD_STATUS 0x70|SEQINT /* Bad status from target */ 829 1.2 fvdl mask PERR_DETECTED 0x80|SEQINT /* 830 1.1 fvdl * Either the phase_lock 831 1.1 fvdl * or inb_next routine has 832 1.1 fvdl * noticed a parity error. 833 1.1 fvdl */ 834 1.2 fvdl mask DATA_OVERRUN 0x90|SEQINT /* 835 1.1 fvdl * Target attempted to write 836 1.1 fvdl * beyond the bounds of its 837 1.1 fvdl * command. 838 1.1 fvdl */ 839 1.2 fvdl mask MKMSG_FAILED 0xa0|SEQINT /* 840 1.2 fvdl * Target completed command 841 1.2 fvdl * without honoring our ATN 842 1.3 perry * request to issue a message. 843 1.2 fvdl */ 844 1.2 fvdl mask MISSED_BUSFREE 0xb0|SEQINT /* 845 1.2 fvdl * The sequencer never saw 846 1.2 fvdl * the bus go free after 847 1.2 fvdl * either a command complete 848 1.2 fvdl * or disconnect message. 849 1.2 fvdl */ 850 1.2 fvdl mask SCB_MISMATCH 0xc0|SEQINT /* 851 1.2 fvdl * Downloaded SCB's tag does 852 1.2 fvdl * not match the entry we 853 1.2 fvdl * intended to download. 854 1.2 fvdl */ 855 1.2 fvdl mask NO_FREE_SCB 0xd0|SEQINT /* 856 1.2 fvdl * get_free_or_disc_scb failed. 857 1.2 fvdl */ 858 1.2 fvdl mask OUT_OF_RANGE 0xe0|SEQINT 859 1.1 fvdl 860 1.1 fvdl mask SEQINT_MASK 0xf0|SEQINT /* SEQINT Status Codes */ 861 1.1 fvdl mask INT_PEND (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT) 862 1.1 fvdl } 863 1.1 fvdl 864 1.1 fvdl /* 865 1.1 fvdl * Hard Error (p. 3-53) 866 1.1 fvdl * Reporting of catastrophic errors. You usually cannot recover from 867 1.1 fvdl * these without a full board reset. 868 1.1 fvdl */ 869 1.1 fvdl register ERROR { 870 1.1 fvdl address 0x092 871 1.1 fvdl access_mode RO 872 1.2 fvdl field CIOPARERR 0x80 /* Ultra2 only */ 873 1.2 fvdl field PCIERRSTAT 0x40 /* PCI only */ 874 1.2 fvdl field MPARERR 0x20 /* PCI only */ 875 1.2 fvdl field DPARERR 0x10 /* PCI only */ 876 1.2 fvdl field SQPARERR 0x08 877 1.2 fvdl field ILLOPCODE 0x04 878 1.2 fvdl field ILLSADDR 0x02 879 1.2 fvdl field ILLHADDR 0x01 880 1.1 fvdl } 881 1.1 fvdl 882 1.1 fvdl /* 883 1.1 fvdl * Clear Interrupt Status (p. 3-52) 884 1.1 fvdl */ 885 1.1 fvdl register CLRINT { 886 1.1 fvdl address 0x092 887 1.1 fvdl access_mode WO 888 1.2 fvdl field CLRPARERR 0x10 /* PCI only */ 889 1.2 fvdl field CLRBRKADRINT 0x08 890 1.2 fvdl field CLRSCSIINT 0x04 891 1.2 fvdl field CLRCMDINT 0x02 892 1.2 fvdl field CLRSEQINT 0x01 893 1.1 fvdl } 894 1.1 fvdl 895 1.1 fvdl register DFCNTRL { 896 1.1 fvdl address 0x093 897 1.1 fvdl access_mode RW 898 1.2 fvdl field PRELOADEN 0x80 /* aic7890 only */ 899 1.2 fvdl field WIDEODD 0x40 900 1.2 fvdl field SCSIEN 0x20 901 1.2 fvdl field SDMAEN 0x10 902 1.2 fvdl field SDMAENACK 0x10 903 1.2 fvdl field HDMAEN 0x08 904 1.2 fvdl field HDMAENACK 0x08 905 1.2 fvdl field DIRECTION 0x04 906 1.2 fvdl field FIFOFLUSH 0x02 907 1.2 fvdl field FIFORESET 0x01 908 1.1 fvdl } 909 1.1 fvdl 910 1.1 fvdl register DFSTATUS { 911 1.1 fvdl address 0x094 912 1.1 fvdl access_mode RO 913 1.2 fvdl field PRELOAD_AVAIL 0x80 914 1.2 fvdl field DFCACHETH 0x40 915 1.2 fvdl field FIFOQWDEMP 0x20 916 1.2 fvdl field MREQPEND 0x10 917 1.2 fvdl field HDONE 0x08 918 1.2 fvdl field DFTHRESH 0x04 919 1.2 fvdl field FIFOFULL 0x02 920 1.2 fvdl field FIFOEMP 0x01 921 1.1 fvdl } 922 1.1 fvdl 923 1.1 fvdl register DFWADDR { 924 1.1 fvdl address 0x95 925 1.1 fvdl access_mode RW 926 1.1 fvdl } 927 1.1 fvdl 928 1.1 fvdl register DFRADDR { 929 1.1 fvdl address 0x97 930 1.1 fvdl access_mode RW 931 1.1 fvdl } 932 1.1 fvdl 933 1.1 fvdl register DFDAT { 934 1.1 fvdl address 0x099 935 1.1 fvdl access_mode RW 936 1.1 fvdl } 937 1.1 fvdl 938 1.1 fvdl /* 939 1.1 fvdl * SCB Auto Increment (p. 3-59) 940 1.1 fvdl * Byte offset into the SCB Array and an optional bit to allow auto 941 1.1 fvdl * incrementing of the address during download and upload operations 942 1.1 fvdl */ 943 1.1 fvdl register SCBCNT { 944 1.1 fvdl address 0x09a 945 1.1 fvdl access_mode RW 946 1.2 fvdl field SCBAUTO 0x80 947 1.1 fvdl mask SCBCNT_MASK 0x1f 948 1.1 fvdl } 949 1.1 fvdl 950 1.1 fvdl /* 951 1.1 fvdl * Queue In FIFO (p. 3-60) 952 1.6 andvar * Input queue for queued SCBs (commands that the sequencer has yet to start) 953 1.1 fvdl */ 954 1.1 fvdl register QINFIFO { 955 1.1 fvdl address 0x09b 956 1.1 fvdl access_mode RW 957 1.1 fvdl } 958 1.1 fvdl 959 1.1 fvdl /* 960 1.1 fvdl * Queue In Count (p. 3-60) 961 1.1 fvdl * Number of queued SCBs 962 1.1 fvdl */ 963 1.1 fvdl register QINCNT { 964 1.1 fvdl address 0x09c 965 1.1 fvdl access_mode RO 966 1.1 fvdl } 967 1.1 fvdl 968 1.1 fvdl /* 969 1.1 fvdl * Queue Out FIFO (p. 3-61) 970 1.1 fvdl * Queue of SCBs that have completed and await the host 971 1.1 fvdl */ 972 1.1 fvdl register QOUTFIFO { 973 1.1 fvdl address 0x09d 974 1.1 fvdl access_mode WO 975 1.1 fvdl } 976 1.1 fvdl 977 1.1 fvdl register CRCCONTROL1 { 978 1.1 fvdl address 0x09d 979 1.1 fvdl access_mode RW 980 1.2 fvdl field CRCONSEEN 0x80 981 1.2 fvdl field CRCVALCHKEN 0x40 982 1.2 fvdl field CRCENDCHKEN 0x20 983 1.2 fvdl field CRCREQCHKEN 0x10 984 1.2 fvdl field TARGCRCENDEN 0x08 985 1.2 fvdl field TARGCRCCNTEN 0x04 986 1.1 fvdl } 987 1.1 fvdl 988 1.1 fvdl 989 1.1 fvdl /* 990 1.1 fvdl * Queue Out Count (p. 3-61) 991 1.1 fvdl * Number of queued SCBs in the Out FIFO 992 1.1 fvdl */ 993 1.1 fvdl register QOUTCNT { 994 1.1 fvdl address 0x09e 995 1.1 fvdl access_mode RO 996 1.1 fvdl } 997 1.1 fvdl 998 1.1 fvdl register SCSIPHASE { 999 1.1 fvdl address 0x09e 1000 1.1 fvdl access_mode RO 1001 1.2 fvdl field STATUS_PHASE 0x20 1002 1.2 fvdl field COMMAND_PHASE 0x10 1003 1.2 fvdl field MSG_IN_PHASE 0x08 1004 1.2 fvdl field MSG_OUT_PHASE 0x04 1005 1.2 fvdl field DATA_IN_PHASE 0x02 1006 1.2 fvdl field DATA_OUT_PHASE 0x01 1007 1.2 fvdl mask DATA_PHASE_MASK 0x03 1008 1.1 fvdl } 1009 1.1 fvdl 1010 1.1 fvdl /* 1011 1.1 fvdl * Special Function 1012 1.1 fvdl */ 1013 1.1 fvdl register SFUNCT { 1014 1.1 fvdl address 0x09f 1015 1.1 fvdl access_mode RW 1016 1.2 fvdl field ALT_MODE 0x80 1017 1.1 fvdl } 1018 1.1 fvdl 1019 1.1 fvdl /* 1020 1.1 fvdl * SCB Definition (p. 5-4) 1021 1.1 fvdl */ 1022 1.1 fvdl scb { 1023 1.2 fvdl address 0x0a0 1024 1.2 fvdl size 64 1025 1.2 fvdl 1026 1.2 fvdl SCB_CDB_PTR { 1027 1.2 fvdl size 4 1028 1.2 fvdl alias SCB_RESIDUAL_DATACNT 1029 1.2 fvdl alias SCB_CDB_STORE 1030 1.2 fvdl } 1031 1.2 fvdl SCB_RESIDUAL_SGPTR { 1032 1.2 fvdl size 4 1033 1.1 fvdl } 1034 1.2 fvdl SCB_SCSI_STATUS { 1035 1.1 fvdl size 1 1036 1.1 fvdl } 1037 1.2 fvdl SCB_TARGET_PHASES { 1038 1.1 fvdl size 1 1039 1.1 fvdl } 1040 1.2 fvdl SCB_TARGET_DATA_DIR { 1041 1.1 fvdl size 1 1042 1.1 fvdl } 1043 1.2 fvdl SCB_TARGET_ITAG { 1044 1.1 fvdl size 1 1045 1.1 fvdl } 1046 1.1 fvdl SCB_DATAPTR { 1047 1.1 fvdl size 4 1048 1.1 fvdl } 1049 1.1 fvdl SCB_DATACNT { 1050 1.1 fvdl /* 1051 1.2 fvdl * The last byte is really the high address bits for 1052 1.2 fvdl * the data address. 1053 1.1 fvdl */ 1054 1.1 fvdl size 4 1055 1.2 fvdl field SG_LAST_SEG 0x80 /* In the fourth byte */ 1056 1.2 fvdl mask SG_HIGH_ADDR_BITS 0x7F /* In the fourth byte */ 1057 1.1 fvdl } 1058 1.2 fvdl SCB_SGPTR { 1059 1.1 fvdl size 4 1060 1.2 fvdl field SG_RESID_VALID 0x04 /* In the first byte */ 1061 1.2 fvdl field SG_FULL_RESID 0x02 /* In the first byte */ 1062 1.2 fvdl field SG_LIST_NULL 0x01 /* In the first byte */ 1063 1.1 fvdl } 1064 1.2 fvdl SCB_CONTROL { 1065 1.2 fvdl size 1 1066 1.2 fvdl field TARGET_SCB 0x80 1067 1.2 fvdl field STATUS_RCVD 0x80 1068 1.2 fvdl field DISCENB 0x40 1069 1.2 fvdl field TAG_ENB 0x20 1070 1.2 fvdl field MK_MESSAGE 0x10 1071 1.2 fvdl field ULTRAENB 0x08 1072 1.2 fvdl field DISCONNECTED 0x04 1073 1.2 fvdl mask SCB_TAG_TYPE 0x03 1074 1.2 fvdl } 1075 1.2 fvdl SCB_SCSIID { 1076 1.2 fvdl size 1 1077 1.2 fvdl field TWIN_CHNLB 0x80 1078 1.2 fvdl mask TWIN_TID 0x70 1079 1.2 fvdl mask TID 0xf0 1080 1.2 fvdl mask OID 0x0f 1081 1.2 fvdl } 1082 1.2 fvdl SCB_LUN { 1083 1.2 fvdl mask LID 0xff 1084 1.1 fvdl size 1 1085 1.1 fvdl } 1086 1.1 fvdl SCB_TAG { 1087 1.1 fvdl size 1 1088 1.1 fvdl } 1089 1.2 fvdl SCB_CDB_LEN { 1090 1.1 fvdl size 1 1091 1.1 fvdl } 1092 1.1 fvdl SCB_SCSIRATE { 1093 1.1 fvdl size 1 1094 1.1 fvdl } 1095 1.1 fvdl SCB_SCSIOFFSET { 1096 1.1 fvdl size 1 1097 1.1 fvdl } 1098 1.2 fvdl SCB_NEXT { 1099 1.2 fvdl size 1 1100 1.1 fvdl } 1101 1.2 fvdl SCB_64_SPARE { 1102 1.1 fvdl size 16 1103 1.1 fvdl } 1104 1.2 fvdl SCB_64_BTT { 1105 1.2 fvdl size 16 1106 1.1 fvdl } 1107 1.1 fvdl } 1108 1.1 fvdl 1109 1.2 fvdl const SCB_UPLOAD_SIZE 32 1110 1.2 fvdl const SCB_DOWNLOAD_SIZE 32 1111 1.2 fvdl const SCB_DOWNLOAD_SIZE_64 48 1112 1.1 fvdl 1113 1.1 fvdl const SG_SIZEOF 0x08 /* sizeof(struct ahc_dma) */ 1114 1.1 fvdl 1115 1.1 fvdl /* --------------------- AHA-2840-only definitions -------------------- */ 1116 1.1 fvdl 1117 1.1 fvdl register SEECTL_2840 { 1118 1.1 fvdl address 0x0c0 1119 1.1 fvdl access_mode RW 1120 1.2 fvdl field CS_2840 0x04 1121 1.2 fvdl field CK_2840 0x02 1122 1.2 fvdl field DO_2840 0x01 1123 1.1 fvdl } 1124 1.1 fvdl 1125 1.1 fvdl register STATUS_2840 { 1126 1.1 fvdl address 0x0c1 1127 1.1 fvdl access_mode RW 1128 1.2 fvdl field EEPROM_TF 0x80 1129 1.1 fvdl mask BIOS_SEL 0x60 1130 1.1 fvdl mask ADSEL 0x1e 1131 1.2 fvdl field DI_2840 0x01 1132 1.1 fvdl } 1133 1.1 fvdl 1134 1.1 fvdl /* --------------------- AIC-7870-only definitions -------------------- */ 1135 1.1 fvdl 1136 1.1 fvdl register CCHADDR { 1137 1.1 fvdl address 0x0E0 1138 1.1 fvdl size 8 1139 1.1 fvdl } 1140 1.1 fvdl 1141 1.1 fvdl register CCHCNT { 1142 1.1 fvdl address 0x0E8 1143 1.1 fvdl } 1144 1.1 fvdl 1145 1.1 fvdl register CCSGRAM { 1146 1.1 fvdl address 0x0E9 1147 1.1 fvdl } 1148 1.1 fvdl 1149 1.1 fvdl register CCSGADDR { 1150 1.1 fvdl address 0x0EA 1151 1.1 fvdl } 1152 1.1 fvdl 1153 1.1 fvdl register CCSGCTL { 1154 1.1 fvdl address 0x0EB 1155 1.2 fvdl field CCSGDONE 0x80 1156 1.2 fvdl field CCSGEN 0x08 1157 1.2 fvdl field SG_FETCH_NEEDED 0x02 /* Bit used for software state */ 1158 1.2 fvdl field CCSGRESET 0x01 1159 1.1 fvdl } 1160 1.1 fvdl 1161 1.1 fvdl register CCSCBCNT { 1162 1.1 fvdl address 0xEF 1163 1.1 fvdl } 1164 1.1 fvdl 1165 1.1 fvdl register CCSCBCTL { 1166 1.1 fvdl address 0x0EE 1167 1.2 fvdl field CCSCBDONE 0x80 1168 1.2 fvdl field ARRDONE 0x40 /* SCB Array prefetch done */ 1169 1.2 fvdl field CCARREN 0x10 1170 1.2 fvdl field CCSCBEN 0x08 1171 1.2 fvdl field CCSCBDIR 0x04 1172 1.2 fvdl field CCSCBRESET 0x01 1173 1.1 fvdl } 1174 1.1 fvdl 1175 1.1 fvdl register CCSCBADDR { 1176 1.1 fvdl address 0x0ED 1177 1.1 fvdl } 1178 1.1 fvdl 1179 1.1 fvdl register CCSCBRAM { 1180 1.1 fvdl address 0xEC 1181 1.1 fvdl } 1182 1.1 fvdl 1183 1.1 fvdl /* 1184 1.1 fvdl * SCB bank address (7895/7896/97 only) 1185 1.1 fvdl */ 1186 1.1 fvdl register SCBBADDR { 1187 1.1 fvdl address 0x0F0 1188 1.1 fvdl access_mode RW 1189 1.1 fvdl } 1190 1.1 fvdl 1191 1.1 fvdl register CCSCBPTR { 1192 1.1 fvdl address 0x0F1 1193 1.1 fvdl } 1194 1.1 fvdl 1195 1.1 fvdl register HNSCB_QOFF { 1196 1.1 fvdl address 0x0F4 1197 1.1 fvdl } 1198 1.1 fvdl 1199 1.1 fvdl register SNSCB_QOFF { 1200 1.1 fvdl address 0x0F6 1201 1.1 fvdl } 1202 1.1 fvdl 1203 1.1 fvdl register SDSCB_QOFF { 1204 1.1 fvdl address 0x0F8 1205 1.1 fvdl } 1206 1.1 fvdl 1207 1.1 fvdl register QOFF_CTLSTA { 1208 1.1 fvdl address 0x0FA 1209 1.2 fvdl field SCB_AVAIL 0x40 1210 1.2 fvdl field SNSCB_ROLLOVER 0x20 1211 1.2 fvdl field SDSCB_ROLLOVER 0x10 1212 1.1 fvdl mask SCB_QSIZE 0x07 1213 1.1 fvdl mask SCB_QSIZE_256 0x06 1214 1.1 fvdl } 1215 1.1 fvdl 1216 1.1 fvdl register DFF_THRSH { 1217 1.1 fvdl address 0x0FB 1218 1.1 fvdl mask WR_DFTHRSH 0x70 1219 1.1 fvdl mask RD_DFTHRSH 0x07 1220 1.1 fvdl mask RD_DFTHRSH_MIN 0x00 1221 1.1 fvdl mask RD_DFTHRSH_25 0x01 1222 1.1 fvdl mask RD_DFTHRSH_50 0x02 1223 1.1 fvdl mask RD_DFTHRSH_63 0x03 1224 1.1 fvdl mask RD_DFTHRSH_75 0x04 1225 1.1 fvdl mask RD_DFTHRSH_85 0x05 1226 1.1 fvdl mask RD_DFTHRSH_90 0x06 1227 1.1 fvdl mask RD_DFTHRSH_MAX 0x07 1228 1.1 fvdl mask WR_DFTHRSH_MIN 0x00 1229 1.1 fvdl mask WR_DFTHRSH_25 0x10 1230 1.1 fvdl mask WR_DFTHRSH_50 0x20 1231 1.1 fvdl mask WR_DFTHRSH_63 0x30 1232 1.1 fvdl mask WR_DFTHRSH_75 0x40 1233 1.1 fvdl mask WR_DFTHRSH_85 0x50 1234 1.1 fvdl mask WR_DFTHRSH_90 0x60 1235 1.1 fvdl mask WR_DFTHRSH_MAX 0x70 1236 1.1 fvdl } 1237 1.1 fvdl 1238 1.2 fvdl register SG_CACHE_PRE { 1239 1.2 fvdl access_mode WO 1240 1.1 fvdl address 0x0fc 1241 1.2 fvdl mask SG_ADDR_MASK 0xf8 1242 1.2 fvdl field ODD_SEG 0x04 1243 1.2 fvdl field LAST_SEG 0x02 1244 1.2 fvdl field LAST_SEG_DONE 0x01 1245 1.1 fvdl } 1246 1.1 fvdl 1247 1.2 fvdl register SG_CACHE_SHADOW { 1248 1.2 fvdl access_mode RO 1249 1.2 fvdl address 0x0fc 1250 1.2 fvdl mask SG_ADDR_MASK 0xf8 1251 1.2 fvdl field ODD_SEG 0x04 1252 1.2 fvdl field LAST_SEG 0x02 1253 1.2 fvdl field LAST_SEG_DONE 0x01 1254 1.2 fvdl } 1255 1.1 fvdl /* ---------------------- Scratch RAM Offsets ------------------------- */ 1256 1.1 fvdl /* These offsets are either to values that are initialized by the board's 1257 1.1 fvdl * BIOS or are specified by the sequencer code. 1258 1.1 fvdl * 1259 1.1 fvdl * The host adapter card (at least the BIOS) uses 20-2f for SCSI 1260 1.1 fvdl * device information, 32-33 and 5a-5f as well. As it turns out, the 1261 1.1 fvdl * BIOS trashes 20-2f, writing the synchronous negotiation results 1262 1.1 fvdl * on top of the BIOS values, so we re-use those for our per-target 1263 1.1 fvdl * scratchspace (actually a value that can be copied directly into 1264 1.1 fvdl * SCSIRATE). The kernel driver will enable synchronous negotiation 1265 1.1 fvdl * for all targets that have a value other than 0 in the lower four 1266 1.1 fvdl * bits of the target scratch space. This should work regardless of 1267 1.1 fvdl * whether the bios has been installed. 1268 1.1 fvdl */ 1269 1.1 fvdl 1270 1.1 fvdl scratch_ram { 1271 1.2 fvdl address 0x020 1272 1.2 fvdl size 58 1273 1.1 fvdl 1274 1.1 fvdl /* 1275 1.1 fvdl * 1 byte per target starting at this address for configuration values 1276 1.1 fvdl */ 1277 1.2 fvdl BUSY_TARGETS { 1278 1.2 fvdl alias TARG_SCSIRATE 1279 1.1 fvdl size 16 1280 1.1 fvdl } 1281 1.1 fvdl /* 1282 1.2 fvdl * Bit vector of targets that have ULTRA enabled as set by 1283 1.2 fvdl * the BIOS. The Sequencer relies on a per-SCB field to 1284 1.2 fvdl * control whether to enable Ultra transfers or not. During 1285 1.2 fvdl * initialization, we read this field and reuse it for 2 1286 1.2 fvdl * entries in the busy target table. 1287 1.1 fvdl */ 1288 1.1 fvdl ULTRA_ENB { 1289 1.2 fvdl alias CMDSIZE_TABLE 1290 1.1 fvdl size 2 1291 1.1 fvdl } 1292 1.1 fvdl /* 1293 1.2 fvdl * Bit vector of targets that have disconnection disabled as set by 1294 1.2 fvdl * the BIOS. The Sequencer relies in a per-SCB field to control the 1295 1.2 fvdl * disconnect priveldge. During initialization, we read this field 1296 1.2 fvdl * and reuse it for 2 entries in the busy target table. 1297 1.1 fvdl */ 1298 1.1 fvdl DISC_DSB { 1299 1.1 fvdl size 2 1300 1.1 fvdl } 1301 1.2 fvdl CMDSIZE_TABLE_TAIL { 1302 1.2 fvdl size 4 1303 1.2 fvdl } 1304 1.2 fvdl /* 1305 1.2 fvdl * Partial transfer past cacheline end to be 1306 1.2 fvdl * transferred using an extra S/G. 1307 1.2 fvdl */ 1308 1.2 fvdl MWI_RESIDUAL { 1309 1.2 fvdl size 1 1310 1.2 fvdl alias TARG_IMMEDIATE_SCB 1311 1.2 fvdl } 1312 1.2 fvdl /* 1313 1.2 fvdl * SCBID of the next SCB to be started by the controller. 1314 1.2 fvdl */ 1315 1.2 fvdl NEXT_QUEUED_SCB { 1316 1.2 fvdl size 1 1317 1.2 fvdl } 1318 1.1 fvdl /* 1319 1.1 fvdl * Single byte buffer used to designate the type or message 1320 1.1 fvdl * to send to a target. 1321 1.1 fvdl */ 1322 1.1 fvdl MSG_OUT { 1323 1.1 fvdl size 1 1324 1.1 fvdl } 1325 1.1 fvdl /* Parameters for DMA Logic */ 1326 1.1 fvdl DMAPARAMS { 1327 1.1 fvdl size 1 1328 1.2 fvdl field PRELOADEN 0x80 1329 1.2 fvdl field WIDEODD 0x40 1330 1.2 fvdl field SCSIEN 0x20 1331 1.2 fvdl field SDMAEN 0x10 1332 1.2 fvdl field SDMAENACK 0x10 1333 1.2 fvdl field HDMAEN 0x08 1334 1.2 fvdl field HDMAENACK 0x08 1335 1.2 fvdl field DIRECTION 0x04 /* Set indicates PCI->SCSI */ 1336 1.2 fvdl field FIFOFLUSH 0x02 1337 1.2 fvdl field FIFORESET 0x01 1338 1.1 fvdl } 1339 1.1 fvdl SEQ_FLAGS { 1340 1.1 fvdl size 1 1341 1.2 fvdl field NOT_IDENTIFIED 0x80 1342 1.2 fvdl field NO_CDB_SENT 0x40 1343 1.2 fvdl field TARGET_CMD_IS_TAGGED 0x40 1344 1.2 fvdl field DPHASE 0x20 1345 1.1 fvdl /* Target flags */ 1346 1.2 fvdl field TARG_CMD_PENDING 0x10 1347 1.2 fvdl field CMDPHASE_PENDING 0x08 1348 1.2 fvdl field DPHASE_PENDING 0x04 1349 1.2 fvdl field SPHASE_PENDING 0x02 1350 1.2 fvdl field NO_DISCONNECT 0x01 1351 1.1 fvdl } 1352 1.1 fvdl /* 1353 1.1 fvdl * Temporary storage for the 1354 1.1 fvdl * target/channel/lun of a 1355 1.1 fvdl * reconnecting target 1356 1.1 fvdl */ 1357 1.2 fvdl SAVED_SCSIID { 1358 1.1 fvdl size 1 1359 1.1 fvdl } 1360 1.2 fvdl SAVED_LUN { 1361 1.1 fvdl size 1 1362 1.1 fvdl } 1363 1.1 fvdl /* 1364 1.3 perry * The last bus phase as seen by the sequencer. 1365 1.1 fvdl */ 1366 1.1 fvdl LASTPHASE { 1367 1.1 fvdl size 1 1368 1.2 fvdl field CDI 0x80 1369 1.2 fvdl field IOI 0x40 1370 1.2 fvdl field MSGI 0x20 1371 1.1 fvdl mask PHASE_MASK CDI|IOI|MSGI 1372 1.1 fvdl mask P_DATAOUT 0x00 1373 1.1 fvdl mask P_DATAIN IOI 1374 1.1 fvdl mask P_COMMAND CDI 1375 1.1 fvdl mask P_MESGOUT CDI|MSGI 1376 1.1 fvdl mask P_STATUS CDI|IOI 1377 1.1 fvdl mask P_MESGIN CDI|IOI|MSGI 1378 1.1 fvdl mask P_BUSFREE 0x01 1379 1.1 fvdl } 1380 1.1 fvdl /* 1381 1.1 fvdl * head of list of SCBs awaiting 1382 1.1 fvdl * selection 1383 1.1 fvdl */ 1384 1.1 fvdl WAITING_SCBH { 1385 1.1 fvdl size 1 1386 1.1 fvdl } 1387 1.1 fvdl /* 1388 1.1 fvdl * head of list of SCBs that are 1389 1.1 fvdl * disconnected. Used for SCB 1390 1.1 fvdl * paging. 1391 1.1 fvdl */ 1392 1.1 fvdl DISCONNECTED_SCBH { 1393 1.1 fvdl size 1 1394 1.1 fvdl } 1395 1.1 fvdl /* 1396 1.1 fvdl * head of list of SCBs that are 1397 1.1 fvdl * not in use. Used for SCB paging. 1398 1.1 fvdl */ 1399 1.1 fvdl FREE_SCBH { 1400 1.1 fvdl size 1 1401 1.1 fvdl } 1402 1.1 fvdl /* 1403 1.2 fvdl * head of list of SCBs that have 1404 1.2 fvdl * completed but have not been 1405 1.2 fvdl * put into the qoutfifo. 1406 1.1 fvdl */ 1407 1.2 fvdl COMPLETE_SCBH { 1408 1.2 fvdl size 1 1409 1.1 fvdl } 1410 1.1 fvdl /* 1411 1.2 fvdl * Address of the hardware scb array in the host. 1412 1.1 fvdl */ 1413 1.2 fvdl HSCB_ADDR { 1414 1.1 fvdl size 4 1415 1.1 fvdl } 1416 1.1 fvdl /* 1417 1.2 fvdl * Base address of our shared data with the kernel driver in host 1418 1.2 fvdl * memory. This includes the qoutfifo and target mode 1419 1.2 fvdl * incoming command queue. 1420 1.1 fvdl */ 1421 1.2 fvdl SHARED_DATA_ADDR { 1422 1.1 fvdl size 4 1423 1.1 fvdl } 1424 1.1 fvdl KERNEL_QINPOS { 1425 1.1 fvdl size 1 1426 1.1 fvdl } 1427 1.1 fvdl QINPOS { 1428 1.1 fvdl size 1 1429 1.1 fvdl } 1430 1.1 fvdl QOUTPOS { 1431 1.1 fvdl size 1 1432 1.1 fvdl } 1433 1.1 fvdl /* 1434 1.1 fvdl * Kernel and sequencer offsets into the queue of 1435 1.1 fvdl * incoming target mode command descriptors. The 1436 1.1 fvdl * queue is full when the KERNEL_TQINPOS == TQINPOS. 1437 1.1 fvdl */ 1438 1.1 fvdl KERNEL_TQINPOS { 1439 1.1 fvdl size 1 1440 1.1 fvdl } 1441 1.3 perry TQINPOS { 1442 1.1 fvdl size 1 1443 1.1 fvdl } 1444 1.1 fvdl ARG_1 { 1445 1.1 fvdl size 1 1446 1.1 fvdl mask SEND_MSG 0x80 1447 1.1 fvdl mask SEND_SENSE 0x40 1448 1.1 fvdl mask SEND_REJ 0x20 1449 1.1 fvdl mask MSGOUT_PHASEMIS 0x10 1450 1.1 fvdl mask EXIT_MSG_LOOP 0x08 1451 1.1 fvdl mask CONT_MSG_LOOP 0x04 1452 1.1 fvdl mask CONT_TARG_SESSION 0x02 1453 1.1 fvdl alias RETURN_1 1454 1.1 fvdl } 1455 1.1 fvdl ARG_2 { 1456 1.1 fvdl size 1 1457 1.1 fvdl alias RETURN_2 1458 1.1 fvdl } 1459 1.1 fvdl 1460 1.1 fvdl /* 1461 1.1 fvdl * Snapshot of MSG_OUT taken after each message is sent. 1462 1.1 fvdl */ 1463 1.1 fvdl LAST_MSG { 1464 1.1 fvdl size 1 1465 1.1 fvdl } 1466 1.1 fvdl 1467 1.1 fvdl /* 1468 1.1 fvdl * Sequences the kernel driver has okayed for us. This allows 1469 1.1 fvdl * the driver to do things like prevent initiator or target 1470 1.1 fvdl * operations. 1471 1.1 fvdl */ 1472 1.1 fvdl SCSISEQ_TEMPLATE { 1473 1.1 fvdl size 1 1474 1.2 fvdl field ENSELO 0x40 1475 1.2 fvdl field ENSELI 0x20 1476 1.2 fvdl field ENRSELI 0x10 1477 1.2 fvdl field ENAUTOATNO 0x08 1478 1.2 fvdl field ENAUTOATNI 0x04 1479 1.2 fvdl field ENAUTOATNP 0x02 1480 1.1 fvdl } 1481 1.1 fvdl 1482 1.1 fvdl /* 1483 1.1 fvdl * Track whether the transfer byte count for 1484 1.1 fvdl * the current data phase is odd. 1485 1.1 fvdl */ 1486 1.1 fvdl DATA_COUNT_ODD { 1487 1.1 fvdl size 1 1488 1.1 fvdl } 1489 1.2 fvdl } 1490 1.2 fvdl 1491 1.2 fvdl scratch_ram { 1492 1.2 fvdl address 0x056 1493 1.2 fvdl size 4 1494 1.2 fvdl /* 1495 1.2 fvdl * These scratch ram locations are initialized by the 274X BIOS. 1496 1.2 fvdl * We reuse them after capturing the BIOS settings during 1497 1.2 fvdl * initialization. 1498 1.2 fvdl */ 1499 1.1 fvdl 1500 1.1 fvdl /* 1501 1.1 fvdl * The initiator specified tag for this target mode transaction. 1502 1.1 fvdl */ 1503 1.2 fvdl HA_274_BIOSGLOBAL { 1504 1.2 fvdl size 1 1505 1.2 fvdl field HA_274_EXTENDED_TRANS 0x01 1506 1.2 fvdl alias INITIATOR_TAG 1507 1.2 fvdl } 1508 1.2 fvdl 1509 1.2 fvdl SEQ_FLAGS2 { 1510 1.2 fvdl size 1 1511 1.2 fvdl field SCB_DMA 0x01 1512 1.2 fvdl field TARGET_MSG_PENDING 0x02 1513 1.1 fvdl } 1514 1.2 fvdl } 1515 1.1 fvdl 1516 1.2 fvdl scratch_ram { 1517 1.2 fvdl address 0x05a 1518 1.2 fvdl size 6 1519 1.1 fvdl /* 1520 1.2 fvdl * These are reserved registers in the card's scratch ram on the 2742. 1521 1.5 andvar * The EISA configuration chip is mapped here. On Rev E. of the 1522 1.2 fvdl * aic7770, the sequencer can use this area for scratch, but the 1523 1.2 fvdl * host cannot directly access these registers. On later chips, this 1524 1.2 fvdl * area can be read and written by both the host and the sequencer. 1525 1.2 fvdl * Even on later chips, many of these locations are initialized by 1526 1.2 fvdl * the BIOS. 1527 1.1 fvdl */ 1528 1.1 fvdl SCSICONF { 1529 1.1 fvdl size 1 1530 1.2 fvdl field TERM_ENB 0x80 1531 1.2 fvdl field RESET_SCSI 0x40 1532 1.2 fvdl field ENSPCHK 0x20 1533 1.1 fvdl mask HSCSIID 0x07 /* our SCSI ID */ 1534 1.1 fvdl mask HWSCSIID 0x0f /* our SCSI ID if Wide Bus */ 1535 1.1 fvdl } 1536 1.2 fvdl INTDEF { 1537 1.2 fvdl address 0x05c 1538 1.2 fvdl size 1 1539 1.2 fvdl field EDGE_TRIG 0x80 1540 1.2 fvdl mask VECTOR 0x0f 1541 1.2 fvdl } 1542 1.1 fvdl HOSTCONF { 1543 1.1 fvdl address 0x05d 1544 1.1 fvdl size 1 1545 1.1 fvdl } 1546 1.1 fvdl HA_274_BIOSCTRL { 1547 1.1 fvdl address 0x05f 1548 1.1 fvdl size 1 1549 1.1 fvdl mask BIOSMODE 0x30 1550 1.3 perry mask BIOSDISABLED 0x30 1551 1.2 fvdl field CHANNEL_B_PRIMARY 0x08 1552 1.1 fvdl } 1553 1.2 fvdl } 1554 1.2 fvdl 1555 1.2 fvdl scratch_ram { 1556 1.2 fvdl address 0x070 1557 1.2 fvdl size 16 1558 1.2 fvdl 1559 1.1 fvdl /* 1560 1.1 fvdl * Per target SCSI offset values for Ultra2 controllers. 1561 1.1 fvdl */ 1562 1.1 fvdl TARG_OFFSET { 1563 1.1 fvdl size 16 1564 1.1 fvdl } 1565 1.1 fvdl } 1566 1.1 fvdl 1567 1.2 fvdl const TID_SHIFT 4 1568 1.1 fvdl const SCB_LIST_NULL 0xff 1569 1.1 fvdl const TARGET_CMD_CMPLT 0xfe 1570 1.1 fvdl 1571 1.1 fvdl const CCSGADDR_MAX 0x80 1572 1.1 fvdl const CCSGRAM_MAXSEGS 16 1573 1.1 fvdl 1574 1.1 fvdl /* WDTR Message values */ 1575 1.1 fvdl const BUS_8_BIT 0x00 1576 1.1 fvdl const BUS_16_BIT 0x01 1577 1.1 fvdl const BUS_32_BIT 0x02 1578 1.1 fvdl 1579 1.1 fvdl /* Offset maximums */ 1580 1.1 fvdl const MAX_OFFSET_8BIT 0x0f 1581 1.1 fvdl const MAX_OFFSET_16BIT 0x08 1582 1.1 fvdl const MAX_OFFSET_ULTRA2 0x7f 1583 1.2 fvdl const MAX_OFFSET 0xff 1584 1.1 fvdl const HOST_MSG 0xff 1585 1.1 fvdl 1586 1.1 fvdl /* Target mode command processing constants */ 1587 1.1 fvdl const CMD_GROUP_CODE_SHIFT 0x05 1588 1.1 fvdl 1589 1.1 fvdl const STATUS_BUSY 0x08 1590 1.2 fvdl const STATUS_QUEUE_FULL 0x28 1591 1.2 fvdl const TARGET_DATA_IN 1 1592 1.1 fvdl 1593 1.1 fvdl /* 1594 1.1 fvdl * Downloaded (kernel inserted) constants 1595 1.1 fvdl */ 1596 1.2 fvdl /* Offsets into the SCBID array where different data is stored */ 1597 1.2 fvdl const QOUTFIFO_OFFSET download 1598 1.2 fvdl const QINFIFO_OFFSET download 1599 1.2 fvdl const CACHESIZE_MASK download 1600 1.2 fvdl const INVERTED_CACHESIZE_MASK download 1601 1.2 fvdl const SG_PREFETCH_CNT download 1602 1.2 fvdl const SG_PREFETCH_ALIGN_MASK download 1603 1.2 fvdl const SG_PREFETCH_ADDR_MASK download 1604