===================================================================
@@ -24,6 +24,7 @@
#include "msi.h"
static int pci_msi_enable = 1;
+static bool msi_support_enabled = true;
/* Arch hooks */
@@ -855,6 +856,17 @@ void pci_no_msi(void)
pci_msi_enable = 0;
}
+void pci_no_msi_support(void)
+{
+ msi_support_enabled = false;
+ pci_no_msi();
+}
+
+bool pci_msi_support_enabled(void)
+{
+ return msi_support_enabled;
+}
+
/**
* pci_msi_enabled - is MSI enabled?
*
===================================================================
@@ -3062,7 +3062,7 @@ static int __init pci_setup(char *str)
*k++ = 0;
if (*str && (str = pcibios_setup(str)) && *str) {
if (!strcmp(str, "nomsi")) {
- pci_no_msi();
+ pci_no_msi_support();
} else if (!strcmp(str, "noaer")) {
pci_no_aer();
} else if (!strcmp(str, "nodomains")) {
===================================================================
@@ -446,11 +446,14 @@ static inline bool pci_is_root_bus(struc
}
#ifdef CONFIG_PCI_MSI
+extern bool pci_msi_support_enabled(void);
+
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
{
return pci_dev->msi_enabled || pci_dev->msix_enabled;
}
#else
+static inline bool pci_msi_support_enabled(void) { return false; }
static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
#endif
===================================================================
@@ -567,7 +567,7 @@ static int __devinit acpi_pci_root_add(s
if (pcie_aspm_support_enabled())
flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
- if (pci_msi_enabled())
+ if (pci_msi_support_enabled())
flags |= OSC_MSI_SUPPORT;
if (flags != base_flags)
acpi_pci_osc_support(root, flags);
===================================================================
@@ -140,9 +140,11 @@ extern unsigned int pci_pm_d3_delay;
#ifdef CONFIG_PCI_MSI
void pci_no_msi(void);
+extern void pci_no_msi_support(void);
extern void pci_msi_init_pci_dev(struct pci_dev *dev);
#else
static inline void pci_no_msi(void) { }
+static inline void pci_no_msi_support(void) { }
static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
#endif