[BACK]Return to aic79xx.reg CVS log [TXT][DIR] Up to [local] / sys / dev / microcode / aic7xxx

Annotation of sys/dev/microcode/aic7xxx/aic79xx.reg, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: aic79xx.reg,v 1.7 2007/05/26 00:36:03 krw Exp $       */
        !             2: /*
        !             3:  * Aic79xx register and scratch ram definitions.
        !             4:  *
        !             5:  * Copyright (c) 1994-2001, 2004 Justin T. Gibbs.
        !             6:  * Copyright (c) 2000-2002 Adaptec Inc.
        !             7:  * All rights reserved.
        !             8:  *
        !             9:  * Redistribution and use in source and binary forms, with or without
        !            10:  * modification, are permitted provided that the following conditions
        !            11:  * are met:
        !            12:  * 1. Redistributions of source code must retain the above copyright
        !            13:  *    notice, this list of conditions, and the following disclaimer,
        !            14:  *    without modification.
        !            15:  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
        !            16:  *    substantially similar to the "NO WARRANTY" disclaimer below
        !            17:  *    ("Disclaimer") and any redistribution must be conditioned upon
        !            18:  *    including a substantially similar Disclaimer requirement for further
        !            19:  *    binary redistribution.
        !            20:  * 3. Neither the names of the above-listed copyright holders nor the names
        !            21:  *    of any contributors may be used to endorse or promote products derived
        !            22:  *    from this software without specific prior written permission.
        !            23:  *
        !            24:  * Alternatively, this software may be distributed under the terms of the
        !            25:  * GNU General Public License ("GPL") version 2 as published by the Free
        !            26:  * Software Foundation.
        !            27:  *
        !            28:  * NO WARRANTY
        !            29:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
        !            30:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
        !            31:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
        !            32:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
        !            33:  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            34:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            35:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            36:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
        !            37:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
        !            38:  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            39:  * POSSIBILITY OF SUCH DAMAGES.
        !            40:  *
        !            41:  * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.reg,v 1.18 2004/08/04 17:55:34 gibbs Exp $
        !            42:  */
        !            43: VERSION = "$Id: aic79xx.reg,v 1.7 2007/05/26 00:36:03 krw Exp $"
        !            44:
        !            45: /*
        !            46:  * This file is processed by the aic7xxx_asm utility for use in assembling
        !            47:  * firmware for the aic79xx family of SCSI host adapters as well as to generate
        !            48:  * a C header file for use in the kernel portion of the Aic79xx driver.
        !            49:  */
        !            50:
        !            51: /* Register window Modes */
        !            52: #define M_DFF0         0
        !            53: #define M_DFF1         1
        !            54: #define M_CCHAN                2
        !            55: #define M_SCSI         3
        !            56: #define M_CFG          4
        !            57: #define M_DST_SHIFT    4
        !            58:
        !            59: #define MK_MODE(src, dst) ((src) | ((dst) << M_DST_SHIFT))
        !            60: #define SET_MODE(src, dst)                                             \
        !            61:        SET_SRC_MODE    src;                                            \
        !            62:        SET_DST_MODE    dst;                                            \
        !            63:        if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {                      \
        !            64:                mvi     MK_MODE(src, dst) call set_mode_work_around;    \
        !            65:        } else {                                                        \
        !            66:                mvi     MODE_PTR, MK_MODE(src, dst);                    \
        !            67:        }
        !            68:
        !            69: #define RESTORE_MODE(mode)                                             \
        !            70:        if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {                      \
        !            71:                mov     mode call set_mode_work_around;                 \
        !            72:        } else {                                                        \
        !            73:                mov     MODE_PTR, mode;                                 \
        !            74:        }
        !            75:
        !            76: #define SET_SEQINTCODE(code)                                           \
        !            77:        if ((ahd->bugs & AHD_INTCOLLISION_BUG) != 0) {                  \
        !            78:                mvi     code call set_seqint_work_around;               \
        !            79:        } else {                                                        \
        !            80:                mvi     SEQINTCODE, code;                               \
        !            81:        }
        !            82:
        !            83: /*
        !            84:  * Mode Pointer
        !            85:  * Controls which of the 5, 512byte, address spaces should be used
        !            86:  * as the source and destination of any register accesses in our
        !            87:  * register window.
        !            88:  */
        !            89: register MODE_PTR {
        !            90:        address                 0x000
        !            91:        access_mode     RW
        !            92:        field   DST_MODE        0x70
        !            93:        field   SRC_MODE        0x07
        !            94:        mode_pointer
        !            95: }
        !            96:
        !            97: const SRC_MODE_SHIFT   0
        !            98: const DST_MODE_SHIFT   4
        !            99:
        !           100: /*
        !           101:  * Host Interrupt Status
        !           102:  */
        !           103: register INTSTAT {
        !           104:        address                 0x001
        !           105:        access_mode     RW
        !           106:        field   HWERRINT        0x80
        !           107:        field   BRKADRINT       0x40
        !           108:        field   SWTMINT         0x20
        !           109:        field   PCIINT          0x10
        !           110:        field   SCSIINT         0x08
        !           111:        field   SEQINT          0x04
        !           112:        field   CMDCMPLT        0x02
        !           113:        field   SPLTINT         0x01
        !           114:        mask    INT_PEND 0xFF
        !           115: }
        !           116:
        !           117: /*
        !           118:  * Sequencer Interrupt Code
        !           119:  */
        !           120: register SEQINTCODE {
        !           121:        address                 0x002
        !           122:        access_mode     RW
        !           123:        field {
        !           124:                NO_SEQINT,                      /* No seqint pending. */
        !           125:                BAD_PHASE,                      /* unknown scsi bus phase */
        !           126:                SEND_REJECT,                    /* sending a message reject */
        !           127:                PROTO_VIOLATION,                /* Protocol Violation */
        !           128:                NO_MATCH,                       /* no cmd match for reconnect */
        !           129:                IGN_WIDE_RES,                   /* Complex IGN Wide Res Msg */
        !           130:                PDATA_REINIT,                   /*
        !           131:                                                 * Returned to data phase
        !           132:                                                 * that requires data
        !           133:                                                 * transfer pointers to be
        !           134:                                                 * recalculated from the
        !           135:                                                 * transfer residual.
        !           136:                                                 */
        !           137:                HOST_MSG_LOOP,                  /*
        !           138:                                                 * The bus is ready for the
        !           139:                                                 * host to perform another
        !           140:                                                 * message transaction.  This
        !           141:                                                 * mechanism is used for things
        !           142:                                                 * like sync/wide negotiation
        !           143:                                                 * that require a kernel based
        !           144:                                                 * message state engine.
        !           145:                                                 */
        !           146:                BAD_STATUS,                     /* Bad status from target */
        !           147:                DATA_OVERRUN,                   /*
        !           148:                                                 * Target attempted to write
        !           149:                                                 * beyond the bounds of its
        !           150:                                                 * command.
        !           151:                                                 */
        !           152:                MKMSG_FAILED,                   /*
        !           153:                                                 * Target completed command
        !           154:                                                 * without honoring our ATN
        !           155:                                                 * request to issue a message.
        !           156:                                                 */
        !           157:                MISSED_BUSFREE,                 /*
        !           158:                                                 * The sequencer never saw
        !           159:                                                 * the bus go free after
        !           160:                                                 * either a command complete
        !           161:                                                 * or disconnect message.
        !           162:                                                 */
        !           163:                DUMP_CARD_STATE,
        !           164:                ILLEGAL_PHASE,
        !           165:                INVALID_SEQINT,
        !           166:                CFG4ISTAT_INTR,
        !           167:                STATUS_OVERRUN,
        !           168:                CFG4OVERRUN,
        !           169:                ENTERING_NONPACK,
        !           170:                TASKMGMT_FUNC_COMPLETE,         /*
        !           171:                                                 * Task management function
        !           172:                                                 * request completed with
        !           173:                                                 * an expected busfree.
        !           174:                                                 */
        !           175:                TASKMGMT_CMD_CMPLT_OKAY,        /*
        !           176:                                                 * A command with a non-zero
        !           177:                                                 * task management function
        !           178:                                                 * has completed via the normal
        !           179:                                                 * command completion method
        !           180:                                                 * for commands with a zero
        !           181:                                                 * task management function.
        !           182:                                                 * This happens when an attempt
        !           183:                                                 * to abort a command loses
        !           184:                                                 * the race for the command to
        !           185:                                                 * complete normally.
        !           186:                                                 */
        !           187:                TRACEPOINT0,
        !           188:                TRACEPOINT1,
        !           189:                TRACEPOINT2,
        !           190:                TRACEPOINT3,
        !           191:                SAW_HWERR,
        !           192:                BAD_SCB_STATUS
        !           193:        }
        !           194: }
        !           195:
        !           196: /*
        !           197:  * Clear Host Interrupt
        !           198:  */
        !           199: register CLRINT {
        !           200:        address                 0x003
        !           201:        access_mode     WO
        !           202:        field   CLRHWERRINT     0x80 /* Rev B or greater */
        !           203:        field   CLRBRKADRINT    0x40
        !           204:        field   CLRSWTMINT      0x20
        !           205:        field   CLRPCIINT       0x10
        !           206:        field   CLRSCSIINT      0x08
        !           207:        field   CLRSEQINT       0x04
        !           208:        field   CLRCMDINT       0x02
        !           209:        field   CLRSPLTINT      0x01
        !           210: }
        !           211:
        !           212: /*
        !           213:  * Error Register
        !           214:  */
        !           215: register ERROR {
        !           216:        address                 0x004
        !           217:        access_mode     RO
        !           218:        field   CIOPARERR       0x80
        !           219:        field   CIOACCESFAIL    0x40 /* Rev B or greater */
        !           220:        field   MPARERR         0x20
        !           221:        field   DPARERR         0x10
        !           222:        field   SQPARERR        0x08
        !           223:        field   ILLOPCODE       0x04
        !           224:        field   DSCTMOUT        0x02
        !           225: }
        !           226:
        !           227: /*
        !           228:  * Clear Error
        !           229:  */
        !           230: register CLRERR {
        !           231:        address                 0x004
        !           232:        access_mode     WO
        !           233:        field   CLRCIOPARERR    0x80
        !           234:        field   CLRCIOACCESFAIL 0x40 /* Rev B or greater */
        !           235:        field   CLRMPARERR      0x20
        !           236:        field   CLRDPARERR      0x10
        !           237:        field   CLRSQPARERR     0x08
        !           238:        field   CLRILLOPCODE    0x04
        !           239:        field   CLRDSCTMOUT     0x02
        !           240: }
        !           241:
        !           242: /*
        !           243:  * Host Control Register
        !           244:  * Overall host control of the device.
        !           245:  */
        !           246: register HCNTRL {
        !           247:        address                 0x005
        !           248:        access_mode     RW
        !           249:        field   SEQ_RESET       0x80 /* Rev B or greater */
        !           250:        field   POWRDN          0x40
        !           251:        field   SWINT           0x10
        !           252:        field   SWTIMER_START_B 0x08 /* Rev B or greater */
        !           253:        field   PAUSE           0x04
        !           254:        field   INTEN           0x02
        !           255:        field   CHIPRST         0x01
        !           256:        field   CHIPRSTACK      0x01
        !           257: }
        !           258:
        !           259: /*
        !           260:  * Host New SCB Queue Offset
        !           261:  */
        !           262: register HNSCB_QOFF {
        !           263:        address                 0x006
        !           264:        access_mode     RW
        !           265:        size            2
        !           266: }
        !           267:
        !           268: /*
        !           269:  * Host Empty SCB Queue Offset
        !           270:  */
        !           271: register HESCB_QOFF {
        !           272:        address                 0x008
        !           273:        access_mode     RW
        !           274: }
        !           275:
        !           276: /*
        !           277:  * Host Mailbox
        !           278:  */
        !           279: register HS_MAILBOX {
        !           280:        address                 0x00B
        !           281:        access_mode     RW
        !           282:        mask    HOST_TQINPOS    0x80    /* Boundary at either 0 or 128 */
        !           283:        mask    ENINT_COALESCE  0x40    /* Perform interrupt coalescing */
        !           284: }
        !           285:
        !           286: /*
        !           287:  * Sequencer Interrupt Status
        !           288:  */
        !           289: register SEQINTSTAT {
        !           290:        address                 0x00C
        !           291:        access_mode     RO
        !           292:        field   SEQ_SWTMRTO     0x10
        !           293:        field   SEQ_SEQINT      0x08
        !           294:        field   SEQ_SCSIINT     0x04
        !           295:        field   SEQ_PCIINT      0x02
        !           296:        field   SEQ_SPLTINT     0x01
        !           297: }
        !           298:
        !           299: /*
        !           300:  * Clear SEQ Interrupt
        !           301:  */
        !           302: register CLRSEQINTSTAT {
        !           303:        address                 0x00C
        !           304:        access_mode     WO
        !           305:        field   CLRSEQ_SWTMRTO  0x10
        !           306:        field   CLRSEQ_SEQINT   0x08
        !           307:        field   CLRSEQ_SCSIINT  0x04
        !           308:        field   CLRSEQ_PCIINT   0x02
        !           309:        field   CLRSEQ_SPLTINT  0x01
        !           310: }
        !           311:
        !           312: /*
        !           313:  * Software Timer
        !           314:  */
        !           315: register SWTIMER {
        !           316:        address                 0x00E
        !           317:        access_mode     RW
        !           318:        size            2
        !           319: }
        !           320:
        !           321: /*
        !           322:  * SEQ New SCB Queue Offset
        !           323:  */
        !           324: register SNSCB_QOFF {
        !           325:        address                 0x010
        !           326:        access_mode     RW
        !           327:        size            2
        !           328:        modes           M_CCHAN
        !           329: }
        !           330:
        !           331: /*
        !           332:  * SEQ Empty SCB Queue Offset
        !           333:  */
        !           334: register SESCB_QOFF {
        !           335:        address                 0x012
        !           336:        access_mode     RW
        !           337:        modes           M_CCHAN
        !           338: }
        !           339:
        !           340: /*
        !           341:  * SEQ Done SCB Queue Offset
        !           342:  */
        !           343: register SDSCB_QOFF {
        !           344:        address                 0x014
        !           345:        access_mode     RW
        !           346:        modes           M_CCHAN
        !           347:        size            2
        !           348: }
        !           349:
        !           350: /*
        !           351:  * Queue Offset Control & Status
        !           352:  */
        !           353: register QOFF_CTLSTA {
        !           354:        address                 0x016
        !           355:        access_mode     RW
        !           356:        modes           M_CCHAN
        !           357:        field   EMPTY_SCB_AVAIL 0x80
        !           358:        field   NEW_SCB_AVAIL   0x40
        !           359:        field   SDSCB_ROLLOVR   0x20
        !           360:        field   HS_MAILBOX_ACT  0x10
        !           361:        field   SCB_QSIZE       0x0F {
        !           362:                SCB_QSIZE_4,
        !           363:                SCB_QSIZE_8,
        !           364:                SCB_QSIZE_16,
        !           365:                SCB_QSIZE_32,
        !           366:                SCB_QSIZE_64,
        !           367:                SCB_QSIZE_128,
        !           368:                SCB_QSIZE_256,
        !           369:                SCB_QSIZE_512,
        !           370:                SCB_QSIZE_1024,
        !           371:                SCB_QSIZE_2048,
        !           372:                SCB_QSIZE_4096,
        !           373:                SCB_QSIZE_8192,
        !           374:                SCB_QSIZE_16384
        !           375:        }
        !           376: }
        !           377:
        !           378: /*
        !           379:  * Interrupt Control
        !           380:  */
        !           381: register INTCTL {
        !           382:        address                 0x018
        !           383:        access_mode     RW
        !           384:        field   SWTMINTMASK     0x80
        !           385:        field   SWTMINTEN       0x40
        !           386:        field   SWTIMER_START   0x20
        !           387:        field   AUTOCLRCMDINT   0x10
        !           388:        field   PCIINTEN        0x08
        !           389:        field   SCSIINTEN       0x04
        !           390:        field   SEQINTEN        0x02
        !           391:        field   SPLTINTEN       0x01
        !           392: }
        !           393:
        !           394: /*
        !           395:  * Data FIFO Control
        !           396:  */
        !           397: register DFCNTRL {
        !           398:        address                 0x019
        !           399:        access_mode     RW
        !           400:        modes           M_DFF0, M_DFF1
        !           401:        field   PRELOADEN       0x80
        !           402:        field   SCSIENWRDIS     0x40    /* Rev B only. */
        !           403:        field   SCSIEN          0x20
        !           404:        field   SCSIENACK       0x20
        !           405:        field   HDMAEN          0x08
        !           406:        field   HDMAENACK       0x08
        !           407:        field   DIRECTION       0x04
        !           408:        field   DIRECTIONACK    0x04
        !           409:        field   FIFOFLUSH       0x02
        !           410:        field   FIFOFLUSHACK    0x02
        !           411:        field   DIRECTIONEN     0x01
        !           412: }
        !           413:
        !           414: /*
        !           415:  * Device Space Command 0
        !           416:  */
        !           417: register DSCOMMAND0 {
        !           418:        address                 0x019
        !           419:        access_mode     RW
        !           420:        modes           M_CFG
        !           421:        field   CACHETHEN       0x80    /* Cache Threshold enable */
        !           422:        field   DPARCKEN        0x40    /* Data Parity Check Enable */
        !           423:        field   MPARCKEN        0x20    /* Memory Parity Check Enable */
        !           424:        field   EXTREQLCK       0x10    /* External Request Lock */
        !           425:        field   DISABLE_TWATE   0x02    /* Rev B or greater */
        !           426:        field   CIOPARCKEN      0x01    /* Internal bus parity error enable */
        !           427: }
        !           428:
        !           429: /*
        !           430:  * Data FIFO Status
        !           431:  */
        !           432: register DFSTATUS {
        !           433:        address                 0x01A
        !           434:        access_mode     RO
        !           435:        modes           M_DFF0, M_DFF1
        !           436:        field   PRELOAD_AVAIL           0x80
        !           437:        field   PKT_PRELOAD_AVAIL       0x40
        !           438:        field   MREQPEND                0x10
        !           439:        field   HDONE                   0x08
        !           440:        field   DFTHRESH                0x04
        !           441:        field   FIFOFULL                0x02
        !           442:        field   FIFOEMP                 0x01
        !           443: }
        !           444:
        !           445: /*
        !           446:  * S/G Cache Pointer
        !           447:  */
        !           448: register SG_CACHE_PRE {
        !           449:        address                 0x01B
        !           450:        access_mode     WO
        !           451:        modes           M_DFF0, M_DFF1
        !           452:        field   SG_ADDR_MASK    0xf8
        !           453:        field   ODD_SEG         0x04
        !           454:        field   LAST_SEG        0x02
        !           455: }
        !           456:
        !           457: register SG_CACHE_SHADOW {
        !           458:        address                 0x01B
        !           459:        access_mode     RO
        !           460:        modes           M_DFF0, M_DFF1
        !           461:        field   SG_ADDR_MASK    0xf8
        !           462:        field   ODD_SEG         0x04
        !           463:        field   LAST_SEG        0x02
        !           464:        field   LAST_SEG_DONE   0x01
        !           465: }
        !           466:
        !           467: /*
        !           468:  * Arbiter Control
        !           469:  */
        !           470: register ARBCTL {
        !           471:        address                 0x01B
        !           472:        access_mode     RW
        !           473:        modes           M_CFG
        !           474:        field   RESET_HARB      0x80
        !           475:        field   RETRY_SWEN      0x08
        !           476:        field   USE_TIME        0x07
        !           477: }
        !           478:
        !           479: /*
        !           480:  * Data Channel Host Address
        !           481:  */
        !           482: register HADDR {
        !           483:        address                 0x070
        !           484:        access_mode     RW
        !           485:        size            8
        !           486:        modes           M_DFF0, M_DFF1
        !           487: }
        !           488:
        !           489: /*
        !           490:  * Host Overlay DMA Address
        !           491:  */
        !           492: register HODMAADR {
        !           493:        address                 0x070
        !           494:        access_mode     RW
        !           495:        size            8
        !           496:        modes           M_SCSI
        !           497: }
        !           498:
        !           499: /*
        !           500:  * PCI PLL Delay.
        !           501:  */
        !           502: register PLLDELAY {
        !           503:        address                 0x070
        !           504:        access_mode     RW
        !           505:        size            1
        !           506:        modes           M_CFG
        !           507:        field   SPLIT_DROP_REQ  0x80
        !           508: }
        !           509:
        !           510: /*
        !           511:  * Data Channel Host Count
        !           512:  */
        !           513: register HCNT {
        !           514:        address                 0x078
        !           515:        access_mode     RW
        !           516:        size            3
        !           517:        modes           M_DFF0, M_DFF1
        !           518: }
        !           519:
        !           520: /*
        !           521:  * Host Overlay DMA Count
        !           522:  */
        !           523: register HODMACNT {
        !           524:        address                 0x078
        !           525:        access_mode     RW
        !           526:        size            2
        !           527:        modes           M_SCSI
        !           528: }
        !           529:
        !           530: /*
        !           531:  * Host Overlay DMA Enable
        !           532:  */
        !           533: register HODMAEN {
        !           534:        address                 0x07A
        !           535:        access_mode     RW
        !           536:        modes           M_SCSI
        !           537: }
        !           538:
        !           539: /*
        !           540:  * Scatter/Gather Host Address
        !           541:  */
        !           542: register SGHADDR {
        !           543:        address                 0x07C
        !           544:        access_mode     RW
        !           545:        size            8
        !           546:        modes           M_DFF0, M_DFF1
        !           547: }
        !           548:
        !           549: /*
        !           550:  * SCB Host Address
        !           551:  */
        !           552: register SCBHADDR {
        !           553:        address                 0x07C
        !           554:        access_mode     RW
        !           555:        size            8
        !           556:        modes           M_CCHAN
        !           557: }
        !           558:
        !           559: /*
        !           560:  * Scatter/Gather Host Count
        !           561:  */
        !           562: register SGHCNT {
        !           563:        address                 0x084
        !           564:        access_mode     RW
        !           565:        modes           M_DFF0, M_DFF1
        !           566: }
        !           567:
        !           568: /*
        !           569:  * SCB Host Count
        !           570:  */
        !           571: register SCBHCNT {
        !           572:        address                 0x084
        !           573:        access_mode     RW
        !           574:        modes           M_CCHAN
        !           575: }
        !           576:
        !           577: /*
        !           578:  * Data FIFO Threshold
        !           579:  */
        !           580: register DFF_THRSH {
        !           581:        address                 0x088
        !           582:        access_mode     RW
        !           583:        modes           M_CFG
        !           584:        field   WR_DFTHRSH      0x70 {
        !           585:                WR_DFTHRSH_MIN,
        !           586:                WR_DFTHRSH_25,
        !           587:                WR_DFTHRSH_50,
        !           588:                WR_DFTHRSH_63,
        !           589:                WR_DFTHRSH_75,
        !           590:                WR_DFTHRSH_85,
        !           591:                WR_DFTHRSH_90,
        !           592:                WR_DFTHRSH_MAX
        !           593:        }
        !           594:        field   RD_DFTHRSH      0x07 {
        !           595:                RD_DFTHRSH_MIN,
        !           596:                RD_DFTHRSH_25,
        !           597:                RD_DFTHRSH_50,
        !           598:                RD_DFTHRSH_63,
        !           599:                RD_DFTHRSH_75,
        !           600:                RD_DFTHRSH_85,
        !           601:                RD_DFTHRSH_90,
        !           602:                RD_DFTHRSH_MAX
        !           603:        }
        !           604: }
        !           605:
        !           606: /*
        !           607:  * ROM Address
        !           608:  */
        !           609: register ROMADDR {
        !           610:        address                 0x08A
        !           611:        access_mode     RW
        !           612:        size            3
        !           613: }
        !           614:
        !           615: /*
        !           616:  * ROM Control
        !           617:  */
        !           618: register ROMCNTRL {
        !           619:        address                 0x08D
        !           620:        access_mode     RW
        !           621:        field   ROMOP           0xE0
        !           622:        field   ROMSPD          0x18
        !           623:        field   REPEAT          0x02
        !           624:        field   RDY             0x01
        !           625: }
        !           626:
        !           627: /*
        !           628:  * ROM Data
        !           629:  */
        !           630: register ROMDATA {
        !           631:        address                 0x08E
        !           632:        access_mode     RW
        !           633: }
        !           634:
        !           635: /*
        !           636:  * Data Channel Receive Message 0
        !           637:  */
        !           638: register DCHRXMSG0 {
        !           639:        address                 0x090
        !           640:        access_mode     RO
        !           641:        modes           M_DFF0, M_DFF1
        !           642:        field           CDNUM   0xF8
        !           643:        field           CFNUM   0x07
        !           644: }
        !           645:
        !           646: /*
        !           647:  * CMC Recieve Message 0
        !           648:  */
        !           649: register CMCRXMSG0 {
        !           650:        address                 0x090
        !           651:        access_mode     RO
        !           652:        modes           M_CCHAN
        !           653:        field           CDNUM   0xF8
        !           654:        field           CFNUM   0x07
        !           655: }
        !           656:
        !           657: /*
        !           658:  * Overlay Recieve Message 0
        !           659:  */
        !           660: register OVLYRXMSG0 {
        !           661:        address                 0x090
        !           662:        access_mode     RO
        !           663:        modes           M_SCSI
        !           664:        field           CDNUM   0xF8
        !           665:        field           CFNUM   0x07
        !           666: }
        !           667:
        !           668: /*
        !           669:  * Relaxed Order Enable
        !           670:  */
        !           671: register ROENABLE {
        !           672:        address                 0x090
        !           673:        access_mode     RW
        !           674:        modes           M_CFG
        !           675:        field   MSIROEN         0x20
        !           676:        field   OVLYROEN        0x10
        !           677:        field   CMCROEN         0x08
        !           678:        field   SGROEN          0x04
        !           679:        field   DCH1ROEN        0x02
        !           680:        field   DCH0ROEN        0x01
        !           681: }
        !           682:
        !           683: /*
        !           684:  * Data Channel Receive Message 1
        !           685:  */
        !           686: register DCHRXMSG1 {
        !           687:        address                 0x091
        !           688:        access_mode     RO
        !           689:        modes           M_DFF0, M_DFF1
        !           690:        field   CBNUM           0xFF
        !           691: }
        !           692:
        !           693: /*
        !           694:  * CMC Recieve Message 1
        !           695:  */
        !           696: register CMCRXMSG1 {
        !           697:        address                 0x091
        !           698:        access_mode     RO
        !           699:        modes           M_CCHAN
        !           700:        field   CBNUM           0xFF
        !           701: }
        !           702:
        !           703: /*
        !           704:  * Overlay Recieve Message 1
        !           705:  */
        !           706: register OVLYRXMSG1 {
        !           707:        address                 0x091
        !           708:        access_mode     RO
        !           709:        modes           M_SCSI
        !           710:        field   CBNUM           0xFF
        !           711: }
        !           712:
        !           713: /*
        !           714:  * No Snoop Enable
        !           715:  */
        !           716: register NSENABLE {
        !           717:        address                 0x091
        !           718:        access_mode     RW
        !           719:        modes           M_CFG
        !           720:        field   MSINSEN         0x20
        !           721:        field   OVLYNSEN        0x10
        !           722:        field   CMCNSEN         0x08
        !           723:        field   SGNSEN          0x04
        !           724:        field   DCH1NSEN        0x02
        !           725:        field   DCH0NSEN        0x01
        !           726: }
        !           727:
        !           728: /*
        !           729:  * Data Channel Receive Message 2
        !           730:  */
        !           731: register DCHRXMSG2 {
        !           732:        address                 0x092
        !           733:        access_mode     RO
        !           734:        modes           M_DFF0, M_DFF1
        !           735:        field   MINDEX          0xFF
        !           736: }
        !           737:
        !           738: /*
        !           739:  * CMC Recieve Message 2
        !           740:  */
        !           741: register CMCRXMSG2 {
        !           742:        address                 0x092
        !           743:        access_mode     RO
        !           744:        modes           M_CCHAN
        !           745:        field   MINDEX          0xFF
        !           746: }
        !           747:
        !           748: /*
        !           749:  * Overlay Recieve Message 2
        !           750:  */
        !           751: register OVLYRXMSG2 {
        !           752:        address                 0x092
        !           753:        access_mode     RO
        !           754:        modes           M_SCSI
        !           755:        field   MINDEX          0xFF
        !           756: }
        !           757:
        !           758: /*
        !           759:  * Outstanding Split Transactions
        !           760:  */
        !           761: register OST {
        !           762:        address                 0x092
        !           763:        access_mode     RW
        !           764:        modes           M_CFG
        !           765: }
        !           766:
        !           767: /*
        !           768:  * Data Channel Receive Message 3
        !           769:  */
        !           770: register DCHRXMSG3 {
        !           771:        address                 0x093
        !           772:        access_mode     RO
        !           773:        modes           M_DFF0, M_DFF1
        !           774:        field   MCLASS          0x0F
        !           775: }
        !           776:
        !           777: /*
        !           778:  * CMC Recieve Message 3
        !           779:  */
        !           780: register CMCRXMSG3 {
        !           781:        address                 0x093
        !           782:        access_mode     RO
        !           783:        modes           M_CCHAN
        !           784:        field   MCLASS          0x0F
        !           785: }
        !           786:
        !           787: /*
        !           788:  * Overlay Recieve Message 3
        !           789:  */
        !           790: register OVLYRXMSG3 {
        !           791:        address                 0x093
        !           792:        access_mode     RO
        !           793:        modes           M_SCSI
        !           794:        field   MCLASS          0x0F
        !           795: }
        !           796:
        !           797: /*
        !           798:  * PCI-X Control
        !           799:  */
        !           800: register PCIXCTL {
        !           801:        address                 0x093
        !           802:        access_mode     RW
        !           803:        modes           M_CFG
        !           804:        field   SERRPULSE       0x80
        !           805:        field   UNEXPSCIEN      0x20
        !           806:        field   SPLTSMADIS      0x10
        !           807:        field   SPLTSTADIS      0x08
        !           808:        field   SRSPDPEEN       0x04
        !           809:        field   TSCSERREN       0x02
        !           810:        field   CMPABCDIS       0x01
        !           811: }
        !           812:
        !           813: /*
        !           814:  * CMC Sequencer Byte Count
        !           815:  */
        !           816: register CMCSEQBCNT {
        !           817:        address                 0x094
        !           818:        access_mode     RO
        !           819:        modes           M_CCHAN
        !           820: }
        !           821:
        !           822: /*
        !           823:  * Overlay Sequencer Byte Count
        !           824:  */
        !           825: register OVLYSEQBCNT {
        !           826:        address                 0x094
        !           827:        access_mode     RO
        !           828:        modes           M_SCSI
        !           829: }
        !           830:
        !           831: /*
        !           832:  * Data Channel Sequencer Byte Count
        !           833:  */
        !           834: register DCHSEQBCNT {
        !           835:        address                 0x094
        !           836:        access_mode     RO
        !           837:        size            2
        !           838:        modes           M_DFF0, M_DFF1
        !           839: }
        !           840:
        !           841: /*
        !           842:  * Data Channel Split Status 0
        !           843:  */
        !           844: register DCHSPLTSTAT0 {
        !           845:        address                 0x096
        !           846:        access_mode     RW
        !           847:        modes           M_DFF0, M_DFF1
        !           848:        field   STAETERM        0x80
        !           849:        field   SCBCERR         0x40
        !           850:        field   SCADERR         0x20
        !           851:        field   SCDATBUCKET     0x10
        !           852:        field   CNTNOTCMPLT     0x08
        !           853:        field   RXOVRUN         0x04
        !           854:        field   RXSCEMSG        0x02
        !           855:        field   RXSPLTRSP       0x01
        !           856: }
        !           857:
        !           858: /*
        !           859:  * CMC Split Status 0
        !           860:  */
        !           861: register CMCSPLTSTAT0 {
        !           862:        address                 0x096
        !           863:        access_mode     RW
        !           864:        modes           M_CCHAN
        !           865:        field   STAETERM        0x80
        !           866:        field   SCBCERR         0x40
        !           867:        field   SCADERR         0x20
        !           868:        field   SCDATBUCKET     0x10
        !           869:        field   CNTNOTCMPLT     0x08
        !           870:        field   RXOVRUN         0x04
        !           871:        field   RXSCEMSG        0x02
        !           872:        field   RXSPLTRSP       0x01
        !           873: }
        !           874:
        !           875: /*
        !           876:  * Overlay Split Status 0
        !           877:  */
        !           878: register OVLYSPLTSTAT0 {
        !           879:        address                 0x096
        !           880:        access_mode     RW
        !           881:        modes           M_SCSI
        !           882:        field   STAETERM        0x80
        !           883:        field   SCBCERR         0x40
        !           884:        field   SCADERR         0x20
        !           885:        field   SCDATBUCKET     0x10
        !           886:        field   CNTNOTCMPLT     0x08
        !           887:        field   RXOVRUN         0x04
        !           888:        field   RXSCEMSG        0x02
        !           889:        field   RXSPLTRSP       0x01
        !           890: }
        !           891:
        !           892: /*
        !           893:  * Data Channel Split Status 1
        !           894:  */
        !           895: register DCHSPLTSTAT1 {
        !           896:        address                 0x097
        !           897:        access_mode     RW
        !           898:        modes           M_DFF0, M_DFF1
        !           899:        field   RXDATABUCKET    0x01
        !           900: }
        !           901:
        !           902: /*
        !           903:  * CMC Split Status 1
        !           904:  */
        !           905: register CMCSPLTSTAT1 {
        !           906:        address                 0x097
        !           907:        access_mode     RW
        !           908:        modes           M_CCHAN
        !           909:        field   RXDATABUCKET    0x01
        !           910: }
        !           911:
        !           912: /*
        !           913:  * Overlay Split Status 1
        !           914:  */
        !           915: register OVLYSPLTSTAT1 {
        !           916:        address                 0x097
        !           917:        access_mode     RW
        !           918:        modes           M_SCSI
        !           919:        field   RXDATABUCKET    0x01
        !           920: }
        !           921:
        !           922: /*
        !           923:  * S/G Receive Message 0
        !           924:  */
        !           925: register SGRXMSG0 {
        !           926:        address                 0x098
        !           927:        access_mode     RO
        !           928:        modes           M_DFF0, M_DFF1
        !           929:        field           CDNUM   0xF8
        !           930:        field           CFNUM   0x07
        !           931: }
        !           932:
        !           933: /*
        !           934:  * S/G Receive Message 1
        !           935:  */
        !           936: register SGRXMSG1 {
        !           937:        address                 0x099
        !           938:        access_mode     RO
        !           939:        modes           M_DFF0, M_DFF1
        !           940:        field   CBNUM           0xFF
        !           941: }
        !           942:
        !           943: /*
        !           944:  * S/G Receive Message 2
        !           945:  */
        !           946: register SGRXMSG2 {
        !           947:        address                 0x09A
        !           948:        access_mode     RO
        !           949:        modes           M_DFF0, M_DFF1
        !           950:        field   MINDEX          0xFF
        !           951: }
        !           952:
        !           953: /*
        !           954:  * S/G Receive Message 3
        !           955:  */
        !           956: register SGRXMSG3 {
        !           957:        address                 0x09B
        !           958:        access_mode     RO
        !           959:        modes           M_DFF0, M_DFF1
        !           960:        field   MCLASS          0x0F
        !           961: }
        !           962:
        !           963: /*
        !           964:  * Slave Split Out Address 0
        !           965:  */
        !           966: register SLVSPLTOUTADR0 {
        !           967:        address                 0x098
        !           968:        access_mode     RO
        !           969:        modes           M_SCSI
        !           970:        field   LOWER_ADDR      0x7F
        !           971: }
        !           972:
        !           973: /*
        !           974:  * Slave Split Out Address 1
        !           975:  */
        !           976: register SLVSPLTOUTADR1 {
        !           977:        address                 0x099
        !           978:        access_mode     RO
        !           979:        modes           M_SCSI
        !           980:        field   REQ_DNUM        0xF8
        !           981:        field   REQ_FNUM        0x07
        !           982: }
        !           983:
        !           984: /*
        !           985:  * Slave Split Out Address 2
        !           986:  */
        !           987: register SLVSPLTOUTADR2 {
        !           988:        address                 0x09A
        !           989:        access_mode     RO
        !           990:        modes           M_SCSI
        !           991:        field   REQ_BNUM        0xFF
        !           992: }
        !           993:
        !           994: /*
        !           995:  * Slave Split Out Address 3
        !           996:  */
        !           997: register SLVSPLTOUTADR3 {
        !           998:        address                 0x09B
        !           999:        access_mode     RO
        !          1000:        modes           M_SCSI
        !          1001:        field   RLXORD          020
        !          1002:        field   TAG_NUM         0x1F
        !          1003: }
        !          1004:
        !          1005: /*
        !          1006:  * SG Sequencer Byte Count
        !          1007:  */
        !          1008: register SGSEQBCNT {
        !          1009:        address                 0x09C
        !          1010:        access_mode     RO
        !          1011:        modes           M_DFF0, M_DFF1
        !          1012: }
        !          1013:
        !          1014: /*
        !          1015:  * Slave Split Out Attribute 0
        !          1016:  */
        !          1017: register SLVSPLTOUTATTR0 {
        !          1018:        address                 0x09C
        !          1019:        access_mode     RO
        !          1020:        modes           M_SCSI
        !          1021:        field   LOWER_BCNT      0xFF
        !          1022: }
        !          1023:
        !          1024: /*
        !          1025:  * Slave Split Out Attribute 1
        !          1026:  */
        !          1027: register SLVSPLTOUTATTR1 {
        !          1028:        address                 0x09D
        !          1029:        access_mode     RO
        !          1030:        modes           M_SCSI
        !          1031:        field   CMPLT_DNUM      0xF8
        !          1032:        field   CMPLT_FNUM      0x07
        !          1033: }
        !          1034:
        !          1035: /*
        !          1036:  * Slave Split Out Attribute 2
        !          1037:  */
        !          1038: register SLVSPLTOUTATTR2 {
        !          1039:        address                 0x09E
        !          1040:        access_mode     RO
        !          1041:        size            2
        !          1042:        modes           M_SCSI
        !          1043:        field   CMPLT_BNUM      0xFF
        !          1044: }
        !          1045: /*
        !          1046:  * S/G Split Status 0
        !          1047:  */
        !          1048: register SGSPLTSTAT0 {
        !          1049:        address                 0x09E
        !          1050:        access_mode     RW
        !          1051:        modes           M_DFF0, M_DFF1
        !          1052:        field   STAETERM        0x80
        !          1053:        field   SCBCERR         0x40
        !          1054:        field   SCADERR         0x20
        !          1055:        field   SCDATBUCKET     0x10
        !          1056:        field   CNTNOTCMPLT     0x08
        !          1057:        field   RXOVRUN         0x04
        !          1058:        field   RXSCEMSG        0x02
        !          1059:        field   RXSPLTRSP       0x01
        !          1060: }
        !          1061:
        !          1062: /*
        !          1063:  * S/G Split Status 1
        !          1064:  */
        !          1065: register SGSPLTSTAT1 {
        !          1066:        address                 0x09F
        !          1067:        access_mode     RW
        !          1068:        modes           M_DFF0, M_DFF1
        !          1069:        field   RXDATABUCKET    0x01
        !          1070: }
        !          1071:
        !          1072: /*
        !          1073:  * Special Function
        !          1074:  */
        !          1075: register SFUNCT {
        !          1076:        address                 0x09f
        !          1077:        access_mode     RW
        !          1078:        modes           M_CFG
        !          1079:        field   TEST_GROUP      0xF0
        !          1080:        field   TEST_NUM        0x0F
        !          1081: }
        !          1082:
        !          1083: /*
        !          1084:  * Data FIFO 0 PCI Status
        !          1085:  */
        !          1086: register DF0PCISTAT {
        !          1087:        address                 0x0A0
        !          1088:        access_mode     RW
        !          1089:        modes           M_CFG
        !          1090:        field   DPE             0x80
        !          1091:        field   SSE             0x40
        !          1092:        field   RMA             0x20
        !          1093:        field   RTA             0x10
        !          1094:        field   SCAAPERR        0x08
        !          1095:        field   RDPERR          0x04
        !          1096:        field   TWATERR         0x02
        !          1097:        field   DPR             0x01
        !          1098: }
        !          1099:
        !          1100: /*
        !          1101:  * Data FIFO 1 PCI Status
        !          1102:  */
        !          1103: register DF1PCISTAT {
        !          1104:        address                 0x0A1
        !          1105:        access_mode     RW
        !          1106:        modes           M_CFG
        !          1107:        field   DPE             0x80
        !          1108:        field   SSE             0x40
        !          1109:        field   RMA             0x20
        !          1110:        field   RTA             0x10
        !          1111:        field   SCAAPERR        0x08
        !          1112:        field   RDPERR          0x04
        !          1113:        field   TWATERR         0x02
        !          1114:        field   DPR             0x01
        !          1115: }
        !          1116:
        !          1117: /*
        !          1118:  * S/G PCI Status
        !          1119:  */
        !          1120: register SGPCISTAT {
        !          1121:        address                 0x0A2
        !          1122:        access_mode     RW
        !          1123:        modes           M_CFG
        !          1124:        field   DPE             0x80
        !          1125:        field   SSE             0x40
        !          1126:        field   RMA             0x20
        !          1127:        field   RTA             0x10
        !          1128:        field   SCAAPERR        0x08
        !          1129:        field   RDPERR          0x04
        !          1130:        field   DPR             0x01
        !          1131: }
        !          1132:
        !          1133: /*
        !          1134:  * CMC PCI Status
        !          1135:  */
        !          1136: register CMCPCISTAT {
        !          1137:        address                 0x0A3
        !          1138:        access_mode     RW
        !          1139:        modes           M_CFG
        !          1140:        field   DPE             0x80
        !          1141:        field   SSE             0x40
        !          1142:        field   RMA             0x20
        !          1143:        field   RTA             0x10
        !          1144:        field   SCAAPERR        0x08
        !          1145:        field   RDPERR          0x04
        !          1146:        field   TWATERR         0x02
        !          1147:        field   DPR             0x01
        !          1148: }
        !          1149:
        !          1150: /*
        !          1151:  * Overlay PCI Status
        !          1152:  */
        !          1153: register OVLYPCISTAT {
        !          1154:        address                 0x0A4
        !          1155:        access_mode     RW
        !          1156:        modes           M_CFG
        !          1157:        field   DPE             0x80
        !          1158:        field   SSE             0x40
        !          1159:        field   RMA             0x20
        !          1160:        field   RTA             0x10
        !          1161:        field   SCAAPERR        0x08
        !          1162:        field   RDPERR          0x04
        !          1163:        field   DPR             0x01
        !          1164: }
        !          1165:
        !          1166: /*
        !          1167:  * PCI Status for MSI Master DMA Transfer
        !          1168:  */
        !          1169: register MSIPCISTAT {
        !          1170:        address                 0x0A6
        !          1171:        access_mode     RW
        !          1172:        modes           M_CFG
        !          1173:        field   SSE             0x40
        !          1174:        field   RMA             0x20
        !          1175:        field   RTA             0x10
        !          1176:        field   CLRPENDMSI      0x08
        !          1177:        field   TWATERR         0x02
        !          1178:        field   DPR             0x01
        !          1179: }
        !          1180:
        !          1181: /*
        !          1182:  * PCI Status for Target
        !          1183:  */
        !          1184: register TARGPCISTAT {
        !          1185:        address                 0x0A7
        !          1186:        access_mode     RW
        !          1187:        modes           M_CFG
        !          1188:        field   DPE             0x80
        !          1189:        field   SSE             0x40
        !          1190:        field   STA             0x08
        !          1191:        field   TWATERR         0x02
        !          1192: }
        !          1193:
        !          1194: /*
        !          1195:  * LQ Packet In
        !          1196:  * The last LQ Packet recieved
        !          1197:  */
        !          1198: register LQIN {
        !          1199:        address                 0x020
        !          1200:        access_mode     RW
        !          1201:        size            20
        !          1202:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1203: }
        !          1204:
        !          1205: /*
        !          1206:  * SCB Type Pointer
        !          1207:  * SCB offset for Target Mode SCB type information
        !          1208:  */
        !          1209: register TYPEPTR {
        !          1210:        address                 0x020
        !          1211:        access_mode     RW
        !          1212:        modes           M_CFG
        !          1213: }
        !          1214:
        !          1215: /*
        !          1216:  * Queue Tag Pointer
        !          1217:  * SCB offset to the Two Byte tag identifier used for target mode.
        !          1218:  */
        !          1219: register TAGPTR {
        !          1220:        address                 0x021
        !          1221:        access_mode     RW
        !          1222:        modes           M_CFG
        !          1223: }
        !          1224:
        !          1225: /*
        !          1226:  * Logical Unit Number Pointer
        !          1227:  * SCB offset to the LSB (little endian) of the lun field.
        !          1228:  */
        !          1229: register LUNPTR {
        !          1230:        address                 0x022
        !          1231:        access_mode     RW
        !          1232:        modes           M_CFG
        !          1233: }
        !          1234:
        !          1235: /*
        !          1236:  * Data Length Pointer
        !          1237:  * SCB offset for the 4 byte data length field in target mode.
        !          1238:  */
        !          1239: register DATALENPTR {
        !          1240:        address                 0x023
        !          1241:        access_mode     RW
        !          1242:        modes           M_CFG
        !          1243: }
        !          1244:
        !          1245: /*
        !          1246:  * Status Length Pointer
        !          1247:  * SCB offset to the two byte status field in target SCBs.
        !          1248:  */
        !          1249: register STATLENPTR {
        !          1250:        address                 0x024
        !          1251:        access_mode     RW
        !          1252:        modes           M_CFG
        !          1253: }
        !          1254:
        !          1255: /*
        !          1256:  * Command Length Pointer
        !          1257:  * Scb offset for the CDB length field in initiator SCBs.
        !          1258:  */
        !          1259: register CMDLENPTR {
        !          1260:        address                 0x025
        !          1261:        access_mode     RW
        !          1262:        modes           M_CFG
        !          1263: }
        !          1264:
        !          1265: /*
        !          1266:  * Task Attribute Pointer
        !          1267:  * Scb offset for the byte field specifying the attribute byte
        !          1268:  * to be used in command packets.
        !          1269:  */
        !          1270: register ATTRPTR {
        !          1271:        address                 0x026
        !          1272:        access_mode     RW
        !          1273:        modes           M_CFG
        !          1274: }
        !          1275:
        !          1276: /*
        !          1277:  * Task Management Flags Pointer
        !          1278:  * Scb offset for the byte field specifying the attribute flags
        !          1279:  * byte to be used in command packets.
        !          1280:  */
        !          1281: register FLAGPTR {
        !          1282:        address                 0x027
        !          1283:        access_mode     RW
        !          1284:        modes           M_CFG
        !          1285: }
        !          1286:
        !          1287: /*
        !          1288:  * Command Pointer
        !          1289:  * Scb offset for the first byte in the CDB for initiator SCBs.
        !          1290:  */
        !          1291: register CMDPTR {
        !          1292:        address                 0x028
        !          1293:        access_mode     RW
        !          1294:        modes           M_CFG
        !          1295: }
        !          1296:
        !          1297: /*
        !          1298:  * Queue Next Pointer
        !          1299:  * Scb offset for the 2 byte "next scb link".
        !          1300:  */
        !          1301: register QNEXTPTR {
        !          1302:        address                 0x029
        !          1303:        access_mode     RW
        !          1304:        modes           M_CFG
        !          1305: }
        !          1306:
        !          1307: /*
        !          1308:  * SCSI ID Pointer
        !          1309:  * Scb offset to the value to place in the SCSIID register
        !          1310:  * during target mode connections.
        !          1311:  */
        !          1312: register IDPTR {
        !          1313:        address                 0x02A
        !          1314:        access_mode     RW
        !          1315:        modes           M_CFG
        !          1316: }
        !          1317:
        !          1318: /*
        !          1319:  * Command Aborted Byte Pointer
        !          1320:  * Offset to the SCB flags field that includes the
        !          1321:  * "SCB aborted" status bit.
        !          1322:  */
        !          1323: register ABRTBYTEPTR {
        !          1324:        address                 0x02B
        !          1325:        access_mode     RW
        !          1326:        modes           M_CFG
        !          1327: }
        !          1328:
        !          1329: /*
        !          1330:  * Command Aborted Bit Pointer
        !          1331:  * Bit offset in the SCB flags field for "SCB aborted" status.
        !          1332:  */
        !          1333: register ABRTBITPTR {
        !          1334:        address                 0x02C
        !          1335:        access_mode     RW
        !          1336:        modes           M_CFG
        !          1337: }
        !          1338:
        !          1339: /*
        !          1340:  * Rev B or greater.
        !          1341:  */
        !          1342: register MAXCMDBYTES {
        !          1343:        address                 0x02D
        !          1344:        access_mode     RW
        !          1345:        modes           M_CFG
        !          1346: }
        !          1347:
        !          1348: /*
        !          1349:  * Rev B or greater.
        !          1350:  */
        !          1351: register MAXCMD2RCV {
        !          1352:        address                 0x02E
        !          1353:        access_mode     RW
        !          1354:        modes           M_CFG
        !          1355: }
        !          1356:
        !          1357: /*
        !          1358:  * Rev B or greater.
        !          1359:  */
        !          1360: register SHORTTHRESH {
        !          1361:        address                 0x02F
        !          1362:        access_mode     RW
        !          1363:        modes           M_CFG
        !          1364: }
        !          1365:
        !          1366: /*
        !          1367:  * Logical Unit Number Length
        !          1368:  * The length, in bytes, of the SCB lun field.
        !          1369:  */
        !          1370: register LUNLEN {
        !          1371:        address                 0x030
        !          1372:        access_mode     RW
        !          1373:        modes           M_CFG
        !          1374:        mask            ILUNLEN 0x0F
        !          1375:        mask            TLUNLEN 0xF0
        !          1376: }
        !          1377: const LUNLEN_SINGLE_LEVEL_LUN 0xF
        !          1378:
        !          1379: /*
        !          1380:  * CDB Limit
        !          1381:  * The size, in bytes, of the embedded CDB field in initator SCBs.
        !          1382:  */
        !          1383: register CDBLIMIT {
        !          1384:        address                 0x031
        !          1385:        access_mode     RW
        !          1386:        modes           M_CFG
        !          1387: }
        !          1388:
        !          1389: /*
        !          1390:  * Maximum Commands
        !          1391:  * The maximum number of commands to issue during a
        !          1392:  * single packetized connection.
        !          1393:  */
        !          1394: register MAXCMD {
        !          1395:        address                 0x032
        !          1396:        access_mode     RW
        !          1397:        modes           M_CFG
        !          1398: }
        !          1399:
        !          1400: /*
        !          1401:  * Maximum Command Counter
        !          1402:  * The number of commands already sent during this connection
        !          1403:  */
        !          1404: register MAXCMDCNT {
        !          1405:        address                 0x033
        !          1406:        access_mode     RW
        !          1407:        modes           M_CFG
        !          1408: }
        !          1409:
        !          1410: /*
        !          1411:  * LQ Packet Reserved Bytes
        !          1412:  * The bytes to be sent in the currently reserved fileds
        !          1413:  * of all LQ packets.
        !          1414:  */
        !          1415: register LQRSVD01 {
        !          1416:        address                 0x034
        !          1417:        access_mode     RW
        !          1418:        modes           M_SCSI
        !          1419: }
        !          1420: register LQRSVD16 {
        !          1421:        address                 0x035
        !          1422:        access_mode     RW
        !          1423:        modes           M_SCSI
        !          1424: }
        !          1425: register LQRSVD17 {
        !          1426:        address                 0x036
        !          1427:        access_mode     RW
        !          1428:        modes           M_SCSI
        !          1429: }
        !          1430:
        !          1431: /*
        !          1432:  * Command Reserved 0
        !          1433:  * The byte to be sent for the reserved byte 0 of
        !          1434:  * outgoing command packets.
        !          1435:  */
        !          1436: register CMDRSVD0 {
        !          1437:        address                 0x037
        !          1438:        access_mode     RW
        !          1439:        modes           M_CFG
        !          1440: }
        !          1441:
        !          1442: /*
        !          1443:  * LQ Manager Control 0
        !          1444:  */
        !          1445: register LQCTL0 {
        !          1446:        address                 0x038
        !          1447:        access_mode     RW
        !          1448:        modes           M_CFG
        !          1449:        field   LQITARGCLT      0xC0
        !          1450:        field   LQIINITGCLT     0x30
        !          1451:        field   LQ0TARGCLT      0x0C
        !          1452:        field   LQ0INITGCLT     0x03
        !          1453: }
        !          1454:
        !          1455: /*
        !          1456:  * LQ Manager Control 1
        !          1457:  */
        !          1458: register LQCTL1 {
        !          1459:        address                 0x038
        !          1460:        access_mode     RW
        !          1461:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1462:        field   PCI2PCI         0x04
        !          1463:        field   SINGLECMD       0x02
        !          1464:        field   ABORTPENDING    0x01
        !          1465: }
        !          1466:
        !          1467: /*
        !          1468:  * LQ Manager Control 2
        !          1469:  */
        !          1470: register LQCTL2 {
        !          1471:        address                 0x039
        !          1472:        access_mode     RW
        !          1473:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1474:        field   LQIRETRY        0x80
        !          1475:        field   LQICONTINUE     0x40
        !          1476:        field   LQITOIDLE       0x20
        !          1477:        field   LQIPAUSE        0x10
        !          1478:        field   LQORETRY        0x08
        !          1479:        field   LQOCONTINUE     0x04
        !          1480:        field   LQOTOIDLE       0x02
        !          1481:        field   LQOPAUSE        0x01
        !          1482: }
        !          1483:
        !          1484: /*
        !          1485:  * SCSI RAM BIST0
        !          1486:  */
        !          1487: register SCSBIST0 {
        !          1488:        address                 0x039
        !          1489:        access_mode     RW
        !          1490:        modes           M_CFG
        !          1491:        field   GSBISTERR       0x40
        !          1492:        field   GSBISTDONE      0x20
        !          1493:        field   GSBISTRUN       0x10
        !          1494:        field   OSBISTERR       0x04
        !          1495:        field   OSBISTDONE      0x02
        !          1496:        field   OSBISTRUN       0x01
        !          1497: }
        !          1498:
        !          1499: /*
        !          1500:  * SCSI Sequence Control0
        !          1501:  */
        !          1502: register SCSISEQ0 {
        !          1503:        address                 0x03A
        !          1504:        access_mode     RW
        !          1505:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1506:        field   TEMODEO         0x80
        !          1507:        field   ENSELO          0x40
        !          1508:        field   ENARBO          0x20
        !          1509:        field   FORCEBUSFREE    0x10
        !          1510:        field   SCSIRSTO        0x01
        !          1511: }
        !          1512:
        !          1513: /*
        !          1514:  * SCSI RAM BIST 1
        !          1515:  */
        !          1516: register SCSBIST1 {
        !          1517:        address                 0x03A
        !          1518:        access_mode     RW
        !          1519:        modes           M_CFG
        !          1520:        field   NTBISTERR       0x04
        !          1521:        field   NTBISTDONE      0x02
        !          1522:        field   NTBISTRUN       0x01
        !          1523: }
        !          1524:
        !          1525: /*
        !          1526:  * SCSI Sequence Control 1
        !          1527:  */
        !          1528: register SCSISEQ1 {
        !          1529:        address                 0x03B
        !          1530:        access_mode     RW
        !          1531:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1532:        field   MANUALCTL       0x40
        !          1533:        field   ENSELI          0x20
        !          1534:        field   ENRSELI         0x10
        !          1535:        field   MANUALP         0x0C
        !          1536:        field   ENAUTOATNP      0x02
        !          1537:        field   ALTSTIM         0x01
        !          1538: }
        !          1539:
        !          1540: /*
        !          1541:  * SCSI Transfer Control 0
        !          1542:  */
        !          1543: register SXFRCTL0 {
        !          1544:        address                 0x03C
        !          1545:        access_mode     RW
        !          1546:        modes           M_SCSI
        !          1547:        field   DFON            0x80
        !          1548:        field   DFPEXP          0x40
        !          1549:        field   BIOSCANCELEN    0x10
        !          1550:        field   SPIOEN          0x08
        !          1551: }
        !          1552:
        !          1553: /*
        !          1554:  * SCSI Transfer Control 1
        !          1555:  */
        !          1556: register SXFRCTL1 {
        !          1557:        address                 0x03D
        !          1558:        access_mode     RW
        !          1559:        modes           M_SCSI
        !          1560:        field   BITBUCKET       0x80
        !          1561:        field   ENSACHK         0x40
        !          1562:        field   ENSPCHK         0x20
        !          1563:        field   STIMESEL        0x18
        !          1564:        field   ENSTIMER        0x04
        !          1565:        field   ACTNEGEN        0x02
        !          1566:        field   STPWEN          0x01
        !          1567: }
        !          1568:
        !          1569: /*
        !          1570:  * SCSI Transfer Control 2
        !          1571:  */
        !          1572: register SXFRCTL2 {
        !          1573:        address                 0x03E
        !          1574:        access_mode     RW
        !          1575:        modes           M_SCSI
        !          1576:        field   AUTORSTDIS      0x10
        !          1577:        field   CMDDMAEN        0x08
        !          1578:        field   ASU             0x07
        !          1579: }
        !          1580:
        !          1581: /*
        !          1582:  * SCSI Bus Initiator IDs
        !          1583:  * Bitmask of observed initiators on the bus.
        !          1584:  */
        !          1585: register BUSINITID {
        !          1586:        address                 0x03C
        !          1587:        access_mode     RW
        !          1588:        modes           M_CFG
        !          1589:        size            2
        !          1590: }
        !          1591:
        !          1592: /*
        !          1593:  * Data Length Counters
        !          1594:  * Packet byte counter.
        !          1595:  */
        !          1596: register DLCOUNT {
        !          1597:        address                 0x03C
        !          1598:        access_mode     RW
        !          1599:        modes           M_DFF0, M_DFF1
        !          1600:        size            3
        !          1601: }
        !          1602:
        !          1603: /*
        !          1604:  * Data FIFO Status
        !          1605:  */
        !          1606: register DFFSTAT {
        !          1607:        address                 0x03F
        !          1608:        access_mode     RW
        !          1609:        modes           M_SCSI
        !          1610:        field   FIFO1FREE       0x20
        !          1611:        field   FIFO0FREE       0x10
        !          1612:        /*
        !          1613:         * On the B, this enum only works
        !          1614:         * in the read direction.  For writes,
        !          1615:         * you must use the B version of the
        !          1616:         * CURRFIFO_0 definition which is defined
        !          1617:         * as a constant outside of this register
        !          1618:         * definition to avoid confusing the
        !          1619:         * register pretty printing code.
        !          1620:         */
        !          1621:        enum    CURRFIFO        0x03 {
        !          1622:                CURRFIFO_0,
        !          1623:                CURRFIFO_1,
        !          1624:                CURRFIFO_NONE   0x3
        !          1625:        }
        !          1626: }
        !          1627:
        !          1628: const B_CURRFIFO_0 0x2
        !          1629:
        !          1630: /*
        !          1631:  * SCSI Bus Target IDs
        !          1632:  * Bitmask of observed targets on the bus.
        !          1633:  */
        !          1634: register BUSTARGID {
        !          1635:        address                 0x03E
        !          1636:        access_mode     RW
        !          1637:        modes           M_CFG
        !          1638:        size            2
        !          1639: }
        !          1640:
        !          1641: /*
        !          1642:  * SCSI Control Signal Out
        !          1643:  */
        !          1644: register SCSISIGO {
        !          1645:        address                 0x040
        !          1646:        access_mode     RW
        !          1647:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1648:        field   CDO             0x80
        !          1649:        field   IOO             0x40
        !          1650:        field   MSGO            0x20
        !          1651:        field   ATNO            0x10
        !          1652:        field   SELO            0x08
        !          1653:        field   BSYO            0x04
        !          1654:        field   REQO            0x02
        !          1655:        field   ACKO            0x01
        !          1656: /*
        !          1657:  * Possible phases to write into SCSISIG0
        !          1658:  */
        !          1659:        enum    PHASE_MASK  CDO|IOO|MSGO {
        !          1660:                P_DATAOUT       0x0,
        !          1661:                P_DATAIN        IOO,
        !          1662:                P_DATAOUT_DT    P_DATAOUT|MSGO,
        !          1663:                P_DATAIN_DT     P_DATAIN|MSGO,
        !          1664:                P_COMMAND       CDO,
        !          1665:                P_MESGOUT       CDO|MSGO,
        !          1666:                P_STATUS        CDO|IOO,
        !          1667:                P_MESGIN        CDO|IOO|MSGO
        !          1668:        }
        !          1669: }
        !          1670:
        !          1671: register SCSISIGI {
        !          1672:        address                 0x041
        !          1673:        access_mode     RO
        !          1674:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1675:        field   CDI             0x80
        !          1676:        field   IOI             0x40
        !          1677:        field   MSGI            0x20
        !          1678:        field   ATNI            0x10
        !          1679:        field   SELI            0x08
        !          1680:        field   BSYI            0x04
        !          1681:        field   REQI            0x02
        !          1682:        field   ACKI            0x01
        !          1683: /*
        !          1684:  * Possible phases in SCSISIGI
        !          1685:  */
        !          1686:        enum    PHASE_MASK  CDO|IOO|MSGO {
        !          1687:                P_DATAOUT       0x0,
        !          1688:                P_DATAIN        IOO,
        !          1689:                P_DATAOUT_DT    P_DATAOUT|MSGO,
        !          1690:                P_DATAIN_DT     P_DATAIN|MSGO,
        !          1691:                P_COMMAND       CDO,
        !          1692:                P_MESGOUT       CDO|MSGO,
        !          1693:                P_STATUS        CDO|IOO,
        !          1694:                P_MESGIN        CDO|IOO|MSGO
        !          1695:        }
        !          1696: }
        !          1697:
        !          1698: /*
        !          1699:  * Multiple Target IDs
        !          1700:  * Bitmask of ids to respond as a target.
        !          1701:  */
        !          1702: register MULTARGID {
        !          1703:        address                 0x040
        !          1704:        access_mode     RW
        !          1705:        modes           M_CFG
        !          1706:        size            2
        !          1707: }
        !          1708:
        !          1709: /*
        !          1710:  * SCSI Phase
        !          1711:  */
        !          1712: register SCSIPHASE {
        !          1713:        address                 0x042
        !          1714:        access_mode     RO
        !          1715:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1716:        field   STATUS_PHASE    0x20
        !          1717:        field   COMMAND_PHASE   0x10
        !          1718:        field   MSG_IN_PHASE    0x08
        !          1719:        field   MSG_OUT_PHASE   0x04
        !          1720:        field   DATA_PHASE_MASK 0x03 {
        !          1721:                DATA_OUT_PHASE  0x01,
        !          1722:                DATA_IN_PHASE   0x02
        !          1723:        }
        !          1724: }
        !          1725:
        !          1726: /*
        !          1727:  * SCSI Data 0 Image
        !          1728:  */
        !          1729: register SCSIDAT0_IMG {
        !          1730:        address                 0x043
        !          1731:        access_mode     RW
        !          1732:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1733: }
        !          1734:
        !          1735: /*
        !          1736:  * SCSI Latched Data
        !          1737:  */
        !          1738: register SCSIDAT {
        !          1739:        address                 0x044
        !          1740:        access_mode     RW
        !          1741:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1742:        size            2
        !          1743: }
        !          1744:
        !          1745: /*
        !          1746:  * SCSI Data Bus
        !          1747:  */
        !          1748: register SCSIBUS {
        !          1749:        address                 0x046
        !          1750:        access_mode     RW
        !          1751:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1752:        size            2
        !          1753: }
        !          1754:
        !          1755: /*
        !          1756:  * Target ID In
        !          1757:  */
        !          1758: register TARGIDIN {
        !          1759:        address                 0x048
        !          1760:        access_mode     RO
        !          1761:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1762:        field   CLKOUT          0x80
        !          1763:        field   TARGID          0x0F
        !          1764: }
        !          1765:
        !          1766: /*
        !          1767:  * Selection/Reselection ID
        !          1768:  * Upper four bits are the device id.  The ONEBIT is set when the re/selecting
        !          1769:  * device did not set its own ID.
        !          1770:  */
        !          1771: register SELID {
        !          1772:        address                 0x049
        !          1773:        access_mode     RW
        !          1774:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1775:        field   SELID_MASK      0xf0
        !          1776:        field   ONEBIT          0x08
        !          1777: }
        !          1778:
        !          1779: /*
        !          1780:  * SCSI Block Control
        !          1781:  * Controls Bus type and channel selection.  SELWIDE allows for the
        !          1782:  * coexistence of 8bit and 16bit devices on a wide bus.
        !          1783:  */
        !          1784: register SBLKCTL {
        !          1785:        address                 0x04A
        !          1786:        access_mode     RW
        !          1787:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1788:        field   DIAGLEDEN       0x80
        !          1789:        field   DIAGLEDON       0x40
        !          1790:        field   ENAB40          0x08    /* LVD transceiver active */
        !          1791:        field   ENAB20          0x04    /* SE/HVD transceiver active */
        !          1792:        field   SELWIDE         0x02
        !          1793: }
        !          1794:
        !          1795: /*
        !          1796:  * Option Mode
        !          1797:  */
        !          1798: register OPTIONMODE {
        !          1799:        address                 0x04A
        !          1800:        access_mode     RW
        !          1801:        modes           M_CFG
        !          1802:        field   BIOSCANCTL              0x80
        !          1803:        field   AUTOACKEN               0x40
        !          1804:        field   BIASCANCTL              0x20
        !          1805:        field   BUSFREEREV              0x10
        !          1806:        field   ENDGFORMCHK             0x04
        !          1807:        field   AUTO_MSGOUT_DE          0x02
        !          1808:        mask    OPTIONMODE_DEFAULTS     AUTO_MSGOUT_DE
        !          1809: }
        !          1810:
        !          1811: /*
        !          1812:  * SCSI Status 0
        !          1813:  */
        !          1814: register SSTAT0        {
        !          1815:        address                 0x04B
        !          1816:        access_mode     RO
        !          1817:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1818:        field   TARGET          0x80    /* Board acting as target */
        !          1819:        field   SELDO           0x40    /* Selection Done */
        !          1820:        field   SELDI           0x20    /* Board has been selected */
        !          1821:        field   SELINGO         0x10    /* Selection In Progress */
        !          1822:        field   IOERR           0x08    /* LVD Tranceiver mode changed */
        !          1823:        field   OVERRUN         0x04    /* SCSI Offset overrun detected */
        !          1824:        field   SPIORDY         0x02    /* SCSI PIO Ready */
        !          1825:        field   ARBDO           0x01    /* Arbitration Done Out */
        !          1826: }
        !          1827:
        !          1828: /*
        !          1829:  * Clear SCSI Interrupt 0
        !          1830:  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT0.
        !          1831:  */
        !          1832: register CLRSINT0 {
        !          1833:        address                 0x04B
        !          1834:        access_mode     WO
        !          1835:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1836:        field   CLRSELDO        0x40
        !          1837:        field   CLRSELDI        0x20
        !          1838:        field   CLRSELINGO      0x10
        !          1839:        field   CLRIOERR        0x08
        !          1840:        field   CLROVERRUN      0x04
        !          1841:        field   CLRSPIORDY      0x02
        !          1842:        field   CLRARBDO        0x01
        !          1843: }
        !          1844:
        !          1845: /*
        !          1846:  * SCSI Interrupt Mode 0
        !          1847:  * Setting any bit will enable the corresponding function
        !          1848:  * in SIMODE0 to interrupt via the IRQ pin.
        !          1849:  */
        !          1850: register SIMODE0 {
        !          1851:        address                 0x04B
        !          1852:        access_mode     RW
        !          1853:        modes           M_CFG
        !          1854:        field   ENSELDO         0x40
        !          1855:        field   ENSELDI         0x20
        !          1856:        field   ENSELINGO       0x10
        !          1857:        field   ENIOERR         0x08
        !          1858:        field   ENOVERRUN       0x04
        !          1859:        field   ENSPIORDY       0x02
        !          1860:        field   ENARBDO         0x01
        !          1861: }
        !          1862:
        !          1863: /*
        !          1864:  * SCSI Status 1
        !          1865:  */
        !          1866: register SSTAT1 {
        !          1867:        address                 0x04C
        !          1868:        access_mode     RO
        !          1869:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1870:        field   SELTO           0x80
        !          1871:        field   ATNTARG         0x40
        !          1872:        field   SCSIRSTI        0x20
        !          1873:        field   PHASEMIS        0x10
        !          1874:        field   BUSFREE         0x08
        !          1875:        field   SCSIPERR        0x04
        !          1876:        field   STRB2FAST       0x02
        !          1877:        field   REQINIT         0x01
        !          1878: }
        !          1879:
        !          1880: /*
        !          1881:  * Clear SCSI Interrupt 1
        !          1882:  * Writing a 1 to a bit clears the associated SCSI Interrupt in SSTAT1.
        !          1883:  */
        !          1884: register CLRSINT1 {
        !          1885:        address                 0x04C
        !          1886:        access_mode     WO
        !          1887:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1888:        field   CLRSELTIMEO     0x80
        !          1889:        field   CLRATNO         0x40
        !          1890:        field   CLRSCSIRSTI     0x20
        !          1891:        field   CLRBUSFREE      0x08
        !          1892:        field   CLRSCSIPERR     0x04
        !          1893:        field   CLRSTRB2FAST    0x02
        !          1894:        field   CLRREQINIT      0x01
        !          1895: }
        !          1896:
        !          1897: /*
        !          1898:  * SCSI Status 2
        !          1899:  */
        !          1900: register SSTAT2 {
        !          1901:        address                 0x04d
        !          1902:        access_mode     RO
        !          1903:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1904:        field   BUSFREETIME     0xc0 {
        !          1905:                BUSFREE_LQO     0x40,
        !          1906:                BUSFREE_DFF0    0x80,
        !          1907:                BUSFREE_DFF1    0xC0
        !          1908:        }
        !          1909:        field   NONPACKREQ      0x20
        !          1910:        field   EXP_ACTIVE      0x10    /* SCSI Expander Active */
        !          1911:        field   BSYX            0x08    /* Busy Expander */
        !          1912:        field   WIDE_RES        0x04    /* Modes 0 and 1 only */
        !          1913:        field   SDONE           0x02    /* Modes 0 and 1 only */
        !          1914:        field   DMADONE         0x01    /* Modes 0 and 1 only */
        !          1915: }
        !          1916:
        !          1917: /*
        !          1918:  * Clear SCSI Interrupt 2
        !          1919:  */
        !          1920: register CLRSINT2 {
        !          1921:        address                 0x04D
        !          1922:        access_mode     WO
        !          1923:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1924:        field   CLRNONPACKREQ   0x20
        !          1925:        field   CLRWIDE_RES     0x04    /* Modes 0 and 1 only */
        !          1926:        field   CLRSDONE        0x02    /* Modes 0 and 1 only */
        !          1927:        field   CLRDMADONE      0x01    /* Modes 0 and 1 only */
        !          1928: }
        !          1929:
        !          1930: /*
        !          1931:  * SCSI Interrupt Mode 2
        !          1932:  */
        !          1933: register SIMODE2 {
        !          1934:        address                 0x04D
        !          1935:        access_mode     RW
        !          1936:        modes           M_CFG
        !          1937:        field   ENWIDE_RES      0x04
        !          1938:        field   ENSDONE         0x02
        !          1939:        field   ENDMADONE       0x01
        !          1940: }
        !          1941:
        !          1942: /*
        !          1943:  * Physical Error Diagnosis
        !          1944:  */
        !          1945: register PERRDIAG {
        !          1946:        address                 0x04E
        !          1947:        access_mode     RO
        !          1948:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1949:        field   HIZERO          0x80
        !          1950:        field   HIPERR          0x40
        !          1951:        field   PREVPHASE       0x20
        !          1952:        field   PARITYERR       0x10
        !          1953:        field   AIPERR          0x08
        !          1954:        field   CRCERR          0x04
        !          1955:        field   DGFORMERR       0x02
        !          1956:        field   DTERR           0x01
        !          1957: }
        !          1958:
        !          1959: /*
        !          1960:  * LQI Manager Current State
        !          1961:  */
        !          1962: register LQISTATE {
        !          1963:        address                 0x04E
        !          1964:        access_mode     RO
        !          1965:        modes           M_CFG
        !          1966: }
        !          1967:
        !          1968: /*
        !          1969:  * SCSI Offset Count
        !          1970:  */
        !          1971: register SOFFCNT {
        !          1972:        address                 0x04F
        !          1973:        access_mode     RO
        !          1974:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1975: }
        !          1976:
        !          1977: /*
        !          1978:  * LQO Manager Current State
        !          1979:  */
        !          1980: register LQOSTATE {
        !          1981:        address                 0x04F
        !          1982:        access_mode     RO
        !          1983:        modes           M_CFG
        !          1984: }
        !          1985:
        !          1986: /*
        !          1987:  * LQI Manager Status
        !          1988:  */
        !          1989: register LQISTAT0 {
        !          1990:        address                 0x050
        !          1991:        access_mode     RO
        !          1992:        modes           M_DFF0, M_DFF1, M_SCSI
        !          1993:        field   LQIATNQAS       0x20
        !          1994:        field   LQICRCT1        0x10
        !          1995:        field   LQICRCT2        0x08
        !          1996:        field   LQIBADLQT       0x04
        !          1997:        field   LQIATNLQ        0x02
        !          1998:        field   LQIATNCMD       0x01
        !          1999: }
        !          2000:
        !          2001: /*
        !          2002:  * Clear LQI Interrupts 0
        !          2003:  */
        !          2004: register CLRLQIINT0 {
        !          2005:        address                 0x050
        !          2006:        access_mode     WO
        !          2007:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2008:        field   CLRLQIATNQAS    0x20
        !          2009:        field   CLRLQICRCT1     0x10
        !          2010:        field   CLRLQICRCT2     0x08
        !          2011:        field   CLRLQIBADLQT    0x04
        !          2012:        field   CLRLQIATNLQ     0x02
        !          2013:        field   CLRLQIATNCMD    0x01
        !          2014: }
        !          2015:
        !          2016: /*
        !          2017:  * LQI Manager Interrupt Mode 0
        !          2018:  */
        !          2019: register LQIMODE0 {
        !          2020:        address                 0x050
        !          2021:        access_mode     RW
        !          2022:        modes           M_CFG
        !          2023:        field   ENLQIATNQASK    0x20
        !          2024:        field   ENLQICRCT1      0x10
        !          2025:        field   ENLQICRCT2      0x08
        !          2026:        field   ENLQIBADLQT     0x04
        !          2027:        field   ENLQIATNLQ      0x02
        !          2028:        field   ENLQIATNCMD     0x01
        !          2029: }
        !          2030:
        !          2031: /*
        !          2032:  * LQI Manager Status 1
        !          2033:  */
        !          2034: register LQISTAT1 {
        !          2035:        address                 0x051
        !          2036:        access_mode     RO
        !          2037:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2038:        field   LQIPHASE_LQ     0x80
        !          2039:        field   LQIPHASE_NLQ    0x40
        !          2040:        field   LQIABORT        0x20
        !          2041:        field   LQICRCI_LQ      0x10
        !          2042:        field   LQICRCI_NLQ     0x08
        !          2043:        field   LQIBADLQI       0x04
        !          2044:        field   LQIOVERI_LQ     0x02
        !          2045:        field   LQIOVERI_NLQ    0x01
        !          2046: }
        !          2047:
        !          2048: /*
        !          2049:  * Clear LQI Manager Interrupts1
        !          2050:  */
        !          2051: register CLRLQIINT1 {
        !          2052:        address                 0x051
        !          2053:        access_mode     WO
        !          2054:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2055:        field   CLRLQIPHASE_LQ  0x80
        !          2056:        field   CLRLQIPHASE_NLQ 0x40
        !          2057:        field   CLRLIQABORT     0x20
        !          2058:        field   CLRLQICRCI_LQ   0x10
        !          2059:        field   CLRLQICRCI_NLQ  0x08
        !          2060:        field   CLRLQIBADLQI    0x04
        !          2061:        field   CLRLQIOVERI_LQ  0x02
        !          2062:        field   CLRLQIOVERI_NLQ 0x01
        !          2063: }
        !          2064:
        !          2065: /*
        !          2066:  * LQI Manager Interrupt Mode 1
        !          2067:  */
        !          2068: register LQIMODE1 {
        !          2069:        address                 0x051
        !          2070:        access_mode     RW
        !          2071:        modes           M_CFG
        !          2072:        field   ENLQIPHASE_LQ   0x80    /* LQIPHASE1 */
        !          2073:        field   ENLQIPHASE_NLQ  0x40    /* LQIPHASE2 */
        !          2074:        field   ENLIQABORT      0x20
        !          2075:        field   ENLQICRCI_LQ    0x10    /* LQICRCI1 */
        !          2076:        field   ENLQICRCI_NLQ   0x08    /* LQICRCI2 */
        !          2077:        field   ENLQIBADLQI     0x04
        !          2078:        field   ENLQIOVERI_LQ   0x02    /* LQIOVERI1 */
        !          2079:        field   ENLQIOVERI_NLQ  0x01    /* LQIOVERI2 */
        !          2080: }
        !          2081:
        !          2082: /*
        !          2083:  * LQI Manager Status 2
        !          2084:  */
        !          2085: register LQISTAT2 {
        !          2086:        address                 0x052
        !          2087:        access_mode     RO
        !          2088:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2089:        field   PACKETIZED      0x80
        !          2090:        field   LQIPHASE_OUTPKT 0x40
        !          2091:        field   LQIWORKONLQ     0x20
        !          2092:        field   LQIWAITFIFO     0x10
        !          2093:        field   LQISTOPPKT      0x08
        !          2094:        field   LQISTOPLQ       0x04
        !          2095:        field   LQISTOPCMD      0x02
        !          2096:        field   LQIGSAVAIL      0x01
        !          2097: }
        !          2098:
        !          2099: /*
        !          2100:  * SCSI Status 3
        !          2101:  */
        !          2102: register SSTAT3 {
        !          2103:        address                 0x053
        !          2104:        access_mode     RO
        !          2105:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2106:        field   NTRAMPERR       0x02
        !          2107:        field   OSRAMPERR       0x01
        !          2108: }
        !          2109:
        !          2110: /*
        !          2111:  * Clear SCSI Status 3
        !          2112:  */
        !          2113: register CLRSINT3 {
        !          2114:        address                 0x053
        !          2115:        access_mode     WO
        !          2116:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2117:        field   CLRNTRAMPERR    0x02
        !          2118:        field   CLROSRAMPERR    0x01
        !          2119: }
        !          2120:
        !          2121: /*
        !          2122:  * SCSI Interrupt Mode 3
        !          2123:  */
        !          2124: register SIMODE3 {
        !          2125:        address                 0x053
        !          2126:        access_mode     RW
        !          2127:        modes           M_CFG
        !          2128:        field   ENNTRAMPERR     0x02
        !          2129:        field   ENOSRAMPERR     0x01
        !          2130: }
        !          2131:
        !          2132: /*
        !          2133:  * LQO Manager Status 0
        !          2134:  */
        !          2135: register LQOSTAT0 {
        !          2136:        address                 0x054
        !          2137:        access_mode     RO
        !          2138:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2139:        field   LQOTARGSCBPERR  0x10
        !          2140:        field   LQOSTOPT2       0x08
        !          2141:        field   LQOATNLQ        0x04
        !          2142:        field   LQOATNPKT       0x02
        !          2143:        field   LQOTCRC         0x01
        !          2144: }
        !          2145:
        !          2146: /*
        !          2147:  * Clear LQO Manager interrupt 0
        !          2148:  */
        !          2149: register CLRLQOINT0 {
        !          2150:        address                 0x054
        !          2151:        access_mode     WO
        !          2152:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2153:        field   CLRLQOTARGSCBPERR       0x10
        !          2154:        field   CLRLQOSTOPT2            0x08
        !          2155:        field   CLRLQOATNLQ             0x04
        !          2156:        field   CLRLQOATNPKT            0x02
        !          2157:        field   CLRLQOTCRC              0x01
        !          2158: }
        !          2159:
        !          2160: /*
        !          2161:  * LQO Manager Interrupt Mode 0
        !          2162:  */
        !          2163: register LQOMODE0 {
        !          2164:        address                 0x054
        !          2165:        access_mode     RW
        !          2166:        modes           M_CFG
        !          2167:        field   ENLQOTARGSCBPERR        0x10
        !          2168:        field   ENLQOSTOPT2             0x08
        !          2169:        field   ENLQOATNLQ              0x04
        !          2170:        field   ENLQOATNPKT             0x02
        !          2171:        field   ENLQOTCRC               0x01
        !          2172: }
        !          2173:
        !          2174: /*
        !          2175:  * LQO Manager Status 1
        !          2176:  */
        !          2177: register LQOSTAT1 {
        !          2178:        address                 0x055
        !          2179:        access_mode     RO
        !          2180:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2181:        field   LQOINITSCBPERR  0x10
        !          2182:        field   LQOSTOPI2       0x08
        !          2183:        field   LQOBADQAS       0x04
        !          2184:        field   LQOBUSFREE      0x02
        !          2185:        field   LQOPHACHGINPKT  0x01
        !          2186: }
        !          2187:
        !          2188: /*
        !          2189:  * Clear LOQ Interrupt 1
        !          2190:  */
        !          2191: register CLRLQOINT1 {
        !          2192:        address                 0x055
        !          2193:        access_mode     WO
        !          2194:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2195:        field   CLRLQOINITSCBPERR       0x10
        !          2196:        field   CLRLQOSTOPI2            0x08
        !          2197:        field   CLRLQOBADQAS            0x04
        !          2198:        field   CLRLQOBUSFREE           0x02
        !          2199:        field   CLRLQOPHACHGINPKT       0x01
        !          2200: }
        !          2201:
        !          2202: /*
        !          2203:  * LQO Manager Interrupt Mode 1
        !          2204:  */
        !          2205: register LQOMODE1 {
        !          2206:        address                 0x055
        !          2207:        access_mode     RW
        !          2208:        modes           M_CFG
        !          2209:        field   ENLQOINITSCBPERR        0x10
        !          2210:        field   ENLQOSTOPI2             0x08
        !          2211:        field   ENLQOBADQAS             0x04
        !          2212:        field   ENLQOBUSFREE            0x02
        !          2213:        field   ENLQOPHACHGINPKT        0x01
        !          2214: }
        !          2215:
        !          2216: /*
        !          2217:  * LQO Manager Status 2
        !          2218:  */
        !          2219: register LQOSTAT2 {
        !          2220:        address                 0x056
        !          2221:        access_mode     RO
        !          2222:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2223:        field   LQOPKT          0xE0
        !          2224:        field   LQOWAITFIFO     0x10
        !          2225:        field   LQOPHACHGOUTPKT 0x02    /* outside of packet boundaries. */
        !          2226:        field   LQOSTOP0        0x01    /* Stopped after sending all packets */
        !          2227: }
        !          2228:
        !          2229: /*
        !          2230:  * Output Synchronizer Space Count
        !          2231:  */
        !          2232: register OS_SPACE_CNT {
        !          2233:        address                 0x056
        !          2234:        access_mode     RO
        !          2235:        modes           M_CFG
        !          2236: }
        !          2237:
        !          2238: /*
        !          2239:  * SCSI Interrupt Mode 1
        !          2240:  * Setting any bit will enable the corresponding function
        !          2241:  * in SIMODE1 to interrupt via the IRQ pin.
        !          2242:  */
        !          2243: register SIMODE1 {
        !          2244:        address                 0x057
        !          2245:        access_mode     RW
        !          2246:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2247:        field   ENSELTIMO       0x80
        !          2248:        field   ENATNTARG       0x40
        !          2249:        field   ENSCSIRST       0x20
        !          2250:        field   ENPHASEMIS      0x10
        !          2251:        field   ENBUSFREE       0x08
        !          2252:        field   ENSCSIPERR      0x04
        !          2253:        field   ENSTRB2FAST     0x02
        !          2254:        field   ENREQINIT       0x01
        !          2255: }
        !          2256:
        !          2257: /*
        !          2258:  * Good Status FIFO
        !          2259:  */
        !          2260: register GSFIFO {
        !          2261:        address                 0x058
        !          2262:        access_mode     RO
        !          2263:        size            2
        !          2264:        modes           M_DFF0, M_DFF1, M_SCSI
        !          2265: }
        !          2266:
        !          2267: /*
        !          2268:  * Data FIFO SCSI Transfer Control
        !          2269:  */
        !          2270: register DFFSXFRCTL {
        !          2271:        address                 0x05A
        !          2272:        access_mode     RW
        !          2273:        modes           M_DFF0, M_DFF1
        !          2274:        field   DFFBITBUCKET    0x08
        !          2275:        field   CLRSHCNT        0x04
        !          2276:        field   CLRCHN          0x02
        !          2277:        field   RSTCHN          0x01
        !          2278: }
        !          2279:
        !          2280: /*
        !          2281:  * Next SCSI Control Block
        !          2282:  */
        !          2283: register NEXTSCB {
        !          2284:        address                 0x05A
        !          2285:        access_mode     RW
        !          2286:        size            2
        !          2287:        modes           M_SCSI
        !          2288: }
        !          2289:
        !          2290: /* Rev B only. */
        !          2291: register LQOSCSCTL {
        !          2292:        address                 0x05A
        !          2293:        access_mode     RW
        !          2294:        size            1
        !          2295:        modes           M_CFG
        !          2296:        field           LQOH2A_VERSION  0x80
        !          2297:        field           LQONOCHKOVER    0x01
        !          2298: }
        !          2299:
        !          2300: /*
        !          2301:  * SEQ Interrupts
        !          2302:  */
        !          2303: register SEQINTSRC {
        !          2304:        address                 0x05B
        !          2305:        access_mode     RO
        !          2306:        modes           M_DFF0, M_DFF1
        !          2307:        field   CTXTDONE        0x40
        !          2308:        field   SAVEPTRS        0x20
        !          2309:        field   CFG4DATA        0x10
        !          2310:        field   CFG4ISTAT       0x08
        !          2311:        field   CFG4TSTAT       0x04
        !          2312:        field   CFG4ICMD        0x02
        !          2313:        field   CFG4TCMD        0x01
        !          2314: }
        !          2315:
        !          2316: /*
        !          2317:  * Clear Arp Interrupts
        !          2318:  */
        !          2319: register CLRSEQINTSRC {
        !          2320:        address                 0x05B
        !          2321:        access_mode     WO
        !          2322:        modes           M_DFF0, M_DFF1
        !          2323:        field   CLRCTXTDONE     0x40
        !          2324:        field   CLRSAVEPTRS     0x20
        !          2325:        field   CLRCFG4DATA     0x10
        !          2326:        field   CLRCFG4ISTAT    0x08
        !          2327:        field   CLRCFG4TSTAT    0x04
        !          2328:        field   CLRCFG4ICMD     0x02
        !          2329:        field   CLRCFG4TCMD     0x01
        !          2330: }
        !          2331:
        !          2332: /*
        !          2333:  * SEQ Interrupt Enabled (Shared)
        !          2334:  */
        !          2335: register SEQIMODE {
        !          2336:        address                 0x05C
        !          2337:        access_mode     RW
        !          2338:        modes           M_DFF0, M_DFF1
        !          2339:        field   ENCTXTDONE      0x40
        !          2340:        field   ENSAVEPTRS      0x20
        !          2341:        field   ENCFG4DATA      0x10
        !          2342:        field   ENCFG4ISTAT     0x08
        !          2343:        field   ENCFG4TSTAT     0x04
        !          2344:        field   ENCFG4ICMD      0x02
        !          2345:        field   ENCFG4TCMD      0x01
        !          2346: }
        !          2347:
        !          2348: /*
        !          2349:  * Current SCSI Control Block
        !          2350:  */
        !          2351: register CURRSCB {
        !          2352:        address                 0x05C
        !          2353:        access_mode     RW
        !          2354:        size            2
        !          2355:        modes           M_SCSI
        !          2356: }
        !          2357:
        !          2358: /*
        !          2359:  * Data FIFO Status
        !          2360:  */
        !          2361: register MDFFSTAT {
        !          2362:        address                 0x05D
        !          2363:        access_mode     RO
        !          2364:        modes           M_DFF0, M_DFF1
        !          2365:        field   SHCNTNEGATIVE   0x40 /* Rev B or higher */
        !          2366:        field   SHCNTMINUS1     0x20 /* Rev B or higher */
        !          2367:        field   LASTSDONE       0x10
        !          2368:        field   SHVALID         0x08
        !          2369:        field   DLZERO          0x04 /* FIFO data ends on packet boundary. */
        !          2370:        field   DATAINFIFO      0x02
        !          2371:        field   FIFOFREE        0x01
        !          2372: }
        !          2373:
        !          2374: /*
        !          2375:  * CRC Control
        !          2376:  */
        !          2377: register CRCCONTROL {
        !          2378:        address                 0x05d
        !          2379:        access_mode     RW
        !          2380:        modes           M_CFG
        !          2381:        field   CRCVALCHKEN             0x40
        !          2382: }
        !          2383:
        !          2384: /*
        !          2385:  * SCSI Test Control
        !          2386:  */
        !          2387: register SCSITEST {
        !          2388:        address                 0x05E
        !          2389:        access_mode     RW
        !          2390:        modes           M_CFG
        !          2391:        field   CNTRTEST        0x08
        !          2392:        field   SEL_TXPLL_DEBUG 0x04
        !          2393: }
        !          2394:
        !          2395: /*
        !          2396:  * Data FIFO Queue Tag
        !          2397:  */
        !          2398: register DFFTAG {
        !          2399:        address                 0x05E
        !          2400:        access_mode     RW
        !          2401:        size            2
        !          2402:        modes           M_DFF0, M_DFF1
        !          2403: }
        !          2404:
        !          2405: /*
        !          2406:  * Last SCSI Control Block
        !          2407:  */
        !          2408: register LASTSCB {
        !          2409:        address                 0x05E
        !          2410:        access_mode     RW
        !          2411:        size            2
        !          2412:        modes           M_SCSI
        !          2413: }
        !          2414:
        !          2415: /*
        !          2416:  * SCSI I/O Cell Power-down Control
        !          2417:  */
        !          2418: register IOPDNCTL {
        !          2419:        address                 0x05F
        !          2420:        access_mode     RW
        !          2421:        modes           M_CFG
        !          2422:        field   DISABLE_OE      0x80
        !          2423:        field   PDN_IDIST       0x04
        !          2424:        field   PDN_DIFFSENSE   0x01
        !          2425: }
        !          2426:
        !          2427: /*
        !          2428:  * Shadow Host Address.
        !          2429:  */
        !          2430: register SHADDR {
        !          2431:        address                 0x060
        !          2432:        access_mode     RO
        !          2433:        size            8
        !          2434:        modes           M_DFF0, M_DFF1
        !          2435: }
        !          2436:
        !          2437: /*
        !          2438:  * Data Group CRC Interval.
        !          2439:  */
        !          2440: register DGRPCRCI {
        !          2441:        address                 0x060
        !          2442:        access_mode     RW
        !          2443:        size            2
        !          2444:        modes           M_CFG
        !          2445: }
        !          2446:
        !          2447: /*
        !          2448:  * Data Transfer Negotiation Address
        !          2449:  */
        !          2450: register NEGOADDR {
        !          2451:        address                 0x060
        !          2452:        access_mode     RW
        !          2453:        modes           M_SCSI
        !          2454: }
        !          2455:
        !          2456: /*
        !          2457:  * Data Transfer Negotiation Data - Period Byte
        !          2458:  */
        !          2459: register NEGPERIOD {
        !          2460:        address                 0x061
        !          2461:        access_mode     RW
        !          2462:        modes           M_SCSI
        !          2463: }
        !          2464:
        !          2465: /*
        !          2466:  * Packetized CRC Interval
        !          2467:  */
        !          2468: register PACKCRCI {
        !          2469:        address                 0x062
        !          2470:        access_mode     RW
        !          2471:        size            2
        !          2472:        modes           M_CFG
        !          2473: }
        !          2474:
        !          2475: /*
        !          2476:  * Data Transfer Negotiation Data - Offset Byte
        !          2477:  */
        !          2478: register NEGOFFSET {
        !          2479:        address                 0x062
        !          2480:        access_mode     RW
        !          2481:        modes           M_SCSI
        !          2482: }
        !          2483:
        !          2484: /*
        !          2485:  * Data Transfer Negotiation Data - PPR Options
        !          2486:  */
        !          2487: register NEGPPROPTS {
        !          2488:        address                 0x063
        !          2489:        access_mode     RW
        !          2490:        modes           M_SCSI
        !          2491:        field   PPROPT_PACE     0x08
        !          2492:        field   PPROPT_QAS      0x04
        !          2493:        field   PPROPT_DT       0x02
        !          2494:        field   PPROPT_IUT      0x01
        !          2495: }
        !          2496:
        !          2497: /*
        !          2498:  * Data Transfer Negotiation Data -  Connection Options
        !          2499:  */
        !          2500: register NEGCONOPTS {
        !          2501:        address                 0x064
        !          2502:        access_mode     RW
        !          2503:        modes           M_SCSI
        !          2504:        field   ENSNAPSHOT      0x40
        !          2505:        field   RTI_WRTDIS      0x20
        !          2506:        field   RTI_OVRDTRN     0x10
        !          2507:        field   ENSLOWCRC       0x08
        !          2508:        field   ENAUTOATNI      0x04
        !          2509:        field   ENAUTOATNO      0x02
        !          2510:        field   WIDEXFER        0x01
        !          2511: }
        !          2512:
        !          2513: /*
        !          2514:  * Negotiation Table Annex Column Index.
        !          2515:  */
        !          2516: register ANNEXCOL {
        !          2517:        address                 0x065
        !          2518:        access_mode     RW
        !          2519:        modes           M_SCSI
        !          2520: }
        !          2521:
        !          2522: register SCSCHKN {
        !          2523:        address                 0x066
        !          2524:        access_mode     RW
        !          2525:        modes           M_CFG
        !          2526:        field   STSELSKIDDIS    0x40
        !          2527:        field   CURRFIFODEF     0x20
        !          2528:        field   WIDERESEN       0x10
        !          2529:        field   SDONEMSKDIS     0x08
        !          2530:        field   DFFACTCLR       0x04
        !          2531:        field   SHVALIDSTDIS    0x02
        !          2532:        field   LSTSGCLRDIS     0x01
        !          2533: }
        !          2534:
        !          2535: const AHD_ANNEXCOL_PER_DEV0    4
        !          2536: const AHD_NUM_PER_DEV_ANNEXCOLS        4
        !          2537: const AHD_ANNEXCOL_PRECOMP_SLEW        4
        !          2538: const  AHD_PRECOMP_MASK        0x07
        !          2539: const  AHD_PRECOMP_SHIFT       0
        !          2540: const  AHD_PRECOMP_CUTBACK_17  0x04
        !          2541: const  AHD_PRECOMP_CUTBACK_29  0x06
        !          2542: const  AHD_PRECOMP_CUTBACK_37  0x07
        !          2543: const  AHD_SLEWRATE_MASK       0x78
        !          2544: const  AHD_SLEWRATE_SHIFT      3
        !          2545: /*
        !          2546:  * Rev A has only a single bit (high bit of field) of slew adjustment.
        !          2547:  * Rev B has 4 bits.  The current default happens to be the same for both.
        !          2548:  */
        !          2549: const  AHD_SLEWRATE_DEF_REVA   0x08
        !          2550: const  AHD_SLEWRATE_DEF_REVB   0x08
        !          2551:
        !          2552: /* Rev A does not have any amplitude setting. */
        !          2553: const AHD_ANNEXCOL_AMPLITUDE   6
        !          2554: const  AHD_AMPLITUDE_MASK      0x7
        !          2555: const  AHD_AMPLITUDE_SHIFT     0
        !          2556: const  AHD_AMPLITUDE_DEF       0x7
        !          2557:
        !          2558: /*
        !          2559:  * Negotiation Table Annex Data Port.
        !          2560:  */
        !          2561: register ANNEXDAT {
        !          2562:        address                 0x066
        !          2563:        access_mode     RW
        !          2564:        modes           M_SCSI
        !          2565: }
        !          2566:
        !          2567: /*
        !          2568:  * Initiator's Own Id.
        !          2569:  * The SCSI ID to use for Selection Out and seen during a reselection..
        !          2570:  */
        !          2571: register IOWNID {
        !          2572:        address                 0x067
        !          2573:        access_mode     RW
        !          2574:        modes           M_SCSI
        !          2575: }
        !          2576:
        !          2577: /*
        !          2578:  * 960MHz Phase-Locked Loop Control 0
        !          2579:  */
        !          2580: register PLL960CTL0 {
        !          2581:        address                 0x068
        !          2582:        access_mode     RW
        !          2583:        modes           M_CFG
        !          2584:        field   PLL_VCOSEL      0x80
        !          2585:        field   PLL_PWDN        0x40
        !          2586:        field   PLL_NS          0x30
        !          2587:        field   PLL_ENLUD       0x08
        !          2588:        field   PLL_ENLPF       0x04
        !          2589:        field   PLL_DLPF        0x02
        !          2590:        field   PLL_ENFBM       0x01
        !          2591: }
        !          2592:
        !          2593: /*
        !          2594:  * Target Own Id
        !          2595:  */
        !          2596: register TOWNID {
        !          2597:        address                 0x069
        !          2598:        access_mode     RW
        !          2599:        modes           M_SCSI
        !          2600: }
        !          2601:
        !          2602: /*
        !          2603:  * 960MHz Phase-Locked Loop Control 1
        !          2604:  */
        !          2605: register PLL960CTL1 {
        !          2606:        address                 0x069
        !          2607:        access_mode     RW
        !          2608:        modes           M_CFG
        !          2609:        field   PLL_CNTEN       0x80
        !          2610:        field   PLL_CNTCLR      0x40
        !          2611:        field   PLL_RST         0x01
        !          2612: }
        !          2613:
        !          2614: /*
        !          2615:  * Expander Signature
        !          2616:  */
        !          2617: register XSIG {
        !          2618:        address                 0x06A
        !          2619:        access_mode     RW
        !          2620:        modes           M_SCSI
        !          2621: }
        !          2622:
        !          2623: /*
        !          2624:  * Shadow Byte Count
        !          2625:  */
        !          2626: register SHCNT {
        !          2627:        address                 0x068
        !          2628:        access_mode     RW
        !          2629:        size            3
        !          2630:        modes           M_DFF0, M_DFF1
        !          2631: }
        !          2632:
        !          2633: /*
        !          2634:  * Selection Out ID
        !          2635:  */
        !          2636: register SELOID {
        !          2637:        address                 0x06B
        !          2638:        access_mode     RW
        !          2639:        modes           M_SCSI
        !          2640: }
        !          2641:
        !          2642: /*
        !          2643:  * 960-MHz Phase-Locked Loop Test Count
        !          2644:  */
        !          2645: register PLL960CNT0 {
        !          2646:        address                 0x06A
        !          2647:        access_mode     RO
        !          2648:        size            2
        !          2649:        modes           M_CFG
        !          2650: }
        !          2651:
        !          2652: /*
        !          2653:  * 400-MHz Phase-Locked Loop Control 0
        !          2654:  */
        !          2655: register PLL400CTL0 {
        !          2656:        address                 0x06C
        !          2657:        access_mode     RW
        !          2658:        modes           M_CFG
        !          2659:        field   PLL_VCOSEL      0x80
        !          2660:        field   PLL_PWDN        0x40
        !          2661:        field   PLL_NS          0x30
        !          2662:        field   PLL_ENLUD       0x08
        !          2663:        field   PLL_ENLPF       0x04
        !          2664:        field   PLL_DLPF        0x02
        !          2665:        field   PLL_ENFBM       0x01
        !          2666: }
        !          2667:
        !          2668: /*
        !          2669:  * Arbitration Fairness
        !          2670:  */
        !          2671: register FAIRNESS {
        !          2672:        address                 0x06C
        !          2673:        access_mode     RW
        !          2674:        size            2
        !          2675:        modes           M_SCSI
        !          2676: }
        !          2677:
        !          2678: /*
        !          2679:  * 400-MHz Phase-Locked Loop Control 1
        !          2680:  */
        !          2681: register PLL400CTL1 {
        !          2682:        address                 0x06D
        !          2683:        access_mode     RW
        !          2684:        modes           M_CFG
        !          2685:        field   PLL_CNTEN       0x80
        !          2686:        field   PLL_CNTCLR      0x40
        !          2687:        field   PLL_RST         0x01
        !          2688: }
        !          2689:
        !          2690: /*
        !          2691:  * Arbitration Unfairness
        !          2692:  */
        !          2693: register UNFAIRNESS {
        !          2694:        address                 0x06E
        !          2695:        access_mode     RW
        !          2696:        size            2
        !          2697:        modes           M_SCSI
        !          2698: }
        !          2699:
        !          2700: /*
        !          2701:  * 400-MHz Phase-Locked Loop Test Count
        !          2702:  */
        !          2703: register PLL400CNT0 {
        !          2704:        address                 0x06E
        !          2705:        access_mode     RO
        !          2706:        size            2
        !          2707:        modes           M_CFG
        !          2708: }
        !          2709:
        !          2710: /*
        !          2711:  * SCB Page Pointer
        !          2712:  */
        !          2713: register SCBPTR {
        !          2714:        address                 0x0A8
        !          2715:        access_mode     RW
        !          2716:        size            2
        !          2717:        modes           M_DFF0, M_DFF1, M_CCHAN, M_SCSI
        !          2718: }
        !          2719:
        !          2720: /*
        !          2721:  * CMC SCB Array Count
        !          2722:  * Number of bytes to transfer between CMC SCB memory and SCBRAM.
        !          2723:  * Transfers must be 8byte aligned and sized.
        !          2724:  */
        !          2725: register CCSCBACNT {
        !          2726:        address                 0x0AB
        !          2727:        access_mode     RW
        !          2728:        modes           M_CCHAN
        !          2729: }
        !          2730:
        !          2731: /*
        !          2732:  * SCB Autopointer
        !          2733:  * SCB-Next Address Snooping logic.  When an SCB is transferred to
        !          2734:  * the card, the next SCB address to be used by the CMC array can
        !          2735:  * be autoloaded from that transfer.
        !          2736:  */
        !          2737: register SCBAUTOPTR {
        !          2738:        address                 0x0AB
        !          2739:        access_mode     RW
        !          2740:        modes           M_CFG
        !          2741:        field   AUSCBPTR_EN     0x80
        !          2742:        field   SCBPTR_ADDR     0x38
        !          2743:        field   SCBPTR_OFF      0x07
        !          2744: }
        !          2745:
        !          2746: /*
        !          2747:  * CMC SG Ram Address Pointer
        !          2748:  */
        !          2749: register CCSGADDR {
        !          2750:        address                 0x0AC
        !          2751:        access_mode     RW
        !          2752:        modes           M_DFF0, M_DFF1
        !          2753: }
        !          2754:
        !          2755: /*
        !          2756:  * CMC SCB RAM Address Pointer
        !          2757:  */
        !          2758: register CCSCBADDR {
        !          2759:        address                 0x0AC
        !          2760:        access_mode     RW
        !          2761:        modes           M_CCHAN
        !          2762: }
        !          2763:
        !          2764: /*
        !          2765:  * CMC SCB Ram Back-up Address Pointer
        !          2766:  * Indicates the true stop location of transfers halted prior
        !          2767:  * to SCBHCNT going to 0.
        !          2768:  */
        !          2769: register CCSCBADR_BK {
        !          2770:        address                 0x0AC
        !          2771:        access_mode     RO
        !          2772:        modes           M_CFG
        !          2773: }
        !          2774:
        !          2775: /*
        !          2776:  * CMC SG Control
        !          2777:  */
        !          2778: register CCSGCTL {
        !          2779:        address                 0x0AD
        !          2780:        access_mode     RW
        !          2781:        modes           M_DFF0, M_DFF1
        !          2782:        field   CCSGDONE        0x80
        !          2783:        field   SG_CACHE_AVAIL  0x10
        !          2784:        field   CCSGENACK       0x08
        !          2785:        mask    CCSGEN          0x0C
        !          2786:        field   SG_FETCH_REQ    0x02
        !          2787:        field   CCSGRESET       0x01
        !          2788: }
        !          2789:
        !          2790: /*
        !          2791:  * CMD SCB Control
        !          2792:  */
        !          2793: register CCSCBCTL {
        !          2794:        address                 0x0AD
        !          2795:        access_mode     RW
        !          2796:        modes           M_CCHAN
        !          2797:        field   CCSCBDONE       0x80
        !          2798:        field   ARRDONE         0x40
        !          2799:        field   CCARREN         0x10
        !          2800:        field   CCSCBEN         0x08
        !          2801:        field   CCSCBDIR        0x04
        !          2802:        field   CCSCBRESET      0x01
        !          2803: }
        !          2804:
        !          2805: /*
        !          2806:  * CMC Ram BIST
        !          2807:  */
        !          2808: register CMC_RAMBIST {
        !          2809:        address                 0x0AD
        !          2810:        access_mode     RW
        !          2811:        modes           M_CFG
        !          2812:        field   SG_ELEMENT_SIZE         0x80
        !          2813:        field   SCBRAMBIST_FAIL         0x40
        !          2814:        field   SG_BIST_FAIL            0x20
        !          2815:        field   SG_BIST_EN              0x10
        !          2816:        field   CMC_BUFFER_BIST_FAIL    0x02
        !          2817:        field   CMC_BUFFER_BIST_EN      0x01
        !          2818: }
        !          2819:
        !          2820: /*
        !          2821:  * CMC SG RAM Data Port
        !          2822:  */
        !          2823: register CCSGRAM {
        !          2824:        address                 0x0B0
        !          2825:        access_mode     RW
        !          2826:        modes           M_DFF0, M_DFF1
        !          2827: }
        !          2828:
        !          2829: /*
        !          2830:  * CMC SCB RAM Data Port
        !          2831:  */
        !          2832: register CCSCBRAM {
        !          2833:        address                 0x0B0
        !          2834:        access_mode     RW
        !          2835:        modes           M_CCHAN
        !          2836: }
        !          2837:
        !          2838: /*
        !          2839:  * Flex DMA Address.
        !          2840:  */
        !          2841: register FLEXADR {
        !          2842:        address                 0x0B0
        !          2843:        access_mode     RW
        !          2844:        size            3
        !          2845:        modes           M_SCSI
        !          2846: }
        !          2847:
        !          2848: /*
        !          2849:  * Flex DMA Byte Count
        !          2850:  */
        !          2851: register FLEXCNT {
        !          2852:        address                 0x0B3
        !          2853:        access_mode     RW
        !          2854:        size            2
        !          2855:        modes           M_SCSI
        !          2856: }
        !          2857:
        !          2858: /*
        !          2859:  * Flex DMA Status
        !          2860:  */
        !          2861: register FLEXDMASTAT {
        !          2862:        address                 0x0B5
        !          2863:        access_mode     RW
        !          2864:        modes           M_SCSI
        !          2865:        field   FLEXDMAERR      0x02
        !          2866:        field   FLEXDMADONE     0x01
        !          2867: }
        !          2868:
        !          2869: /*
        !          2870:  * Flex DMA Data Port
        !          2871:  */
        !          2872: register FLEXDATA {
        !          2873:        address                 0x0B6
        !          2874:        access_mode     RW
        !          2875:        modes           M_SCSI
        !          2876: }
        !          2877:
        !          2878: /*
        !          2879:  * Board Data
        !          2880:  */
        !          2881: register BRDDAT {
        !          2882:        address                 0x0B8
        !          2883:        access_mode     RW
        !          2884:        modes           M_SCSI
        !          2885: }
        !          2886:
        !          2887: /*
        !          2888:  * Board Control
        !          2889:  */
        !          2890: register BRDCTL {
        !          2891:        address                 0x0B9
        !          2892:        access_mode     RW
        !          2893:        modes           M_SCSI
        !          2894:        field   FLXARBACK       0x80
        !          2895:        field   FLXARBREQ       0x40
        !          2896:        field   BRDADDR         0x38
        !          2897:        field   BRDEN           0x04
        !          2898:        field   BRDRW           0x02
        !          2899:        field   BRDSTB          0x01
        !          2900: }
        !          2901:
        !          2902: /*
        !          2903:  * Serial EEPROM Address
        !          2904:  */
        !          2905: register SEEADR {
        !          2906:        address                 0x0BA
        !          2907:        access_mode     RW
        !          2908:        modes           M_SCSI
        !          2909: }
        !          2910:
        !          2911: /*
        !          2912:  * Serial EEPROM Data
        !          2913:  */
        !          2914: register SEEDAT {
        !          2915:        address                 0x0BC
        !          2916:        access_mode     RW
        !          2917:        size            2
        !          2918:        modes           M_SCSI
        !          2919: }
        !          2920:
        !          2921: /*
        !          2922:  * Serial EEPROM Status
        !          2923:  */
        !          2924: register SEESTAT {
        !          2925:        address                 0x0BE
        !          2926:        access_mode     RO
        !          2927:        modes           M_SCSI
        !          2928:        field   INIT_DONE       0x80
        !          2929:        field   SEEOPCODE       0x70
        !          2930:        field   LDALTID_L       0x08
        !          2931:        field   SEEARBACK       0x04
        !          2932:        field   SEEBUSY         0x02
        !          2933:        field   SEESTART        0x01
        !          2934: }
        !          2935:
        !          2936: /*
        !          2937:  * Serial EEPROM Control
        !          2938:  */
        !          2939: register SEECTL {
        !          2940:        address                 0x0BE
        !          2941:        access_mode     RW
        !          2942:        modes           M_SCSI
        !          2943:        field   SEEOPCODE       0x70 {
        !          2944:                SEEOP_ERASE     0x70,
        !          2945:                SEEOP_READ      0x60,
        !          2946:                SEEOP_WRITE     0x50,
        !          2947:        /*
        !          2948:         * The following four commands use special
        !          2949:         * addresses for differentiation.
        !          2950:         */
        !          2951:                SEEOP_ERAL      0x40
        !          2952:        }
        !          2953:        mask    SEEOP_EWEN      0x40
        !          2954:        mask    SEEOP_WALL      0x40
        !          2955:        mask    SEEOP_EWDS      0x40
        !          2956:        field   SEERST          0x02
        !          2957:        field   SEESTART        0x01
        !          2958: }
        !          2959:
        !          2960: const SEEOP_ERAL_ADDR  0x80
        !          2961: const SEEOP_EWEN_ADDR  0xC0
        !          2962: const SEEOP_WRAL_ADDR  0x40
        !          2963: const SEEOP_EWDS_ADDR  0x00
        !          2964:
        !          2965: /*
        !          2966:  * SCB Counter
        !          2967:  */
        !          2968: register SCBCNT {
        !          2969:        address                 0x0BF
        !          2970:        access_mode     RW
        !          2971:        modes           M_SCSI
        !          2972: }
        !          2973:
        !          2974: /*
        !          2975:  * Data FIFO Write Address
        !          2976:  * Pointer to the next QWD location to be written to the data FIFO.
        !          2977:  */
        !          2978: register DFWADDR {
        !          2979:        address                 0x0C0
        !          2980:        access_mode     RW
        !          2981:        size            2
        !          2982:        modes           M_DFF0, M_DFF1
        !          2983: }
        !          2984:
        !          2985: /*
        !          2986:  * DSP Filter Control
        !          2987:  */
        !          2988: register DSPFLTRCTL {
        !          2989:        address                 0x0C0
        !          2990:        access_mode     RW
        !          2991:        modes           M_CFG
        !          2992:        field   FLTRDISABLE     0x20
        !          2993:        field   EDGESENSE       0x10
        !          2994:        field   DSPFCNTSEL      0x0F
        !          2995: }
        !          2996:
        !          2997: /*
        !          2998:  * DSP Data Channel Control
        !          2999:  */
        !          3000: register DSPDATACTL {
        !          3001:        address                 0x0C1
        !          3002:        access_mode     RW
        !          3003:        modes           M_CFG
        !          3004:        field   BYPASSENAB      0x80
        !          3005:        field   DESQDIS         0x10
        !          3006:        field   RCVROFFSTDIS    0x04
        !          3007:        field   XMITOFFSTDIS    0x02
        !          3008: }
        !          3009:
        !          3010: /*
        !          3011:  * Data FIFO Read Address
        !          3012:  * Pointer to the next QWD location to be read from the data FIFO.
        !          3013:  */
        !          3014: register DFRADDR {
        !          3015:        address                 0x0C2
        !          3016:        access_mode     RW
        !          3017:        size            2
        !          3018:        modes           M_DFF0, M_DFF1
        !          3019: }
        !          3020:
        !          3021: /*
        !          3022:  * DSP REQ Control
        !          3023:  */
        !          3024: register DSPREQCTL {
        !          3025:        address                 0x0C2
        !          3026:        access_mode     RW
        !          3027:        modes           M_CFG
        !          3028:        field   MANREQCTL       0xC0
        !          3029:        field   MANREQDLY       0x3F
        !          3030: }
        !          3031:
        !          3032: /*
        !          3033:  * DSP ACK Control
        !          3034:  */
        !          3035: register DSPACKCTL {
        !          3036:        address                 0x0C3
        !          3037:        access_mode     RW
        !          3038:        modes           M_CFG
        !          3039:        field   MANACKCTL       0xC0
        !          3040:        field   MANACKDLY       0x3F
        !          3041: }
        !          3042:
        !          3043: /*
        !          3044:  * Data FIFO Data
        !          3045:  * Read/Write byte port into the data FIFO.  The read and write
        !          3046:  * FIFO pointers increment with each read and write respectively
        !          3047:  * to this port.
        !          3048:  */
        !          3049: register DFDAT {
        !          3050:        address                 0x0C4
        !          3051:        access_mode     RW
        !          3052:        modes           M_DFF0, M_DFF1
        !          3053: }
        !          3054:
        !          3055: /*
        !          3056:  * DSP Channel Select
        !          3057:  */
        !          3058: register DSPSELECT {
        !          3059:        address                 0x0C4
        !          3060:        access_mode     RW
        !          3061:        modes           M_CFG
        !          3062:        field   AUTOINCEN       0x80
        !          3063:        field   DSPSEL          0x1F
        !          3064: }
        !          3065:
        !          3066: const NUMDSPS 0x14
        !          3067:
        !          3068: /*
        !          3069:  * Write Bias Control
        !          3070:  */
        !          3071: register WRTBIASCTL {
        !          3072:        address                 0x0C5
        !          3073:        access_mode     WO
        !          3074:        modes           M_CFG
        !          3075:        field   AUTOXBCDIS      0x80
        !          3076:        field   XMITMANVAL      0x3F
        !          3077: }
        !          3078:
        !          3079: /*
        !          3080:  * Currently the WRTBIASCTL is the same as the default.
        !          3081:  */
        !          3082: const WRTBIASCTL_HP_DEFAULT 0x0
        !          3083:
        !          3084: /*
        !          3085:  * Receiver Bias Control
        !          3086:  */
        !          3087: register RCVRBIOSCTL {
        !          3088:        address                 0x0C6
        !          3089:        access_mode     WO
        !          3090:        modes           M_CFG
        !          3091:        field   AUTORBCDIS      0x80
        !          3092:        field   RCVRMANVAL      0x3F
        !          3093: }
        !          3094:
        !          3095: /*
        !          3096:  * Write Bias Calculator
        !          3097:  */
        !          3098: register WRTBIASCALC {
        !          3099:        address                 0x0C7
        !          3100:        access_mode     RO
        !          3101:        modes           M_CFG
        !          3102: }
        !          3103:
        !          3104: /*
        !          3105:  * Data FIFO Pointers
        !          3106:  * Contains the byte offset from DFWADDR and DWRADDR to the current
        !          3107:  * FIFO write/read locations.
        !          3108:  */
        !          3109: register DFPTRS {
        !          3110:        address                 0x0C8
        !          3111:        access_mode     RW
        !          3112:        modes           M_DFF0, M_DFF1
        !          3113: }
        !          3114:
        !          3115: /*
        !          3116:  * Receiver Bias Calculator
        !          3117:  */
        !          3118: register RCVRBIASCALC {
        !          3119:        address                 0x0C8
        !          3120:        access_mode     RO
        !          3121:        modes           M_CFG
        !          3122: }
        !          3123:
        !          3124: /*
        !          3125:  * Data FIFO Backup Read Pointer
        !          3126:  * Contains the data FIFO address to be restored if the last
        !          3127:  * data accessed from the data FIFO was not transferred successfully.
        !          3128:  */
        !          3129: register DFBKPTR {
        !          3130:        address                 0x0C9
        !          3131:        access_mode     RW
        !          3132:        size            2
        !          3133:        modes           M_DFF0, M_DFF1
        !          3134: }
        !          3135:
        !          3136: /*
        !          3137:  * Skew Calculator
        !          3138:  */
        !          3139: register SKEWCALC {
        !          3140:        address                 0x0C9
        !          3141:        access_mode     RO
        !          3142:        modes           M_CFG
        !          3143: }
        !          3144:
        !          3145: /*
        !          3146:  * Data FIFO Debug Control
        !          3147:  */
        !          3148: register DFDBCTL {
        !          3149:        address                         0x0CB
        !          3150:        access_mode     RW
        !          3151:        modes           M_DFF0, M_DFF1
        !          3152:        field   DFF_CIO_WR_RDY          0x20
        !          3153:        field   DFF_CIO_RD_RDY          0x10
        !          3154:        field   DFF_DIR_ERR             0x08
        !          3155:        field   DFF_RAMBIST_FAIL        0x04
        !          3156:        field   DFF_RAMBIST_DONE        0x02
        !          3157:        field   DFF_RAMBIST_EN          0x01
        !          3158: }
        !          3159:
        !          3160: /*
        !          3161:  * Data FIFO Space Count
        !          3162:  * Number of FIFO locations that are free.
        !          3163:  */
        !          3164: register DFSCNT {
        !          3165:        address                 0x0CC
        !          3166:        access_mode     RO
        !          3167:        size            2
        !          3168:        modes           M_DFF0, M_DFF1
        !          3169: }
        !          3170:
        !          3171: /*
        !          3172:  * Data FIFO Byte Count
        !          3173:  * Number of filled FIFO locations.
        !          3174:  */
        !          3175: register DFBCNT {
        !          3176:        address                 0x0CE
        !          3177:        access_mode     RO
        !          3178:        size            2
        !          3179:        modes           M_DFF0, M_DFF1
        !          3180: }
        !          3181:
        !          3182: /*
        !          3183:  * Sequencer Program Overlay Address.
        !          3184:  * Low address must be written prior to high address.
        !          3185:  */
        !          3186: register OVLYADDR {
        !          3187:        address                 0x0D4
        !          3188:        modes           M_SCSI
        !          3189:        size            2
        !          3190:        access_mode     RW
        !          3191: }
        !          3192:
        !          3193: /*
        !          3194:  * Sequencer Control 0
        !          3195:  * Error detection mode, speed configuration,
        !          3196:  * single step, breakpoints and program load.
        !          3197:  */
        !          3198: register SEQCTL0 {
        !          3199:        address                 0x0D6
        !          3200:        access_mode RW
        !          3201:        field   PERRORDIS       0x80
        !          3202:        field   PAUSEDIS        0x40
        !          3203:        field   FAILDIS         0x20
        !          3204:        field   FASTMODE        0x10
        !          3205:        field   BRKADRINTEN     0x08
        !          3206:        field   STEP            0x04
        !          3207:        field   SEQRESET        0x02
        !          3208:        field   LOADRAM         0x01
        !          3209: }
        !          3210:
        !          3211: /*
        !          3212:  * Sequencer Control 1
        !          3213:  * Instruction RAM Diagnostics
        !          3214:  */
        !          3215: register SEQCTL1 {
        !          3216:        address                 0x0D7
        !          3217:        access_mode RW
        !          3218:        field   OVRLAY_DATA_CHK 0x08
        !          3219:        field   RAMBIST_DONE    0x04
        !          3220:        field   RAMBIST_FAIL    0x02
        !          3221:        field   RAMBIST_EN      0x01
        !          3222: }
        !          3223:
        !          3224: /*
        !          3225:  * Sequencer Flags
        !          3226:  * Zero and Carry state of the ALU.
        !          3227:  */
        !          3228: register FLAGS {
        !          3229:        address                 0x0D8
        !          3230:        access_mode RO
        !          3231:        field   ZERO            0x02
        !          3232:        field   CARRY           0x01
        !          3233: }
        !          3234:
        !          3235: /*
        !          3236:  * Sequencer Interrupt Control
        !          3237:  */
        !          3238: register SEQINTCTL {
        !          3239:        address                 0x0D9
        !          3240:        access_mode RW
        !          3241:        field   INTVEC1DSL      0x80
        !          3242:        field   INT1_CONTEXT    0x20
        !          3243:        field   SCS_SEQ_INT1M1  0x10
        !          3244:        field   SCS_SEQ_INT1M0  0x08
        !          3245:        field   INTMASK2        0x04
        !          3246:        field   INTMASK1        0x02
        !          3247:        field   IRET            0x01
        !          3248: }
        !          3249:
        !          3250: /*
        !          3251:  * Sequencer RAM Data Port
        !          3252:  * Single byte window into the Sequencer Instruction Ram area starting
        !          3253:  * at the address specified by OVLYADDR.  To write a full instruction word,
        !          3254:  * simply write four bytes in succession.  OVLYADDR will increment after the
        !          3255:  * most significant instruction byte (the byte with the parity bit) is written.
        !          3256:  */
        !          3257: register SEQRAM {
        !          3258:        address                 0x0DA
        !          3259:        access_mode RW
        !          3260: }
        !          3261:
        !          3262: /*
        !          3263:  * Sequencer Program Counter
        !          3264:  * Low byte must be written prior to high byte.
        !          3265:  */
        !          3266: register PRGMCNT {
        !          3267:        address                 0x0DE
        !          3268:        access_mode     RW
        !          3269:        size            2
        !          3270: }
        !          3271:
        !          3272: /*
        !          3273:  * Accumulator
        !          3274:  */
        !          3275: register ACCUM {
        !          3276:        address                 0x0E0
        !          3277:        access_mode RW
        !          3278:        accumulator
        !          3279: }
        !          3280:
        !          3281: /*
        !          3282:  * Source Index Register
        !          3283:  * Incrementing index for reads of SINDIR and the destination (low byte only)
        !          3284:  * for any immediate operands passed in jmp, jc, jnc, call instructions.
        !          3285:  * Example:
        !          3286:  *             mvi     0xFF    call some_routine;
        !          3287:  *
        !          3288:  *  Will set SINDEX[0] to 0xFF and call the routine "some_routine.
        !          3289:  */
        !          3290: register SINDEX        {
        !          3291:        address                 0x0E2
        !          3292:        access_mode     RW
        !          3293:        size            2
        !          3294:        sindex
        !          3295: }
        !          3296:
        !          3297: /*
        !          3298:  * Destination Index Register
        !          3299:  * Incrementing index for writes to DINDIR.  Can be used as a scratch register.
        !          3300:  */
        !          3301: register DINDEX {
        !          3302:        address                 0x0E4
        !          3303:        access_mode     RW
        !          3304:        size            2
        !          3305: }
        !          3306:
        !          3307: /*
        !          3308:  * Break Address
        !          3309:  * Sequencer instruction breakpoint address address.
        !          3310:  */
        !          3311: register BRKADDR0 {
        !          3312:        address                 0x0E6
        !          3313:        access_mode     RW
        !          3314: }
        !          3315:
        !          3316: register BRKADDR1 {
        !          3317:        address                 0x0E6
        !          3318:        access_mode     RW
        !          3319:        field   BRKDIS          0x80    /* Disable Breakpoint */
        !          3320: }
        !          3321:
        !          3322: /*
        !          3323:  * All Ones
        !          3324:  * All reads to this register return the value 0xFF.
        !          3325:  */
        !          3326: register ALLONES {
        !          3327:        address                 0x0E8
        !          3328:        access_mode RO
        !          3329:        allones
        !          3330: }
        !          3331:
        !          3332: /*
        !          3333:  * All Zeros
        !          3334:  * All reads to this register return the value 0.
        !          3335:  */
        !          3336: register ALLZEROS {
        !          3337:        address                 0x0EA
        !          3338:        access_mode RO
        !          3339:        allzeros
        !          3340: }
        !          3341:
        !          3342: /*
        !          3343:  * No Destination
        !          3344:  * Writes to this register have no effect.
        !          3345:  */
        !          3346: register NONE {
        !          3347:        address                 0x0EA
        !          3348:        access_mode WO
        !          3349:        none
        !          3350: }
        !          3351:
        !          3352: /*
        !          3353:  * Source Index Indirect
        !          3354:  * Reading this register is equivalent to reading (register_base + SINDEX) and
        !          3355:  * incrementing SINDEX by 1.
        !          3356:  */
        !          3357: register SINDIR        {
        !          3358:        address                 0x0EC
        !          3359:        access_mode RO
        !          3360: }
        !          3361:
        !          3362: /*
        !          3363:  * Destination Index Indirect
        !          3364:  * Writing this register is equivalent to writing to (register_base + DINDEX)
        !          3365:  * and incrementing DINDEX by 1.
        !          3366:  */
        !          3367: register DINDIR         {
        !          3368:        address                 0x0ED
        !          3369:        access_mode WO
        !          3370: }
        !          3371:
        !          3372: /*
        !          3373:  * Function One
        !          3374:  * 2's complement to bit value conversion.  Write the 2's complement value
        !          3375:  * (0-7 only) to the top nibble and retrieve the bit indexed by that value
        !          3376:  * on the next read of this register.
        !          3377:  * Example:
        !          3378:  *     Write   0x60
        !          3379:  *     Read    0x40
        !          3380:  */
        !          3381: register FUNCTION1 {
        !          3382:        address                 0x0F0
        !          3383:        access_mode RW
        !          3384: }
        !          3385:
        !          3386: /*
        !          3387:  * Stack
        !          3388:  * Window into the stack.  Each stack location is 10 bits wide reported
        !          3389:  * low byte followed by high byte.  There are 8 stack locations.
        !          3390:  */
        !          3391: register STACK {
        !          3392:        address                 0x0F2
        !          3393:        access_mode RW
        !          3394: }
        !          3395:
        !          3396: /*
        !          3397:  * Interrupt Vector 1 Address
        !          3398:  * Interrupt branch address for SCS SEQ_INT1 mode 0 and 1 interrupts.
        !          3399:  */
        !          3400: register INTVEC1_ADDR {
        !          3401:        address                 0x0F4
        !          3402:        access_mode     RW
        !          3403:        size            2
        !          3404:        modes           M_CFG
        !          3405: }
        !          3406:
        !          3407: /*
        !          3408:  * Current Address
        !          3409:  * Address of the SEQRAM instruction currently executing instruction.
        !          3410:  */
        !          3411: register CURADDR {
        !          3412:        address                 0x0F4
        !          3413:        access_mode     RW
        !          3414:        size            2
        !          3415:        modes           M_SCSI
        !          3416: }
        !          3417:
        !          3418: /*
        !          3419:  * Interrupt Vector 2 Address
        !          3420:  * Interrupt branch address for HST_SEQ_INT2 interrupts.
        !          3421:  */
        !          3422: register INTVEC2_ADDR {
        !          3423:        address                 0x0F6
        !          3424:        access_mode     RW
        !          3425:        size            2
        !          3426:        modes           M_CFG
        !          3427: }
        !          3428:
        !          3429: /*
        !          3430:  * Last Address
        !          3431:  * Address of the SEQRAM instruction executed prior to the current instruction.
        !          3432:  */
        !          3433: register LASTADDR {
        !          3434:        address                 0x0F6
        !          3435:        access_mode     RW
        !          3436:        size            2
        !          3437:        modes           M_SCSI
        !          3438: }
        !          3439:
        !          3440: register AHD_PCI_CONFIG_BASE {
        !          3441:        address                 0x100
        !          3442:        access_mode     RW
        !          3443:        size            256
        !          3444:        modes           M_CFG
        !          3445: }
        !          3446:
        !          3447: /* ---------------------- Scratch RAM Offsets ------------------------- */
        !          3448: scratch_ram {
        !          3449:        /* Mode Specific */
        !          3450:        address                 0x0A0
        !          3451:        size    8
        !          3452:        modes   0, 1, 2, 3
        !          3453:        REG0 {
        !          3454:                size            2
        !          3455:        }
        !          3456:        REG1 {
        !          3457:                size            2
        !          3458:        }
        !          3459:        REG_ISR {
        !          3460:                size            2
        !          3461:        }
        !          3462:        SG_STATE {
        !          3463:                size            1
        !          3464:                field   SEGS_AVAIL      0x01
        !          3465:                field   LOADING_NEEDED  0x02
        !          3466:                field   FETCH_INPROG    0x04
        !          3467:        }
        !          3468:        /*
        !          3469:         * Track whether the transfer byte count for
        !          3470:         * the current data phase is odd.
        !          3471:         */
        !          3472:        DATA_COUNT_ODD {
        !          3473:                size            1
        !          3474:        }
        !          3475: }
        !          3476:
        !          3477: scratch_ram {
        !          3478:        /* Mode Specific */
        !          3479:        address                 0x0F8
        !          3480:        size    8
        !          3481:        modes   0, 1, 2, 3
        !          3482:        LONGJMP_ADDR {
        !          3483:                size            2
        !          3484:        }
        !          3485:        ACCUM_SAVE {
        !          3486:                size            1
        !          3487:        }
        !          3488: }
        !          3489:
        !          3490:
        !          3491: scratch_ram {
        !          3492:        address                 0x100
        !          3493:        size    128
        !          3494:        modes   0, 1, 2, 3
        !          3495:        /*
        !          3496:         * Per "other-id" execution queues.  We use an array of
        !          3497:         * tail pointers into lists of SCBs sorted by "other-id".
        !          3498:         * The execution head pointer threads the head SCBs for
        !          3499:         * each list.
        !          3500:         */
        !          3501:        WAITING_SCB_TAILS {
        !          3502:                size            32
        !          3503:        }
        !          3504:        WAITING_TID_HEAD {
        !          3505:                size            2
        !          3506:        }
        !          3507:        WAITING_TID_TAIL {
        !          3508:                size            2
        !          3509:        }
        !          3510:        /*
        !          3511:         * SCBID of the next SCB in the new SCB queue.
        !          3512:         */
        !          3513:        NEXT_QUEUED_SCB_ADDR {
        !          3514:                size            4
        !          3515:        }
        !          3516:        /*
        !          3517:         * head of list of SCBs that have
        !          3518:         * completed but have not been
        !          3519:         * put into the qoutfifo.
        !          3520:         */
        !          3521:        COMPLETE_SCB_HEAD {
        !          3522:                size            2
        !          3523:        }
        !          3524:        /*
        !          3525:         * The list of completed SCBs in
        !          3526:         * the active DMA.
        !          3527:         */
        !          3528:        COMPLETE_SCB_DMAINPROG_HEAD {
        !          3529:                size            2
        !          3530:        }
        !          3531:        /*
        !          3532:         * head of list of SCBs that have
        !          3533:         * completed but need to be uploaded
        !          3534:         * to the host prior to being completed.
        !          3535:         */
        !          3536:        COMPLETE_DMA_SCB_HEAD {
        !          3537:                size            2
        !          3538:        }
        !          3539:        /*
        !          3540:         * tail of list of SCBs that have
        !          3541:         * completed but need to be uploaded
        !          3542:         * to the host prior to being completed.
        !          3543:         */
        !          3544:        COMPLETE_DMA_SCB_TAIL {
        !          3545:                size            2
        !          3546:        }
        !          3547:        /*
        !          3548:         * head of list of SCBs that have
        !          3549:         * been uploaded to the host, but cannot
        !          3550:         * be completed until the QFREEZE is in
        !          3551:         * full effect (i.e. no selections pending).
        !          3552:         */
        !          3553:        COMPLETE_ON_QFREEZE_HEAD {
        !          3554:                size            2
        !          3555:        }
        !          3556:        /*
        !          3557:         * Counting semaphore to prevent new select-outs
        !          3558:         * The queue is frozen so long as the sequencer
        !          3559:         * and kernel freeze counts differ.
        !          3560:         */
        !          3561:        QFREEZE_COUNT {
        !          3562:                size            2
        !          3563:        }
        !          3564:        KERNEL_QFREEZE_COUNT {
        !          3565:                size            2
        !          3566:        }
        !          3567:        /*
        !          3568:         * Mode to restore on legacy idle loop exit.
        !          3569:         */
        !          3570:        SAVED_MODE {
        !          3571:                size            1
        !          3572:        }
        !          3573:        /*
        !          3574:         * Single byte buffer used to designate the type or message
        !          3575:         * to send to a target.
        !          3576:         */
        !          3577:        MSG_OUT {
        !          3578:                size            1
        !          3579:        }
        !          3580:        /* Parameters for DMA Logic */
        !          3581:        DMAPARAMS {
        !          3582:                size            1
        !          3583:                field   PRELOADEN       0x80
        !          3584:                field   WIDEODD         0x40
        !          3585:                field   SCSIEN          0x20
        !          3586:                field   SDMAEN          0x10
        !          3587:                field   SDMAENACK       0x10
        !          3588:                field   HDMAEN          0x08
        !          3589:                field   HDMAENACK       0x08
        !          3590:                field   DIRECTION       0x04    /* Set indicates PCI->SCSI */
        !          3591:                field   FIFOFLUSH       0x02
        !          3592:                field   FIFORESET       0x01
        !          3593:        }
        !          3594:        SEQ_FLAGS {
        !          3595:                size            1
        !          3596:                field   NOT_IDENTIFIED          0x80
        !          3597:                field   NO_CDB_SENT             0x40
        !          3598:                field   TARGET_CMD_IS_TAGGED    0x40
        !          3599:                field   DPHASE                  0x20
        !          3600:                /* Target flags */
        !          3601:                field   TARG_CMD_PENDING        0x10
        !          3602:                field   CMDPHASE_PENDING        0x08
        !          3603:                field   DPHASE_PENDING          0x04
        !          3604:                field   SPHASE_PENDING          0x02
        !          3605:                field   NO_DISCONNECT           0x01
        !          3606:        }
        !          3607:        /*
        !          3608:         * Temporary storage for the
        !          3609:         * target/channel/lun of a
        !          3610:         * reconnecting target
        !          3611:         */
        !          3612:        SAVED_SCSIID {
        !          3613:                size            1
        !          3614:        }
        !          3615:        SAVED_LUN {
        !          3616:                size            1
        !          3617:        }
        !          3618:        /*
        !          3619:         * The last bus phase as seen by the sequencer.
        !          3620:         */
        !          3621:        LASTPHASE {
        !          3622:                size            1
        !          3623:                field   CDI             0x80
        !          3624:                field   IOI             0x40
        !          3625:                field   MSGI            0x20
        !          3626:                field   P_BUSFREE       0x01
        !          3627:                enum    PHASE_MASK  CDO|IOO|MSGO {
        !          3628:                        P_DATAOUT       0x0,
        !          3629:                        P_DATAIN        IOO,
        !          3630:                        P_DATAOUT_DT    P_DATAOUT|MSGO,
        !          3631:                        P_DATAIN_DT     P_DATAIN|MSGO,
        !          3632:                        P_COMMAND       CDO,
        !          3633:                        P_MESGOUT       CDO|MSGO,
        !          3634:                        P_STATUS        CDO|IOO,
        !          3635:                        P_MESGIN        CDO|IOO|MSGO
        !          3636:                }
        !          3637:        }
        !          3638:        /*
        !          3639:         * Value to "or" into the SCBPTR[1] value to
        !          3640:         * indicate that an entry in the QINFIFO is valid.
        !          3641:         */
        !          3642:        QOUTFIFO_ENTRY_VALID_TAG {
        !          3643:                size            1
        !          3644:        }
        !          3645:        /*
        !          3646:         * Kernel and sequencer offsets into the queue of
        !          3647:         * incoming target mode command descriptors.  The
        !          3648:         * queue is full when the KERNEL_TQINPOS == TQINPOS.
        !          3649:         */
        !          3650:        KERNEL_TQINPOS {
        !          3651:                size            1
        !          3652:        }
        !          3653:        TQINPOS {
        !          3654:                size            1
        !          3655:        }
        !          3656:        /*
        !          3657:         * Base address of our shared data with the kernel driver in host
        !          3658:         * memory.  This includes the qoutfifo and target mode
        !          3659:         * incoming command queue.
        !          3660:         */
        !          3661:        SHARED_DATA_ADDR {
        !          3662:                size            4
        !          3663:        }
        !          3664:        /*
        !          3665:         * Pointer to location in host memory for next
        !          3666:         * position in the qoutfifo.
        !          3667:         */
        !          3668:        QOUTFIFO_NEXT_ADDR {
        !          3669:                size            4
        !          3670:        }
        !          3671:        ARG_1 {
        !          3672:                size            1
        !          3673:                mask    SEND_MSG                0x80
        !          3674:                mask    SEND_SENSE              0x40
        !          3675:                mask    SEND_REJ                0x20
        !          3676:                mask    MSGOUT_PHASEMIS         0x10
        !          3677:                mask    EXIT_MSG_LOOP           0x08
        !          3678:                mask    CONT_MSG_LOOP_WRITE     0x04
        !          3679:                mask    CONT_MSG_LOOP_READ      0x03
        !          3680:                mask    CONT_MSG_LOOP_TARG      0x02
        !          3681:                alias   RETURN_1
        !          3682:        }
        !          3683:        ARG_2 {
        !          3684:                size            1
        !          3685:                alias   RETURN_2
        !          3686:        }
        !          3687:
        !          3688:        /*
        !          3689:         * Snapshot of MSG_OUT taken after each message is sent.
        !          3690:         */
        !          3691:        LAST_MSG {
        !          3692:                size            1
        !          3693:        }
        !          3694:
        !          3695:        /*
        !          3696:         * Sequences the kernel driver has okayed for us.  This allows
        !          3697:         * the driver to do things like prevent initiator or target
        !          3698:         * operations.
        !          3699:         */
        !          3700:        SCSISEQ_TEMPLATE {
        !          3701:                size            1
        !          3702:                field   MANUALCTL       0x40
        !          3703:                field   ENSELI          0x20
        !          3704:                field   ENRSELI         0x10
        !          3705:                field   MANUALP         0x0C
        !          3706:                field   ENAUTOATNP      0x02
        !          3707:                field   ALTSTIM         0x01
        !          3708:        }
        !          3709:
        !          3710:        /*
        !          3711:         * The initiator specified tag for this target mode transaction.
        !          3712:         */
        !          3713:        INITIATOR_TAG {
        !          3714:                size            1
        !          3715:        }
        !          3716:
        !          3717:        SEQ_FLAGS2 {
        !          3718:                size            1
        !          3719:                field   PENDING_MK_MESSAGE      0x01
        !          3720:                field   TARGET_MSG_PENDING      0x02
        !          3721:                field   SELECTOUT_QFROZEN       0x04
        !          3722:        }
        !          3723:
        !          3724:        ALLOCFIFO_SCBPTR {
        !          3725:                size            2
        !          3726:        }
        !          3727:
        !          3728:        /*
        !          3729:         * The maximum amount of time to wait, when interrupt coalescing
        !          3730:         * is enabled, before issueing a CMDCMPLT interrupt for a completed
        !          3731:         * command.
        !          3732:         */
        !          3733:        INT_COALESCING_TIMER {
        !          3734:                size            2
        !          3735:        }
        !          3736:
        !          3737:        /*
        !          3738:         * The maximum number of commands to coalesce into a single interrupt.
        !          3739:         * Actually the 2's complement of that value to simplify sequencer
        !          3740:         * code.
        !          3741:         */
        !          3742:        INT_COALESCING_MAXCMDS {
        !          3743:                size            1
        !          3744:        }
        !          3745:
        !          3746:        /*
        !          3747:         * The minimum number of commands still outstanding required
        !          3748:         * to continue coalescing (2's complement of value).
        !          3749:         */
        !          3750:        INT_COALESCING_MINCMDS {
        !          3751:                size            1
        !          3752:        }
        !          3753:
        !          3754:        /*
        !          3755:         * Number of commands "in-flight".
        !          3756:         */
        !          3757:        CMDS_PENDING {
        !          3758:                size            2
        !          3759:        }
        !          3760:
        !          3761:        /*
        !          3762:         * The count of commands that have been coalesced.
        !          3763:         */
        !          3764:        INT_COALESCING_CMDCOUNT {
        !          3765:                size            1
        !          3766:        }
        !          3767:
        !          3768:        /*
        !          3769:         * Since the HS_MAIBOX is self clearing, copy its contents to
        !          3770:         * this position in scratch ram every time it changes.
        !          3771:         */
        !          3772:        LOCAL_HS_MAILBOX {
        !          3773:                size            1
        !          3774:        }
        !          3775:        /*
        !          3776:         * Target-mode CDB type to CDB length table used
        !          3777:         * in non-packetized operation.
        !          3778:         */
        !          3779:        CMDSIZE_TABLE {
        !          3780:                size            8
        !          3781:        }
        !          3782:        /*
        !          3783:         * When an SCB with the MK_MESSAGE flag is
        !          3784:         * queued to the controller, it cannot enter
        !          3785:         * the waiting for selection list until the
        !          3786:         * selections for any previously queued
        !          3787:         * commands to that target complete.  During
        !          3788:         * the wait, the MK_MESSAGE SCB is queued
        !          3789:         * here.
        !          3790:         */
        !          3791:        MK_MESSAGE_SCB {
        !          3792:                size            2
        !          3793:        }
        !          3794:        /*
        !          3795:         * Saved SCSIID of MK_MESSAGE_SCB to avoid
        !          3796:         * an extra SCBPTR operation when deciding
        !          3797:         * if the MK_MESSAGE_SCB can be run.
        !          3798:         */
        !          3799:        MK_MESSAGE_SCSIID {
        !          3800:                size            1
        !          3801:        }
        !          3802: }
        !          3803:
        !          3804: /************************* Hardware SCB Definition ****************************/
        !          3805: scb {
        !          3806:        address                 0x180
        !          3807:        size    64
        !          3808:        modes   0, 1, 2, 3
        !          3809:        SCB_RESIDUAL_DATACNT {
        !          3810:                size    4
        !          3811:                alias   SCB_CDB_STORE
        !          3812:                alias   SCB_HOST_CDB_PTR
        !          3813:        }
        !          3814:        SCB_RESIDUAL_SGPTR {
        !          3815:                size    4
        !          3816:                field   SG_ADDR_MASK            0xf8    /* In the last byte */
        !          3817:                field   SG_OVERRUN_RESID        0x02    /* In the first byte */
        !          3818:                field   SG_LIST_NULL            0x01    /* In the first byte */
        !          3819:        }
        !          3820:        SCB_SCSI_STATUS {
        !          3821:                size    1
        !          3822:                alias   SCB_HOST_CDB_LEN
        !          3823:        }
        !          3824:        SCB_TARGET_PHASES {
        !          3825:                size    1
        !          3826:        }
        !          3827:        SCB_TARGET_DATA_DIR {
        !          3828:                size    1
        !          3829:        }
        !          3830:        SCB_TARGET_ITAG {
        !          3831:                size    1
        !          3832:        }
        !          3833:        SCB_SENSE_BUSADDR {
        !          3834:                /*
        !          3835:                 * Only valid if CDB length is less than 13 bytes or
        !          3836:                 * we are using a CDB pointer.  Otherwise contains
        !          3837:                 * the last 4 bytes of embedded cdb information.
        !          3838:                 */
        !          3839:                size    4
        !          3840:                alias   SCB_NEXT_COMPLETE
        !          3841:        }
        !          3842:        SCB_TAG {
        !          3843:                alias   SCB_FIFO_USE_COUNT
        !          3844:                size    2
        !          3845:        }
        !          3846:        SCB_CONTROL {
        !          3847:                size    1
        !          3848:                field   TARGET_SCB      0x80
        !          3849:                field   DISCENB         0x40
        !          3850:                field   TAG_ENB         0x20
        !          3851:                field   MK_MESSAGE      0x10
        !          3852:                field   STATUS_RCVD     0x08
        !          3853:                field   DISCONNECTED    0x04
        !          3854:                field   SCB_TAG_TYPE    0x03
        !          3855:        }
        !          3856:        SCB_SCSIID {
        !          3857:                size    1
        !          3858:                field   TID     0xF0
        !          3859:                field   OID     0x0F
        !          3860:        }
        !          3861:        SCB_LUN {
        !          3862:                size    1
        !          3863:                field   LID     0xff
        !          3864:        }
        !          3865:        SCB_TASK_ATTRIBUTE {
        !          3866:                size    1
        !          3867:                /*
        !          3868:                 * Overloaded field for non-packetized
        !          3869:                 * ignore wide residue message handling.
        !          3870:                 */
        !          3871:                field   SCB_XFERLEN_ODD 0x01
        !          3872:        }
        !          3873:        SCB_CDB_LEN {
        !          3874:                size    1
        !          3875:                field   SCB_CDB_LEN_PTR 0x80    /* CDB in host memory */
        !          3876:        }
        !          3877:        SCB_TASK_MANAGEMENT {
        !          3878:                size    1
        !          3879:        }
        !          3880:        SCB_DATAPTR {
        !          3881:                size    8
        !          3882:        }
        !          3883:        SCB_DATACNT {
        !          3884:                /*
        !          3885:                 * The last byte is really the high address bits for
        !          3886:                 * the data address.
        !          3887:                 */
        !          3888:                size    4
        !          3889:                field   SG_LAST_SEG             0x80    /* In the fourth byte */
        !          3890:                field   SG_HIGH_ADDR_BITS       0x7F    /* In the fourth byte */
        !          3891:        }
        !          3892:        SCB_SGPTR {
        !          3893:                size    4
        !          3894:                field   SG_STATUS_VALID 0x04    /* In the first byte */
        !          3895:                field   SG_FULL_RESID   0x02    /* In the first byte */
        !          3896:                field   SG_LIST_NULL    0x01    /* In the first byte */
        !          3897:        }
        !          3898:        SCB_BUSADDR {
        !          3899:                size    4
        !          3900:        }
        !          3901:        SCB_NEXT {
        !          3902:                alias   SCB_NEXT_SCB_BUSADDR
        !          3903:                size    2
        !          3904:        }
        !          3905:        SCB_NEXT2 {
        !          3906:                size    2
        !          3907:        }
        !          3908:        SCB_SPARE {
        !          3909:                size    8
        !          3910:                alias   SCB_PKT_LUN
        !          3911:        }
        !          3912:        SCB_DISCONNECTED_LISTS {
        !          3913:                size    8
        !          3914:        }
        !          3915: }
        !          3916:
        !          3917: /*********************************** Constants ********************************/
        !          3918: const MK_MESSAGE_BIT_OFFSET    4
        !          3919: const TID_SHIFT                4
        !          3920: const TARGET_CMD_CMPLT 0xfe
        !          3921: const INVALID_ADDR     0x80
        !          3922: #define SCB_LIST_NULL  0xff
        !          3923: #define QOUTFIFO_ENTRY_VALID_TOGGLE    0x80
        !          3924:
        !          3925: const CCSGADDR_MAX     0x80
        !          3926: const CCSCBADDR_MAX    0x80
        !          3927: const CCSGRAM_MAXSEGS  16
        !          3928:
        !          3929: /* Selection Timeout Timer Constants */
        !          3930: const STIMESEL_SHIFT   3
        !          3931: const STIMESEL_MIN     0x18
        !          3932: const STIMESEL_BUG_ADJ 0x8
        !          3933:
        !          3934: /* WDTR Message values */
        !          3935: const BUS_8_BIT                        0x00
        !          3936: const BUS_16_BIT               0x01
        !          3937: const BUS_32_BIT               0x02
        !          3938:
        !          3939: /* Offset maximums */
        !          3940: const MAX_OFFSET               0xfe
        !          3941: const MAX_OFFSET_PACED         0xfe
        !          3942: const MAX_OFFSET_PACED_BUG     0x7f
        !          3943: /*
        !          3944:  * Some 160 devices incorrectly accept 0xfe as a
        !          3945:  * sync offset, but will overrun this value.  Limit
        !          3946:  * to 0x7f for speed lower than U320 which will
        !          3947:  * avoid the persistent sync offset overruns.
        !          3948:  */
        !          3949: const MAX_OFFSET_NON_PACED     0x7f
        !          3950: const HOST_MSG                 0xff
        !          3951:
        !          3952: /*
        !          3953:  * The size of our sense buffers.
        !          3954:  * Sense buffer mapping can be handled in either of two ways.
        !          3955:  * The first is to allocate a dmamap for each transaction.
        !          3956:  * Depending on the architecture, dmamaps can be costly. The
        !          3957:  * alternative is to statically map the buffers in much the same
        !          3958:  * way we handle our scatter gather lists.  The driver implements
        !          3959:  * the later.
        !          3960:  */
        !          3961: const AHD_SENSE_BUFSIZE                256
        !          3962:
        !          3963: /* Target mode command processing constants */
        !          3964: const CMD_GROUP_CODE_SHIFT     0x05
        !          3965:
        !          3966: const STATUS_BUSY              0x08
        !          3967: const STATUS_QUEUE_FULL                0x28
        !          3968: const STATUS_PKT_SENSE         0xFF
        !          3969: const TARGET_DATA_IN           1
        !          3970:
        !          3971: const SCB_TRANSFER_SIZE_FULL_LUN       56
        !          3972: const SCB_TRANSFER_SIZE_1BYTE_LUN      48
        !          3973: /* PKT_OVERRUN_BUFSIZE must be a multiple of 256 less than 64K */
        !          3974: const PKT_OVERRUN_BUFSIZE      512
        !          3975:
        !          3976: /*
        !          3977:  * Timer parameters.
        !          3978:  */
        !          3979: const AHD_TIMER_US_PER_TICK    25
        !          3980: const AHD_TIMER_MAX_TICKS      0xFFFF
        !          3981: const AHD_TIMER_MAX_US         (AHD_TIMER_MAX_TICKS * AHD_TIMER_US_PER_TICK)
        !          3982:
        !          3983: /*
        !          3984:  * Downloaded (kernel inserted) constants
        !          3985:  */
        !          3986: const SG_PREFETCH_CNT download
        !          3987: const SG_PREFETCH_CNT_LIMIT download
        !          3988: const SG_PREFETCH_ALIGN_MASK download
        !          3989: const SG_PREFETCH_ADDR_MASK download
        !          3990: const SG_SIZEOF download
        !          3991: const PKT_OVERRUN_BUFOFFSET download
        !          3992: const SCB_TRANSFER_SIZE        download
        !          3993: const CACHELINE_MASK download
        !          3994:
        !          3995: /*
        !          3996:  * BIOS SCB offsets
        !          3997:  */
        !          3998: const NVRAM_SCB_OFFSET 0x2C

CVSweb