#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/pci.h>
#include <linux/dmar.h>
#include <linux/hpet.h>
#include <linux/msi.h>
#include <asm/irqdomain.h>
#include <asm/hpet.h>
#include <asm/hw_irq.h>
#include <asm/apic.h>
#include <asm/irq_remapping.h>
#include <asm/xen/hypervisor.h>
struct irq_domain *x86_pci_msi_default_domain __ro_after_init;
static void irq_msi_update_msg(struct irq_data *irqd, struct irq_cfg *cfg)
{ … }
static int
msi_set_affinity(struct irq_data *irqd, const struct cpumask *mask, bool force)
{ … }
bool pci_dev_has_default_msi_parent_domain(struct pci_dev *dev)
{ … }
static int x86_msi_prepare(struct irq_domain *domain, struct device *dev,
int nvec, msi_alloc_info_t *alloc)
{ … }
static bool x86_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
struct irq_domain *real_parent, struct msi_domain_info *info)
{ … }
static const struct msi_parent_ops x86_vector_msi_parent_ops = …;
struct irq_domain * __init native_create_pci_msi_domain(void)
{ … }
void __init x86_create_pci_msi_domain(void)
{ … }
int pci_msi_prepare(struct irq_domain *domain, struct device *dev, int nvec,
msi_alloc_info_t *arg)
{ … }
EXPORT_SYMBOL_GPL(…);
#ifdef CONFIG_DMAR_TABLE
static void dmar_msi_compose_msg(struct irq_data *data, struct msi_msg *msg)
{ … }
static void dmar_msi_write_msg(struct irq_data *data, struct msi_msg *msg)
{ … }
static struct irq_chip dmar_msi_controller = …;
static int dmar_msi_init(struct irq_domain *domain,
struct msi_domain_info *info, unsigned int virq,
irq_hw_number_t hwirq, msi_alloc_info_t *arg)
{ … }
static struct msi_domain_ops dmar_msi_domain_ops = …;
static struct msi_domain_info dmar_msi_domain_info = …;
static struct irq_domain *dmar_get_irq_domain(void)
{ … }
int dmar_alloc_hwirq(int id, int node, void *arg)
{ … }
void dmar_free_hwirq(int irq)
{ … }
#endif
bool arch_restore_msi_irqs(struct pci_dev *dev)
{ … }