diff options
Diffstat (limited to 'arch/i386/kernel/acpi/boot.c')
-rw-r--r-- | arch/i386/kernel/acpi/boot.c | 76 |
1 files changed, 74 insertions, 2 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index ee003bc0e8b1..87e2ab50b694 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -36,6 +36,8 @@ | |||
36 | #include <asm/io.h> | 36 | #include <asm/io.h> |
37 | #include <asm/mpspec.h> | 37 | #include <asm/mpspec.h> |
38 | 38 | ||
39 | int __initdata acpi_force = 0; | ||
40 | |||
39 | #ifdef CONFIG_X86_64 | 41 | #ifdef CONFIG_X86_64 |
40 | 42 | ||
41 | extern void __init clustered_apic_check(void); | 43 | extern void __init clustered_apic_check(void); |
@@ -860,8 +862,6 @@ static void __init acpi_process_madt(void) | |||
860 | return; | 862 | return; |
861 | } | 863 | } |
862 | 864 | ||
863 | extern int acpi_force; | ||
864 | |||
865 | #ifdef __i386__ | 865 | #ifdef __i386__ |
866 | 866 | ||
867 | static int __init disable_acpi_irq(struct dmi_system_id *d) | 867 | static int __init disable_acpi_irq(struct dmi_system_id *d) |
@@ -1163,3 +1163,75 @@ int __init acpi_boot_init(void) | |||
1163 | 1163 | ||
1164 | return 0; | 1164 | return 0; |
1165 | } | 1165 | } |
1166 | |||
1167 | static int __init parse_acpi(char *arg) | ||
1168 | { | ||
1169 | if (!arg) | ||
1170 | return -EINVAL; | ||
1171 | |||
1172 | /* "acpi=off" disables both ACPI table parsing and interpreter */ | ||
1173 | if (strcmp(arg, "off") == 0) { | ||
1174 | disable_acpi(); | ||
1175 | } | ||
1176 | /* acpi=force to over-ride black-list */ | ||
1177 | else if (strcmp(arg, "force") == 0) { | ||
1178 | acpi_force = 1; | ||
1179 | acpi_ht = 1; | ||
1180 | acpi_disabled = 0; | ||
1181 | } | ||
1182 | /* acpi=strict disables out-of-spec workarounds */ | ||
1183 | else if (strcmp(arg, "strict") == 0) { | ||
1184 | acpi_strict = 1; | ||
1185 | } | ||
1186 | /* Limit ACPI just to boot-time to enable HT */ | ||
1187 | else if (strcmp(arg, "ht") == 0) { | ||
1188 | if (!acpi_force) | ||
1189 | disable_acpi(); | ||
1190 | acpi_ht = 1; | ||
1191 | } | ||
1192 | /* "acpi=noirq" disables ACPI interrupt routing */ | ||
1193 | else if (strcmp(arg, "noirq") == 0) { | ||
1194 | acpi_noirq_set(); | ||
1195 | } else { | ||
1196 | /* Core will printk when we return error. */ | ||
1197 | return -EINVAL; | ||
1198 | } | ||
1199 | return 0; | ||
1200 | } | ||
1201 | early_param("acpi", parse_acpi); | ||
1202 | |||
1203 | /* FIXME: Using pci= for an ACPI parameter is a travesty. */ | ||
1204 | static int __init parse_pci(char *arg) | ||
1205 | { | ||
1206 | if (arg && strcmp(arg, "noacpi") == 0) | ||
1207 | acpi_disable_pci(); | ||
1208 | return 0; | ||
1209 | } | ||
1210 | early_param("pci", parse_pci); | ||
1211 | |||
1212 | #ifdef CONFIG_X86_IO_APIC | ||
1213 | static int __init parse_acpi_skip_timer_override(char *arg) | ||
1214 | { | ||
1215 | acpi_skip_timer_override = 1; | ||
1216 | return 0; | ||
1217 | } | ||
1218 | early_param("acpi_skip_timer_override", parse_acpi_skip_timer_override); | ||
1219 | #endif /* CONFIG_X86_IO_APIC */ | ||
1220 | |||
1221 | static int __init setup_acpi_sci(char *s) | ||
1222 | { | ||
1223 | if (!s) | ||
1224 | return -EINVAL; | ||
1225 | if (!strcmp(s, "edge")) | ||
1226 | acpi_sci_flags.trigger = 1; | ||
1227 | else if (!strcmp(s, "level")) | ||
1228 | acpi_sci_flags.trigger = 3; | ||
1229 | else if (!strcmp(s, "high")) | ||
1230 | acpi_sci_flags.polarity = 1; | ||
1231 | else if (!strcmp(s, "low")) | ||
1232 | acpi_sci_flags.polarity = 3; | ||
1233 | else | ||
1234 | return -EINVAL; | ||
1235 | return 0; | ||
1236 | } | ||
1237 | early_param("acpi_sci", setup_acpi_sci); | ||