⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p9656_lib.h

📁 Jungo公司确实为VxWorks开发了类似于WinDriver的驱动开发辅助套件DriverBuilder (for VxWorks)!
💻 H
字号:
#ifndef _P9656_LIB_H_
#define _P9656_LIB_H_

#if !defined(UNIX) && (defined(LINUX) || defined(SOLARIS))
    #define UNIX
#endif

#if defined(__KERNEL__)
    #include "../../../include/kdstdlib.h"
#endif 
#include "../../../include/windrvr.h"
#include "../../../samples/shared/pci_regs.h"
#include "../../../samples/shared/bits.h"

#ifdef __cplusplus
extern "C" {
#endif

// PLX register definitions 
enum {
    P9656_LAS0RR    = 0x00,
    P9656_LAS0BA    = 0x04,
    P9656_PCISR     = 0x06,
    P9656_MARBR     = 0x08,
    P9656_BIGEND    = 0x0c,
    P9656_LMISC     = 0x0d,
    P9656_PROT_AREA = 0x0e,
    P9656_PCIBISTR  = 0x0f,
    P9656_EROMRR    = 0x10,
    P9656_EROMBA    = 0x14,
    P9656_LBRD0     = 0x18,
    P9656_DMRR      = 0x1c,
    P9656_DMLBAM    = 0x20,
    P9656_DMLBAI    = 0x24,
    P9656_DMPBAM    = 0x28,
    P9656_DMCFGA    = 0x2c,
    P9656_OPQIS     = 0x30,
    P9656_OPQIM     = 0x34,
    P9656_IQP       = 0x40,
    P9656_OQP       = 0x44,
    P9656_MQCR      = 0xc0,
    P9656_QBAR      = 0xc4,
    P9656_MBOX0     = 0x78, 
    P9656_MBOX1     = 0x7c,  
    P9656_MBOX2     = 0x48,
    P9656_HS_CSR    = 0x4a,
    P9656_MBOX3     = 0x4c,
    P9656_MBOX4     = 0x50,
    P9656_MBOX5     = 0x54,
    P9656_MBOX6     = 0x58,
    P9656_MBOX7     = 0x5c,
    P9656_P2LDBELL  = 0x60,
    P9656_L2PDBELL  = 0x64,
    P9656_INTCSR    = 0x68,
    P9656_CNTRL     = 0x6c,
    P9656_PCIHIDR   = 0x70,
    P9656_PCIHREV   = 0x74,
    P9656_DMAMODE   = 0x80,
    P9656_DMAPADR   = 0x84,
    P9656_DMALADR   = 0x88,
    P9656_DMASIZ    = 0x8c,
    P9656_DMADPR    = 0x90,
    P9656_DMAMODE1  = 0x94,
    P9656_DMAPADR1  = 0x98,
    P9656_DMALADR1  = 0x9c,
    P9656_DMASIZ1   = 0xa0,
    P9656_DMADPR1   = 0xa4,
    P9656_DMACSR    = 0xa8,
    P9656_DMACSR1   = 0xa9,
    P9656_DMAARB    = 0xac,
    P9656_DMATHR    = 0xb0,
    P9656_DMADAC0   = 0xb4,
    P9656_DMADAC1   = 0xb8,
    P9656_IFHPR     = 0xc8,
    P9656_IFTPR     = 0xcc,
    P9656_IPHPR     = 0xd0,
    P9656_IPTPR     = 0xd4,
    P9656_OFHPR     = 0xd8,
    P9656_OFTPR     = 0xdc,
    P9656_OPHPR     = 0xe0,
    P9656_OPTPR     = 0xe4,
    P9656_QSR       = 0xe8,
    P9656_LAS1RR    = 0xf0,
    P9656_LAS1BA    = 0xf4,
    P9656_LBRD1     = 0xf8,
    P9656_DMDAC     = 0xfc,
    P9656_PCIARB    = 0x100,
    P9656_PABTADR   = 0x104 
};

// PLX specific PCI configuration registers
enum {
    P9656_VPD_CNTL   = 0x4c,
    P9656_VPD_NEXT   = 0x4d,
    P9656_VPD_ADDR   = 0x4E,
    P9656_VPD_DATA   = 0x50
};

typedef enum
{
    P9656_DMA_CHANNEL_0 = 0,
    P9656_DMA_CHANNEL_1 = 1
} P9656_DMA_CHANNEL;

typedef enum
{
    P9656_MODE_BYTE   = 0,
    P9656_MODE_WORD   = 1,
    P9656_MODE_DWORD  = 2,
    P9656_MODE_QWORD  = 3 // 64bit is used in memory string transfers
} P9656_MODE;

typedef enum
{
    P9656_ADDR_REG     = AD_PCI_BAR0,
    P9656_ADDR_REG_IO  = AD_PCI_BAR1,
    P9656_ADDR_SPACE0  = AD_PCI_BAR2,
    P9656_ADDR_SPACE1  = AD_PCI_BAR3,
    P9656_ADDR_SPACE2  = AD_PCI_BAR4,
    P9656_ADDR_SPACE3  = AD_PCI_BAR5,
    P9656_ADDR_EPROM   = AD_PCI_BAR_EPROM
} P9656_ADDR;

enum { P9656_RANGE_REG = 0x00000080 };

typedef struct P9656_DMA_STRUCT *P9656_DMA_HANDLE;

typedef struct P9656_STRUCT *P9656_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
    DWORD dwStatusReg; // value of status register when interrupt occurred
} P9656_INT_RESULT;
typedef void (WINAPI *P9656_INT_HANDLER)( P9656_HANDLE hPlx, P9656_INT_RESULT *intResult);

