pgtable-hwdef.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * arch/arm/include/asm/pgtable-hwdef.h
  3. *
  4. * Copyright (C) 1995-2002 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_PGTABLE_HWDEF_H
  11. #define _ASMARM_PGTABLE_HWDEF_H
  12. /*
  13. * Hardware page table definitions.
  14. *
  15. * + Level 1 descriptor (PMD)
  16. * - common
  17. */
  18. #define PMD_TYPE_MASK (3 << 0)
  19. #define PMD_TYPE_FAULT (0 << 0)
  20. #define PMD_TYPE_TABLE (1 << 0)
  21. #define PMD_TYPE_SECT (2 << 0)
  22. #define PMD_BIT4 (1 << 4)
  23. #define PMD_DOMAIN(x) ((x) << 5)
  24. #define PMD_PROTECTION (1 << 9) /* v5 */
  25. /*
  26. * - section
  27. */
  28. #define PMD_SECT_BUFFERABLE (1 << 2)
  29. #define PMD_SECT_CACHEABLE (1 << 3)
  30. #define PMD_SECT_XN (1 << 4) /* v6 */
  31. #define PMD_SECT_AP_WRITE (1 << 10)
  32. #define PMD_SECT_AP_READ (1 << 11)
  33. #define PMD_SECT_TEX(x) ((x) << 12) /* v5 */
  34. #define PMD_SECT_APX (1 << 15) /* v6 */
  35. #define PMD_SECT_S (1 << 16) /* v6 */
  36. #define PMD_SECT_nG (1 << 17) /* v6 */
  37. #define PMD_SECT_SUPER (1 << 18) /* v6 */
  38. #define PMD_SECT_UNCACHED (0)
  39. #define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE)
  40. #define PMD_SECT_WT (PMD_SECT_CACHEABLE)
  41. #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
  42. #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE)
  43. #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
  44. #define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2))
  45. /*
  46. * - coarse table (not used)
  47. */
  48. /*
  49. * + Level 2 descriptor (PTE)
  50. * - common
  51. */
  52. #define PTE_TYPE_MASK (3 << 0)
  53. #define PTE_TYPE_FAULT (0 << 0)
  54. #define PTE_TYPE_LARGE (1 << 0)
  55. #define PTE_TYPE_SMALL (2 << 0)
  56. #define PTE_TYPE_EXT (3 << 0) /* v5 */
  57. #define PTE_BUFFERABLE (1 << 2)
  58. #define PTE_CACHEABLE (1 << 3)
  59. /*
  60. * - extended small page/tiny page
  61. */
  62. #define PTE_EXT_XN (1 << 0) /* v6 */
  63. #define PTE_EXT_AP_MASK (3 << 4)
  64. #define PTE_EXT_AP0 (1 << 4)
  65. #define PTE_EXT_AP1 (2 << 4)
  66. #define PTE_EXT_AP_UNO_SRO (0 << 4)
  67. #define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0)
  68. #define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1)
  69. #define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0)
  70. #define PTE_EXT_TEX(x) ((x) << 6) /* v5 */
  71. #define PTE_EXT_APX (1 << 9) /* v6 */
  72. #define PTE_EXT_COHERENT (1 << 9) /* XScale3 */
  73. #define PTE_EXT_SHARED (1 << 10) /* v6 */
  74. #define PTE_EXT_NG (1 << 11) /* v6 */
  75. /*
  76. * - small page
  77. */
  78. #define PTE_SMALL_AP_MASK (0xff << 4)
  79. #define PTE_SMALL_AP_UNO_SRO (0x00 << 4)
  80. #define PTE_SMALL_AP_UNO_SRW (0x55 << 4)
  81. #define PTE_SMALL_AP_URO_SRW (0xaa << 4)
  82. #define PTE_SMALL_AP_URW_SRW (0xff << 4)
  83. #endif