diff options
author | Taku Izumi <izumi.taku@jp.fujitsu.com> | 2008-10-17 00:52:51 -0400 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2008-10-22 19:42:35 -0400 |
commit | d389fec6a2aec1ea7d47833f36a0413a619c8c12 (patch) | |
tree | f2cb010b0ea9a995cf19bc7c43e59ad47fffe5e2 /drivers | |
parent | ab20440c376ff0454cb93904a888212d874fbb6b (diff) |
ACPI/PCI: Set support bit for MSI in support field of _OSC
Currently linux doesn't have any code to set the "MSI supported" bit in
Support Fireld of _OSC. This patch adds the code for that.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/msi.c | 21 | ||||
-rw-r--r-- | drivers/pci/pci.c | 3 | ||||
-rw-r--r-- | drivers/pci/pci.h | 2 |
3 files changed, 26 insertions, 0 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index d2812013fd22..74801f7df9c9 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -759,3 +759,24 @@ void pci_msi_init_pci_dev(struct pci_dev *dev) | |||
759 | { | 759 | { |
760 | INIT_LIST_HEAD(&dev->msi_list); | 760 | INIT_LIST_HEAD(&dev->msi_list); |
761 | } | 761 | } |
762 | |||
763 | #ifdef CONFIG_ACPI | ||
764 | #include <linux/acpi.h> | ||
765 | #include <linux/pci-acpi.h> | ||
766 | static void __devinit msi_acpi_init(void) | ||
767 | { | ||
768 | if (acpi_pci_disabled) | ||
769 | return; | ||
770 | pci_osc_support_set(OSC_MSI_SUPPORT); | ||
771 | pcie_osc_support_set(OSC_MSI_SUPPORT); | ||
772 | } | ||
773 | #else | ||
774 | static inline void msi_acpi_init(void) { } | ||
775 | #endif /* CONFIG_ACPI */ | ||
776 | |||
777 | void __devinit msi_init(void) | ||
778 | { | ||
779 | if (!pci_msi_enable) | ||
780 | return; | ||
781 | msi_acpi_init(); | ||
782 | } | ||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 4db261e13e69..aee73cf251b6 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1933,6 +1933,9 @@ static int __devinit pci_init(void) | |||
1933 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 1933 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { |
1934 | pci_fixup_device(pci_fixup_final, dev); | 1934 | pci_fixup_device(pci_fixup_final, dev); |
1935 | } | 1935 | } |
1936 | |||
1937 | msi_init(); | ||
1938 | |||
1936 | return 0; | 1939 | return 0; |
1937 | } | 1940 | } |
1938 | 1941 | ||
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index b205ab866a1d..9de87e9f98f5 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h | |||
@@ -98,9 +98,11 @@ extern unsigned int pci_pm_d3_delay; | |||
98 | #ifdef CONFIG_PCI_MSI | 98 | #ifdef CONFIG_PCI_MSI |
99 | void pci_no_msi(void); | 99 | void pci_no_msi(void); |
100 | extern void pci_msi_init_pci_dev(struct pci_dev *dev); | 100 | extern void pci_msi_init_pci_dev(struct pci_dev *dev); |
101 | extern void __devinit msi_init(void); | ||
101 | #else | 102 | #else |
102 | static inline void pci_no_msi(void) { } | 103 | static inline void pci_no_msi(void) { } |
103 | static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { } | 104 | static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { } |
105 | static inline void msi_init(void) { } | ||
104 | #endif | 106 | #endif |
105 | 107 | ||
106 | #ifdef CONFIG_PCIEAER | 108 | #ifdef CONFIG_PCIEAER |