1 #ifndef _ASM_IRQDOMAIN_H 2 #define _ASM_IRQDOMAIN_H 3 4 #include <linux/irqdomain.h> 5 #include <asm/hw_irq.h> 6 7 #ifdef CONFIG_X86_LOCAL_APIC 8 enum { 9 /* Allocate contiguous CPU vectors */ 10 X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 0x1, 11 }; 12 13 extern struct irq_domain *x86_vector_domain; 14 15 extern void init_irq_alloc_info(struct irq_alloc_info *info, 16 const struct cpumask *mask); 17 extern void copy_irq_alloc_info(struct irq_alloc_info *dst, 18 struct irq_alloc_info *src); 19 #endif /* CONFIG_X86_LOCAL_APIC */ 20 21 #ifdef CONFIG_X86_IO_APIC 22 struct device_node; 23 struct irq_data; 24 25 enum ioapic_domain_type { 26 IOAPIC_DOMAIN_INVALID, 27 IOAPIC_DOMAIN_LEGACY, 28 IOAPIC_DOMAIN_STRICT, 29 IOAPIC_DOMAIN_DYNAMIC, 30 }; 31 32 struct ioapic_domain_cfg { 33 enum ioapic_domain_type type; 34 const struct irq_domain_ops *ops; 35 struct device_node *dev; 36 }; 37 38 extern const struct irq_domain_ops mp_ioapic_irqdomain_ops; 39 40 extern int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq, 41 unsigned int nr_irqs, void *arg); 42 extern void mp_irqdomain_free(struct irq_domain *domain, unsigned int virq, 43 unsigned int nr_irqs); 44 extern void mp_irqdomain_activate(struct irq_domain *domain, 45 struct irq_data *irq_data); 46 extern void mp_irqdomain_deactivate(struct irq_domain *domain, 47 struct irq_data *irq_data); 48 extern int mp_irqdomain_ioapic_idx(struct irq_domain *domain); 49 #endif /* CONFIG_X86_IO_APIC */ 50 51 #ifdef CONFIG_PCI_MSI 52 extern void arch_init_msi_domain(struct irq_domain *domain); 53 #else 54 static inline void arch_init_msi_domain(struct irq_domain *domain) { } 55 #endif 56 57 #ifdef CONFIG_HT_IRQ 58 extern void arch_init_htirq_domain(struct irq_domain *domain); 59 #else 60 static inline void arch_init_htirq_domain(struct irq_domain *domain) { } 61 #endif 62 63 #endif 64