diff options
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r-- | drivers/acpi/osl.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index bd72129e35f2..fc6c5d21c3eb 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -372,6 +372,44 @@ void __init early_acpi_os_unmap_memory(void __iomem *virt, acpi_size size) | |||
372 | __acpi_unmap_table(virt, size); | 372 | __acpi_unmap_table(virt, size); |
373 | } | 373 | } |
374 | 374 | ||
375 | int acpi_os_map_generic_address(struct acpi_generic_address *addr) | ||
376 | { | ||
377 | void __iomem *virt; | ||
378 | |||
379 | if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) | ||
380 | return 0; | ||
381 | |||
382 | if (!addr->address || !addr->bit_width) | ||
383 | return -EINVAL; | ||
384 | |||
385 | virt = acpi_os_map_memory(addr->address, addr->bit_width / 8); | ||
386 | if (!virt) | ||
387 | return -EIO; | ||
388 | |||
389 | return 0; | ||
390 | } | ||
391 | EXPORT_SYMBOL_GPL(acpi_os_map_generic_address); | ||
392 | |||
393 | void acpi_os_unmap_generic_address(struct acpi_generic_address *addr) | ||
394 | { | ||
395 | void __iomem *virt; | ||
396 | unsigned long flags; | ||
397 | acpi_size size = addr->bit_width / 8; | ||
398 | |||
399 | if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) | ||
400 | return; | ||
401 | |||
402 | if (!addr->address || !addr->bit_width) | ||
403 | return; | ||
404 | |||
405 | spin_lock_irqsave(&acpi_ioremap_lock, flags); | ||
406 | virt = acpi_map_vaddr_lookup(addr->address, size); | ||
407 | spin_unlock_irqrestore(&acpi_ioremap_lock, flags); | ||
408 | |||
409 | acpi_os_unmap_memory(virt, size); | ||
410 | } | ||
411 | EXPORT_SYMBOL_GPL(acpi_os_unmap_generic_address); | ||
412 | |||
375 | #ifdef ACPI_FUTURE_USAGE | 413 | #ifdef ACPI_FUTURE_USAGE |
376 | acpi_status | 414 | acpi_status |
377 | acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) | 415 | acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) |