2 * Aic7xxx register and scratch ram definitions.
4 * Copyright (c) 1994-2001 Justin T. Gibbs.
5 * Copyright (c) 2000-2001 Adaptec Inc.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions, and the following disclaimer,
13 * without modification.
14 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
15 * substantially similar to the "NO WARRANTY" disclaimer below
16 * ("Disclaimer") and any redistribution must be conditioned upon
17 * including a substantially similar Disclaimer requirement for further
18 * binary redistribution.
19 * 3. Neither the names of the above-listed copyright holders nor the names
20 * of any contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
23 * Alternatively, this software may be distributed under the terms of the
24 * GNU General Public License ("GPL") version 2 as published by the Free
25 * Software Foundation.
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES.
40 * $FreeBSD: /repoman/r/ncvs/src/sys/dev/aic7xxx/aic7xxx.reg,v 1.43 2003/01/20 20:44:55 gibbs Exp $
42 VERSION = "$NetBSD: aic7xxx.reg,v 1.2.2.1 2005/03/04 16:43:50 skrll Exp $"
45 * This file is processed by the aic7xxx_asm utility for use in assembling
46 * firmware for the aic7xxx family of SCSI host adapters as well as to generate
47 * a C header file for use in the kernel portion of the Aic7xxx driver.
49 * All page numbers refer to the Adaptec AIC-7770 Data Book available from
50 * Adaptec's Technical Documents Department 1-800-934-2766
54 * SCSI Sequence Control (p. 3-11).
55 * Each bit, when set starts a specific SCSI sequence on the bus
71 * SCSI Transfer Control 0 Register (pp. 3-13).
72 * Controls the SCSI module data path.
87 * SCSI Transfer Control 1 Register (pp. 3-14,15).
88 * Controls the SCSI module data path.
99 field STPWEN 0x01 /* Powered Termination */
103 * SCSI Control Signal Read Register (p. 3-15).
104 * Reads the actual state of the SCSI bus pins
118 * Possible phases in SCSISIGI
120 mask PHASE_MASK CDI|IOI|MSGI
123 mask P_DATAOUT_DT P_DATAOUT|MSGI
124 mask P_DATAIN_DT P_DATAIN|MSGI
126 mask P_MESGOUT CDI|MSGI
127 mask P_STATUS CDI|IOI
128 mask P_MESGIN CDI|IOI|MSGI
132 * SCSI Control Signal Write Register (p. 3-16).
133 * Writing to this register modifies the control signals on the bus. Only
134 * those signals that are allowed in the current mode (Initiator/Target) are
149 * Possible phases to write into SCSISIG0
151 mask PHASE_MASK CDI|IOI|MSGI
155 mask P_MESGOUT CDI|MSGI
156 mask P_STATUS CDI|IOI
157 mask P_MESGIN CDI|IOI|MSGI
161 * SCSI Rate Control (p. 3-17).
162 * Contents of this register determine the Synchronous SCSI data transfer
163 * rate and the maximum synchronous Req/Ack offset. An offset of 0 in the
164 * SOFS (3:0) bits disables synchronous data transfers. Any offset value
165 * greater than 0 enables synchronous transfers.
170 field WIDEXFER 0x80 /* Wide transfer control */
171 field ENABLE_CRC 0x40 /* CRC for D-Phases */
172 field SINGLE_EDGE 0x10 /* Disable DT Transfers */
173 mask SXFR 0x70 /* Sync transfer rate */
174 mask SXFR_ULTRA2 0x0f /* Sync transfer rate */
175 mask SOFS 0x0f /* Sync offset */
180 * Contains the ID of the board and the current target on the
186 mask TID 0xf0 /* Target ID mask */
188 field TWIN_CHNLB 0x80
189 mask OID 0x0f /* Our ID mask */
191 * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book)
192 * The aic7890/91 allow an offset of up to 127 transfers in both wide
196 mask SOFS_ULTRA2 0x7f /* Sync offset U2 chips */
200 * SCSI Latched Data (p. 3-19).
201 * Read/Write latches used to transfer data on the SCSI bus during
202 * Automatic or Manual PIO mode. SCSIDATH can be used for the
203 * upper byte of a 16bit wide asynchronouse data phase transfer.
216 * SCSI Transfer Count (pp. 3-19,20)
217 * These registers count down the number of bytes transferred
218 * across the SCSI bus. The counter is decremented only once
219 * the data has been safely transferred. SDONE in SSTAT0 is
220 * set when STCNT goes to 0
228 /* ALT_MODE registers (Ultra2 and Ultra160 chips) */
232 field AUTORSTDIS 0x10
234 mask ASYNC_SETUP 0x07
237 /* ALT_MODE register on Ultra160 chips */
238 register OPTIONMODE {
241 field AUTORATEEN 0x80
243 field ATNMGMNTEN 0x20
244 field BUSFREEREV 0x10
245 field EXPPHASEDIS 0x08
246 field SCSIDATL_IMGEN 0x04
247 field AUTO_MSGOUT_DE 0x02
248 field DIS_MSGIN_DUALEDGE 0x01
249 mask OPTIONMODE_DEFAULTS AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE
252 /* ALT_MODE register on Ultra160 chips */
253 register TARGCRCCNT {
260 * Clear SCSI Interrupt 0 (p. 3-20)
261 * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
268 field CLRSELINGO 0x10
270 field CLRIOERR 0x08 /* Ultra2 Only */
271 field CLRSPIORDY 0x02
275 * SCSI Status 0 (p. 3-21)
276 * Contains one set of SCSI Interrupt codes
277 * These are most likely of interest to the sequencer
282 field TARGET 0x80 /* Board acting as target */
283 field SELDO 0x40 /* Selection Done */
284 field SELDI 0x20 /* Board has been selected */
285 field SELINGO 0x10 /* Selection In Progress */
286 field SWRAP 0x08 /* 24bit counter wrap */
287 field IOERR 0x08 /* LVD Tranceiver mode changed */
288 field SDONE 0x04 /* STCNT = 0x000000 */
289 field SPIORDY 0x02 /* SCSI PIO Ready */
290 field DMADONE 0x01 /* DMA transfer completed */
294 * Clear SCSI Interrupt 1 (p. 3-23)
295 * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
300 field CLRSELTIMEO 0x80
302 field CLRSCSIRSTI 0x20
303 field CLRBUSFREE 0x08
304 field CLRSCSIPERR 0x04
305 field CLRPHASECHG 0x02
306 field CLRREQINIT 0x01
310 * SCSI Status 1 (p. 3-24)
326 * SCSI Status 2 (pp. 3-25,26)
332 field SHVALID 0x40 /* Shaddow Layer non-zero */
333 field EXP_ACTIVE 0x10 /* SCSI Expander Active */
334 field CRCVALERR 0x08 /* CRC doesn't match (U3 only) */
335 field CRCENDERR 0x04 /* No terminal CRC packet (U3 only) */
336 field CRCREQERR 0x02 /* Illegal CRC packet req (U3 only) */
337 field DUAL_EDGE_ERR 0x01 /* Incorrect data phase (U3 only) */
342 * SCSI Status 3 (p. 3-26)
353 * SCSI ID for the aic7890/91 chips
355 register SCSIID_ULTRA2 {
358 mask TID 0xf0 /* Target ID mask */
359 mask OID 0x0f /* Our ID mask */
363 * SCSI Interrupt Mode 1 (p. 3-28)
364 * Setting any bit will enable the corresponding function
365 * in SIMODE0 to interrupt via the IRQ pin.
374 field ENIOERR 0x08 /* LVD Tranceiver mode changes */
381 * SCSI Interrupt Mode 1 (pp. 3-28,29)
382 * Setting any bit will enable the corresponding function
383 * in SIMODE1 to interrupt via the IRQ pin.
391 field ENPHASEMIS 0x10
393 field ENSCSIPERR 0x04
394 field ENPHASECHG 0x02
399 * SCSI Data Bus (High) (p. 3-29)
400 * This register reads data on the SCSI Data bus directly.
413 * SCSI/Host Address (p. 3-30)
414 * These registers hold the host address for the byte about to be
415 * transferred on the SCSI bus. They are counted up in the same
416 * manner as STCNT is counted down. SHADDR should always be used
417 * to determine the address of the last byte transferred since HADDR
418 * can be skewed by write ahead.
427 * Selection Timeout Timer (p. 3-30)
442 * Selection/Reselection ID (p. 3-31)
443 * Upper four bits are the device id. The ONEBIT is set when the re/selecting
444 * device did not set its own ID.
456 field ENSCAMSELO 0x80
457 field CLRSCAMSELID 0x40
464 * Target Mode Selecting in ID bitmask (aic7890/91/96/97)
473 * Serial Port I/O Cabability register (p. 4-95 aic7860 Data Book)
474 * Indicates if external logic has been attached to the chip to
475 * perform the tasks of accessing a serial eeprom, testing termination
476 * strength, and performing cable detection. On the aic7860, most of
477 * these features are handled on chip, but on the aic7855 an attached
478 * aic3800 does the grunt work.
486 field EXT_BRDCTL 0x10 /* External Board control */
487 field SEEPROM 0x08 /* External serial eeprom logic */
488 field EEPROM 0x04 /* Writable external BIOS ROM */
489 field ROM 0x02 /* Logic for accessing external ROM */
490 field SSPIOCPS 0x01 /* Termination and cable detection */
503 /* 7890 Definitions */
507 field BRDRW_ULTRA2 0x02
508 field BRDSTB_ULTRA2 0x01
512 * Serial EEPROM Control (p. 4-92 in 7870 Databook)
513 * Controls the reading and writing of an external serial 1-bit
514 * EEPROM Device. In order to access the serial EEPROM, you must
515 * first set the SEEMS bit that generates a request to the memory
516 * port for access to the serial EEPROM device. When the memory
517 * port is not busy servicing another request, it reconfigures
518 * to allow access to the serial EEPROM. When this happens, SEERDY
519 * gets set high to verify that the memory port access has been
522 * After successful arbitration for the memory port, the SEECS bit of
523 * the SEECTL register is connected to the chip select. The SEECK,
524 * SEEDO, and SEEDI are connected to the clock, data out, and data in
525 * lines respectively. The SEERDY bit of SEECTL is useful in that it
526 * gives us an 800 nsec timer. After a write to the SEECTL register,
527 * the SEERDY goes high 800 nsec later. The one exception to this is
528 * when we first request access to the memory port. The SEERDY goes
529 * high to signify that access has been granted and, for this case, has
532 * See 93cx6.c for detailed information on the protocol necessary to
533 * read the serial EEPROM.
547 * SCSI Block Control (p. 3-32)
548 * Controls Bus type and channel selection. In a twin channel configuration
549 * addresses 0x00-0x1e are gated to the appropriate channel based on this
550 * register. SELWIDE allows for the coexistence of 8bit and 16bit devices
556 field DIAGLEDEN 0x80 /* Aic78X0 only */
557 field DIAGLEDON 0x40 /* Aic78X0 only */
558 field AUTOFLUSHDIS 0x20
560 field ENAB40 0x08 /* LVD transceiver active */
561 field ENAB20 0x04 /* SE/HVD transceiver active */
563 field XCVR 0x01 /* External transceiver active */
567 * Sequencer Control (p. 3-33)
568 * Error detection mode and speed configuration
577 field BRKADRINTEN 0x08
584 * Sequencer RAM Data (p. 3-34)
585 * Single byte window into the Scratch Ram area starting at the address
586 * specified by SEQADDR0 and SEQADDR1. To write a full word, simply write
587 * four bytes in succession. The SEQADDRs will increment after the most
588 * significant byte is written
596 * Sequencer Address Registers (p. 3-35)
597 * Only the first bit of SEQADDR1 holds addressing information
607 mask SEQADDR1_MASK 0x01
612 * We cheat by passing arguments in the Accumulator up to the kernel driver
679 * Board Control (p. 3-43)
689 * On the aic78X0 chips, Board Control is replaced by the DSCommand
692 register DSCOMMAND0 {
695 field CACHETHEN 0x80 /* Cache Threshold enable */
696 field DPARCKEN 0x40 /* Data Parity Check Enable */
697 field MPARCKEN 0x20 /* Memory Parity Check Enable */
698 field EXTREQLCK 0x10 /* External Request Lock */
699 /* aic7890/91/96/97 only */
700 field INTSCBRAMSEL 0x08 /* Internal SCB RAM Select */
701 field RAMPS 0x04 /* External SCB RAM Present */
702 field USCBSIZE32 0x02 /* Use 32byte SCB Page Size */
703 field CIOPARCKEN 0x01 /* Internal bus parity error enable */
706 register DSCOMMAND1 {
709 mask DSLATT 0xfc /* PCI latency timer (non-ultra2) */
710 field HADDLDSEL1 0x02 /* Host Address Load Select Bits */
711 field HADDLDSEL0 0x01
715 * Bus On/Off Time (p. 3-44) aic7770 only
725 * Bus Speed (p. 3-45) aic7770 only
733 mask DFTHRSH_100 0xc0
737 /* aic7850/55/60/70/80/95 only */
738 register DSPCISTATUS {
740 mask DFTHRSH_100 0xc0
743 /* aic7890/91/96/97 only */
744 register HS_MAILBOX {
746 mask HOST_MAILBOX 0xF0
747 mask SEQ_MAILBOX 0x0F
748 mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */
751 const HOST_MAILBOX_SHIFT 4
752 const SEQ_MAILBOX_SHIFT 0
755 * Host Control (p. 3-47) R/W
756 * Overall host control of the device.
767 field CHIPRSTACK 0x01
771 * Host Address (p. 3-48)
772 * This register contains the address of the byte about
773 * to be transferred across the host bus.
788 * SCB Pointer (p. 3-49)
789 * Gate one of the SCBs into the SCBARRAY window.
797 * Interrupt Status (p. 3-50)
798 * Status for system interrupts
807 mask BAD_PHASE SEQINT /* unknown scsi bus phase */
808 mask SEND_REJECT 0x10|SEQINT /* sending a message reject */
809 mask PROTO_VIOLATION 0x20|SEQINT /* SCSI protocol violation */
810 mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */
811 mask IGN_WIDE_RES 0x40|SEQINT /* Complex IGN Wide Res Msg */
812 mask PDATA_REINIT 0x50|SEQINT /*
813 * Returned to data phase
815 * transfer pointers to be
816 * recalculated from the
819 mask HOST_MSG_LOOP 0x60|SEQINT /*
820 * The bus is ready for the
821 * host to perform another
822 * message transaction. This
823 * mechanism is used for things
824 * like sync/wide negotiation
825 * that require a kernel based
826 * message state engine.
828 mask BAD_STATUS 0x70|SEQINT /* Bad status from target */
829 mask PERR_DETECTED 0x80|SEQINT /*
830 * Either the phase_lock
831 * or inb_next routine has
832 * noticed a parity error.
834 mask DATA_OVERRUN 0x90|SEQINT /*
835 * Target attempted to write
836 * beyond the bounds of its
839 mask MKMSG_FAILED 0xa0|SEQINT /*
840 * Target completed command
841 * without honoring our ATN
842 * request to issue a message.
844 mask MISSED_BUSFREE 0xb0|SEQINT /*
845 * The sequencer never saw
846 * the bus go free after
847 * either a command complete
848 * or disconnect message.
850 mask SCB_MISMATCH 0xc0|SEQINT /*
851 * Downloaded SCB's tag does
852 * not match the entry we
853 * intended to download.
855 mask NO_FREE_SCB 0xd0|SEQINT /*
856 * get_free_or_disc_scb failed.
858 mask OUT_OF_RANGE 0xe0|SEQINT
860 mask SEQINT_MASK 0xf0|SEQINT /* SEQINT Status Codes */
861 mask INT_PEND (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT)
865 * Hard Error (p. 3-53)
866 * Reporting of catastrophic errors. You usually cannot recover from
867 * these without a full board reset.
872 field CIOPARERR 0x80 /* Ultra2 only */
873 field PCIERRSTAT 0x40 /* PCI only */
874 field MPARERR 0x20 /* PCI only */
875 field DPARERR 0x10 /* PCI only */
883 * Clear Interrupt Status (p. 3-52)
888 field CLRPARERR 0x10 /* PCI only */
889 field CLRBRKADRINT 0x08
890 field CLRSCSIINT 0x04
898 field PRELOADEN 0x80 /* aic7890 only */
913 field PRELOAD_AVAIL 0x80
915 field FIFOQWDEMP 0x20
939 * SCB Auto Increment (p. 3-59)
940 * Byte offset into the SCB Array and an optional bit to allow auto
941 * incrementing of the address during download and upload operations
947 mask SCBCNT_MASK 0x1f
951 * Queue In FIFO (p. 3-60)
952 * Input queue for queued SCBs (commands that the seqencer has yet to start)
960 * Queue In Count (p. 3-60)
961 * Number of queued SCBs
969 * Queue Out FIFO (p. 3-61)
970 * Queue of SCBs that have completed and await the host
977 register CRCCONTROL1 {
981 field CRCVALCHKEN 0x40
982 field CRCENDCHKEN 0x20
983 field CRCREQCHKEN 0x10
984 field TARGCRCENDEN 0x08
985 field TARGCRCCNTEN 0x04
990 * Queue Out Count (p. 3-61)
991 * Number of queued SCBs in the Out FIFO
1001 field STATUS_PHASE 0x20
1002 field COMMAND_PHASE 0x10
1003 field MSG_IN_PHASE 0x08
1004 field MSG_OUT_PHASE 0x04
1005 field DATA_IN_PHASE 0x02
1006 field DATA_OUT_PHASE 0x01
1007 mask DATA_PHASE_MASK 0x03
1020 * SCB Definition (p. 5-4)
1028 alias SCB_RESIDUAL_DATACNT
1031 SCB_RESIDUAL_SGPTR {
1040 SCB_TARGET_DATA_DIR {
1051 * The last byte is really the high address bits for
1055 field SG_LAST_SEG 0x80 /* In the fourth byte */
1056 mask SG_HIGH_ADDR_BITS 0x7F /* In the fourth byte */
1060 field SG_RESID_VALID 0x04 /* In the first byte */
1061 field SG_FULL_RESID 0x02 /* In the first byte */
1062 field SG_LIST_NULL 0x01 /* In the first byte */
1066 field TARGET_SCB 0x80
1067 field STATUS_RCVD 0x80
1070 field MK_MESSAGE 0x10
1072 field DISCONNECTED 0x04
1073 mask SCB_TAG_TYPE 0x03
1077 field TWIN_CHNLB 0x80
1109 const SCB_UPLOAD_SIZE 32
1110 const SCB_DOWNLOAD_SIZE 32
1111 const SCB_DOWNLOAD_SIZE_64 48
1113 const SG_SIZEOF 0x08 /* sizeof(struct ahc_dma) */
1115 /* --------------------- AHA-2840-only definitions -------------------- */
1117 register SEECTL_2840 {
1125 register STATUS_2840 {
1128 field EEPROM_TF 0x80
1134 /* --------------------- AIC-7870-only definitions -------------------- */
1157 field SG_FETCH_NEEDED 0x02 /* Bit used for software state */
1158 field CCSGRESET 0x01
1167 field CCSCBDONE 0x80
1168 field ARRDONE 0x40 /* SCB Array prefetch done */
1172 field CCSCBRESET 0x01
1175 register CCSCBADDR {
1184 * SCB bank address (7895/7896/97 only)
1195 register HNSCB_QOFF {
1199 register SNSCB_QOFF {
1203 register SDSCB_QOFF {
1207 register QOFF_CTLSTA {
1209 field SCB_AVAIL 0x40
1210 field SNSCB_ROLLOVER 0x20
1211 field SDSCB_ROLLOVER 0x10
1213 mask SCB_QSIZE_256 0x06
1216 register DFF_THRSH {
1218 mask WR_DFTHRSH 0x70
1219 mask RD_DFTHRSH 0x07
1220 mask RD_DFTHRSH_MIN 0x00
1221 mask RD_DFTHRSH_25 0x01
1222 mask RD_DFTHRSH_50 0x02
1223 mask RD_DFTHRSH_63 0x03
1224 mask RD_DFTHRSH_75 0x04
1225 mask RD_DFTHRSH_85 0x05
1226 mask RD_DFTHRSH_90 0x06
1227 mask RD_DFTHRSH_MAX 0x07
1228 mask WR_DFTHRSH_MIN 0x00
1229 mask WR_DFTHRSH_25 0x10
1230 mask WR_DFTHRSH_50 0x20
1231 mask WR_DFTHRSH_63 0x30
1232 mask WR_DFTHRSH_75 0x40
1233 mask WR_DFTHRSH_85 0x50
1234 mask WR_DFTHRSH_90 0x60
1235 mask WR_DFTHRSH_MAX 0x70
1238 register SG_CACHE_PRE {
1241 mask SG_ADDR_MASK 0xf8
1244 field LAST_SEG_DONE 0x01
1247 register SG_CACHE_SHADOW {
1250 mask SG_ADDR_MASK 0xf8
1253 field LAST_SEG_DONE 0x01
1255 /* ---------------------- Scratch RAM Offsets ------------------------- */
1256 /* These offsets are either to values that are initialized by the board's
1257 * BIOS or are specified by the sequencer code.
1259 * The host adapter card (at least the BIOS) uses 20-2f for SCSI
1260 * device information, 32-33 and 5a-5f as well. As it turns out, the
1261 * BIOS trashes 20-2f, writing the synchronous negotiation results
1262 * on top of the BIOS values, so we re-use those for our per-target
1263 * scratchspace (actually a value that can be copied directly into
1264 * SCSIRATE). The kernel driver will enable synchronous negotiation
1265 * for all targets that have a value other than 0 in the lower four
1266 * bits of the target scratch space. This should work regardless of
1267 * whether the bios has been installed.
1275 * 1 byte per target starting at this address for configuration values
1282 * Bit vector of targets that have ULTRA enabled as set by
1283 * the BIOS. The Sequencer relies on a per-SCB field to
1284 * control whether to enable Ultra transfers or not. During
1285 * initialization, we read this field and reuse it for 2
1286 * entries in the busy target table.
1293 * Bit vector of targets that have disconnection disabled as set by
1294 * the BIOS. The Sequencer relies in a per-SCB field to control the
1295 * disconnect priveldge. During initialization, we read this field
1296 * and reuse it for 2 entries in the busy target table.
1301 CMDSIZE_TABLE_TAIL {
1305 * Partial transfer past cacheline end to be
1306 * transferred using an extra S/G.
1310 alias TARG_IMMEDIATE_SCB
1313 * SCBID of the next SCB to be started by the controller.
1319 * Single byte buffer used to designate the type or message
1320 * to send to a target.
1325 /* Parameters for DMA Logic */
1328 field PRELOADEN 0x80
1332 field SDMAENACK 0x10
1334 field HDMAENACK 0x08
1335 field DIRECTION 0x04 /* Set indicates PCI->SCSI */
1336 field FIFOFLUSH 0x02
1337 field FIFORESET 0x01
1341 field NOT_IDENTIFIED 0x80
1342 field NO_CDB_SENT 0x40
1343 field TARGET_CMD_IS_TAGGED 0x40
1346 field TARG_CMD_PENDING 0x10
1347 field CMDPHASE_PENDING 0x08
1348 field DPHASE_PENDING 0x04
1349 field SPHASE_PENDING 0x02
1350 field NO_DISCONNECT 0x01
1353 * Temporary storage for the
1354 * target/channel/lun of a
1355 * reconnecting target
1364 * The last bus phase as seen by the sequencer.
1371 mask PHASE_MASK CDI|IOI|MSGI
1375 mask P_MESGOUT CDI|MSGI
1376 mask P_STATUS CDI|IOI
1377 mask P_MESGIN CDI|IOI|MSGI
1381 * head of list of SCBs awaiting
1388 * head of list of SCBs that are
1389 * disconnected. Used for SCB
1396 * head of list of SCBs that are
1397 * not in use. Used for SCB paging.
1403 * head of list of SCBs that have
1404 * completed but have not been
1405 * put into the qoutfifo.
1411 * Address of the hardware scb array in the host.
1417 * Base address of our shared data with the kernel driver in host
1418 * memory. This includes the qoutfifo and target mode
1419 * incoming command queue.
1434 * Kernel and sequencer offsets into the queue of
1435 * incoming target mode command descriptors. The
1436 * queue is full when the KERNEL_TQINPOS == TQINPOS.
1447 mask SEND_SENSE 0x40
1449 mask MSGOUT_PHASEMIS 0x10
1450 mask EXIT_MSG_LOOP 0x08
1451 mask CONT_MSG_LOOP 0x04
1452 mask CONT_TARG_SESSION 0x02
1461 * Snapshot of MSG_OUT taken after each message is sent.
1468 * Sequences the kernel driver has okayed for us. This allows
1469 * the driver to do things like prevent initiator or target
1477 field ENAUTOATNO 0x08
1478 field ENAUTOATNI 0x04
1479 field ENAUTOATNP 0x02
1483 * Track whether the transfer byte count for
1484 * the current data phase is odd.
1495 * These scratch ram locations are initialized by the 274X BIOS.
1496 * We reuse them after capturing the BIOS settings during
1501 * The initiator specified tag for this target mode transaction.
1505 field HA_274_EXTENDED_TRANS 0x01
1512 field TARGET_MSG_PENDING 0x02
1520 * These are reserved registers in the card's scratch ram on the 2742.
1521 * The EISA configuraiton chip is mapped here. On Rev E. of the
1522 * aic7770, the sequencer can use this area for scratch, but the
1523 * host cannot directly access these registers. On later chips, this
1524 * area can be read and written by both the host and the sequencer.
1525 * Even on later chips, many of these locations are initialized by
1531 field RESET_SCSI 0x40
1533 mask HSCSIID 0x07 /* our SCSI ID */
1534 mask HWSCSIID 0x0f /* our SCSI ID if Wide Bus */
1539 field EDGE_TRIG 0x80
1550 mask BIOSDISABLED 0x30
1551 field CHANNEL_B_PRIMARY 0x08
1560 * Per target SCSI offset values for Ultra2 controllers.
1568 const SCB_LIST_NULL 0xff
1569 const TARGET_CMD_CMPLT 0xfe
1571 const CCSGADDR_MAX 0x80
1572 const CCSGRAM_MAXSEGS 16
1574 /* WDTR Message values */
1575 const BUS_8_BIT 0x00
1576 const BUS_16_BIT 0x01
1577 const BUS_32_BIT 0x02
1579 /* Offset maximums */
1580 const MAX_OFFSET_8BIT 0x0f
1581 const MAX_OFFSET_16BIT 0x08
1582 const MAX_OFFSET_ULTRA2 0x7f
1583 const MAX_OFFSET 0xff
1586 /* Target mode command processing constants */
1587 const CMD_GROUP_CODE_SHIFT 0x05
1589 const STATUS_BUSY 0x08
1590 const STATUS_QUEUE_FULL 0x28
1591 const TARGET_DATA_IN 1
1594 * Downloaded (kernel inserted) constants
1596 /* Offsets into the SCBID array where different data is stored */
1597 const QOUTFIFO_OFFSET download
1598 const QINFIFO_OFFSET download
1599 const CACHESIZE_MASK download
1600 const INVERTED_CACHESIZE_MASK download
1601 const SG_PREFETCH_CNT download
1602 const SG_PREFETCH_ALIGN_MASK download
1603 const SG_PREFETCH_ADDR_MASK download