page.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * arch/arm/include/asm/page.h
  4. *
  5. * Copyright (C) 1995-2003 Russell King
  6. */
  7. #ifndef _ASMARM_PAGE_H
  8. #define _ASMARM_PAGE_H
  9. /* PAGE_SHIFT determines the page size */
  10. #define PAGE_SHIFT 12
  11. #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
  12. #define PAGE_MASK (~((1 << PAGE_SHIFT) - 1))
  13. #ifndef __ASSEMBLY__
  14. #ifndef CONFIG_MMU
  15. #include <asm/page-nommu.h>
  16. #else
  17. #include <asm/glue.h>
  18. /*
  19. * User Space Model
  20. * ================
  21. *
  22. * This section selects the correct set of functions for dealing with
  23. * page-based copying and clearing for user space for the particular
  24. * processor(s) we're building for.
  25. *
  26. * We have the following to choose from:
  27. * v4wt - ARMv4 with writethrough cache, without minicache
  28. * v4wb - ARMv4 with writeback cache, without minicache
  29. * v4_mc - ARMv4 with minicache
  30. * xscale - Xscale
  31. * xsc3 - XScalev3
  32. */
  33. #undef _USER
  34. #undef MULTI_USER
  35. #ifdef CONFIG_CPU_COPY_V4WT
  36. # ifdef _USER
  37. # define MULTI_USER 1
  38. # else
  39. # define _USER v4wt
  40. # endif
  41. #endif
  42. #ifdef CONFIG_CPU_COPY_V4WB
  43. # ifdef _USER
  44. # define MULTI_USER 1
  45. # else
  46. # define _USER v4wb
  47. # endif
  48. #endif
  49. #ifdef CONFIG_CPU_COPY_FEROCEON
  50. # ifdef _USER
  51. # define MULTI_USER 1
  52. # else
  53. # define _USER feroceon
  54. # endif
  55. #endif
  56. #ifdef CONFIG_CPU_COPY_FA
  57. # ifdef _USER
  58. # define MULTI_USER 1
  59. # else
  60. # define _USER fa
  61. # endif
  62. #endif
  63. #ifdef CONFIG_CPU_SA1100
  64. # ifdef _USER
  65. # define MULTI_USER 1
  66. # else
  67. # define _USER v4_mc
  68. # endif
  69. #endif
  70. #ifdef CONFIG_CPU_XSCALE
  71. # ifdef _USER
  72. # define MULTI_USER 1
  73. # else
  74. # define _USER xscale_mc
  75. # endif
  76. #endif
  77. #ifdef CONFIG_CPU_XSC3
  78. # ifdef _USER
  79. # define MULTI_USER 1
  80. # else
  81. # define _USER xsc3_mc
  82. # endif
  83. #endif
  84. #ifdef CONFIG_CPU_COPY_V6
  85. # define MULTI_USER 1
  86. #endif
  87. #if !defined(_USER) && !defined(MULTI_USER)
  88. #error Unknown user operations model
  89. #endif
  90. struct page;
  91. struct vm_area_struct;
  92. struct cpu_user_fns {
  93. void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr);
  94. void (*cpu_copy_user_highpage)(struct page *to, struct page *from,
  95. unsigned long vaddr, struct vm_area_struct *vma);
  96. };
  97. #ifdef MULTI_USER
  98. extern struct cpu_user_fns cpu_user;
  99. #define __cpu_clear_user_highpage cpu_user.cpu_clear_user_highpage
  100. #define __cpu_copy_user_highpage cpu_user.cpu_copy_user_highpage
  101. #else
  102. #define __cpu_clear_user_highpage __glue(_USER,_clear_user_highpage)
  103. #define __cpu_copy_user_highpage __glue(_USER,_copy_user_highpage)
  104. extern void __cpu_clear_user_highpage(struct page *page, unsigned long vaddr);
  105. extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
  106. unsigned long vaddr, struct vm_area_struct *vma);
  107. #endif
  108. #define clear_user_highpage(page,vaddr) \
  109. __cpu_clear_user_highpage(page, vaddr)
  110. #define __HAVE_ARCH_COPY_USER_HIGHPAGE
  111. #define copy_user_highpage(to,from,vaddr,vma) \
  112. __cpu_copy_user_highpage(to, from, vaddr, vma)
  113. #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
  114. extern void copy_page(void *to, const void *from);
  115. #ifdef CONFIG_KUSER_HELPERS
  116. #define __HAVE_ARCH_GATE_AREA 1
  117. #endif
  118. #ifdef CONFIG_ARM_LPAE
  119. #include <asm/pgtable-3level-types.h>
  120. #else
  121. #include <asm/pgtable-2level-types.h>
  122. #ifdef CONFIG_VMAP_STACK
  123. #define ARCH_PAGE_TABLE_SYNC_MASK PGTBL_PMD_MODIFIED
  124. #endif
  125. #endif
  126. #endif /* CONFIG_MMU */
  127. typedef struct page *pgtable_t;
  128. #ifdef CONFIG_HAVE_ARCH_PFN_VALID
  129. extern int pfn_valid(unsigned long);
  130. #endif
  131. #include <asm/memory.h>
  132. #endif /* !__ASSEMBLY__ */
  133. #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
  134. #include <asm-generic/getorder.h>
  135. #endif