Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 77b2555b52a894a2e39a42e43d993df875c46a6a 177 lines 4.0 kB view raw
1/* 2 * linux/include/asm-arm/page.h 3 * 4 * Copyright (C) 1995-2003 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10#ifndef _ASMARM_PAGE_H 11#define _ASMARM_PAGE_H 12 13#include <linux/config.h> 14 15/* PAGE_SHIFT determines the page size */ 16#define PAGE_SHIFT 12 17#define PAGE_SIZE (1UL << PAGE_SHIFT) 18#define PAGE_MASK (~(PAGE_SIZE-1)) 19 20#ifdef __KERNEL__ 21 22/* to align the pointer to the (next) page boundary */ 23#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) 24 25#ifndef __ASSEMBLY__ 26 27#include <asm/glue.h> 28 29/* 30 * User Space Model 31 * ================ 32 * 33 * This section selects the correct set of functions for dealing with 34 * page-based copying and clearing for user space for the particular 35 * processor(s) we're building for. 36 * 37 * We have the following to choose from: 38 * v3 - ARMv3 39 * v4wt - ARMv4 with writethrough cache, without minicache 40 * v4wb - ARMv4 with writeback cache, without minicache 41 * v4_mc - ARMv4 with minicache 42 * xscale - Xscale 43 */ 44#undef _USER 45#undef MULTI_USER 46 47#ifdef CONFIG_CPU_COPY_V3 48# ifdef _USER 49# define MULTI_USER 1 50# else 51# define _USER v3 52# endif 53#endif 54 55#ifdef CONFIG_CPU_COPY_V4WT 56# ifdef _USER 57# define MULTI_USER 1 58# else 59# define _USER v4wt 60# endif 61#endif 62 63#ifdef CONFIG_CPU_COPY_V4WB 64# ifdef _USER 65# define MULTI_USER 1 66# else 67# define _USER v4wb 68# endif 69#endif 70 71#ifdef CONFIG_CPU_SA1100 72# ifdef _USER 73# define MULTI_USER 1 74# else 75# define _USER v4_mc 76# endif 77#endif 78 79#ifdef CONFIG_CPU_XSCALE 80# ifdef _USER 81# define MULTI_USER 1 82# else 83# define _USER xscale_mc 84# endif 85#endif 86 87#ifdef CONFIG_CPU_COPY_V6 88# define MULTI_USER 1 89#endif 90 91#if !defined(_USER) && !defined(MULTI_USER) 92#error Unknown user operations model 93#endif 94 95struct cpu_user_fns { 96 void (*cpu_clear_user_page)(void *p, unsigned long user); 97 void (*cpu_copy_user_page)(void *to, const void *from, 98 unsigned long user); 99}; 100 101#ifdef MULTI_USER 102extern struct cpu_user_fns cpu_user; 103 104#define __cpu_clear_user_page cpu_user.cpu_clear_user_page 105#define __cpu_copy_user_page cpu_user.cpu_copy_user_page 106 107#else 108 109#define __cpu_clear_user_page __glue(_USER,_clear_user_page) 110#define __cpu_copy_user_page __glue(_USER,_copy_user_page) 111 112extern void __cpu_clear_user_page(void *p, unsigned long user); 113extern void __cpu_copy_user_page(void *to, const void *from, 114 unsigned long user); 115#endif 116 117#define clear_user_page(addr,vaddr,pg) __cpu_clear_user_page(addr, vaddr) 118#define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr) 119 120#define clear_page(page) memzero((void *)(page), PAGE_SIZE) 121extern void copy_page(void *to, const void *from); 122 123#undef STRICT_MM_TYPECHECKS 124 125#ifdef STRICT_MM_TYPECHECKS 126/* 127 * These are used to make use of C type-checking.. 128 */ 129typedef struct { unsigned long pte; } pte_t; 130typedef struct { unsigned long pmd; } pmd_t; 131typedef struct { unsigned long pgd[2]; } pgd_t; 132typedef struct { unsigned long pgprot; } pgprot_t; 133 134#define pte_val(x) ((x).pte) 135#define pmd_val(x) ((x).pmd) 136#define pgd_val(x) ((x).pgd[0]) 137#define pgprot_val(x) ((x).pgprot) 138 139#define __pte(x) ((pte_t) { (x) } ) 140#define __pmd(x) ((pmd_t) { (x) } ) 141#define __pgprot(x) ((pgprot_t) { (x) } ) 142 143#else 144/* 145 * .. while these make it easier on the compiler 146 */ 147typedef unsigned long pte_t; 148typedef unsigned long pmd_t; 149typedef unsigned long pgd_t[2]; 150typedef unsigned long pgprot_t; 151 152#define pte_val(x) (x) 153#define pmd_val(x) (x) 154#define pgd_val(x) ((x)[0]) 155#define pgprot_val(x) (x) 156 157#define __pte(x) (x) 158#define __pmd(x) (x) 159#define __pgprot(x) (x) 160 161#endif /* STRICT_MM_TYPECHECKS */ 162 163/* the upper-most page table pointer */ 164extern pmd_t *top_pmd; 165 166#include <asm/memory.h> 167 168#endif /* !__ASSEMBLY__ */ 169 170#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 171 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 172 173#endif /* __KERNEL__ */ 174 175#include <asm-generic/page.h> 176 177#endif