summaryrefslogtreecommitdiffstats
path: root/drivers/pci/hotplug
diff options
context:
space:
mode:
authorrajesh.shah@intel.com <rajesh.shah@intel.com>2005-10-31 16:20:11 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2005-11-10 16:09:15 -0800
commit427bf532b5ad6db5addc2bce675d13f874397c0c (patch)
tree3a099b05ab3b1252d6e441855d9b1da02e0daf8c /drivers/pci/hotplug
parent1a9ed1bfe2fb17cc30227a12a3c1212128bb78b6 (diff)
[PATCH] pciehp: request control of each hotplug controller individually
This patch tweaks the way pciehp requests control of the hotplug hardware from BIOS. It now tries to invoke the ACPI _OSC method for a specific hotplug controller only, rather than walking the entire acpi namespace invoking all possible _OSC methods under all host bridges. This allows us to gain control of each hotplug controller individually, even if BIOS fails to give us control of some other hotplug controller in the system. Signed-off-by: Rajesh Shah <rajesh.shah@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci/hotplug')
-rw-r--r--drivers/pci/hotplug/pciehprm_acpi.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/pci/hotplug/pciehprm_acpi.c b/drivers/pci/hotplug/pciehprm_acpi.c
index 5d184582331..5acdae3d52b 100644
--- a/drivers/pci/hotplug/pciehprm_acpi.c
+++ b/drivers/pci/hotplug/pciehprm_acpi.c
@@ -143,12 +143,13 @@ static acpi_status acpi_run_oshp(acpi_handle handle)
int get_hp_hw_control_from_firmware(struct pci_dev *dev)
{
acpi_status status;
+ acpi_handle handle = DEVICE_ACPI_HANDLE(&(dev->dev));
/*
* Per PCI firmware specification, we should run the ACPI _OSC
* method to get control of hotplug hardware before using it
*/
- /* Fixme: run _OSC for a specific host bridge, not all of them */
- status = pci_osc_control_set(OSC_PCI_EXPRESS_NATIVE_HP_CONTROL);
+ status = pci_osc_control_set(handle,
+ OSC_PCI_EXPRESS_NATIVE_HP_CONTROL);
/* Fixme: fail native hotplug if _OSC does not exist for root ports */
if (status == AE_NOT_FOUND) {
@@ -156,9 +157,7 @@ int get_hp_hw_control_from_firmware(struct pci_dev *dev)
* Some older BIOS's don't support _OSC but support
* OSHP to do the same thing
*/
- acpi_handle handle = DEVICE_ACPI_HANDLE(&(dev->dev));
- if (handle)
- status = acpi_run_oshp(handle);
+ status = acpi_run_oshp(handle);
}
if (ACPI_FAILURE(status)) {
err("Cannot get control of hotplug hardware\n");