Branch data 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 : : extern struct irq_domain * 48 : : irq_remapping_get_ir_irq_domain(struct irq_alloc_info *info); 49 : : extern struct irq_domain * 50 : : irq_remapping_get_irq_domain(struct irq_alloc_info *info); 51 : : 52 : : /* Create PCI MSI/MSIx irqdomain, use @parent as the parent irqdomain. */ 53 : : extern struct irq_domain * 54 : : arch_create_remap_msi_irq_domain(struct irq_domain *par, const char *n, int id); 55 : : 56 : : /* Get parent irqdomain for interrupt remapping irqdomain */ 57 : : static inline struct irq_domain *arch_get_ir_parent_domain(void) 58 : : { 59 : : return x86_vector_domain; 60 : : } 61 : : 62 : : #else /* CONFIG_IRQ_REMAP */ 63 : : 64 : : static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; } 65 : : static inline void set_irq_remapping_broken(void) { } 66 : : static inline int irq_remapping_prepare(void) { return -ENODEV; } 67 : : static inline int irq_remapping_enable(void) { return -ENODEV; } 68 : 0 : static inline void irq_remapping_disable(void) { } 69 : 0 : static inline int irq_remapping_reenable(int eim) { return -ENODEV; } 70 : 11 : static inline int irq_remap_enable_fault_handling(void) { return -ENODEV; } 71 : : 72 : 0 : static inline void panic_if_irq_remap(const char *msg) 73 : : { 74 : 0 : } 75 : : 76 : : static inline struct irq_domain * 77 : 22 : irq_remapping_get_ir_irq_domain(struct irq_alloc_info *info) 78 : : { 79 [ - + ]: 22 : return NULL; 80 : : } 81 : : 82 : : static inline struct irq_domain * 83 : 0 : irq_remapping_get_irq_domain(struct irq_alloc_info *info) 84 : : { 85 [ # # ]: 0 : return NULL; 86 : : } 87 : : 88 : : #endif /* CONFIG_IRQ_REMAP */ 89 : : #endif /* __X86_IRQ_REMAPPING_H */