📄 tmscsim.h
字号:
#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*/ /* The values defined in include/scsi/scsi.h, to be shifted << 1 */#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 *//* cmd->result */#define RES_TARGET 0x000000FF /* Target State */#define RES_TARGET_LNX STATUS_MASK /* Only official ... */#define RES_ENDMSG 0x0000FF00 /* End Message */#define RES_DID 0x00FF0000 /* DID_ codes */#define RES_DRV 0xFF000000 /* DRIVER_ codes */#define MK_RES(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt))#define MK_RES_LNX(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt)<<1)#define SET_RES_TARGET(who,tgt) { who &= ~RES_TARGET; who |= (int)(tgt); }#define SET_RES_TARGET_LNX(who,tgt) { who &= ~RES_TARGET_LNX; who |= (int)(tgt) << 1; }#define SET_RES_MSG(who,msg) { who &= ~RES_ENDMSG; who |= (int)(msg) << 8; }#define SET_RES_DID(who,did) { who &= ~RES_DID; who |= (int)(did) << 16; }#define SET_RES_DRV(who,drv) { who &= ~RES_DRV; who |= (int)(drv) << 24; }/*;---Sync_Mode */#define SYNC_DISABLE 0#define SYNC_ENABLE BIT0#define SYNC_NEGO_DONE BIT1#define WIDE_ENABLE BIT2 /* Not used ;-) */#define WIDE_NEGO_DONE BIT3 /* Not used ;-) */#define EN_TAG_QUEUEING BIT4#define EN_ATN_STOP BIT5#define SYNC_NEGO_OFFSET 15/*;---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*/ /* see scsi/scsi.h */ /* One is missing ! */#define ABORT_TAG 0x0d/*** Inquiry Data format*/typedef struct _SCSIInqData { /* INQUIRY */ 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 */#define TYPE_NODEV SCSI_DEVTYPE /* Unknown or no device type *//* Inquiry byte 1 mask */#define SCSI_REMOVABLE_MEDIA 0x80 /* Removable Media bit (1=removable) *//* Peripheral Device Type definitions *//* see include/scsi/scsi.h for the rest */#ifndef TYPE_PRINTER# define TYPE_PRINTER 0x02 /* Printer device */#endif#ifndef TYPE_COMM# define TYPE_COMM 0x09 /* Communications device */#endif/*** 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 REAL_EE_ADAPT_SCSI_ID 64#define REAL_EE_MODE2 65#define REAL_EE_DELAY 66#define REAL_EE_TAG_CMD_NUM 67#define EE_ADAPT_SCSI_ID 32#define EE_MODE2 33#define EE_DELAY 34#define EE_TAG_CMD_NUM 35#define EE_LEN 40/*; EE_MODE1 bits definition*/#define PARITY_CHK_ BIT0#define SYNC_NEGO_ BIT1#define EN_DISCONNECT_ BIT2#define SEND_START_ BIT3#define TAG_QUEUEING_ BIT4/*; 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/*;==========================================================; AMD 53C974 Registers bit Definition;==========================================================*//*;====================; SCSI Register;====================*//*; Command Reg.(+0CH) (rw) */#define DMA_COMMAND BIT7#define NOP_CMD 0#define CLEAR_FIFO_CMD 1#define RST_DEVICE_CMD 2#define RST_SCSI_BUS_CMD 3#define INFO_XFER_CMD 0x10#define INITIATOR_CMD_CMPLTE 0x11#define MSG_ACCEPTED_CMD 0x12#define XFER_PAD_BYTE 0x18#define SET_ATN_CMD 0x1A#define RESET_ATN_CMD 0x1B#define SEL_WO_ATN 0x41 /* currently not used */#define SEL_W_ATN 0x42#define SEL_W_ATN_STOP 0x43#define SEL_W_ATN3 0x46#define EN_SEL_RESEL 0x44#define DIS_SEL_RESEL 0x45 /* currently not used */#define RESEL 0x40 /* " */#define RESEL_ATN3 0x47 /* " */#define DATA_XFER_CMD INFO_XFER_CMD/*; SCSI Status Reg.(+10H) (r) */#define INTERRUPT BIT7#define ILLEGAL_OP_ERR BIT6#define PARITY_ERR BIT5#define COUNT_2_ZERO BIT4#define GROUP_CODE_VALID BIT3#define SCSI_PHASE_MASK (BIT2+BIT1+BIT0) /* BIT2: MSG phase; BIT1: C/D physe; BIT0: I/O phase *//*; Interrupt Status Reg.(+14H) (r) */#define SCSI_RESET BIT7#define INVALID_CMD BIT6#define DISCONNECTED BIT5#define SERVICE_REQUEST BIT4#define SUCCESSFUL_OP BIT3#define RESELECTED BIT2#define SEL_ATTENTION BIT1#define SELECTED BIT0/*; Internal State Reg.(+18H) (r) */#define SYNC_OFFSET_FLAG BIT3#define INTRN_STATE_MASK (BIT2+BIT1+BIT0)/* 0x04: Sel. successful (w/o stop), 0x01: Sel. successful (w/ stop) *//*; Clock Factor Reg.(+24H) (w) */#define CLK_FREQ_40MHZ 0#define CLK_FREQ_35MHZ (BIT2+BIT1+BIT0)#define CLK_FREQ_30MHZ (BIT2+BIT1)#define CLK_FREQ_25MHZ (BIT2+BIT0)#define CLK_FREQ_20MHZ BIT2#define CLK_FREQ_15MHZ (BIT1+BIT0)#define CLK_FREQ_10MHZ BIT1/*; Control Reg. 1(+20H) (rw) */#define EXTENDED_TIMING BIT7#define DIS_INT_ON_SCSI_RST BIT6#define PARITY_ERR_REPO BIT4#define SCSI_ID_ON_BUS (BIT2+BIT1+BIT0) /* host adapter ID *//*; Control Reg. 2(+2CH) (rw) */#define EN_FEATURE BIT6#define EN_SCSI2_CMD BIT3/*; Control Reg. 3(+30H) (rw) */#define ID_MSG_CHECK BIT7#define EN_QTAG_MSG BIT6#define EN_GRP2_CMD BIT5#define FAST_SCSI BIT4 /* ;10MB/SEC */#define FAST_CLK BIT3 /* ;25 - 40 MHZ *//*; Control Reg. 4(+34H) (rw) */#define EATER_12NS 0#define EATER_25NS BIT7#define EATER_35NS BIT6#define EATER_0NS (BIT7+BIT6)#define REDUCED_POWER BIT5#define CTRL4_RESERVED BIT4 /* must be 1 acc. to AM53C974.c */#define NEGATE_REQACKDATA BIT2#define NEGATE_REQACK BIT3#define GLITCH_TO_NS(x) (((~x>>6 & 2) >> 1) | ((x>>6 & 1) << 1 ^ (x>>6 & 2)))#define NS_TO_GLITCH(y) (((~y<<7) | ~((y<<6) ^ ((y<<5 & 1<<6) | ~0x40))) & 0xc0)/*;====================; DMA Register;====================*//*; DMA Command Reg.(+40H) (rw) */#define READ_DIRECTION BIT7#define WRITE_DIRECTION 0#define EN_DMA_INT BIT6#define EN_PAGE_INT BIT5 /* page transfer interrupt enable */#define MAP_TO_MDL BIT4#define DIAGNOSTIC BIT2#define DMA_IDLE_CMD 0#define DMA_BLAST_CMD BIT0#define DMA_ABORT_CMD BIT1#define DMA_START_CMD (BIT1+BIT0)/*; DMA Status Reg.(+54H) (r) */#define PCI_MS_ABORT BIT6#define BLAST_COMPLETE BIT5#define SCSI_INTERRUPT BIT4#define DMA_XFER_DONE BIT3#define DMA_XFER_ABORT BIT2#define DMA_XFER_ERROR BIT1#define POWER_DOWN BIT0/*; DMA SCSI Bus and Ctrl.(+70H) */#define EN_INT_ON_PCI_ABORT BIT25#define WRT_ERASE_DMA_STAT BIT24#define PW_DOWN_CTRL BIT21#define SCSI_BUSY BIT20#define SCLK BIT19#define SCAM BIT18#define SCSI_LINES 0x0003ffff/*;==========================================================; SCSI Chip register address offset;==========================================================;Registers are rw unless declared otherwise */#define CtcReg_Low 0x00 /* r curr. transfer count */#define CtcReg_Mid 0x04 /* r */#define CtcReg_High 0x38 /* r */#define ScsiFifo 0x08#define ScsiCmd 0x0C#define Scsi_Status 0x10 /* r */#define INT_Status 0x14 /* r */#define Sync_Period 0x18 /* w */#define Sync_Offset 0x1C /* w */#define Clk_Factor 0x24 /* w */#define CtrlReg1 0x20 #define CtrlReg2 0x2C#define CtrlReg3 0x30#define CtrlReg4 0x34#define DMA_Cmd 0x40#define DMA_XferCnt 0x44 /* rw starting transfer count (32 bit) */#define DMA_XferAddr 0x48 /* rw starting physical address (32 bit) */#define DMA_Wk_ByteCntr 0x4C /* r working byte counter */#define DMA_Wk_AddrCntr 0x50 /* r working address counter */#define DMA_Status 0x54 /* r */#define DMA_MDL_Addr 0x58 /* rw starting MDL address */#define DMA_Wk_MDL_Cntr 0x5C /* r working MDL counter */#define DMA_ScsiBusCtrl 0x70 /* rw SCSI Bus, PCI/DMA Ctrl */#define StcReg_Low CtcReg_Low /* w start transfer count */#define StcReg_Mid CtcReg_Mid /* w */#define StcReg_High CtcReg_High /* w */#define Scsi_Dest_ID Scsi_Status /* w */#define Scsi_TimeOut INT_Status /* w */#define Intern_State Sync_Period /* r */#define Current_Fifo Sync_Offset /* r Curr. FIFO / int. state */#define DC390_read8(address) \ (inb (pACB->IOPortBase + (address)))#define DC390_read8_(address, base) \ (inb ((USHORT)(base) + (address)))#define DC390_read16(address) \ (inw (pACB->IOPortBase + (address)))#define DC390_read32(address) \ (inl (pACB->IOPortBase + (address)))#define DC390_write8(address,value) \ outb ((value), pACB->IOPortBase + (address))#define DC390_write8_(address,value,base) \ outb ((value), (USHORT)(base) + (address))#define DC390_write16(address,value) \ outw ((value), pACB->IOPortBase + (address))#define DC390_write32(address,value) \ outl ((value), pACB->IOPortBase + (address))#endif /* _TMSCSIM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -