diff options
-rw-r--r-- | arch/ia64/mm/Makefile | 2 | ||||
-rw-r--r-- | arch/ia64/mm/ioremap.c | 43 | ||||
-rw-r--r-- | include/asm-ia64/io.h | 15 |
3 files changed, 46 insertions, 14 deletions
diff --git a/arch/ia64/mm/Makefile b/arch/ia64/mm/Makefile index d78d20f0a0f0..bb0a01a81878 100644 --- a/arch/ia64/mm/Makefile +++ b/arch/ia64/mm/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile for the ia64-specific parts of the memory manager. | 2 | # Makefile for the ia64-specific parts of the memory manager. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := init.o fault.o tlb.o extable.o | 5 | obj-y := init.o fault.o tlb.o extable.o ioremap.o |
6 | 6 | ||
7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
8 | obj-$(CONFIG_NUMA) += numa.o | 8 | obj-$(CONFIG_NUMA) += numa.o |
diff --git a/arch/ia64/mm/ioremap.c b/arch/ia64/mm/ioremap.c new file mode 100644 index 000000000000..62328621f99c --- /dev/null +++ b/arch/ia64/mm/ioremap.c | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * (c) Copyright 2006 Hewlett-Packard Development Company, L.P. | ||
3 | * Bjorn Helgaas <bjorn.helgaas@hp.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #include <linux/compiler.h> | ||
11 | #include <linux/module.h> | ||
12 | #include <linux/efi.h> | ||
13 | #include <asm/io.h> | ||
14 | |||
15 | static inline void __iomem * | ||
16 | __ioremap (unsigned long offset, unsigned long size) | ||
17 | { | ||
18 | return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset); | ||
19 | } | ||
20 | |||
21 | void __iomem * | ||
22 | ioremap (unsigned long offset, unsigned long size) | ||
23 | { | ||
24 | if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC)) | ||
25 | return __ioremap(offset, size); | ||
26 | |||
27 | if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB)) | ||
28 | return phys_to_virt(offset); | ||
29 | |||
30 | /* | ||
31 | * Someday this should check ACPI resources so we | ||
32 | * can do the right thing for hot-plugged regions. | ||
33 | */ | ||
34 | return __ioremap(offset, size); | ||
35 | } | ||
36 | EXPORT_SYMBOL(ioremap); | ||
37 | |||
38 | void __iomem * | ||
39 | ioremap_nocache (unsigned long offset, unsigned long size) | ||
40 | { | ||
41 | return __ioremap(offset, size); | ||
42 | } | ||
43 | EXPORT_SYMBOL(ioremap_nocache); | ||
diff --git a/include/asm-ia64/io.h b/include/asm-ia64/io.h index acba019b08e9..c2e3742108bb 100644 --- a/include/asm-ia64/io.h +++ b/include/asm-ia64/io.h | |||
@@ -416,25 +416,14 @@ __writeq (unsigned long val, volatile void __iomem *addr) | |||
416 | # define outl_p outl | 416 | # define outl_p outl |
417 | #endif | 417 | #endif |
418 | 418 | ||
419 | /* | 419 | extern void __iomem * ioremap(unsigned long offset, unsigned long size); |
420 | * An "address" in IO memory space is not clearly either an integer or a pointer. We will | 420 | extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); |
421 | * accept both, thus the casts. | ||
422 | * | ||
423 | * On ia-64, we access the physical I/O memory space through the uncached kernel region. | ||
424 | */ | ||
425 | static inline void __iomem * | ||
426 | ioremap (unsigned long offset, unsigned long size) | ||
427 | { | ||
428 | return (void __iomem *) (__IA64_UNCACHED_OFFSET | (offset)); | ||
429 | } | ||
430 | 421 | ||
431 | static inline void | 422 | static inline void |
432 | iounmap (volatile void __iomem *addr) | 423 | iounmap (volatile void __iomem *addr) |
433 | { | 424 | { |
434 | } | 425 | } |
435 | 426 | ||
436 | #define ioremap_nocache(o,s) ioremap(o,s) | ||
437 | |||
438 | /* Use normal IO mappings for DMI */ | 427 | /* Use normal IO mappings for DMI */ |
439 | #define dmi_ioremap ioremap | 428 | #define dmi_ioremap ioremap |
440 | #define dmi_iounmap(x,l) iounmap(x) | 429 | #define dmi_iounmap(x,l) iounmap(x) |