////////////////////////////////////////////////////////////////////// // File - sli6_lib.h // // Library for accessing the SLI6 card, version 1.20. // Code was composed by Kirill Bezmaternykh // INP, lab 6-1 (ppi6@gorodok.net) // It accesses the hardware via WinDriver functions. // ////////////////////////////////////////////////////////////////////// #ifndef _SLI6_LIB_H_ #define _SLI6_LIB_H_ #include "windrvr.h" #include "pci_regs.h" #include "bits.h" #include "sli6_conf.h" #ifdef __cplusplus extern "C" { #endif //////////////// внутренние функции и структуры данных ///////////////// enum { SLI6_DEFAULT_VENDOR_ID = 0x1172 }; // Altera enum { SLI6_DEFAULT_DEVICE_ID = 0x3333 }; // random enum { SLI6_MODE_BYTE = 0, SLI6_MODE_WORD = 1, SLI6_MODE_DWORD = 2 }; typedef DWORD SLI6_MODE; enum { SLI6_AD_BAR0 = AD_PCI_BAR0, SLI6_AD_BAR1 = AD_PCI_BAR1, SLI6_AD_BAR2 = AD_PCI_BAR2, SLI6_AD_BAR3 = AD_PCI_BAR3, SLI6_AD_BAR4 = AD_PCI_BAR4, SLI6_AD_BAR5 = AD_PCI_BAR5, SLI6_AD_EPROM = AD_PCI_BAR_EPROM, }; typedef DWORD SLI6_ADDR; // Number of IO and memory ranges enum { SLI6_ITEMS = AD_PCI_BARS }; typedef struct SLI6_STRUCT *SLI6_HANDLE; typedef struct { DWORD dwCounter; // number of interrupts received DWORD dwLost; // number of interrupts not yet dealt with BOOL fStopped; // was interrupt disabled during wait } SLI6_INT_RESULT; typedef void (*SLI6_INT_HANDLER)(SLI6_HANDLE hSLI6, SLI6_INT_RESULT *intResult); // options for SLI6_Open enum { SLI6_OPEN_USE_INT = 0x1 }; BOOL SLI6_Open (SLI6_HANDLE *phSLI6, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions); void SLI6_RegisterWinDriver(); void SLI6_Close(SLI6_HANDLE hSLI6); DWORD SLI6_CountCards (DWORD dwVendorID, DWORD dwDeviceID); BOOL SLI6_IsAddrSpaceActive(SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace); void SLI6_GetPciSlot(SLI6_HANDLE hSLI6, WD_PCI_SLOT *pPciSlot); // General read/write function void SLI6_ReadWriteBlock(SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset, BOOL fRead, PVOID buf, DWORD dwBytes, SLI6_MODE mode); BYTE SLI6_ReadByte (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset); WORD SLI6_ReadWord (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset); DWORD SLI6_ReadDword (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset); void SLI6_WriteByte (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset, BYTE data); void SLI6_WriteWord (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset, WORD data); void SLI6_WriteDword (SLI6_HANDLE hSLI6, SLI6_ADDR addrSpace, DWORD dwOffset, DWORD data); // handle interrupts BOOL SLI6_IntIsEnabled (SLI6_HANDLE hSLI6); BOOL SLI6_IntEnable (SLI6_HANDLE hSLI6, SLI6_INT_HANDLER funcIntHandler); void SLI6_IntDisable (SLI6_HANDLE hSLI6); // access to PCI configuration registers void SLI6_WritePCIReg(SLI6_HANDLE hSLI6, DWORD dwReg, DWORD dwData); DWORD SLI6_ReadPCIReg(SLI6_HANDLE hSLI6, DWORD dwReg); #ifdef __cplusplus } #endif #endif