diff options
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r-- | drivers/acpi/osl.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 52ca9649d76..fa32f584229 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -155,7 +155,7 @@ static u32 acpi_osi_handler(acpi_string interface, u32 supported) | |||
155 | { | 155 | { |
156 | if (!strcmp("Linux", interface)) { | 156 | if (!strcmp("Linux", interface)) { |
157 | 157 | ||
158 | printk(KERN_NOTICE FW_BUG PREFIX | 158 | printk_once(KERN_NOTICE FW_BUG PREFIX |
159 | "BIOS _OSI(Linux) query %s%s\n", | 159 | "BIOS _OSI(Linux) query %s%s\n", |
160 | osi_linux.enable ? "honored" : "ignored", | 160 | osi_linux.enable ? "honored" : "ignored", |
161 | osi_linux.cmdline ? " via cmdline" : | 161 | osi_linux.cmdline ? " via cmdline" : |
@@ -237,8 +237,23 @@ void acpi_os_vprintf(const char *fmt, va_list args) | |||
237 | #endif | 237 | #endif |
238 | } | 238 | } |
239 | 239 | ||
240 | #ifdef CONFIG_KEXEC | ||
241 | static unsigned long acpi_rsdp; | ||
242 | static int __init setup_acpi_rsdp(char *arg) | ||
243 | { | ||
244 | acpi_rsdp = simple_strtoul(arg, NULL, 16); | ||
245 | return 0; | ||
246 | } | ||
247 | early_param("acpi_rsdp", setup_acpi_rsdp); | ||
248 | #endif | ||
249 | |||
240 | acpi_physical_address __init acpi_os_get_root_pointer(void) | 250 | acpi_physical_address __init acpi_os_get_root_pointer(void) |
241 | { | 251 | { |
252 | #ifdef CONFIG_KEXEC | ||
253 | if (acpi_rsdp) | ||
254 | return acpi_rsdp; | ||
255 | #endif | ||
256 | |||
242 | if (efi_enabled) { | 257 | if (efi_enabled) { |
243 | if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) | 258 | if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) |
244 | return efi.acpi20; | 259 | return efi.acpi20; |
@@ -1083,7 +1098,13 @@ struct osi_setup_entry { | |||
1083 | bool enable; | 1098 | bool enable; |
1084 | }; | 1099 | }; |
1085 | 1100 | ||
1086 | static struct osi_setup_entry __initdata osi_setup_entries[OSI_STRING_ENTRIES_MAX]; | 1101 | static struct osi_setup_entry __initdata |
1102 | osi_setup_entries[OSI_STRING_ENTRIES_MAX] = { | ||
1103 | {"Module Device", true}, | ||
1104 | {"Processor Device", true}, | ||
1105 | {"3.0 _SCP Extensions", true}, | ||
1106 | {"Processor Aggregator Device", true}, | ||
1107 | }; | ||
1087 | 1108 | ||
1088 | void __init acpi_osi_setup(char *str) | 1109 | void __init acpi_osi_setup(char *str) |
1089 | { | 1110 | { |
@@ -1333,23 +1354,6 @@ int acpi_resources_are_enforced(void) | |||
1333 | EXPORT_SYMBOL(acpi_resources_are_enforced); | 1354 | EXPORT_SYMBOL(acpi_resources_are_enforced); |
1334 | 1355 | ||
1335 | /* | 1356 | /* |
1336 | * Create and initialize a spinlock. | ||
1337 | */ | ||
1338 | acpi_status | ||
1339 | acpi_os_create_lock(acpi_spinlock *out_handle) | ||
1340 | { | ||
1341 | spinlock_t *lock; | ||
1342 | |||
1343 | lock = ACPI_ALLOCATE(sizeof(spinlock_t)); | ||
1344 | if (!lock) | ||
1345 | return AE_NO_MEMORY; | ||
1346 | spin_lock_init(lock); | ||
1347 | *out_handle = lock; | ||
1348 | |||
1349 | return AE_OK; | ||
1350 | } | ||
1351 | |||
1352 | /* | ||
1353 | * Deallocate the memory for a spinlock. | 1357 | * Deallocate the memory for a spinlock. |
1354 | */ | 1358 | */ |
1355 | void acpi_os_delete_lock(acpi_spinlock handle) | 1359 | void acpi_os_delete_lock(acpi_spinlock handle) |