7#ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_ 
    8#define ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_ 
   20#ifdef CONFIG_PCIE_CONTROLLER 
   21struct msi_vector_generic {
 
   25        unsigned int priority;
 
   28typedef struct msi_vector_generic arch_msi_vector_t;
 
   30#define PCI_DEVID(bus, dev, fn) ((((bus) & 0xff) << 8) | (((dev) & 0x1f) << 3) | ((fn) & 0x07)) 
   31#define PCI_BDF_TO_DEVID(bdf)   PCI_DEVID(PCIE_BDF_TO_BUS(bdf), \ 
   32                                          PCIE_BDF_TO_DEV(bdf), \ 
   33                                          PCIE_BDF_TO_FUNC(bdf)) 
   47#ifdef CONFIG_PCIE_MSI_X 
   55#ifdef CONFIG_PCIE_MSI_MULTI_VECTOR 
   68                                         unsigned int priority,
 
   85                                    void (*routine)(
const void *parameter),
 
   86                                    const void *parameter,
 
  144#define PCIE_MSI_MCR            0U 
  146#define PCIE_MSI_MCR_EN         0x00010000U   
  147#define PCIE_MSI_MCR_MMC        0x000E0000U   
  148#define PCIE_MSI_MCR_MMC_SHIFT  17 
  149#define PCIE_MSI_MCR_MME        0x00700000U   
  150#define PCIE_MSI_MCR_MME_SHIFT  20 
  151#define PCIE_MSI_MCR_64         0x00800000U   
  158#define PCIE_MSI_MAP0           1U 
  159#define PCIE_MSI_MAP1_64        2U 
  160#define PCIE_MSI_MDR_32         2U 
  161#define PCIE_MSI_MDR_64         3U 
  168#define PCIE_MSIX_MCR                   0U 
  170#define PCIE_MSIX_MCR_EN                0x80000000U  
  171#define PCIE_MSIX_MCR_FMASK             0x40000000U  
  172#define PCIE_MSIX_MCR_TSIZE             0x07FF0000U  
  173#define PCIE_MSIX_MCR_TSIZE_SHIFT       16 
  174#define PCIE_MSIR_TABLE_ENTRY_SIZE      16 
  176#define PCIE_MSIX_TR                    1U 
  177#define PCIE_MSIX_TR_BIR                0x00000007U  
  178#define PCIE_MSIX_TR_OFFSET             0xFFFFFFF8U  
  180#define PCIE_MSIX_PBA                   2U 
  181#define PCIE_MSIX_PBA_BIR               0x00000007U  
  182#define PCIE_MSIX_PBA_OFFSET            0xFFFFFFF8U  
  184#define PCIE_VTBL_MA                    0U  
  185#define PCIE_VTBL_MUA                   4U  
  186#define PCIE_VTBL_MD                    8U  
  187#define PCIE_VTBL_VCTRL                 12U  
uint32_t pcie_bdf_t
A unique PCI(e) endpoint (bus, device, function).
Definition: pcie.h:30
 
uint32_t pcie_msi_map(unsigned int irq, msi_vector_t *vector, uint8_t n_vector)
Compute the target address for an MSI posted write.
 
bool pcie_msi_enable(pcie_bdf_t bdf, msi_vector_t *vectors, uint8_t n_vector, unsigned int irq)
Configure the given PCI endpoint to generate MSIs.
 
bool pcie_is_msi(pcie_bdf_t bdf)
Check if the given PCI endpoint supports MSI/MSI-X.
 
uint16_t pcie_msi_mdr(unsigned int irq, msi_vector_t *vector)
Compute the data for an MSI posted write.
 
flags
Definition: parser.h:96
 
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
 
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
 
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
 
pcie_bdf_t bdf
Definition: msi.h:45
 
arch_msi_vector_t arch
Definition: msi.h:46
 
uint32_t msg_addr
Definition: msi.h:38
 
uint32_t msg_up_addr
Definition: msi.h:39
 
uint32_t vector_ctrl
Definition: msi.h:41
 
uint32_t msg_data
Definition: msi.h:40