root/arch/sparc/include/asm/page_64.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _SPARC64_PAGE_H
   3 #define _SPARC64_PAGE_H
   4 
   5 #include <linux/const.h>
   6 
   7 #define PAGE_SHIFT   13
   8 
   9 #define PAGE_SIZE    (_AC(1,UL) << PAGE_SHIFT)
  10 #define PAGE_MASK    (~(PAGE_SIZE-1))
  11 
  12 /* Flushing for D-cache alias handling is only needed if
  13  * the page size is smaller than 16K.
  14  */
  15 #if PAGE_SHIFT < 14
  16 #define DCACHE_ALIASING_POSSIBLE
  17 #endif
  18 
  19 #define HPAGE_SHIFT             23
  20 #define REAL_HPAGE_SHIFT        22
  21 #define HPAGE_16GB_SHIFT        34
  22 #define HPAGE_2GB_SHIFT         31
  23 #define HPAGE_256MB_SHIFT       28
  24 #define HPAGE_64K_SHIFT         16
  25 #define REAL_HPAGE_SIZE         (_AC(1,UL) << REAL_HPAGE_SHIFT)
  26 
  27 #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
  28 #define HPAGE_SIZE              (_AC(1,UL) << HPAGE_SHIFT)
  29 #define HPAGE_MASK              (~(HPAGE_SIZE - 1UL))
  30 #define HUGETLB_PAGE_ORDER      (HPAGE_SHIFT - PAGE_SHIFT)
  31 #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
  32 #define REAL_HPAGE_PER_HPAGE    (_AC(1,UL) << (HPAGE_SHIFT - REAL_HPAGE_SHIFT))
  33 #define HUGE_MAX_HSTATE         5
  34 #endif
  35 
  36 #ifndef __ASSEMBLY__
  37 
  38 #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
  39 struct pt_regs;
  40 void hugetlb_setup(struct pt_regs *regs);
  41 #endif
  42 
  43 #define WANT_PAGE_VIRTUAL
  44 
  45 void _clear_page(void *page);
  46 #define clear_page(X)   _clear_page((void *)(X))
  47 struct page;
  48 void clear_user_page(void *addr, unsigned long vaddr, struct page *page);
  49 #define copy_page(X,Y)  memcpy((void *)(X), (void *)(Y), PAGE_SIZE)
  50 void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *topage);
  51 #define __HAVE_ARCH_COPY_USER_HIGHPAGE
  52 struct vm_area_struct;
  53 void copy_user_highpage(struct page *to, struct page *from,
  54                         unsigned long vaddr, struct vm_area_struct *vma);
  55 #define __HAVE_ARCH_COPY_HIGHPAGE
  56 void copy_highpage(struct page *to, struct page *from);
  57 
  58 /* Unlike sparc32, sparc64's parameter passing API is more
  59  * sane in that structures which as small enough are passed
  60  * in registers instead of on the stack.  Thus, setting
  61  * STRICT_MM_TYPECHECKS does not generate worse code so
  62  * let's enable it to get the type checking.
  63  */
  64 
  65 #define STRICT_MM_TYPECHECKS
  66 
  67 #ifdef STRICT_MM_TYPECHECKS
  68 /* These are used to make use of C type-checking.. */
  69 typedef struct { unsigned long pte; } pte_t;
  70 typedef struct { unsigned long iopte; } iopte_t;
  71 typedef struct { unsigned long pmd; } pmd_t;
  72 typedef struct { unsigned long pud; } pud_t;
  73 typedef struct { unsigned long pgd; } pgd_t;
  74 typedef struct { unsigned long pgprot; } pgprot_t;
  75 
  76 #define pte_val(x)      ((x).pte)
  77 #define iopte_val(x)    ((x).iopte)
  78 #define pmd_val(x)      ((x).pmd)
  79 #define pud_val(x)      ((x).pud)
  80 #define pgd_val(x)      ((x).pgd)
  81 #define pgprot_val(x)   ((x).pgprot)
  82 
  83 #define __pte(x)        ((pte_t) { (x) } )
  84 #define __iopte(x)      ((iopte_t) { (x) } )
  85 #define __pmd(x)        ((pmd_t) { (x) } )
  86 #define __pud(x)        ((pud_t) { (x) } )
  87 #define __pgd(x)        ((pgd_t) { (x) } )
  88 #define __pgprot(x)     ((pgprot_t) { (x) } )
  89 
  90 #else
  91 /* .. while these make it easier on the compiler */
  92 typedef unsigned long pte_t;
  93 typedef unsigned long iopte_t;
  94 typedef unsigned long pmd_t;
  95 typedef unsigned long pud_t;
  96 typedef unsigned long pgd_t;
  97 typedef unsigned long pgprot_t;
  98 
  99 #define pte_val(x)      (x)
 100 #define iopte_val(x)    (x)
 101 #define pmd_val(x)      (x)
 102 #define pud_val(x)      (x)
 103 #define pgd_val(x)      (x)
 104 #define pgprot_val(x)   (x)
 105 
 106 #define __pte(x)        (x)
 107 #define __iopte(x)      (x)
 108 #define __pmd(x)        (x)
 109 #define __pud(x)        (x)
 110 #define __pgd(x)        (x)
 111 #define __pgprot(x)     (x)
 112 
 113 #endif /* (STRICT_MM_TYPECHECKS) */
 114 
 115 typedef pte_t *pgtable_t;
 116 
 117 extern unsigned long sparc64_va_hole_top;
 118 extern unsigned long sparc64_va_hole_bottom;
 119 
 120 /* The next two defines specify the actual exclusion region we
 121  * enforce, wherein we use a 4GB red zone on each side of the VA hole.
 122  */
 123 #define VA_EXCLUDE_START (sparc64_va_hole_bottom - (1UL << 32UL))
 124 #define VA_EXCLUDE_END   (sparc64_va_hole_top + (1UL << 32UL))
 125 
 126 #define TASK_UNMAPPED_BASE      (test_thread_flag(TIF_32BIT) ? \
 127                                  _AC(0x0000000070000000,UL) : \
 128                                  VA_EXCLUDE_END)
 129 
 130 #include <asm-generic/memory_model.h>
 131 
 132 extern unsigned long PAGE_OFFSET;
 133 
 134 #endif /* !(__ASSEMBLY__) */
 135 
 136 /* The maximum number of physical memory address bits we support.  The
 137  * largest value we can support is whatever "KPGD_SHIFT + KPTE_BITS"
 138  * evaluates to.
 139  */
 140 #define MAX_PHYS_ADDRESS_BITS   53
 141 
 142 #define ILOG2_4MB               22
 143 #define ILOG2_256MB             28
 144 
 145 #ifndef __ASSEMBLY__
 146 
 147 #define __pa(x)                 ((unsigned long)(x) - PAGE_OFFSET)
 148 #define __va(x)                 ((void *)((unsigned long) (x) + PAGE_OFFSET))
 149 
 150 #define pfn_to_kaddr(pfn)       __va((pfn) << PAGE_SHIFT)
 151 
 152 #define virt_to_page(kaddr)     pfn_to_page(__pa(kaddr)>>PAGE_SHIFT)
 153 
 154 #define virt_addr_valid(kaddr)  pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
 155 
 156 #define virt_to_phys __pa
 157 #define phys_to_virt __va
 158 
 159 #endif /* !(__ASSEMBLY__) */
 160 
 161 #define VM_DATA_DEFAULT_FLAGS   (VM_READ | VM_WRITE | VM_EXEC | \
 162                                  VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
 163 
 164 #include <asm-generic/getorder.h>
 165 
 166 #endif /* _SPARC64_PAGE_H */

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