aic7xxx.reg
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:32k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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