]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
1 | From 07ae95f988a34465bdcb384bfa73c03424fe2312 Mon Sep 17 00:00:00 2001 |
2 | From: Andrew Patterson <andrew.patterson@hp.com> | |
3 | Date: Mon, 10 Nov 2008 15:31:05 -0700 | |
4 | Subject: ACPI/PCI: PCI MSI _OSC support capabilities called when root bridge added | |
5 | Patch-mainline: 2.6.29 | |
6 | References: bnc#438941 | |
7 | ||
8 | The _OSC capability OSC_MSI_SUPPORT is set when the root bridge is added | |
9 | with pci_acpi_osc_support(), so we no longer need to do it in the PCI | |
10 | MSI driver. Also adds the function pci_msi_enabled, which returns true | |
11 | if pci=nomsi is not on the kernel command-line. | |
12 | ||
13 | Signed-off-by: Andrew Patterson <andrew.patterson@hp.com> | |
14 | Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | |
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
16 | ||
17 | --- | |
18 | drivers/acpi/pci_root.c | 2 ++ | |
19 | drivers/pci/msi.c | 11 +++++++++++ | |
20 | include/linux/pci.h | 7 +++++++ | |
21 | 3 files changed, 20 insertions(+) | |
22 | ||
23 | --- a/drivers/acpi/pci_root.c | |
24 | +++ b/drivers/acpi/pci_root.c | |
25 | @@ -350,6 +350,8 @@ static int __devinit acpi_pci_root_add(s | |
26 | if (pcie_aspm_enabled()) | |
27 | flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | | |
28 | OSC_CLOCK_PWR_CAPABILITY_SUPPORT; | |
29 | + if (pci_msi_enabled()) | |
30 | + flags |= OSC_MSI_SUPPORT; | |
31 | if (flags != base_flags) | |
32 | pci_acpi_osc_support(device->handle, flags); | |
33 | ||
34 | --- a/drivers/pci/msi.c | |
35 | +++ b/drivers/pci/msi.c | |
36 | @@ -757,6 +757,17 @@ void pci_no_msi(void) | |
37 | pci_msi_enable = 0; | |
38 | } | |
39 | ||
40 | +/** | |
41 | + * pci_msi_enabled - is MSI enabled? | |
42 | + * | |
43 | + * Returns true if MSI has not been disabled by the command-line option | |
44 | + * pci=nomsi. | |
45 | + **/ | |
46 | +int pci_msi_enabled(void) | |
47 | +{ | |
48 | + return pci_msi_enable; | |
49 | +} | |
50 | + | |
51 | void pci_msi_init_pci_dev(struct pci_dev *dev) | |
52 | { | |
53 | INIT_LIST_HEAD(&dev->msi_list); | |
54 | --- a/include/linux/pci.h | |
55 | +++ b/include/linux/pci.h | |
56 | @@ -767,6 +767,11 @@ static inline void msi_remove_pci_irq_ve | |
57 | ||
58 | static inline void pci_restore_msi_state(struct pci_dev *dev) | |
59 | { } | |
60 | + | |
61 | +static inline int pci_msi_enabled(void) | |
62 | +{ | |
63 | + return 0; | |
64 | +} | |
65 | #else | |
66 | extern int pci_enable_msi(struct pci_dev *dev); | |
67 | extern void pci_msi_shutdown(struct pci_dev *dev); | |
68 | @@ -777,6 +782,8 @@ extern void pci_msix_shutdown(struct pci | |
69 | extern void pci_disable_msix(struct pci_dev *dev); | |
70 | extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); | |
71 | extern void pci_restore_msi_state(struct pci_dev *dev); | |
72 | +extern int pci_msi_enabled(void); | |
73 | + | |
74 | #endif | |
75 | ||
76 | #ifndef CONFIG_PCIEASPM |