diff options
Diffstat (limited to 'arch/mips/mm/pgtable-64.c')
-rw-r--r-- | arch/mips/mm/pgtable-64.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/arch/mips/mm/pgtable-64.c b/arch/mips/mm/pgtable-64.c new file mode 100644 index 000000000000..44b5e97fff65 --- /dev/null +++ b/arch/mips/mm/pgtable-64.c | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 1999, 2000 by Silicon Graphics | ||
7 | * Copyright (C) 2003 by Ralf Baechle | ||
8 | */ | ||
9 | #include <linux/init.h> | ||
10 | #include <linux/mm.h> | ||
11 | #include <asm/pgtable.h> | ||
12 | |||
13 | void pgd_init(unsigned long page) | ||
14 | { | ||
15 | unsigned long *p, *end; | ||
16 | |||
17 | p = (unsigned long *) page; | ||
18 | end = p + PTRS_PER_PGD; | ||
19 | |||
20 | while (p < end) { | ||
21 | p[0] = (unsigned long) invalid_pmd_table; | ||
22 | p[1] = (unsigned long) invalid_pmd_table; | ||
23 | p[2] = (unsigned long) invalid_pmd_table; | ||
24 | p[3] = (unsigned long) invalid_pmd_table; | ||
25 | p[4] = (unsigned long) invalid_pmd_table; | ||
26 | p[5] = (unsigned long) invalid_pmd_table; | ||
27 | p[6] = (unsigned long) invalid_pmd_table; | ||
28 | p[7] = (unsigned long) invalid_pmd_table; | ||
29 | p += 8; | ||
30 | } | ||
31 | } | ||
32 | |||
33 | void pmd_init(unsigned long addr, unsigned long pagetable) | ||
34 | { | ||
35 | unsigned long *p, *end; | ||
36 | |||
37 | p = (unsigned long *) addr; | ||
38 | end = p + PTRS_PER_PMD; | ||
39 | |||
40 | while (p < end) { | ||
41 | p[0] = (unsigned long)pagetable; | ||
42 | p[1] = (unsigned long)pagetable; | ||
43 | p[2] = (unsigned long)pagetable; | ||
44 | p[3] = (unsigned long)pagetable; | ||
45 | p[4] = (unsigned long)pagetable; | ||
46 | p[5] = (unsigned long)pagetable; | ||
47 | p[6] = (unsigned long)pagetable; | ||
48 | p[7] = (unsigned long)pagetable; | ||
49 | p += 8; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | void __init pagetable_init(void) | ||
54 | { | ||
55 | /* Initialize the entire pgd. */ | ||
56 | pgd_init((unsigned long)swapper_pg_dir); | ||
57 | pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); | ||
58 | } | ||