📄 advansys.c
字号:
#include "sd.h"#include "advansys.h"#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,1,93)#ifdef CONFIG_PCI#include <linux/pci.h>#endif /* CONFIG_PCI */#else /* version < v2.1.93 *//* * For earlier than v2.1.93 the driver has its own PCI configuration. * If PCI is not needed in a kernel before v2.1.93 this define can be * turned-off to make the driver object smaller. */#define ASC_CONFIG_PCI#endif /* version < v2.1.93 *//* * If Linux eventually defines a DID_UNDERRUN, the constant here can be * removed. The current value of zero for DID_UNDERRUN results in underrun * conditions being ignored. */#define DID_UNDERRUN 0/* * --- Driver Options *//* Enable driver assertions. */#define ADVANSYS_ASSERT/* Enable driver tracing. *//* #define ADVANSYS_DEBUG *//* * Because of no /proc to display them, statistics are disabled * for versions prior to v1.3.0. */#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,0)#undef ADVANSYS_STATS /* Disable statistics */#else /* version >= v1.3.0 */#define ADVANSYS_STATS /* Enable statistics. */#endif /* version >= v1.3.0 *//* * --- Debugging Header */#ifdef ADVANSYS_DEBUG#define STATIC#else /* ADVANSYS_DEBUG */#define STATIC static#endif /* ADVANSYS_DEBUG *//* * --- Asc Library Constants and Macros */#define ASC_LIB_VERSION_MAJOR 1#define ASC_LIB_VERSION_MINOR 22#define ASC_LIB_SERIAL_NUMBER 113typedef unsigned char uchar;#ifndef NULL#define NULL (0)#endif#ifndef TRUE#define TRUE (1)#endif#ifndef FALSE#define FALSE (0)#endif#define REG register#define rchar REG __s8#define rshort REG __s16#define rint REG __s32#define rlong REG __s32#define ruchar REG __u8#define rushort REG __u16#define ruint REG __u32#define rulong REG __u32#define NULLPTR (void *)0#define FNULLPTR (void *)0UL#define EOF (-1)#define EOS '\0'#define ERR (-1)#define UB_ERR (uchar)(0xFF)#define UW_ERR (uint)(0xFFFF)#define UL_ERR (ulong)(0xFFFFFFFFUL)#define iseven_word(val) ((((uint)val) & (uint)0x0001) == 0)#define isodd_word(val) ((((uint)val) & (uint)0x0001) != 0)#define toeven_word(val) (((uint)val) & (uint)0xFFFE)#define biton(val, bits) (((uint)(val >> bits) & (uint)0x0001) != 0)#define bitoff(val, bits) (((uint)(val >> bits) & (uint)0x0001) == 0)#define lbiton(val, bits) (((ulong)(val >> bits) & (ulong)0x00000001UL) != 0)#define lbitoff(val, bits) (((ulong)(val >> bits) & (ulong)0x00000001UL) == 0)#define absh(val) ((val) < 0 ? -(val) : (val))#define swapbyte(ch) ((((ch) << 4) | ((ch) >> 4)))#ifndef GBYTE#define GBYTE (0x40000000UL)#endif#ifndef MBYTE#define MBYTE (0x100000UL)#endif#ifndef KBYTE#define KBYTE (0x400)#endif#define HI_BYTE(x) (*((__u8 *)(&x)+1))#define LO_BYTE(x) (*((__u8 *)&x))#define HI_WORD(x) (*((__u16 *)(&x)+1))#define LO_WORD(x) (*((__u16 *)&x))#ifndef MAKEWORD#define MAKEWORD(lo, hi) ((__u16) (((__u16) lo) | ((__u16) hi << 8)))#endif#ifndef MAKELONG#define MAKELONG(lo, hi) ((__u32) (((__u32) lo) | ((__u32) hi << 16)))#endif#define SwapWords(dWord) ((__u32) ((dWord >> 16) | (dWord << 16)))#define SwapBytes(word) ((__u16) ((word >> 8) | (word << 8)))#define BigToLittle(dWord) ((__u32) (SwapWords(MAKELONG(SwapBytes(LO_WORD(dWord)), SwapBytes(HI_WORD(dWord))))))#define LittleToBig(dWord) BigToLittle(dWord)#define AscPCIConfigVendorIDRegister 0x0000#define AscPCIConfigDeviceIDRegister 0x0002#define AscPCIConfigCommandRegister 0x0004#define AscPCIConfigStatusRegister 0x0006#define AscPCIConfigRevisionIDRegister 0x0008#define AscPCIConfigCacheSize 0x000C#define AscPCIConfigLatencyTimer 0x000D#define AscPCIIOBaseRegister 0x0010#define AscPCICmdRegBits_IOMemBusMaster 0x0007#define ASC_PCI_ID2BUS(id) ((id) & 0xFF)#define ASC_PCI_ID2DEV(id) (((id) >> 11) & 0x1F)#define ASC_PCI_ID2FUNC(id) (((id) >> 8) & 0x7)#define ASC_PCI_MKID(bus, dev, func) ((((dev) & 0x1F) << 11) | (((func) & 0x7) << 8) | ((bus) & 0xFF))#define ASC_PCI_VENDORID 0x10CD#define ASC_PCI_DEVICEID_1200A 0x1100#define ASC_PCI_DEVICEID_1200B 0x1200#define ASC_PCI_DEVICEID_ULTRA 0x1300 #define ASC_PCI_REVISION_3150 0x02#define ASC_PCI_REVISION_3050 0x03#define ASC_DVCLIB_CALL_DONE (1)#define ASC_DVCLIB_CALL_FAILED (0)#define ASC_DVCLIB_CALL_ERROR (-1)#define PortAddr unsigned short /* port address size */#define Ptr2Func ulong#define inp(port) inb(port)#define inpw(port) inw(port)#define inpl(port) inl(port)#define outp(port, byte) outb((byte), (port))#define outpw(port, word) outw((word), (port))#define outpl(port, long) outl((long), (port))#define ASC_MAX_SG_QUEUE 7#define ASC_MAX_SG_LIST SG_ALL#define ASC_CS_TYPE unsigned short#ifndef asc_ptr_type#define asc_ptr_type#endif#ifndef ASC_GET_PTR2FUNC#define ASC_GET_PTR2FUNC(fun) (Ptr2Func)(fun)#endif#define FLIP_BYTE_NIBBLE(x) (((x<<4)& 0xFF) | (x>>4))#define ASC_IS_ISA (0x0001)#define ASC_IS_ISAPNP (0x0081)#define ASC_IS_EISA (0x0002)#define ASC_IS_PCI (0x0004)#define ASC_IS_PCI_ULTRA (0x0104)#define ASC_IS_PCMCIA (0x0008)#define ASC_IS_MCA (0x0020)#define ASC_IS_VL (0x0040)#define ASC_ISA_PNP_PORT_ADDR (0x279)#define ASC_ISA_PNP_PORT_WRITE (ASC_ISA_PNP_PORT_ADDR+0x800)#define ASC_IS_WIDESCSI_16 (0x0100)#define ASC_IS_WIDESCSI_32 (0x0200)#define ASC_IS_BIG_ENDIAN (0x8000)#define ASC_CHIP_MIN_VER_VL (0x01)#define ASC_CHIP_MAX_VER_VL (0x07)#define ASC_CHIP_MIN_VER_PCI (0x09)#define ASC_CHIP_MAX_VER_PCI (0x0F)#define ASC_CHIP_VER_PCI_BIT (0x08)#define ASC_CHIP_MIN_VER_ISA (0x11)#define ASC_CHIP_MIN_VER_ISA_PNP (0x21)#define ASC_CHIP_MAX_VER_ISA (0x27)#define ASC_CHIP_VER_ISA_BIT (0x30)#define ASC_CHIP_VER_ISAPNP_BIT (0x20)#define ASC_CHIP_VER_ASYN_BUG (0x21)#define ASC_CHIP_VER_PCI 0x08#define ASC_CHIP_VER_PCI_ULTRA_3150 (ASC_CHIP_VER_PCI | 0x02)#define ASC_CHIP_VER_PCI_ULTRA_3050 (ASC_CHIP_VER_PCI | 0x03)#define ASC_CHIP_MIN_VER_EISA (0x41)#define ASC_CHIP_MAX_VER_EISA (0x47)#define ASC_CHIP_VER_EISA_BIT (0x40)#define ASC_CHIP_LATEST_VER_EISA ((ASC_CHIP_MIN_VER_EISA - 1) + 3)#define ASC_MAX_LIB_SUPPORTED_ISA_CHIP_VER 0x21#define ASC_MAX_LIB_SUPPORTED_PCI_CHIP_VER 0x0A#define ASC_MAX_VL_DMA_ADDR (0x07FFFFFFL)#define ASC_MAX_VL_DMA_COUNT (0x07FFFFFFL)#define ASC_MAX_PCI_DMA_ADDR (0xFFFFFFFFL)#define ASC_MAX_PCI_DMA_COUNT (0xFFFFFFFFL)#define ASC_MAX_ISA_DMA_ADDR (0x00FFFFFFL)#define ASC_MAX_ISA_DMA_COUNT (0x00FFFFFFL)#define ASC_MAX_EISA_DMA_ADDR (0x07FFFFFFL)#define ASC_MAX_EISA_DMA_COUNT (0x07FFFFFFL)#ifndef inpw_noswap#define inpw_noswap(port) inpw(port)#endif#ifndef outpw_noswap#define outpw_noswap(port, data) outpw(port, data)#endif#define ASC_SCSI_ID_BITS 3#define ASC_SCSI_TIX_TYPE uchar#define ASC_ALL_DEVICE_BIT_SET 0xFF#ifdef ASC_WIDESCSI_16#undef ASC_SCSI_ID_BITS#define ASC_SCSI_ID_BITS 4#define ASC_ALL_DEVICE_BIT_SET 0xFFFF#endif#ifdef ASC_WIDESCSI_32#undef ASC_SCSI_ID_BITS#define ASC_SCSI_ID_BITS 5#define ASC_ALL_DEVICE_BIT_SET 0xFFFFFFFFL#endif#if ASC_SCSI_ID_BITS == 3#define ASC_SCSI_BIT_ID_TYPE uchar#define ASC_MAX_TID 7#define ASC_MAX_LUN 7#define ASC_SCSI_WIDTH_BIT_SET 0xFF#elif ASC_SCSI_ID_BITS == 4#define ASC_SCSI_BIT_ID_TYPE ushort#define ASC_MAX_TID 15#define ASC_MAX_LUN 7#define ASC_SCSI_WIDTH_BIT_SET 0xFFFF#elif ASC_SCSI_ID_BITS == 5#define ASC_SCSI_BIT_ID_TYPE ulong#define ASC_MAX_TID 31#define ASC_MAX_LUN 7#define ASC_SCSI_WIDTH_BIT_SET 0xFFFFFFFF#else#error ASC_SCSI_ID_BITS definition is wrong#endif#define ASC_MAX_SENSE_LEN 32#define ASC_MIN_SENSE_LEN 14#define ASC_MAX_CDB_LEN 12#define ASC_SCSI_RESET_HOLD_TIME_US 60#define SCSICMD_TestUnitReady 0x00#define SCSICMD_Rewind 0x01#define SCSICMD_Rezero 0x01#define SCSICMD_RequestSense 0x03#define SCSICMD_Format 0x04#define SCSICMD_FormatUnit 0x04#define SCSICMD_Read6 0x08#define SCSICMD_Write6 0x0A#define SCSICMD_Seek6 0x0B#define SCSICMD_Inquiry 0x12#define SCSICMD_Verify6 0x13#define SCSICMD_ModeSelect6 0x15#define SCSICMD_ModeSense6 0x1A#define SCSICMD_StartStopUnit 0x1B#define SCSICMD_LoadUnloadTape 0x1B#define SCSICMD_ReadCapacity 0x25#define SCSICMD_Read10 0x28#define SCSICMD_Write10 0x2A#define SCSICMD_Seek10 0x2B#define SCSICMD_Erase10 0x2C#define SCSICMD_WriteAndVerify10 0x2E#define SCSICMD_Verify10 0x2F#define SCSICMD_WriteBuffer 0x3B#define SCSICMD_ReadBuffer 0x3C#define SCSICMD_ReadLong 0x3E#define SCSICMD_WriteLong 0x3F#define SCSICMD_ReadTOC 0x43#define SCSICMD_ReadHeader 0x44#define SCSICMD_ModeSelect10 0x55#define SCSICMD_ModeSense10 0x5A#define SCSI_TYPE_DASD 0x00#define SCSI_TYPE_SASD 0x01#define SCSI_TYPE_PRN 0x02#define SCSI_TYPE_PROC 0x03#define SCSI_TYPE_WORM 0x04#define SCSI_TYPE_CDROM 0x05#define SCSI_TYPE_SCANNER 0x06#define SCSI_TYPE_OPTMEM 0x07#define SCSI_TYPE_MED_CHG 0x08#define SCSI_TYPE_COMM 0x09#define SCSI_TYPE_UNKNOWN 0x1F#define SCSI_TYPE_NO_DVC 0xFF#define ASC_SCSIDIR_NOCHK 0x00#define ASC_SCSIDIR_T2H 0x08#define ASC_SCSIDIR_H2T 0x10#define ASC_SCSIDIR_NODATA 0x18#define SCSI_SENKEY_NO_SENSE 0x00#define SCSI_SENKEY_UNDEFINED 0x01#define SCSI_SENKEY_NOT_READY 0x02#define SCSI_SENKEY_MEDIUM_ERR 0x03#define SCSI_SENKEY_HW_ERR 0x04#define SCSI_SENKEY_ILLEGAL 0x05#define SCSI_SENKEY_ATTENTION 0x06#define SCSI_SENKEY_PROTECTED 0x07#define SCSI_SENKEY_BLANK 0x08#define SCSI_SENKEY_V_UNIQUE 0x09#define SCSI_SENKEY_CPY_ABORT 0x0A#define SCSI_SENKEY_ABORT 0x0B#define SCSI_SENKEY_EQUAL 0x0C#define SCSI_SENKEY_VOL_OVERFLOW 0x0D#define SCSI_SENKEY_MISCOMP 0x0E#define SCSI_SENKEY_RESERVED 0x0F#define SCSI_ASC_NOMEDIA 0x3A#define ASC_SRB_HOST(x) ((uchar)((uchar)(x) >> 4))#define ASC_SRB_TID(x) ((uchar)((uchar)(x) & (uchar)0x0F))#define ASC_SRB_LUN(x) ((uchar)((uint)(x) >> 13))#define PUT_CDB1(x) ((uchar)((uint)(x) >> 8))#define SS_GOOD 0x00#define SS_CHK_CONDITION 0x02#define SS_CONDITION_MET 0x04#define SS_TARGET_BUSY 0x08#define SS_INTERMID 0x10#define SS_INTERMID_COND_MET 0x14#define SS_RSERV_CONFLICT 0x18#define SS_CMD_TERMINATED 0x22#define SS_QUEUE_FULL 0x28#define MS_CMD_DONE 0x00#define MS_EXTEND 0x01#define MS_SDTR_LEN 0x03#define MS_SDTR_CODE 0x01#define MS_WDTR_LEN 0x02#define MS_WDTR_CODE 0x03#define MS_MDP_LEN 0x05#define MS_MDP_CODE 0x00#define M1_SAVE_DATA_PTR 0x02#define M1_RESTORE_PTRS 0x03#define M1_DISCONNECT 0x04#define M1_INIT_DETECTED_ERR 0x05#define M1_ABORT 0x06#define M1_MSG_REJECT 0x07#define M1_NO_OP 0x08#define M1_MSG_PARITY_ERR 0x09#define M1_LINK_CMD_DONE 0x0A#define M1_LINK_CMD_DONE_WFLAG 0x0B#define M1_BUS_DVC_RESET 0x0C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -