14baa9922SRussell King /* 24baa9922SRussell King * arch/arm/include/asm/page.h 34baa9922SRussell King * 44baa9922SRussell King * Copyright (C) 1995-2003 Russell King 54baa9922SRussell King * 64baa9922SRussell King * This program is free software; you can redistribute it and/or modify 74baa9922SRussell King * it under the terms of the GNU General Public License version 2 as 84baa9922SRussell King * published by the Free Software Foundation. 94baa9922SRussell King */ 104baa9922SRussell King #ifndef _ASMARM_PAGE_H 114baa9922SRussell King #define _ASMARM_PAGE_H 124baa9922SRussell King 134baa9922SRussell King /* PAGE_SHIFT determines the page size */ 144baa9922SRussell King #define PAGE_SHIFT 12 15f6430a93SLinus Walleij #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) 16926edcc7SCyril Chemparathy #define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) 174baa9922SRussell King 184baa9922SRussell King #ifndef __ASSEMBLY__ 194baa9922SRussell King 204baa9922SRussell King #ifndef CONFIG_MMU 214baa9922SRussell King 22a1ce3928SDavid Howells #include <asm/page-nommu.h> 234baa9922SRussell King 244baa9922SRussell King #else 254baa9922SRussell King 264baa9922SRussell King #include <asm/glue.h> 274baa9922SRussell King 284baa9922SRussell King /* 294baa9922SRussell King * User Space Model 304baa9922SRussell King * ================ 314baa9922SRussell King * 324baa9922SRussell King * This section selects the correct set of functions for dealing with 334baa9922SRussell King * page-based copying and clearing for user space for the particular 344baa9922SRussell King * processor(s) we're building for. 354baa9922SRussell King * 364baa9922SRussell King * We have the following to choose from: 374baa9922SRussell King * v4wt - ARMv4 with writethrough cache, without minicache 384baa9922SRussell King * v4wb - ARMv4 with writeback cache, without minicache 394baa9922SRussell King * v4_mc - ARMv4 with minicache 404baa9922SRussell King * xscale - Xscale 414baa9922SRussell King * xsc3 - XScalev3 424baa9922SRussell King */ 434baa9922SRussell King #undef _USER 444baa9922SRussell King #undef MULTI_USER 454baa9922SRussell King 464baa9922SRussell King #ifdef CONFIG_CPU_COPY_V4WT 474baa9922SRussell King # ifdef _USER 484baa9922SRussell King # define MULTI_USER 1 494baa9922SRussell King # else 504baa9922SRussell King # define _USER v4wt 514baa9922SRussell King # endif 524baa9922SRussell King #endif 534baa9922SRussell King 544baa9922SRussell King #ifdef CONFIG_CPU_COPY_V4WB 554baa9922SRussell King # ifdef _USER 564baa9922SRussell King # define MULTI_USER 1 574baa9922SRussell King # else 584baa9922SRussell King # define _USER v4wb 594baa9922SRussell King # endif 604baa9922SRussell King #endif 614baa9922SRussell King 624baa9922SRussell King #ifdef CONFIG_CPU_COPY_FEROCEON 634baa9922SRussell King # ifdef _USER 644baa9922SRussell King # define MULTI_USER 1 654baa9922SRussell King # else 664baa9922SRussell King # define _USER feroceon 674baa9922SRussell King # endif 684baa9922SRussell King #endif 694baa9922SRussell King 7028853ac8SPaulius Zaleckas #ifdef CONFIG_CPU_COPY_FA 7128853ac8SPaulius Zaleckas # ifdef _USER 7228853ac8SPaulius Zaleckas # define MULTI_USER 1 7328853ac8SPaulius Zaleckas # else 7428853ac8SPaulius Zaleckas # define _USER fa 7528853ac8SPaulius Zaleckas # endif 7628853ac8SPaulius Zaleckas #endif 7728853ac8SPaulius Zaleckas 784baa9922SRussell King #ifdef CONFIG_CPU_SA1100 794baa9922SRussell King # ifdef _USER 804baa9922SRussell King # define MULTI_USER 1 814baa9922SRussell King # else 824baa9922SRussell King # define _USER v4_mc 834baa9922SRussell King # endif 844baa9922SRussell King #endif 854baa9922SRussell King 864baa9922SRussell King #ifdef CONFIG_CPU_XSCALE 874baa9922SRussell King # ifdef _USER 884baa9922SRussell King # define MULTI_USER 1 894baa9922SRussell King # else 904baa9922SRussell King # define _USER xscale_mc 914baa9922SRussell King # endif 924baa9922SRussell King #endif 934baa9922SRussell King 944baa9922SRussell King #ifdef CONFIG_CPU_XSC3 954baa9922SRussell King # ifdef _USER 964baa9922SRussell King # define MULTI_USER 1 974baa9922SRussell King # else 984baa9922SRussell King # define _USER xsc3_mc 994baa9922SRussell King # endif 1004baa9922SRussell King #endif 1014baa9922SRussell King 1024baa9922SRussell King #ifdef CONFIG_CPU_COPY_V6 1034baa9922SRussell King # define MULTI_USER 1 1044baa9922SRussell King #endif 1054baa9922SRussell King 1064baa9922SRussell King #if !defined(_USER) && !defined(MULTI_USER) 1074baa9922SRussell King #error Unknown user operations model 1084baa9922SRussell King #endif 1094baa9922SRussell King 110063b0a42SRussell King struct page; 111f00a75c0SRussell King struct vm_area_struct; 112063b0a42SRussell King 1134baa9922SRussell King struct cpu_user_fns { 114303c6443SRussell King void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr); 115063b0a42SRussell King void (*cpu_copy_user_highpage)(struct page *to, struct page *from, 116f00a75c0SRussell King unsigned long vaddr, struct vm_area_struct *vma); 1174baa9922SRussell King }; 1184baa9922SRussell King 1194baa9922SRussell King #ifdef MULTI_USER 1204baa9922SRussell King extern struct cpu_user_fns cpu_user; 1214baa9922SRussell King 122303c6443SRussell King #define __cpu_clear_user_highpage cpu_user.cpu_clear_user_highpage 123063b0a42SRussell King #define __cpu_copy_user_highpage cpu_user.cpu_copy_user_highpage 1244baa9922SRussell King 1254baa9922SRussell King #else 1264baa9922SRussell King 127303c6443SRussell King #define __cpu_clear_user_highpage __glue(_USER,_clear_user_highpage) 128063b0a42SRussell King #define __cpu_copy_user_highpage __glue(_USER,_copy_user_highpage) 1294baa9922SRussell King 130303c6443SRussell King extern void __cpu_clear_user_highpage(struct page *page, unsigned long vaddr); 131063b0a42SRussell King extern void __cpu_copy_user_highpage(struct page *to, struct page *from, 132f00a75c0SRussell King unsigned long vaddr, struct vm_area_struct *vma); 1334baa9922SRussell King #endif 1344baa9922SRussell King 135303c6443SRussell King #define clear_user_highpage(page,vaddr) \ 136303c6443SRussell King __cpu_clear_user_highpage(page, vaddr) 137063b0a42SRussell King 138063b0a42SRussell King #define __HAVE_ARCH_COPY_USER_HIGHPAGE 139063b0a42SRussell King #define copy_user_highpage(to,from,vaddr,vma) \ 140f00a75c0SRussell King __cpu_copy_user_highpage(to, from, vaddr, vma) 1414baa9922SRussell King 14259f0cb0fSRussell King #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) 1434baa9922SRussell King extern void copy_page(void *to, const void *from); 1444baa9922SRussell King 145*a5463cd3SRussell King #ifdef CONFIG_KUSER_HELPERS 146f9d4861fSWill Deacon #define __HAVE_ARCH_GATE_AREA 1 147*a5463cd3SRussell King #endif 148f9d4861fSWill Deacon 149dcfdae04SCatalin Marinas #ifdef CONFIG_ARM_LPAE 150dcfdae04SCatalin Marinas #include <asm/pgtable-3level-types.h> 151dcfdae04SCatalin Marinas #else 15217f57211SCatalin Marinas #include <asm/pgtable-2level-types.h> 153dcfdae04SCatalin Marinas #endif 1544baa9922SRussell King 1554baa9922SRussell King #endif /* CONFIG_MMU */ 1564baa9922SRussell King 1574baa9922SRussell King typedef struct page *pgtable_t; 1584baa9922SRussell King 1597b7bf499SWill Deacon #ifdef CONFIG_HAVE_ARCH_PFN_VALID 160b7cfda9fSRussell King extern int pfn_valid(unsigned long); 161b7cfda9fSRussell King #endif 162b7cfda9fSRussell King 1634baa9922SRussell King #include <asm/memory.h> 1644baa9922SRussell King 1654baa9922SRussell King #endif /* !__ASSEMBLY__ */ 1664baa9922SRussell King 1678ec53663SRussell King #define VM_DATA_DEFAULT_FLAGS \ 1688ec53663SRussell King (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 1698ec53663SRussell King VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 1704baa9922SRussell King 1715b17e1cdSArnd Bergmann #include <asm-generic/getorder.h> 1724baa9922SRussell King 1734baa9922SRussell King #endif 174