1*45051539SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 28a8f422dSSuresh Siddha /* 38a8f422dSSuresh Siddha * Copyright (C) 2012 Advanced Micro Devices, Inc. 463ce3ae8SJoerg Roedel * Author: Joerg Roedel <jroedel@suse.de> 58a8f422dSSuresh Siddha * 68a8f422dSSuresh Siddha * This header file contains stuff that is shared between different interrupt 78a8f422dSSuresh Siddha * remapping drivers but with no need to be visible outside of the IOMMU layer. 88a8f422dSSuresh Siddha */ 98a8f422dSSuresh Siddha 108a8f422dSSuresh Siddha #ifndef __IRQ_REMAPPING_H 118a8f422dSSuresh Siddha #define __IRQ_REMAPPING_H 128a8f422dSSuresh Siddha 138a8f422dSSuresh Siddha #ifdef CONFIG_IRQ_REMAP 148a8f422dSSuresh Siddha 158a8f422dSSuresh Siddha struct irq_data; 168a8f422dSSuresh Siddha struct msi_msg; 17947045a2SJiang Liu struct irq_domain; 18947045a2SJiang Liu struct irq_alloc_info; 198a8f422dSSuresh Siddha 2003bbcb2eSNeil Horman extern int irq_remap_broken; 218a8f422dSSuresh Siddha extern int disable_sourceid_checking; 228a8f422dSSuresh Siddha extern int no_x2apic_optout; 23078e1ee2SJoerg Roedel extern int irq_remapping_enabled; 248a8f422dSSuresh Siddha 253d9b98f4SFeng Wu extern int disable_irq_post; 263d9b98f4SFeng Wu 278a8f422dSSuresh Siddha struct irq_remap_ops { 286f281923SFeng Wu /* The supported capabilities */ 296f281923SFeng Wu int capability; 306f281923SFeng Wu 318a8f422dSSuresh Siddha /* Initializes hardware and makes it ready for remapping interrupts */ 328a8f422dSSuresh Siddha int (*prepare)(void); 338a8f422dSSuresh Siddha 348a8f422dSSuresh Siddha /* Enables the remapping hardware */ 358a8f422dSSuresh Siddha int (*enable)(void); 368a8f422dSSuresh Siddha 378a8f422dSSuresh Siddha /* Disables the remapping hardware */ 388a8f422dSSuresh Siddha void (*disable)(void); 398a8f422dSSuresh Siddha 408a8f422dSSuresh Siddha /* Reenables the remapping hardware */ 418a8f422dSSuresh Siddha int (*reenable)(int); 428a8f422dSSuresh Siddha 438a8f422dSSuresh Siddha /* Enable fault handling */ 448a8f422dSSuresh Siddha int (*enable_faulting)(void); 458a8f422dSSuresh Siddha }; 468a8f422dSSuresh Siddha 478a8f422dSSuresh Siddha extern struct irq_remap_ops intel_irq_remap_ops; 486b474b82SJoerg Roedel extern struct irq_remap_ops amd_iommu_irq_ops; 4929217a47SLan Tianyu extern struct irq_remap_ops hyperv_irq_remap_ops; 508a8f422dSSuresh Siddha 5105152a04SJoerg Roedel #else /* CONFIG_IRQ_REMAP */ 5205152a04SJoerg Roedel 5305152a04SJoerg Roedel #define irq_remapping_enabled 0 5403bbcb2eSNeil Horman #define irq_remap_broken 0 553d9b98f4SFeng Wu #define disable_irq_post 1 5605152a04SJoerg Roedel 578a8f422dSSuresh Siddha #endif /* CONFIG_IRQ_REMAP */ 588a8f422dSSuresh Siddha 598a8f422dSSuresh Siddha #endif /* __IRQ_REMAPPING_H */ 60