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