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