page.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef _ASMARM_PAGE_H
  2. #define _ASMARM_PAGE_H
  3. #ifdef __KERNEL__
  4. #ifndef __ASSEMBLY__
  5. extern void __clear_user_page(void *p, unsigned long user);
  6. extern void __copy_user_page(void *to, const void *from, unsigned long user);
  7. extern void copy_page(void *to, const void *from);
  8. //FIXME these may be wrong on ARM26
  9. #define clear_user_page(addr,vaddr,pg) \
  10. do { \
  11. preempt_disable(); \
  12. __clear_user_page(addr, vaddr); \
  13. preempt_enable(); \
  14. } while (0)
  15. #define copy_user_page(to,from,vaddr,pg) \
  16. do { \
  17. preempt_disable(); \
  18. __copy_user_page(to, from, vaddr); \
  19. preempt_enable(); \
  20. } while (0)
  21. #define clear_page(page) memzero((void *)(page), PAGE_SIZE)
  22. #define copy_page(to, from) __copy_user_page(to, from, 0);
  23. #undef STRICT_MM_TYPECHECKS
  24. #ifdef STRICT_MM_TYPECHECKS
  25. /*
  26. * These are used to make use of C type-checking..
  27. */
  28. typedef struct { unsigned long pgd; } pgd_t;
  29. typedef struct { unsigned long pte; } pte_t;
  30. typedef struct { unsigned long pmd; } pmd_t;
  31. typedef struct { unsigned long pgprot; } pgprot_t;
  32. #define pgd_val(x) ((x).pgd)
  33. #define pte_val(x) ((x).pte)
  34. #define pmd_val(x) ((x).pmd)
  35. #define pgprot_val(x) ((x).pgprot)
  36. #define __pte(x) ((pte_t) { (x) } )
  37. #define __pmd(x) ((pmd_t) { (x) } )
  38. #define __pgprot(x) ((pgprot_t) { (x) } )
  39. #else
  40. /*
  41. * .. while these make it easier on the compiler
  42. */
  43. typedef unsigned long pgd_t;
  44. typedef unsigned long pte_t;
  45. typedef unsigned long pmd_t;
  46. typedef unsigned long pgprot_t;
  47. //FIXME - should these cast to unsigned long?
  48. #define pgd_val(x) (x)
  49. #define pte_val(x) (x)
  50. #define pmd_val(x) (x)
  51. #define pgprot_val(x) (x)
  52. #define __pte(x) (x)
  53. #define __pmd(x) (x)
  54. #define __pgprot(x) (x)
  55. #endif /* STRICT_MM_TYPECHECKS */
  56. #endif /* !__ASSEMBLY__ */
  57. #endif /* __KERNEL__ */
  58. /* PAGE_SHIFT determines the page size. This is configurable. */
  59. #if defined(CONFIG_PAGESIZE_16)
  60. #define PAGE_SHIFT 14 /* 16K */
  61. #else /* default */
  62. #define PAGE_SHIFT 15 /* 32K */
  63. #endif
  64. #define EXEC_PAGESIZE 32768
  65. #define PAGE_SIZE (1UL << PAGE_SHIFT)
  66. #define PAGE_MASK (~(PAGE_SIZE-1))
  67. /* to align the pointer to the (next) page boundary */
  68. #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  69. #ifdef __KERNEL__
  70. #ifndef __ASSEMBLY__
  71. #include <asm/memory.h>
  72. #endif /* !__ASSEMBLY__ */
  73. #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
  74. VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
  75. #endif /* __KERNEL__ */
  76. #include <asm-generic/page.h>
  77. #endif