1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2012 Advanced Micro Devices, Inc. 4 * Author: Joerg Roedel <jroedel@suse.de> 5 * 6 * This header file contains stuff that is shared between different interrupt 7 * remapping drivers but with no need to be visible outside of the IOMMU layer. 8 */ 9 10 #ifndef __IRQ_REMAPPING_H 11 #define __IRQ_REMAPPING_H 12 13 #ifdef CONFIG_IRQ_REMAP 14 15 struct irq_data; 16 struct msi_msg; 17 struct irq_domain; 18 struct irq_alloc_info; 19 20 extern int irq_remap_broken; 21 extern int disable_sourceid_checking; 22 extern int no_x2apic_optout; 23 extern int irq_remapping_enabled; 24 25 extern int disable_irq_post; 26 27 struct irq_remap_ops { 28 /* The supported capabilities */ 29 int capability; 30 31 /* Initializes hardware and makes it ready for remapping interrupts */ 32 int (*prepare)(void); 33 34 /* Enables the remapping hardware */ 35 int (*enable)(void); 36 37 /* Disables the remapping hardware */ 38 void (*disable)(void); 39 40 /* Reenables the remapping hardware */ 41 int (*reenable)(int); 42 43 /* Enable fault handling */ 44 int (*enable_faulting)(void); 45 46 /* Get the irqdomain associated the IOMMU device */ 47 struct irq_domain *(*get_ir_irq_domain)(struct irq_alloc_info *); 48 49 /* Get the MSI irqdomain associated with the IOMMU device */ 50 struct irq_domain *(*get_irq_domain)(struct irq_alloc_info *); 51 }; 52 53 extern struct irq_remap_ops intel_irq_remap_ops; 54 extern struct irq_remap_ops amd_iommu_irq_ops; 55 extern struct irq_remap_ops hyperv_irq_remap_ops; 56 57 #else /* CONFIG_IRQ_REMAP */ 58 59 #define irq_remapping_enabled 0 60 #define irq_remap_broken 0 61 #define disable_irq_post 1 62 63 #endif /* CONFIG_IRQ_REMAP */ 64 65 #endif /* __IRQ_REMAPPING_H */ 66