diff options
| author | Mark Salter <msalter@redhat.com> | 2014-04-07 18:39:48 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-07 19:36:15 -0400 |
| commit | 9e5c33d7aeeef62e5fa7e74f94432685bd03026b (patch) | |
| tree | ff62a742103d422f2c74c192af434a0023324c0e /include/asm-generic | |
| parent | 6b550f6f2004017f1b4633d2c9e39b610bfe84f0 (diff) | |
mm: create generic early_ioremap() support
This patch creates a generic implementation of early_ioremap() support
based on the existing x86 implementation. early_ioremp() is useful for
early boot code which needs to temporarily map I/O or memory regions
before normal mapping functions such as ioremap() are available.
Some architectures have optional MMU. In the no-MMU case, the remap
functions simply return the passed in physical address and the unmap
functions do nothing.
Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Cc: Borislav Petkov <borislav.petkov@amd.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-generic')
| -rw-r--r-- | include/asm-generic/early_ioremap.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/asm-generic/early_ioremap.h b/include/asm-generic/early_ioremap.h new file mode 100644 index 000000000000..a5de55c04fb2 --- /dev/null +++ b/include/asm-generic/early_ioremap.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #ifndef _ASM_EARLY_IOREMAP_H_ | ||
| 2 | #define _ASM_EARLY_IOREMAP_H_ | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * early_ioremap() and early_iounmap() are for temporary early boot-time | ||
| 8 | * mappings, before the real ioremap() is functional. | ||
| 9 | */ | ||
| 10 | extern void __iomem *early_ioremap(resource_size_t phys_addr, | ||
| 11 | unsigned long size); | ||
| 12 | extern void *early_memremap(resource_size_t phys_addr, | ||
| 13 | unsigned long size); | ||
| 14 | extern void early_iounmap(void __iomem *addr, unsigned long size); | ||
| 15 | extern void early_memunmap(void *addr, unsigned long size); | ||
| 16 | |||
| 17 | /* | ||
| 18 | * Weak function called by early_ioremap_reset(). It does nothing, but | ||
| 19 | * architectures may provide their own version to do any needed cleanups. | ||
| 20 | */ | ||
| 21 | extern void early_ioremap_shutdown(void); | ||
| 22 | |||
| 23 | #if defined(CONFIG_GENERIC_EARLY_IOREMAP) && defined(CONFIG_MMU) | ||
| 24 | /* Arch-specific initialization */ | ||
| 25 | extern void early_ioremap_init(void); | ||
| 26 | |||
| 27 | /* Generic initialization called by architecture code */ | ||
| 28 | extern void early_ioremap_setup(void); | ||
| 29 | |||
| 30 | /* | ||
| 31 | * Called as last step in paging_init() so library can act | ||
| 32 | * accordingly for subsequent map/unmap requests. | ||
| 33 | */ | ||
| 34 | extern void early_ioremap_reset(void); | ||
| 35 | |||
| 36 | #else | ||
| 37 | static inline void early_ioremap_init(void) { } | ||
| 38 | static inline void early_ioremap_setup(void) { } | ||
| 39 | static inline void early_ioremap_reset(void) { } | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #endif /* _ASM_EARLY_IOREMAP_H_ */ | ||
