Commit | Line | Data |
---|---|---|
45051539 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
736baef4 JR |
2 | /* |
3 | * Copyright (C) 2012 Advanced Micro Devices, Inc. | |
4 | * Author: Joerg Roedel <joerg.roedel@amd.com> | |
5 | * | |
736baef4 JR |
6 | * This header file contains the interface of the interrupt remapping code to |
7 | * the x86 interrupt management code. | |
8 | */ | |
9 | ||
8a8f422d SS |
10 | #ifndef __X86_IRQ_REMAPPING_H |
11 | #define __X86_IRQ_REMAPPING_H | |
736baef4 | 12 | |
d746d1eb | 13 | #include <asm/irqdomain.h> |
947045a2 | 14 | #include <asm/hw_irq.h> |
399988ee | 15 | #include <asm/io_apic.h> |
736baef4 | 16 | |
35d3d814 | 17 | struct msi_msg; |
947045a2 | 18 | struct irq_alloc_info; |
35d3d814 | 19 | |
6f281923 FW |
20 | enum irq_remap_cap { |
21 | IRQ_POSTING_CAP = 0, | |
22 | }; | |
23 | ||
818b7587 SS |
24 | enum { |
25 | IRQ_REMAP_XAPIC_MODE, | |
26 | IRQ_REMAP_X2APIC_MODE, | |
27 | }; | |
28 | ||
18cd52c4 PB |
29 | struct vcpu_data { |
30 | u64 pi_desc_addr; /* Physical address of PI Descriptor */ | |
31 | u32 vector; /* Guest vector of the interrupt */ | |
32 | }; | |
33 | ||
399988ee | 34 | #ifdef CONFIG_IRQ_REMAP |
0c3f173a | 35 | |
26b86092 SM |
36 | extern raw_spinlock_t irq_2_ir_lock; |
37 | ||
959c870f | 38 | extern bool irq_remapping_cap(enum irq_remap_cap cap); |
03bbcb2e | 39 | extern void set_irq_remapping_broken(void); |
95a02e97 SS |
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); | |
6a9f5de2 | 45 | extern void panic_if_irq_remap(const char *msg); |
9b1b0e42 | 46 | |
947045a2 JL |
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 | ||
736baef4 JR |
53 | #else /* CONFIG_IRQ_REMAP */ |
54 | ||
959c870f | 55 | static inline bool irq_remapping_cap(enum irq_remap_cap cap) { return 0; } |
03bbcb2e | 56 | static inline void set_irq_remapping_broken(void) { } |
95a02e97 SS |
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; } | |
6a9f5de2 JR |
62 | |
63 | static inline void panic_if_irq_remap(const char *msg) | |
64 | { | |
65 | } | |
9b1b0e42 | 66 | |
736baef4 | 67 | #endif /* CONFIG_IRQ_REMAP */ |
8a8f422d | 68 | #endif /* __X86_IRQ_REMAPPING_H */ |