(2010/08/03 6:53), Rafael J. Wysocki wrote:
From: Rafael J. Wysocki<rjw@xxxxxxx> Introduce a function allowing the caller to obtain a mask of _OSC control bits the BIOS will allow the kernel to control for a given PCI root bridge. Signed-off-by: Rafael J. Wysocki<rjw@xxxxxxx> --- drivers/acpi/pci_root.c | 58 ++++++++++++++++++++++++++++++++++++++++-------- include/linux/acpi.h | 1 2 files changed, 50 insertions(+), 9 deletions(-) Index: linux-2.6/drivers/acpi/pci_root.c =================================================================== --- linux-2.6.orig/drivers/acpi/pci_root.c +++ linux-2.6/drivers/acpi/pci_root.c @@ -225,21 +225,32 @@ static acpi_status acpi_pci_run_osc(acpi return status; } -static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root, u32 flags) +static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root, + u32 support, + u32 *control) { acpi_status status; - u32 support_set, result, capbuf[3]; + u32 result, capbuf[3]; + + support&= OSC_PCI_SUPPORT_MASKS; + support |= root->osc_support_set; - /* do _OSC query for all possible controls */ - support_set = root->osc_support_set | (flags& OSC_PCI_SUPPORT_MASKS); capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE; - capbuf[OSC_SUPPORT_TYPE] = support_set; - capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS; + capbuf[OSC_SUPPORT_TYPE] = support; + if (control) { + *control&= OSC_PCI_CONTROL_MASKS; + capbuf[OSC_CONTROL_TYPE] = *control;
I think controls that are already granted to OS need to be ORed here. I.e. capbuf[OSC_CONTROL_TYPE] = root->osc_control_set | *control; Thanks, Kenji Kaneshige -- 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