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

📄 pciereg.h

📁 基于xilinx vierex5得pci express dma设计实现。
💻 H
字号:
#ifndef _PCIE_REG_H_
#define _PCIE_REG_H_

//*****************************************************************************
//  
//  File Name: PCIEReg.h
// 
//  Description:  This file defines all the PCI Express Design Sample Card's Registers.
// 
//  NOTE: These definitions are for memory-mapped register access only.
//
//*****************************************************************************

//-----------------------------------------------------------------------------   
// PCI Device/Vendor Ids.
//-----------------------------------------------------------------------------   
#define PCIE_PCI_VENDOR_ID               0x10EE
#define PCIE_PCI_DEVICE_ID               0x150A
                                        
//-----------------------------------------------------------------------------   
// Expected size of the PCI9656RDK-Lite on-board SRAM
//-----------------------------------------------------------------------------   
#define PCIE_SRAM_SIZE                  (0x20000)


//-----------------------------------------------------------------------------   
// Size of Buffer for DMA transaction
//-----------------------------------------------------------------------------   
#define PCIE_BUFFER_SIZE                (16 * 1024 * 1024)


//-----------------------------------------------------------------------------   
// Maximum DMA transfer size (in bytes).
//
// NOTE: This value is rather abritrary for this drive, 
//       but must be between [0 - PCIE_SRAM_SIZE] in value.
//       You can play with the value to see how requests are sequenced as a
//       set of one or more DMA operations.
//-----------------------------------------------------------------------------   
//#define PCIE_MAXIMUM_TRANSFER_LENGTH    (8*1024)
#define PCIE_MAXIMUM_TRANSFER_LENGTH    (PCIE_BUFFER_SIZE)


/*
//-----------------------------------------------------------------------------   
// The DMA_TRANSFER_ELEMENTS (the 9656's hardware scatter/gather list element)
// must be aligned on a 16-byte boundry.  This is because the lower 4 bits of
// the DESC_PTR.Address contain bit fields not included in the "next" address.
//-----------------------------------------------------------------------------   
#define PCIE_DTE_ALIGNMENT_16      FILE_OCTA_ALIGNMENT 

//-----------------------------------------------------------------------------   
// Number of DMA channels supported by PCIE Card
//-----------------------------------------------------------------------------   
#define PCIE_DMA_CHANNELS               (2) 

//-----------------------------------------------------------------------------   
// DMA Transfer Element (DTE)
// 
// NOTE: This structure is modeled after the DMAPADRx, DMALADRx, DMASIZx and 
//       DMAADPRx registers. See DataBook Registers description: 11-74 to 11-77.
//-----------------------------------------------------------------------------   
typedef struct _DESC_PTR_ { 

    unsigned int     DescLocation  : 1  ;  // TRUE - Desc in PCI (host) memory
    unsigned int     LastElement   : 1  ;  // TRUE - last NTE in chain
    unsigned int     TermCountInt  : 1  ;  // TRUE - Interrupt on term count.
    unsigned int     DirOfTransfer : 1  ;  // see defines below
    unsigned int     Address       : 28 ;

} DESC_PTR;

#define DESC_PTR_DESC_LOCATION__LOCAL    (0)
#define DESC_PTR_DESC_LOCATION__PCI      (1)

#define DESC_PTR_DIRECTION__TO_DEVICE    (0)
#define DESC_PTR_DIRECTION__FROM_DEVICE  (1)
*/

/*
typedef struct _DMA_TRANSFER_ELEMENT {

    unsigned int       PciAddressLow   ;
    unsigned int       LocalAddress    ;
    unsigned int       TransferSize    ;
    DESC_PTR           DescPtr         ;
    unsigned int       PciAddressHigh  ;
    unsigned int       pad [3]         ;

} DMA_TRANSFER_ELEMENT, * PDMA_TRANSFER_ELEMENT;
*/

/*
#define DESC_PTR_ADDR_SHIFT (4)
#define DESC_PTR_ADDR(a) (((ULONG) a) >> DESC_PTR_ADDR_SHIFT)
*/

