~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/include/asm/pgtable_mm.h

Version: ~ [ linux-5.16 ] ~ [ linux-5.15.13 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.90 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.170 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.224 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.261 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.296 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.298 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _M68K_PGTABLE_H
  3 #define _M68K_PGTABLE_H
  4 
  5 
  6 #if defined(CONFIG_SUN3) || defined(CONFIG_COLDFIRE)
  7 #include <asm-generic/pgtable-nopmd.h>
  8 #else
  9 #include <asm-generic/pgtable-nopud.h>
 10 #endif
 11 
 12 #include <asm/setup.h>
 13 
 14 #ifndef __ASSEMBLY__
 15 #include <asm/processor.h>
 16 #include <linux/sched.h>
 17 #include <linux/threads.h>
 18 
 19 /*
 20  * This file contains the functions and defines necessary to modify and use
 21  * the m68k page table tree.
 22  */
 23 
 24 #include <asm/virtconvert.h>
 25 
 26 /* Certain architectures need to do special things when pte's
 27  * within a page table are directly modified.  Thus, the following
 28  * hook is made available.
 29  */
 30 #define set_pte(pteptr, pteval)                                 \
 31         do{                                                     \
 32                 *(pteptr) = (pteval);                           \
 33         } while(0)
 34 #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
 35 
 36 
 37 /* PMD_SHIFT determines the size of the area a second-level page table can map */
 38 #if CONFIG_PGTABLE_LEVELS == 3
 39 #define PMD_SHIFT       18
 40 #endif
 41 #define PMD_SIZE        (1UL << PMD_SHIFT)
 42 #define PMD_MASK        (~(PMD_SIZE-1))
 43 
 44 /* PGDIR_SHIFT determines what a third-level page table entry can map */
 45 #ifdef CONFIG_SUN3
 46 #define PGDIR_SHIFT     17
 47 #elif defined(CONFIG_COLDFIRE)
 48 #define PGDIR_SHIFT     22
 49 #else
 50 #define PGDIR_SHIFT     25
 51 #endif
 52 #define PGDIR_SIZE      (1UL << PGDIR_SHIFT)
 53 #define PGDIR_MASK      (~(PGDIR_SIZE-1))
 54 
 55 /*
 56  * entries per page directory level: the m68k is configured as three-level,
 57  * so we do have PMD level physically.
 58  */
 59 #ifdef CONFIG_SUN3
 60 #define PTRS_PER_PTE   16
 61 #define __PAGETABLE_PMD_FOLDED 1
 62 #define PTRS_PER_PMD   1
 63 #define PTRS_PER_PGD   2048
 64 #elif defined(CONFIG_COLDFIRE)
 65 #define PTRS_PER_PTE    512
 66 #define __PAGETABLE_PMD_FOLDED 1
 67 #define PTRS_PER_PMD    1
 68 #define PTRS_PER_PGD    1024
 69 #else
 70 #define PTRS_PER_PTE    64
 71 #define PTRS_PER_PMD    128
 72 #define PTRS_PER_PGD    128
 73 #endif
 74 #define USER_PTRS_PER_PGD       (TASK_SIZE/PGDIR_SIZE)
 75 
 76 /* Virtual address region for use by kernel_map() */
 77 #ifdef CONFIG_SUN3
 78 #define KMAP_START      0x0dc00000
 79 #define KMAP_END        0x0e000000
 80 #elif defined(CONFIG_COLDFIRE)
 81 #define KMAP_START      0xe0000000
 82 #define KMAP_END        0xf0000000
 83 #else
 84 #define KMAP_START      0xd0000000
 85 #define KMAP_END        0xf0000000
 86 #endif
 87 
 88 #ifdef CONFIG_SUN3
 89 extern unsigned long m68k_vmalloc_end;
 90 #define VMALLOC_START 0x0f800000
 91 #define VMALLOC_END m68k_vmalloc_end
 92 #elif defined(CONFIG_COLDFIRE)
 93 #define VMALLOC_START   0xd0000000
 94 #define VMALLOC_END     0xe0000000
 95 #else
 96 /* Just any arbitrary offset to the start of the vmalloc VM area: the
 97  * current 8MB value just means that there will be a 8MB "hole" after the
 98  * physical memory until the kernel virtual memory starts.  That means that
 99  * any out-of-bounds memory accesses will hopefully be caught.
100  * The vmalloc() routines leaves a hole of 4kB between each vmalloced
101  * area for the same reason. ;)
102  */
103 #define VMALLOC_OFFSET  (8*1024*1024)
104 #define VMALLOC_START (((unsigned long) high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
105 #define VMALLOC_END KMAP_START
106 #endif
107 
108 /* zero page used for uninitialized stuff */
109 extern void *empty_zero_page;
110 
111 /*
112  * ZERO_PAGE is a global shared page that is always zero: used
113  * for zero-mapped memory areas etc..
114  */
115 #define ZERO_PAGE(vaddr)        (virt_to_page(empty_zero_page))
116 
117 /* number of bits that fit into a memory pointer */
118 #define BITS_PER_PTR                    (8*sizeof(unsigned long))
119 
120 /* to align the pointer to a pointer address */
121 #define PTR_MASK                        (~(sizeof(void*)-1))
122 
123 /* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
124 /* 64-bit machines, beware!  SRB. */
125 #define SIZEOF_PTR_LOG2                        2
126 
127 extern void kernel_set_cachemode(void *addr, unsigned long size, int cmode);
128 
129 /*
130  * The m68k doesn't have any external MMU info: the kernel page
131  * tables contain all the necessary information.  The Sun3 does, but
132  * they are updated on demand.
133  */
134 static inline void update_mmu_cache(struct vm_area_struct *vma,
135                                     unsigned long address, pte_t *ptep)
136 {
137 }
138 
139 #endif /* !__ASSEMBLY__ */
140 
141 #define kern_addr_valid(addr)   (1)
142 
143 /* MMU-specific headers */
144 
145 #ifdef CONFIG_SUN3
146 #include <asm/sun3_pgtable.h>
147 #elif defined(CONFIG_COLDFIRE)
148 #include <asm/mcf_pgtable.h>
149 #else
150 #include <asm/motorola_pgtable.h>
151 #endif
152 
153 #ifndef __ASSEMBLY__
154 /*
155  * Macro to mark a page protection value as "uncacheable".
156  */
157 #ifdef CONFIG_COLDFIRE
158 # define pgprot_noncached(prot) (__pgprot(pgprot_val(prot) | CF_PAGE_NOCACHE))
159 #else
160 #ifdef SUN3_PAGE_NOCACHE
161 # define __SUN3_PAGE_NOCACHE    SUN3_PAGE_NOCACHE
162 #else
163 # define __SUN3_PAGE_NOCACHE    0
164 #endif
165 #define pgprot_noncached(prot)                                                  \
166         (MMU_IS_SUN3                                                            \
167          ? (__pgprot(pgprot_val(prot) | __SUN3_PAGE_NOCACHE))                   \
168          : ((MMU_IS_851 || MMU_IS_030)                                          \
169             ? (__pgprot(pgprot_val(prot) | _PAGE_NOCACHE030))                   \
170             : (MMU_IS_040 || MMU_IS_060)                                        \
171             ? (__pgprot((pgprot_val(prot) & _CACHEMASK040) | _PAGE_NOCACHE_S))  \
172             : (prot)))
173 
174 pgprot_t pgprot_dmacoherent(pgprot_t prot);
175 #define pgprot_dmacoherent(prot)        pgprot_dmacoherent(prot)
176 
177 #endif /* CONFIG_COLDFIRE */
178 #endif /* !__ASSEMBLY__ */
179 
180 #endif /* _M68K_PGTABLE_H */
181 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp