diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2009-03-24 22:47:45 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-03-24 22:47:45 +0000 |
commit | fbf2b1f9cfdb4e4b5d042839142ed19ff5d46679 (patch) | |
tree | 3a17c02aa0cf9bdbed9aa479739974aa2416ecac /arch/arm/include/asm/fixmap.h | |
parent | 9a38e989b8ce04923f919fc2a8a24eb07fb484e2 (diff) | |
parent | 053a96ca11a9785a7e63fc89eed4514a6446ec58 (diff) | |
download | talos-op-linux-fbf2b1f9cfdb4e4b5d042839142ed19ff5d46679.tar.gz talos-op-linux-fbf2b1f9cfdb4e4b5d042839142ed19ff5d46679.zip |
Merge branch 'highmem' into devel
Diffstat (limited to 'arch/arm/include/asm/fixmap.h')
-rw-r--r-- | arch/arm/include/asm/fixmap.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/arm/include/asm/fixmap.h b/arch/arm/include/asm/fixmap.h new file mode 100644 index 000000000000..bbae919bceb4 --- /dev/null +++ b/arch/arm/include/asm/fixmap.h @@ -0,0 +1,41 @@ +#ifndef _ASM_FIXMAP_H +#define _ASM_FIXMAP_H + +/* + * Nothing too fancy for now. + * + * On ARM we already have well known fixed virtual addresses imposed by + * the architecture such as the vector page which is located at 0xffff0000, + * therefore a second level page table is already allocated covering + * 0xfff00000 upwards. + * + * The cache flushing code in proc-xscale.S uses the virtual area between + * 0xfffe0000 and 0xfffeffff. + */ + +#define FIXADDR_START 0xfff00000UL +#define FIXADDR_TOP 0xfffe0000UL +#define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START) + +#define FIX_KMAP_BEGIN 0 +#define FIX_KMAP_END (FIXADDR_SIZE >> PAGE_SHIFT) + +#define __fix_to_virt(x) (FIXADDR_START + ((x) << PAGE_SHIFT)) +#define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT) + +extern void __this_fixmap_does_not_exist(void); + +static inline unsigned long fix_to_virt(const unsigned int idx) +{ + if (idx >= FIX_KMAP_END) + __this_fixmap_does_not_exist(); + return __fix_to_virt(idx); +} + +static inline unsigned int virt_to_fix(const unsigned long vaddr) +{ + BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); + return __virt_to_fix(vaddr); +} + +#endif |