ACPI/PCI: Negotiate _OSC control bits before requesting them
authorRafael J. Wysocki <rjw@sisk.pl>
Mon, 23 Aug 2010 21:53:11 +0000 (23:53 +0200)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Tue, 24 Aug 2010 20:44:40 +0000 (13:44 -0700)
commit75fb60f26befb59dbfa05cb122972642b7bdd219
treebe015dd00e7748e45f3691f04a16c204546b3026
parent2b8fd9186d9275b07aef43e5bb4e98cd571f9a7d
ACPI/PCI: Negotiate _OSC control bits before requesting them

It is possible that the BIOS will not grant control of all _OSC
features requested via acpi_pci_osc_control_set(), so it is
recommended to negotiate the final set of _OSC features with the
query flag set before calling _OSC to request control of these
features.

To implement it, rework acpi_pci_osc_control_set() so that the caller
can specify the mask of _OSC control bits to negotiate and the mask
of _OSC control bits that are absolutely necessary to it.  Then,
acpi_pci_osc_control_set() will run _OSC queries in a loop until
the mask of _OSC control bits returned by the BIOS is equal to the
mask passed to it.  Also, before running the _OSC request
acpi_pci_osc_control_set() will check if the caller's required
control bits are present in the final mask.

Using this mechanism we will be able to avoid situations in which the
BIOS doesn't grant control of certain _OSC features, because they
depend on some other _OSC features that have not been requested.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/acpi/pci_root.c
drivers/pci/hotplug/acpi_pcihp.c
drivers/pci/pcie/aer/aerdrv_acpi.c
drivers/pci/pcie/pme/pcie_pme_acpi.c
include/linux/acpi.h