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

📄 plx9054.h

📁 Vxworks 下PLX 9054 的驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
{
    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 + -