home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / page.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.2 KB  |  193 lines

  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.  
  14. /* PAGE_SHIFT determines the page size */
  15. #define PAGE_SHIFT        12
  16. #define PAGE_SIZE        (1UL << PAGE_SHIFT)
  17. #define PAGE_MASK        (~(PAGE_SIZE-1))
  18.  
  19. #ifdef __KERNEL__
  20.  
  21. /* to align the pointer to the (next) page boundary */
  22. #define PAGE_ALIGN(addr)    (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  23.  
  24. #ifndef __ASSEMBLY__
  25.  
  26. #include <asm/glue.h>
  27.  
  28. /*
  29.  *    User Space Model
  30.  *    ================
  31.  *
  32.  *    This section selects the correct set of functions for dealing with
  33.  *    page-based copying and clearing for user space for the particular
  34.  *    processor(s) we're building for.
  35.  *
  36.  *    We have the following to choose from:
  37.  *      v3        - ARMv3
  38.  *      v4wt        - ARMv4 with writethrough cache, without minicache
  39.  *      v4wb        - ARMv4 with writeback cache, without minicache
  40.  *      v4_mc        - ARMv4 with minicache
  41.  *      xscale    - Xscale
  42.  *      xsc3        - XScalev3
  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_XSC3
  88. # ifdef _USER
  89. #  define MULTI_USER 1
  90. # else
  91. #  define _USER xsc3_mc
  92. # endif
  93. #endif
  94.  
  95. #ifdef CONFIG_CPU_COPY_V6
  96. # define MULTI_USER 1
  97. #endif
  98.  
  99. #if !defined(_USER) && !defined(MULTI_USER)
  100. #error Unknown user operations model
  101. #endif
  102.  
  103. struct cpu_user_fns {
  104.     void (*cpu_clear_user_page)(void *p, unsigned long user);
  105.     void (*cpu_copy_user_page)(void *to, const void *from,
  106.                    unsigned long user);
  107. };
  108.  
  109. #ifdef MULTI_USER
  110. extern struct cpu_user_fns cpu_user;
  111.  
  112. #define __cpu_clear_user_page    cpu_user.cpu_clear_user_page
  113. #define __cpu_copy_user_page    cpu_user.cpu_copy_user_page
  114.  
  115. #else
  116.  
  117. #define __cpu_clear_user_page    __glue(_USER,_clear_user_page)
  118. #define __cpu_copy_user_page    __glue(_USER,_copy_user_page)
  119.  
  120. extern void __cpu_clear_user_page(void *p, unsigned long user);
  121. extern void __cpu_copy_user_page(void *to, const void *from,
  122.                  unsigned long user);
  123. #endif
  124.  
  125. #define clear_user_page(addr,vaddr,pg)     __cpu_clear_user_page(addr, vaddr)
  126. #define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr)
  127.  
  128. #define clear_page(page)    memzero((void *)(page), PAGE_SIZE)
  129. extern void copy_page(void *to, const void *from);
  130.  
  131. #undef STRICT_MM_TYPECHECKS
  132.  
  133. #ifdef STRICT_MM_TYPECHECKS
  134. /*
  135.  * These are used to make use of C type-checking..
  136.  */
  137. typedef struct { unsigned long pte; } pte_t;
  138. typedef struct { unsigned long pmd; } pmd_t;
  139. typedef struct { unsigned long pgd[2]; } pgd_t;
  140. typedef struct { unsigned long pgprot; } pgprot_t;
  141.  
  142. #define pte_val(x)      ((x).pte)
  143. #define pmd_val(x)      ((x).pmd)
  144. #define pgd_val(x)    ((x).pgd[0])
  145. #define pgprot_val(x)   ((x).pgprot)
  146.  
  147. #define __pte(x)        ((pte_t) { (x) } )
  148. #define __pmd(x)        ((pmd_t) { (x) } )
  149. #define __pgprot(x)     ((pgprot_t) { (x) } )
  150.  
  151. #else
  152. /*
  153.  * .. while these make it easier on the compiler
  154.  */
  155. typedef unsigned long pte_t;
  156. typedef unsigned long pmd_t;
  157. typedef unsigned long pgd_t[2];
  158. typedef unsigned long pgprot_t;
  159.  
  160. #define pte_val(x)      (x)
  161. #define pmd_val(x)      (x)
  162. #define pgd_val(x)    ((x)[0])
  163. #define pgprot_val(x)   (x)
  164.  
  165. #define __pte(x)        (x)
  166. #define __pmd(x)        (x)
  167. #define __pgprot(x)     (x)
  168.  
  169. #endif /* STRICT_MM_TYPECHECKS */
  170.  
  171. /* the upper-most page table pointer */
  172. extern pmd_t *top_pmd;
  173.  
  174. #include <asm/memory.h>
  175.  
  176. #endif /* !__ASSEMBLY__ */
  177.  
  178. #define VM_DATA_DEFAULT_FLAGS    (VM_READ | VM_WRITE | VM_EXEC | \
  179.                  VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
  180.  
  181. /*
  182.  * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers.
  183.  */
  184. #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5)
  185. #define ARCH_SLAB_MINALIGN 8
  186. #endif
  187.  
  188. #endif /* __KERNEL__ */
  189.  
  190. #include <asm-generic/page.h>
  191.  
  192. #endif
  193.