page.h 2.5 KB

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