diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2011-01-06 18:55:09 -0500 |
---|---|---|
committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2011-01-14 11:55:41 -0500 |
commit | 415e12b2379239973feab91850b0dce985c6058a (patch) | |
tree | aa79c7a87fd30ac13ae3fd146aad5a44e854c4bc /include | |
parent | 6e8af08dfa40b747002207d3ce8e8b43a050d99f (diff) |
PCI/ACPI: Request _OSC control once for each root bridge (v3)
Move the evaluation of acpi_pci_osc_control_set() (to request control of
PCI Express native features) into acpi_pci_root_add() to avoid calling
it many times for the same root complex with the same arguments.
Additionally, check if all of the requisite _OSC support bits are set
before calling acpi_pci_osc_control_set() for a given root complex.
References: https://bugzilla.kernel.org/show_bug.cgi?id=20232
Reported-by: Ozan Caglayan <ozan@pardus.org.tr>
Tested-by: Ozan Caglayan <ozan@pardus.org.tr>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/acpi/apei.h | 6 | ||||
-rw-r--r-- | include/linux/pci-acpi.h | 6 | ||||
-rw-r--r-- | include/linux/pci.h | 11 |
3 files changed, 23 insertions, 0 deletions
diff --git a/include/acpi/apei.h b/include/acpi/apei.h index b3365025ff8d..c4dbb132d902 100644 --- a/include/acpi/apei.h +++ b/include/acpi/apei.h | |||
@@ -19,6 +19,12 @@ | |||
19 | extern int hest_disable; | 19 | extern int hest_disable; |
20 | extern int erst_disable; | 20 | extern int erst_disable; |
21 | 21 | ||
22 | #ifdef CONFIG_ACPI_APEI | ||
23 | void __init acpi_hest_init(void); | ||
24 | #else | ||
25 | static inline void acpi_hest_init(void) { return; } | ||
26 | #endif | ||
27 | |||
22 | typedef int (*apei_hest_func_t)(struct acpi_hest_header *hest_hdr, void *data); | 28 | typedef int (*apei_hest_func_t)(struct acpi_hest_header *hest_hdr, void *data); |
23 | int apei_hest_parse(apei_hest_func_t func, void *data); | 29 | int apei_hest_parse(apei_hest_func_t func, void *data); |
24 | 30 | ||
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index c8b6473c5f42..479d9bb88e11 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h | |||
@@ -40,4 +40,10 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) | |||
40 | { return NULL; } | 40 | { return NULL; } |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | #ifdef CONFIG_ACPI_APEI | ||
44 | extern bool aer_acpi_firmware_first(void); | ||
45 | #else | ||
46 | static inline bool aer_acpi_firmware_first(void) { return false; } | ||
47 | #endif | ||
48 | |||
43 | #endif /* _PCI_ACPI_H_ */ | 49 | #endif /* _PCI_ACPI_H_ */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 63cbadce337e..12dd86a82a15 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -994,6 +994,9 @@ extern void pci_restore_msi_state(struct pci_dev *dev); | |||
994 | extern int pci_msi_enabled(void); | 994 | extern int pci_msi_enabled(void); |
995 | #endif | 995 | #endif |
996 | 996 | ||
997 | extern bool pcie_ports_disabled; | ||
998 | extern bool pcie_ports_auto; | ||
999 | |||
997 | #ifndef CONFIG_PCIEASPM | 1000 | #ifndef CONFIG_PCIEASPM |
998 | static inline int pcie_aspm_enabled(void) | 1001 | static inline int pcie_aspm_enabled(void) |
999 | { | 1002 | { |
@@ -1003,6 +1006,14 @@ static inline int pcie_aspm_enabled(void) | |||
1003 | extern int pcie_aspm_enabled(void); | 1006 | extern int pcie_aspm_enabled(void); |
1004 | #endif | 1007 | #endif |
1005 | 1008 | ||
1009 | #ifdef CONFIG_PCIEAER | ||
1010 | void pci_no_aer(void); | ||
1011 | bool pci_aer_available(void); | ||
1012 | #else | ||
1013 | static inline void pci_no_aer(void) { } | ||
1014 | static inline bool pci_aer_available(void) { return false; } | ||
1015 | #endif | ||
1016 | |||
1006 | #ifndef CONFIG_PCIE_ECRC | 1017 | #ifndef CONFIG_PCIE_ECRC |
1007 | static inline void pcie_set_ecrc_checking(struct pci_dev *dev) | 1018 | static inline void pcie_set_ecrc_checking(struct pci_dev *dev) |
1008 | { | 1019 | { |