1 #include <linux/kernel.h>
2 #include <linux/string.h>
3 #include <linux/errno.h>
5 #include "intr_remapping.h"
7 int intr_remapping_enabled;
10 int disable_sourceid_checking;
13 static struct irq_remap_ops *remap_ops;
15 static __init int setup_nointremap(char *str)
20 early_param("nointremap", setup_nointremap);
22 static __init int setup_intremap(char *str)
28 if (!strncmp(str, "on", 2))
30 else if (!strncmp(str, "off", 3))
32 else if (!strncmp(str, "nosid", 5))
33 disable_sourceid_checking = 1;
34 else if (!strncmp(str, "no_x2apic_optout", 16))
37 str += strcspn(str, ",");
44 early_param("intremap", setup_intremap);
46 void __init setup_intr_remapping(void)
48 remap_ops = &intel_irq_remap_ops;
51 int intr_remapping_supported(void)
56 if (!remap_ops || !remap_ops->supported)
59 return remap_ops->supported();
62 int __init intr_hardware_init(void)
64 if (!remap_ops || !remap_ops->hardware_init)
67 return remap_ops->hardware_init();
70 int __init intr_hardware_enable(void)
72 if (!remap_ops || !remap_ops->hardware_enable)
75 return remap_ops->hardware_enable();
78 void intr_hardware_disable(void)
80 if (!remap_ops || !remap_ops->hardware_disable)
83 remap_ops->hardware_disable();
86 int intr_hardware_reenable(int mode)
88 if (!remap_ops || !remap_ops->hardware_reenable)
91 return remap_ops->hardware_reenable(mode);
94 int __init intr_enable_fault_handling(void)
96 if (!remap_ops || !remap_ops->enable_faulting)
99 return remap_ops->enable_faulting();
102 int intr_setup_ioapic_entry(int irq,
103 struct IO_APIC_route_entry *entry,
104 unsigned int destination, int vector,
105 struct io_apic_irq_attr *attr)
107 if (!remap_ops || !remap_ops->setup_ioapic_entry)
110 return remap_ops->setup_ioapic_entry(irq, entry, destination,
114 int intr_set_affinity(struct irq_data *data, const struct cpumask *mask,
117 if (!remap_ops || !remap_ops->set_affinity)
120 return remap_ops->set_affinity(data, mask, force);
123 void intr_free_irq(int irq)
125 if (!remap_ops || !remap_ops->free_irq)
128 remap_ops->free_irq(irq);