page.h (3533B)
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#ifdef CONFIG_VMAP_STACK 151#define ARCH_PAGE_TABLE_SYNC_MASK PGTBL_PMD_MODIFIED 152#endif 153#endif 154 155#endif /* CONFIG_MMU */ 156 157typedef struct page *pgtable_t; 158 159#ifdef CONFIG_HAVE_ARCH_PFN_VALID 160extern int pfn_valid(unsigned long); 161#endif 162 163#include <asm/memory.h> 164 165#endif /* !__ASSEMBLY__ */ 166 167#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 168 169#include <asm-generic/getorder.h> 170 171#endif