|
|
#ifndef _PARSTL_H_
#define _PARSTL_H_
// Define 1284 Commands
#define CPP_QUERY_PRODID 0x10
// 1284 related SHTL prod id equates
#define SHTL_EPAT_PRODID 0xAAFF
#define SHTL_EPST_PRODID 0xA8FF
// typedefs for device type
typedef unsigned char DEVICE_STATE ; typedef unsigned int STL_DEVICE_TYPE ; typedef unsigned int IMPACT_DEVICE_TYPE ;
// device type equates
#define DEVICE_TYPE_AUTO_DETECT -1
#define TRUE 1
#define FALSE 0
#define DEVICE_TYPE_NONE 0x0000
#define DEVICE_TYPE_ATA 0x0001
#define DEVICE_TYPE_ATAPI 0x0002
#define DEVICE_TYPE_SCSI 0x0003
#define DEVICE_TYPE_SSFDC 0x0004
#define DEVICE_TYPE_MMC 0x0005
#define DEVICE_TYPE_FLASH 0x0006
#define DEVICE_TYPE_EPP_DEVICE 0x0007
#define DEVICE_TYPE_SOUND 0x0008
#define DEVICE_TYPE_HIFD 0x0009
#define DEVICE_TYPE_LS120 0x000A
#define DEVICE_TYPE_PCMCIA_CF 0x000B
#define DEVICE_TYPE_FLP_TAPE_DSK 0x000C
#define DEVICE_TYPE_ATA_ATAPI_8BIT 0x000D
#define DEVICE_TYPE_UMAX 0x000E
#define DEVICE_TYPE_AVISION 0x000F
#define DEVICE_TYPE_DAZZLE 0x0010
#define DEVICE_TYPE_EXT_HWDETECT 0x40000000 // to OR with expected pers.
#define DEVICE_TYPE_ATA_BIT 1 << ( DEVICE_TYPE_ATA - 1 )
#define DEVICE_TYPE_ATAPI_BIT 1 << ( DEVICE_TYPE_ATAPI - 1 )
#define DEVICE_TYPE_SCSI_BIT 1 << ( DEVICE_TYPE_SCSI - 1 )
#define DEVICE_TYPE_SSFDC_BIT 1 << ( DEVICE_TYPE_SSFDC - 1 )
#define DEVICE_TYPE_MMC_BIT 1 << ( DEVICE_TYPE_MMC - 1 )
#define DEVICE_TYPE_FLASH_BIT 1 << ( DEVICE_TYPE_FLASH - 1 )
#define DEVICE_TYPE_EPP_DEVICE_BIT 1 << ( DEVICE_TYPE_EPP_DEVICE - 1 )
#define DEVICE_TYPE_SOUND_BIT 1 << ( DEVICE_TYPE_SOUND - 1 )
#define DEVICE_TYPE_HIFD_BIT 1 << ( DEVICE_TYPE_HIFD - 1 )
#define DEVICE_TYPE_LS120_BIT 1 << ( DEVICE_TYPE_LS120 - 1 )
#define DEVICE_TYPE_PCMCIA_CF_BIT 1 << ( DEVICE_TYPE_PCMCIA_CF - 1 )
#define DEVICE_TYPE_FLP_TAPE_DSK_BIT 1 << ( DEVICE_TYPE_FLP_TAPE_DSK - 1 )
#define DEVICE_TYPE_ATA_ATAPI_8BIT_BIT 1 << ( DEVICE_TYPE_ATA_ATAPI_8BIT - 1 )
#define DEVICE_TYPE_UMAX_BIT 1 << ( DEVICE_TYPE_UMAX - 1 )
#define DEVICE_TYPE_AVISION_BIT 1 << ( DEVICE_TYPE_AVISION - 1 )
#define DEVICE_TYPE_DAZZLE_BIT 1 << ( DEVICE_TYPE_DAZZLE - 1 )
// possible Device states
#define DEVICE_STATE_INVALID 0
#define DEVICE_STATE_VALID 1
#define DEVICE_STATE_ATAPI 2
// epp dev equates
#define EPPDEV_SIGN 0x03
#define PERSONALITY_MASK 0x03
// flash related equates
#define FLASH_SIGN 0x01
#define FLASH_PERSONALITY_MASK 0x03
// dazzle related equates
#define DAZ_SELECT_BLK 0x18
#define DAZ_BLK0 0x00
#define DAZ_REG1 0x19
#define DAZ_CONFIGURED 0x5A
#define DAZ_NOT_CONFIGURED 0xBC
// umax related equates
#define BUSY 0x20
#define PE 0x08
#define DATAPORT 0x18
#define STATUSPORT 0x19
#define CONTROLPORT 0x1A
#define EPPADDRPORT 0x1B
#define EPPDATA0PORT 0x1C
#define EPPDATA1PORT 0x1D
#define EPPDATA2PORT 0x1E
#define EPPDATA3PORT 0x1F
// HIFD related equates
#define HIFD_CONTROLLER_READY_STATUS 0x80
#define HIFD_DIGITAL_OUTPUT_REGISTER 0x02
#define HIFD_DOR_RESET_BIT 0x04
#define HIFD_ENABLE_DMA_BIT 0x08
#define HIFD_MAIN_STATUS_REGISTER 0x04
#define HIFD_DATA_RATE_SELECT_REGISTER 0x04
#define HIFD_STATUS_REGISTER_A 0x00
#define HIFD_STATUS_REGISTER_B 0x01
#define HIFD_COMMAND_TO_CONTROLLER 0x55
#define HIFD_TERMINATE_SEQUENCE 0xAA
#define HIFD_CTL_REG_0D 0x0D
#define HIFD_CTL_REG_03 0x03
#define HIFD_WAIT_10_MILLISEC 10000 // 10 * 1000
#define HIFD_WAIT_1_MILLISEC 1000 // 1 * 1000
#define SMC_ENABLE_MODE2 0x72
#define SMC_DEVICE_ID 0x78
// LS120 related equates
#define LS120_ENGINE_VERSION 0xE2
#define LS120_ENGINE_VERSION_REGISTER 0x07
// MMC engine specific equates
#define MMC_ENGINE_INDEX 0x1E
#define MMC_ENGINE_DATA 0x1F
#define MMC_FREQ_SELECT_REG 0x00
#define MMC_BLOCK_SIZE_REG 0x06
// Though these are test patterns, they may be possible commands
// for ATA/ATAPI devices, as they are written to a possible
// ATA/ATAPI command register. These values have been fixed
// carefully, to minimize, if not eliminate, possible failure.
#define MMC_TEST_PATTERN_1 0x00 // ATA Nop commands for ATA/ATAPI type devices.
#define MMC_TEST_PATTERN_2 0xA1 // ATAPI Ident. command for ATAPI type devices.
#define MMC_TEST_PATTERN_3 0x00 // ATA Nop commands for ATA/ATAPI type devices.
// some IO register equates that are inevitable
#define CYLLOW_REG 0x0004
#define CYLHIGH_REG 0x0005
// ATAPI signature equates
#define ATAPI_SIGN_LOW 0x14
#define ATAPI_SIGN_HI 0xEB
// delay equates
#define MAX_RETRIES_FOR_5_SECS 5 * 1000 // 5 secs
#define MAX_RETRIES_FOR_10_SECS 10 * 1000 // 10 secs
#define DELAY_10MICROSECONDS 10 // 10 mu sec.
#define DELAY_1MILLISECONDS 1000 // 1 milli sec.
#define DELAY_1SECOND 1000*1000 // 1 sec.
// ATA/ATAPI command opcodes
#define ATA_NOP_COMMAND 0x00
#define ATAPI_IDENTIFY 0xA1
// ATA/ATAPI drive select values
#define ATAPI_MASTER 0xA0
#define ATAPI_SLAVE 0xB0
#define ATAPI_MAX_DRIVES 2
// ATA register definitions
#define ATA_DATA_REG 0x0000
#define ATA_ERROR_REG 0x0001
#define ATA_PRECOMP_REG 0x0001
#define ATA_SECCNT_REG 0x0002
#define ATA_SECNUM_REG 0x0003
#define ATA_CYLLOW_REG 0x0004
#define ATA_CYLHIGH_REG 0x0005
#define ATA_DRVHD_REG 0x0006
#define ATA_TASK_STAT_REG 0x0007
#define ATA_TASK_CMD_REG 0x0007
#define ATA_ALT_STAT_REG 0x0008
// ATA status register equates
#define ATA_ST_ERROR 0x01
#define ATA_ST_INDEX 0x02
#define ATA_ST_CORRCTD 0x04
#define ATA_ST_DRQ 0x08
#define ATA_ST_SEEK_COMPL 0x10
#define ATA_ST_WRT_FLT 0x20
#define ATA_ST_READY 0x40
#define ATA_ST_BUSY 0x80
// ATA error register equates
#define ATA_ERROR_ABORTED_COMMAND 0x04
// miscellaneous equates
#define BUS_LINES_IN_HIGH_IMPEDANCE 0xFF
#define SKIP_MEMORY_ADDRESS ((unsigned long)(-1L))
#define SHTL_NO_ERROR 0x0000
#define IsShtlError(x) (x & 0x8000)
#define IsImpactPresent() ( IMPACT_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsImpactSPresent() ( IMPACTS_VERSION <= ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsEp1284Present() ( EP1284_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsEpatPlusPresent() ( EPATP_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsEpezPresent() ( EPEZ_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsEpatPresent() ( EPAT_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define IsEpstPresent() ( EPST_VERSION == ParStlReadReg ( Extension, VERSION_REGISTER ) )
#define NeedToEnableIoPads() ( EP1284_VERSION <= ParStlReadReg ( Extension, VERSION_REGISTER ) )
// Identify command processing related defines..
#define ATAPI_IDENTIFY_LENGTH 512
#define ATAPI_NAME_LENGTH 10
#define ATAPI_NAME_OFFSET 84
// EP1284 related equates
#define EP1284_BLK_ADDR_REGISTER 0x0A
#define EP1284_MODE_REGISTER 0x0C
#define VERSION_REGISTER 0x0B
#define EP1284_TRANSFER_CONTROL_REG 0x12
#define EP1284_PERSONALITY_REG 0x01
#define EPAT_MODE_REGISTER 0x0C
#define SOCKET_CONTROL_REGISTER 0x0C
#define ISA_CONTROL_REGISTER 0x0D
#define CONFIG_INDEX_REGISTER 0x0E
#define CONFIG_DATA_REGISTER 0x0F
#define SHTL_CARD_INSERTED_STATUS 0x02
#define XFER_IRQ_BIT 0x20
#define EP1284_POWER_CONTROL_REG 0x0F
#define ENABLE_IOPADS 0x04
// IMPACT related equates
#define IMPACT_PERSONALITY_REG 0x01
// IMPACT-S related equates
#define IMPACTS_EXT_PERSONALITY_PRESENT 0x0A // 0xA0 >> 4
#define IMPACTS_EXT_PERSONALITY_XREG 0x29
// shuttle version number related equates
#define EPST_VERSION 0xB2
#define EPAT_VERSION 0xC3
#define EPEZ_VERSION 0xC5
#define EPATP_VERSION 0xC6
#define EP1284_VERSION 0xC7
#define IMPACT_VERSION 0xC8
#define IMPACTS_VERSION 0xC9
#define EP1284_ENABLE_16BIT 0x10
#define EPAT_RESET_POLARITY 0x20
#define ISA_IO_SWAP 0x20
#define SOCKET_0 0x00
#define SOCKET_1 0x01
#define PERIPHERAL_RESET_1 0x20
#define PERIPHERAL_RESET_0 0x10
// block xfer related op-codes
#define OP_NIBBLE_BLOCK_READ 0x07
// test pattern equates
#define TEST_PATTERN_1 0x55
#define TEST_PATTERN_2 0xAA
// Memory detection related equates
#define SELECT_DRAM 0x80
#define SELECT_SRAM 0x7F
#define RESET_PTR 0x01
#define ENABLE_MEM 0x04
#define EP1284_CONTROL_REG 0x13
#define EP1284_BUFFER_DATA_REG 0x10
// IMPACT device type defines
#define IMPACT_DEVICE_TYPE_NONE 0
#define IMPACT_DEVICE_TYPE_ATA_ATAPI 1
#define IMPACT_DEVICE_TYPE_PCMCIA_CF 2
#define IMPACT_DEVICE_TYPE_SSFDC 3
#define IMPACT_DEVICE_TYPE_MMC 4
#define IMPACT_DEVICE_TYPE_HIFD 5
#define IMPACT_DEVICE_TYPE_SOUND 6
#define IMPACT_DEVICE_TYPE_FLP_TAPE_DSK 7
#define IMPACT_DEVICE_TYPE_CF 8
#define IMPACT_DEVICE_TYPE_ATA_ATAPI_8BIT 9
// parallel port signal equates
#define SLCT_IN_DISABLE 0x04
#define SLCT_IN_ENABLE 0x0C
#define STB_INIT_LOW 0x01
#define STB_INIT_AFXT_LO 0x03
#define INIT_AFXT_HIGH 0x05
#define STB_INIT_AFXT_HI 0x04
#define STB_INIT_HIGH 0x04
#define AFXT_HI_STB_HI 0x04
#define AFXT_LO_STB_HI 0x06
#define AFXT_HI_STB_LO 0x05
#define AFXT_LO_STB_LO 0x07
// structure definitions
typedef struct _ATAPI_PARAMS{ DEVICE_STATE dsDeviceState[ATAPI_MAX_DRIVES]; char szAtapiNameString [ ATAPI_NAME_LENGTH ] ; } ATAPIPARAMS, *PATAPIPARAMS ;
// function prototypes
BOOLEAN ParStlCheckIfStl( IN PDEVICE_EXTENSION Extension, IN ULONG ulDaisyIndex ) ;
BOOLEAN ParStlCheckIfNon1284_3Present( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfStl1284_3( IN PDEVICE_EXTENSION Extension, IN ULONG ulDaisyIndex, IN BOOLEAN bNoStrobe ) ;
BOOLEAN ParStlCheckIfStlProductId( IN PDEVICE_EXTENSION Extension, IN ULONG ulDaisyIndex ) ;
PCHAR ParQueryStlDeviceId( IN PDEVICE_EXTENSION Extension, OUT PCHAR CallerDeviceIdBuffer, OPTIONAL IN ULONG CallerBufferSize, OUT PULONG DeviceIdSize, IN BOOLEAN bReturnRawString ) ;
PCHAR ParBuildStlDeviceId( IN PDEVICE_EXTENSION Extension ) ;
STL_DEVICE_TYPE __cdecl ParStlGetDeviceType ( IN PDEVICE_EXTENSION Extension, IN int nPreferredDeviceType ) ;
VOID ParStlSet16BitOperation ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckDrivePresent ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlWaitForBusyToClear ( IN PDEVICE_EXTENSION Extension, IN int nRegisterToWaitOn ) ;
BOOLEAN ParStlWaitForDrq ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlWaitForIrq ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfAtaAtapiDevice ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlAtapiInitialize ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams );
BOOLEAN ParStlAtaInitialize ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlCheckIfScsiDevice ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfSSFDC ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfMMC ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlCheckIfFlash ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfDazzle ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfAtapiDevice ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlCheckIfLS120 ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfImpactLS120 ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlCheckIfHiFD ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckIfAtaDevice ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams ) ;
BOOLEAN ParStlCheckCardInsertionStatus ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlSelectAdapterSocket ( IN PDEVICE_EXTENSION Extension, int nSocketNumber ) ;
VOID ParStlWaitForMicroSeconds ( int nMicroSecondsToWait ) ;
STL_DEVICE_TYPE ParStlGetImpactDeviceType ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams, IN int nPreferredDeviceType ) ;
STL_DEVICE_TYPE ParStlGetImpactSDeviceType ( IN PDEVICE_EXTENSION Extension, IN OUT PATAPIPARAMS atapiParams, IN int nPreferredDeviceType ) ;
BOOLEAN ParStlCheckIfEppDevice ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckPersonalityForEppDevice ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckFlashPersonality ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlHIFDCheckIfControllerReady ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlHIFDCheckSMCController ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlIsMMCEnginePresent( IN PDEVICE_EXTENSION Extension );
VOID ParStlAssertIdleState ( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckUMAXScannerPresence( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlCheckAvisionScannerPresence( IN PDEVICE_EXTENSION Extension ) ;
BOOLEAN ParStlSetEPPMode( IN PDEVICE_EXTENSION Extension ) ;
USHORT ParStlEPPWrite( IN PDEVICE_EXTENSION Extension, IN UCHAR value ) ;
USHORT ParStlEPPRead( IN PDEVICE_EXTENSION ) ;
int __cdecl ParStlReadReg( IN PDEVICE_EXTENSION Extension, IN unsigned int reg ) ;
int __cdecl ParStlWriteReg( IN PDEVICE_EXTENSION Extension, IN unsigned int reg, IN int databyte ) ;
int __cdecl ParStlReadIoPort( IN PDEVICE_EXTENSION Extension, IN unsigned int reg ) ;
int __cdecl ParStlWriteIoPort( IN PDEVICE_EXTENSION Extension, IN unsigned int reg, IN int databyte ) ;
int __cdecl ParStlReceiveData( IN PDEVICE_EXTENSION Extension, OUT void *hostBufferPointer, IN long shuttleMemoryAddress, IN unsigned count ) ;
int __cdecl ParStlGetMemorySize ( IN PDEVICE_EXTENSION Extension ) ;
#endif // for _PARSTL_H_
|