|
|
GNU Mach 1.2
/***********************************************************************
;* File Name : TMSCSIW.H *
;* TEKRAM DC-390 PCI Wide SCSI Bus Master Host Adapter*
;* Device Driver *
;***********************************************************************/
#ifndef TMSCSIW_H
#define TMSCSIW_H
#define IRQ_NONE 255
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;
typedef unsigned int UINT;
typedef UCHAR *PUCHAR;
typedef USHORT *PUSHORT;
typedef ULONG *PULONG;
typedef Scsi_Host_Template *PSHT;
typedef struct Scsi_Host *PSH;
typedef Scsi_Device *PSCSIDEV;
typedef Scsi_Cmnd *PSCSICMD;
typedef void *PVOID;
typedef struct scatterlist *PSGL, SGL;
typedef struct _AddWkSpace
{
USHORT WKIOCtrlFlag; /* ;b7-Done, b6-wrtVerify, b0-in process */
USHORT XferredBlkCnt;
USHORT WKToXferBlkCnt;
USHORT WKcSGListDone;
USHORT WKMaxSGIndex;
ULONG WKToXferLen;
USHORT NxtSGoffset;
} AddWkSpace;
/*;-----------------------------------------------------------------------*/
typedef struct _SyncMsg
{
UCHAR ExtendMsg;
UCHAR ExtMsgLen;
UCHAR SyncXferReq;
UCHAR Period;
UCHAR ReqOffset;
} SyncMsg;
/*;-----------------------------------------------------------------------*/
typedef struct _Capacity
{
ULONG BlockCount;
ULONG BlockLength;
} Capacity;
/*;-----------------------------------------------------------------------*/
typedef struct _SGentry
{
ULONG SGXferDataPtr;
ULONG SGXferDataLen;
} SGentry;
typedef struct _SGentry1
{
ULONG SGXLen;
ULONG SGXPtr;
} SGentry1, *PSGE;
#define MAX_ADAPTER_NUM 4
#define MAX_DEVICES 10
#define MAX_SG_LIST_BUF 32
#define MAX_CMD_QUEUE 20
#define MAX_CMD_PER_LUN 8
#define MAX_SCSI_ID 16
#define MAX_SRB_CNT MAX_CMD_QUEUE+4
#define END_SCAN 2
/*
;-----------------------------------------------------------------------
; SCSI Request Block
;-----------------------------------------------------------------------
*/
struct _SRB
{
UCHAR CmdBlock[12];
ULONG Segment0[MAX_SG_LIST_BUF+1][2];
ULONG SegmentPad[2];
ULONG __select;
ULONG __command[2]; /* ;len,ptr */
ULONG __msgout0[2]; /* ;len,ptr */
ULONG PhysSRB;
ULONG ReturnAddr;
ULONG RemainSegPtr;
PSCSICMD pcmd;
struct _SRB *pNextSRB;
struct _DCB *pSRBDCB;
PSGL pSegmentList;
ULONG XferredLen;
ULONG SGPhysAddr; /*;a segment starting address */
ULONG XferredLen1;
SGL Segmentx; /* make a one entry of S/G list table */
PUCHAR pMsgPtr;
USHORT SRBState;
USHORT Revxx2; /* ??? */
UCHAR MsgInBuf[6];
UCHAR MsgOutBuf[6];
UCHAR SenseDataBuf[0x12];
UCHAR AdaptStatus;
UCHAR TargetStatus;
UCHAR MsgCnt;
UCHAR EndMessage;
UCHAR TagNumber;
UCHAR InternalReq; /*; 1-ADD internal request, 0-DMD request */
UCHAR SGcount;
UCHAR SGIndex;
UCHAR IORBFlag; /*;81h-Reset, 2-retry */
UCHAR SRBStatus;
UCHAR RetryCnt;
UCHAR SRBFlag; /*; b0-AutoReqSense,b6-Read,b7-write */
/*; b4-settimeout,b5-Residual valid */
UCHAR ScratchABuf;
UCHAR Reserved3[1]; /*;for dword alignment */
};
typedef struct _SRB DC390W_SRB, *PSRB;
/*
;-----------------------------------------------------------------------
; Device Control Block
;-----------------------------------------------------------------------
*/
struct _DCB
{
UCHAR DCBselect;
UCHAR DCBsxfer;
UCHAR DCBsdid;
UCHAR DCBscntl3;
UCHAR DCBscntl0;
UCHAR IdentifyMsg;
UCHAR DevMode;
UCHAR AdpMode;
struct _DCB *pNextDCB;
struct _ACB *pDCBACB;
PSCSICMD pQIORBhead;
PSCSICMD pQIORBtail;
PSCSICMD AboIORBhead;
PSCSICMD AboIORBtail;
USHORT QIORBCnt;
USHORT AboIORBcnt;
PSRB pWaitingSRB;
PSRB pWaitLast;
PSRB pGoingSRB;
PSRB pGoingLast;
PSRB pActiveSRB;
USHORT GoingSRBCnt;
USHORT WaitSRBCnt; /* ??? */
ULONG TagMask;
USHORT MaxCommand;
USHORT AdaptIndex; /*; UnitInfo struc start */
USHORT UnitIndex; /*; nth Unit on this card */
UCHAR UnitSCSIID; /*; SCSI Target ID (SCSI Only) */
UCHAR UnitSCSILUN; /*; SCSI Log. Unit (SCSI Only) */
UCHAR InqDataBuf[8];
UCHAR CapacityBuf[8];
UCHAR SyncMode; /*; 0:async mode */
UCHAR NegoPeriod; /*;for nego. */
UCHAR SyncPeriod; /*;for reg. */
UCHAR SyncOffset; /*;for reg. and nego.(low nibble) */
UCHAR UnitCtrlFlag;
UCHAR DCBFlag;
UCHAR DevType;
UCHAR Reserved2[1]; /*;for dword alignment */
};
typedef struct _DCB DC390W_DCB, *PDCB;
/*
;-----------------------------------------------------------------------
; Adapter Control Block
;-----------------------------------------------------------------------
*/
struct _ACB
{
ULONG PhysACB;
ULONG DevVendorID;
PSH pScsiHost;
struct _ACB *pNextACB;
USHORT IOPortBase;
USHORT Revxx1; /* ??? */
PDCB pLinkDCB;
PDCB pDCBRunRobin;
PDCB pActiveDCB;
PDCB pDCB_free;
PSRB pFreeSRB;
USHORT SRBCount;
USHORT AdapterIndex; /*; nth Adapter this driver */
USHORT max_id;
USHORT max_lun;
ULONG jmp_reselect;
ULONG jmp_select;
ULONG jmp_table8;
ULONG jmp_set_atn;
ULONG jmp_clear_ack;
ULONG jmp_next;
ULONG jmp_din8;
ULONG jmp_dout8;
ULONG jmp_clear_atn;
ULONG jmp_reselecttag;
UCHAR msgin123[4];
UCHAR status;
UCHAR AdaptSCSIID; /*; Adapter SCSI Target ID */
UCHAR AdaptSCSILUN; /*; Adapter SCSI LUN */
UCHAR DeviceCnt;
UCHAR IRQLevel;
UCHAR AdaptType; /*;1:390W, 2:390U, 3:390F */
UCHAR TagMaxNum;
UCHAR ACBFlag;
UCHAR Gmode2;
UCHAR LUNchk;
UCHAR scan_devices;
UCHAR Reserved1[1]; /*;for dword alignment */
UCHAR DCBmap[MAX_SCSI_ID];
DC390W_DCB DCB_array[MAX_DEVICES]; /* +74h, Len=3E8 */
DC390W_SRB SRB_array[MAX_SRB_CNT]; /* +45Ch, Len= */
};
typedef struct _ACB DC390W_ACB, *PACB;
/*;-----------------------------------------------------------------------*/
#define PCI_DEVICE_ID_NCR53C825A 0x0003
#define PCI_DEVICE_ID_NCR53C875 0x000f
#define CHIP810_ID 0x00011000
#define CHIP820_ID 0x00021000
#define CHIP825_ID 0x00031000
#define CHIP815_ID 0x00041000
#define CHIP875_ID 0x000f1000
#define DC390W 1 /*;825A - 16 BIT*/
#define DC390U 2 /*;875 - 8 BIT*/
#define DC390F 3 /*;875 - 16 BIT*/
#define BIT31 0x80000000
#define BIT30 0x40000000
#define BIT29 0x20000000
#define BIT28 0x10000000
#define BIT27 0x08000000
#define BIT26 0x04000000
#define BIT25 0x02000000
#define BIT24 0x01000000
#define BIT23 0x00800000
#define BIT22 0x00400000
#define BIT21 0x00200000
#define BIT20 0x00100000
#define BIT19 0x00080000
#define BIT18 0x00040000
#define BIT17 0x00020000
#define BIT16 0x00010000
#define BIT15 0x00008000
#define BIT14 0x00004000
#define BIT13 0x00002000
#define BIT12 0x00001000
#define BIT11 0x00000800
#define BIT10 0x00000400
#define BIT9 0x00000200
#define BIT8 0x00000100
#define BIT7 0x00000080
#define BIT6 0x00000040
#define BIT5 0x00000020
#define BIT4 0x00000010
#define BIT3 0x00000008
#define BIT2 0x00000004
#define BIT1 0x00000002
#define BIT0 0x00000001
/*;---WKIOCtrlFlag */
#define IN_PROCESSING BIT0
#define BAD_WRITE_V_CMD BIT1
#define VERIFY_CMD BIT2
#define RESIDUAL_SG BIT3
/*;---UnitCtrlFlag */
#define UNIT_ALLOCATED BIT0
#define UNIT_INFO_CHANGED BIT1
#define FORMATING_MEDIA BIT2
#define UNIT_RETRY BIT3
/*;---UnitFlags */
#define DASD_SUPPORT BIT0
#define SCSI_SUPPORT BIT1
#define ASPI_SUPPORT BIT2
/*;----SRBState machine definition */
#define SRB_FREE 0
#define SRB_WAIT BIT0
#define SRB_READY BIT1
#define SRB_MSGOUT BIT2 /*;arbitration+msg_out 1st byte*/
#define SRB_MSGIN BIT3
#define SRB_MSGIN_MULTI BIT4
#define SRB_COMMAND BIT5
#define SRB_START_ BIT6 /*;arbitration+msg_out+command_out*/
#define SRB_DISCONNECT BIT7
#define SRB_DATA_XFER BIT8
#define SRB_XFERPAD BIT9
#define SRB_STATUS BIT10
#define SRB_COMPLETED BIT11
#define DO_WIDE_NEGO BIT12
#define DO_SYNC_NEGO BIT13
#define SRB_UNEXPECT_RESEL BIT14
/*;---ACBFlag */
#define RESET_DEV BIT0
#define RESET_DETECT BIT1
#define RESET_DONE BIT2
/*;---DCBFlag */
#define ABORT_DEV_ BIT0
/*;---SRBstatus */
#define SRB_OK BIT0
#define ABORTION BIT1
#define OVER_RUN BIT2
#define UNDER_RUN BIT3
#define SRB_ERROR BIT4
/*;---SRBFlag */
#define DATAOUT BIT7
#define DATAIN BIT6
#define RESIDUAL_VALID BIT5
#define ENABLE_TIMER BIT4
#define RESET_DEV0 BIT2
#define ABORT_DEV BIT1
#define AUTO_REQSENSE BIT0
/*;---Adapter status */
#define H_STATUS_GOOD 0
#define H_SEL_TIMEOUT 0x11
#define H_OVER_UNDER_RUN 0x12
#define H_UNEXP_BUS_FREE 0x13
#define H_TARGET_PHASE_F 0x14
#define H_INVALID_CCB_OP 0x16
#define H_LINK_CCB_BAD 0x17
#define H_BAD_TARGET_DIR 0x18
#define H_DUPLICATE_CCB 0x19
#define H_BAD_CCB_OR_SG 0x1A
#define H_ABORT 0x0FF
/*; SCSI Status byte codes*/
#define SCSI_STAT_GOOD 0x0 /*; Good status */
#define SCSI_STAT_CHECKCOND 0x02 /*; SCSI Check Condition */
#define SCSI_STAT_CONDMET 0x04 /*; Condition Met */
#define SCSI_STAT_BUSY 0x08 /*; Target busy status */
#define SCSI_STAT_INTER 0x10 /*; Intermediate status */
#define SCSI_STAT_INTERCONDMET 0x14 /*; Intermediate condition met */
#define SCSI_STAT_RESCONFLICT 0x18 /*; Reservation conflict */
#define SCSI_STAT_CMDTERM 0x22 /*; Command Terminated */
#define SCSI_STAT_QUEUEFULL 0x28 /*; Queue Full */
#define SCSI_STAT_UNEXP_BUS_F 0xFD /*; Unexpect Bus Free */
#define SCSI_STAT_BUS_RST_DETECT 0xFE /*; Scsi Bus Reset detected */
#define SCSI_STAT_SEL_TIMEOUT 0xFF /*; Selection Time out */
/*;---Sync_Mode */
#define SYNC_DISABLE 0
#define SYNC_ENABLE BIT0
#define SYNC_NEGO_DONE BIT1
#define WIDE_ENABLE BIT2
#define WIDE_NEGO_DONE BIT3
#define EN_TAG_QUEUING BIT4
#define SYNC_NEGO_OFFSET 16
/*;---SCSI bus phase*/
#define SCSI_DATA_OUT 0
#define SCSI_DATA_IN 1
#define SCSI_COMMAND 2
#define SCSI_STATUS_ 3
#define SCSI_NOP0 4
#define SCSI_NOP1 5
#define SCSI_MSG_OUT 6
#define SCSI_MSG_IN 7
/*;----SCSI MSG BYTE*/
#define MSG_COMPLETE 0x00
#define MSG_EXTENDED 0x01
#define MSG_SAVE_PTR 0x02
#define MSG_RESTORE_PTR 0x03
#define MSG_DISCONNECT 0x04
#define MSG_INITIATOR_ERROR 0x05
#define MSG_ABORT 0x06
#define MSG_REJECT_ 0x07
#define MSG_NOP 0x08
#define MSG_PARITY_ERROR 0x09
#define MSG_LINK_CMD_COMPL 0x0A
#define MSG_LINK_CMD_COMPL_FLG 0x0B
#define MSG_BUS_RESET 0x0C
#define MSG_ABORT_TAG 0x0D
#define MSG_SIMPLE_QTAG 0x20
#define MSG_HEAD_QTAG 0x21
#define MSG_ORDER_QTAG 0x22
#define MSG_IDENTIFY 0x80
#define MSG_HOST_ID 0x0C0
/*;----SCSI STATUS BYTE*/
#define STATUS_GOOD 0x00
#define CHECK_CONDITION_ 0x02
#define STATUS_BUSY 0x08
#define STATUS_INTERMEDIATE 0x10
#define RESERVE_CONFLICT 0x18
/* cmd->result */
#define STATUS_MASK_ 0xFF
#define MSG_MASK 0xFF00
#define RETURN_MASK 0xFF0000
/*
** Inquiry Data format
*/
typedef struct _SCSIInqData { /* INQ */
UCHAR DevType; /* Periph Qualifier & Periph Dev Type*/
UCHAR RMB_TypeMod; /* rem media bit & Dev Type Modifier */
UCHAR Vers; /* ISO, ECMA, & ANSI versions */
UCHAR RDF; /* AEN, TRMIOP, & response data format*/
UCHAR AddLen; /* length of additional data */
UCHAR Res1; /* reserved */
UCHAR Res2; /* reserved */
UCHAR Flags; /* RelADr,Wbus32,Wbus16,Sync,etc. */
UCHAR VendorID[8]; /* Vendor Identification */
UCHAR ProductID[16]; /* Product Identification */
UCHAR ProductRev[4]; /* Product Revision */
} SCSI_INQDATA, *PSCSI_INQDATA;
/* Inquiry byte 0 masks */
#define SCSI_DEVTYPE 0x1F /* Peripheral Device Type */
#define SCSI_PERIPHQUAL 0xE0 /* Peripheral Qualifier */
/* Inquiry byte 1 mask */
#define SCSI_REMOVABLE_MEDIA 0x80 /* Removable Media bit (1=removable) */
/* Peripheral Device Type definitions */
#define SCSI_DASD 0x00 /* Direct-access Device */
#define SCSI_SEQACESS 0x01 /* Sequential-access device */
#define SCSI_PRINTER 0x02 /* Printer device */
#define SCSI_PROCESSOR 0x03 /* Processor device */
#define SCSI_WRITEONCE 0x04 /* Write-once device */
#define SCSI_CDROM 0x05 /* CD-ROM device */
#define SCSI_SCANNER 0x06 /* Scanner device */
#define SCSI_OPTICAL 0x07 /* Optical memory device */
#define SCSI_MEDCHGR 0x08 /* Medium changer device */
#define SCSI_COMM 0x09 /* Communications device */
#define SCSI_NODEV 0x1F /* Unknown or no device type */
/*
** Inquiry flag definitions (Inq data byte 7)
*/
#define SCSI_INQ_RELADR 0x80 /* device supports relative addressing*/
#define SCSI_INQ_WBUS32 0x40 /* device supports 32 bit data xfers */
#define SCSI_INQ_WBUS16 0x20 /* device supports 16 bit data xfers */
#define SCSI_INQ_SYNC 0x10 /* device supports synchronous xfer */
#define SCSI_INQ_LINKED 0x08 /* device supports linked commands */
#define SCSI_INQ_CMDQUEUE 0x02 /* device supports command queueing */
#define SCSI_INQ_SFTRE 0x01 /* device supports soft resets */
/*
;==========================================================
; EEPROM byte offset
;==========================================================
*/
typedef struct _EEprom
{
UCHAR EE_MODE1;
UCHAR EE_SPEED;
UCHAR xx1;
UCHAR xx2;
} EEprom, *PEEprom;
#define EE_ADAPT_SCSI_ID 64
#define EE_MODE2 65
#define EE_DELAY 66
#define EE_TAG_CMD_NUM 67
/*; EE_MODE1 bits definition*/
#define PARITY_CHK_ BIT0
#define SYNC_NEGO_ BIT1
#define EN_DISCONNECT_ BIT2
#define SEND_START_ BIT3
#define TAG_QUEUING_ BIT4
#define WIDE_NEGO_ BIT5
/*; EE_MODE2 bits definition*/
#define MORE2_DRV BIT0
#define GREATER_1G BIT1
#define RST_SCSI_BUS BIT2
#define ACTIVE_NEGATION BIT3
#define NO_SEEK BIT4
#define LUN_CHECK BIT5
#define ENABLE_CE 1
#define DISABLE_CE 0
#define EEPROM_READ 0x80
/*
;==========================================================
; NCR 53C825 Registers Structure
;==========================================================
*/
typedef struct _OperatingReg
{
UCHAR SCSICtrl0; /*; (+00)*/
UCHAR SCSICtrl1; /*; (+01)*/
UCHAR SCSICtrl2; /*; (+02)*/
UCHAR SCSICtrl3; /*; (+03)*/
UCHAR SCSIChipID; /*; (+04)*/
UCHAR SCSIXfer; /*; (+05)*/
UCHAR SCSIDestID; /*; (+06)*/
UCHAR GeneralPReg; /*; (+07)*/
UCHAR SCSI1stByteR; /*; (+08)*/
UCHAR SCSIOPCtrlL; /*; (+09)*/
UCHAR SCSISelID; /*; (+0A)*/
UCHAR SCSIBusCtrlLin; /*; (+0B)*/
UCHAR DMAStatus; /*; (+0C)*/
UCHAR SCSIStatus0; /*; (+0D)*/
UCHAR SCSIStatus1; /*; (+0E)*/
UCHAR SCSIStatus2; /*; (+0F)*/
ULONG DataStrucAddr; /*; (+10)*/
UCHAR InterruptStatus;/*; (+14)*/
UCHAR Reser1; /*; (+15)*/
UCHAR Reser2; /*; (+16)*/
UCHAR Reser3; /*; (+17)*/
UCHAR ChipTest0; /*; (+18)*/
UCHAR ChipTest1; /*; (+19)*/
UCHAR ChipTest2; /*; (+1A)*/
UCHAR ChipTest3; /*; (+1B)*/
ULONG TempStack; /*; (+1C)*/
UCHAR DMAFIFO; /*; (+20)*/
UCHAR ChipTest4; /*; (+21)*/
UCHAR ChipTest5; /*; (+22)*/
UCHAR ChipTest6; /*; (+23)*/
UCHAR DMAByteCnt[3]; /*; (+24)*/
UCHAR DMACommand; /*; (+27)*/
ULONG DMANextAddr; /*; (+28)*/
ULONG DMAScriptsPtr; /*; (+2C)*/
ULONG DMAScriptPtrSav;/*; (+30)*/
ULONG ScratchA; /*; (+34)*/
UCHAR DMAMode; /*; (+38)*/
UCHAR DMAIntEnable; /*; (+39)*/
UCHAR DMAWatchDog; /*; (+3A)*/
UCHAR DMACtrl; /*; (+3B)*/
ULONG ADDer; /*; (+3C)*/
UCHAR SCSIIntEnable0; /*; (+40)*/
UCHAR SCSIIntEnable1; /*; (+41)*/
UCHAR SCSIIntStatus0; /*; (+42)*/
UCHAR SCSIIntStatus1; /*; (+43)*/
UCHAR SCSILongParity; /*; (+44)*/
UCHAR WideResiData; /*; (+45)*/
UCHAR MemAccessCtrl; /*; (+46)*/
UCHAR GeneralPCtrl; /*; (+47)*/
UCHAR SCSITimer0; /*; (+48)*/
UCHAR SCSITimer1; /*; (+49)*/
UCHAR ResponseID0; /*; (+4A)*/
UCHAR ResponseID1; /*; (+4B)*/
UCHAR SCSITest0; /*; (+4C)*/
UCHAR SCSITest1; /*; (+4D)*/
UCHAR SCSITest2; /*; (+4E)*/
UCHAR SCSITest3; /*; (+4F)*/
USHORT SCSIIPDataL; /*; (+50)*/
USHORT Reser4; /*; (+52)*/
USHORT SCSIOPDataL; /*; (+54)*/
USHORT Reser5; /*; (+56)*/
USHORT SCSIBusDataLin; /*; (+58)*/
USHORT Reser6; /*; (+5A)*/
ULONG ScratchB; /*; (+5C)*/
ULONG ScratchC; /*; (+60)*/
ULONG ScratchD; /*; (+64)*/
ULONG ScratchE; /*; (+68)*/
ULONG ScratchF; /*; (+6C)*/
ULONG ScratchG; /*; (+70)*/
ULONG ScratchH; /*; (+74)*/
ULONG ScratchI; /*; (+78)*/
ULONG ScratchJ; /*; (+7C)*/
} OperatingReg;
/*
;==========================================================
; NCR 53C825 Registers bit Definition
;==========================================================
*/
/*; SCSICtrl0 (+00)*/
#define FULL_ARBITRATION (BIT7+BIT6)
#define START_ARBIT BIT5
#define SEL_W_SATN BIT4
#define EN_PARITY_CHK BIT3
#define SATN_IF_PARITY_ERR BIT1
#define TARGET_MODE BIT0
/*; SCSICtrl1 (+01)*/
#define ASSERT_RST BIT3
#define ASSERT_EVEN_P BIT2
#define START_SCSI_XFER BIT0
/*; SCSICtrl2 (+02)*/
#define DISC_UNEXPECTED BIT7
#define CHAIN_MODE BIT6
#define WIDE_SCSI_SEND BIT3
#define WIDE_SCSI_RECV BIT0
/*; SCSICtrl3 (+03)*/
#define EN_FAST_20 BIT7
#define SYNC_CLK_F4 (BIT6+BIT4)
#define SYNC_CLK_F3 BIT6
#define SYNC_CLK_F2 (BIT5+BIT4)
#define SYNC_CLK_F1_5 BIT5
#define SYNC_CLK_F1 BIT4
#define EN_WIDE_SCSI BIT3
#define ASYNC_CLK_F4 (BIT2+BIT0)
#define ASYNC_CLK_F3 BIT2
#define ASYNC_CLK_F2 (BIT1+BIT0)
#define ASYNC_CLK_F1_5 BIT1
#define ASYNC_CLK_F1 BIT0
/*; SCSIChipID (+04)*/
#define ENABLE_RESEL BIT6
#define ENABLE_SEL BIT5
#define CHIP_ID_MASK 0FH
/*; SCSIXfer (+05)*/
#define PERIOD_MASK (BIT7+BIT6+BIT5)
#define SYNC_PERIOD_F11 (BIT7+BIT6+BIT5)
#define SYNC_PERIOD_F10 (BIT7+BIT6)
#define SYNC_PERIOD_F9 (BIT7+BIT5)
#define SYNC_PERIOD_F8 BIT7
#define SYNC_PERIOD_F7 (BIT6+BIT5)
#define SYNC_PERIOD_F6 BIT6
#define SYNC_PERIOD_F5 BIT5
#define SYNC_PERIOD_F4 0
#define OFFSET_MASK (BIT4+BIT3+BIT2+BIT1+BIT0)
#define SYNC_OFFSET_16 BIT4
#define SYNC_OFFSET_8 BIT3
#define SYNC_OFFSET_7 (BIT2+BIT1+BIT0)
#define SYNC_OFFSET_6 (BIT2+BIT1)
#define SYNC_OFFSET_5 (BIT2+BIT0)
#define SYNC_OFFSET_4 BIT2
#define SYNC_OFFSET_3 (BIT1+BIT0)
#define SYNC_OFFSET_2 BIT1
#define SYNC_OFFSET_1 BIT0
#define SYNC_OFFSET_0 0
#define ASYNCHRONOUS SYNC_OFFSET_0
/*
; SCSIDestID (+06)
; GeneralPReg (+07)
; SCSI1stByteR (+08)
*/
/*; SCSIOPCtrlL (+09)*/
#define ASSERT_REQ BIT7
#define ASSERT_ACK BIT6
#define ASSERT_BSY BIT5
#define ASSERT_SEL BIT4
#define ASSERT_ATN BIT3
#define ASSERT_MSG BIT2
#define ASSERT_C_D BIT1
#define ASSERT_I_O BIT0
/*; SCSISelID (+0A) Read*/
#define SCSI_ID_VALID BIT7
/*; SCSIBusCtrlLin (+0B) Read*/
#define REQ_SIGNAL BIT7
#define ACK_SIGNAL BIT6
#define BSY_SIGNAL BIT5
#define SEL_SIGNAL BIT4
#define ATN_SIGNAL BIT3
#define MSG_SIGNAL BIT2
#define C_D_SIGNAL BIT1
#define I_O_SIGNAL BIT0
/*; DMAStatus (+0C) Read*/
#define DMA_FIFO_EMPTY BIT7
#define MASTER_PARITY_ERR BIT6
#define BUS_FAULT BIT5
#define ABORT_ BIT4
#define SINGLE_STEP_INT BIT3
#define SCRIPTS_INT BIT2
#define ILLEGAL_INSTRUC BIT0
/*; SCSIStatus0 (+0D) Read*/
#define SIDL_LSB_FULL BIT7
#define SODR_LSB_FULL BIT6
#define SODL_LSB_FULL BIT5
#define IN_ARBITRATION BIT4
#define LOST_ARBITRATION BIT3
#define WIN_ARBITRATION BIT2
#define RST_SIGNAL BIT1
#define PARITY_SIGNAL BIT0
/*; SCSIStatus1 (+0E) Read*/
#define SCSI_FIFO_MASK (BIT7+BIT6+BIT5+BIT4)
/*; SCSIStatus2 (+0F) Read*/
#define SIDL_MSB_FULL BIT7
#define SODR_MSB_FULL BIT6
#define SODL_MSB_FULL BIT5
#define SCSI_FIFO_MSB BIT4
/*; DataStrucAddr (+10)*/
/*; InterruptStatus (+14)*/
#define ABORT_OP BIT7
#define SOFTWARE_RST BIT6
#define SIGNAL_PROC BIT5
#define SEMAPHORE BIT4
#define CONNECTED BIT3
#define INT_ON_FLY BIT2
#define SCSI_INT_PENDING BIT1
#define DMA_INT_PENDING BIT0
/*; ChipTest0 (+18)*/
/*; ChipTest1 (+19)*/
#define FIFO_BYTE_EMPTY (BIT7+BIT6+BIT5+BIT4)
#define FIFO_BYTE_FULL (BIT3+BIT2+BIT1+BIT0)
/*; ChipTest2 (+1A)*/
#define READ_DIR BIT7
#define WRITE_DIR 0
#define SIGNAL_PROC_ BIT6
#define CFG_AS_IO_MAP BIT5
#define CFG_AS_MEM_MAP BIT4
#define SCRATCHAB_AS_BASE BIT3
#define TRUE_EOP BIT2
#define INTERNAL_DREQ BIT1
#define INTERNAL_DACK BIT0
/*; ChipTest3 (+1B)*/
#define CHIP_REV_MASK (BIT7+BIT6+BIT5+BIT4)
#define FLUSH_DMA_FIFO BIT3
#define CLR_DMA_FIFO BIT2
#define FETCH_PIN_MODE BIT1
#define WRT_EN_INVALIDATE BIT0
/*; TempStack (+1C)*/
/*; DMAFIFO (+20)*/
/*; 2 upper bits in ChipTest5*/
/*; ChipTest4 (+21)*/
#define BURST_DISABLE BIT7
/*; ChipTest5 (+22) */
#define EN_DMA_FIFO_536 BIT5
#define BURST_LEN_MSB BIT2
#define DMAFIFO_MS2B (BIT1+BIT0)
/*
; ChipTest6 (+23)
; DMAByteCnt (+24)
; DMACommand (+27)
; DMANextAddr (+28)
; DMAScriptsPtr (+2C)
; DMAScriptPtrSav (+30)
*/
/*; ScratchA (+34)*/
#define COMPLETED_OK_ BIT0
#define RE_SELECTED_ BIT1
#define OVER_RUN_ BIT2
/*; DMAMode (+38)*/
#define BURST_LEN16 (BIT7+BIT6)
#define BURST_LEN8 BIT7
#define BURST_LEN4 BIT6
#define BURST_LEN2 0
#define SRC_IO_MAP BIT5
#define SRC_MEM_MAP 0
#define DEST_IO_MAP BIT4
#define DEST_MEM_MAP 0
#define EN_READ_LINE BIT3
#define EN_READ_MULTIPLE BIT2
#define BURST_OPCODE_FETCH BIT1
#define MANUAL_START BIT0
#define AUTO_START 0
/*; DMAIntEnable (+39)*/
#define EN_MDPE BIT6
#define EN_BUS_FAULT BIT5
#define EN_ABORTED BIT4
#define EN_SINGLE_STEP BIT3
#define EN_SCRIPT_INT BIT2
#define EN_ILLEGAL_INST BIT0
/*; DMAWatchDog (+3A)*/
/*; DMACtrl (+3B)*/
#define EN_CACHE_LINE_SIZE BIT7
#define PRE_FETCH_FLUSH BIT6
#define EN_PRE_FETCH BIT5
#define SINGLE_STEP_MIDE BIT4
#define TOTEM_POLE_IRQ BIT3
#define OPEN_DRAIN_IRQ 0
#define START_DMA BIT2
#define IRQ_DISABLE BIT1
#define COMPATIBLE_700 BIT0
/*; ADDer (+3C)*/
/*; SCSIIntEnable0 (+40)*/
#define EN_PHASE_MISMATCH BIT7
#define EN_ARB_SEL_DONE BIT6
#define EN_BE_SELECTED BIT5
#define EN_BE_RESELECTED BIT4
#define EN_SCSI_GERROR BIT3
#define EN_UNEXPECT_DISC BIT2
#define EN_SCSI_RESET BIT1
#define EN_PARITY_ERROR BIT0
/*; SCSIIntEnable1 (+41)*/
#define EN_SEL_TIMEOUT BIT2
#define EN_GENERAL_TIMEOUT BIT1
#define EN_HANDSHAKE_TIMEOUT BIT0
/*; SCSIIntStatus0 (+42)*/
#define PHASE_MISMATCH BIT7
#define ARB_SEL_DONE BIT6
#define BE_SELECTED BIT5
#define BE_RESELECTED BIT4
#define SCSI_GERROR BIT3
#define UNEXPECT_DISC BIT2
#define SCSI_RESET BIT1
#define PARITY_ERROR BIT0
/*; SCSIIntStatus1 (+43)*/
#define SEL_TIMEOUT BIT2
#define GENERAL_TIMEOUT BIT1
#define HANDSHAKE_TIMEOUT BIT0
/*
; SCSILongParity (+44)
; WideResiData (+45)
; MemAccessCtrl (+46)
; GeneralPCtrl (+47)
*/
/*; SCSITimer0 (+48)*/
#define HTH_TO_DISABLE 0
#define SEL_TO_204ms (BIT3+BIT2)
/*
; SCSITimer1 (+49)
; ResponseID0 (+4A)
; ResponseID1 (+4B)
; SCSITest0 (+4C)
; SCSITest1 (+4D)
; SCSITest2 (+4E)
*/
/*; SCSITest3 (+4F)*/
#define ACTIVE_NEGATION_ BIT7
#define FIFO_TEST_READ BIT6
#define HALT_SCSI_CLK BIT5
#define DIS_SINGLE_INIT BIT4
#define TIMER_TEST_MODE BIT2
#define CLR_SCSI_FIFO BIT1
#define FIFO_TEST_WRITE BIT0
/*
; SCSIIPDataL (+50)
; SCSIOPDataL (+54)
; SCSIBusDataLin (+58)
; ScratchB (+5C)
; ScratchC (+60)
; ScratchD (+64)
; ScratchE (+68)
; ScratchF (+6C)
; ScratchG (+70)
; ScratchH (+74)
; ScratchI (+78)
; ScratchJ (+7C)
*/
/***********************************************************************
* NCR53C825 I/O Address Map
* base address is stored at offset 0x10 in the PCI configuration space
*-----------------------------------------------------------------------
* SCSI Core Registers Offset
***********************************************************************/
#define SCNTL0 0x00 /* Scsi Control 0 R/W */
#define SCNTL1 0x01 /* Scsi Control 1 R/W */
#define SCNTL2 0x02 /* Scsi Control 2 R/W */
#define SCNTL3 0x03 /* Scsi Control 3 R/W */
#define SCID 0x04 /* Scsi Chip ID R/W */
#define SXFER 0x05 /* Scsi Transfer R/W */
#define SDID 0x06 /* Scsi Destination ID R/W */
#define GPREG 0x07 /* General Purpose Bits R/W */
#define SFBR 0x08 /* Scsi First Byte Received R/W */
#define SOCL 0x09 /* Scsi Output Control Latch R/W */
#define SSID 0x0A /* Scsi Selector ID R */
#define SBCL 0x0B /* Scsi Bus Control Lines R/W */
#define DSTAT 0x0C /* DMA Status R */
#define SSTAT0 0x0D /* Scsi Status 0 R */
#define SSTAT1 0x0E /* Scsi Status 1 R */
#define SSTAT2 0x0F /* Scsi Status 2 R */
#define DSA 0x10 /* Data Structure Address R/W */
#define ISTAT 0x14 /* Interrupt Status R/W */
#define RES15 0x15 /* Reserved */
#define CTEST0 0x18 /* Reserved */
#define CTEST1 0x19 /* Chip Test 1 R/W */
#define CTEST2 0x1A /* Chip Test 2 R */
#define CTEST3 0x1B /* Chip Test 3 R */
#define TEMP 0x1C /* Temperary Stack R/W */
#define DFIFO 0x20 /* DMA FIFO R/W */
#define CTEST4 0x21 /* Chip Test 4 R/W */
#define CTEST5 0x22 /* Chip Test 5 R/W */
#define CTEST6 0x23 /* Chip Test 6 R/W */
#define DBC 0x24 /* DMA Byte Counter R/W */
#define DCMD 0x27 /* DMA Command R/W */
#define DNAD 0x28 /* DMA Next Address For Data R/W */
#define DSP 0x2C /* DMA SCIPTS Pointer R/W */
#define DSPS 0x30 /* DMA SCIPTS Pointer Saves R/W */
#define SCRATCHA 0x34 /* General Purpose Scratch Pad A R/W */
#define DMODE 0x38 /* DMA Mode R/W */
#define DIEN 0x39 /* DMA Interrupt Enable R/W */
#define DWT 0x3A /* DMA Watchdog Timer R/W */
#define DCNTL 0x3B /* DMA Control R/W */
#define ADDER 0x3C /* Sum output of Internal adder R */
#define SIEN0 0x40 /* Scsi Interrupt Enable 0 R/W */
#define SIEN1 0x41 /* Scsi Interrupt Enable 1 R/W */
#define SIST0 0x42 /* Scsi Interrupt Status 0 R */
#define SIST1 0x43 /* Scsi Interrupt Status 1 R */
#define SLPAR 0x44 /* Scsi Longitudinal Parity R/W */
#define SWIDE 0x45 /* Reserved */
#define MACNTL 0x46 /* Memory Access Control R/W */
#define GPCNTL 0x47 /* General Purpose Control R/W */
#define STIME0 0x48 /* Scsi Timer 0 R/W */
#define STIME1 0x49 /* Scsi Timer 1 R/W */
#define RESPID0 0x4A /* Response ID 0 R/W */
#define RESPID1 0x4B /* Response ID 1 R/W */
#define STEST0 0x4C /* Scsi Test 0 R */
#define STEST1 0x4D /* Scsi Test 1 R */
#define STEST2 0x4E /* Scsi Test 2 R/W */
#define STEST3 0x4F /* Scsi Test 3 R/W */
#define SIDL 0x50 /* Scsi Input Data Latch R */
#define RES51 0x51 /* Reserved */
#define SODL 0x54 /* Scsi Output Data Latch R/W */
#define RES55 0x55 /* Reserved */
#define SBDL 0x58 /* Scsi Bus Data Lines R */
#define RES59 0x59 /* Reserved */
#define SCRATCHB 0x5C /* General Purpose Scratch Pad B R/W */
/*
;==========================================================
; structure for 53C825A register ( I/O )
;==========================================================
*/
#define __scntl0 0
#define __scntl1 1
#define __scntl2 2
#define __scntl3 3
#define __scid 4
#define __sxfer 5
#define __sdid 6
#define __gpreg 7
#define __sfbr 8
#define __socl 9
#define __ssid 0x0A
#define __sbcl 0x0B
#define __dstat 0x0C
#define __sstat0 0x0D
#define __sstat1 0x0E
#define __sstat2 0x0F
#define __dsa 0x10
#define __istat 0x14
/*#define 0x15*/
#define __ctest0 0x18
#define __ctest1 0x19
#define __ctest2 0x1A
#define __ctest3 0x1B
#define __temp 0x1C
#define __dfifo 0x20
#define __ctest4 0x21
#define __ctest5 0x22
#define __ctest6 0x23
#define __dbc 0x24
#define __dcmd 0x27
#define __dnad 0x28
#define __dsp 0x2C
#define __dsps 0x30
#define __scratcha 0x34
#define __dmode 0x38
#define __dien 0x39
#define __dwt 0x3A
#define __dcntl 0x3B
#define __adder 0x3C
#define __sien0 0x40
#define __sien1 0x41
#define __sist0 0x42
#define __sist1 0x43
#define __slpar 0x44
#define __swide 0x45
#define __mactrl 0x46
#define __gpctrl 0x47
#define __stime0 0x48
#define __stime1 0x49
#define __respid0 0x4A
#define __respid1 0x4B
#define __stest0 0x4C
#define __stest1 0x4D
#define __stest2 0x4E
#define __stest3 0x4F
#define __sidl 0x50 /*; For wide SCSI, this register*/
/*#define 0x51 ; contains 2 bytes*/
#define __sodl 0x54
/*#define 0x55*/
#define __sbdl 0x58
/*#define 0x59*/
#define __scratchb 0x5C
/*
;==========================================================
; Script interrupt code(Vector)
;==========================================================
*/
#define __COMPLETE 0 /*; command complete*/
#define __RESELECTED 1 /*; reselected, without MESSAGE*/
#define __RESELECTED1 2 /*; reselected with idenntify bytes*/
#define __RESELECTEDT 3 /*; reselected with TAGS*/
#define __DISCONNECTED 4 /*; disconnected*/
#define __MSGEXTEND 5 /*; Extended msgin*/
#define __SIGNAL 6 /*; signaled, need to clear SIG*/
#define __MSGUNKNOWN 7 /*; Unknown message*/
#define __MSGOUT 8 /*; Message out phase detected*/
#define __FATALERROR 9 /*; Fatal error*/
#define __MSGSYNC 10 /*; Sync nego input*/
#define __MSGWIDE 11 /*; Wide nego input*/
#define __RESTOREPTR 12 /*; restore pointer received*/
#define __MSGREJECT 13 /*; Reject message received*/
#define __DEBUG 14 /*; For debug*/
#define DC390W_read8(address) \
inb(DC390W_ioport + (address)))
#define DC390W_read16(address) \
inw(DC390W_ioport + (address)))
#define DC390W_read32(address) \
inl(DC390W_ioport + (address)))
#define DC390W_write8(address,value) \
outb((value), DC390W_ioport + (address)))
#define DC390W_write16(address,value) \
outw((value), DC390W_ioport + (address)))
#define DC390W_write32(address,value) \
outl((value), DC390W_ioport + (address)))
#endif /* TMSCSIW_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.