#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/msi.h>
#include <linux/of_pci.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include "pcie-mobiveil.h"
static bool mobiveil_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)
{ … }
static void __iomem *mobiveil_pcie_map_bus(struct pci_bus *bus,
unsigned int devfn, int where)
{ … }
static struct pci_ops mobiveil_pcie_ops = …;
static void mobiveil_pcie_isr(struct irq_desc *desc)
{ … }
static int mobiveil_pcie_parse_dt(struct mobiveil_pcie *pcie)
{ … }
static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie)
{ … }
int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit)
{ … }
static void mobiveil_mask_intx_irq(struct irq_data *data)
{ … }
static void mobiveil_unmask_intx_irq(struct irq_data *data)
{ … }
static struct irq_chip intx_irq_chip = …;
static int mobiveil_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 struct irq_chip mobiveil_msi_irq_chip = …;
static struct msi_domain_info mobiveil_msi_domain_info = …;
static void mobiveil_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{ … }
static int mobiveil_msi_set_affinity(struct irq_data *irq_data,
const struct cpumask *mask, bool force)
{ … }
static struct irq_chip mobiveil_msi_bottom_irq_chip = …;
static int mobiveil_irq_msi_domain_alloc(struct irq_domain *domain,
unsigned int virq,
unsigned int nr_irqs, void *args)
{ … }
static void mobiveil_irq_msi_domain_free(struct irq_domain *domain,
unsigned int virq,
unsigned int nr_irqs)
{ … }
static const struct irq_domain_ops msi_domain_ops = …;
static int mobiveil_allocate_msi_domains(struct mobiveil_pcie *pcie)
{ … }
static int mobiveil_pcie_init_irq_domain(struct mobiveil_pcie *pcie)
{ … }
static int mobiveil_pcie_integrated_interrupt_init(struct mobiveil_pcie *pcie)
{ … }
static int mobiveil_pcie_interrupt_init(struct mobiveil_pcie *pcie)
{ … }
static bool mobiveil_pcie_is_bridge(struct mobiveil_pcie *pcie)
{ … }
int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
{ … }