aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/osl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r--drivers/acpi/osl.c38
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
375int 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}
391EXPORT_SYMBOL_GPL(acpi_os_map_generic_address);
392
393void 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}
411EXPORT_SYMBOL_GPL(acpi_os_unmap_generic_address);
412
375#ifdef ACPI_FUTURE_USAGE 413#ifdef ACPI_FUTURE_USAGE
376acpi_status 414acpi_status
377acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) 415acpi_os_get_physical_address(void *virt, acpi_physical_address * phys)