diff options
| author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-06-22 10:05:36 -0400 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-06-28 12:59:48 -0400 |
| commit | 5924486dc0f205ebc2bbf4c262eec902ff38e802 (patch) | |
| tree | acde32ec730762ed2d0a742990cfe2dc7f6e5cf0 | |
| parent | f9c21a6ee7e040be0f623a6b8dcfb5ec4f7532f5 (diff) | |
[ARM] nommu: add stubs for ioremap and friends
nommu doesn't have any form of remapping support, so ioremap, etc
become stubs which just return the casted address, doing nothing
else.
Move ioport_map(), ioport_unmap(), pci_iomap(), pci_iounmap()
into a separate file which is always built.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/mm/Makefile | 8 | ||||
| -rw-r--r-- | arch/arm/mm/iomap.c | 55 | ||||
| -rw-r--r-- | arch/arm/mm/ioremap.c | 47 | ||||
| -rw-r--r-- | arch/arm/mm/nommu.c | 30 |
4 files changed, 92 insertions, 48 deletions
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 07a538505784..07891c83e52c 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
| @@ -3,9 +3,15 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := consistent.o extable.o fault-armv.o \ | 5 | obj-y := consistent.o extable.o fault-armv.o \ |
| 6 | fault.o flush.o init.o ioremap.o mmap.o \ | 6 | fault.o flush.o init.o iomap.o mmap.o \ |
| 7 | mm-armv.o | 7 | mm-armv.o |
| 8 | 8 | ||
| 9 | obj-$(CONFIG_MMU) += ioremap.o | ||
| 10 | |||
| 11 | ifneq ($(CONFIG_MMU),y) | ||
| 12 | obj-y += nommu.o | ||
| 13 | endif | ||
| 14 | |||
| 9 | obj-$(CONFIG_MODULES) += proc-syms.o | 15 | obj-$(CONFIG_MODULES) += proc-syms.o |
| 10 | 16 | ||
| 11 | obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o | 17 | obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o |
diff --git a/arch/arm/mm/iomap.c b/arch/arm/mm/iomap.c new file mode 100644 index 000000000000..62066f3020c8 --- /dev/null +++ b/arch/arm/mm/iomap.c | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mm/iomap.c | ||
| 3 | * | ||
| 4 | * Map IO port and PCI memory spaces so that {read,write}[bwl] can | ||
| 5 | * be used to access this memory. | ||
| 6 | */ | ||
| 7 | #include <linux/module.h> | ||
| 8 | #include <linux/pci.h> | ||
| 9 | #include <linux/ioport.h> | ||
| 10 | |||
| 11 | #include <asm/io.h> | ||
| 12 | |||
| 13 | #ifdef __io | ||
| 14 | void __iomem *ioport_map(unsigned long port, unsigned int nr) | ||
| 15 | { | ||
| 16 | return __io(port); | ||
| 17 | } | ||
| 18 | EXPORT_SYMBOL(ioport_map); | ||
| 19 | |||
| 20 | void ioport_unmap(void __iomem *addr) | ||
| 21 | { | ||
| 22 | } | ||
| 23 | EXPORT_SYMBOL(ioport_unmap); | ||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifdef CONFIG_PCI | ||
| 27 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | ||
| 28 | { | ||
| 29 | unsigned long start = pci_resource_start(dev, bar); | ||
| 30 | unsigned long len = pci_resource_len(dev, bar); | ||
| 31 | unsigned long flags = pci_resource_flags(dev, bar); | ||
| 32 | |||
| 33 | if (!len || !start) | ||
| 34 | return NULL; | ||
| 35 | if (maxlen && len > maxlen) | ||
| 36 | len = maxlen; | ||
| 37 | if (flags & IORESOURCE_IO) | ||
| 38 | return ioport_map(start, len); | ||
| 39 | if (flags & IORESOURCE_MEM) { | ||
| 40 | if (flags & IORESOURCE_CACHEABLE) | ||
| 41 | return ioremap(start, len); | ||
| 42 | return ioremap_nocache(start, len); | ||
| 43 | } | ||
| 44 | return NULL; | ||
| 45 | } | ||
| 46 | EXPORT_SYMBOL(pci_iomap); | ||
| 47 | |||
| 48 | void pci_iounmap(struct pci_dev *dev, void __iomem *addr) | ||
| 49 | { | ||
| 50 | if ((unsigned long)addr >= VMALLOC_START && | ||
| 51 | (unsigned long)addr < VMALLOC_END) | ||
| 52 | iounmap(addr); | ||
| 53 | } | ||
| 54 | EXPORT_SYMBOL(pci_iounmap); | ||
| 55 | #endif | ||
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index c1f7180c7bed..7691cfdba567 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
| @@ -176,50 +176,3 @@ void __iounmap(void __iomem *addr) | |||
| 176 | vunmap((void *)(PAGE_MASK & (unsigned long)addr)); | 176 | vunmap((void *)(PAGE_MASK & (unsigned long)addr)); |
| 177 | } | 177 | } |
| 178 | EXPORT_SYMBOL(__iounmap); | 178 | EXPORT_SYMBOL(__iounmap); |
| 179 | |||
| 180 | #ifdef __io | ||
| 181 | void __iomem *ioport_map(unsigned long port, unsigned int nr) | ||
| 182 | { | ||
| 183 | return __io(port); | ||
| 184 | } | ||
| 185 | EXPORT_SYMBOL(ioport_map); | ||
| 186 | |||
| 187 | void ioport_unmap(void __iomem *addr) | ||
| 188 | { | ||
| 189 | } | ||
| 190 | EXPORT_SYMBOL(ioport_unmap); | ||
| 191 | #endif | ||
| 192 | |||
| 193 | #ifdef CONFIG_PCI | ||
| 194 | #include <linux/pci.h> | ||
| 195 | #include <linux/ioport.h> | ||
| 196 | |||
| 197 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | ||
| 198 | { | ||
| 199 | unsigned long start = pci_resource_start(dev, bar); | ||
| 200 | unsigned long len = pci_resource_len(dev, bar); | ||
| 201 | unsigned long flags = pci_resource_flags(dev, bar); | ||
| 202 | |||
| 203 | if (!len || !start) | ||
| 204 | return NULL; | ||
| 205 | if (maxlen && len > maxlen) | ||
| 206 | len = maxlen; | ||
| 207 | if (flags & IORESOURCE_IO) | ||
| 208 | return ioport_map(start, len); | ||
| 209 | if (flags & IORESOURCE_MEM) { | ||
| 210 | if (flags & IORESOURCE_CACHEABLE) | ||
| 211 | return ioremap(start, len); | ||
| 212 | return ioremap_nocache(start, len); | ||
| 213 | } | ||
| 214 | return NULL; | ||
| 215 | } | ||
| 216 | EXPORT_SYMBOL(pci_iomap); | ||
| 217 | |||
| 218 | void pci_iounmap(struct pci_dev *dev, void __iomem *addr) | ||
| 219 | { | ||
| 220 | if ((unsigned long)addr >= VMALLOC_START && | ||
| 221 | (unsigned long)addr < VMALLOC_END) | ||
| 222 | iounmap(addr); | ||
| 223 | } | ||
| 224 | EXPORT_SYMBOL(pci_iounmap); | ||
| 225 | #endif | ||
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c new file mode 100644 index 000000000000..934c551d93da --- /dev/null +++ b/arch/arm/mm/nommu.c | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/mm/nommu.c | ||
| 3 | * | ||
| 4 | * ARM uCLinux supporting functions. | ||
| 5 | */ | ||
| 6 | #include <linux/module.h> | ||
| 7 | |||
| 8 | #include <asm/io.h> | ||
| 9 | #include <asm/page.h> | ||
| 10 | |||
| 11 | void __iomem *__ioremap_pfn(unsigned long pfn, unsigned long offset, | ||
| 12 | size_t size, unsigned long flags) | ||
| 13 | { | ||
| 14 | if (pfn >= (0x100000000ULL >> PAGE_SHIFT)) | ||
| 15 | return NULL; | ||
| 16 | return (void __iomem *) (offset + (pfn << PAGE_SHIFT)); | ||
| 17 | } | ||
| 18 | EXPORT_SYMBOL(__ioremap_pfn); | ||
| 19 | |||
| 20 | void __iomem *__ioremap(unsigned long phys_addr, size_t size, | ||
| 21 | unsigned long flags) | ||
| 22 | { | ||
| 23 | return (void __iomem *)phys_addr; | ||
| 24 | } | ||
| 25 | EXPORT_SYMBOL(__ioremap); | ||
| 26 | |||
| 27 | void __iounmap(void __iomem *addr) | ||
| 28 | { | ||
| 29 | } | ||
| 30 | EXPORT_SYMBOL(__iounmap); | ||
