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