diff options
-rw-r--r-- | drivers/acpi/pci_root.c | 2 | ||||
-rw-r--r-- | drivers/pci/pci-acpi.c | 14 | ||||
-rw-r--r-- | include/acpi/acnames.h | 1 | ||||
-rw-r--r-- | include/acpi/acpi_bus.h | 1 | ||||
-rw-r--r-- | include/linux/pci-acpi.h | 1 |
5 files changed, 19 insertions, 0 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index 7aff6312ce7c..ec54014c321c 100644 --- a/drivers/acpi/pci_root.c +++ b/drivers/acpi/pci_root.c | |||
@@ -505,6 +505,8 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) | |||
505 | strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); | 505 | strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); |
506 | device->driver_data = root; | 506 | device->driver_data = root; |
507 | 507 | ||
508 | root->mcfg_addr = acpi_pci_root_get_mcfg_addr(device->handle); | ||
509 | |||
508 | /* | 510 | /* |
509 | * All supported architectures that use ACPI have support for | 511 | * All supported architectures that use ACPI have support for |
510 | * PCI domains, so we indicate this in _OSC support capabilities. | 512 | * PCI domains, so we indicate this in _OSC support capabilities. |
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index 61e2fefeedab..87f4c504eafb 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c | |||
@@ -162,6 +162,20 @@ acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev) | |||
162 | return remove_pm_notifier(dev, pci_acpi_wake_dev); | 162 | return remove_pm_notifier(dev, pci_acpi_wake_dev); |
163 | } | 163 | } |
164 | 164 | ||
165 | phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle) | ||
166 | { | ||
167 | acpi_status status = AE_NOT_EXIST; | ||
168 | unsigned long long mcfg_addr; | ||
169 | |||
170 | if (handle) | ||
171 | status = acpi_evaluate_integer(handle, METHOD_NAME__CBA, | ||
172 | NULL, &mcfg_addr); | ||
173 | if (ACPI_FAILURE(status)) | ||
174 | return 0; | ||
175 | |||
176 | return (phys_addr_t)mcfg_addr; | ||
177 | } | ||
178 | |||
165 | /* | 179 | /* |
166 | * _SxD returns the D-state with the highest power | 180 | * _SxD returns the D-state with the highest power |
167 | * (lowest D-state number) supported in the S-state "x". | 181 | * (lowest D-state number) supported in the S-state "x". |
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h index 38f508816e4a..b177f97f53b6 100644 --- a/include/acpi/acnames.h +++ b/include/acpi/acnames.h | |||
@@ -62,6 +62,7 @@ | |||
62 | #define METHOD_NAME__AEI "_AEI" | 62 | #define METHOD_NAME__AEI "_AEI" |
63 | #define METHOD_NAME__PRW "_PRW" | 63 | #define METHOD_NAME__PRW "_PRW" |
64 | #define METHOD_NAME__SRS "_SRS" | 64 | #define METHOD_NAME__SRS "_SRS" |
65 | #define METHOD_NAME__CBA "_CBA" | ||
65 | 66 | ||
66 | /* Method names - these methods must appear at the namespace root */ | 67 | /* Method names - these methods must appear at the namespace root */ |
67 | 68 | ||
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 9e6e1c6eb60a..457974073994 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -401,6 +401,7 @@ struct acpi_pci_root { | |||
401 | 401 | ||
402 | u32 osc_support_set; /* _OSC state of support bits */ | 402 | u32 osc_support_set; /* _OSC state of support bits */ |
403 | u32 osc_control_set; /* _OSC state of control bits */ | 403 | u32 osc_control_set; /* _OSC state of control bits */ |
404 | phys_addr_t mcfg_addr; | ||
404 | }; | 405 | }; |
405 | 406 | ||
406 | /* helper */ | 407 | /* helper */ |
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index 44623500f419..248fba2af98a 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h | |||
@@ -17,6 +17,7 @@ extern acpi_status pci_acpi_remove_bus_pm_notifier(struct acpi_device *dev); | |||
17 | extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev, | 17 | extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev, |
18 | struct pci_dev *pci_dev); | 18 | struct pci_dev *pci_dev); |
19 | extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev); | 19 | extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev); |
20 | extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle); | ||
20 | 21 | ||
21 | static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) | 22 | static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) |
22 | { | 23 | { |