Annotation of Gnu-Mach/linux/src/drivers/scsi/tmscsiw.h, revision 1.1

1.1     ! root        1: /***********************************************************************
        !             2: ;*     File Name : TMSCSIW.H                                          *
        !             3: ;*                 TEKRAM DC-390 PCI Wide SCSI Bus Master Host Adapter*
        !             4: ;*                 Device Driver                                      *
        !             5: ;***********************************************************************/
        !             6: 
        !             7: #ifndef TMSCSIW_H
        !             8: #define TMSCSIW_H
        !             9: 
        !            10: #define IRQ_NONE 255
        !            11: 
        !            12: typedef unsigned char  UCHAR;
        !            13: typedef unsigned short USHORT;
        !            14: typedef unsigned long  ULONG;
        !            15: typedef unsigned int   UINT;
        !            16: 
        !            17: typedef UCHAR          *PUCHAR;
        !            18: typedef USHORT         *PUSHORT;
        !            19: typedef ULONG          *PULONG;
        !            20: typedef Scsi_Host_Template  *PSHT;
        !            21: typedef struct Scsi_Host    *PSH;
        !            22: typedef Scsi_Device    *PSCSIDEV;
        !            23: typedef Scsi_Cmnd      *PSCSICMD;
        !            24: typedef void           *PVOID;
        !            25: typedef struct scatterlist  *PSGL, SGL;
        !            26: 
        !            27: 
        !            28: typedef  struct  _AddWkSpace
        !            29: {
        !            30: USHORT         WKIOCtrlFlag;           /* ;b7-Done, b6-wrtVerify, b0-in process */
        !            31: USHORT         XferredBlkCnt;
        !            32: USHORT         WKToXferBlkCnt;
        !            33: USHORT         WKcSGListDone;
        !            34: USHORT         WKMaxSGIndex;
        !            35: ULONG          WKToXferLen;
        !            36: USHORT         NxtSGoffset;
        !            37: } AddWkSpace;
        !            38: 
        !            39: /*;-----------------------------------------------------------------------*/
        !            40: typedef  struct  _SyncMsg
        !            41: {
        !            42: UCHAR          ExtendMsg;
        !            43: UCHAR          ExtMsgLen;
        !            44: UCHAR          SyncXferReq;
        !            45: UCHAR          Period;
        !            46: UCHAR          ReqOffset;
        !            47: } SyncMsg;
        !            48: /*;-----------------------------------------------------------------------*/
        !            49: typedef  struct  _Capacity
        !            50: {
        !            51: ULONG          BlockCount;
        !            52: ULONG          BlockLength;
        !            53: } Capacity;
        !            54: /*;-----------------------------------------------------------------------*/
        !            55: typedef  struct  _SGentry
        !            56: {
        !            57: ULONG          SGXferDataPtr;
        !            58: ULONG          SGXferDataLen;
        !            59: } SGentry;
        !            60: 
        !            61: typedef  struct  _SGentry1
        !            62: {
        !            63: ULONG          SGXLen;
        !            64: ULONG          SGXPtr;
        !            65: } SGentry1, *PSGE;
        !            66: 
        !            67: 
        !            68: #define MAX_ADAPTER_NUM        4
        !            69: #define MAX_DEVICES            10
        !            70: #define MAX_SG_LIST_BUF        32
        !            71: #define MAX_CMD_QUEUE          20
        !            72: #define MAX_CMD_PER_LUN        8
        !            73: #define MAX_SCSI_ID            16
        !            74: #define MAX_SRB_CNT            MAX_CMD_QUEUE+4
        !            75: #define END_SCAN               2
        !            76: 
        !            77: /*
        !            78: ;-----------------------------------------------------------------------
        !            79: ; SCSI Request Block
        !            80: ;-----------------------------------------------------------------------
        !            81: */
        !            82: struct _SRB
        !            83: {
        !            84: UCHAR          CmdBlock[12];
        !            85: ULONG          Segment0[MAX_SG_LIST_BUF+1][2];
        !            86: ULONG          SegmentPad[2];
        !            87: 
        !            88: ULONG          __select;
        !            89: ULONG          __command[2];   /* ;len,ptr */
        !            90: ULONG          __msgout0[2];   /* ;len,ptr */
        !            91: 
        !            92: ULONG          PhysSRB;
        !            93: ULONG          ReturnAddr;
        !            94: ULONG          RemainSegPtr;
        !            95: PSCSICMD       pcmd;
        !            96: struct _SRB    *pNextSRB;
        !            97: struct _DCB    *pSRBDCB;
        !            98: PSGL           pSegmentList;
        !            99: ULONG          XferredLen;
        !           100: 
        !           101: ULONG          SGPhysAddr;     /*;a segment starting address */
        !           102: ULONG          XferredLen1;
        !           103: 
        !           104: SGL            Segmentx;       /* make a one entry of S/G list table */
        !           105: 
        !           106: PUCHAR         pMsgPtr;
        !           107: USHORT         SRBState;
        !           108: USHORT         Revxx2;         /* ??? */
        !           109: 
        !           110: UCHAR          MsgInBuf[6];
        !           111: UCHAR          MsgOutBuf[6];
        !           112: UCHAR          SenseDataBuf[0x12];
        !           113: UCHAR          AdaptStatus;
        !           114: UCHAR          TargetStatus;
        !           115: 
        !           116: UCHAR          MsgCnt;
        !           117: UCHAR          EndMessage;
        !           118: UCHAR          TagNumber;
        !           119: UCHAR          InternalReq;    /*; 1-ADD internal request, 0-DMD request */
        !           120: 
        !           121: UCHAR          SGcount;
        !           122: UCHAR          SGIndex;
        !           123: UCHAR          IORBFlag;       /*;81h-Reset, 2-retry */
        !           124: UCHAR          SRBStatus;
        !           125: 
        !           126: UCHAR          RetryCnt;
        !           127: UCHAR          SRBFlag;        /*; b0-AutoReqSense,b6-Read,b7-write */
        !           128:                                /*; b4-settimeout,b5-Residual valid */
        !           129: UCHAR          ScratchABuf;
        !           130: UCHAR          Reserved3[1];   /*;for dword alignment */
        !           131: };
        !           132: 
        !           133: typedef  struct  _SRB   DC390W_SRB, *PSRB;
        !           134: 
        !           135: /*
        !           136: ;-----------------------------------------------------------------------
        !           137: ; Device Control Block
        !           138: ;-----------------------------------------------------------------------
        !           139: */
        !           140: struct _DCB
        !           141: {
        !           142: UCHAR          DCBselect;
        !           143: UCHAR          DCBsxfer;
        !           144: UCHAR          DCBsdid;
        !           145: UCHAR          DCBscntl3;
        !           146: 
        !           147: UCHAR          DCBscntl0;
        !           148: UCHAR          IdentifyMsg;
        !           149: UCHAR          DevMode;
        !           150: UCHAR          AdpMode;
        !           151: 
        !           152: struct _DCB    *pNextDCB;
        !           153: struct _ACB    *pDCBACB;
        !           154: 
        !           155: PSCSICMD       pQIORBhead;
        !           156: PSCSICMD       pQIORBtail;
        !           157: PSCSICMD       AboIORBhead;
        !           158: PSCSICMD       AboIORBtail;
        !           159: USHORT         QIORBCnt;
        !           160: USHORT         AboIORBcnt;
        !           161: 
        !           162: PSRB           pWaitingSRB;
        !           163: PSRB           pWaitLast;
        !           164: PSRB           pGoingSRB;
        !           165: PSRB           pGoingLast;
        !           166: PSRB           pActiveSRB;
        !           167: USHORT         GoingSRBCnt;
        !           168: USHORT         WaitSRBCnt;     /* ??? */
        !           169: 
        !           170: ULONG          TagMask;
        !           171: 
        !           172: USHORT         MaxCommand;
        !           173: USHORT         AdaptIndex;     /*; UnitInfo struc start */
        !           174: USHORT         UnitIndex;      /*; nth Unit on this card */
        !           175: UCHAR          UnitSCSIID;     /*; SCSI Target ID  (SCSI Only) */
        !           176: UCHAR          UnitSCSILUN;    /*; SCSI Log.  Unit (SCSI Only) */
        !           177: 
        !           178: UCHAR          InqDataBuf[8];
        !           179: UCHAR          CapacityBuf[8];
        !           180: UCHAR          SyncMode;       /*; 0:async mode */
        !           181: UCHAR          NegoPeriod;     /*;for nego. */
        !           182: UCHAR          SyncPeriod;     /*;for reg. */
        !           183: UCHAR          SyncOffset;     /*;for reg. and nego.(low nibble) */
        !           184: UCHAR          UnitCtrlFlag;
        !           185: UCHAR          DCBFlag;
        !           186: UCHAR          DevType;
        !           187: UCHAR          Reserved2[1];   /*;for dword alignment */
        !           188: };
        !           189: 
        !           190: typedef  struct  _DCB   DC390W_DCB, *PDCB;
        !           191: /*
        !           192: ;-----------------------------------------------------------------------
        !           193: ; Adapter Control Block
        !           194: ;-----------------------------------------------------------------------
        !           195: */
        !           196: struct _ACB
        !           197: {
        !           198: ULONG          PhysACB;
        !           199: ULONG          DevVendorID;
        !           200: PSH            pScsiHost;
        !           201: struct _ACB    *pNextACB;
        !           202: USHORT         IOPortBase;
        !           203: USHORT         Revxx1;         /* ??? */
        !           204: 
        !           205: PDCB           pLinkDCB;
        !           206: PDCB           pDCBRunRobin;
        !           207: PDCB           pActiveDCB;
        !           208: PDCB           pDCB_free;
        !           209: PSRB           pFreeSRB;
        !           210: USHORT         SRBCount;
        !           211: USHORT         AdapterIndex;   /*; nth Adapter this driver */
        !           212: USHORT         max_id;
        !           213: USHORT         max_lun;
        !           214: 
        !           215: ULONG          jmp_reselect;
        !           216: ULONG          jmp_select;
        !           217: ULONG          jmp_table8;
        !           218: ULONG          jmp_set_atn;
        !           219: ULONG          jmp_clear_ack;
        !           220: ULONG          jmp_next;
        !           221: ULONG          jmp_din8;
        !           222: ULONG          jmp_dout8;
        !           223: ULONG          jmp_clear_atn;
        !           224: ULONG          jmp_reselecttag;
        !           225: 
        !           226: UCHAR          msgin123[4];
        !           227: UCHAR          status;
        !           228: UCHAR          AdaptSCSIID;    /*; Adapter SCSI Target ID */
        !           229: UCHAR          AdaptSCSILUN;   /*; Adapter SCSI LUN */
        !           230: UCHAR          DeviceCnt;
        !           231: UCHAR          IRQLevel;
        !           232: UCHAR          AdaptType;      /*;1:390W, 2:390U, 3:390F */
        !           233: UCHAR          TagMaxNum;
        !           234: UCHAR          ACBFlag;
        !           235: UCHAR          Gmode2;
        !           236: UCHAR          LUNchk;
        !           237: UCHAR          scan_devices;
        !           238: UCHAR          Reserved1[1];   /*;for dword alignment */
        !           239: UCHAR          DCBmap[MAX_SCSI_ID];
        !           240: DC390W_DCB     DCB_array[MAX_DEVICES];         /* +74h,  Len=3E8 */
        !           241: DC390W_SRB     SRB_array[MAX_SRB_CNT];         /* +45Ch, Len=  */
        !           242: };
        !           243: 
        !           244: typedef  struct  _ACB   DC390W_ACB, *PACB;
        !           245: 
        !           246: /*;-----------------------------------------------------------------------*/
        !           247: 
        !           248: #define PCI_DEVICE_ID_NCR53C825A       0x0003
        !           249: #define PCI_DEVICE_ID_NCR53C875        0x000f
        !           250: 
        !           251: #define CHIP810_ID     0x00011000
        !           252: #define CHIP820_ID     0x00021000
        !           253: #define CHIP825_ID     0x00031000
        !           254: #define CHIP815_ID     0x00041000
        !           255: #define CHIP875_ID     0x000f1000
        !           256: 
        !           257: #define DC390W         1       /*;825A - 16 BIT*/
        !           258: #define DC390U         2       /*;875  -  8 BIT*/
        !           259: #define DC390F         3       /*;875  - 16 BIT*/
        !           260: 
        !           261: #define BIT31  0x80000000
        !           262: #define BIT30  0x40000000
        !           263: #define BIT29  0x20000000
        !           264: #define BIT28  0x10000000
        !           265: #define BIT27  0x08000000
        !           266: #define BIT26  0x04000000
        !           267: #define BIT25  0x02000000
        !           268: #define BIT24  0x01000000
        !           269: #define BIT23  0x00800000
        !           270: #define BIT22  0x00400000
        !           271: #define BIT21  0x00200000
        !           272: #define BIT20  0x00100000
        !           273: #define BIT19  0x00080000
        !           274: #define BIT18  0x00040000
        !           275: #define BIT17  0x00020000
        !           276: #define BIT16  0x00010000
        !           277: #define BIT15  0x00008000
        !           278: #define BIT14  0x00004000
        !           279: #define BIT13  0x00002000
        !           280: #define BIT12  0x00001000
        !           281: #define BIT11  0x00000800
        !           282: #define BIT10  0x00000400
        !           283: #define BIT9   0x00000200
        !           284: #define BIT8   0x00000100
        !           285: #define BIT7   0x00000080
        !           286: #define BIT6   0x00000040
        !           287: #define BIT5   0x00000020
        !           288: #define BIT4   0x00000010
        !           289: #define BIT3   0x00000008
        !           290: #define BIT2   0x00000004
        !           291: #define BIT1   0x00000002
        !           292: #define BIT0   0x00000001
        !           293: 
        !           294: /*;---WKIOCtrlFlag */
        !           295: #define IN_PROCESSING  BIT0
        !           296: #define BAD_WRITE_V_CMD BIT1
        !           297: #define VERIFY_CMD     BIT2
        !           298: #define RESIDUAL_SG    BIT3
        !           299: 
        !           300: /*;---UnitCtrlFlag */
        !           301: #define UNIT_ALLOCATED BIT0
        !           302: #define UNIT_INFO_CHANGED BIT1
        !           303: #define FORMATING_MEDIA BIT2
        !           304: #define UNIT_RETRY     BIT3
        !           305: 
        !           306: /*;---UnitFlags */
        !           307: #define DASD_SUPPORT   BIT0
        !           308: #define SCSI_SUPPORT   BIT1
        !           309: #define ASPI_SUPPORT   BIT2
        !           310: 
        !           311: /*;----SRBState machine definition */
        !           312: #define SRB_FREE       0
        !           313: #define SRB_WAIT       BIT0
        !           314: #define SRB_READY      BIT1
        !           315: #define SRB_MSGOUT     BIT2    /*;arbitration+msg_out 1st byte*/
        !           316: #define SRB_MSGIN      BIT3
        !           317: #define SRB_MSGIN_MULTI BIT4
        !           318: #define SRB_COMMAND    BIT5
        !           319: #define SRB_START_     BIT6    /*;arbitration+msg_out+command_out*/
        !           320: #define SRB_DISCONNECT BIT7
        !           321: #define SRB_DATA_XFER  BIT8
        !           322: #define SRB_XFERPAD    BIT9
        !           323: #define SRB_STATUS     BIT10
        !           324: #define SRB_COMPLETED  BIT11
        !           325: 
        !           326: #define DO_WIDE_NEGO   BIT12
        !           327: #define DO_SYNC_NEGO   BIT13
        !           328: #define SRB_UNEXPECT_RESEL BIT14
        !           329: 
        !           330: /*;---ACBFlag */
        !           331: #define RESET_DEV      BIT0
        !           332: #define RESET_DETECT   BIT1
        !           333: #define RESET_DONE     BIT2
        !           334: 
        !           335: /*;---DCBFlag */
        !           336: #define ABORT_DEV_     BIT0
        !           337: 
        !           338: /*;---SRBstatus */
        !           339: #define SRB_OK         BIT0
        !           340: #define ABORTION       BIT1
        !           341: #define OVER_RUN       BIT2
        !           342: #define UNDER_RUN      BIT3
        !           343: #define SRB_ERROR      BIT4
        !           344: 
        !           345: /*;---SRBFlag */
        !           346: #define DATAOUT        BIT7
        !           347: #define DATAIN         BIT6
        !           348: #define RESIDUAL_VALID BIT5
        !           349: #define ENABLE_TIMER   BIT4
        !           350: #define RESET_DEV0     BIT2
        !           351: #define ABORT_DEV      BIT1
        !           352: #define AUTO_REQSENSE  BIT0
        !           353: 
        !           354: /*;---Adapter status */
        !           355: #define H_STATUS_GOOD   0
        !           356: #define H_SEL_TIMEOUT   0x11
        !           357: #define H_OVER_UNDER_RUN 0x12
        !           358: #define H_UNEXP_BUS_FREE 0x13
        !           359: #define H_TARGET_PHASE_F 0x14
        !           360: #define H_INVALID_CCB_OP 0x16
        !           361: #define H_LINK_CCB_BAD  0x17
        !           362: #define H_BAD_TARGET_DIR 0x18
        !           363: #define H_DUPLICATE_CCB  0x19
        !           364: #define H_BAD_CCB_OR_SG  0x1A
        !           365: #define H_ABORT         0x0FF
        !           366: 
        !           367: /*; SCSI Status byte codes*/
        !           368: #define SCSI_STAT_GOOD         0x0     /*;  Good status */
        !           369: #define SCSI_STAT_CHECKCOND    0x02    /*;  SCSI Check Condition */
        !           370: #define SCSI_STAT_CONDMET      0x04    /*;  Condition Met */
        !           371: #define SCSI_STAT_BUSY         0x08    /*;  Target busy status */
        !           372: #define SCSI_STAT_INTER        0x10    /*;  Intermediate status */
        !           373: #define SCSI_STAT_INTERCONDMET 0x14    /*;  Intermediate condition met */
        !           374: #define SCSI_STAT_RESCONFLICT  0x18    /*;  Reservation conflict */
        !           375: #define SCSI_STAT_CMDTERM      0x22    /*;  Command Terminated */
        !           376: #define SCSI_STAT_QUEUEFULL    0x28    /*;  Queue Full */
        !           377: 
        !           378: #define SCSI_STAT_UNEXP_BUS_F  0xFD    /*;  Unexpect Bus Free */
        !           379: #define SCSI_STAT_BUS_RST_DETECT 0xFE  /*;  Scsi Bus Reset detected */
        !           380: #define SCSI_STAT_SEL_TIMEOUT  0xFF    /*;  Selection Time out */
        !           381: 
        !           382: /*;---Sync_Mode */
        !           383: #define SYNC_DISABLE   0
        !           384: #define SYNC_ENABLE    BIT0
        !           385: #define SYNC_NEGO_DONE BIT1
        !           386: #define WIDE_ENABLE    BIT2
        !           387: #define WIDE_NEGO_DONE BIT3
        !           388: #define EN_TAG_QUEUING BIT4
        !           389: 
        !           390: #define SYNC_NEGO_OFFSET 16
        !           391: 
        !           392: /*;---SCSI bus phase*/
        !           393: #define SCSI_DATA_OUT  0
        !           394: #define SCSI_DATA_IN   1
        !           395: #define SCSI_COMMAND   2
        !           396: #define SCSI_STATUS_   3
        !           397: #define SCSI_NOP0      4
        !           398: #define SCSI_NOP1      5
        !           399: #define SCSI_MSG_OUT   6
        !           400: #define SCSI_MSG_IN    7
        !           401: 
        !           402: /*;----SCSI MSG BYTE*/
        !           403: #define MSG_COMPLETE           0x00
        !           404: #define MSG_EXTENDED           0x01
        !           405: #define MSG_SAVE_PTR           0x02
        !           406: #define MSG_RESTORE_PTR        0x03
        !           407: #define MSG_DISCONNECT         0x04
        !           408: #define MSG_INITIATOR_ERROR    0x05
        !           409: #define MSG_ABORT              0x06
        !           410: #define MSG_REJECT_            0x07
        !           411: #define MSG_NOP                0x08
        !           412: #define MSG_PARITY_ERROR       0x09
        !           413: #define MSG_LINK_CMD_COMPL     0x0A
        !           414: #define MSG_LINK_CMD_COMPL_FLG 0x0B
        !           415: #define MSG_BUS_RESET          0x0C
        !           416: #define MSG_ABORT_TAG          0x0D
        !           417: #define MSG_SIMPLE_QTAG        0x20
        !           418: #define MSG_HEAD_QTAG          0x21
        !           419: #define MSG_ORDER_QTAG         0x22
        !           420: #define MSG_IDENTIFY           0x80
        !           421: #define MSG_HOST_ID            0x0C0
        !           422: 
        !           423: /*;----SCSI STATUS BYTE*/
        !           424: #define STATUS_GOOD            0x00
        !           425: #define CHECK_CONDITION_       0x02
        !           426: #define STATUS_BUSY            0x08
        !           427: #define STATUS_INTERMEDIATE    0x10
        !           428: #define RESERVE_CONFLICT       0x18
        !           429: 
        !           430: /* cmd->result */
        !           431: #define STATUS_MASK_           0xFF
        !           432: #define MSG_MASK               0xFF00
        !           433: #define RETURN_MASK            0xFF0000
        !           434: 
        !           435: /*
        !           436: **  Inquiry Data format
        !           437: */
        !           438: 
        !           439: typedef struct _SCSIInqData { /* INQ */
        !           440: 
        !           441:        UCHAR    DevType;               /* Periph Qualifier & Periph Dev Type*/
        !           442:        UCHAR    RMB_TypeMod;           /* rem media bit & Dev Type Modifier */
        !           443:        UCHAR    Vers;                  /* ISO, ECMA, & ANSI versions        */
        !           444:        UCHAR    RDF;                   /* AEN, TRMIOP, & response data format*/
        !           445:        UCHAR    AddLen;                /* length of additional data         */
        !           446:        UCHAR    Res1;                  /* reserved                          */
        !           447:        UCHAR    Res2;                  /* reserved                          */
        !           448:        UCHAR    Flags;                 /* RelADr,Wbus32,Wbus16,Sync,etc.    */
        !           449:        UCHAR    VendorID[8];           /* Vendor Identification             */
        !           450:        UCHAR    ProductID[16];         /* Product Identification            */
        !           451:        UCHAR    ProductRev[4];         /* Product Revision                  */
        !           452: 
        !           453: 
        !           454: } SCSI_INQDATA, *PSCSI_INQDATA;
        !           455: 
        !           456: 
        !           457: /*  Inquiry byte 0 masks */
        !           458: 
        !           459: 
        !           460: #define SCSI_DEVTYPE       0x1F      /* Peripheral Device Type             */
        !           461: #define SCSI_PERIPHQUAL     0xE0      /* Peripheral Qualifier              */
        !           462: 
        !           463: 
        !           464: /*  Inquiry byte 1 mask */
        !           465: 
        !           466: #define SCSI_REMOVABLE_MEDIA  0x80    /* Removable Media bit (1=removable)  */
        !           467: 
        !           468: 
        !           469: /*  Peripheral Device Type definitions */
        !           470: 
        !           471: #define SCSI_DASD               0x00      /* Direct-access Device         */
        !           472: #define SCSI_SEQACESS           0x01      /* Sequential-access device     */
        !           473: #define SCSI_PRINTER            0x02      /* Printer device               */
        !           474: #define SCSI_PROCESSOR          0x03      /* Processor device             */
        !           475: #define SCSI_WRITEONCE          0x04      /* Write-once device            */
        !           476: #define SCSI_CDROM              0x05      /* CD-ROM device                */
        !           477: #define SCSI_SCANNER            0x06      /* Scanner device               */
        !           478: #define SCSI_OPTICAL            0x07      /* Optical memory device        */
        !           479: #define SCSI_MEDCHGR            0x08      /* Medium changer device        */
        !           480: #define SCSI_COMM               0x09      /* Communications device        */
        !           481: #define SCSI_NODEV              0x1F      /* Unknown or no device type    */
        !           482: 
        !           483: /*
        !           484: ** Inquiry flag definitions (Inq data byte 7)
        !           485: */
        !           486: 
        !           487: #define SCSI_INQ_RELADR       0x80    /* device supports relative addressing*/
        !           488: #define SCSI_INQ_WBUS32       0x40    /* device supports 32 bit data xfers  */
        !           489: #define SCSI_INQ_WBUS16       0x20    /* device supports 16 bit data xfers  */
        !           490: #define SCSI_INQ_SYNC        0x10    /* device supports synchronous xfer   */
        !           491: #define SCSI_INQ_LINKED       0x08    /* device supports linked commands    */
        !           492: #define SCSI_INQ_CMDQUEUE     0x02    /* device supports command queueing   */
        !           493: #define SCSI_INQ_SFTRE       0x01    /* device supports soft resets */
        !           494: 
        !           495: 
        !           496: /*
        !           497: ;==========================================================
        !           498: ; EEPROM byte offset
        !           499: ;==========================================================
        !           500: */
        !           501: typedef  struct  _EEprom
        !           502: {
        !           503: UCHAR  EE_MODE1;
        !           504: UCHAR  EE_SPEED;
        !           505: UCHAR  xx1;
        !           506: UCHAR  xx2;
        !           507: } EEprom, *PEEprom;
        !           508: 
        !           509: #define EE_ADAPT_SCSI_ID 64
        !           510: #define EE_MODE2       65
        !           511: #define EE_DELAY       66
        !           512: #define EE_TAG_CMD_NUM 67
        !           513: 
        !           514: /*; EE_MODE1 bits definition*/
        !           515: #define PARITY_CHK_    BIT0
        !           516: #define SYNC_NEGO_     BIT1
        !           517: #define EN_DISCONNECT_ BIT2
        !           518: #define SEND_START_    BIT3
        !           519: #define TAG_QUEUING_   BIT4
        !           520: #define WIDE_NEGO_     BIT5
        !           521: 
        !           522: /*; EE_MODE2 bits definition*/
        !           523: #define MORE2_DRV      BIT0
        !           524: #define GREATER_1G     BIT1
        !           525: #define RST_SCSI_BUS   BIT2
        !           526: #define ACTIVE_NEGATION BIT3
        !           527: #define NO_SEEK        BIT4
        !           528: #define LUN_CHECK      BIT5
        !           529: 
        !           530: #define ENABLE_CE      1
        !           531: #define DISABLE_CE     0
        !           532: #define EEPROM_READ    0x80
        !           533: 
        !           534: /*
        !           535: ;==========================================================
        !           536: ;      NCR 53C825 Registers Structure
        !           537: ;==========================================================
        !           538: */
        !           539: typedef  struct  _OperatingReg
        !           540: {
        !           541: UCHAR  SCSICtrl0;      /*; (+00)*/
        !           542: UCHAR  SCSICtrl1;      /*; (+01)*/
        !           543: UCHAR  SCSICtrl2;      /*; (+02)*/
        !           544: UCHAR  SCSICtrl3;      /*; (+03)*/
        !           545: UCHAR  SCSIChipID;     /*; (+04)*/
        !           546: UCHAR  SCSIXfer;       /*; (+05)*/
        !           547: UCHAR  SCSIDestID;     /*; (+06)*/
        !           548: UCHAR  GeneralPReg;    /*; (+07)*/
        !           549: UCHAR  SCSI1stByteR;   /*; (+08)*/
        !           550: UCHAR  SCSIOPCtrlL;    /*; (+09)*/
        !           551: UCHAR  SCSISelID;      /*; (+0A)*/
        !           552: UCHAR  SCSIBusCtrlLin; /*; (+0B)*/
        !           553: UCHAR  DMAStatus;      /*; (+0C)*/
        !           554: UCHAR  SCSIStatus0;    /*; (+0D)*/
        !           555: UCHAR  SCSIStatus1;    /*; (+0E)*/
        !           556: UCHAR  SCSIStatus2;    /*; (+0F)*/
        !           557: ULONG  DataStrucAddr;  /*; (+10)*/
        !           558: UCHAR  InterruptStatus;/*; (+14)*/
        !           559: UCHAR  Reser1;         /*; (+15)*/
        !           560: UCHAR  Reser2;         /*; (+16)*/
        !           561: UCHAR  Reser3;         /*; (+17)*/
        !           562: UCHAR  ChipTest0;      /*; (+18)*/
        !           563: UCHAR  ChipTest1;      /*; (+19)*/
        !           564: UCHAR  ChipTest2;      /*; (+1A)*/
        !           565: UCHAR  ChipTest3;      /*; (+1B)*/
        !           566: ULONG  TempStack;      /*; (+1C)*/
        !           567: UCHAR  DMAFIFO;        /*; (+20)*/
        !           568: UCHAR  ChipTest4;      /*; (+21)*/
        !           569: UCHAR  ChipTest5;      /*; (+22)*/
        !           570: UCHAR  ChipTest6;      /*; (+23)*/
        !           571: UCHAR  DMAByteCnt[3];  /*; (+24)*/
        !           572: UCHAR  DMACommand;     /*; (+27)*/
        !           573: ULONG  DMANextAddr;    /*; (+28)*/
        !           574: ULONG  DMAScriptsPtr;  /*; (+2C)*/
        !           575: ULONG  DMAScriptPtrSav;/*; (+30)*/
        !           576: ULONG  ScratchA;       /*; (+34)*/
        !           577: UCHAR  DMAMode;        /*; (+38)*/
        !           578: UCHAR  DMAIntEnable;   /*; (+39)*/
        !           579: UCHAR  DMAWatchDog;    /*; (+3A)*/
        !           580: UCHAR  DMACtrl;        /*; (+3B)*/
        !           581: ULONG  ADDer;          /*; (+3C)*/
        !           582: UCHAR  SCSIIntEnable0; /*; (+40)*/
        !           583: UCHAR  SCSIIntEnable1; /*; (+41)*/
        !           584: UCHAR  SCSIIntStatus0; /*; (+42)*/
        !           585: UCHAR  SCSIIntStatus1; /*; (+43)*/
        !           586: UCHAR  SCSILongParity; /*; (+44)*/
        !           587: UCHAR  WideResiData;   /*; (+45)*/
        !           588: UCHAR  MemAccessCtrl;  /*; (+46)*/
        !           589: UCHAR  GeneralPCtrl;   /*; (+47)*/
        !           590: UCHAR  SCSITimer0;     /*; (+48)*/
        !           591: UCHAR  SCSITimer1;     /*; (+49)*/
        !           592: UCHAR  ResponseID0;    /*; (+4A)*/
        !           593: UCHAR  ResponseID1;    /*; (+4B)*/
        !           594: UCHAR  SCSITest0;      /*; (+4C)*/
        !           595: UCHAR  SCSITest1;      /*; (+4D)*/
        !           596: UCHAR  SCSITest2;      /*; (+4E)*/
        !           597: UCHAR  SCSITest3;      /*; (+4F)*/
        !           598: USHORT SCSIIPDataL;    /*; (+50)*/
        !           599: USHORT Reser4;         /*; (+52)*/
        !           600: USHORT SCSIOPDataL;    /*; (+54)*/
        !           601: USHORT Reser5;         /*; (+56)*/
        !           602: USHORT SCSIBusDataLin; /*; (+58)*/
        !           603: USHORT Reser6;         /*; (+5A)*/
        !           604: ULONG  ScratchB;       /*; (+5C)*/
        !           605: ULONG  ScratchC;       /*; (+60)*/
        !           606: ULONG  ScratchD;       /*; (+64)*/
        !           607: ULONG  ScratchE;       /*; (+68)*/
        !           608: ULONG  ScratchF;       /*; (+6C)*/
        !           609: ULONG  ScratchG;       /*; (+70)*/
        !           610: ULONG  ScratchH;       /*; (+74)*/
        !           611: ULONG  ScratchI;       /*; (+78)*/
        !           612: ULONG  ScratchJ;       /*; (+7C)*/
        !           613: } OperatingReg;
        !           614: /*
        !           615: ;==========================================================
        !           616: ;      NCR 53C825 Registers bit Definition
        !           617: ;==========================================================
        !           618: */
        !           619: /*; SCSICtrl0        (+00)*/
        !           620: #define FULL_ARBITRATION   (BIT7+BIT6)
        !           621: #define START_ARBIT       BIT5
        !           622: #define SEL_W_SATN        BIT4
        !           623: #define EN_PARITY_CHK     BIT3
        !           624: #define SATN_IF_PARITY_ERR BIT1
        !           625: #define TARGET_MODE       BIT0
        !           626: 
        !           627: /*; SCSICtrl1        (+01)*/
        !           628: #define ASSERT_RST     BIT3
        !           629: #define ASSERT_EVEN_P  BIT2
        !           630: #define START_SCSI_XFER BIT0
        !           631: 
        !           632: /*; SCSICtrl2        (+02)*/
        !           633: #define DISC_UNEXPECTED BIT7
        !           634: #define CHAIN_MODE     BIT6
        !           635: #define WIDE_SCSI_SEND BIT3
        !           636: #define WIDE_SCSI_RECV BIT0
        !           637: 
        !           638: /*; SCSICtrl3        (+03)*/
        !           639: #define EN_FAST_20     BIT7
        !           640: #define SYNC_CLK_F4    (BIT6+BIT4)
        !           641: #define SYNC_CLK_F3    BIT6
        !           642: #define SYNC_CLK_F2    (BIT5+BIT4)
        !           643: #define SYNC_CLK_F1_5  BIT5
        !           644: #define SYNC_CLK_F1    BIT4
        !           645: #define EN_WIDE_SCSI   BIT3
        !           646: #define ASYNC_CLK_F4   (BIT2+BIT0)
        !           647: #define ASYNC_CLK_F3   BIT2
        !           648: #define ASYNC_CLK_F2   (BIT1+BIT0)
        !           649: #define ASYNC_CLK_F1_5 BIT1
        !           650: #define ASYNC_CLK_F1   BIT0
        !           651: 
        !           652: /*; SCSIChipID       (+04)*/
        !           653: #define ENABLE_RESEL   BIT6
        !           654: #define ENABLE_SEL     BIT5
        !           655: #define CHIP_ID_MASK   0FH
        !           656: 
        !           657: /*; SCSIXfer         (+05)*/
        !           658: #define PERIOD_MASK    (BIT7+BIT6+BIT5)
        !           659: #define SYNC_PERIOD_F11 (BIT7+BIT6+BIT5)
        !           660: #define SYNC_PERIOD_F10 (BIT7+BIT6)
        !           661: #define SYNC_PERIOD_F9 (BIT7+BIT5)
        !           662: #define SYNC_PERIOD_F8 BIT7
        !           663: #define SYNC_PERIOD_F7 (BIT6+BIT5)
        !           664: #define SYNC_PERIOD_F6 BIT6
        !           665: #define SYNC_PERIOD_F5 BIT5
        !           666: #define SYNC_PERIOD_F4 0
        !           667: #define OFFSET_MASK    (BIT4+BIT3+BIT2+BIT1+BIT0)
        !           668: #define SYNC_OFFSET_16 BIT4
        !           669: #define SYNC_OFFSET_8  BIT3
        !           670: #define SYNC_OFFSET_7  (BIT2+BIT1+BIT0)
        !           671: #define SYNC_OFFSET_6  (BIT2+BIT1)
        !           672: #define SYNC_OFFSET_5  (BIT2+BIT0)
        !           673: #define SYNC_OFFSET_4  BIT2
        !           674: #define SYNC_OFFSET_3  (BIT1+BIT0)
        !           675: #define SYNC_OFFSET_2  BIT1
        !           676: #define SYNC_OFFSET_1  BIT0
        !           677: #define SYNC_OFFSET_0  0
        !           678: #define ASYNCHRONOUS   SYNC_OFFSET_0
        !           679: /*
        !           680: ; SCSIDestID       (+06)
        !           681: 
        !           682: ; GeneralPReg      (+07)
        !           683: 
        !           684: ; SCSI1stByteR     (+08)
        !           685: */
        !           686: /*; SCSIOPCtrlL       (+09)*/
        !           687: #define ASSERT_REQ     BIT7
        !           688: #define ASSERT_ACK     BIT6
        !           689: #define ASSERT_BSY     BIT5
        !           690: #define ASSERT_SEL     BIT4
        !           691: #define ASSERT_ATN     BIT3
        !           692: #define ASSERT_MSG     BIT2
        !           693: #define ASSERT_C_D     BIT1
        !           694: #define ASSERT_I_O     BIT0
        !           695: 
        !           696: /*; SCSISelID        (+0A)       Read*/
        !           697: #define SCSI_ID_VALID  BIT7
        !           698: 
        !           699: /*; SCSIBusCtrlLin    (+0B)      Read*/
        !           700: #define REQ_SIGNAL     BIT7
        !           701: #define ACK_SIGNAL     BIT6
        !           702: #define BSY_SIGNAL     BIT5
        !           703: #define SEL_SIGNAL     BIT4
        !           704: #define ATN_SIGNAL     BIT3
        !           705: #define MSG_SIGNAL     BIT2
        !           706: #define C_D_SIGNAL     BIT1
        !           707: #define I_O_SIGNAL     BIT0
        !           708: 
        !           709: /*; DMAStatus        (+0C)       Read*/
        !           710: #define DMA_FIFO_EMPTY BIT7
        !           711: #define MASTER_PARITY_ERR BIT6
        !           712: #define BUS_FAULT      BIT5
        !           713: #define ABORT_         BIT4
        !           714: #define SINGLE_STEP_INT BIT3
        !           715: #define SCRIPTS_INT    BIT2
        !           716: #define ILLEGAL_INSTRUC BIT0
        !           717: 
        !           718: /*; SCSIStatus0       (+0D)      Read*/
        !           719: #define SIDL_LSB_FULL  BIT7
        !           720: #define SODR_LSB_FULL  BIT6
        !           721: #define SODL_LSB_FULL  BIT5
        !           722: #define IN_ARBITRATION BIT4
        !           723: #define LOST_ARBITRATION BIT3
        !           724: #define WIN_ARBITRATION BIT2
        !           725: #define RST_SIGNAL     BIT1
        !           726: #define PARITY_SIGNAL  BIT0
        !           727: 
        !           728: /*; SCSIStatus1       (+0E)      Read*/
        !           729: #define SCSI_FIFO_MASK (BIT7+BIT6+BIT5+BIT4)
        !           730: 
        !           731: /*; SCSIStatus2       (+0F)      Read*/
        !           732: #define SIDL_MSB_FULL  BIT7
        !           733: #define SODR_MSB_FULL  BIT6
        !           734: #define SODL_MSB_FULL  BIT5
        !           735: #define SCSI_FIFO_MSB  BIT4
        !           736: 
        !           737: /*; DataStrucAddr     (+10)*/
        !           738: 
        !           739: /*; InterruptStatus   (+14)*/
        !           740: #define ABORT_OP       BIT7
        !           741: #define SOFTWARE_RST   BIT6
        !           742: #define SIGNAL_PROC    BIT5
        !           743: #define SEMAPHORE      BIT4
        !           744: #define CONNECTED      BIT3
        !           745: #define INT_ON_FLY     BIT2
        !           746: #define SCSI_INT_PENDING BIT1
        !           747: #define DMA_INT_PENDING BIT0
        !           748: 
        !           749: /*; ChipTest0        (+18)*/
        !           750: /*; ChipTest1        (+19)*/
        !           751: #define FIFO_BYTE_EMPTY (BIT7+BIT6+BIT5+BIT4)
        !           752: #define FIFO_BYTE_FULL (BIT3+BIT2+BIT1+BIT0)
        !           753: 
        !           754: /*; ChipTest2        (+1A)*/
        !           755: #define READ_DIR       BIT7
        !           756: #define WRITE_DIR      0
        !           757: #define SIGNAL_PROC_   BIT6
        !           758: #define CFG_AS_IO_MAP  BIT5
        !           759: #define CFG_AS_MEM_MAP BIT4
        !           760: #define SCRATCHAB_AS_BASE BIT3
        !           761: #define TRUE_EOP       BIT2
        !           762: #define INTERNAL_DREQ  BIT1
        !           763: #define INTERNAL_DACK  BIT0
        !           764: 
        !           765: /*; ChipTest3        (+1B)*/
        !           766: #define CHIP_REV_MASK  (BIT7+BIT6+BIT5+BIT4)
        !           767: #define FLUSH_DMA_FIFO BIT3
        !           768: #define CLR_DMA_FIFO   BIT2
        !           769: #define FETCH_PIN_MODE BIT1
        !           770: #define WRT_EN_INVALIDATE BIT0
        !           771: 
        !           772: /*; TempStack        (+1C)*/
        !           773: 
        !           774: /*; DMAFIFO          (+20)*/
        !           775: /*; 2 upper bits in ChipTest5*/
        !           776: 
        !           777: /*; ChipTest4        (+21)*/
        !           778: #define BURST_DISABLE  BIT7
        !           779: 
        !           780: /*; ChipTest5        (+22) */
        !           781: #define EN_DMA_FIFO_536 BIT5
        !           782: #define BURST_LEN_MSB  BIT2
        !           783: #define DMAFIFO_MS2B   (BIT1+BIT0)
        !           784: /*
        !           785: ; ChipTest6        (+23)
        !           786: ; DMAByteCnt       (+24)
        !           787: ; DMACommand       (+27)
        !           788: ; DMANextAddr      (+28)
        !           789: ; DMAScriptsPtr     (+2C)
        !           790: ; DMAScriptPtrSav   (+30)
        !           791: */
        !           792: /*; ScratchA         (+34)*/
        !           793: #define COMPLETED_OK_  BIT0
        !           794: #define RE_SELECTED_   BIT1
        !           795: #define OVER_RUN_      BIT2
        !           796: 
        !           797: /*; DMAMode          (+38)*/
        !           798: #define BURST_LEN16    (BIT7+BIT6)
        !           799: #define BURST_LEN8     BIT7
        !           800: #define BURST_LEN4     BIT6
        !           801: #define BURST_LEN2     0
        !           802: #define SRC_IO_MAP     BIT5
        !           803: #define SRC_MEM_MAP    0
        !           804: #define DEST_IO_MAP    BIT4
        !           805: #define DEST_MEM_MAP   0
        !           806: #define EN_READ_LINE   BIT3
        !           807: #define EN_READ_MULTIPLE BIT2
        !           808: #define BURST_OPCODE_FETCH BIT1
        !           809: #define MANUAL_START   BIT0
        !           810: #define AUTO_START     0
        !           811: 
        !           812: /*; DMAIntEnable      (+39)*/
        !           813: #define EN_MDPE        BIT6
        !           814: #define EN_BUS_FAULT   BIT5
        !           815: #define EN_ABORTED     BIT4
        !           816: #define EN_SINGLE_STEP BIT3
        !           817: #define EN_SCRIPT_INT  BIT2
        !           818: #define EN_ILLEGAL_INST BIT0
        !           819: 
        !           820: 
        !           821: /*; DMAWatchDog       (+3A)*/
        !           822: 
        !           823: /*; DMACtrl          (+3B)*/
        !           824: #define EN_CACHE_LINE_SIZE BIT7
        !           825: #define PRE_FETCH_FLUSH BIT6
        !           826: #define EN_PRE_FETCH   BIT5
        !           827: #define SINGLE_STEP_MIDE BIT4
        !           828: #define TOTEM_POLE_IRQ BIT3
        !           829: #define OPEN_DRAIN_IRQ 0
        !           830: #define START_DMA      BIT2
        !           831: #define IRQ_DISABLE    BIT1
        !           832: #define COMPATIBLE_700 BIT0
        !           833: 
        !           834: /*; ADDer            (+3C)*/
        !           835: 
        !           836: /*; SCSIIntEnable0    (+40)*/
        !           837: #define EN_PHASE_MISMATCH BIT7
        !           838: #define EN_ARB_SEL_DONE BIT6
        !           839: #define EN_BE_SELECTED BIT5
        !           840: #define EN_BE_RESELECTED BIT4
        !           841: #define EN_SCSI_GERROR BIT3
        !           842: #define EN_UNEXPECT_DISC BIT2
        !           843: #define EN_SCSI_RESET  BIT1
        !           844: #define EN_PARITY_ERROR BIT0
        !           845: 
        !           846: /*; SCSIIntEnable1    (+41)*/
        !           847: #define EN_SEL_TIMEOUT BIT2
        !           848: #define EN_GENERAL_TIMEOUT BIT1
        !           849: #define EN_HANDSHAKE_TIMEOUT  BIT0
        !           850: 
        !           851: /*; SCSIIntStatus0    (+42)*/
        !           852: #define PHASE_MISMATCH BIT7
        !           853: #define ARB_SEL_DONE   BIT6
        !           854: #define BE_SELECTED    BIT5
        !           855: #define BE_RESELECTED  BIT4
        !           856: #define SCSI_GERROR    BIT3
        !           857: #define UNEXPECT_DISC  BIT2
        !           858: #define SCSI_RESET     BIT1
        !           859: #define PARITY_ERROR   BIT0
        !           860: 
        !           861: /*; SCSIIntStatus1    (+43)*/
        !           862: #define SEL_TIMEOUT    BIT2
        !           863: #define GENERAL_TIMEOUT BIT1
        !           864: #define HANDSHAKE_TIMEOUT BIT0
        !           865: /*
        !           866: ; SCSILongParity    (+44)
        !           867: ; WideResiData     (+45)
        !           868: ; MemAccessCtrl     (+46)
        !           869: ; GeneralPCtrl     (+47)
        !           870: */
        !           871: /*; SCSITimer0       (+48)*/
        !           872: #define HTH_TO_DISABLE 0
        !           873: #define SEL_TO_204ms   (BIT3+BIT2)
        !           874: /*
        !           875: ; SCSITimer1       (+49)
        !           876: ; ResponseID0      (+4A)
        !           877: ; ResponseID1      (+4B)
        !           878: ; SCSITest0        (+4C)
        !           879: ; SCSITest1        (+4D)
        !           880: ; SCSITest2        (+4E)
        !           881: */
        !           882: /*; SCSITest3        (+4F)*/
        !           883: #define ACTIVE_NEGATION_ BIT7
        !           884: #define FIFO_TEST_READ BIT6
        !           885: #define HALT_SCSI_CLK  BIT5
        !           886: #define DIS_SINGLE_INIT BIT4
        !           887: #define TIMER_TEST_MODE BIT2
        !           888: #define CLR_SCSI_FIFO  BIT1
        !           889: #define FIFO_TEST_WRITE BIT0
        !           890: /*
        !           891: ; SCSIIPDataL      (+50)
        !           892: ; SCSIOPDataL      (+54)
        !           893: ; SCSIBusDataLin    (+58)
        !           894: ; ScratchB         (+5C)
        !           895: ; ScratchC         (+60)
        !           896: ; ScratchD         (+64)
        !           897: ; ScratchE         (+68)
        !           898: ; ScratchF         (+6C)
        !           899: ; ScratchG         (+70)
        !           900: ; ScratchH         (+74)
        !           901: ; ScratchI         (+78)
        !           902: ; ScratchJ         (+7C)
        !           903: */
        !           904: 
        !           905: /***********************************************************************
        !           906:  * NCR53C825  I/O Address Map
        !           907:  * base address is stored at offset 0x10 in the PCI configuration space
        !           908:  *-----------------------------------------------------------------------
        !           909:  *     SCSI Core Registers Offset
        !           910:  ***********************************************************************/
        !           911: #define  SCNTL0    0x00   /* Scsi Control 0                R/W */
        !           912: #define  SCNTL1    0x01   /* Scsi Control 1                R/W */
        !           913: #define  SCNTL2    0x02   /* Scsi Control 2                R/W */
        !           914: #define  SCNTL3    0x03   /* Scsi Control 3                R/W */
        !           915: #define  SCID     0x04   /* Scsi Chip ID                   R/W */
        !           916: #define  SXFER    0x05   /* Scsi Transfer                  R/W */
        !           917: #define  SDID     0x06   /* Scsi Destination ID            R/W */
        !           918: #define  GPREG    0x07   /* General Purpose Bits           R/W */
        !           919: #define  SFBR     0x08   /* Scsi First Byte Received       R/W */
        !           920: #define  SOCL     0x09   /* Scsi Output Control Latch      R/W */
        !           921: #define  SSID     0x0A   /* Scsi Selector ID               R   */
        !           922: #define  SBCL     0x0B   /* Scsi Bus Control Lines         R/W */
        !           923: #define  DSTAT    0x0C   /* DMA Status                     R   */
        !           924: #define  SSTAT0    0x0D   /* Scsi Status 0                 R   */
        !           925: #define  SSTAT1    0x0E   /* Scsi Status 1                 R   */
        !           926: #define  SSTAT2    0x0F   /* Scsi Status 2                 R   */
        !           927: #define  DSA      0x10   /* Data Structure Address         R/W */
        !           928: #define  ISTAT    0x14   /* Interrupt Status               R/W */
        !           929: #define  RES15    0x15   /* Reserved                           */
        !           930: #define  CTEST0    0x18   /* Reserved                          */
        !           931: #define  CTEST1    0x19   /* Chip Test 1                   R/W */
        !           932: #define  CTEST2    0x1A   /* Chip Test 2                   R   */
        !           933: #define  CTEST3    0x1B   /* Chip Test 3                   R   */
        !           934: #define  TEMP     0x1C   /* Temperary Stack                R/W */
        !           935: #define  DFIFO    0x20   /* DMA FIFO                       R/W */
        !           936: #define  CTEST4    0x21   /* Chip Test 4                   R/W */
        !           937: #define  CTEST5    0x22   /* Chip Test 5                   R/W */
        !           938: #define  CTEST6    0x23   /* Chip Test 6                   R/W */
        !           939: #define  DBC      0x24   /* DMA Byte Counter               R/W */
        !           940: #define  DCMD     0x27   /* DMA Command                    R/W */
        !           941: #define  DNAD     0x28   /* DMA Next Address For Data      R/W */
        !           942: #define  DSP      0x2C   /* DMA SCIPTS Pointer             R/W */
        !           943: #define  DSPS     0x30   /* DMA SCIPTS Pointer Saves       R/W */
        !           944: #define  SCRATCHA  0x34   /* General Purpose Scratch Pad A  R/W */
        !           945: #define  DMODE    0x38   /* DMA Mode                       R/W */
        !           946: #define  DIEN     0x39   /* DMA Interrupt Enable           R/W */
        !           947: #define  DWT      0x3A   /* DMA Watchdog Timer             R/W */
        !           948: #define  DCNTL    0x3B   /* DMA Control                    R/W */
        !           949: #define  ADDER    0x3C   /* Sum output of Internal adder   R   */
        !           950: #define  SIEN0    0x40   /* Scsi Interrupt Enable 0        R/W */
        !           951: #define  SIEN1    0x41   /* Scsi Interrupt Enable 1        R/W */
        !           952: #define  SIST0    0x42   /* Scsi Interrupt Status 0        R   */
        !           953: #define  SIST1    0x43   /* Scsi Interrupt Status 1        R   */
        !           954: #define  SLPAR    0x44   /* Scsi Longitudinal Parity       R/W */
        !           955: #define  SWIDE    0x45   /* Reserved                           */
        !           956: #define  MACNTL    0x46   /* Memory Access Control         R/W */
        !           957: #define  GPCNTL    0x47   /* General Purpose Control       R/W */
        !           958: #define  STIME0    0x48   /* Scsi Timer 0                  R/W */
        !           959: #define  STIME1    0x49   /* Scsi Timer 1                  R/W */
        !           960: #define  RESPID0   0x4A   /* Response ID 0                 R/W */
        !           961: #define  RESPID1   0x4B   /* Response ID 1                 R/W */
        !           962: #define  STEST0    0x4C   /* Scsi Test 0                   R   */
        !           963: #define  STEST1    0x4D   /* Scsi Test 1                   R   */
        !           964: #define  STEST2    0x4E   /* Scsi Test 2                   R/W */
        !           965: #define  STEST3    0x4F   /* Scsi Test 3                   R/W */
        !           966: #define  SIDL     0x50   /* Scsi Input Data Latch          R   */
        !           967: #define  RES51    0x51   /* Reserved                           */
        !           968: #define  SODL     0x54   /* Scsi Output Data Latch         R/W */
        !           969: #define  RES55    0x55   /* Reserved                           */
        !           970: #define  SBDL     0x58   /* Scsi Bus Data Lines            R   */
        !           971: #define  RES59    0x59   /* Reserved                           */
        !           972: #define  SCRATCHB  0x5C   /* General Purpose Scratch Pad B  R/W */
        !           973: 
        !           974: 
        !           975: /*
        !           976: ;==========================================================
        !           977: ; structure for 53C825A register ( I/O )
        !           978: ;==========================================================
        !           979: */
        !           980: #define __scntl0       0
        !           981: #define __scntl1       1
        !           982: #define __scntl2       2
        !           983: #define __scntl3       3
        !           984: #define __scid         4
        !           985: #define __sxfer        5
        !           986: #define __sdid         6
        !           987: #define __gpreg        7
        !           988: #define __sfbr         8
        !           989: #define __socl         9
        !           990: #define __ssid         0x0A
        !           991: #define __sbcl         0x0B
        !           992: #define __dstat        0x0C
        !           993: #define __sstat0       0x0D
        !           994: #define __sstat1       0x0E
        !           995: #define __sstat2       0x0F
        !           996: #define __dsa          0x10
        !           997: #define __istat        0x14
        !           998: /*#define              0x15*/
        !           999: #define __ctest0       0x18
        !          1000: #define __ctest1       0x19
        !          1001: #define __ctest2       0x1A
        !          1002: #define __ctest3       0x1B
        !          1003: #define __temp         0x1C
        !          1004: #define __dfifo        0x20
        !          1005: #define __ctest4       0x21
        !          1006: #define __ctest5       0x22
        !          1007: #define __ctest6       0x23
        !          1008: #define __dbc          0x24
        !          1009: #define __dcmd         0x27
        !          1010: #define __dnad         0x28
        !          1011: #define __dsp          0x2C
        !          1012: #define __dsps         0x30
        !          1013: #define __scratcha     0x34
        !          1014: #define __dmode        0x38
        !          1015: #define __dien         0x39
        !          1016: #define __dwt          0x3A
        !          1017: #define __dcntl        0x3B
        !          1018: #define __adder        0x3C
        !          1019: #define __sien0        0x40
        !          1020: #define __sien1        0x41
        !          1021: #define __sist0        0x42
        !          1022: #define __sist1        0x43
        !          1023: #define __slpar        0x44
        !          1024: #define __swide        0x45
        !          1025: #define __mactrl       0x46
        !          1026: #define __gpctrl       0x47
        !          1027: #define __stime0       0x48
        !          1028: #define __stime1       0x49
        !          1029: #define __respid0      0x4A
        !          1030: #define __respid1      0x4B
        !          1031: #define __stest0       0x4C
        !          1032: #define __stest1       0x4D
        !          1033: #define __stest2       0x4E
        !          1034: #define __stest3       0x4F
        !          1035: #define __sidl         0x50   /*; For wide SCSI, this register*/
        !          1036: /*#define              0x51     ; contains 2 bytes*/
        !          1037: #define __sodl         0x54
        !          1038: /*#define              0x55*/
        !          1039: #define __sbdl         0x58
        !          1040: /*#define              0x59*/
        !          1041: #define __scratchb     0x5C
        !          1042: /*
        !          1043: ;==========================================================
        !          1044: ; Script interrupt code(Vector)
        !          1045: ;==========================================================
        !          1046: */
        !          1047: #define __COMPLETE     0       /*; command complete*/
        !          1048: #define __RESELECTED   1       /*; reselected, without MESSAGE*/
        !          1049: #define __RESELECTED1  2       /*; reselected with idenntify bytes*/
        !          1050: #define __RESELECTEDT  3       /*; reselected with TAGS*/
        !          1051: #define __DISCONNECTED 4       /*; disconnected*/
        !          1052: #define __MSGEXTEND    5       /*; Extended msgin*/
        !          1053: #define __SIGNAL       6       /*; signaled, need to clear SIG*/
        !          1054: #define __MSGUNKNOWN   7       /*; Unknown message*/
        !          1055: #define __MSGOUT       8       /*; Message out phase detected*/
        !          1056: #define __FATALERROR   9       /*; Fatal error*/
        !          1057: #define __MSGSYNC      10      /*; Sync nego input*/
        !          1058: #define __MSGWIDE      11      /*; Wide nego input*/
        !          1059: #define __RESTOREPTR   12      /*; restore pointer received*/
        !          1060: #define __MSGREJECT    13      /*; Reject message received*/
        !          1061: #define __DEBUG        14      /*; For debug*/
        !          1062: 
        !          1063: 
        !          1064: #define DC390W_read8(address)                          \
        !          1065:        inb(DC390W_ioport + (address)))
        !          1066: 
        !          1067: #define DC390W_read16(address)                         \
        !          1068:        inw(DC390W_ioport + (address)))
        !          1069: 
        !          1070: #define DC390W_read32(address)                         \
        !          1071:        inl(DC390W_ioport + (address)))
        !          1072: 
        !          1073: #define DC390W_write8(address,value)                   \
        !          1074:        outb((value), DC390W_ioport + (address)))
        !          1075: 
        !          1076: #define DC390W_write16(address,value)                  \
        !          1077:        outw((value), DC390W_ioport + (address)))
        !          1078: 
        !          1079: #define DC390W_write32(address,value)                  \
        !          1080:        outl((value), DC390W_ioport + (address)))
        !          1081: 
        !          1082: #endif /* TMSCSIW_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.