123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
- #define ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
- #include <kernel.h>
- #include <zephyr/types.h>
- #include <stdbool.h>
- #include <drivers/pcie/pcie.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct msix_vector {
- uint32_t msg_addr;
- uint32_t msg_up_addr;
- uint32_t msg_data;
- uint32_t vector_ctrl;
- };
- struct msi_vector {
- pcie_bdf_t bdf;
- arch_msi_vector_t arch;
- #ifdef CONFIG_PCIE_MSI_X
- struct msix_vector *msix_vector;
- bool msix;
- #endif
- };
- typedef struct msi_vector msi_vector_t;
- #ifdef CONFIG_PCIE_MSI_MULTI_VECTOR
- extern uint8_t pcie_msi_vectors_allocate(pcie_bdf_t bdf,
- unsigned int priority,
- msi_vector_t *vectors,
- uint8_t n_vector);
- extern bool pcie_msi_vector_connect(pcie_bdf_t bdf,
- msi_vector_t *vector,
- void (*routine)(const void *parameter),
- const void *parameter,
- uint32_t flags);
- #endif
- extern uint32_t pcie_msi_map(unsigned int irq,
- msi_vector_t *vector);
- extern uint16_t pcie_msi_mdr(unsigned int irq,
- msi_vector_t *vector);
- extern bool pcie_msi_enable(pcie_bdf_t bdf,
- msi_vector_t *vectors,
- uint8_t n_vector,
- unsigned int irq);
- #define PCIE_MSI_MCR 0U
- #define PCIE_MSI_MCR_EN 0x00010000U
- #define PCIE_MSI_MCR_MMC 0x000E0000U
- #define PCIE_MSI_MCR_MMC_SHIFT 17
- #define PCIE_MSI_MCR_MME 0x00700000U
- #define PCIE_MSI_MCR_MME_SHIFT 20
- #define PCIE_MSI_MCR_64 0x00800000U
- #define PCIE_MSI_MAP0 1U
- #define PCIE_MSI_MAP1_64 2U
- #define PCIE_MSI_MDR_32 2U
- #define PCIE_MSI_MDR_64 3U
- #define PCIE_MSIX_MCR 0U
- #define PCIE_MSIX_MCR_EN 0x80000000U
- #define PCIE_MSIX_MCR_FMASK 0x40000000U
- #define PCIE_MSIX_MCR_TSIZE 0x07FF0000U
- #define PCIE_MSIX_MCR_TSIZE_SHIFT 16
- #define PCIE_MSIR_TABLE_ENTRY_SIZE 16
- #define PCIE_MSIX_TR 1U
- #define PCIE_MSIX_TR_BIR 0x00000007U
- #define PCIE_MSIX_TR_OFFSET 0xFFFFFFF8U
- #define PCIE_MSIX_PBA 2U
- #define PCIE_MSIX_PBA_BIR 0x00000007U
- #define PCIE_MSIX_PBA_OFFSET 0xFFFFFFF8U
- #define PCIE_VTBL_MA 0U
- #define PCIE_VTBL_MUA 4U
- #define PCIE_VTBL_MD 8U
- #define PCIE_VTBL_VCTRL 12U
- #ifdef __cplusplus
- }
- #endif
- #endif
|