Commit | Line | Data |
---|---|---|
41938761 MS |
1 | /* |
2 | * fixmap.h: compile-time virtual memory allocation | |
3 | * | |
4 | * This file is subject to the terms and conditions of the GNU General Public | |
5 | * License. See the file "COPYING" in the main directory of this archive | |
6 | * for more details. | |
7 | * | |
8 | * Copyright (C) 1998 Ingo Molnar | |
9 | * | |
10 | * Copyright 2008 Freescale Semiconductor Inc. | |
11 | * Port to powerpc added by Kumar Gala | |
12 | * | |
13 | * Copyright 2011 Michal Simek <monstr@monstr.eu> | |
14 | * Copyright 2011 PetaLogix Qld Pty Ltd | |
15 | * Port to Microblaze | |
16 | */ | |
17 | ||
18 | #ifndef _ASM_FIXMAP_H | |
19 | #define _ASM_FIXMAP_H | |
20 | ||
21 | #ifndef __ASSEMBLY__ | |
22 | #include <linux/kernel.h> | |
23 | #include <asm/page.h> | |
2f2f371f MS |
24 | #ifdef CONFIG_HIGHMEM |
25 | #include <linux/threads.h> | |
26 | #include <asm/kmap_types.h> | |
27 | #endif | |
41938761 MS |
28 | |
29 | #define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE)) | |
30 | ||
31 | /* | |
32 | * Here we define all the compile-time 'special' virtual | |
33 | * addresses. The point is to have a constant address at | |
34 | * compile time, but to set the physical address only | |
35 | * in the boot process. We allocate these special addresses | |
36 | * from the end of virtual memory (0xfffff000) backwards. | |
37 | * Also this lets us do fail-safe vmalloc(), we | |
38 | * can guarantee that these special addresses and | |
39 | * vmalloc()-ed addresses never overlap. | |
40 | * | |
41 | * these 'compile-time allocated' memory buffers are | |
42 | * fixed-size 4k pages. (or larger if used with an increment | |
43 | * highger than 1) use fixmap_set(idx,phys) to associate | |
44 | * physical memory with fixmap indices. | |
45 | * | |
46 | * TLB entries of such buffers will not be flushed across | |
47 | * task switches. | |
48 | */ | |
49 | enum fixed_addresses { | |
50 | FIX_HOLE, | |
2f2f371f MS |
51 | #ifdef CONFIG_HIGHMEM |
52 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | |
53 | FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * num_possible_cpus()) - 1, | |
54 | #endif | |
41938761 MS |
55 | __end_of_fixed_addresses |
56 | }; | |
57 | ||
58 | extern void __set_fixmap(enum fixed_addresses idx, | |
59 | phys_addr_t phys, pgprot_t flags); | |
60 | ||
41938761 MS |
61 | #define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) |
62 | #define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) | |
63 | ||
14288537 | 64 | #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_CI |
41938761 | 65 | |
14288537 | 66 | #include <asm-generic/fixmap.h> |
41938761 MS |
67 | |
68 | #endif /* !__ASSEMBLY__ */ | |
69 | #endif |