/*
//-----------------------------------------------------------------------------   
// Define the Interrupt Command Status Register (CSR)
//-----------------------------------------------------------------------------   
typedef struct _INT_CSR_ {
    unsigned int  EnableIntSources       : 2;  // bit 0-1
    unsigned int  GenPciBusSerrInt       : 1;  // bit 2
    unsigned int  MailboxIntEnable       : 1;  // bit 3
    unsigned int  PowerMgmtIntEnable     : 1;  // bit 4
    unsigned int  PowerMgmtInt           : 1;  // bit 5
    unsigned int  DM_WriteParityCheck    : 1;  // bit 6
    unsigned int  DM_WriteParityCheckErr : 1;  // bit 7
    unsigned int  PciIntEnable           : 1;  // bit 8
    unsigned int  PciDoorbellIntEnable   : 1;  // bit 9
    unsigned int  PciAbortIntEnable      : 1;  // bit 10
    unsigned int  LocalIntInputEnable    : 1;  // bit 11
    unsigned int  RetryAbortEnable       : 1;  // bit 12
    unsigned int  PciDoorbellIntActive   : 1;  // bit 13
    unsigned int  PciAbortIntActive      : 1;  // bit 14
    unsigned int  LocalIntInputActive    : 1;  // bit 15
    unsigned int  LocalIntOutputEnable   : 1;  // bit 16
    unsigned int  LocalDoorbellIntEnable : 1;  // bit 17
    unsigned int  DmaChan0IntEnable      : 1;  // bit 18
    unsigned int  DmaChan1IntEnable      : 1;  // bit 19
    unsigned int  LocalDoorbellIntActive : 1;  // bit 20
    unsigned int  DmaChan0IntActive      : 1;  // bit 21
    unsigned int  DmaChan1IntActive      : 1;  // bit 22
    unsigned int  BistIntActive          : 1;  // bit 23
    unsigned int  DM_WasBusMastOnAbort   : 1;  // bit 24
    unsigned int  Dma0_WasBusMastOnAbort : 1;  // bit 25
    unsigned int  Dma1_WasBusMastOnAbort : 1;  // bit 26
    unsigned int  AbortAfter256Retries   : 1;  // bit 27
    unsigned int  DataInMailbox0         : 1;  // bit 28
    unsigned int  DataInMailbox1         : 1;  // bit 29
    unsigned int  DataInMailbox2         : 1;  // bit 30
    unsigned int  DataInMailbox3         : 1;  // bit 31
} INT_CSR;
*/

/*
//-----------------------------------------------------------------------------   
// Define the EEPROM CSR (CNTRL)
//-----------------------------------------------------------------------------   
typedef struct _EEPROM_CSR_ {
    unsigned int  PciReadCmdForDma       : 4;  // bit 0-3
    unsigned int  PciWriteCmdForDma      : 4;  // bit 4-7
    unsigned int  PciMemReadCmdForDM     : 4;  // bit 8-11
    unsigned int  PciMemWriteCmdForDM    : 4;  // bit 12-15
    unsigned int  GPIO_Output            : 1;  // bit 16
    unsigned int  GPIO_Input             : 1;  // bit 17
    unsigned int  User_i_Select          : 1;  // bit 18
    unsigned int  User_o_Select          : 1;  // bit 19
    unsigned int  LINT_o_IntStatus       : 1;  // bit 20
    unsigned int  TeaIntStatus           : 1;  // bit 21
    unsigned int  reserved               : 2;  // bit 22-23
    unsigned int  SerialEEPROMClockOut   : 1;  // bit 24
    unsigned int  SerialEEPROMChipSelect : 1;  // bit 25
    unsigned int  SerialEEPROMDataIn     : 1;  // bit 26
    unsigned int  SerialEEPROMDataOut    : 1;  // bit 27
    unsigned int  SerialEEPROMPresent    : 1;  // bit 28
    unsigned int  ReloadConfigRegisters  : 1;  // bit 29
    unsigned int  SoftwareReset          : 1;  // bit 30
    unsigned int  EEDOInputEnable        : 1;  // bit 31
} EEPROM_CSR;
*/

