📄 plx9054.h
字号:
{
P9054_DMA_CHANNEL_0 = 0,
P9054_DMA_CHANNEL_1 = 1
} P9054_DMA_CHANNEL;
typedef enum
{
P9054_MODE_BYTE = 0,
P9054_MODE_WORD = 1,
P9054_MODE_DWORD = 2
} P9054_MODE;
typedef enum
{
DATA_BYTE = 1,
DATA_WORD = 2,
DATA_TRI = 3,
DATA_DWORD = 4
} DATA_WIDTH_MODE;
typedef enum
{
P9054_ADDR_REG = AD_PCI_BAR0, /* PLX9054 寄存器在PCI 内存空间的基址*/
P9054_ADDR_REG_IO = AD_PCI_BAR1, /* PLX9054 寄存器在PCI I/0 空间的基址*/
P9054_ADDR_SPACE0 = AD_PCI_BAR2, /* 本地空间0*/
P9054_ADDR_SPACE1 = AD_PCI_BAR3, /* 本地空间1*/
P9054_ADDR_SPACE2 = AD_PCI_BAR4, /* 保留*/
P9054_ADDR_SPACE3 = AD_PCI_BAR5, /* 保留*/
P9054_ADDR_EPROM = AD_PCI_BAR_EPROM /* PLX9054 EEPROM 空间*/
} PLX9054_SPACE_INDEX;
/* typedefs */
typedef struct plx9054PciResource /* PLX9054_PCI_RESOURCES */
{
UINT32 membaseCsr; /* Base Address Register 0: Used for Memory-Mapped */
UINT32 iobaseCsr; /* Base Address Register 1: Used for I/O-Mapped*/
char irq; /* Interrupt Request Level */
UINT32 irqvec; /* Interrupt Request vector */
UINT32 configType; /* type of configuration */
UINT32 pciBus; /* PCI Bus number */
UINT32 pciDevice; /* PCI Device number */
UINT32 pciFunc; /* PCI Function number */
} PLX9054_PCI_RESOURCES;
typedef struct plx9054BoardResource /* PLX9054_BOARD_RESOURCES */
{
UINT32 type; /* type of the board */
UINT32 vendorId; /* Vendor ID */
UINT32 deviceId; /* Device ID */
UINT32 plxUsrFlags; /* RTL driver user flags */
} PLX9054_BOARD_RESOURCES;
typedef struct plx9054SpaceDesc /* plx9054 本地空间描述*/
{
char spaceName[256]; /* Space 空间名*/
UINT32 dwPciBar; /* pci 空间基地址*/
UINT32 dwRange; /* 本地空间大小*/
UINT32 dwLocalBase; /* 本地空间基地址*/
BOOL fIsMemory; /* 是否映射到PCI Memory 空间*/
BOOL fIsEnable; /* 本地空间是否使能*/
BOOL fIsPrefetch; /* Is Read Prefetchable*/
UINT32 dwCurrentAddr; /*CPU当前处理的地址*/
} PLX9054_SPACE_DESC;
enum { PLX9054_DMA_CHANNEL_SHIFT = 0x14 };
typedef enum
{
PLX9054_DMA_CH_0 = 0,
PLX9054_DMA_CH_1 = 1,
PLX9054_DMA_NUM = 2
} PLX9054_DMA_CH;
typedef enum
{
PLX9054_BUS_BYTE = 0,
PLX9054_BUS_WORD = 1,
PLX9054_BUS_DWORD = 2
} PLX9054_BUS_MODE;
typedef struct plx9054_dma_desc
{
UINT32 pciAddr;
UINT32 localAddr;
UINT32 nBytes;
UINT32 descPointer;
}PLX9054_DMA_DESC;
typedef struct
{
#if 0
UINT32 * pPciAddr; /* DMA PCI Address 0x84h 0x98h */
UINT32 * pLocalAddr; /* DMA Local Address 0x88h 0x9ch */
UINT32 * pSize; /* Transfer Size (Bytes) 0x8ch 0xa0h*/
UINT32 * pNextPointer; /* DMA Descriptor Pointer 0x90h 0xa4h*/
#endif
}PLX9054_DMA_REG;
typedef enum
{
DMA_CHANNEL_SET = 0,
DMA_CHANNEL_GET = 1,
DMA_READ_ENABLE = 2, /*LOCAL -> PCI*/
DMA_WRITE_ENABLE = 3, /*PCI -> LOCAL*/
DMA_BUS_WIDTH_SET = 4,
DMA_BUS_WIDTH_GET = 5,
DMA_WAIT_SET = 6,
DMA_WAIT_GET = 7,
DMA_BURST_ENABLE = 8,
DMA_BURST_DISABLE,
DMA_GATHER_MODE_ENABLE,
DMA_GATHER_MODE_DISABLE,
DMA_INT_ENABLE,
DMA_INT_DISABLE,
DMA_LOCAL_ADDR_INC,
DMA_LOCAL_ADDR_HOLD
}PLX9054_DMA_CMD;
typedef enum
{
PLX9054_CMD = 0
}PLX9054_IOCTL_CMD;
typedef struct
{
UINT32 * pDmaMode; /* DMA模式寄存器*/
PLX9054_DMA_DESC * pDmaDesc; /* 指向DMA描述符结构体*/
UINT8 * pDmaCs; /* DMA控制状态寄存器*/
BOOL fIschkDone; /*是否为查询方式,否则使用中断方式*/
BOOL fIsRead; /* DMA READ*/
BOOL fIsBusy;
SEM_ID syncSem; /* binary sem for syncronization */
int semTimeOut;
UINT32 timeOutCount;
}PLX9054_DMA;
typedef struct plx9054_device
{
PLX9054_PCI_RESOURCES PlxPciRsrc;
PLX9054_SPACE_DESC spaceDesc[AD_PCI_BARS];
PLX9054_DMA dmaCh[PLX9054_DMA_NUM];
PLX9054_DMA_CH channel;
BOOL fIsInit; /* 是否初始化*/
BOOL intIsEnable; /* 中断是否使能*/
} PLX9054_DEVICE;
typedef struct plx9054_drvctrl
{
PLX9054_DEVICE * pDevice[PLX9054_MAX_DEV]; /* 设备指针数组*/
int plxCardNum; /* 实际安装的扩展卡的数量*/
UINT32 errorCount; /* 错误统计*/
UINT32 totalBytes; /* 传输的数据字节数*/
}PLX9054_DRVCTRL;
/* *********************EEPROM 相关定义***************************/
/*PLX 9000-series EEPROM definitions*/
#define EE46_CMD_LEN 9 /*Bits in instructions*/
#define EE56_CMD_LEN 11 /*Bits in instructions*/
#define EE66_CMD_LEN 11 /* Bits in instructions*/
#define EE_READ 0x0180 /* 01 1000 0000 read instruction*/
#define EE_WRITE 0x0140 /* 01 0100 0000 write instruction*/
#define EE_WREN 0x0130 /* 01 0011 0000 write enable instruction*/
#define EE_WRALL 0x0110 /* 01 0001 0000 write all registers*/
#define EE_PRREAD 0x0180 /* 01 1000 0000 read address stored in Protect Register*/
#define EE_PRWRITE 0x0140 /* 01 0100 0000 write the address into PR*/
#define EE_WDS 0x0100 /* 01 0000 0000 write disable instruction*/
#define EE_PREN 0x0130 /* 01 0011 0000 protect enable instruction*/
#define EE_PRCLEAR 0x01FF /* 01 1111 1111 clear protect register instr*/
#define EE_PRDS 0x0100 /* 01 0000 0000 ONE TIME ONLY, permenant */
/* EEPROM TYPE */
typedef enum _EEPROM_TYPE
{
Eeprom93CS46,
Eeprom93CS56,
Eeprom93CS66,
EepromX24012,
EepromX24022,
EepromX24042,
EepromX24162,
EEPROM_UNSUPPORTED
} EEPROM_TYPE;
/* export */
extern STATUS PLX9054_DMAReadWriteBlock (int index, UINT32 dwLocalAddr, UINT32 buffer, UINT32 dwBytes, BOOL fIsRead);
extern STATUS PLX9054_DMACtl(int index, PLX9054_DMA_CMD cmd, UINT32 * pData);
extern STATUS PLX9054_DMA_Init(int index);
extern BOOL PLX9054_DMAIsDone (PLX9054_DMA * pDmaCtrl);
extern STATUS PLX9054_DMAStart (PLX9054_DMA * pDmaCtrl);
extern STATUS PLX9054_GetSpaceInfo(int index, PLX9054_SPACE_INDEX spaceIndex, PLX9054_SPACE_DESC * pPlxSpace);
extern STATUS PLX9054_GetAllSpaceInfo(int index);
extern STATUS PLX9054_Local_Reg_Read( int index, int offset, UINT32 * pData);
extern STATUS PLX9054_Local_Reg_Write( int index, int offset, UINT32 Data);
extern STATUS PLX9054_Pci_Reg_Read( int index, int offset, UINT32 * pData, DATA_WIDTH_MODE dataWidth);
extern STATUS PLX9054_Pci_Reg_Write( int index, int offset, UINT32 data, DATA_WIDTH_MODE dataWidth);
extern void PLX9054_IntEnable (int index);
extern void PLX9054_IntDisable (int index);
extern void PLX9054_Pci_Show(void);
extern STATUS PLX9054_ReadByte (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, char * pData);
extern STATUS PLX9054_WriteByte (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, char data);
extern STATUS PLX9054_ReadWord (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, short * pData);
extern STATUS PLX9054_WriteWord (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, short data);
extern STATUS PLX9054_ReadDword (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, UINT32 * pData);
extern STATUS PLX9054_WriteDword (int index, PLX9054_SPACE_INDEX spaceIndex, UINT32 dwOffset, UINT32 data);
extern PLX9054_DRVCTRL * PLX9054_GetDrvCtrl(void);
extern void PLX9054_SetDrvCtrl(PLX9054_DRVCTRL * pDrvCtrl);
extern BOOL PLX9054_EEPROM_Valid(int index);
extern STATUS PLX9054_EepromReadDword(int index, EEPROM_TYPE EepromType, UINT32 offset, UINT32 *pValue);
extern STATUS PLX9054_EepromWriteDword(int index, EEPROM_TYPE EepromType, UINT32 offset, UINT32 value);
extern void PLX9054_SoftReset(int index);
extern void sysPlx9054PciStart(void);
extern void PLX9054_WriteByteToDsp(int index, UINT8 data);
#ifdef __cplusplus
}
#endif
#endif /* INCplx9054h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -