1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762 |
- /*
- * Aic7xxx register and scratch ram definitions.
- *
- * Copyright (c) 1994-2001 Justin T. Gibbs.
- * Copyright (c) 2000-2001 Adaptec Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions, and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * substantially similar to the "NO WARRANTY" disclaimer below
- * ("Disclaimer") and any redistribution must be conditioned upon
- * including a substantially similar Disclaimer requirement for further
- * binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGES.
- *
- * $FreeBSD$
- */
- VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $"
- /*
- * This file is processed by the aic7xxx_asm utility for use in assembling
- * firmware for the aic7xxx family of SCSI host adapters as well as to generate
- * a C header file for use in the kernel portion of the Aic7xxx driver.
- *
- * All page numbers refer to the Adaptec AIC-7770 Data Book available from
- * Adaptec's Technical Documents Department 1-800-934-2766
- */
- /*
- * Registers marked "dont_generate_debug_code" are not (yet) referenced
- * from the driver code, and this keyword inhibit generation
- * of debug code for them.
- *
- * REG_PRETTY_PRINT config will complain if dont_generate_debug_code
- * is added to the register which is referenced in the driver.
- * Unreferenced register with no dont_generate_debug_code will result
- * in dead code. No warning is issued.
- */
- /*
- * SCSI Sequence Control (p. 3-11).
- * Each bit, when set starts a specific SCSI sequence on the bus
- */
- register SCSISEQ {
- address 0x000
- access_mode RW
- field TEMODE 0x80
- field ENSELO 0x40
- field ENSELI 0x20
- field ENRSELI 0x10
- field ENAUTOATNO 0x08
- field ENAUTOATNI 0x04
- field ENAUTOATNP 0x02
- field SCSIRSTO 0x01
- }
- /*
- * SCSI Transfer Control 0 Register (pp. 3-13).
- * Controls the SCSI module data path.
- */
- register SXFRCTL0 {
- address 0x001
- access_mode RW
- field DFON 0x80
- field DFPEXP 0x40
- field FAST20 0x20
- field CLRSTCNT 0x10
- field SPIOEN 0x08
- field SCAMEN 0x04
- field CLRCHN 0x02
- }
- /*
- * SCSI Transfer Control 1 Register (pp. 3-14,15).
- * Controls the SCSI module data path.
- */
- register SXFRCTL1 {
- address 0x002
- access_mode RW
- field BITBUCKET 0x80
- field SWRAPEN 0x40
- field ENSPCHK 0x20
- mask STIMESEL 0x18
- field ENSTIMER 0x04
- field ACTNEGEN 0x02
- field STPWEN 0x01 /* Powered Termination */
- dont_generate_debug_code
- }
- /*
- * SCSI Control Signal Read Register (p. 3-15).
- * Reads the actual state of the SCSI bus pins
- */
- register SCSISIGI {
- address 0x003
- access_mode RO
- field CDI 0x80
- field IOI 0x40
- field MSGI 0x20
- field ATNI 0x10
- field SELI 0x08
- field BSYI 0x04
- field REQI 0x02
- field ACKI 0x01
- /*
- * Possible phases in SCSISIGI
- */
- mask PHASE_MASK CDI|IOI|MSGI
- mask P_DATAOUT 0x00
- mask P_DATAIN IOI
- mask P_DATAOUT_DT P_DATAOUT|MSGI
- mask P_DATAIN_DT P_DATAIN|MSGI
- mask P_COMMAND CDI
- mask P_MESGOUT CDI|MSGI
- mask P_STATUS CDI|IOI
- mask P_MESGIN CDI|IOI|MSGI
- }
- /*
- * SCSI Control Signal Write Register (p. 3-16).
- * Writing to this register modifies the control signals on the bus. Only
- * those signals that are allowed in the current mode (Initiator/Target) are
- * asserted.
- */
- register SCSISIGO {
- address 0x003
- access_mode WO
- field CDO 0x80
- field IOO 0x40
- field MSGO 0x20
- field ATNO 0x10
- field SELO 0x08
- field BSYO 0x04
- field REQO 0x02
- field ACKO 0x01
- /*
- * Possible phases to write into SCSISIG0
- */
- mask PHASE_MASK CDI|IOI|MSGI
- mask P_DATAOUT 0x00
- mask P_DATAIN IOI
- mask P_COMMAND CDI
- mask P_MESGOUT CDI|MSGI
- mask P_STATUS CDI|IOI
- mask P_MESGIN CDI|IOI|MSGI
- dont_generate_debug_code
- }
- /*
- * SCSI Rate Control (p. 3-17).
- * Contents of this register determine the Synchronous SCSI data transfer
- * rate and the maximum synchronous Req/Ack offset. An offset of 0 in the
- * SOFS (3:0) bits disables synchronous data transfers. Any offset value
- * greater than 0 enables synchronous transfers.
- */
- register SCSIRATE {
- address 0x004
- access_mode RW
- field WIDEXFER 0x80 /* Wide transfer control */
- field ENABLE_CRC 0x40 /* CRC for D-Phases */
- field SINGLE_EDGE 0x10 /* Disable DT Transfers */
- mask SXFR 0x70 /* Sync transfer rate */
- mask SXFR_ULTRA2 0x0f /* Sync transfer rate */
- mask SOFS 0x0f /* Sync offset */
- }
- /*
- * SCSI ID (p. 3-18).
- * Contains the ID of the board and the current target on the
- * selected channel.
- */
- register SCSIID {
- address 0x005
- access_mode RW
- mask TID 0xf0 /* Target ID mask */
- mask TWIN_TID 0x70
- field TWIN_CHNLB 0x80
- mask OID 0x0f /* Our ID mask */
- /*
- * SCSI Maximum Offset (p. 4-61 aic7890/91 Data Book)
- * The aic7890/91 allow an offset of up to 127 transfers in both wide
- * and narrow mode.
- */
- alias SCSIOFFSET
- mask SOFS_ULTRA2 0x7f /* Sync offset U2 chips */
- dont_generate_debug_code
- }
- /*
- * SCSI Latched Data (p. 3-19).
- * Read/Write latches used to transfer data on the SCSI bus during
- * Automatic or Manual PIO mode. SCSIDATH can be used for the
- * upper byte of a 16bit wide asynchronouse data phase transfer.
- */
- register SCSIDATL {
- address 0x006
- access_mode RW
- dont_generate_debug_code
- }
- register SCSIDATH {
- address 0x007
- access_mode RW
- }
- /*
- * SCSI Transfer Count (pp. 3-19,20)
- * These registers count down the number of bytes transferred
- * across the SCSI bus. The counter is decremented only once
- * the data has been safely transferred. SDONE in SSTAT0 is
- * set when STCNT goes to 0
- */
- register STCNT {
- address 0x008
- size 3
- access_mode RW
- dont_generate_debug_code
- }
- /* ALT_MODE registers (Ultra2 and Ultra160 chips) */
- register SXFRCTL2 {
- address 0x013
- access_mode RW
- field AUTORSTDIS 0x10
- field CMDDMAEN 0x08
- mask ASYNC_SETUP 0x07
- }
- /* ALT_MODE register on Ultra160 chips */
- register OPTIONMODE {
- address 0x008
- access_mode RW
- count 2
- field AUTORATEEN 0x80
- field AUTOACKEN 0x40
- field ATNMGMNTEN 0x20
- field BUSFREEREV 0x10
- field EXPPHASEDIS 0x08
- field SCSIDATL_IMGEN 0x04
- field AUTO_MSGOUT_DE 0x02
- field DIS_MSGIN_DUALEDGE 0x01
- mask OPTIONMODE_DEFAULTS AUTO_MSGOUT_DE|DIS_MSGIN_DUALEDGE
- dont_generate_debug_code
- }
- /* ALT_MODE register on Ultra160 chips */
- register TARGCRCCNT {
- address 0x00a
- size 2
- access_mode RW
- count 2
- dont_generate_debug_code
- }
- /*
- * Clear SCSI Interrupt 0 (p. 3-20)
- * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
- */
- register CLRSINT0 {
- address 0x00b
- access_mode WO
- field CLRSELDO 0x40
- field CLRSELDI 0x20
- field CLRSELINGO 0x10
- field CLRSWRAP 0x08
- field CLRIOERR 0x08 /* Ultra2 Only */
- field CLRSPIORDY 0x02
- dont_generate_debug_code
- }
- /*
- * SCSI Status 0 (p. 3-21)
- * Contains one set of SCSI Interrupt codes
- * These are most likely of interest to the sequencer
- */
- register SSTAT0 {
- address 0x00b
- access_mode RO
- field TARGET 0x80 /* Board acting as target */
- field SELDO 0x40 /* Selection Done */
- field SELDI 0x20 /* Board has been selected */
- field SELINGO 0x10 /* Selection In Progress */
- field SWRAP 0x08 /* 24bit counter wrap */
- field IOERR 0x08 /* LVD Tranceiver mode changed */
- field SDONE 0x04 /* STCNT = 0x000000 */
- field SPIORDY 0x02 /* SCSI PIO Ready */
- field DMADONE 0x01 /* DMA transfer completed */
- }
- /*
- * Clear SCSI Interrupt 1 (p. 3-23)
- * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
- */
- register CLRSINT1 {
- address 0x00c
- access_mode WO
- field CLRSELTIMEO 0x80
- field CLRATNO 0x40
- field CLRSCSIRSTI 0x20
- field CLRBUSFREE 0x08
- field CLRSCSIPERR 0x04
- field CLRPHASECHG 0x02
- field CLRREQINIT 0x01
- dont_generate_debug_code
- }
- /*
- * SCSI Status 1 (p. 3-24)
- */
- register SSTAT1 {
- address 0x00c
- access_mode RO
- field SELTO 0x80
- field ATNTARG 0x40
- field SCSIRSTI 0x20
- field PHASEMIS 0x10
- field BUSFREE 0x08
- field SCSIPERR 0x04
- field PHASECHG 0x02
- field REQINIT 0x01
- }
- /*
- * SCSI Status 2 (pp. 3-25,26)
- */
- register SSTAT2 {
- address 0x00d
- access_mode RO
- field OVERRUN 0x80
- field SHVALID 0x40 /* Shadow Layer non-zero */
- field EXP_ACTIVE 0x10 /* SCSI Expander Active */
- field CRCVALERR 0x08 /* CRC doesn't match (U3 only) */
- field CRCENDERR 0x04 /* No terminal CRC packet (U3 only) */
- field CRCREQERR 0x02 /* Illegal CRC packet req (U3 only) */
- field DUAL_EDGE_ERR 0x01 /* Incorrect data phase (U3 only) */
- mask SFCNT 0x1f
- }
- /*
- * SCSI Status 3 (p. 3-26)
- */
- register SSTAT3 {
- address 0x00e
- access_mode RO
- count 2
- mask SCSICNT 0xf0
- mask OFFCNT 0x0f
- mask U2OFFCNT 0x7f
- }
- /*
- * SCSI ID for the aic7890/91 chips
- */
- register SCSIID_ULTRA2 {
- address 0x00f
- access_mode RW
- mask TID 0xf0 /* Target ID mask */
- mask OID 0x0f /* Our ID mask */
- dont_generate_debug_code
- }
- /*
- * SCSI Interrupt Mode 1 (p. 3-28)
- * Setting any bit will enable the corresponding function
- * in SIMODE0 to interrupt via the IRQ pin.
- */
- register SIMODE0 {
- address 0x010
- access_mode RW
- count 2
- field ENSELDO 0x40
- field ENSELDI 0x20
- field ENSELINGO 0x10
- field ENSWRAP 0x08
- field ENIOERR 0x08 /* LVD Tranceiver mode changes */
- field ENSDONE 0x04
- field ENSPIORDY 0x02
- field ENDMADONE 0x01
- }
- /*
- * SCSI Interrupt Mode 1 (pp. 3-28,29)
- * Setting any bit will enable the corresponding function
- * in SIMODE1 to interrupt via the IRQ pin.
- */
- register SIMODE1 {
- address 0x011
- access_mode RW
- field ENSELTIMO 0x80
- field ENATNTARG 0x40
- field ENSCSIRST 0x20
- field ENPHASEMIS 0x10
- field ENBUSFREE 0x08
- field ENSCSIPERR 0x04
- field ENPHASECHG 0x02
- field ENREQINIT 0x01
- }
- /*
- * SCSI Data Bus (High) (p. 3-29)
- * This register reads data on the SCSI Data bus directly.
- */
- register SCSIBUSL {
- address 0x012
- access_mode RW
- }
- register SCSIBUSH {
- address 0x013
- access_mode RW
- }
- /*
- * SCSI/Host Address (p. 3-30)
- * These registers hold the host address for the byte about to be
- * transferred on the SCSI bus. They are counted up in the same
- * manner as STCNT is counted down. SHADDR should always be used
- * to determine the address of the last byte transferred since HADDR
- * can be skewed by write ahead.
- */
- register SHADDR {
- address 0x014
- size 4
- access_mode RO
- dont_generate_debug_code
- }
- /*
- * Selection Timeout Timer (p. 3-30)
- */
- register SELTIMER {
- address 0x018
- access_mode RW
- count 1
- field STAGE6 0x20
- field STAGE5 0x10
- field STAGE4 0x08
- field STAGE3 0x04
- field STAGE2 0x02
- field STAGE1 0x01
- alias TARGIDIN
- dont_generate_debug_code
- }
- /*
- * Selection/Reselection ID (p. 3-31)
- * Upper four bits are the device id. The ONEBIT is set when the re/selecting
- * device did not set its own ID.
- */
- register SELID {
- address 0x019
- access_mode RW
- mask SELID_MASK 0xf0
- field ONEBIT 0x08
- dont_generate_debug_code
- }
- register SCAMCTL {
- address 0x01a
- access_mode RW
- field ENSCAMSELO 0x80
- field CLRSCAMSELID 0x40
- field ALTSTIM 0x20
- field DFLTTID 0x10
- mask SCAMLVL 0x03
- }
- /*
- * Target Mode Selecting in ID bitmask (aic7890/91/96/97)
- */
- register TARGID {
- address 0x01b
- size 2
- access_mode RW
- count 14
- dont_generate_debug_code
- }
- /*
- * Serial Port I/O Cabability register (p. 4-95 aic7860 Data Book)
- * Indicates if external logic has been attached to the chip to
- * perform the tasks of accessing a serial eeprom, testing termination
- * strength, and performing cable detection. On the aic7860, most of
- * these features are handled on chip, but on the aic7855 an attached
- * aic3800 does the grunt work.
- */
- register SPIOCAP {
- address 0x01b
- access_mode RW
- count 10
- field SOFT1 0x80
- field SOFT0 0x40
- field SOFTCMDEN 0x20
- field EXT_BRDCTL 0x10 /* External Board control */
- field SEEPROM 0x08 /* External serial eeprom logic */
- field EEPROM 0x04 /* Writable external BIOS ROM */
- field ROM 0x02 /* Logic for accessing external ROM */
- field SSPIOCPS 0x01 /* Termination and cable detection */
- dont_generate_debug_code
- }
- register BRDCTL {
- address 0x01d
- count 11
- field BRDDAT7 0x80
- field BRDDAT6 0x40
- field BRDDAT5 0x20
- field BRDSTB 0x10
- field BRDCS 0x08
- field BRDRW 0x04
- field BRDCTL1 0x02
- field BRDCTL0 0x01
- /* 7890 Definitions */
- field BRDDAT4 0x10
- field BRDDAT3 0x08
- field BRDDAT2 0x04
- field BRDRW_ULTRA2 0x02
- field BRDSTB_ULTRA2 0x01
- dont_generate_debug_code
- }
- /*
- * Serial EEPROM Control (p. 4-92 in 7870 Databook)
- * Controls the reading and writing of an external serial 1-bit
- * EEPROM Device. In order to access the serial EEPROM, you must
- * first set the SEEMS bit that generates a request to the memory
- * port for access to the serial EEPROM device. When the memory
- * port is not busy servicing another request, it reconfigures
- * to allow access to the serial EEPROM. When this happens, SEERDY
- * gets set high to verify that the memory port access has been
- * granted.
- *
- * After successful arbitration for the memory port, the SEECS bit of
- * the SEECTL register is connected to the chip select. The SEECK,
- * SEEDO, and SEEDI are connected to the clock, data out, and data in
- * lines respectively. The SEERDY bit of SEECTL is useful in that it
- * gives us an 800 nsec timer. After a write to the SEECTL register,
- * the SEERDY goes high 800 nsec later. The one exception to this is
- * when we first request access to the memory port. The SEERDY goes
- * high to signify that access has been granted and, for this case, has
- * no implied timing.
- *
- * See 93cx6.c for detailed information on the protocol necessary to
- * read the serial EEPROM.
- */
- register SEECTL {
- address 0x01e
- count 11
- field EXTARBACK 0x80
- field EXTARBREQ 0x40
- field SEEMS 0x20
- field SEERDY 0x10
- field SEECS 0x08
- field SEECK 0x04
- field SEEDO 0x02
- field SEEDI 0x01
- dont_generate_debug_code
- }
- /*
- * SCSI Block Control (p. 3-32)
- * Controls Bus type and channel selection. In a twin channel configuration
- * addresses 0x00-0x1e are gated to the appropriate channel based on this
- * register. SELWIDE allows for the coexistence of 8bit and 16bit devices
- * on a wide bus.
- */
- register SBLKCTL {
- address 0x01f
- access_mode RW
- field DIAGLEDEN 0x80 /* Aic78X0 only */
- field DIAGLEDON 0x40 /* Aic78X0 only */
- field AUTOFLUSHDIS 0x20
- field SELBUSB 0x08
- field ENAB40 0x08 /* LVD transceiver active */
- field ENAB20 0x04 /* SE/HVD transceiver active */
- field SELWIDE 0x02
- field XCVR 0x01 /* External transceiver active */
- }
- /*
- * Sequencer Control (p. 3-33)
- * Error detection mode and speed configuration
- */
- register SEQCTL {
- address 0x060
- access_mode RW
- count 15
- field PERRORDIS 0x80
- field PAUSEDIS 0x40
- field FAILDIS 0x20
- field FASTMODE 0x10
- field BRKADRINTEN 0x08
- field STEP 0x04
- field SEQRESET 0x02
- field LOADRAM 0x01
- }
- /*
- * Sequencer RAM Data (p. 3-34)
- * Single byte window into the Scratch Ram area starting at the address
- * specified by SEQADDR0 and SEQADDR1. To write a full word, simply write
- * four bytes in succession. The SEQADDRs will increment after the most
- * significant byte is written
- */
- register SEQRAM {
- address 0x061
- access_mode RW
- count 2
- dont_generate_debug_code
- }
- /*
- * Sequencer Address Registers (p. 3-35)
- * Only the first bit of SEQADDR1 holds addressing information
- */
- register SEQADDR0 {
- address 0x062
- access_mode RW
- dont_generate_debug_code
- }
- register SEQADDR1 {
- address 0x063
- access_mode RW
- count 8
- mask SEQADDR1_MASK 0x01
- dont_generate_debug_code
- }
- /*
- * Accumulator
- * We cheat by passing arguments in the Accumulator up to the kernel driver
- */
- register ACCUM {
- address 0x064
- access_mode RW
- accumulator
- dont_generate_debug_code
- }
- register SINDEX {
- address 0x065
- access_mode RW
- sindex
- dont_generate_debug_code
- }
- register DINDEX {
- address 0x066
- access_mode RW
- dont_generate_debug_code
- }
- register ALLONES {
- address 0x069
- access_mode RO
- allones
- dont_generate_debug_code
- }
- register ALLZEROS {
- address 0x06a
- access_mode RO
- allzeros
- dont_generate_debug_code
- }
- register NONE {
- address 0x06a
- access_mode WO
- none
- dont_generate_debug_code
- }
- register FLAGS {
- address 0x06b
- access_mode RO
- count 18
- field ZERO 0x02
- field CARRY 0x01
- dont_generate_debug_code
- }
- register SINDIR {
- address 0x06c
- access_mode RO
- dont_generate_debug_code
- }
- register DINDIR {
- address 0x06d
- access_mode WO
- dont_generate_debug_code
- }
- register FUNCTION1 {
- address 0x06e
- access_mode RW
- }
- register STACK {
- address 0x06f
- access_mode RO
- count 5
- dont_generate_debug_code
- }
- const STACK_SIZE 4
- /*
- * Board Control (p. 3-43)
- */
- register BCTL {
- address 0x084
- access_mode RW
- field ACE 0x08
- field ENABLE 0x01
- }
- /*
- * On the aic78X0 chips, Board Control is replaced by the DSCommand
- * register (p. 4-64)
- */
- register DSCOMMAND0 {
- address 0x084
- access_mode RW
- count 7
- field CACHETHEN 0x80 /* Cache Threshold enable */
- field DPARCKEN 0x40 /* Data Parity Check Enable */
- field MPARCKEN 0x20 /* Memory Parity Check Enable */
- field EXTREQLCK 0x10 /* External Request Lock */
- /* aic7890/91/96/97 only */
- field INTSCBRAMSEL 0x08 /* Internal SCB RAM Select */
- field RAMPS 0x04 /* External SCB RAM Present */
- field USCBSIZE32 0x02 /* Use 32byte SCB Page Size */
- field CIOPARCKEN 0x01 /* Internal bus parity error enable */
- dont_generate_debug_code
- }
- register DSCOMMAND1 {
- address 0x085
- access_mode RW
- mask DSLATT 0xfc /* PCI latency timer (non-ultra2) */
- field HADDLDSEL1 0x02 /* Host Address Load Select Bits */
- field HADDLDSEL0 0x01
- dont_generate_debug_code
- }
- /*
- * Bus On/Off Time (p. 3-44) aic7770 only
- */
- register BUSTIME {
- address 0x085
- access_mode RW
- count 2
- mask BOFF 0xf0
- mask BON 0x0f
- dont_generate_debug_code
- }
- /*
- * Bus Speed (p. 3-45) aic7770 only
- */
- register BUSSPD {
- address 0x086
- access_mode RW
- count 2
- mask DFTHRSH 0xc0
- mask STBOFF 0x38
- mask STBON 0x07
- mask DFTHRSH_100 0xc0
- mask DFTHRSH_75 0x80
- dont_generate_debug_code
- }
- /* aic7850/55/60/70/80/95 only */
- register DSPCISTATUS {
- address 0x086
- count 4
- mask DFTHRSH_100 0xc0
- dont_generate_debug_code
- }
- /* aic7890/91/96/97 only */
- register HS_MAILBOX {
- address 0x086
- mask HOST_MAILBOX 0xF0
- mask SEQ_MAILBOX 0x0F
- mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */
- dont_generate_debug_code
- }
- const HOST_MAILBOX_SHIFT 4
- const SEQ_MAILBOX_SHIFT 0
- /*
- * Host Control (p. 3-47) R/W
- * Overall host control of the device.
- */
- register HCNTRL {
- address 0x087
- access_mode RW
- count 14
- field POWRDN 0x40
- field SWINT 0x10
- field IRQMS 0x08
- field PAUSE 0x04
- field INTEN 0x02
- field CHIPRST 0x01
- field CHIPRSTACK 0x01
- dont_generate_debug_code
- }
- /*
- * Host Address (p. 3-48)
- * This register contains the address of the byte about
- * to be transferred across the host bus.
- */
- register HADDR {
- address 0x088
- size 4
- access_mode RW
- dont_generate_debug_code
- }
- register HCNT {
- address 0x08c
- size 3
- access_mode RW
- dont_generate_debug_code
- }
- /*
- * SCB Pointer (p. 3-49)
- * Gate one of the SCBs into the SCBARRAY window.
- */
- register SCBPTR {
- address 0x090
- access_mode RW
- dont_generate_debug_code
- }
- /*
- * Interrupt Status (p. 3-50)
- * Status for system interrupts
- */
- register INTSTAT {
- address 0x091
- access_mode RW
- field BRKADRINT 0x08
- field SCSIINT 0x04
- field CMDCMPLT 0x02
- field SEQINT 0x01
- mask BAD_PHASE SEQINT /* unknown scsi bus phase */
- mask SEND_REJECT 0x10|SEQINT /* sending a message reject */
- mask PROTO_VIOLATION 0x20|SEQINT /* SCSI protocol violation */
- mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */
- mask IGN_WIDE_RES 0x40|SEQINT /* Complex IGN Wide Res Msg */
- mask PDATA_REINIT 0x50|SEQINT /*
- * Returned to data phase
- * that requires data
- * transfer pointers to be
- * recalculated from the
- * transfer residual.
- */
- mask HOST_MSG_LOOP 0x60|SEQINT /*
- * The bus is ready for the
- * host to perform another
- * message transaction. This
- * mechanism is used for things
- * like sync/wide negotiation
- * that require a kernel based
- * message state engine.
- */
- mask BAD_STATUS 0x70|SEQINT /* Bad status from target */
- mask PERR_DETECTED 0x80|SEQINT /*
- * Either the phase_lock
- * or inb_next routine has
- * noticed a parity error.
- */
- mask DATA_OVERRUN 0x90|SEQINT /*
- * Target attempted to write
- * beyond the bounds of its
- * command.
- */
- mask MKMSG_FAILED 0xa0|SEQINT /*
- * Target completed command
- * without honoring our ATN
- * request to issue a message.
- */
- mask MISSED_BUSFREE 0xb0|SEQINT /*
- * The sequencer never saw
- * the bus go free after
- * either a command complete
- * or disconnect message.
- */
- mask SCB_MISMATCH 0xc0|SEQINT /*
- * Downloaded SCB's tag does
- * not match the entry we
- * intended to download.
- */
- mask NO_FREE_SCB 0xd0|SEQINT /*
- * get_free_or_disc_scb failed.
- */
- mask OUT_OF_RANGE 0xe0|SEQINT
- mask SEQINT_MASK 0xf0|SEQINT /* SEQINT Status Codes */
- mask INT_PEND (BRKADRINT|SEQINT|SCSIINT|CMDCMPLT)
- dont_generate_debug_code
- }
- /*
- * Hard Error (p. 3-53)
- * Reporting of catastrophic errors. You usually cannot recover from
- * these without a full board reset.
- */
- register ERROR {
- address 0x092
- access_mode RO
- count 26
- field CIOPARERR 0x80 /* Ultra2 only */
- field PCIERRSTAT 0x40 /* PCI only */
- field MPARERR 0x20 /* PCI only */
- field DPARERR 0x10 /* PCI only */
- field SQPARERR 0x08
- field ILLOPCODE 0x04
- field ILLSADDR 0x02
- field ILLHADDR 0x01
- }
- /*
- * Clear Interrupt Status (p. 3-52)
- */
- register CLRINT {
- address 0x092
- access_mode WO
- count 24
- field CLRPARERR 0x10 /* PCI only */
- field CLRBRKADRINT 0x08
- field CLRSCSIINT 0x04
- field CLRCMDINT 0x02
- field CLRSEQINT 0x01
- dont_generate_debug_code
- }
- register DFCNTRL {
- address 0x093
- access_mode RW
- field PRELOADEN 0x80 /* aic7890 only */
- field WIDEODD 0x40
- field SCSIEN 0x20
- field SDMAEN 0x10
- field SDMAENACK 0x10
- field HDMAEN 0x08
- field HDMAENACK 0x08
- field DIRECTION 0x04
- field FIFOFLUSH 0x02
- field FIFORESET 0x01
- }
- register DFSTATUS {
- address 0x094
- access_mode RO
- field PRELOAD_AVAIL 0x80
- field DFCACHETH 0x40
- field FIFOQWDEMP 0x20
- field MREQPEND 0x10
- field HDONE 0x08
- field DFTHRESH 0x04
- field FIFOFULL 0x02
- field FIFOEMP 0x01
- }
- register DFWADDR {
- address 0x95
- access_mode RW
- dont_generate_debug_code
- }
- register DFRADDR {
- address 0x97
- access_mode RW
- }
- register DFDAT {
- address 0x099
- access_mode RW
- dont_generate_debug_code
- }
- /*
- * SCB Auto Increment (p. 3-59)
- * Byte offset into the SCB Array and an optional bit to allow auto
- * incrementing of the address during download and upload operations
- */
- register SCBCNT {
- address 0x09a
- access_mode RW
- count 1
- field SCBAUTO 0x80
- mask SCBCNT_MASK 0x1f
- dont_generate_debug_code
- }
- /*
- * Queue In FIFO (p. 3-60)
- * Input queue for queued SCBs (commands that the seqencer has yet to start)
- */
- register QINFIFO {
- address 0x09b
- access_mode RW
- count 12
- dont_generate_debug_code
- }
- /*
- * Queue In Count (p. 3-60)
- * Number of queued SCBs
- */
- register QINCNT {
- address 0x09c
- access_mode RO
- }
- /*
- * Queue Out FIFO (p. 3-61)
- * Queue of SCBs that have completed and await the host
- */
- register QOUTFIFO {
- address 0x09d
- access_mode WO
- count 7
- dont_generate_debug_code
- }
- register CRCCONTROL1 {
- address 0x09d
- access_mode RW
- count 3
- field CRCONSEEN 0x80
- field CRCVALCHKEN 0x40
- field CRCENDCHKEN 0x20
- field CRCREQCHKEN 0x10
- field TARGCRCENDEN 0x08
- field TARGCRCCNTEN 0x04
- dont_generate_debug_code
- }
- /*
- * Queue Out Count (p. 3-61)
- * Number of queued SCBs in the Out FIFO
- */
- register QOUTCNT {
- address 0x09e
- access_mode RO
- }
- register SCSIPHASE {
- address 0x09e
- access_mode RO
- field STATUS_PHASE 0x20
- field COMMAND_PHASE 0x10
- field MSG_IN_PHASE 0x08
- field MSG_OUT_PHASE 0x04
- field DATA_IN_PHASE 0x02
- field DATA_OUT_PHASE 0x01
- mask DATA_PHASE_MASK 0x03
- }
- /*
- * Special Function
- */
- register SFUNCT {
- address 0x09f
- access_mode RW
- count 4
- field ALT_MODE 0x80
- dont_generate_debug_code
- }
- /*
- * SCB Definition (p. 5-4)
- */
- scb {
- address 0x0a0
- size 64
- SCB_CDB_PTR {
- size 4
- alias SCB_RESIDUAL_DATACNT
- alias SCB_CDB_STORE
- dont_generate_debug_code
- }
- SCB_RESIDUAL_SGPTR {
- size 4
- dont_generate_debug_code
- }
- SCB_SCSI_STATUS {
- size 1
- dont_generate_debug_code
- }
- SCB_TARGET_PHASES {
- size 1
- dont_generate_debug_code
- }
- SCB_TARGET_DATA_DIR {
- size 1
- dont_generate_debug_code
- }
- SCB_TARGET_ITAG {
- size 1
- dont_generate_debug_code
- }
- SCB_DATAPTR {
- size 4
- dont_generate_debug_code
- }
- SCB_DATACNT {
- /*
- * The last byte is really the high address bits for
- * the data address.
- */
- size 4
- field SG_LAST_SEG 0x80 /* In the fourth byte */
- mask SG_HIGH_ADDR_BITS 0x7F /* In the fourth byte */
- dont_generate_debug_code
- }
- SCB_SGPTR {
- size 4
- field SG_RESID_VALID 0x04 /* In the first byte */
- field SG_FULL_RESID 0x02 /* In the first byte */
- field SG_LIST_NULL 0x01 /* In the first byte */
- dont_generate_debug_code
- }
- SCB_CONTROL {
- size 1
- field TARGET_SCB 0x80
- field STATUS_RCVD 0x80
- field DISCENB 0x40
- field TAG_ENB 0x20
- field MK_MESSAGE 0x10
- field ULTRAENB 0x08
- field DISCONNECTED 0x04
- mask SCB_TAG_TYPE 0x03
- }
- SCB_SCSIID {
- size 1
- field TWIN_CHNLB 0x80
- mask TWIN_TID 0x70
- mask TID 0xf0
- mask OID 0x0f
- }
- SCB_LUN {
- field SCB_XFERLEN_ODD 0x80
- mask LID 0x3f
- size 1
- }
- SCB_TAG {
- size 1
- }
- SCB_CDB_LEN {
- size 1
- dont_generate_debug_code
- }
- SCB_SCSIRATE {
- size 1
- dont_generate_debug_code
- }
- SCB_SCSIOFFSET {
- size 1
- count 1
- dont_generate_debug_code
- }
- SCB_NEXT {
- size 1
- dont_generate_debug_code
- }
- SCB_64_SPARE {
- size 16
- }
- SCB_64_BTT {
- size 16
- dont_generate_debug_code
- }
- }
- const SCB_UPLOAD_SIZE 32
- const SCB_DOWNLOAD_SIZE 32
- const SCB_DOWNLOAD_SIZE_64 48
- const SG_SIZEOF 0x08 /* sizeof(struct ahc_dma) */
- /* --------------------- AHA-2840-only definitions -------------------- */
- register SEECTL_2840 {
- address 0x0c0
- access_mode RW
- count 2
- field CS_2840 0x04
- field CK_2840 0x02
- field DO_2840 0x01
- dont_generate_debug_code
- }
- register STATUS_2840 {
- address 0x0c1
- access_mode RW
- count 4
- field EEPROM_TF 0x80
- mask BIOS_SEL 0x60
- mask ADSEL 0x1e
- field DI_2840 0x01
- dont_generate_debug_code
- }
- /* --------------------- AIC-7870-only definitions -------------------- */
- register CCHADDR {
- address 0x0E0
- size 8
- dont_generate_debug_code
- }
- register CCHCNT {
- address 0x0E8
- dont_generate_debug_code
- }
- register CCSGRAM {
- address 0x0E9
- dont_generate_debug_code
- }
- register CCSGADDR {
- address 0x0EA
- dont_generate_debug_code
- }
- register CCSGCTL {
- address 0x0EB
- field CCSGDONE 0x80
- field CCSGEN 0x08
- field SG_FETCH_NEEDED 0x02 /* Bit used for software state */
- field CCSGRESET 0x01
- dont_generate_debug_code
- }
- register CCSCBCNT {
- address 0xEF
- count 1
- dont_generate_debug_code
- }
- register CCSCBCTL {
- address 0x0EE
- field CCSCBDONE 0x80
- field ARRDONE 0x40 /* SCB Array prefetch done */
- field CCARREN 0x10
- field CCSCBEN 0x08
- field CCSCBDIR 0x04
- field CCSCBRESET 0x01
- dont_generate_debug_code
- }
- register CCSCBADDR {
- address 0x0ED
- dont_generate_debug_code
- }
- register CCSCBRAM {
- address 0xEC
- dont_generate_debug_code
- }
- /*
- * SCB bank address (7895/7896/97 only)
- */
- register SCBBADDR {
- address 0x0F0
- access_mode RW
- count 3
- dont_generate_debug_code
- }
- register CCSCBPTR {
- address 0x0F1
- dont_generate_debug_code
- }
- register HNSCB_QOFF {
- address 0x0F4
- count 4
- dont_generate_debug_code
- }
- register SNSCB_QOFF {
- address 0x0F6
- dont_generate_debug_code
- }
- register SDSCB_QOFF {
- address 0x0F8
- dont_generate_debug_code
- }
- register QOFF_CTLSTA {
- address 0x0FA
- field SCB_AVAIL 0x40
- field SNSCB_ROLLOVER 0x20
- field SDSCB_ROLLOVER 0x10
- mask SCB_QSIZE 0x07
- mask SCB_QSIZE_256 0x06
- dont_generate_debug_code
- }
- register DFF_THRSH {
- address 0x0FB
- mask WR_DFTHRSH 0x70
- mask RD_DFTHRSH 0x07
- mask RD_DFTHRSH_MIN 0x00
- mask RD_DFTHRSH_25 0x01
- mask RD_DFTHRSH_50 0x02
- mask RD_DFTHRSH_63 0x03
- mask RD_DFTHRSH_75 0x04
- mask RD_DFTHRSH_85 0x05
- mask RD_DFTHRSH_90 0x06
- mask RD_DFTHRSH_MAX 0x07
- mask WR_DFTHRSH_MIN 0x00
- mask WR_DFTHRSH_25 0x10
- mask WR_DFTHRSH_50 0x20
- mask WR_DFTHRSH_63 0x30
- mask WR_DFTHRSH_75 0x40
- mask WR_DFTHRSH_85 0x50
- mask WR_DFTHRSH_90 0x60
- mask WR_DFTHRSH_MAX 0x70
- count 4
- dont_generate_debug_code
- }
- register SG_CACHE_PRE {
- access_mode WO
- address 0x0fc
- mask SG_ADDR_MASK 0xf8
- field LAST_SEG 0x02
- field LAST_SEG_DONE 0x01
- dont_generate_debug_code
- }
- register SG_CACHE_SHADOW {
- access_mode RO
- address 0x0fc
- mask SG_ADDR_MASK 0xf8
- field LAST_SEG 0x02
- field LAST_SEG_DONE 0x01
- dont_generate_debug_code
- }
- /* ---------------------- Scratch RAM Offsets ------------------------- */
- /* These offsets are either to values that are initialized by the board's
- * BIOS or are specified by the sequencer code.
- *
- * The host adapter card (at least the BIOS) uses 20-2f for SCSI
- * device information, 32-33 and 5a-5f as well. As it turns out, the
- * BIOS trashes 20-2f, writing the synchronous negotiation results
- * on top of the BIOS values, so we re-use those for our per-target
- * scratchspace (actually a value that can be copied directly into
- * SCSIRATE). The kernel driver will enable synchronous negotiation
- * for all targets that have a value other than 0 in the lower four
- * bits of the target scratch space. This should work regardless of
- * whether the bios has been installed.
- */
- scratch_ram {
- address 0x020
- size 58
- /*
- * 1 byte per target starting at this address for configuration values
- */
- BUSY_TARGETS {
- alias TARG_SCSIRATE
- size 16
- dont_generate_debug_code
- }
- /*
- * Bit vector of targets that have ULTRA enabled as set by
- * the BIOS. The Sequencer relies on a per-SCB field to
- * control whether to enable Ultra transfers or not. During
- * initialization, we read this field and reuse it for 2
- * entries in the busy target table.
- */
- ULTRA_ENB {
- alias CMDSIZE_TABLE
- size 2
- count 2
- dont_generate_debug_code
- }
- /*
- * Bit vector of targets that have disconnection disabled as set by
- * the BIOS. The Sequencer relies in a per-SCB field to control the
- * disconnect priveldge. During initialization, we read this field
- * and reuse it for 2 entries in the busy target table.
- */
- DISC_DSB {
- size 2
- count 6
- dont_generate_debug_code
- }
- CMDSIZE_TABLE_TAIL {
- size 4
- }
- /*
- * Partial transfer past cacheline end to be
- * transferred using an extra S/G.
- */
- MWI_RESIDUAL {
- size 1
- dont_generate_debug_code
- }
- /*
- * SCBID of the next SCB to be started by the controller.
- */
- NEXT_QUEUED_SCB {
- size 1
- dont_generate_debug_code
- }
- /*
- * Single byte buffer used to designate the type or message
- * to send to a target.
- */
- MSG_OUT {
- size 1
- dont_generate_debug_code
- }
- /* Parameters for DMA Logic */
- DMAPARAMS {
- size 1
- count 12
- field PRELOADEN 0x80
- field WIDEODD 0x40
- field SCSIEN 0x20
- field SDMAEN 0x10
- field SDMAENACK 0x10
- field HDMAEN 0x08
- field HDMAENACK 0x08
- field DIRECTION 0x04 /* Set indicates PCI->SCSI */
- field FIFOFLUSH 0x02
- field FIFORESET 0x01
- dont_generate_debug_code
- }
- SEQ_FLAGS {
- size 1
- field NOT_IDENTIFIED 0x80
- field NO_CDB_SENT 0x40
- field TARGET_CMD_IS_TAGGED 0x40
- field DPHASE 0x20
- /* Target flags */
- field TARG_CMD_PENDING 0x10
- field CMDPHASE_PENDING 0x08
- field DPHASE_PENDING 0x04
- field SPHASE_PENDING 0x02
- field NO_DISCONNECT 0x01
- }
- /*
- * Temporary storage for the
- * target/channel/lun of a
- * reconnecting target
- */
- SAVED_SCSIID {
- size 1
- dont_generate_debug_code
- }
- SAVED_LUN {
- size 1
- dont_generate_debug_code
- }
- /*
- * The last bus phase as seen by the sequencer.
- */
- LASTPHASE {
- size 1
- field CDI 0x80
- field IOI 0x40
- field MSGI 0x20
- mask PHASE_MASK CDI|IOI|MSGI
- mask P_DATAOUT 0x00
- mask P_DATAIN IOI
- mask P_COMMAND CDI
- mask P_MESGOUT CDI|MSGI
- mask P_STATUS CDI|IOI
- mask P_MESGIN CDI|IOI|MSGI
- mask P_BUSFREE 0x01
- }
- /*
- * head of list of SCBs awaiting
- * selection
- */
- WAITING_SCBH {
- size 1
- dont_generate_debug_code
- }
- /*
- * head of list of SCBs that are
- * disconnected. Used for SCB
- * paging.
- */
- DISCONNECTED_SCBH {
- size 1
- dont_generate_debug_code
- }
- /*
- * head of list of SCBs that are
- * not in use. Used for SCB paging.
- */
- FREE_SCBH {
- size 1
- dont_generate_debug_code
- }
- /*
- * head of list of SCBs that have
- * completed but have not been
- * put into the qoutfifo.
- */
- COMPLETE_SCBH {
- size 1
- }
- /*
- * Address of the hardware scb array in the host.
- */
- HSCB_ADDR {
- size 4
- dont_generate_debug_code
- }
- /*
- * Base address of our shared data with the kernel driver in host
- * memory. This includes the qoutfifo and target mode
- * incoming command queue.
- */
- SHARED_DATA_ADDR {
- size 4
- dont_generate_debug_code
- }
- KERNEL_QINPOS {
- size 1
- dont_generate_debug_code
- }
- QINPOS {
- size 1
- dont_generate_debug_code
- }
- QOUTPOS {
- size 1
- dont_generate_debug_code
- }
- /*
- * Kernel and sequencer offsets into the queue of
- * incoming target mode command descriptors. The
- * queue is full when the KERNEL_TQINPOS == TQINPOS.
- */
- KERNEL_TQINPOS {
- size 1
- dont_generate_debug_code
- }
- TQINPOS {
- size 1
- dont_generate_debug_code
- }
- ARG_1 {
- size 1
- count 1
- mask SEND_MSG 0x80
- mask SEND_SENSE 0x40
- mask SEND_REJ 0x20
- mask MSGOUT_PHASEMIS 0x10
- mask EXIT_MSG_LOOP 0x08
- mask CONT_MSG_LOOP 0x04
- mask CONT_TARG_SESSION 0x02
- alias RETURN_1
- dont_generate_debug_code
- }
- ARG_2 {
- size 1
- alias RETURN_2
- dont_generate_debug_code
- }
- /*
- * Snapshot of MSG_OUT taken after each message is sent.
- */
- LAST_MSG {
- size 1
- alias TARG_IMMEDIATE_SCB
- dont_generate_debug_code
- }
- /*
- * Sequences the kernel driver has okayed for us. This allows
- * the driver to do things like prevent initiator or target
- * operations.
- */
- SCSISEQ_TEMPLATE {
- size 1
- field ENSELO 0x40
- field ENSELI 0x20
- field ENRSELI 0x10
- field ENAUTOATNO 0x08
- field ENAUTOATNI 0x04
- field ENAUTOATNP 0x02
- dont_generate_debug_code
- }
- }
- scratch_ram {
- address 0x056
- size 4
- /*
- * These scratch ram locations are initialized by the 274X BIOS.
- * We reuse them after capturing the BIOS settings during
- * initialization.
- */
- /*
- * The initiator specified tag for this target mode transaction.
- */
- HA_274_BIOSGLOBAL {
- size 1
- field HA_274_EXTENDED_TRANS 0x01
- alias INITIATOR_TAG
- count 1
- dont_generate_debug_code
- }
- SEQ_FLAGS2 {
- size 1
- field SCB_DMA 0x01
- field TARGET_MSG_PENDING 0x02
- dont_generate_debug_code
- }
- }
- scratch_ram {
- address 0x05a
- size 6
- /*
- * These are reserved registers in the card's scratch ram on the 2742.
- * The EISA configuraiton chip is mapped here. On Rev E. of the
- * aic7770, the sequencer can use this area for scratch, but the
- * host cannot directly access these registers. On later chips, this
- * area can be read and written by both the host and the sequencer.
- * Even on later chips, many of these locations are initialized by
- * the BIOS.
- */
- SCSICONF {
- size 1
- count 12
- field TERM_ENB 0x80
- field RESET_SCSI 0x40
- field ENSPCHK 0x20
- mask HSCSIID 0x07 /* our SCSI ID */
- mask HWSCSIID 0x0f /* our SCSI ID if Wide Bus */
- dont_generate_debug_code
- }
- INTDEF {
- address 0x05c
- size 1
- count 1
- field EDGE_TRIG 0x80
- mask VECTOR 0x0f
- dont_generate_debug_code
- }
- HOSTCONF {
- address 0x05d
- size 1
- count 1
- dont_generate_debug_code
- }
- HA_274_BIOSCTRL {
- address 0x05f
- size 1
- count 1
- mask BIOSMODE 0x30
- mask BIOSDISABLED 0x30
- field CHANNEL_B_PRIMARY 0x08
- dont_generate_debug_code
- }
- }
- scratch_ram {
- address 0x070
- size 16
- /*
- * Per target SCSI offset values for Ultra2 controllers.
- */
- TARG_OFFSET {
- size 16
- count 1
- dont_generate_debug_code
- }
- }
- const TID_SHIFT 4
- const SCB_LIST_NULL 0xff
- const TARGET_CMD_CMPLT 0xfe
- const CCSGADDR_MAX 0x80
- const CCSGRAM_MAXSEGS 16
- /* WDTR Message values */
- const BUS_8_BIT 0x00
- const BUS_16_BIT 0x01
- const BUS_32_BIT 0x02
- /* Offset maximums */
- const MAX_OFFSET_8BIT 0x0f
- const MAX_OFFSET_16BIT 0x08
- const MAX_OFFSET_ULTRA2 0x7f
- const MAX_OFFSET 0x7f
- const HOST_MSG 0xff
- /* Target mode command processing constants */
- const CMD_GROUP_CODE_SHIFT 0x05
- const STATUS_BUSY 0x08
- const STATUS_QUEUE_FULL 0x28
- const TARGET_DATA_IN 1
- /*
- * Downloaded (kernel inserted) constants
- */
- /* Offsets into the SCBID array where different data is stored */
- const QOUTFIFO_OFFSET download
- const QINFIFO_OFFSET download
- const CACHESIZE_MASK download
- const INVERTED_CACHESIZE_MASK download
- const SG_PREFETCH_CNT download
- const SG_PREFETCH_ALIGN_MASK download
- const SG_PREFETCH_ADDR_MASK download
|