Commit | Line | Data |
---|---|---|
736baef4 JR |
1 | /* |
2 | * Copyright (C) 2012 Advanced Micro Devices, Inc. | |
3 | * Author: Joerg Roedel <joerg.roedel@amd.com> | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms of the GNU General Public License version 2 as published | |
7 | * by the Free Software Foundation. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License | |
15 | * along with this program; if not, write to the Free Software | |
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
17 | * | |
18 | * This header file contains stuff that is shared between different interrupt | |
19 | * remapping drivers but with no need to be visible outside of the IOMMU layer. | |
20 | */ | |
21 | ||
8a8f422d SS |
22 | #ifndef __IRQ_REMAPPING_H |
23 | #define __IRQ_REMAPPING_H | |
736baef4 JR |
24 | |
25 | #ifdef CONFIG_IRQ_REMAP | |
26 | ||
0c3f173a JR |
27 | struct IO_APIC_route_entry; |
28 | struct io_apic_irq_attr; | |
4c1bad6a JR |
29 | struct irq_data; |
30 | struct cpumask; | |
5e2b930b JR |
31 | struct pci_dev; |
32 | struct msi_msg; | |
0c3f173a | 33 | |
95a02e97 | 34 | extern int disable_irq_remap; |
736baef4 JR |
35 | extern int disable_sourceid_checking; |
36 | extern int no_x2apic_optout; | |
37 | ||
38 | struct irq_remap_ops { | |
39 | /* Check whether Interrupt Remapping is supported */ | |
40 | int (*supported)(void); | |
41 | ||
42 | /* Initializes hardware and makes it ready for remapping interrupts */ | |
95a02e97 | 43 | int (*prepare)(void); |
736baef4 JR |
44 | |
45 | /* Enables the remapping hardware */ | |
95a02e97 | 46 | int (*enable)(void); |
4f3d8b67 JR |
47 | |
48 | /* Disables the remapping hardware */ | |
95a02e97 | 49 | void (*disable)(void); |
4f3d8b67 JR |
50 | |
51 | /* Reenables the remapping hardware */ | |
95a02e97 | 52 | int (*reenable)(int); |
4f3d8b67 JR |
53 | |
54 | /* Enable fault handling */ | |
55 | int (*enable_faulting)(void); | |
0c3f173a JR |
56 | |
57 | /* IO-APIC setup routine */ | |
58 | int (*setup_ioapic_entry)(int irq, struct IO_APIC_route_entry *, | |
59 | unsigned int, int, | |
60 | struct io_apic_irq_attr *); | |
4c1bad6a JR |
61 | |
62 | /* Set the CPU affinity of a remapped interrupt */ | |
63 | int (*set_affinity)(struct irq_data *data, const struct cpumask *mask, | |
64 | bool force); | |
9d619f65 JR |
65 | |
66 | /* Free an IRQ */ | |
67 | int (*free_irq)(int); | |
5e2b930b JR |
68 | |
69 | /* Create MSI msg to use for interrupt remapping */ | |
70 | void (*compose_msi_msg)(struct pci_dev *, | |
71 | unsigned int, unsigned int, | |
72 | struct msi_msg *, u8); | |
73 | ||
74 | /* Allocate remapping resources for MSI */ | |
75 | int (*msi_alloc_irq)(struct pci_dev *, int, int); | |
76 | ||
77 | /* Setup the remapped MSI irq */ | |
78 | int (*msi_setup_irq)(struct pci_dev *, unsigned int, int, int); | |
79 | ||
80 | /* Setup interrupt remapping for an HPET MSI */ | |
81 | int (*setup_hpet_msi)(unsigned int, unsigned int); | |
736baef4 JR |
82 | }; |
83 | ||
84 | extern struct irq_remap_ops intel_irq_remap_ops; | |
6b474b82 | 85 | extern struct irq_remap_ops amd_iommu_irq_ops; |
736baef4 | 86 | |
05152a04 JR |
87 | #else /* CONFIG_IRQ_REMAP */ |
88 | ||
89 | #define irq_remapping_enabled 0 | |
90 | #define disable_irq_remap 1 | |
91 | ||
736baef4 JR |
92 | #endif /* CONFIG_IRQ_REMAP */ |
93 | ||
8a8f422d | 94 | #endif /* __IRQ_REMAPPING_H */ |