From 0050570a10d4d607c2f5a733901a6d469ad6d144 Mon Sep 17 00:00:00 2001 From: Myron Stowe Date: Thu, 21 Oct 2010 14:23:59 -0600 Subject: [PATCH] --- yaml --- r: 217686 b: refs/heads/master c: 29718521237a1b1607ea05b49243100ea2044337 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/acpi/osl.c | 38 ++++++++++++++++++++++++++++++++++++++ trunk/include/linux/acpi.h | 3 +++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8c2ad17498af..edaeadc183bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 620242ae8c3d9c0b1a77451744fb2d855d1e7342 +refs/heads/master: 29718521237a1b1607ea05b49243100ea2044337 diff --git a/trunk/drivers/acpi/osl.c b/trunk/drivers/acpi/osl.c index bd72129e35f2..fc6c5d21c3eb 100644 --- a/trunk/drivers/acpi/osl.c +++ b/trunk/drivers/acpi/osl.c @@ -372,6 +372,44 @@ void __init early_acpi_os_unmap_memory(void __iomem *virt, acpi_size size) __acpi_unmap_table(virt, size); } +int acpi_os_map_generic_address(struct acpi_generic_address *addr) +{ + void __iomem *virt; + + if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) + return 0; + + if (!addr->address || !addr->bit_width) + return -EINVAL; + + virt = acpi_os_map_memory(addr->address, addr->bit_width / 8); + if (!virt) + return -EIO; + + return 0; +} +EXPORT_SYMBOL_GPL(acpi_os_map_generic_address); + +void acpi_os_unmap_generic_address(struct acpi_generic_address *addr) +{ + void __iomem *virt; + unsigned long flags; + acpi_size size = addr->bit_width / 8; + + if (addr->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) + return; + + if (!addr->address || !addr->bit_width) + return; + + spin_lock_irqsave(&acpi_ioremap_lock, flags); + virt = acpi_map_vaddr_lookup(addr->address, size); + spin_unlock_irqrestore(&acpi_ioremap_lock, flags); + + acpi_os_unmap_memory(virt, size); +} +EXPORT_SYMBOL_GPL(acpi_os_unmap_generic_address); + #ifdef ACPI_FUTURE_USAGE acpi_status acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) diff --git a/trunk/include/linux/acpi.h b/trunk/include/linux/acpi.h index c227757feb06..7774e6d8fddd 100644 --- a/trunk/include/linux/acpi.h +++ b/trunk/include/linux/acpi.h @@ -308,6 +308,9 @@ extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 *mask, u32 req); extern void acpi_early_init(void); +int acpi_os_map_generic_address(struct acpi_generic_address *addr); +void acpi_os_unmap_generic_address(struct acpi_generic_address *addr); + #else /* !CONFIG_ACPI */ #define acpi_disabled 1