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