7#ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
8#define ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
27#ifdef CONFIG_PCIE_CONTROLLER
28struct msi_vector_generic {
32 unsigned int priority;
35typedef struct msi_vector_generic arch_msi_vector_t;
37#define PCI_DEVID(bus, dev, fn) ((((bus) & 0xff) << 8) | (((dev) & 0x1f) << 3) | ((fn) & 0x07))
38#define PCI_BDF_TO_DEVID(bdf) PCI_DEVID(PCIE_BDF_TO_BUS(bdf), \
39 PCIE_BDF_TO_DEV(bdf), \
40 PCIE_BDF_TO_FUNC(bdf))
54#ifdef CONFIG_PCIE_MSI_X
62#ifdef CONFIG_PCIE_MSI_MULTI_VECTOR
75 unsigned int priority,
92 void (*routine)(
const void *parameter),
93 const void *parameter,
151#define PCIE_MSI_MCR 0U
153#define PCIE_MSI_MCR_EN 0x00010000U
154#define PCIE_MSI_MCR_MMC 0x000E0000U
155#define PCIE_MSI_MCR_MMC_SHIFT 17
156#define PCIE_MSI_MCR_MME 0x00700000U
157#define PCIE_MSI_MCR_MME_SHIFT 20
158#define PCIE_MSI_MCR_64 0x00800000U
165#define PCIE_MSI_MAP0 1U
166#define PCIE_MSI_MAP1_64 2U
167#define PCIE_MSI_MDR_32 2U
168#define PCIE_MSI_MDR_64 3U
175#define PCIE_MSIX_MCR 0U
177#define PCIE_MSIX_MCR_EN 0x80000000U
178#define PCIE_MSIX_MCR_FMASK 0x40000000U
179#define PCIE_MSIX_MCR_TSIZE 0x07FF0000U
180#define PCIE_MSIX_MCR_TSIZE_SHIFT 16
181#define PCIE_MSIR_TABLE_ENTRY_SIZE 16
183#define PCIE_MSIX_TR 1U
184#define PCIE_MSIX_TR_BIR 0x00000007U
185#define PCIE_MSIX_TR_OFFSET 0xFFFFFFF8U
187#define PCIE_MSIX_PBA 2U
188#define PCIE_MSIX_PBA_BIR 0x00000007U
189#define PCIE_MSIX_PBA_OFFSET 0xFFFFFFF8U
191#define PCIE_VTBL_MA 0U
192#define PCIE_VTBL_MUA 4U
193#define PCIE_VTBL_MD 8U
194#define PCIE_VTBL_VCTRL 12U
uint32_t pcie_bdf_t
A unique PCI(e) endpoint (bus, device, function).
Definition: pcie.h:37
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:52
arch_msi_vector_t arch
Definition: msi.h:53
uint32_t msg_addr
Definition: msi.h:45
uint32_t msg_up_addr
Definition: msi.h:46
uint32_t vector_ctrl
Definition: msi.h:48
uint32_t msg_data
Definition: msi.h:47