#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/msi.h>
#include <linux/of_address.h>
#include <linux/of_pci.h>
#include <linux/of_platform.h>
#include <linux/of_irq.h>
#include <linux/pci.h>
#include <linux/pci-ecam.h>
#include <linux/platform_device.h>
#include "../pci.h"
#define XILINX_PCIE_REG_BIR …
#define XILINX_PCIE_REG_IDR …
#define XILINX_PCIE_REG_IMR …
#define XILINX_PCIE_REG_PSCR …
#define XILINX_PCIE_REG_RPSC …
#define XILINX_PCIE_REG_MSIBASE1 …
#define XILINX_PCIE_REG_MSIBASE2 …
#define XILINX_PCIE_REG_RPEFR …
#define XILINX_PCIE_REG_RPIFR1 …
#define XILINX_PCIE_REG_RPIFR2 …
#define XILINX_PCIE_INTR_LINK_DOWN …
#define XILINX_PCIE_INTR_ECRC_ERR …
#define XILINX_PCIE_INTR_STR_ERR …
#define XILINX_PCIE_INTR_HOT_RESET …
#define XILINX_PCIE_INTR_CFG_TIMEOUT …
#define XILINX_PCIE_INTR_CORRECTABLE …
#define XILINX_PCIE_INTR_NONFATAL …
#define XILINX_PCIE_INTR_FATAL …
#define XILINX_PCIE_INTR_INTX …
#define XILINX_PCIE_INTR_MSI …
#define XILINX_PCIE_INTR_SLV_UNSUPP …
#define XILINX_PCIE_INTR_SLV_UNEXP …
#define XILINX_PCIE_INTR_SLV_COMPL …
#define XILINX_PCIE_INTR_SLV_ERRP …
#define XILINX_PCIE_INTR_SLV_CMPABT …
#define XILINX_PCIE_INTR_SLV_ILLBUR …
#define XILINX_PCIE_INTR_MST_DECERR …
#define XILINX_PCIE_INTR_MST_SLVERR …
#define XILINX_PCIE_INTR_MST_ERRP …
#define XILINX_PCIE_IMR_ALL_MASK …
#define XILINX_PCIE_IMR_ENABLE_MASK …
#define XILINX_PCIE_IDR_ALL_MASK …
#define XILINX_PCIE_RPEFR_ERR_VALID …
#define XILINX_PCIE_RPEFR_REQ_ID …
#define XILINX_PCIE_RPEFR_ALL_MASK …
#define XILINX_PCIE_RPIFR1_INTR_VALID …
#define XILINX_PCIE_RPIFR1_MSI_INTR …
#define XILINX_PCIE_RPIFR1_INTR_MASK …
#define XILINX_PCIE_RPIFR1_ALL_MASK …
#define XILINX_PCIE_RPIFR1_INTR_SHIFT …
#define XILINX_PCIE_BIR_ECAM_SZ_MASK …
#define XILINX_PCIE_BIR_ECAM_SZ_SHIFT …
#define XILINX_PCIE_RPIFR2_MSG_DATA …
#define XILINX_PCIE_REG_RPSC_BEN …
#define XILINX_PCIE_REG_PSCR_LNKUP …
#define XILINX_NUM_MSI_IRQS …
struct xilinx_pcie { … };
static inline u32 pcie_read(struct xilinx_pcie *pcie, u32 reg)
{ … }
static inline void pcie_write(struct xilinx_pcie *pcie, u32 val, u32 reg)
{ … }
static inline bool xilinx_pcie_link_up(struct xilinx_pcie *pcie)
{ … }
static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie *pcie)
{ … }
static bool xilinx_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)
{ … }
static void __iomem *xilinx_pcie_map_bus(struct pci_bus *bus,
unsigned int devfn, int where)
{ … }
static struct pci_ops xilinx_pcie_ops = …;
static void xilinx_msi_top_irq_ack(struct irq_data *d)
{ … }
static struct irq_chip xilinx_msi_top_chip = …;
static void xilinx_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{ … }
static struct irq_chip xilinx_msi_bottom_chip = …;
static int xilinx_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs, void *args)
{ … }
static void xilinx_msi_domain_free(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs)
{ … }
static const struct irq_domain_ops xilinx_msi_domain_ops = …;
static struct msi_domain_info xilinx_msi_info = …;
static int xilinx_allocate_msi_domains(struct xilinx_pcie *pcie)
{ … }
static void xilinx_free_msi_domains(struct xilinx_pcie *pcie)
{ … }
static int xilinx_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
irq_hw_number_t hwirq)
{ … }
static const struct irq_domain_ops intx_domain_ops = …;
static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
{ … }
static int xilinx_pcie_init_irq_domain(struct xilinx_pcie *pcie)
{ … }
static void xilinx_pcie_init_port(struct xilinx_pcie *pcie)
{ … }
static int xilinx_pcie_parse_dt(struct xilinx_pcie *pcie)
{ … }
static int xilinx_pcie_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id xilinx_pcie_of_match[] = …;
static struct platform_driver xilinx_pcie_driver = …;
builtin_platform_driver(…) …;