root/arch/mips/mm/pgtable-64.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pgd_init
  2. pmd_init
  3. pud_init
  4. mk_pmd
  5. set_pmd_at
  6. pagetable_init

   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/export.h>
  10 #include <linux/init.h>
  11 #include <linux/mm.h>
  12 #include <asm/fixmap.h>
  13 #include <asm/pgtable.h>
  14 #include <asm/pgalloc.h>
  15 #include <asm/tlbflush.h>
  16 
  17 void pgd_init(unsigned long page)
  18 {
  19         unsigned long *p, *end;
  20         unsigned long entry;
  21 
  22 #if !defined(__PAGETABLE_PUD_FOLDED)
  23         entry = (unsigned long)invalid_pud_table;
  24 #elif !defined(__PAGETABLE_PMD_FOLDED)
  25         entry = (unsigned long)invalid_pmd_table;
  26 #else
  27         entry = (unsigned long)invalid_pte_table;
  28 #endif
  29 
  30         p = (unsigned long *) page;
  31         end = p + PTRS_PER_PGD;
  32 
  33         do {
  34                 p[0] = entry;
  35                 p[1] = entry;
  36                 p[2] = entry;
  37                 p[3] = entry;
  38                 p[4] = entry;
  39                 p += 8;
  40                 p[-3] = entry;
  41                 p[-2] = entry;
  42                 p[-1] = entry;
  43         } while (p != end);
  44 }
  45 
  46 #ifndef __PAGETABLE_PMD_FOLDED
  47 void pmd_init(unsigned long addr, unsigned long pagetable)
  48 {
  49         unsigned long *p, *end;
  50 
  51         p = (unsigned long *) addr;
  52         end = p + PTRS_PER_PMD;
  53 
  54         do {
  55                 p[0] = pagetable;
  56                 p[1] = pagetable;
  57                 p[2] = pagetable;
  58                 p[3] = pagetable;
  59                 p[4] = pagetable;
  60                 p += 8;
  61                 p[-3] = pagetable;
  62                 p[-2] = pagetable;
  63                 p[-1] = pagetable;
  64         } while (p != end);
  65 }
  66 EXPORT_SYMBOL_GPL(pmd_init);
  67 #endif
  68 
  69 #ifndef __PAGETABLE_PUD_FOLDED
  70 void pud_init(unsigned long addr, unsigned long pagetable)
  71 {
  72         unsigned long *p, *end;
  73 
  74         p = (unsigned long *)addr;
  75         end = p + PTRS_PER_PUD;
  76 
  77         do {
  78                 p[0] = pagetable;
  79                 p[1] = pagetable;
  80                 p[2] = pagetable;
  81                 p[3] = pagetable;
  82                 p[4] = pagetable;
  83                 p += 8;
  84                 p[-3] = pagetable;
  85                 p[-2] = pagetable;
  86                 p[-1] = pagetable;
  87         } while (p != end);
  88 }
  89 #endif
  90 
  91 pmd_t mk_pmd(struct page *page, pgprot_t prot)
  92 {
  93         pmd_t pmd;
  94 
  95         pmd_val(pmd) = (page_to_pfn(page) << _PFN_SHIFT) | pgprot_val(prot);
  96 
  97         return pmd;
  98 }
  99 
 100 void set_pmd_at(struct mm_struct *mm, unsigned long addr,
 101                 pmd_t *pmdp, pmd_t pmd)
 102 {
 103         *pmdp = pmd;
 104         flush_tlb_all();
 105 }
 106 
 107 void __init pagetable_init(void)
 108 {
 109         unsigned long vaddr;
 110         pgd_t *pgd_base;
 111 
 112         /* Initialize the entire pgd.  */
 113         pgd_init((unsigned long)swapper_pg_dir);
 114 #ifndef __PAGETABLE_PUD_FOLDED
 115         pud_init((unsigned long)invalid_pud_table, (unsigned long)invalid_pmd_table);
 116 #endif
 117 #ifndef __PAGETABLE_PMD_FOLDED
 118         pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table);
 119 #endif
 120         pgd_base = swapper_pg_dir;
 121         /*
 122          * Fixed mappings:
 123          */
 124         vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
 125         fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base);
 126 }

/* [<][>][^][v][top][bottom][index][help] */