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 | /* Get parent irqdomain for interrupt remapping irqdomain */ |
48 | static inline struct irq_domain *arch_get_ir_parent_domain(void) |
49 | { |
50 | return x86_vector_domain; |
51 | } |
52 | |
53 | #else /* CONFIG_IRQ_REMAP */ |
54 | |
55 | static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; } |
56 | static inline void set_irq_remapping_broken(void) { } |
57 | static inline int irq_remapping_prepare(void) { return -ENODEV; } |
58 | static inline int irq_remapping_enable(void) { return -ENODEV; } |
59 | static inline void irq_remapping_disable(void) { } |
60 | static inline int irq_remapping_reenable(int eim) { return -ENODEV; } |
61 | static inline int irq_remap_enable_fault_handling(void) { return -ENODEV; } |
62 | |
63 | static inline void panic_if_irq_remap(const char *msg) |
64 | { |
65 | } |
66 | |
67 | #endif /* CONFIG_IRQ_REMAP */ |
68 | #endif /* __X86_IRQ_REMAPPING_H */ |
69 | |