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

📄 iop480_lib.h

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

#ifdef __KERNEL__
    #include "../../../include/kdstdlib.h"
#endif //__KERNEL__
#include "../../../include/windrvr.h"
#include "../../../samples/shared/pci_regs.h"
#include "../../../samples/shared/bits.h"

#ifdef __cplusplus
extern "C" {
#endif

// PLX register definitions 
enum {
    IOP480_DEVINIT    = 0x80,
    IOP480_LAS0RR     = 0xa0,
    IOP480_LAS0BA     = 0xa4,
    IOP480_LAS1RR     = 0xa8,
    IOP480_LAS1BA     = 0xac,
    IOP480_EROMRR     = 0xc0,
    IOP480_EROMBA     = 0xc4,
    IOP480_MBOX0      = 0x180,
    IOP480_MBOX1      = 0x184,
    IOP480_MBOX2      = 0x188,
    IOP480_MBOX3      = 0x18c,
    IOP480_MBOX4      = 0x190,
    IOP480_MBOX5      = 0x194,
    IOP480_MBOX6      = 0x198,
    IOP480_MBOX7      = 0x19c,
    IOP480_P2LDBELL   = 0x1a0,
    IOP480_L2PDBELL   = 0x1a4,
    IOP480_PINTSTAT   = 0x1b0,
    IOP480_PINTENB    = 0x1b4,
    IOP480_LINTSTAT   = 0x1b8,
    IOP480_LINTENB    = 0x1bc,
    IOP480_DMA_MODE   = 0x200,
    IOP480_DMA_CSR    = 0x204,
    IOP480_DMA_COUNT  = 0x208,
    IOP480_DMA_PCILADR= 0x20c,
    IOP480_DMA_PCIHADR= 0x218,
    IOP480_DMA_LOCADR = 0x210,
    IOP480_DMA_DPR    = 0x214,
    IOP480_DMA_THRES  = 0x214,
};

// PLX specific PCI configuration registers
enum {
    IOP480_VPD_ADDR   = 0x5a,
    IOP480_VPD_DATA   = 0x5c,
};

typedef enum
{
    IOP480_DMA_CHANNEL_0 = 0,
    IOP480_DMA_CHANNEL_1 = 1,
} IOP480_DMA_CHANNEL;

typedef enum
{
    IOP480_MODE_BYTE   = 0,
    IOP480_MODE_WORD   = 1,
    IOP480_MODE_DWORD  = 2
} IOP480_MODE;

typedef enum
{
    IOP480_ADDR_REG     = AD_PCI_BAR0,
    IOP480_ADDR_SPACE0  = AD_PCI_BAR1,
    IOP480_ADDR_SPACE1  = AD_PCI_BAR2,
    IOP480_ADDR_SPACE2  = AD_PCI_BAR3,
    IOP480_ADDR_SPACE3  = AD_PCI_BAR4,
    IOP480_ADDR_SPACE4  = AD_PCI_BAR5,
    IOP480_ADDR_EPROM   = AD_PCI_BAR_EPROM
} IOP480_ADDR;

enum { IOP480_RANGE_REG = 0x00000080 };

typedef struct IOP480_DMA_STRUCT *IOP480_DMA_HANDLE;

typedef struct IOP480_STRUCT *IOP480_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
} IOP480_INT_RESULT;
typedef void (WINAPI *IOP480_INT_HANDLER)( IOP480_HANDLE hPlx, IOP480_INT_RESULT *intResult);

DWORD IOP480_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
BOOL IOP480_Open (IOP480_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum);
void IOP480_Close (IOP480_HANDLE hPlx);
BOOL IOP480_IsAddrSpaceActive(IOP480_HANDLE hPlx, IOP480_ADDR addrSpace);
void IOP480_GetPciSlot(IOP480_HANDLE hPlx, WD_PCI_SLOT *pPciSlot);

void IOP480_ReadWriteBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
                    DWORD dwBytes, BOOL fIsRead, IOP480_MODE mode);
void IOP480_ReadBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, IOP480_MODE mode);
void IOP480_WriteBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, IOP480_MODE mode);
BYTE IOP480_ReadByteLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
void IOP480_WriteByteLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
WORD IOP480_ReadWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
void IOP480_WriteWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
DWORD IOP480_ReadDWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
void IOP480_WriteDWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);

void IOP480_ReadWriteBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                    DWORD dwBytes, BOOL fIsRead, IOP480_ADDR addrSpace, IOP480_MODE mode);
BYTE IOP480_ReadByte (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
void IOP480_WriteByte (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, BYTE data);
WORD IOP480_ReadWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
void IOP480_WriteWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, WORD data);
DWORD IOP480_ReadDWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
void IOP480_WriteDWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, DWORD data);
void IOP480_ReadBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                    DWORD dwBytes, IOP480_ADDR addrSpace, IOP480_MODE mode);
void IOP480_WriteBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
                     DWORD dwBytes, IOP480_ADDR addrSpace, IOP480_MODE mode);

// interrupt functions
BOOL IOP480_IntIsEnabled (IOP480_HANDLE hPlx);
BOOL IOP480_IntEnable (IOP480_HANDLE hPlx, IOP480_INT_HANDLER funcIntHandler);
void IOP480_IntDisable (IOP480_HANDLE hPlx);

// access registers
DWORD IOP480_ReadReg (IOP480_HANDLE hPlx, DWORD dwReg);
void IOP480_WriteReg (IOP480_HANDLE hPlx, DWORD dwReg, DWORD dwData);

// access PCI configuration registers
DWORD IOP480_ReadPCIReg(IOP480_HANDLE hPlx, DWORD dwReg);
void IOP480_WritePCIReg(IOP480_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 IOP 480
// buf - the buffer to transfer
IOP480_DMA_HANDLE IOP480_DMAOpen (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
    DWORD dwBytes, BOOL fIsRead, IOP480_DMA_CHANNEL dmaChannel);
void IOP480_DMAClose (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma);
void IOP480_DMAStart (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma, BOOL fBlocking);
BOOL IOP480_DMAIsDone (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma);
BOOL IOP480_DMAReadWriteBlock (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
    DWORD dwBytes, BOOL fIsRead, IOP480_DMA_CHANNEL dmaChannel);

BOOL IOP480_EEPROMReadWord(IOP480_HANDLE hPlx, DWORD dwOffset, PWORD pwData);
BOOL IOP480_EEPROMWriteWord(IOP480_HANDLE hPlx, DWORD dwOffset, WORD wData);
BOOL IOP480_EEPROMReadDWord(IOP480_HANDLE hPlx, DWORD dwOffset, PDWORD pdwData);
BOOL IOP480_EEPROMWriteDWord(IOP480_HANDLE hPlx, DWORD dwOffset, DWORD dwData);
BOOL IOP480_EEPROMValid(IOP480_HANDLE hPlx);

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

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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