Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 28256
b: refs/heads/master
c: 7430e34
h: refs/heads/master
v: v3
  • Loading branch information
Kenji Kaneshige authored and Greg Kroah-Hartman committed Jun 19, 2006
1 parent b5446e9 commit 5fea612
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2433ee2654f0ac86f7886e5a8d01bee7f3c7c6db
refs/heads/master: 7430e34c70106a9576fc61d77604d164b187a1b7
34 changes: 24 additions & 10 deletions trunk/drivers/pci/hotplug/acpi_pcihp.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,30 +145,44 @@ EXPORT_SYMBOL_GPL(acpi_run_oshp);

/* acpi_get_hp_params_from_firmware
*
* @dev - the pci_dev of the newly added device
* @bus - the pci_bus of the bus on which the device is newly added
* @hpp - allocated by the caller
*/
acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev,
acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
struct hotplug_params *hpp)
{
acpi_status status = AE_NOT_FOUND;
struct pci_dev *pdev = dev;
acpi_handle handle, phandle;
struct pci_bus *pbus = bus;
struct pci_dev *pdev;

do {
pdev = pbus->self;
if (!pdev) {
handle = acpi_get_pci_rootbridge_handle(
pci_domain_nr(pbus), pbus->number);
break;
}
handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
pbus = pbus->parent;
} while (!handle);

/*
* _HPP settings apply to all child buses, until another _HPP is
* encountered. If we don't find an _HPP for the input pci dev,
* look for it in the parent device scope since that would apply to
* this pci dev. If we don't find any _HPP, use hardcoded defaults
*/
while (pdev && (ACPI_FAILURE(status))) {
acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
if (!handle)
break;
while (handle) {
status = acpi_run_hpp(handle, hpp);
if (!(pdev->bus->parent))
if (ACPI_SUCCESS(status))
break;
if (acpi_root_bridge(handle))
break;
status = acpi_get_parent(handle, &phandle);
if (ACPI_FAILURE(status))
break;
/* Check if a parent object supports _HPP */
pdev = pdev->bus->parent->self;
handle = phandle;
}
return status;
}
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/pci/hotplug/acpiphp_glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ static void decode_hpp(struct acpiphp_bridge *bridge)
{
acpi_status status;

status = acpi_get_hp_params_from_firmware(bridge->pci_dev, &bridge->hpp);
status = acpi_get_hp_params_from_firmware(bridge->pci_bus, &bridge->hpp);
if (ACPI_FAILURE(status)) {
/* use default numbers */
bridge->hpp.cache_line_size = 0x10;
Expand Down Expand Up @@ -1250,6 +1250,7 @@ static void acpiphp_set_hpp_values(acpi_handle handle, struct pci_bus *bus)

memset(&bridge, 0, sizeof(bridge));
bridge.handle = handle;
bridge.pci_bus = bus;
bridge.pci_dev = bus->self;
decode_hpp(&bridge);
list_for_each_entry(dev, &bus->devices, bus_list)
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/pci/hotplug/pci_hotplug.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ struct hotplug_params {
#include <acpi/acpi_bus.h>
#include <acpi/actypes.h>
extern acpi_status acpi_run_oshp(acpi_handle handle);
extern acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev,
extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
struct hotplug_params *hpp);
int acpi_root_bridge(acpi_handle handle);
#endif
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/pci/hotplug/pciehp.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ struct hpc_ops {
static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
struct hotplug_params *hpp)
{
if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp)))
if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
return -ENODEV;
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/pci/hotplug/shpchp.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ extern void queue_pushbutton_work(void *data);
static inline int get_hp_params_from_firmware(struct pci_dev *dev,
struct hotplug_params *hpp)
{
if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp)))
if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
return -ENODEV;
return 0;
}
Expand Down

0 comments on commit 5fea612

Please sign in to comment.