File Index
Files and directories
Sign in
FILE

aic7xxx.reg

File preview with syntax highlighting.

linux-6.19.14/drivers/scsi/aic7xxx/aic7xxx.reg 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 */
  42VERSION = "$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 */
  68register 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 */
  85register 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 */
 101register 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 */
 118register 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 */
 149register 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 */
 180register 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 */
 196register 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 */
 219register SCSIDATL {
 220	address			0x006
 221	access_mode RW
 222	dont_generate_debug_code
 223}
 224
 225register 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 */ 
 237register 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) */
 245register 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 */
 254register 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 */
 271register 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 */
 283register 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 */
 300register 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 */
 318register 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 */
 334register 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 */
 350register SSTAT2 {
 351	address			0x00d
 352	access_mode RO
 353	field	OVERRUN		0x80
 354	field	SHVALID		0x40	/* Shadow 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 */
 366register 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 */
 378register 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 */
 391register 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 */
 410register 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 */
 427register SCSIBUSL {
 428	address			0x012
 429	access_mode RW
 430}
 431
 432register 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 */
 445register 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 */
 455register 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 */
 474register SELID {
 475	address			0x019
 476	access_mode RW
 477	mask	SELID_MASK	0xf0
 478	field	ONEBIT		0x08
 479	dont_generate_debug_code
 480}
 481
 482register 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 */
 495register 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 */
 511register 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
 526register 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 */
 570register 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 */
 590register 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 */
 607register 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 */
 628register 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 */
 639register SEQADDR0 {
 640	address			0x062
 641	access_mode RW
 642	dont_generate_debug_code
 643}
 644
 645register 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 */
 657register ACCUM {
 658	address			0x064
 659	access_mode RW
 660	accumulator
 661	dont_generate_debug_code
 662}
 663
 664register SINDEX	{
 665	address			0x065
 666	access_mode RW
 667	sindex
 668	dont_generate_debug_code
 669}
 670
 671register DINDEX {
 672	address			0x066
 673	access_mode RW
 674	dont_generate_debug_code
 675}
 676
 677register ALLONES {
 678	address			0x069
 679	access_mode RO
 680	allones
 681	dont_generate_debug_code
 682}
 683
 684register ALLZEROS {
 685	address			0x06a
 686	access_mode RO
 687	allzeros
 688	dont_generate_debug_code
 689}
 690
 691register NONE {
 692	address			0x06a
 693	access_mode WO
 694	none
 695	dont_generate_debug_code
 696}
 697
 698register 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
 707register SINDIR	{
 708	address			0x06c
 709	access_mode RO
 710	dont_generate_debug_code
 711}
 712
 713register DINDIR	 {
 714	address			0x06d
 715	access_mode WO
 716	dont_generate_debug_code
 717}
 718
 719register FUNCTION1 {
 720	address			0x06e
 721	access_mode RW
 722}
 723
 724register STACK {
 725	address			0x06f
 726	access_mode RO
 727	count		5
 728	dont_generate_debug_code
 729}
 730
 731const	STACK_SIZE	4
 732
 733/*
 734 * Board Control (p. 3-43)
 735 */
 736register 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 */
 747register 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
 763register 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 */
 775register 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 */
 787register 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 */
 800register 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 */
 808register 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
 816const	HOST_MAILBOX_SHIFT	4
 817const	SEQ_MAILBOX_SHIFT	0
 818
 819/*
 820 * Host Control (p. 3-47) R/W
 821 * Overall host control of the device.
 822 */
 823register 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 */
 842register HADDR {
 843	address			0x088
 844	size	4
 845	access_mode RW
 846	dont_generate_debug_code
 847}
 848
 849register 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 */
 860register 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 */
 870register 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 */
 940register 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 */
 957register 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
 969register 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
 984register 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
 997register DFWADDR {
 998	address			0x95
 999	access_mode RW
1000	dont_generate_debug_code
1001}
1002
1003register DFRADDR {
1004	address			0x97
1005	access_mode RW
1006}
1007
1008register 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 */
1019register 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 */
1032register 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 */
1043register 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 */
1052register QOUTFIFO {
1053	address			0x09d
1054	access_mode WO
1055	count		7
1056	dont_generate_debug_code
1057}
1058
1059register 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 */
1077register QOUTCNT {
1078	address			0x09e
1079	access_mode RO
1080}
1081
1082register 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 */
1097register 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 */
1108scb {
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
1211const	SCB_UPLOAD_SIZE		32
1212const	SCB_DOWNLOAD_SIZE	32
1213const	SCB_DOWNLOAD_SIZE_64	48
1214
1215const	SG_SIZEOF	0x08		/* sizeof(struct ahc_dma) */
1216
1217/* --------------------- AHA-2840-only definitions -------------------- */
1218
1219register 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
1229register 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
1242register CCHADDR {
1243	address			0x0E0
1244	size 8
1245	dont_generate_debug_code
1246}
1247
1248register CCHCNT {
1249	address			0x0E8
1250	dont_generate_debug_code
1251}
1252
1253register CCSGRAM {
1254	address			0x0E9
1255	dont_generate_debug_code
1256}
1257
1258register CCSGADDR {
1259	address			0x0EA
1260	dont_generate_debug_code
1261}
1262
1263register 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
1272register CCSCBCNT {
1273	address			0xEF
1274	count		1
1275	dont_generate_debug_code
1276}
1277
1278register 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
1289register CCSCBADDR {
1290	address			0x0ED
1291	dont_generate_debug_code
1292}
1293
1294register CCSCBRAM {
1295	address			0xEC
1296	dont_generate_debug_code
1297}
1298
1299/*
1300 * SCB bank address (7895/7896/97 only)
1301 */
1302register SCBBADDR {
1303	address			0x0F0
1304	access_mode RW
1305	count		3
1306	dont_generate_debug_code
1307}
1308
1309register CCSCBPTR {
1310	address			0x0F1
1311	dont_generate_debug_code
1312}
1313
1314register HNSCB_QOFF {
1315	address			0x0F4
1316	count		4
1317	dont_generate_debug_code
1318}
1319
1320register SNSCB_QOFF {
1321	address			0x0F6
1322	dont_generate_debug_code
1323}
1324
1325register SDSCB_QOFF {
1326	address			0x0F8
1327	dont_generate_debug_code
1328}
1329
1330register 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
1340register 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
1364register 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
1373register 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
1396scratch_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
1636scratch_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
1664scratch_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 configuration 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
1711scratch_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
1725const TID_SHIFT		4
1726const SCB_LIST_NULL	0xff
1727const TARGET_CMD_CMPLT	0xfe
1728
1729const CCSGADDR_MAX	0x80
1730const CCSGRAM_MAXSEGS	16
1731
1732/* WDTR Message values */
1733const BUS_8_BIT			0x00
1734const BUS_16_BIT		0x01
1735const BUS_32_BIT		0x02
1736
1737/* Offset maximums */
1738const MAX_OFFSET_8BIT		0x0f
1739const MAX_OFFSET_16BIT		0x08
1740const MAX_OFFSET_ULTRA2		0x7f
1741const MAX_OFFSET		0x7f
1742const HOST_MSG			0xff
1743
1744/* Target mode command processing constants */
1745const CMD_GROUP_CODE_SHIFT	0x05
1746
1747const STATUS_BUSY		0x08
1748const STATUS_QUEUE_FULL	0x28
1749const TARGET_DATA_IN		1
1750
1751/*
1752 * Downloaded (kernel inserted) constants
1753 */
1754/* Offsets into the SCBID array where different data is stored */
1755const QOUTFIFO_OFFSET download
1756const QINFIFO_OFFSET download
1757const CACHESIZE_MASK download
1758const INVERTED_CACHESIZE_MASK download
1759const SG_PREFETCH_CNT download
1760const SG_PREFETCH_ALIGN_MASK download
1761const SG_PREFETCH_ADDR_MASK download
~/ Read-only file preview.