/*
//-----------------------------------------------------------------------------   
// Define the DMA Mode Register
//-----------------------------------------------------------------------------   
typedef struct _DMA_MODE_ {
    unsigned int  LocalBusDataWidth      : 2 ;  // bit 0-1
    unsigned int  WaitStateCounter       : 4 ;  // bit 2-5
    unsigned int  TaRdyInputEnable       : 1 ;  // bit 6
    unsigned int  BurstEnable            : 1 ;  // bit 7
    unsigned int  LocalBurstEnable       : 1 ;  // bit 8
    unsigned int  SgModeEnable           : 1 ;  // bit 9
    unsigned int  DoneIntEnable          : 1 ;  // bit 10
    unsigned int  LocalAddressMode       : 1 ;  // bit 11
    unsigned int  DemandMode             : 1 ;  // bit 12
    unsigned int  MWIEnable              : 1 ;  // bit 13
    unsigned int  EOTEnable              : 1 ;  // bit 14
    unsigned int  TermModeSelect         : 1 ;  // bit 15
    unsigned int  ClearCountMode         : 1 ;  // bit 16
    unsigned int  IntToPci               : 1 ;  // bit 17
    unsigned int  DACChainLoad           : 1 ;  // bit 18
    unsigned int  EOTEndLink             : 1 ;  // bit 19
    unsigned int  RingMgmtValidMode      : 1 ;  // bit 20
    unsigned int  RingMgmtValidStop      : 1 ;  // bit 21
    unsigned int  reserved               : 10;  // bit 22-31
} DMA_MODE;
*/

//-----------------------------------------------------------------------------   
// Define the DMA Command Status Register (CSR)
//-----------------------------------------------------------------------------   
#pragma warning(disable:4214)  // bit field types other than int warning

/*
typedef struct _DMA_CSR_ {
    unsigned char  Enable                 : 1;  // bit 0
    unsigned char  Start                  : 1;  // bit 1
    unsigned char  Abort                  : 1;  // bit 2
    unsigned char  Clear                  : 1;  // bit 3
    unsigned char  Done                   : 1;  // bit 4
    unsigned char  pad                    : 1;  // bit 5-7
} DMA_CSR;

*/
#pragma warning(default:4214) 

