On Thu, 2006-05-11 at 07:08 +0800, Bjorn Helgaas wrote: > pci_set_power_state() is a per-PCI-function interface, just like > most of the other PCI interfaces. On ACPI systems, it ultimately > calls acpi_bus_set_power(), which evaluates the _PSx method of the > ACPI function object. > > This: > http://www.microsoft.com/whdc/system/pnppwr/hotadd/hotplugpci.mspx > suggests that a system that supports ACPI hotplug and power control > should supply an ACPI device for each PCI function that might exist > in the slot. The _PSx methods exist under one or more of these > devices > (the document above suggests that it's under each device; the HP > systems > I've seen have _PSx only under the device for function 0). > > In any case, the _PSx methods control power to the whole *slot*, not > just a single function. The result is that calling > pci_set_power_state() > on one PCI function turns off power to the entire slot, even though > there > may be other independent functions that shouldn't be turned off. > > Do we need to be smarter in acpi_pci_set_power_state(), and collect > up all the PCI per-function power requests, and only pass those > down to acpi_bus_set_power() when all the functions agree? > > Other than the Microsoft document above, I haven't seen a good spec > that clarifies this issue. The purpose of the callback is to allow architecture handle specific power management staff. But I didn't realize the _PSx method is for the whole slot. I checked some DSDT, you might be right. If this really breaks a system, please fix it. Thanks, Shaohua - To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html