diff options
author | Shaohua Li <shaohua.li@intel.com> | 2009-10-28 23:05:05 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-12-16 14:05:34 -0500 |
commit | 3563ff964fdc36358cef0330936fdac28e65142a (patch) | |
tree | 5815c93ce3c6adc57f9b8c73113ee77605a1b0ef /drivers/acpi/bus.c | |
parent | 3a9622dc4659af44a8098a233f65c51e495ff0a5 (diff) |
ACPI: Add platform-wide _OSC support.
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/bus.c')
-rw-r--r-- | drivers/acpi/bus.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 12240be58f27..65f7e335f122 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -466,6 +466,30 @@ out_kfree: | |||
466 | } | 466 | } |
467 | EXPORT_SYMBOL(acpi_run_osc); | 467 | EXPORT_SYMBOL(acpi_run_osc); |
468 | 468 | ||
469 | static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48"; | ||
470 | static void acpi_bus_osc_support(void) | ||
471 | { | ||
472 | u32 capbuf[2]; | ||
473 | struct acpi_osc_context context = { | ||
474 | .uuid_str = sb_uuid_str, | ||
475 | .rev = 1, | ||
476 | .cap.length = 8, | ||
477 | .cap.pointer = capbuf, | ||
478 | }; | ||
479 | acpi_handle handle; | ||
480 | |||
481 | capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE; | ||
482 | capbuf[OSC_SUPPORT_TYPE] = OSC_SB_PR3_SUPPORT; /* _PR3 is in use */ | ||
483 | #ifdef CONFIG_ACPI_PROCESSOR_AGGREGATOR | ||
484 | capbuf[OSC_SUPPORT_TYPE] |= OSC_SB_PAD_SUPPORT; | ||
485 | #endif | ||
486 | if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle))) | ||
487 | return; | ||
488 | if (ACPI_SUCCESS(acpi_run_osc(handle, &context))) | ||
489 | kfree(context.ret.pointer); | ||
490 | /* do we need to check the returned cap? Sounds no */ | ||
491 | } | ||
492 | |||
469 | /* -------------------------------------------------------------------------- | 493 | /* -------------------------------------------------------------------------- |
470 | Event Management | 494 | Event Management |
471 | -------------------------------------------------------------------------- */ | 495 | -------------------------------------------------------------------------- */ |
@@ -856,6 +880,8 @@ static int __init acpi_bus_init(void) | |||
856 | status = acpi_ec_ecdt_probe(); | 880 | status = acpi_ec_ecdt_probe(); |
857 | /* Ignore result. Not having an ECDT is not fatal. */ | 881 | /* Ignore result. Not having an ECDT is not fatal. */ |
858 | 882 | ||
883 | acpi_bus_osc_support(); | ||
884 | |||
859 | status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION); | 885 | status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION); |
860 | if (ACPI_FAILURE(status)) { | 886 | if (ACPI_FAILURE(status)) { |
861 | printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n"); | 887 | printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n"); |