/*
//-----------------------------------------------------------------------------   
// PCI9659_REGS structure
//-----------------------------------------------------------------------------   
typedef struct _PCI9656_REGS_ {

    unsigned int      Space0_Range      ;  // 0x000 
    unsigned int      Space0_Remap      ;  // 0x004 
    unsigned int      Local_DMA_Arbit   ;  // 0x008 
    unsigned int      Endian_Desc       ;  // 0x00C 
    unsigned int      Exp_XP_ROM_Range  ;  // 0x010 
    unsigned int      Exp_ROM_Remap     ;  // 0x014 
    unsigned int      Space0_ROM_Desc   ;  // 0x018 
    unsigned int      DM_Range          ;  // 0x01C 
    unsigned int      DM_Mem_Base       ;  // 0x020 
    unsigned int      DM_IO_Base        ;  // 0x024 
    unsigned int      DM_PCI_Mem_Remap  ;  // 0x028 
                     
    unsigned int      pad1 [7]          ;  // range [0x02C - 0x044]
                     
    unsigned int      Mailbox2          ;  // 0x048 
    unsigned int      Mailbox3          ;  // 0x04C 
    unsigned int      Mailbox4          ;  // 0x050 
    unsigned int      Mailbox5          ;  // 0x054 
    unsigned int      Mailbox6          ;  // 0x058 
    unsigned int      Mailbox7          ;  // 0x05C 
                     
    unsigned int      Local_Doorbell    ;  // 0x060 
    unsigned int      PCI_Doorbell      ;  // 0x064 
    INT_CSR           Int_Csr           ;  // 0x068 
    EEPROM_CSR        EEPROM_Ctrl_Stat  ;  // 0x06C 
    unsigned int      Perm_Vendor_Id    ;  // 0x070 
    unsigned int      Revision_Id       ;  // 0x074 

    unsigned int      pad2 [2]          ;  // range [0x078 - 0x07C]

    DMA_MODE          Dma0_Mode         ;  // 0x080 
    unsigned int      Dma0_PCI_Addr     ;  // 0x084 
    unsigned int      Dma0_Local_Addr   ;  // 0x088 
    unsigned int      Dma0_Count        ;  // 0x08C 
    DESC_PTR          Dma0_Desc_Ptr     ;  // 0x090 
                       
    DMA_MODE          Dma1_Mode         ;  // 0x094 
    unsigned int      Dma1_PCI_Addr     ;  // 0x098 
    unsigned int      Dma1_Local_Addr   ;  // 0x09C 
    unsigned int      Dma1_Count        ;  // 0x0A0 
    DESC_PTR          Dma1_Desc_Ptr     ;  // 0x0A4 

    DMA_CSR           Dma0_Csr          ;  // 0x0A8 
    DMA_CSR           Dma1_Csr          ;  // 0x0A9

    unsigned char     pad3 [2]          ;  // pad to next 32-bit boundry

    unsigned int      Dma_Arbit         ;  // 0x0AC 
    unsigned int      Dma_Threshold     ;  // 0x0B0 
                       
    unsigned int      Dma0_PCI_DAC      ;  // 0x0B4 
    unsigned int      Dma1_PCI_DAC      ;  // 0x0B8 
                       
    unsigned int      pad4 [13]         ;  // range [0x0BC - 0x0EC]

    unsigned int      Space1_Range      ;  // 0x0F0 
    unsigned int      Space1_Remap      ;  // 0x0F4 
    unsigned int      Space1_Desc       ;  // 0x0F8 
    unsigned int      DM_DAC            ;  // 0x0FC 
                                                                    
    unsigned int      Arbiter_Cntl      ;  // 0x100
    unsigned int      Abort_Address     ;  // 0x104

} PCI9656_REGS, * PPCI9656_REGS; 
*/

// FOR PCIE BOARD
typedef struct
_DMA_CSR1
{
    unsigned int    InitiatorReset:1;
    unsigned int    Reserved:31;
}DMA_CSR1;

typedef struct _DMA_CSR2
{
    unsigned int    WriteDMAStart:1;
    unsigned int    R0:7;
    unsigned int    WriteDMADone:1;
    unsigned int    R1:7;
    unsigned int    ReadDMAStart:1;
    unsigned int    R2:7;
    unsigned int    ReadDMADone:1;
    unsigned int    R3:7;
}DMA_CSR2;

typedef struct _DMA_INT
{
    unsigned int    INT_RD:1;
    unsigned int    INT_WR:1;
    unsigned int    reserved:29;
    unsigned int    INT_ASSERT:1;
}DMA_INT;

typedef struct _PCIE_REGS
{
	DMA_CSR1            DCSR1;                              // 00
    DMA_CSR2            DCSR2;                              // 04
    unsigned int        WriteDMATLPAddress;                 // 08
    unsigned int        WriteDMATLPSize;                    // 0C
    unsigned int        WriteDMATLPCount;                   // 10
    unsigned int        WriteDMATLPDataPattern;             // 14
    unsigned int        Reserved1;                          // 18
    unsigned int        ReadDMATLPAddress;                  // 1C
    unsigned int        ReadDMATLPSize;                     // 20
    unsigned int        ReadDMATLPCount;                    // 24
    unsigned int        WriteDMAPerformance;                // 28
    unsigned int        ReadDMAPerformance;                 // 2C
    unsigned int        ReadDMAStatus;                      // 30
    unsigned int        NumberOfReadCompletionWithData;     // 34
    unsigned int        ReadCompletionDataSize;             // 38
    DMA_INT             INT;                                // 3C
} PCIE_REGS, *PPCIE_REGS;


#endif  // _PCIE_REG_H_

⌨️ 快捷键说明

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