Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/include/asm/fixmap.h
26493 views
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
88