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

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [include/] [asm-or32/] [pgalloc.h] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 xianfeng
#ifndef _OR32_PGALLOC_H
2
#define _OR32_PGALLOC_H
3
 
4
#include <asm/page.h>
5
#include <linux/threads.h>
6
#include <linux/mm.h>
7
 
8
#if 1
9
#define pmd_populate_kernel(mm, pmd, pte) \
10
                 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
11
 
12
static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
13
{
14
        set_pmd(pmd, __pmd(_KERNPG_TABLE +
15
                           ((unsigned long)page_to_pfn(pte) <<
16
                            (unsigned long) PAGE_SHIFT)));
17
}
18
#endif
19
 
20
#if 0
21
#define pmd_populate_kernel(mm, pmd, pte) \
22
                 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
23
#define pmd_populate(mm, pmd, pte) \
24
                set_pmd(pmd, __pmd(__pa(pte)))
25
 
26
#endif
27
 
28
#if 0
29
/* __PHX__ check */
30
#define pmd_populate_kernel(mm, pmd, pte) pmd_set(pmd, pte)
31
#define pmd_populate(mm, pmd, pte) pmd_set(pmd, page_address(pte))
32
#endif 
33
 
34
 
35
#if 1
36
/*
37
 * Allocate and free page tables.
38
 */
39
 
40
extern inline pgd_t *pgd_alloc(struct mm_struct *mm)
41
{
42
        pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL);
43
 
44
        if (ret) {
45
                memset(ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
46
                memcpy(ret + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD,
47
                       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
48
        }
49
        return ret;
50
}
51
#endif
52
 
53
#if 0
54
/* __PHX__ check, this is supposed to be 2.6 style, but
55
 * we use current_pgd (from mm->pgd) to load kernel pages
56
 * so we need it initialized.
57
 */
58
extern inline pgd_t *pgd_alloc (struct mm_struct *mm)
59
{
60
        return (pgd_t *)get_zeroed_page(GFP_KERNEL);
61
}
62
#endif
63
 
64
extern inline void pgd_free (pgd_t *pgd)
65
{
66
        free_page((unsigned long)pgd);
67
}
68
 
69
extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
70
{
71
        pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
72
        if (pte)
73
                clear_page(pte);
74
        return pte;
75
}
76
 
77
extern inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
78
{
79
        struct page *pte;
80
        pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
81
        if (pte)
82
                clear_page(page_address(pte));
83
        return pte;
84
}
85
 
86
extern inline void pte_free_kernel(pte_t *pte)
87
{
88
        free_page((unsigned long)pte);
89
}
90
 
91
extern inline void pte_free(struct page *pte)
92
{
93
        __free_page(pte);
94
}
95
 
96
 
97
#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
98
 
99
/*
100
 * We don't have any real pmd's, and this code never triggers because
101
 * the pgd will always be present..
102
 */
103
 
104
#define pmd_alloc_one(mm, addr)    ({ BUG(); ((pmd_t *)2); })
105
#define pmd_free(x)                do { } while (0)
106
#define __pmd_free_tlb(tlb,x)      do { } while (0)
107
#define pgd_populate(mm, pmd, pte) BUG()
108
 
109
#define check_pgt_cache()          do { } while (0)
110
 
111
#endif

powered by: WebSVN 2.1.0

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