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