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

📄 p9060_lib.h

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

#include "../../../samples/shared/pci_regs.h"
#include "../../../samples/shared/bits.h"

#ifdef __cplusplus
extern "C" {
#endif

// PLX register definitions 
enum {
    P9060_RANGE_PTOL_0     = 0x00,
    P9060_REMAP_PTOL_0     = 0x04,
    P9060_RANGE_PTOL_EPROM = 0x10,
    P9060_REMAP_PTOL_EPROM = 0x14,
    P9060_REGION_DESC      = 0x18,
    P9060_MAILBOX_0        = 0x40,
    P9060_MAILBOX_1        = 0x44,
    P9060_MAILBOX_2        = 0x48,
    P9060_MAILBOX_3        = 0x4c,
    P9060_MAILBOX_4        = 0x50,
    P9060_MAILBOX_5        = 0x54,
    P9060_MAILBOX_6        = 0x58,
    P9060_MAILBOX_7        = 0x5c,
    P9060_DOORBELL_PTOL    = 0x60,
    P9060_DOORBELL_LTOP    = 0x64,
    P9060_INT_STATUS       = 0x68,
    P9060_MISC_CONTROL     = 0x6c
};

enum { P9060_MODE_DESC       = 0xF9000140 };
enum { P9060_MODE_DESC_BYTE  = 0x00000000 };
enum { P9060_MODE_DESC_WORD  = 0x00010001 };
enum { P9060_MODE_DESC_DWORD = 0x00030003 };

typedef enum
{
    P9060_MODE_BYTE   = 0,
    P9060_MODE_WORD   = 1,
    P9060_MODE_DWORD  = 2
} P9060_MODE;

typedef enum
{
    P9060_ADDR_REG     = AD_PCI_BAR0,
    P9060_ADDR_REG_IO  = AD_PCI_BAR1,
    P9060_ADDR_SPACE0  = AD_PCI_BAR2,
    P9060_ADDR_SPACE1  = AD_PCI_BAR3,
    P9060_ADDR_SPACE2  = AD_PCI_BAR4,
    P9060_ADDR_SPACE3  = AD_PCI_BAR5,
    P9060_ADDR_EPROM   = AD_PCI_BAR_EPROM
} P9060_ADDR;


enum { P9060_RANGE_REG = 0x00000080 };

typedef struct P9060_STRUCT *P9060_HANDLE;
typedef P9060_HANDLE P9060HANDLE;

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
} P9060_INT_RESULT;
typedef void (WINAPI *P9060_INT_HANDLER)( P9060_HANDLE hPlx, P9060_INT_RESULT *intResult);

typedef struct
{
    WD_INTERRUPT Int;
    HANDLE hThread;
    WD_TRANSFER Trans[2];
    P9060_INT_HANDLER funcIntHandler;
} P9060_INTERRUPT;

typedef struct 
{
    DWORD dwLocalBase;
    DWORD dwMask;
    DWORD dwBytes;
    DWORD dwAddr;
    DWORD dwAddrDirect;
    BOOL  fIsMemory;
} P9060_ADDR_DESC;

typedef struct P9060_STRUCT
{
    HANDLE hWD;
    WD_CARD cardLock;
    WD_PCI_SLOT pciSlot;
    WD_CARD_REGISTER cardReg;
    P9060_ADDR_DESC addrDesc[AD_PCI_BARS];
    DWORD  addrSpace;
    P9060_INTERRUPT Int;
    DWORD  modeDesc[3];
} P9060_STRUCT;

DWORD P9060_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
BOOL P9060_Open (P9060_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum);
void P9060_Close (P9060_HANDLE hPlx);

BOOL P9060_IsAddrSpaceActive(P9060_HANDLE hPlx, P9060_ADDR addrSpace);

void P9060_ReadWriteBlock (P9060_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
                    DWORD dwBytes, BOOL fIsRead, P9060_MODE mode);
void P9060_ReadBlock (P9060_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9060_MODE mode);
void P9060_WriteBlock (P9060_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9060_MODE mode);
BYTE P9060_ReadByte (P9060_HANDLE hPlx, DWORD dwLocalAddr);
void P9060_WriteByte (P9060_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
WORD P9060_ReadWord (P9060_HANDLE hPlx, DWORD dwLocalAddr);
void P9060_WriteWord (P9060_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
DWORD P9060_ReadDWord (P9060_HANDLE hPlx, DWORD dwLocalAddr);
void P9060_WriteDWord (P9060_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);

BYTE P9060_ReadSpaceByte (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset);
void P9060_WriteSpaceByte (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset, BYTE data);
WORD P9060_ReadSpaceWord (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset);
void P9060_WriteSpaceWord (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset, WORD data);
DWORD P9060_ReadSpaceDWord (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset);
void P9060_WriteSpaceDWord (P9060_HANDLE hPlx, P9060_ADDR addrSpace, DWORD dwOffset, DWORD data);
void P9060_ReadSpaceBlock (P9060_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                    DWORD dwBytes, P9060_ADDR addrSpace, P9060_MODE mode);
void P9060_WriteSpaceBlock (P9060_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                     DWORD dwBytes, P9060_ADDR addrSpace, P9060_MODE mode);

// interrupt functions
BOOL P9060_IntIsEnabled (P9060_HANDLE hPlx);
BOOL P9060_IntEnable (P9060_HANDLE hPlx, P9060_INT_HANDLER funcIntHandler);
void P9060_IntDisable (P9060_HANDLE hPlx);

// access registers
DWORD P9060_ReadReg (P9060_HANDLE hPlx, DWORD dwReg);
void P9060_WriteReg (P9060_HANDLE hPlx, DWORD dwReg, DWORD dwData);

// access PCI configuration registers
DWORD P9060_ReadPCIReg(P9060_HANDLE hPlx, DWORD dwReg);
void P9060_WritePCIReg(P9060_HANDLE hPlx, DWORD dwReg, DWORD dwData);

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

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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