Annotation of Gnu-Mach/linux/src/drivers/scsi/tmscsim.h, revision 1.1.1.1

1.1       root        1: /***********************************************************************
                      2: ;*     File Name : TMSCSIM.H                                          *
                      3: ;*                 TEKRAM DC-390(T) PCI SCSI Bus Master Host Adapter  *
                      4: ;*                 Device Driver                                      *
                      5: ;***********************************************************************/
                      6: 
                      7: #ifndef TMSCSIM_H
                      8: #define TMSCSIM_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: /*;-----------------------------------------------------------------------*/
                     29: typedef  struct  _SyncMsg
                     30: {
                     31: UCHAR          ExtendMsg;
                     32: UCHAR          ExtMsgLen;
                     33: UCHAR          SyncXferReq;
                     34: UCHAR          Period;
                     35: UCHAR          ReqOffset;
                     36: } SyncMsg;
                     37: /*;-----------------------------------------------------------------------*/
                     38: typedef  struct  _Capacity
                     39: {
                     40: ULONG          BlockCount;
                     41: ULONG          BlockLength;
                     42: } Capacity;
                     43: /*;-----------------------------------------------------------------------*/
                     44: typedef  struct  _SGentry
                     45: {
                     46: ULONG          SGXferDataPtr;
                     47: ULONG          SGXferDataLen;
                     48: } SGentry;
                     49: 
                     50: typedef  struct  _SGentry1
                     51: {
                     52: ULONG          SGXLen;
                     53: ULONG          SGXPtr;
                     54: } SGentry1, *PSGE;
                     55: 
                     56: 
                     57: #define MAX_ADAPTER_NUM        4
                     58: #define MAX_DEVICES            10
                     59: #define MAX_SG_LIST_BUF        16
                     60: #define MAX_CMD_QUEUE          20
                     61: #define MAX_CMD_PER_LUN        8
                     62: #define MAX_SCSI_ID            8
                     63: #define MAX_SRB_CNT            MAX_CMD_QUEUE+4
                     64: #define END_SCAN               2
                     65: 
                     66: #define SEL_TIMEOUT            153     /* 250 ms selection timeout (@ 40 MHz) */
                     67: 
                     68: /*
                     69: ;-----------------------------------------------------------------------
                     70: ; SCSI Request Block
                     71: ;-----------------------------------------------------------------------
                     72: */
                     73: struct _SRB
                     74: {
                     75: UCHAR          CmdBlock[12];
                     76: 
                     77: struct _SRB    *pNextSRB;
                     78: struct _DCB    *pSRBDCB;
                     79: PSCSICMD       pcmd;
                     80: PSGL           pSegmentList;
                     81: 
                     82: ULONG          PhysSRB;
                     83: ULONG          TotalXferredLen;
                     84: ULONG          SGPhysAddr;     /*;a segment starting address */
                     85: ULONG          SGToBeXferLen;  /*; to be xfer length */
                     86: 
                     87: SGL            Segmentx;       /* make a one entry of S/G list table */
                     88: 
                     89: PUCHAR         pMsgPtr;
                     90: USHORT         SRBState;
                     91: USHORT         Revxx2;         /* ??? */
                     92: 
                     93: UCHAR          MsgInBuf[6];
                     94: UCHAR          MsgOutBuf[6];
                     95: 
                     96: UCHAR          AdaptStatus;
                     97: UCHAR          TargetStatus;
                     98: UCHAR          MsgCnt;
                     99: UCHAR          EndMessage;
                    100: UCHAR          TagNumber;
                    101: UCHAR          SGcount;
                    102: UCHAR          SGIndex;
                    103: UCHAR          IORBFlag;       /*;81h-Reset, 2-retry */
                    104: 
                    105: UCHAR          SRBStatus;
                    106: UCHAR          RetryCnt;
                    107: UCHAR          SRBFlag;        /*; b0-AutoReqSense,b6-Read,b7-write */
                    108:                                /*; b4-settimeout,b5-Residual valid */
                    109: UCHAR          ScsiCmdLen;
                    110: UCHAR          ScsiPhase;
                    111: UCHAR          Reserved3[3];   /*;for dword alignment */
                    112: ULONG          Segment0[2];
                    113: ULONG          Segment1[2];
                    114: };
                    115: 
                    116: typedef  struct  _SRB   DC390_SRB, *PSRB;
                    117: 
                    118: /*
                    119: ;-----------------------------------------------------------------------
                    120: ; Device Control Block
                    121: ;-----------------------------------------------------------------------
                    122: */
                    123: struct _DCB
                    124: {
                    125: struct _DCB    *pNextDCB;
                    126: struct _ACB    *pDCBACB;
                    127: 
                    128: PSCSICMD       pQIORBhead;
                    129: PSCSICMD       pQIORBtail;
                    130: PSCSICMD       AboIORBhead;
                    131: PSCSICMD       AboIORBtail;
                    132: USHORT         QIORBCnt;
                    133: USHORT         AboIORBcnt;
                    134: 
                    135: PSRB           pWaitingSRB;
                    136: PSRB           pWaitLast;
                    137: PSRB           pGoingSRB;
                    138: PSRB           pGoingLast;
                    139: PSRB           pActiveSRB;
                    140: USHORT         GoingSRBCnt;
                    141: USHORT         WaitSRBCnt;     /* ??? */
                    142: 
                    143: ULONG          TagMask;
                    144: 
                    145: USHORT         MaxCommand;
                    146: USHORT         AdaptIndex;     /*; UnitInfo struc start */
                    147: USHORT         UnitIndex;      /*; nth Unit on this card */
                    148: UCHAR          UnitSCSIID;     /*; SCSI Target ID  (SCSI Only) */
                    149: UCHAR          UnitSCSILUN;    /*; SCSI Log.  Unit (SCSI Only) */
                    150: 
                    151: UCHAR          IdentifyMsg;
                    152: UCHAR          CtrlR1;
                    153: UCHAR          CtrlR3;
                    154: UCHAR          CtrlR4;
                    155: 
                    156: UCHAR          InqDataBuf[8];
                    157: UCHAR          CapacityBuf[8];
                    158: UCHAR          DevMode;
                    159: UCHAR          AdpMode;
                    160: UCHAR          SyncMode;       /*; 0:async mode */
                    161: UCHAR          NegoPeriod;     /*;for nego. */
                    162: UCHAR          SyncPeriod;     /*;for reg. */
                    163: UCHAR          SyncOffset;     /*;for reg. and nego.(low nibble) */
                    164: UCHAR          UnitCtrlFlag;
                    165: UCHAR          DCBFlag;
                    166: UCHAR          DevType;
                    167: UCHAR          Reserved2[3];   /*;for dword alignment */
                    168: };
                    169: 
                    170: typedef  struct  _DCB   DC390_DCB, *PDCB;
                    171: /*
                    172: ;-----------------------------------------------------------------------
                    173: ; Adapter Control Block
                    174: ;-----------------------------------------------------------------------
                    175: */
                    176: struct _ACB
                    177: {
                    178: ULONG          PhysACB;
                    179: PSH            pScsiHost;
                    180: struct _ACB    *pNextACB;
                    181: USHORT         IOPortBase;
                    182: USHORT         Revxx1;         /* ??? */
                    183: 
                    184: PDCB           pLinkDCB;
                    185: PDCB           pDCBRunRobin;
                    186: PDCB           pActiveDCB;
                    187: PDCB           pDCB_free;
                    188: PSRB           pFreeSRB;
                    189: PSRB           pTmpSRB;
                    190: USHORT         SRBCount;
                    191: USHORT         AdapterIndex;   /*; nth Adapter this driver */
                    192: USHORT         max_id;
                    193: USHORT         max_lun;
                    194: 
                    195: UCHAR          msgin123[4];
                    196: UCHAR          status;
                    197: UCHAR          AdaptSCSIID;    /*; Adapter SCSI Target ID */
                    198: UCHAR          AdaptSCSILUN;   /*; Adapter SCSI LUN */
                    199: UCHAR          DeviceCnt;
                    200: UCHAR          IRQLevel;
                    201: UCHAR          TagMaxNum;
                    202: UCHAR          ACBFlag;
                    203: UCHAR          Gmode2;
                    204: UCHAR          LUNchk;
                    205: UCHAR          scan_devices;
                    206: UCHAR          HostID_Bit;
                    207: UCHAR          Reserved1[1];   /*;for dword alignment */
                    208: UCHAR          DCBmap[MAX_SCSI_ID];
                    209: DC390_DCB      DCB_array[MAX_DEVICES];         /* +74h,  Len=3E8 */
                    210: DC390_SRB      SRB_array[MAX_SRB_CNT];         /* +45Ch, Len=  */
                    211: DC390_SRB      TmpSRB;
                    212: };
                    213: 
                    214: typedef  struct  _ACB   DC390_ACB, *PACB;
                    215: 
                    216: /*;-----------------------------------------------------------------------*/
                    217: 
                    218: 
                    219: #define BIT31  0x80000000
                    220: #define BIT30  0x40000000
                    221: #define BIT29  0x20000000
                    222: #define BIT28  0x10000000
                    223: #define BIT27  0x08000000
                    224: #define BIT26  0x04000000
                    225: #define BIT25  0x02000000
                    226: #define BIT24  0x01000000
                    227: #define BIT23  0x00800000
                    228: #define BIT22  0x00400000
                    229: #define BIT21  0x00200000
                    230: #define BIT20  0x00100000
                    231: #define BIT19  0x00080000
                    232: #define BIT18  0x00040000
                    233: #define BIT17  0x00020000
                    234: #define BIT16  0x00010000
                    235: #define BIT15  0x00008000
                    236: #define BIT14  0x00004000
                    237: #define BIT13  0x00002000
                    238: #define BIT12  0x00001000
                    239: #define BIT11  0x00000800
                    240: #define BIT10  0x00000400
                    241: #define BIT9   0x00000200
                    242: #define BIT8   0x00000100
                    243: #define BIT7   0x00000080
                    244: #define BIT6   0x00000040
                    245: #define BIT5   0x00000020
                    246: #define BIT4   0x00000010
                    247: #define BIT3   0x00000008
                    248: #define BIT2   0x00000004
                    249: #define BIT1   0x00000002
                    250: #define BIT0   0x00000001
                    251: 
                    252: /*;---UnitCtrlFlag */
                    253: #define UNIT_ALLOCATED BIT0
                    254: #define UNIT_INFO_CHANGED BIT1
                    255: #define FORMATING_MEDIA BIT2
                    256: #define UNIT_RETRY     BIT3
                    257: 
                    258: /*;---UnitFlags */
                    259: #define DASD_SUPPORT   BIT0
                    260: #define SCSI_SUPPORT   BIT1
                    261: #define ASPI_SUPPORT   BIT2
                    262: 
                    263: /*;----SRBState machine definition */
                    264: #define SRB_FREE       0
                    265: #define SRB_WAIT       BIT0
                    266: #define SRB_READY      BIT1
                    267: #define SRB_MSGOUT     BIT2    /*;arbitration+msg_out 1st byte*/
                    268: #define SRB_MSGIN      BIT3
                    269: #define SRB_MSGIN_MULTI BIT4
                    270: #define SRB_COMMAND    BIT5
                    271: #define SRB_START_     BIT6    /*;arbitration+msg_out+command_out*/
                    272: #define SRB_DISCONNECT BIT7
                    273: #define SRB_DATA_XFER  BIT8
                    274: #define SRB_XFERPAD    BIT9
                    275: #define SRB_STATUS     BIT10
                    276: #define SRB_COMPLETED  BIT11
                    277: #define SRB_ABORT_SENT BIT12
                    278: #define DO_SYNC_NEGO   BIT13
                    279: #define SRB_UNEXPECT_RESEL BIT14
                    280: 
                    281: /*;---ACBFlag */
                    282: #define RESET_DEV      BIT0
                    283: #define RESET_DETECT   BIT1
                    284: #define RESET_DONE     BIT2
                    285: 
                    286: /*;---DCBFlag */
                    287: #define ABORT_DEV_     BIT0
                    288: 
                    289: /*;---SRBstatus */
                    290: #define SRB_OK         BIT0
                    291: #define ABORTION       BIT1
                    292: #define OVER_RUN       BIT2
                    293: #define UNDER_RUN      BIT3
                    294: #define PARITY_ERROR   BIT4
                    295: #define SRB_ERROR      BIT5
                    296: 
                    297: /*;---SRBFlag */
                    298: #define DATAOUT        BIT7
                    299: #define DATAIN         BIT6
                    300: #define RESIDUAL_VALID BIT5
                    301: #define ENABLE_TIMER   BIT4
                    302: #define RESET_DEV0     BIT2
                    303: #define ABORT_DEV      BIT1
                    304: #define AUTO_REQSENSE  BIT0
                    305: 
                    306: /*;---Adapter status */
                    307: #define H_STATUS_GOOD   0
                    308: #define H_SEL_TIMEOUT   0x11
                    309: #define H_OVER_UNDER_RUN 0x12
                    310: #define H_UNEXP_BUS_FREE 0x13
                    311: #define H_TARGET_PHASE_F 0x14
                    312: #define H_INVALID_CCB_OP 0x16
                    313: #define H_LINK_CCB_BAD  0x17
                    314: #define H_BAD_TARGET_DIR 0x18
                    315: #define H_DUPLICATE_CCB  0x19
                    316: #define H_BAD_CCB_OR_SG  0x1A
                    317: #define H_ABORT         0x0FF
                    318: 
                    319: /*; SCSI Status byte codes*/
                    320: #define SCSI_STAT_GOOD         0x0     /*;  Good status */
                    321: #define SCSI_STAT_CHECKCOND    0x02    /*;  SCSI Check Condition */
                    322: #define SCSI_STAT_CONDMET      0x04    /*;  Condition Met */
                    323: #define SCSI_STAT_BUSY         0x08    /*;  Target busy status */
                    324: #define SCSI_STAT_INTER        0x10    /*;  Intermediate status */
                    325: #define SCSI_STAT_INTERCONDMET 0x14    /*;  Intermediate condition met */
                    326: #define SCSI_STAT_RESCONFLICT  0x18    /*;  Reservation conflict */
                    327: #define SCSI_STAT_CMDTERM      0x22    /*;  Command Terminated */
                    328: #define SCSI_STAT_QUEUEFULL    0x28    /*;  Queue Full */
                    329: 
                    330: #define SCSI_STAT_UNEXP_BUS_F  0xFD    /*;  Unexpect Bus Free */
                    331: #define SCSI_STAT_BUS_RST_DETECT 0xFE  /*;  Scsi Bus Reset detected */
                    332: #define SCSI_STAT_SEL_TIMEOUT  0xFF    /*;  Selection Time out */
                    333: 
                    334: /*;---Sync_Mode */
                    335: #define SYNC_DISABLE   0
                    336: #define SYNC_ENABLE    BIT0
                    337: #define SYNC_NEGO_DONE BIT1
                    338: #define WIDE_ENABLE    BIT2
                    339: #define WIDE_NEGO_DONE BIT3
                    340: #define EN_TAG_QUEUING BIT4
                    341: #define EN_ATN_STOP    BIT5
                    342: 
                    343: #define SYNC_NEGO_OFFSET 15
                    344: 
                    345: /*;---SCSI bus phase*/
                    346: #define SCSI_DATA_OUT  0
                    347: #define SCSI_DATA_IN   1
                    348: #define SCSI_COMMAND   2
                    349: #define SCSI_STATUS_   3
                    350: #define SCSI_NOP0      4
                    351: #define SCSI_NOP1      5
                    352: #define SCSI_MSG_OUT   6
                    353: #define SCSI_MSG_IN    7
                    354: 
                    355: /*;----SCSI MSG BYTE*/
                    356: #define MSG_COMPLETE           0x00
                    357: #define MSG_EXTENDED           0x01
                    358: #define MSG_SAVE_PTR           0x02
                    359: #define MSG_RESTORE_PTR        0x03
                    360: #define MSG_DISCONNECT         0x04
                    361: #define MSG_INITIATOR_ERROR    0x05
                    362: #define MSG_ABORT              0x06
                    363: #define MSG_REJECT_            0x07
                    364: #define MSG_NOP                0x08
                    365: #define MSG_PARITY_ERROR       0x09
                    366: #define MSG_LINK_CMD_COMPL     0x0A
                    367: #define MSG_LINK_CMD_COMPL_FLG 0x0B
                    368: #define MSG_BUS_RESET          0x0C
                    369: #define MSG_ABORT_TAG          0x0D
                    370: #define MSG_SIMPLE_QTAG        0x20
                    371: #define MSG_HEAD_QTAG          0x21
                    372: #define MSG_ORDER_QTAG         0x22
                    373: #define MSG_IDENTIFY           0x80
                    374: #define MSG_HOST_ID            0x0C0
                    375: 
                    376: /*;----SCSI STATUS BYTE*/
                    377: #define STATUS_GOOD            0x00
                    378: #define CHECK_CONDITION_       0x02
                    379: #define STATUS_BUSY            0x08
                    380: #define STATUS_INTERMEDIATE    0x10
                    381: #define RESERVE_CONFLICT       0x18
                    382: 
                    383: /* cmd->result */
                    384: #define STATUS_MASK_           0xFF
                    385: #define MSG_MASK               0xFF00
                    386: #define RETURN_MASK            0xFF0000
                    387: 
                    388: /*
                    389: **  Inquiry Data format
                    390: */
                    391: 
                    392: typedef struct _SCSIInqData { /* INQ */
                    393: 
                    394:        UCHAR    DevType;               /* Periph Qualifier & Periph Dev Type*/
                    395:        UCHAR    RMB_TypeMod;           /* rem media bit & Dev Type Modifier */
                    396:        UCHAR    Vers;                  /* ISO, ECMA, & ANSI versions        */
                    397:        UCHAR    RDF;                   /* AEN, TRMIOP, & response data format*/
                    398:        UCHAR    AddLen;                /* length of additional data         */
                    399:        UCHAR    Res1;                  /* reserved                          */
                    400:        UCHAR    Res2;                  /* reserved                          */
                    401:        UCHAR    Flags;                 /* RelADr,Wbus32,Wbus16,Sync,etc.    */
                    402:        UCHAR    VendorID[8];           /* Vendor Identification             */
                    403:        UCHAR    ProductID[16];         /* Product Identification            */
                    404:        UCHAR    ProductRev[4];         /* Product Revision                  */
                    405: 
                    406: 
                    407: } SCSI_INQDATA, *PSCSI_INQDATA;
                    408: 
                    409: 
                    410: /*  Inquiry byte 0 masks */
                    411: 
                    412: 
                    413: #define SCSI_DEVTYPE       0x1F      /* Peripheral Device Type             */
                    414: #define SCSI_PERIPHQUAL     0xE0      /* Peripheral Qualifier              */
                    415: 
                    416: 
                    417: /*  Inquiry byte 1 mask */
                    418: 
                    419: #define SCSI_REMOVABLE_MEDIA  0x80    /* Removable Media bit (1=removable)  */
                    420: 
                    421: 
                    422: /*  Peripheral Device Type definitions */
                    423: 
                    424: #define SCSI_DASD               0x00      /* Direct-access Device         */
                    425: #define SCSI_SEQACESS           0x01      /* Sequential-access device     */
                    426: #define SCSI_PRINTER            0x02      /* Printer device               */
                    427: #define SCSI_PROCESSOR          0x03      /* Processor device             */
                    428: #define SCSI_WRITEONCE          0x04      /* Write-once device            */
                    429: #define SCSI_CDROM              0x05      /* CD-ROM device                */
                    430: #define SCSI_SCANNER            0x06      /* Scanner device               */
                    431: #define SCSI_OPTICAL            0x07      /* Optical memory device        */
                    432: #define SCSI_MEDCHGR            0x08      /* Medium changer device        */
                    433: #define SCSI_COMM               0x09      /* Communications device        */
                    434: #define SCSI_NODEV              0x1F      /* Unknown or no device type    */
                    435: 
                    436: /*
                    437: ** Inquiry flag definitions (Inq data byte 7)
                    438: */
                    439: 
                    440: #define SCSI_INQ_RELADR       0x80    /* device supports relative addressing*/
                    441: #define SCSI_INQ_WBUS32       0x40    /* device supports 32 bit data xfers  */
                    442: #define SCSI_INQ_WBUS16       0x20    /* device supports 16 bit data xfers  */
                    443: #define SCSI_INQ_SYNC        0x10    /* device supports synchronous xfer   */
                    444: #define SCSI_INQ_LINKED       0x08    /* device supports linked commands    */
                    445: #define SCSI_INQ_CMDQUEUE     0x02    /* device supports command queueing   */
                    446: #define SCSI_INQ_SFTRE       0x01    /* device supports soft resets */
                    447: 
                    448: 
                    449: /*
                    450: ;==========================================================
                    451: ; EEPROM byte offset
                    452: ;==========================================================
                    453: */
                    454: typedef  struct  _EEprom
                    455: {
                    456: UCHAR  EE_MODE1;
                    457: UCHAR  EE_SPEED;
                    458: UCHAR  xx1;
                    459: UCHAR  xx2;
                    460: } EEprom, *PEEprom;
                    461: 
                    462: #define EE_ADAPT_SCSI_ID 64
                    463: #define EE_MODE2       65
                    464: #define EE_DELAY       66
                    465: #define EE_TAG_CMD_NUM 67
                    466: 
                    467: /*; EE_MODE1 bits definition*/
                    468: #define PARITY_CHK_    BIT0
                    469: #define SYNC_NEGO_     BIT1
                    470: #define EN_DISCONNECT_ BIT2
                    471: #define SEND_START_    BIT3
                    472: #define TAG_QUEUING_   BIT4
                    473: 
                    474: /*; EE_MODE2 bits definition*/
                    475: #define MORE2_DRV      BIT0
                    476: #define GREATER_1G     BIT1
                    477: #define RST_SCSI_BUS   BIT2
                    478: #define ACTIVE_NEGATION BIT3
                    479: #define NO_SEEK        BIT4
                    480: #define LUN_CHECK      BIT5
                    481: 
                    482: #define ENABLE_CE      1
                    483: #define DISABLE_CE     0
                    484: #define EEPROM_READ    0x80
                    485: 
                    486: /*
                    487: ;==========================================================
                    488: ;      AMD 53C974 Registers bit Definition
                    489: ;==========================================================
                    490: */
                    491: /*
                    492: ;====================
                    493: ; SCSI Register
                    494: ;====================
                    495: */
                    496: 
                    497: /*; Command Reg.(+0CH) */
                    498: #define DMA_COMMAND            BIT7
                    499: #define NOP_CMD                0
                    500: #define CLEAR_FIFO_CMD         1
                    501: #define RST_DEVICE_CMD         2
                    502: #define RST_SCSI_BUS_CMD       3
                    503: #define INFO_XFER_CMD          0x10
                    504: #define INITIATOR_CMD_CMPLTE   0x11
                    505: #define MSG_ACCEPTED_CMD       0x12
                    506: #define XFER_PAD_BYTE          0x18
                    507: #define SET_ATN_CMD            0x1A
                    508: #define RESET_ATN_CMD          0x1B
                    509: #define SELECT_W_ATN           0x42
                    510: #define SEL_W_ATN_STOP         0x43
                    511: #define EN_SEL_RESEL           0x44
                    512: #define SEL_W_ATN2             0x46
                    513: #define DATA_XFER_CMD          INFO_XFER_CMD
                    514: 
                    515: 
                    516: /*; SCSI Status Reg.(+10H) */
                    517: #define INTERRUPT              BIT7
                    518: #define ILLEGAL_OP_ERR         BIT6
                    519: #define PARITY_ERR             BIT5
                    520: #define COUNT_2_ZERO           BIT4
                    521: #define GROUP_CODE_VALID       BIT3
                    522: #define SCSI_PHASE_MASK        (BIT2+BIT1+BIT0)
                    523: 
                    524: /*; Interrupt Status Reg.(+14H) */
                    525: #define SCSI_RESET             BIT7
                    526: #define INVALID_CMD            BIT6
                    527: #define DISCONNECTED           BIT5
                    528: #define SERVICE_REQUEST        BIT4
                    529: #define SUCCESSFUL_OP          BIT3
                    530: #define RESELECTED             BIT2
                    531: #define SEL_ATTENTION          BIT1
                    532: #define SELECTED               BIT0
                    533: 
                    534: /*; Internal State Reg.(+18H) */
                    535: #define SYNC_OFFSET_FLAG       BIT3
                    536: #define INTRN_STATE_MASK       (BIT2+BIT1+BIT0)
                    537: 
                    538: /*; Clock Factor Reg.(+24H) */
                    539: #define CLK_FREQ_40MHZ         0
                    540: #define CLK_FREQ_35MHZ         (BIT2+BIT1+BIT0)
                    541: #define CLK_FREQ_30MHZ         (BIT2+BIT1)
                    542: #define CLK_FREQ_25MHZ         (BIT2+BIT0)
                    543: #define CLK_FREQ_20MHZ         BIT2
                    544: #define CLK_FREQ_15MHZ         (BIT1+BIT0)
                    545: #define CLK_FREQ_10MHZ         BIT1
                    546: 
                    547: /*; Control Reg. 1(+20H) */
                    548: #define EXTENDED_TIMING        BIT7
                    549: #define DIS_INT_ON_SCSI_RST    BIT6
                    550: #define PARITY_ERR_REPO        BIT4
                    551: #define SCSI_ID_ON_BUS         (BIT2+BIT1+BIT0)
                    552: 
                    553: /*; Control Reg. 2(+2CH) */
                    554: #define EN_FEATURE             BIT6
                    555: #define EN_SCSI2_CMD           BIT3
                    556: 
                    557: /*; Control Reg. 3(+30H) */
                    558: #define ID_MSG_CHECK           BIT7
                    559: #define EN_QTAG_MSG            BIT6
                    560: #define EN_GRP2_CMD            BIT5
                    561: #define FAST_SCSI              BIT4    /* ;10MB/SEC */
                    562: #define FAST_CLK               BIT3    /* ;25 - 40 MHZ */
                    563: 
                    564: /*; Control Reg. 4(+34H) */
                    565: #define EATER_12NS             0
                    566: #define EATER_25NS             BIT7
                    567: #define EATER_35NS             BIT6
                    568: #define EATER_0NS              (BIT7+BIT6)
                    569: #define NEGATE_REQACKDATA      BIT2
                    570: #define NEGATE_REQACK          BIT3
                    571: /*
                    572: ;====================
                    573: ; DMA Register
                    574: ;====================
                    575: */
                    576: /*; DMA Command Reg.(+40H) */
                    577: #define READ_DIRECTION         BIT7
                    578: #define WRITE_DIRECTION        0
                    579: #define EN_DMA_INT             BIT6
                    580: #define MAP_TO_MDL             BIT5
                    581: #define DIAGNOSTIC             BIT4
                    582: #define DMA_IDLE_CMD           0
                    583: #define DMA_BLAST_CMD          BIT0
                    584: #define DMA_ABORT_CMD          BIT1
                    585: #define DMA_START_CMD          (BIT1+BIT0)
                    586: 
                    587: /*; DMA Status Reg.(+54H) */
                    588: #define PCI_MS_ABORT           BIT6
                    589: #define BLAST_COMPLETE         BIT5
                    590: #define SCSI_INTERRUPT         BIT4
                    591: #define DMA_XFER_DONE          BIT3
                    592: #define DMA_XFER_ABORT         BIT2
                    593: #define DMA_XFER_ERROR         BIT1
                    594: #define POWER_DOWN             BIT0
                    595: 
                    596: /*
                    597: ; DMA SCSI Bus and Ctrl.(+70H)
                    598: ;EN_INT_ON_PCI_ABORT
                    599: */
                    600: 
                    601: /*
                    602: ;==========================================================
                    603: ; SCSI Chip register address offset
                    604: ;==========================================================
                    605: */
                    606: #define CtcReg_Low     0x00
                    607: #define CtcReg_Mid     0x04
                    608: #define ScsiFifo       0x08
                    609: #define ScsiCmd        0x0C
                    610: #define Scsi_Status    0x10
                    611: #define INT_Status     0x14
                    612: #define Sync_Period    0x18
                    613: #define Sync_Offset    0x1C
                    614: #define CtrlReg1       0x20
                    615: #define Clk_Factor     0x24
                    616: #define CtrlReg2       0x2C
                    617: #define CtrlReg3       0x30
                    618: #define CtrlReg4       0x34
                    619: #define CtcReg_High    0x38
                    620: #define DMA_Cmd        0x40
                    621: #define DMA_XferCnt    0x44
                    622: #define DMA_XferAddr   0x48
                    623: #define DMA_Wk_ByteCntr 0x4C
                    624: #define DMA_Wk_AddrCntr 0x50
                    625: #define DMA_Status     0x54
                    626: #define DMA_MDL_Addr   0x58
                    627: #define DMA_Wk_MDL_Cntr 0x5C
                    628: #define DMA_ScsiBusCtrl 0x70
                    629: 
                    630: #define StcReg_Low     CtcReg_Low
                    631: #define StcReg_Mid     CtcReg_Mid
                    632: #define Scsi_Dest_ID   Scsi_Status
                    633: #define Scsi_TimeOut   INT_Status
                    634: #define Intern_State   Sync_Period
                    635: #define Current_Fifo   Sync_Offset
                    636: #define StcReg_High    CtcReg_High
                    637: 
                    638: #define am_target      Scsi_Status
                    639: #define am_timeout     INT_Status
                    640: #define am_seq_step    Sync_Period
                    641: #define am_fifo_count  Sync_Offset
                    642: 
                    643: 
                    644: #define DC390_read8(address)                          \
                    645:        inb(DC390_ioport + (address)))
                    646: 
                    647: #define DC390_read16(address)                         \
                    648:        inw(DC390_ioport + (address)))
                    649: 
                    650: #define DC390_read32(address)                         \
                    651:        inl(DC390_ioport + (address)))
                    652: 
                    653: #define DC390_write8(address,value)                   \
                    654:        outb((value), DC390_ioport + (address)))
                    655: 
                    656: #define DC390_write16(address,value)                  \
                    657:        outw((value), DC390_ioport + (address)))
                    658: 
                    659: #define DC390_write32(address,value)                  \
                    660:        outl((value), DC390_ioport + (address)))
                    661: 
                    662: 
                    663: /* Configuration method #1 */
                    664: #define PCI_CFG1_ADDRESS_REG           0xcf8
                    665: #define PCI_CFG1_DATA_REG              0xcfc
                    666: #define PCI_CFG1_ENABLE                0x80000000
                    667: #define PCI_CFG1_TUPPLE(bus, device, function, register)               \
                    668:        (PCI_CFG1_ENABLE | (((bus) << 16) & 0xff0000) |                 \
                    669:        (((device) << 11) & 0xf800) | (((function) << 8) & 0x700)|      \
                    670:        (((register) << 2) & 0xfc))
                    671: 
                    672: /* Configuration method #2 */
                    673: #define PCI_CFG2_ENABLE_REG            0xcf8
                    674: #define PCI_CFG2_FORWARD_REG           0xcfa
                    675: #define PCI_CFG2_ENABLE                0x0f0
                    676: #define PCI_CFG2_TUPPLE(function)                                      \
                    677:        (PCI_CFG2_ENABLE | (((function) << 1) & 0xe))
                    678: 
                    679: 
                    680: #endif /* TMSCSIM_H */

unix.superglobalmegacorp.com

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