OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-mips/] [fixmap.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/*
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
 * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
11
 */
12
 
13
#ifndef _ASM_FIXMAP_H
14
#define _ASM_FIXMAP_H
15
 
16
#include <linux/config.h>
17
#include <linux/kernel.h>
18
#include <asm/page.h>
19
#ifdef CONFIG_HIGHMEM
20
#include <linux/threads.h>
21
#include <asm/kmap_types.h>
22
#endif
23
 
24
/*
25
 * Here we define all the compile-time 'special' virtual
26
 * addresses. The point is to have a constant address at
27
 * compile time, but to set the physical address only
28
 * in the boot process. We allocate these special  addresses
29
 * from the end of virtual memory (0xfffff000) backwards.
30
 * Also this lets us do fail-safe vmalloc(), we
31
 * can guarantee that these special addresses and
32
 * vmalloc()-ed addresses never overlap.
33
 *
34
 * these 'compile-time allocated' memory buffers are
35
 * fixed-size 4k pages. (or larger if used with an increment
36
 * highger than 1) use fixmap_set(idx,phys) to associate
37
 * physical memory with fixmap indices.
38
 *
39
 * TLB entries of such buffers will not be flushed across
40
 * task switches.
41
 */
42
 
43
/*
44
 * on UP currently we will have no trace of the fixmap mechanizm,
45
 * no page table allocations, etc. This might change in the
46
 * future, say framebuffers for the console driver(s) could be
47
 * fix-mapped?
48
 */
49
enum fixed_addresses {
50
#ifdef CONFIG_HIGHMEM
51
        FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
52
        FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
53
#endif
54
        __end_of_fixed_addresses
55
};
56
 
57
extern void __set_fixmap (enum fixed_addresses idx,
58
                                        unsigned long phys, pgprot_t flags);
59
 
60
#define set_fixmap(idx, phys) \
61
                __set_fixmap(idx, phys, PAGE_KERNEL)
62
/*
63
 * Some hardware wants to get fixmapped without caching.
64
 */
65
#define set_fixmap_nocache(idx, phys) \
66
                __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
67
/*
68
 * used by vmalloc.c.
69
 *
70
 * Leave one empty page between vmalloc'ed areas and
71
 * the start of the fixmap, and leave one page empty
72
 * at the top of mem..
73
 */
74
#define FIXADDR_TOP     (0xffffe000UL)
75
#define FIXADDR_SIZE    (__end_of_fixed_addresses << PAGE_SHIFT)
76
#define FIXADDR_START   (FIXADDR_TOP - FIXADDR_SIZE)
77
 
78
#define __fix_to_virt(x)        (FIXADDR_TOP - ((x) << PAGE_SHIFT))
79
 
80
extern void __this_fixmap_does_not_exist(void);
81
 
82
/*
83
 * 'index to address' translation. If anyone tries to use the idx
84
 * directly without tranlation, we catch the bug with a NULL-deference
85
 * kernel oops. Illegal ranges of incoming indices are caught too.
86
 */
87
static inline unsigned long fix_to_virt(const unsigned int idx)
88
{
89
        /*
90
         * this branch gets completely eliminated after inlining,
91
         * except when someone tries to use fixaddr indices in an
92
         * illegal way. (such as mixing up address types or using
93
         * out-of-range indices).
94
         *
95
         * If it doesn't get removed, the linker will complain
96
         * loudly with a reasonably clear error message..
97
         */
98
        if (idx >= __end_of_fixed_addresses)
99
                __this_fixmap_does_not_exist();
100
 
101
        return __fix_to_virt(idx);
102
}
103
 
104
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.