#include<linux/interrupt.h>#include<linux/dmar.h>#include<linux/spinlock.h>#include<linux/slab.h>#include<linux/jiffies.h>#include<linux/hpet.h>#include<linux/pci.h>#include<linux/irq.h>#include<linux/intel-iommu.h>#include<linux/acpi.h>#include<linux/irqdomain.h>#include<asm/io_apic.h>#include<asm/smp.h>#include<asm/cpu.h>#include<asm/irq_remapping.h>#include<asm/pci-direct.h>#include<asm/msidef.h>#include"irq_remapping.h"structioapic_scope{structintel_iommu*iommu;unsignedintid;unsignedintbus;/* PCI bus number */unsignedintdevfn;/* PCI devfn number */};structhpet_scope{structintel_iommu*iommu;u8id;unsignedintbus;unsignedintdevfn;};structintel_ir_data{structirq_2_iommuirq_2_iommu;structirteirte_entry;union{structmsi_msgmsi_entry;};};#define IR_X2APIC_MODE(mode) (mode ? (1 << 11) : 0)#define IRTE_DEST(dest) ((eim_mode) ? dest : dest << 8)staticint__read_mostlyeim_mode;static