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