diff options
| -rw-r--r-- | Documentation/kernel-parameters.txt | 3 | ||||
| -rw-r--r-- | drivers/acpi/osl.c | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 8fd5aa40585f..ef2316a1a731 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -175,6 +175,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
| 175 | 175 | ||
| 176 | acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT | 176 | acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT |
| 177 | 177 | ||
| 178 | acpi_no_initrd_override [KNL,ACPI] | ||
| 179 | Disable loading custom ACPI tables from the initramfs | ||
| 180 | |||
| 178 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS | 181 | acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS |
| 179 | Format: To spoof as Windows 98: ="Microsoft Windows" | 182 | Format: To spoof as Windows 98: ="Microsoft Windows" |
| 180 | 183 | ||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index bbd8360bfb23..2b41bdddbeb6 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
| @@ -77,6 +77,10 @@ static struct workqueue_struct *kacpi_notify_wq; | |||
| 77 | #define OSI_STRING_LENGTH_MAX 64 /* arbitrary */ | 77 | #define OSI_STRING_LENGTH_MAX 64 /* arbitrary */ |
| 78 | static char osi_additional_string[OSI_STRING_LENGTH_MAX]; | 78 | static char osi_additional_string[OSI_STRING_LENGTH_MAX]; |
| 79 | 79 | ||
| 80 | #ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD | ||
| 81 | static int acpi_no_initrd_override; | ||
| 82 | #endif | ||
| 83 | |||
| 80 | /* | 84 | /* |
| 81 | * "Ode to _OSI(Linux)" | 85 | * "Ode to _OSI(Linux)" |
| 82 | * | 86 | * |
| @@ -386,7 +390,8 @@ acpi_os_table_override(struct acpi_table_header * existing_table, | |||
| 386 | *new_table = (struct acpi_table_header *)AmlCode; | 390 | *new_table = (struct acpi_table_header *)AmlCode; |
| 387 | #endif | 391 | #endif |
| 388 | #ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD | 392 | #ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD |
| 389 | if (strncmp(existing_table->signature, "DSDT", 4) == 0) { | 393 | if ((strncmp(existing_table->signature, "DSDT", 4) == 0) && |
| 394 | !acpi_no_initrd_override) { | ||
| 390 | struct acpi_table_header *initrd_table = acpi_find_dsdt_initrd(); | 395 | struct acpi_table_header *initrd_table = acpi_find_dsdt_initrd(); |
| 391 | if (initrd_table) | 396 | if (initrd_table) |
| 392 | *new_table = initrd_table; | 397 | *new_table = initrd_table; |
| @@ -402,6 +407,15 @@ acpi_os_table_override(struct acpi_table_header * existing_table, | |||
| 402 | return AE_OK; | 407 | return AE_OK; |
| 403 | } | 408 | } |
| 404 | 409 | ||
| 410 | #ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD | ||
| 411 | int __init acpi_no_initrd_override_setup(char *s) | ||
| 412 | { | ||
| 413 | acpi_no_initrd_override = 1; | ||
| 414 | return 1; | ||
| 415 | } | ||
| 416 | __setup("acpi_no_initrd_override", acpi_no_initrd_override_setup); | ||
| 417 | #endif | ||
| 418 | |||
| 405 | static irqreturn_t acpi_irq(int irq, void *dev_id) | 419 | static irqreturn_t acpi_irq(int irq, void *dev_id) |
| 406 | { | 420 | { |
| 407 | return (*acpi_irq_handler) (acpi_irq_context) ? IRQ_HANDLED : IRQ_NONE; | 421 | return (*acpi_irq_handler) (acpi_irq_context) ? IRQ_HANDLED : IRQ_NONE; |
