📄 flashpoint.c
字号:
* $Date: 1996/10/24 23:09:33 $ * * $Revision: 1.14 $ * *----------------------------------------------------------------------*/#ifndef __SCCB_H__#define __SCCB_H__/*#include <osflags.h>*//*#include <globals.h>*/#if defined(BUGBUG)#define debug_size 32#endif#if defined(DOS) typedef struct _SCCB near *PSCCB; #if (FW_TYPE == _SCCB_MGR_) typedef void (*CALL_BK_FN)(PSCCB); #endif#elif defined(OS2) typedef struct _SCCB far *PSCCB; #if (FW_TYPE == _SCCB_MGR_) typedef void (far *CALL_BK_FN)(PSCCB); #endif#else typedef struct _SCCB *PSCCB; #if (FW_TYPE == _SCCB_MGR_) typedef void (*CALL_BK_FN)(PSCCB); #endif#endiftypedef struct SCCBMgr_info { ULONG si_baseaddr; UCHAR si_present; UCHAR si_intvect; UCHAR si_id; UCHAR si_lun; USHORT si_fw_revision; USHORT si_per_targ_init_sync; USHORT si_per_targ_fast_nego; USHORT si_per_targ_ultra_nego; USHORT si_per_targ_no_disc; USHORT si_per_targ_wide_nego; USHORT si_flags; UCHAR si_card_family; UCHAR si_bustype; UCHAR si_card_model[3]; UCHAR si_relative_cardnum; UCHAR si_reserved[4]; ULONG si_OS_reserved; UCHAR si_XlatInfo[4]; ULONG si_reserved2[5]; ULONG si_secondary_range;} SCCBMGR_INFO;#if defined(DOS) typedef SCCBMGR_INFO * PSCCBMGR_INFO;#else #if defined (COMPILER_16_BIT) typedef SCCBMGR_INFO far * PSCCBMGR_INFO; #else typedef SCCBMGR_INFO * PSCCBMGR_INFO; #endif#endif // defined(DOS)#if (FW_TYPE==_SCCB_MGR_) #define SCSI_PARITY_ENA 0x0001 #define LOW_BYTE_TERM 0x0010 #define HIGH_BYTE_TERM 0x0020 #define BUSTYPE_PCI 0x3#endif#define SUPPORT_16TAR_32LUN 0x0002#define SOFT_RESET 0x0004#define EXTENDED_TRANSLATION 0x0008#define POST_ALL_UNDERRRUNS 0x0040#define FLAG_SCAM_ENABLED 0x0080#define FLAG_SCAM_LEVEL2 0x0100#define HARPOON_FAMILY 0x02#define ISA_BUS_CARD 0x01#define EISA_BUS_CARD 0x02#define PCI_BUS_CARD 0x03#define VESA_BUS_CARD 0x04/* SCCB struc used for both SCCB and UCB manager compiles! * The UCB Manager treats the SCCB as it's 'native hardware structure' */#pragma pack(1)typedef struct _SCCB { UCHAR OperationCode; UCHAR ControlByte; UCHAR CdbLength; UCHAR RequestSenseLength; ULONG DataLength; ULONG DataPointer; UCHAR CcbRes[2]; UCHAR HostStatus; UCHAR TargetStatus; UCHAR TargID; UCHAR Lun; UCHAR Cdb[12]; UCHAR CcbRes1; UCHAR Reserved1; ULONG Reserved2; ULONG SensePointer; CALL_BK_FN SccbCallback; /* VOID (*SccbCallback)(); */ ULONG SccbIOPort; /* Identifies board base port */ UCHAR SccbStatus; UCHAR SCCBRes2; USHORT SccbOSFlags; ULONG Sccb_XferCnt; /* actual transfer count */ ULONG Sccb_ATC; ULONG SccbVirtDataPtr; /* virtual addr for OS/2 */ ULONG Sccb_res1; USHORT Sccb_MGRFlags; USHORT Sccb_sgseg; UCHAR Sccb_scsimsg; /* identify msg for selection */ UCHAR Sccb_tag; UCHAR Sccb_scsistat; UCHAR Sccb_idmsg; /* image of last msg in */ PSCCB Sccb_forwardlink; PSCCB Sccb_backlink; ULONG Sccb_savedATC; UCHAR Save_Cdb[6]; UCHAR Save_CdbLen; UCHAR Sccb_XferState; ULONG Sccb_SGoffset;#if (FW_TYPE == _UCB_MGR_) PUCB Sccb_ucb_ptr;#endif } SCCB;#define SCCB_SIZE sizeof(SCCB)#pragma pack()#define SCSI_INITIATOR_COMMAND 0x00#define TARGET_MODE_COMMAND 0x01#define SCATTER_GATHER_COMMAND 0x02#define RESIDUAL_COMMAND 0x03#define RESIDUAL_SG_COMMAND 0x04#define RESET_COMMAND 0x81#define F_USE_CMD_Q 0x20 /*Inidcates TAGGED command. */#define TAG_TYPE_MASK 0xC0 /*Type of tag msg to send. */#define TAG_Q_MASK 0xE0#define SCCB_DATA_XFER_OUT 0x10 /* Write */#define SCCB_DATA_XFER_IN 0x08 /* Read */#define FOURTEEN_BYTES 0x00 /* Request Sense Buffer size */#define NO_AUTO_REQUEST_SENSE 0x01 /* No Request Sense Buffer */#define BUS_FREE_ST 0 #define SELECT_ST 1#define SELECT_BDR_ST 2 /* Select w\ Bus Device Reset */#define SELECT_SN_ST 3 /* Select w\ Sync Nego */#define SELECT_WN_ST 4 /* Select w\ Wide Data Nego */#define SELECT_Q_ST 5 /* Select w\ Tagged Q'ing */#define COMMAND_ST 6#define DATA_OUT_ST 7#define DATA_IN_ST 8#define DISCONNECT_ST 9#define STATUS_ST 10#define ABORT_ST 11#define MESSAGE_ST 12#define F_HOST_XFER_DIR 0x01#define F_ALL_XFERRED 0x02#define F_SG_XFER 0x04#define F_AUTO_SENSE 0x08#define F_ODD_BALL_CNT 0x10#define F_NO_DATA_YET 0x80#define F_STATUSLOADED 0x01#define F_MSGLOADED 0x02#define F_DEV_SELECTED 0x04#define SCCB_COMPLETE 0x00 /* SCCB completed without error */#define SCCB_DATA_UNDER_RUN 0x0C#define SCCB_SELECTION_TIMEOUT 0x11 /* Set SCSI selection timed out */#define SCCB_DATA_OVER_RUN 0x12#define SCCB_UNEXPECTED_BUS_FREE 0x13 /* Target dropped SCSI BSY */#define SCCB_PHASE_SEQUENCE_FAIL 0x14 /* Target bus phase sequence failure */#define SCCB_INVALID_OP_CODE 0x16 /* SCCB invalid operation code */#define SCCB_INVALID_SCCB 0x1A /* Invalid SCCB - bad parameter */#define SCCB_GROSS_FW_ERR 0x27 /* Major problem! */#define SCCB_BM_ERR 0x30 /* BusMaster error. */#define SCCB_PARITY_ERR 0x34 /* SCSI parity error */#if (FW_TYPE==_UCB_MGR_) #define HBA_AUTO_SENSE_FAIL 0x1B #define HBA_TQ_REJECTED 0x1C #define HBA_UNSUPORTED_MSG 0x1D #define HBA_HW_ERROR 0x20 #define HBA_ATN_NOT_RESPONDED 0x21 #define HBA_SCSI_RESET_BY_ADAPTER 0x22 #define HBA_SCSI_RESET_BY_TARGET 0x23 #define HBA_WRONG_CONNECTION 0x24 #define HBA_BUS_DEVICE_RESET 0x25 #define HBA_ABORT_QUEUE 0x26#else // these are not defined in BUDI/UCB #define SCCB_INVALID_DIRECTION 0x18 /* Invalid target direction */ #define SCCB_DUPLICATE_SCCB 0x19 /* Duplicate SCCB */ #define SCCB_SCSI_RST 0x35 /* SCSI RESET detected. */#endif // (FW_TYPE==_UCB_MGR_) #define SCCB_IN_PROCESS 0x00#define SCCB_SUCCESS 0x01#define SCCB_ABORT 0x02#define SCCB_NOT_FOUND 0x03#define SCCB_ERROR 0x04#define SCCB_INVALID 0x05#define SCCB_SIZE sizeof(SCCB)#if (FW_TYPE == _UCB_MGR_) void SccbMgr_start_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb); s32bits SccbMgr_abort_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb); u08bits SccbMgr_my_int(CARD_HANDLE pCurrCard); s32bits SccbMgr_isr(CARD_HANDLE pCurrCard); void SccbMgr_scsi_reset(CARD_HANDLE pCurrCard); void SccbMgr_timer_expired(CARD_HANDLE pCurrCard); void SccbMgr_unload_card(CARD_HANDLE pCurrCard); void SccbMgr_restore_foreign_state(CARD_HANDLE pCurrCard); void SccbMgr_restore_native_state(CARD_HANDLE pCurrCard); void SccbMgr_save_foreign_state(PADAPTER_INFO pAdapterInfo);#endif#if (FW_TYPE == _SCCB_MGR_) #if defined (DOS) int SccbMgr_sense_adapter(PSCCBMGR_INFO pCardInfo); USHORT SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo); void SccbMgr_start_sccb(USHORT pCurrCard, PSCCB p_SCCB); int SccbMgr_abort_sccb(USHORT pCurrCard, PSCCB p_SCCB); UCHAR SccbMgr_my_int(USHORT pCurrCard); int SccbMgr_isr(USHORT pCurrCard); void SccbMgr_scsi_reset(USHORT pCurrCard); void SccbMgr_timer_expired(USHORT pCurrCard); USHORT SccbMgr_status(USHORT pCurrCard); void SccbMgr_unload_card(USHORT pCurrCard); #else //non-DOS int SccbMgr_sense_adapter(PSCCBMGR_INFO pCardInfo); ULONG SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo); void SccbMgr_start_sccb(ULONG pCurrCard, PSCCB p_SCCB); int SccbMgr_abort_sccb(ULONG pCurrCard, PSCCB p_SCCB); UCHAR SccbMgr_my_int(ULONG pCurrCard); int SccbMgr_isr(ULONG pCurrCard); void SccbMgr_scsi_reset(ULONG pCurrCard); void SccbMgr_enable_int(ULONG pCurrCard); void SccbMgr_disable_int(ULONG pCurrCard); void SccbMgr_timer_expired(ULONG pCurrCard); void SccbMgr_unload_card(ULONG pCurrCard); #endif#endif // (FW_TYPE == _SCCB_MGR_)#endif /* __SCCB_H__ *//*---------------------------------------------------------------------- * * * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved * * This file is available under both the GNU General Public License * and a BSD-style copyright; see LICENSE.FlashPoint for details. * * $Workfile: blx30.h $ * * Description: This module contains SCCB/UCB Manager implementation * specific stuff. * * $Date: 1996/11/13 18:34:22 $ * * $Revision: 1.10 $ * *----------------------------------------------------------------------*/#ifndef __blx30_H__#define __blx30_H__/*#include <globals.h>*/#define ORION_FW_REV 3110#define HARP_REVD 1#if defined(DOS)#define QUEUE_DEPTH 8+1 /*1 for Normal disconnect 0 for Q'ing. */#else#define QUEUE_DEPTH 254+1 /*1 for Normal disconnect 32 for Q'ing. */#endif // defined(DOS)#define MAX_MB_CARDS 4 /* Max. no of cards suppoerted on Mother Board */#define WIDE_SCSI 1#if defined(WIDE_SCSI) #if defined(DOS) #define MAX_SCSI_TAR 16 #define MAX_LUN 8 #define LUN_MASK 0x07 #else #define MAX_SCSI_TAR 16 #define MAX_LUN 32 #define LUN_MASK 0x1f #endif#else #define MAX_SCSI_TAR 8 #define MAX_LUN 8 #define LUN_MASK 0x07#endif #if defined(HARP_REVA)#define SG_BUF_CNT 15 /*Number of prefetched elements. */#else#define SG_BUF_CNT 16 /*Number of prefetched elements. */#endif#define SG_ELEMENT_SIZE 8 /*Eight byte per element. */#define SG_LOCAL_MASK 0x00000000L#define SG_ELEMENT_MASK 0xFFFFFFFFL#if (FW_TYPE == _UCB_MGR_) #define OPC_DECODE_NORMAL 0x0f7f#endif // _UCB_MGR_#if defined(DOS)/*#include <dos.h>*/ #define RD_HARPOON(ioport) (OS_InPortByte(ioport)) #define RDW_HARPOON(ioport) (OS_InPortWord(ioport)) #define WR_HARPOON(ioport,val) (OS_OutPortByte(ioport,val)) #define WRW_HARPOON(ioport,val) (OS_OutPortWord(ioport,val)) #define RD_HARP32(port,offset,data) asm{db 66h; \ push ax; \ mov dx,port; \ add dx, offset; \ db 66h; \ in ax,dx; \ db 66h; \ mov word ptr data,ax;\ db 66h; \ pop ax} #define WR_HARP32(port,offset,data) asm{db 66h; \ push ax; \ mov dx,port; \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -