Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | * |
3 | * fixmap.h: compile-time virtual memory allocation |
4 | * |
5 | * Copyright (C) 1998 Ingo Molnar |
6 | * |
7 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 |
8 | */ |
9 | |
10 | #ifndef _ASM_FIXMAP_H |
11 | #define _ASM_FIXMAP_H |
12 | |
13 | #include <linux/kernel.h> |
14 | #include <linux/threads.h> |
15 | #include <asm/page.h> |
16 | |
17 | /* |
18 | * Here we define all the compile-time 'special' virtual |
19 | * addresses. The point is to have a constant address at |
20 | * compile time, but to set the physical address only |
21 | * in the boot process. We allocate these special addresses |
22 | * from the end of P3 backwards. |
23 | * Also this lets us do fail-safe vmalloc(), we |
24 | * can guarantee that these special addresses and |
25 | * vmalloc()-ed addresses never overlap. |
26 | * |
27 | * these 'compile-time allocated' memory buffers are |
28 | * fixed-size 4k pages. (or larger if used with an increment |
29 | * highger than 1) use fixmap_set(idx,phys) to associate |
30 | * physical memory with fixmap indices. |
31 | * |
32 | * TLB entries of such buffers will not be flushed across |
33 | * task switches. |
34 | */ |
35 | |
36 | /* |
37 | * on UP currently we will have no trace of the fixmap mechanizm, |
38 | * no page table allocations, etc. This might change in the |
39 | * future, say framebuffers for the console driver(s) could be |
40 | * fix-mapped? |
41 | */ |
42 | enum fixed_addresses { |
43 | /* |
44 | * The FIX_CMAP entries are used by kmap_coherent() to get virtual |
45 | * addresses which are of a known color, and so their values are |
46 | * important. __fix_to_virt(FIX_CMAP_END - n) must give an address |
47 | * which is the same color as a page (n<<PAGE_SHIFT). |
48 | */ |
49 | #define FIX_N_COLOURS 8 |
50 | FIX_CMAP_BEGIN, |
51 | FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS) - 1, |
52 | |
53 | #ifdef CONFIG_IOREMAP_FIXED |
54 | /* |
55 | * FIX_IOREMAP entries are useful for mapping physical address |
56 | * space before ioremap() is useable, e.g. really early in boot |
57 | * before kmalloc() is working. |
58 | */ |
59 | #define FIX_N_IOREMAPS 32 |
60 | FIX_IOREMAP_BEGIN, |
61 | FIX_IOREMAP_END = FIX_IOREMAP_BEGIN + FIX_N_IOREMAPS - 1, |
62 | #endif |
63 | |
64 | __end_of_fixed_addresses |
65 | }; |
66 | |
67 | extern void __set_fixmap(enum fixed_addresses idx, |
68 | unsigned long phys, pgprot_t flags); |
69 | extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags); |
70 | |
71 | /* |
72 | * used by vmalloc.c. |
73 | * |
74 | * Leave one empty page between vmalloc'ed areas and |
75 | * the start of the fixmap, and leave one page empty |
76 | * at the top of mem.. |
77 | */ |
78 | #define FIXADDR_TOP (P4SEG - PAGE_SIZE) |
79 | #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) |
80 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) |
81 | |
82 | #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE |
83 | |
84 | #include <asm-generic/fixmap.h> |
85 | |
86 | #endif |
87 |
Warning: This file is not a C or C++ file. It does not have highlighting.