root/arch/powerpc/include/asm/pgtable.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. pte_pgprot
  2. mark_initmem_nx
  3. ptdump_check_wx
  4. pte_frag_get
  5. pte_frag_set
  6. pte_frag_get
  7. pte_frag_set
  8. pmd_is_leaf
  9. pud_is_leaf
  10. pgd_is_leaf
  11. is_ioremap_addr

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_POWERPC_PGTABLE_H
   3 #define _ASM_POWERPC_PGTABLE_H
   4 
   5 #ifndef __ASSEMBLY__
   6 #include <linux/mmdebug.h>
   7 #include <linux/mmzone.h>
   8 #include <asm/processor.h>              /* For TASK_SIZE */
   9 #include <asm/mmu.h>
  10 #include <asm/page.h>
  11 #include <asm/tlbflush.h>
  12 
  13 struct mm_struct;
  14 
  15 #endif /* !__ASSEMBLY__ */
  16 
  17 #ifdef CONFIG_PPC_BOOK3S
  18 #include <asm/book3s/pgtable.h>
  19 #else
  20 #include <asm/nohash/pgtable.h>
  21 #endif /* !CONFIG_PPC_BOOK3S */
  22 
  23 /* Note due to the way vm flags are laid out, the bits are XWR */
  24 #define __P000  PAGE_NONE
  25 #define __P001  PAGE_READONLY
  26 #define __P010  PAGE_COPY
  27 #define __P011  PAGE_COPY
  28 #define __P100  PAGE_READONLY_X
  29 #define __P101  PAGE_READONLY_X
  30 #define __P110  PAGE_COPY_X
  31 #define __P111  PAGE_COPY_X
  32 
  33 #define __S000  PAGE_NONE
  34 #define __S001  PAGE_READONLY
  35 #define __S010  PAGE_SHARED
  36 #define __S011  PAGE_SHARED
  37 #define __S100  PAGE_READONLY_X
  38 #define __S101  PAGE_READONLY_X
  39 #define __S110  PAGE_SHARED_X
  40 #define __S111  PAGE_SHARED_X
  41 
  42 #ifndef __ASSEMBLY__
  43 
  44 #include <asm/tlbflush.h>
  45 
  46 /* Keep these as a macros to avoid include dependency mess */
  47 #define pte_page(x)             pfn_to_page(pte_pfn(x))
  48 #define mk_pte(page, pgprot)    pfn_pte(page_to_pfn(page), (pgprot))
  49 /*
  50  * Select all bits except the pfn
  51  */
  52 static inline pgprot_t pte_pgprot(pte_t pte)
  53 {
  54         unsigned long pte_flags;
  55 
  56         pte_flags = pte_val(pte) & ~PTE_RPN_MASK;
  57         return __pgprot(pte_flags);
  58 }
  59 
  60 /*
  61  * ZERO_PAGE is a global shared page that is always zero: used
  62  * for zero-mapped memory areas etc..
  63  */
  64 extern unsigned long empty_zero_page[];
  65 #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
  66 
  67 extern pgd_t swapper_pg_dir[];
  68 
  69 extern void paging_init(void);
  70 
  71 extern unsigned long ioremap_bot;
  72 
  73 /*
  74  * kern_addr_valid is intended to indicate whether an address is a valid
  75  * kernel address.  Most 32-bit archs define it as always true (like this)
  76  * but most 64-bit archs actually perform a test.  What should we do here?
  77  */
  78 #define kern_addr_valid(addr)   (1)
  79 
  80 #include <asm-generic/pgtable.h>
  81 
  82 #ifndef CONFIG_TRANSPARENT_HUGEPAGE
  83 #define pmd_large(pmd)          0
  84 #endif
  85 
  86 /* can we use this in kvm */
  87 unsigned long vmalloc_to_phys(void *vmalloc_addr);
  88 
  89 void pgtable_cache_add(unsigned int shift);
  90 
  91 #if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_PPC32)
  92 void mark_initmem_nx(void);
  93 #else
  94 static inline void mark_initmem_nx(void) { }
  95 #endif
  96 
  97 #ifdef CONFIG_PPC_DEBUG_WX
  98 void ptdump_check_wx(void);
  99 #else
 100 static inline void ptdump_check_wx(void) { }
 101 #endif
 102 
 103 /*
 104  * When used, PTE_FRAG_NR is defined in subarch pgtable.h
 105  * so we are sure it is included when arriving here.
 106  */
 107 #ifdef PTE_FRAG_NR
 108 static inline void *pte_frag_get(mm_context_t *ctx)
 109 {
 110         return ctx->pte_frag;
 111 }
 112 
 113 static inline void pte_frag_set(mm_context_t *ctx, void *p)
 114 {
 115         ctx->pte_frag = p;
 116 }
 117 #else
 118 #define PTE_FRAG_NR             1
 119 #define PTE_FRAG_SIZE_SHIFT     PAGE_SHIFT
 120 #define PTE_FRAG_SIZE           (1UL << PTE_FRAG_SIZE_SHIFT)
 121 
 122 static inline void *pte_frag_get(mm_context_t *ctx)
 123 {
 124         return NULL;
 125 }
 126 
 127 static inline void pte_frag_set(mm_context_t *ctx, void *p)
 128 {
 129 }
 130 #endif
 131 
 132 #ifndef pmd_is_leaf
 133 #define pmd_is_leaf pmd_is_leaf
 134 static inline bool pmd_is_leaf(pmd_t pmd)
 135 {
 136         return false;
 137 }
 138 #endif
 139 
 140 #ifndef pud_is_leaf
 141 #define pud_is_leaf pud_is_leaf
 142 static inline bool pud_is_leaf(pud_t pud)
 143 {
 144         return false;
 145 }
 146 #endif
 147 
 148 #ifndef pgd_is_leaf
 149 #define pgd_is_leaf pgd_is_leaf
 150 static inline bool pgd_is_leaf(pgd_t pgd)
 151 {
 152         return false;
 153 }
 154 #endif
 155 
 156 #ifdef CONFIG_PPC64
 157 #define is_ioremap_addr is_ioremap_addr
 158 static inline bool is_ioremap_addr(const void *x)
 159 {
 160 #ifdef CONFIG_MMU
 161         unsigned long addr = (unsigned long)x;
 162 
 163         return addr >= IOREMAP_BASE && addr < IOREMAP_END;
 164 #else
 165         return false;
 166 #endif
 167 }
 168 #endif /* CONFIG_PPC64 */
 169 
 170 #endif /* __ASSEMBLY__ */
 171 
 172 #endif /* _ASM_POWERPC_PGTABLE_H */

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