📄 i950.h
字号:
#define TUL_XFifo 0xE8 /*DMA FIFO */
#define TUL_WCtrl 0xF7 /*Bus master wait state control */
#define TUL_DCtrl 0xFB /*DMA delay control */
/******************* SCSI Phase Codes*********************/
#define DATA_OUT 0x0
#define DATA_IN 0x1
#define CMD_OUT 0x2
#define STATUS 0x3
#define MSG_OUT 0x6
#define MSG_IN 0x7
/***********************************************************************
Scatter-Gather Element Structure
************************************************************************/
typedef struct SG_Struc {
ULONG Ptr; /* Data Pointer */
ULONG Len; /* Data Length */
} SG;
/* Scatter/Gather Segment Descriptor Definition */
typedef struct _SGD {
ULONG Length;
ULONG Address;
} SGD, *PSGD;
#define TUL_MAX_SG_LIST 49 // 65
/***********************************************************************
SCSI Control Block
************************************************************************/
typedef struct tul_scb { /* Scsi_Ctrl_Blk */
UBYTE Status; /*0 */
UBYTE NxtStat;/*1 */
UBYTE Mode; /*2 */
UBYTE SgLock; /*3 */
UWORD SGIdx; /*4 */
UWORD SGMax; /*6 */
ULONG XferLen;/*8 */
ULONG TotalXLen; /*c */
ULONG SGPAddr; /*10 SG List/Sense Buf phy. Addr. */
ULONG SensePtr; /*14 Sense Buf virtual addr */
void (*Post)(); /*18 POST routine */
SCSI_REQUEST_BLOCK *Srb; /*1C SRB Pointer */
UBYTE Opcode; /*20 TULSCB command code */
UBYTE Flags; /*21 TULSCB Flags */
UBYTE Target; /*22 Target Id */
UBYTE Lun; /*23 Lun */
ULONG BufPtr; /*24 Data Buffer Pointer */
ULONG BufLen; /*28 Data Allocation Length */
UBYTE SGLen; /*2C SG list # */
UBYTE SenseLen; /*2D Sense Allocation Length */
UBYTE HaStat; /*2E */
UBYTE TaStat; /*2F */
UBYTE CDBLen; /*30 CDB Length */
UBYTE Ident; /*31 Identify */
UBYTE TagMsg; /*32 Tag Message */
UBYTE TagId; /*33 Queue Tag */
UBYTE CDB[12]; /*34 */
UBYTE RetryCount;
UBYTE IOCTLState;
UWORD XferSG; /* number of SG been xferred */
struct tul_scb *NextScb; /* Pointer to next TULSCB */
ULONG NxtBufPtr; /* Next Data Buffer Pointer */
ULONG NxtBufLen; /* Next Data Allocation Length */
ULONG scbpAryIdx; /* scb array index of hcsp->scb[] and hcsp->scbpAry[] */
USHORT tobeBusFree;
USHORT setATN;
SG SGList[TUL_MAX_SG_LIST]; /*40 Start of SG list */
} TULSCB, *PTULSCB;
/* Bit Definition for TULSCB_Status */
#define TULSCB_RENT 0x01
#define TULSCB_PEND 0x02
#define TULSCB_CONTIG 0x04 /* Contigent Allegiance */
#define TULSCB_SELECT 0x08
#define TULSCB_BUSY 0x10
#define TULSCB_DONE 0x20
/* Opcodes of TULSCB_Opcode */
#define ExecSCSI 0x1
#define BusDevRst 0x2
#define AbortCmd 0x3
/* Bit Definition for TULSCB_Mode */
#define SCM_RSENS 0x01 /* request sense mode */
/* Bit Definition for TULSCB_Flags */
#define SCF_DONE 0x01
#define SCF_POST 0x02
#define SCF_SENSE 0x04
#define SCF_DIR 0x18
#define SCF_NO_DCHK 0x00
#define SCF_DIN 0x08
#define SCF_DOUT 0x10
#define SCF_NO_XF 0x18
#define SCF_POLL 0x40
#define SCF_SG 0x80
/* Error Codes for TULSCB_HaStat */
#define HOST_SEL_TOUT 0x11
#define HOST_DO_DU 0x12
#define HOST_BUS_FREE 0x13
#define HOST_BAD_PHAS 0x14
#define HOST_INV_CMD 0x16
#define HOST_SCSI_RST 0x1B
#define HOST_DEV_RST 0x1C
#define HOST_CANNOT_ALLOC_SCB 0x1D
/* Error Codes for TULSCB_TaStat */
#define TARGET_CHECK_CONDITION 0x02
#define TARGET_BUSY 0x08
#define TARGET_TAG_FULL 0x28
/* SCSI MESSAGE */
#define MSG_COMP 0x00
#define MSG_EXTEND 0x01
#define MSG_SDP 0x02
#define MSG_RESTORE 0x03
#define MSG_DISC 0x04
#define MSG_IDE 0x05
#define MSG_ABORT 0x06
#define MSG_REJ 0x07
#define MSG_NOP 0x08
#define MSG_PARITY 0x09
#define MSG_LINK_COMP 0x0A
#define MSG_LINK_FLAG 0x0B
#define MSG_DEVRST 0x0C
#define MSG_ABORT_TAG 0x0D
/* Queue tag msg: Simple_quque_tag, Head_of_queue_tag, Ordered_queue_tag */
#define MSG_STAG 0x20
#define MSG_HTAG 0x21
#define MSG_OTAG 0x22
#define MSG_IGNOREWIDE 0x23
#define MSG_IDENT 0x80
/***********************************************************************
Target Device Control Structure
**********************************************************************/
typedef struct Tar_Ctrl_Struc {
USHORT Flags;
UBYTE JS_PeriodOffset; /* bit6-4: sync xfer period, bit 3-0:sync offset */
UBYTE Period;
UBYTE xfrPeriodIdx;
UBYTE sConfig;
UBYTE rsvd;
char MaximumTags; /* 08/07/97 */
char RequestCount[8]; /* 07/31/97 */
} TCS;
/* Bit Definition for TCF_Flags */
#define TCF_SCSI_RATE 0x007
#define TCF_DISCONNECT 0x008
#define TCF_NO_SYNC_NEGO 0x010
#define TCF_NO_WDTR 0x020
#define TCF_EN_255 0x040
#define TCF_EN_START 0x080
#define TCF_WDTR_DONE 0x100
#define TCF_SYNC_DONE 0x200
#define TCF_BUSY 0x400
#define TCF_EN_TAG 0x800
/***********************************************************************
Host Adapter Control Structure
************************************************************************/
#define MAX_TUL_SCB 64 /* Maximum TUL_SCB */
typedef struct i910_ha { /* Ha_Ctrl_Struc */
ULONG_PTR Base; /* 00 */
UBYTE Index; /* 04 */
UBYTE HaId; /* 05 */
UBYTE Intr; /* 06 */
UBYTE Config; /* 07 */
UBYTE wide_scsi_card; /* 08 */
UWORD IdMask; /* 09 */
UBYTE semaph; /* 0B */
UBYTE Flags; /* 0C */
UBYTE Phase; /* 0D */
UBYTE JSStatus0; /* 0E*/
UBYTE JSInt; /* 0F */
UBYTE JSStatus1; /* 0x10 */
UBYTE HCS_SConf1; /* 0x11 */
void (*SCSIFunc)(); /* 0x12 */
TULSCB *Scb; /* 0x16 */
TULSCB *ScbEnd; /* 0x1A */
LONG NxtPend; /* 0x1E */
LONG NxtContig; /* 0x22 */
TULSCB *ActScb; /* 0x26 */
TCS *ActTcs; /* 0x2A */
TCS Tcs[16]; /* 0x2E */
TULSCB *FirstPend;
TULSCB *LastPend;
TULSCB *FirstBusy;
TULSCB *LastBusy;
TULSCB *FirstDone;
TULSCB *LastDone;
UBYTE Msg[8];
} HCS, *PHCS;
/* Bit Definition for HCB_Config */
#define HCC_SCSI_RESET 0x01
#define HCC_EN_PAR 0x02
#define HCC_ACT_TERM1 0x04
#define HCC_ACT_TERM2 0x08
#define HCC_EN_PWR 0x80
#define HCC_AUTO_TERM 0x10
/* Bit Definition for HCB_Flags */
#define HCF_EXPECT_DISC 0x01
/* Scatter/Gather Segment List Definitions */
/* Adapter limits */
#define MAX_SG_DESCRIPTORS TUL_MAX_SG_LIST
#define MAX_TRANSFER_SIZE (MAX_SG_DESCRIPTORS - 1) * 4096
#define SEGMENT_LIST_SIZE MAX_SG_DESCRIPTORS * sizeof(SGD)
#define NONCACHED_EXTENSION 256
/* INI910 specific port driver device object extension. */
typedef struct _HW_DEVICE_EXTENSION {
HCS hcs;
PVOID NonCachedBuf;
} HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION;
#define inp( x ) ScsiPortReadPortUchar( (PUCHAR)x )
#define inpw( x ) ScsiPortReadPortUshort( (PUSHORT)x )
#define inpl( x ) ScsiPortReadPortUlong( (PULONG)x )
#define outp( x, y ) ScsiPortWritePortUchar( (PUCHAR)x, (UCHAR)y )
#define outpw( x, y ) ScsiPortWritePortUshort( (PUSHORT)x, (USHORT)y )
#define outpl( x, y ) ScsiPortWritePortUlong( (PULONG)x, (ULONG)y )
#define TUL_RD(x,y) (UCHAR)(ScsiPortReadPortUchar( (PUCHAR)((ULONG_PTR)((ULONG_PTR)x+(UCHAR)y)) ))
#define TUL_RDSHORT(x,y) (USHORT)(ScsiPortReadPortUshort( (PUSHORT)((ULONG_PTR)((ULONG_PTR)x+(UCHAR)y)) ))
#define TUL_RDLONG(x,y) (long)(ScsiPortReadPortUlong( (PULONG)((ULONG_PTR)((ULONG_PTR)x+(UCHAR)y)) ))
#define TUL_WR( adr,data) ScsiPortWritePortUchar( (PUCHAR)(adr), (UCHAR)(data))
#define TUL_WRSHORT(adr,data) ScsiPortWritePortUshort((PUSHORT)(adr),(USHORT)(data))
#define TUL_WRLONG( adr,data) ScsiPortWritePortUlong( (PULONG)(adr), (ULONG)(data))
#endif /* _I950_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -