xref: /openbmc/linux/drivers/iommu/irq_remapping.h (revision cdd38c5f1ce4398ec58fec95904b75824daab7b5)
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