aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt3
-rw-r--r--drivers/acpi/osl.c16
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 */
78static char osi_additional_string[OSI_STRING_LENGTH_MAX]; 78static char osi_additional_string[OSI_STRING_LENGTH_MAX];
79 79
80#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
81static 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
411int __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
405static irqreturn_t acpi_irq(int irq, void *dev_id) 419static 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;