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 v2.6.17 193 lines 4.3 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 * xsc3 - XScalev3 44 */ 45#undef _USER 46#undef MULTI_USER 47 48#ifdef CONFIG_CPU_COPY_V3 49# ifdef _USER 50# define MULTI_USER 1 51# else 52# define _USER v3 53# endif 54#endif 55 56#ifdef CONFIG_CPU_COPY_V4WT 57# ifdef _USER 58# define MULTI_USER 1 59# else 60# define _USER v4wt 61# endif 62#endif 63 64#ifdef CONFIG_CPU_COPY_V4WB 65# ifdef _USER 66# define MULTI_USER 1 67# else 68# define _USER v4wb 69# endif 70#endif 71 72#ifdef CONFIG_CPU_SA1100 73# ifdef _USER 74# define MULTI_USER 1 75# else 76# define _USER v4_mc 77# endif 78#endif 79 80#ifdef CONFIG_CPU_XSCALE 81# ifdef _USER 82# define MULTI_USER 1 83# else 84# define _USER xscale_mc 85# endif 86#endif 87 88#ifdef CONFIG_CPU_XSC3 89# ifdef _USER 90# define MULTI_USER 1 91# else 92# define _USER xsc3_mc 93# endif 94#endif 95 96#ifdef CONFIG_CPU_COPY_V6 97# define MULTI_USER 1 98#endif 99 100#if !defined(_USER) && !defined(MULTI_USER) 101#error Unknown user operations model 102#endif 103 104struct cpu_user_fns { 105 void (*cpu_clear_user_page)(void *p, unsigned long user); 106 void (*cpu_copy_user_page)(void *to, const void *from, 107 unsigned long user); 108}; 109 110#ifdef MULTI_USER 111extern struct cpu_user_fns cpu_user; 112 113#define __cpu_clear_user_page cpu_user.cpu_clear_user_page 114#define __cpu_copy_user_page cpu_user.cpu_copy_user_page 115 116#else 117 118#define __cpu_clear_user_page __glue(_USER,_clear_user_page) 119#define __cpu_copy_user_page __glue(_USER,_copy_user_page) 120 121extern void __cpu_clear_user_page(void *p, unsigned long user); 122extern void __cpu_copy_user_page(void *to, const void *from, 123 unsigned long user); 124#endif 125 126#define clear_user_page(addr,vaddr,pg) __cpu_clear_user_page(addr, vaddr) 127#define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr) 128 129#define clear_page(page) memzero((void *)(page), PAGE_SIZE) 130extern void copy_page(void *to, const void *from); 131 132#undef STRICT_MM_TYPECHECKS 133 134#ifdef STRICT_MM_TYPECHECKS 135/* 136 * These are used to make use of C type-checking.. 137 */ 138typedef struct { unsigned long pte; } pte_t; 139typedef struct { unsigned long pmd; } pmd_t; 140typedef struct { unsigned long pgd[2]; } pgd_t; 141typedef struct { unsigned long pgprot; } pgprot_t; 142 143#define pte_val(x) ((x).pte) 144#define pmd_val(x) ((x).pmd) 145#define pgd_val(x) ((x).pgd[0]) 146#define pgprot_val(x) ((x).pgprot) 147 148#define __pte(x) ((pte_t) { (x) } ) 149#define __pmd(x) ((pmd_t) { (x) } ) 150#define __pgprot(x) ((pgprot_t) { (x) } ) 151 152#else 153/* 154 * .. while these make it easier on the compiler 155 */ 156typedef unsigned long pte_t; 157typedef unsigned long pmd_t; 158typedef unsigned long pgd_t[2]; 159typedef unsigned long pgprot_t; 160 161#define pte_val(x) (x) 162#define pmd_val(x) (x) 163#define pgd_val(x) ((x)[0]) 164#define pgprot_val(x) (x) 165 166#define __pte(x) (x) 167#define __pmd(x) (x) 168#define __pgprot(x) (x) 169 170#endif /* STRICT_MM_TYPECHECKS */ 171 172/* the upper-most page table pointer */ 173extern pmd_t *top_pmd; 174 175#include <asm/memory.h> 176 177#endif /* !__ASSEMBLY__ */ 178 179#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 180 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 181 182/* 183 * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. 184 */ 185#if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) 186#define ARCH_SLAB_MINALIGN 8 187#endif 188 189#endif /* __KERNEL__ */ 190 191#include <asm-generic/page.h> 192 193#endif