123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- #ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_PCIE_H_
- #define ZEPHYR_INCLUDE_DRIVERS_PCIE_PCIE_H_
- #include <stddef.h>
- #include <dt-bindings/pcie/pcie.h>
- #include <zephyr/types.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef uint32_t pcie_bdf_t;
- typedef uint32_t pcie_id_t;
- struct pcie_mbar {
- uintptr_t phys_addr;
- size_t size;
- };
- extern pcie_bdf_t pcie_bdf_lookup(pcie_id_t id);
- extern uint32_t pcie_conf_read(pcie_bdf_t bdf, unsigned int reg);
- extern void pcie_conf_write(pcie_bdf_t bdf, unsigned int reg, uint32_t data);
- extern bool pcie_probe(pcie_bdf_t bdf, pcie_id_t id);
- extern bool pcie_get_mbar(pcie_bdf_t bdf,
- unsigned int bar_index,
- struct pcie_mbar *mbar);
- extern bool pcie_probe_mbar(pcie_bdf_t bdf,
- unsigned int index,
- struct pcie_mbar *mbar);
- extern void pcie_set_cmd(pcie_bdf_t bdf, uint32_t bits, bool on);
- extern unsigned int pcie_alloc_irq(pcie_bdf_t bdf);
- extern unsigned int pcie_get_irq(pcie_bdf_t bdf);
- extern void pcie_irq_enable(pcie_bdf_t bdf, unsigned int irq);
- extern uint32_t pcie_get_cap(pcie_bdf_t bdf, uint32_t cap_id);
- extern uint32_t pcie_get_ext_cap(pcie_bdf_t bdf, uint32_t cap_id);
- #define PCIE_CONF_CAPPTR 13U
- #define PCIE_CONF_CAPPTR_FIRST(w) (((w) >> 2) & 0x3FU)
- #define PCIE_CONF_CAP_ID(w) ((w) & 0xFFU)
- #define PCIE_CONF_CAP_NEXT(w) (((w) >> 10) & 0x3FU)
- #define PCIE_CONF_EXT_CAPPTR 64U
- #define PCIE_CONF_EXT_CAP_ID(w) ((w) & 0xFFFFU)
- #define PCIE_CONF_EXT_CAP_VER(w) (((w) >> 16) & 0xFU)
- #define PCIE_CONF_EXT_CAP_NEXT(w) (((w) >> 20) & 0xFFFU)
- #define PCIE_CONF_ID 0U
- #define PCIE_CONF_CMDSTAT 1U
- #define PCIE_CONF_CMDSTAT_IO 0x00000001U
- #define PCIE_CONF_CMDSTAT_MEM 0x00000002U
- #define PCIE_CONF_CMDSTAT_MASTER 0x00000004U
- #define PCIE_CONF_CMDSTAT_CAPS 0x00100000U
- #define PCIE_CONF_CLASSREV 2U
- #define PCIE_CONF_CLASSREV_CLASS(w) (((w) >> 24) & 0xFFU)
- #define PCIE_CONF_CLASSREV_SUBCLASS(w) (((w) >> 16) & 0xFFU)
- #define PCIE_CONF_CLASSREV_PROGIF(w) (((w) >> 8) & 0xFFU)
- #define PCIE_CONF_CLASSREV_REV(w) ((w) & 0xFFU)
- #define PCIE_CONF_TYPE 3U
- #define PCIE_CONF_TYPE_BRIDGE(w) (((w) & 0x007F0000U) != 0U)
- #define PCIE_CONF_BAR0 4U
- #define PCIE_CONF_BAR1 5U
- #define PCIE_CONF_BAR2 6U
- #define PCIE_CONF_BAR3 7U
- #define PCIE_CONF_BAR4 8U
- #define PCIE_CONF_BAR5 9U
- #define PCIE_CONF_BAR_IO(w) (((w) & 0x00000001U) == 0x00000001U)
- #define PCIE_CONF_BAR_MEM(w) (((w) & 0x00000001U) != 0x00000001U)
- #define PCIE_CONF_BAR_64(w) (((w) & 0x00000006U) == 0x00000004U)
- #define PCIE_CONF_BAR_ADDR(w) ((w) & ~0xfUL)
- #define PCIE_CONF_BAR_FLAGS(w) ((w) & 0xfUL)
- #define PCIE_CONF_BAR_NONE 0U
- #define PCIE_CONF_BAR_INVAL 0xFFFFFFF0U
- #define PCIE_CONF_BAR_INVAL64 0xFFFFFFFFFFFFFFF0UL
- #define PCIE_CONF_BAR_INVAL_FLAGS(w) \
- ((((w) & 0x00000006U) == 0x00000006U) || \
- (((w) & 0x00000006U) == 0x00000002U))
- #define PCIE_CONF_INTR 15U
- #define PCIE_CONF_INTR_IRQ(w) ((w) & 0xFFU)
- #define PCIE_CONF_INTR_IRQ_NONE 0xFFU
- #define PCIE_MAX_BUS (0xFFFFFFFF & PCIE_BDF_BUS_MASK)
- #define PCIE_MAX_DEV (0xFFFFFFFF & PCIE_BDF_DEV_MASK)
- #define PCIE_MAX_FUNC (0xFFFFFFFF & PCIE_BDF_FUNC_MASK)
- #ifdef __cplusplus
- }
- #endif
- #endif
|