]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/acpi/boot.c
x86: use early_ioremap in __acpi_map_table
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / acpi / boot.c
index d37593c2f438d80ff609ed61e0584032670db260..c518599e4264d4a6dfddf91a178401994e8e0038 100644 (file)
@@ -121,8 +121,8 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
  */
 char *__init __acpi_map_table(unsigned long phys, unsigned long size)
 {
-       unsigned long base, offset, mapped_size;
-       int idx;
+       static char *prev_map;
+       static unsigned long prev_size;
 
        if (!phys || !size)
                return NULL;
@@ -130,26 +130,13 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size)
        if (phys+size <= (max_low_pfn_mapped << PAGE_SHIFT))
                return __va(phys);
 
-       offset = phys & (PAGE_SIZE - 1);
-       mapped_size = PAGE_SIZE - offset;
-       clear_fixmap(FIX_ACPI_END);
-       set_fixmap(FIX_ACPI_END, phys);
-       base = fix_to_virt(FIX_ACPI_END);
+       if (prev_map)
+               early_iounmap(prev_map, prev_size);
 
-       /*
-        * Most cases can be covered by the below.
-        */
-       idx = FIX_ACPI_END;
-       while (mapped_size < size) {
-               if (--idx < FIX_ACPI_BEGIN)
-                       return NULL;    /* cannot handle this */
-               phys += PAGE_SIZE;
-               clear_fixmap(idx);
-               set_fixmap(idx, phys);
-               mapped_size += PAGE_SIZE;
-       }
+       prev_size = size;
+       prev_map = early_ioremap(phys, size);
 
-       return ((unsigned char *)base + offset);
+       return prev_map;
 }
 
 #ifdef CONFIG_PCI_MMCONFIG