Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0-only */ 2 : /* 3 : * Copyright (C) 2012 Advanced Micro Devices, Inc. 4 : * Author: Joerg Roedel <joerg.roedel@amd.com> 5 : * 6 : * This header file contains the interface of the interrupt remapping code to 7 : * the x86 interrupt management code. 8 : */ 9 : 10 : #ifndef __X86_IRQ_REMAPPING_H 11 : #define __X86_IRQ_REMAPPING_H 12 : 13 : #include <asm/irqdomain.h> 14 : #include <asm/hw_irq.h> 15 : #include <asm/io_apic.h> 16 : 17 : struct msi_msg; 18 : struct irq_alloc_info; 19 : 20 : enum irq_remap_cap { 21 : IRQ_POSTING_CAP = 0, 22 : }; 23 : 24 : enum { 25 : IRQ_REMAP_XAPIC_MODE, 26 : IRQ_REMAP_X2APIC_MODE, 27 : }; 28 : 29 : struct vcpu_data { 30 : u64 pi_desc_addr; /* Physical address of PI Descriptor */ 31 : u32 vector; /* Guest vector of the interrupt */ 32 : }; 33 : 34 : #ifdef CONFIG_IRQ_REMAP 35 : 36 : extern raw_spinlock_t irq_2_ir_lock; 37 : 38 : extern bool irq_remapping_cap(enum irq_remap_cap cap); 39 : extern void set_irq_remapping_broken(void); 40 : extern int irq_remapping_prepare(void); 41 : extern int irq_remapping_enable(void); 42 : extern void irq_remapping_disable(void); 43 : extern int irq_remapping_reenable(int); 44 : extern int irq_remap_enable_fault_handling(void); 45 : extern void panic_if_irq_remap(const char *msg); 46 : 47 : /* Create PCI MSI/MSIx irqdomain, use @parent as the parent irqdomain. */ 48 : extern struct irq_domain * 49 : arch_create_remap_msi_irq_domain(struct irq_domain *par, const char *n, int id); 50 : 51 : /* Get parent irqdomain for interrupt remapping irqdomain */ 52 : static inline struct irq_domain *arch_get_ir_parent_domain(void) 53 : { 54 : return x86_vector_domain; 55 : } 56 : 57 : #else /* CONFIG_IRQ_REMAP */ 58 : 59 : static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; } 60 : static inline void set_irq_remapping_broken(void) { } 61 : static inline int irq_remapping_prepare(void) { return -ENODEV; } 62 : static inline int irq_remapping_enable(void) { return -ENODEV; } 63 : static inline void irq_remapping_disable(void) { } 64 : static inline int irq_remapping_reenable(int eim) { return -ENODEV; } 65 1 : static inline int irq_remap_enable_fault_handling(void) { return -ENODEV; } 66 : 67 0 : static inline void panic_if_irq_remap(const char *msg) 68 : { 69 0 : } 70 : 71 : #endif /* CONFIG_IRQ_REMAP */ 72 : #endif /* __X86_IRQ_REMAPPING_H */