DWORD P9656_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
BOOL P9656_Open(P9656_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum);
void P9656_Close (P9656_HANDLE hPlx);
BOOL P9656_IsAddrSpaceActive(P9656_HANDLE hPlx, P9656_ADDR addrSpace);
void P9656_GetPciSlot(P9656_HANDLE hPlx, WD_PCI_SLOT *pPciSlot);

void P9656_ReadWriteBlockLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
                    DWORD dwBytes, BOOL fIsRead, P9656_MODE mode);
void P9656_ReadBlockLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9656_MODE mode);
void P9656_WriteBlockLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9656_MODE mode);
BYTE P9656_ReadByteLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr);
void P9656_WriteByteLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
WORD P9656_ReadWordLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr);
void P9656_WriteWordLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
DWORD P9656_ReadDWordLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr);
void P9656_WriteDWordLocal (P9656_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);

void P9656_ReadWriteBlock (P9656_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                    DWORD dwBytes, BOOL fIsRead, P9656_ADDR addrSpace, P9656_MODE mode);
BYTE P9656_ReadByte (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset);
void P9656_WriteByte (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset, BYTE data);
WORD P9656_ReadWord (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset);
void P9656_WriteWord (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset, WORD data);
DWORD P9656_ReadDWord (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset);
void P9656_WriteDWord (P9656_HANDLE hPlx, P9656_ADDR addrSpace, DWORD dwOffset, DWORD data);
void P9656_ReadBlock (P9656_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                    DWORD dwBytes, P9656_ADDR addrSpace, P9656_MODE mode);
void P9656_WriteBlock (P9656_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                     DWORD dwBytes, P9656_ADDR addrSpace, P9656_MODE mode);

// interrupt functions
BOOL P9656_IntIsEnabled (P9656_HANDLE hPlx);
BOOL P9656_IntEnable (P9656_HANDLE hPlx, P9656_INT_HANDLER funcIntHandler);
void P9656_IntDisable (P9656_HANDLE hPlx);

// access registers
DWORD P9656_ReadReg (P9656_HANDLE hPlx, DWORD dwReg);
void P9656_WriteReg (P9656_HANDLE hPlx, DWORD dwReg, DWORD dwData);

// access PCI configuration registers
DWORD P9656_ReadPCIReg(P9656_HANDLE hPlx, DWORD dwReg);
void P9656_WritePCIReg(P9656_HANDLE hPlx, DWORD dwReg, DWORD dwData);

// Start DMA to/from card.
// fIsRead - TRUE: read from card to buffer.  FALSE: write from buffer to card
// dwBytes - number of bytes to transfer (must be a multiple of 4)
// mode - local bus width.
// dwLocalAddr - local address on card to write to / read from
// channel - uses channel 0 or 1 of the 9656
// buf - the buffer to transfer
P9656_DMA_HANDLE P9656_DMAOpen (P9656_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
    DWORD dwBytes, BOOL fIsRead, P9656_MODE mode, P9656_DMA_CHANNEL dmaChannel);
void P9656_DMAClose (P9656_HANDLE hPlx, P9656_DMA_HANDLE hDma);
void P9656_DMAStart (P9656_HANDLE hPlx, P9656_DMA_HANDLE hDma, BOOL fBlocking);
BOOL P9656_DMAIsDone (P9656_HANDLE hPlx, P9656_DMA_HANDLE hDma);
BOOL P9656_DMAReadWriteBlock (P9656_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
    DWORD dwBytes, BOOL fIsRead, P9656_MODE mode, P9656_DMA_CHANNEL dmaChannel);

BOOL P9656_EEPROMReadWord(P9656_HANDLE hPlx, DWORD dwOffset, PWORD pwData);
BOOL P9656_EEPROMWriteWord(P9656_HANDLE hPlx, DWORD dwOffset, WORD wData);
BOOL P9656_EEPROMReadDWord(P9656_HANDLE hPlx, DWORD dwOffset, PDWORD pdwData);
BOOL P9656_EEPROMWriteDWord(P9656_HANDLE hPlx, DWORD dwOffset, DWORD dwData);
BOOL P9656_EEPROMValid(P9656_HANDLE hPlx);

// this string is set to an error message, if one occurs
extern CHAR P9656_ErrorString[];

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -