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

Subversion Repositories or1k

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

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 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/apicdef.h>
19
#include <asm/page.h>
20
#include <asm/vsyscall.h>
21
 
22
/*
23
 * Here we define all the compile-time 'special' virtual
24
 * addresses. The point is to have a constant address at
25
 * compile time, but to set the physical address only
26
 * in the boot process.
27
 *
28
 * these 'compile-time allocated' memory buffers are
29
 * fixed-size 4k pages. (or larger if used with an increment
30
 * highger than 1) use fixmap_set(idx,phys) to associate
31
 * physical memory with fixmap indices.
32
 *
33
 * TLB entries of such buffers will not be flushed across
34
 * task switches.
35
 */
36
 
37
enum fixed_addresses {
38
        VSYSCALL_LAST_PAGE,
39
        VSYSCALL_FIRST_PAGE = VSYSCALL_LAST_PAGE + ((VSYSCALL_END-VSYSCALL_START) >> PAGE_SHIFT) - 1,
40
        VSYSCALL_HPET,
41
        FIX_HPET_BASE,
42
#ifdef CONFIG_X86_LOCAL_APIC
43
        FIX_APIC_BASE,  /* local (CPU) APIC) -- required for SMP or not */
44
#endif
45
#ifdef CONFIG_X86_IO_APIC
46
        FIX_IO_APIC_BASE_0,
47
        FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1,
48
#endif
49
        __end_of_fixed_addresses
50
};
51
 
52
extern void __set_fixmap (enum fixed_addresses idx,
53
                                        unsigned long phys, pgprot_t flags);
54
 
55
#define set_fixmap(idx, phys) \
56
                __set_fixmap(idx, phys, PAGE_KERNEL)
57
/*
58
 * Some hardware wants to get fixmapped without caching.
59
 */
60
#define set_fixmap_nocache(idx, phys) \
61
                __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
62
 
63
#define FIXADDR_TOP     (VSYSCALL_END-PAGE_SIZE)
64
#define FIXADDR_SIZE    (__end_of_fixed_addresses << PAGE_SHIFT)
65
#define FIXADDR_START   (FIXADDR_TOP - FIXADDR_SIZE)
66
 
67
#define __fix_to_virt(x)        (FIXADDR_TOP - ((x) << PAGE_SHIFT))
68
 
69
extern void __this_fixmap_does_not_exist(void);
70
 
71
/*
72
 * 'index to address' translation. If anyone tries to use the idx
73
 * directly without tranlation, we catch the bug with a NULL-deference
74
 * kernel oops. Illegal ranges of incoming indices are caught too.
75
 */
76
extern inline unsigned long fix_to_virt(const unsigned int idx)
77
{
78
        /*
79
         * this branch gets completely eliminated after inlining,
80
         * except when someone tries to use fixaddr indices in an
81
         * illegal way. (such as mixing up address types or using
82
         * out-of-range indices).
83
         *
84
         * If it doesn't get removed, the linker will complain
85
         * loudly with a reasonably clear error message..
86
         */
87
        if (idx >= __end_of_fixed_addresses)
88
                __this_fixmap_does_not_exist();
89
 
90
        return __fix_to_virt(idx);
91
}
92
 
93
#endif

powered by: WebSVN 2.1.0

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