diff options
| author | Len Brown <len.brown@intel.com> | 2007-07-26 00:50:06 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2007-07-26 00:50:06 -0400 |
| commit | 67effe8fff32f60bdf51cba484766ba6003005bb (patch) | |
| tree | 8f8bf5ea5d7ddd1679c8a7d46c7219770d7cdaf8 | |
| parent | e4903fb59590f86190280a549420f6cb85bd7f7e (diff) | |
ACPI: add "acpi_no_auto_ssdt" bootparam
"acpi_no_auto_ssdt" prevents Linux from automatically loading
all the SSDTs listed in the RSDT/XSDT.
This is needed for debugging. In particular,
it allows a DSDT override to optionally be a DSDT+SSDT override.
http://bugzilla.kernel.org/show_bug.cgi?id=3774
Signed-off-by: Len Brown <len.brown@intel.com>
| -rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
| -rw-r--r-- | drivers/acpi/tables/tbxface.c | 23 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index fb80e9ffea68..379931e74334 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -166,6 +166,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 166 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA | 166 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA |
| 167 | Format: <irq>,<irq>... | 167 | Format: <irq>,<irq>... |
| 168 | 168 | ||
| 169 | acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT | ||
| 170 | |||
| 169 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS | 171 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS |
| 170 | Format: To spoof as Windows 98: ="Microsoft Windows" | 172 | Format: To spoof as Windows 98: ="Microsoft Windows" |
| 171 | 173 | ||
diff --git a/drivers/acpi/tables/tbxface.c b/drivers/acpi/tables/tbxface.c index 5b302c4e293f..a9e3331fee5d 100644 --- a/drivers/acpi/tables/tbxface.c +++ b/drivers/acpi/tables/tbxface.c | |||
| @@ -52,6 +52,8 @@ ACPI_MODULE_NAME("tbxface") | |||
| 52 | /* Local prototypes */ | 52 | /* Local prototypes */ |
| 53 | static acpi_status acpi_tb_load_namespace(void); | 53 | static acpi_status acpi_tb_load_namespace(void); |
| 54 | 54 | ||
| 55 | static int no_auto_ssdt; | ||
| 56 | |||
| 55 | /******************************************************************************* | 57 | /******************************************************************************* |
| 56 | * | 58 | * |
| 57 | * FUNCTION: acpi_allocate_root_table | 59 | * FUNCTION: acpi_allocate_root_table |
| @@ -536,6 +538,10 @@ static acpi_status acpi_tb_load_namespace(void) | |||
| 536 | 538 | ||
| 537 | ACPI_INFO((AE_INFO, "Table DSDT replaced by host OS")); | 539 | ACPI_INFO((AE_INFO, "Table DSDT replaced by host OS")); |
| 538 | acpi_tb_print_table_header(0, table); | 540 | acpi_tb_print_table_header(0, table); |
| 541 | |||
| 542 | if (no_auto_ssdt == 0) { | ||
| 543 | printk(KERN_WARNING "ACPI: DSDT override uses original SSDTs unless \"acpi_no_auto_ssdt\""); | ||
| 544 | } | ||
| 539 | } | 545 | } |
| 540 | 546 | ||
| 541 | status = | 547 | status = |
| @@ -577,6 +583,11 @@ static acpi_status acpi_tb_load_namespace(void) | |||
| 577 | continue; | 583 | continue; |
| 578 | } | 584 | } |
| 579 | 585 | ||
| 586 | if (no_auto_ssdt) { | ||
| 587 | printk(KERN_WARNING "ACPI: SSDT ignored due to \"acpi_no_auto_ssdt\"\n"); | ||
| 588 | continue; | ||
| 589 | } | ||
| 590 | |||
| 580 | /* Ignore errors while loading tables, get as many as possible */ | 591 | /* Ignore errors while loading tables, get as many as possible */ |
| 581 | 592 | ||
| 582 | (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); | 593 | (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); |
| @@ -622,3 +633,15 @@ acpi_status acpi_load_tables(void) | |||
| 622 | } | 633 | } |
| 623 | 634 | ||
| 624 | ACPI_EXPORT_SYMBOL(acpi_load_tables) | 635 | ACPI_EXPORT_SYMBOL(acpi_load_tables) |
| 636 | |||
| 637 | |||
| 638 | static int __init acpi_no_auto_ssdt_setup(char *s) { | ||
| 639 | |||
| 640 | printk(KERN_NOTICE "ACPI: SSDT auto-load disabled\n"); | ||
| 641 | |||
| 642 | no_auto_ssdt = 1; | ||
| 643 | |||
| 644 | return 1; | ||
| 645 | } | ||
| 646 | |||
| 647 | __setup("acpi_no_auto_ssdt", acpi_no_auto_ssdt_setup); | ||
