linux/arch/arm/include/asm/page.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 *  arch/arm/include/asm/page.h
   4 *
   5 *  Copyright (C) 1995-2003 Russell King
   6 */
   7#ifndef _ASMARM_PAGE_H
   8#define _ASMARM_PAGE_H
   9
  10/* PAGE_SHIFT determines the page size */
  11#define PAGE_SHIFT              12
  12#define PAGE_SIZE               (_AC(1,UL) << PAGE_SHIFT)
  13#define PAGE_MASK               (~((1 << PAGE_SHIFT) - 1))
  14
  15#ifndef __ASSEMBLY__
  16
  17#ifndef CONFIG_MMU
  18
  19#include <asm/page-nommu.h>
  20
  21#else
  22
  23#include <asm/glue.h>
  24
  25/*
  26 *      User Space Model
  27 *      ================
  28 *
  29 *      This section selects the correct set of functions for dealing with
  30 *      page-based copying and clearing for user space for the particular
  31 *      processor(s) we're building for.
  32 *
  33 *      We have the following to choose from:
  34 *        v4wt          - ARMv4 with writethrough cache, without minicache
  35 *        v4wb          - ARMv4 with writeback cache, without minicache
  36 *        v4_mc         - ARMv4 with minicache
  37 *        xscale        - Xscale
  38 *        xsc3          - XScalev3
  39 */
  40#undef _USER
  41#undef MULTI_USER
  42
  43#ifdef CONFIG_CPU_COPY_V4WT
  44# ifdef _USER
  45#  define MULTI_USER 1
  46# else
  47#  define _USER v4wt
  48# endif
  49#endif
  50
  51#ifdef CONFIG_CPU_COPY_V4WB
  52# ifdef _USER
  53#  define MULTI_USER 1
  54# else
  55#  define _USER v4wb
  56# endif
  57#endif
  58
  59#ifdef CONFIG_CPU_COPY_FEROCEON
  60# ifdef _USER
  61#  define MULTI_USER 1
  62# else
  63#  define _USER feroceon
  64# endif
  65#endif
  66
  67#ifdef CONFIG_CPU_COPY_FA
  68# ifdef _USER
  69#  define MULTI_USER 1
  70# else
  71#  define _USER fa
  72# endif
  73#endif
  74
  75#ifdef CONFIG_CPU_SA1100
  76# ifdef _USER
  77#  define MULTI_USER 1
  78# else
  79#  define _USER v4_mc
  80# endif
  81#endif
  82
  83#ifdef CONFIG_CPU_XSCALE
  84# ifdef _USER
  85#  define MULTI_USER 1
  86# else
  87#  define _USER xscale_mc
  88# endif
  89#endif
  90
  91#ifdef CONFIG_CPU_XSC3
  92# ifdef _USER
  93#  define MULTI_USER 1
  94# else
  95#  define _USER xsc3_mc
  96# endif
  97#endif
  98
  99#ifdef CONFIG_CPU_COPY_V6
 100# define MULTI_USER 1
 101#endif
 102
 103#if !defined(_USER) && !defined(MULTI_USER)
 104#error Unknown user operations model
 105#endif
 106
 107struct page;
 108struct vm_area_struct;
 109
 110struct cpu_user_fns {
 111        void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr);
 112        void (*cpu_copy_user_highpage)(struct page *to, struct page *from,
 113                        unsigned long vaddr, struct vm_area_struct *vma);
 114};
 115
 116#ifdef MULTI_USER
 117extern struct cpu_user_fns cpu_user;
 118
 119#define __cpu_clear_user_highpage       cpu_user.cpu_clear_user_highpage
 120#define __cpu_copy_user_highpage        cpu_user.cpu_copy_user_highpage
 121
 122#else
 123
 124#define __cpu_clear_user_highpage       __glue(_USER,_clear_user_highpage)
 125#define __cpu_copy_user_highpage        __glue(_USER,_copy_user_highpage)
 126
 127extern void __cpu_clear_user_highpage(struct page *page, unsigned long vaddr);
 128extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
 129                        unsigned long vaddr, struct vm_area_struct *vma);
 130#endif
 131
 132#define clear_user_highpage(page,vaddr)         \
 133         __cpu_clear_user_highpage(page, vaddr)
 134
 135#define __HAVE_ARCH_COPY_USER_HIGHPAGE
 136#define copy_user_highpage(to,from,vaddr,vma)   \
 137        __cpu_copy_user_highpage(to, from, vaddr, vma)
 138
 139#define clear_page(page)        memset((void *)(page), 0, PAGE_SIZE)
 140extern void copy_page(void *to, const void *from);
 141
 142#ifdef CONFIG_KUSER_HELPERS
 143#define __HAVE_ARCH_GATE_AREA 1
 144#endif
 145
 146#ifdef CONFIG_ARM_LPAE
 147#include <asm/pgtable-3level-types.h>
 148#else
 149#include <asm/pgtable-2level-types.h>
 150#endif
 151
 152#endif /* CONFIG_MMU */
 153
 154typedef struct page *pgtable_t;
 155
 156#ifdef CONFIG_HAVE_ARCH_PFN_VALID
 157extern int pfn_valid(unsigned long);
 158#endif
 159
 160#include <asm/memory.h>
 161
 162#endif /* !__ASSEMBLY__ */
 163
 164#define VM_DATA_DEFAULT_FLAGS \
 165        (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \
 166         VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
 167
 168#include <asm-generic/getorder.h>
 169
 170#endif
 171