|
@@ -7,6 +7,7 @@
|
|
|
#include <linux/string.h>
|
|
|
#include <asm/scatterlist.h>
|
|
|
#include <asm/io.h>
|
|
|
+#include <asm/x86_init.h>
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
|
@@ -94,8 +95,36 @@ static inline void early_quirks(void) { }
|
|
|
|
|
|
extern void pci_iommu_alloc(void);
|
|
|
|
|
|
-/* MSI arch hook */
|
|
|
-#define arch_setup_msi_irqs arch_setup_msi_irqs
|
|
|
+#ifdef CONFIG_PCI_MSI
|
|
|
+/* MSI arch specific hooks */
|
|
|
+static inline int x86_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
|
|
|
+{
|
|
|
+ return x86_msi.setup_msi_irqs(dev, nvec, type);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void x86_teardown_msi_irqs(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ x86_msi.teardown_msi_irqs(dev);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void x86_teardown_msi_irq(unsigned int irq)
|
|
|
+{
|
|
|
+ x86_msi.teardown_msi_irq(irq);
|
|
|
+}
|
|
|
+#define arch_setup_msi_irqs x86_setup_msi_irqs
|
|
|
+#define arch_teardown_msi_irqs x86_teardown_msi_irqs
|
|
|
+#define arch_teardown_msi_irq x86_teardown_msi_irq
|
|
|
+/* implemented in arch/x86/kernel/apic/io_apic. */
|
|
|
+int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
|
|
|
+void native_teardown_msi_irq(unsigned int irq);
|
|
|
+/* default to the implementation in drivers/lib/msi.c */
|
|
|
+#define HAVE_DEFAULT_MSI_TEARDOWN_IRQS
|
|
|
+void default_teardown_msi_irqs(struct pci_dev *dev);
|
|
|
+#else
|
|
|
+#define native_setup_msi_irqs NULL
|
|
|
+#define native_teardown_msi_irq NULL
|
|
|
+#define default_teardown_msi_irqs NULL
|
|
|
+#endif
|
|
|
|
|
|
#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
|
|
|
|