book3s64.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * From split of dump_linuxpagetables.c
  4. * Copyright 2016, Rashmica Gupta, IBM Corp.
  5. *
  6. */
  7. #include <linux/kernel.h>
  8. #include <linux/pgtable.h>
  9. #include "ptdump.h"
  10. static const struct flag_info flag_array[] = {
  11. {
  12. .mask = _PAGE_PRIVILEGED,
  13. .val = 0,
  14. .set = "user",
  15. .clear = " ",
  16. }, {
  17. .mask = _PAGE_READ,
  18. .val = _PAGE_READ,
  19. .set = "r",
  20. .clear = " ",
  21. }, {
  22. .mask = _PAGE_WRITE,
  23. .val = _PAGE_WRITE,
  24. .set = "w",
  25. .clear = " ",
  26. }, {
  27. .mask = _PAGE_EXEC,
  28. .val = _PAGE_EXEC,
  29. .set = " X ",
  30. .clear = " ",
  31. }, {
  32. .mask = _PAGE_PTE,
  33. .val = _PAGE_PTE,
  34. .set = "pte",
  35. .clear = " ",
  36. }, {
  37. .mask = _PAGE_PRESENT,
  38. .val = _PAGE_PRESENT,
  39. .set = "valid",
  40. .clear = " ",
  41. }, {
  42. .mask = _PAGE_PRESENT | _PAGE_INVALID,
  43. .val = 0,
  44. .set = " ",
  45. .clear = "present",
  46. }, {
  47. .mask = H_PAGE_HASHPTE,
  48. .val = H_PAGE_HASHPTE,
  49. .set = "hpte",
  50. .clear = " ",
  51. }, {
  52. .mask = _PAGE_DIRTY,
  53. .val = _PAGE_DIRTY,
  54. .set = "dirty",
  55. .clear = " ",
  56. }, {
  57. .mask = _PAGE_ACCESSED,
  58. .val = _PAGE_ACCESSED,
  59. .set = "accessed",
  60. .clear = " ",
  61. }, {
  62. .mask = _PAGE_NON_IDEMPOTENT,
  63. .val = _PAGE_NON_IDEMPOTENT,
  64. .set = "non-idempotent",
  65. .clear = " ",
  66. }, {
  67. .mask = _PAGE_TOLERANT,
  68. .val = _PAGE_TOLERANT,
  69. .set = "tolerant",
  70. .clear = " ",
  71. }, {
  72. .mask = H_PAGE_BUSY,
  73. .val = H_PAGE_BUSY,
  74. .set = "busy",
  75. }, {
  76. #ifdef CONFIG_PPC_64K_PAGES
  77. .mask = H_PAGE_COMBO,
  78. .val = H_PAGE_COMBO,
  79. .set = "combo",
  80. }, {
  81. .mask = H_PAGE_4K_PFN,
  82. .val = H_PAGE_4K_PFN,
  83. .set = "4K_pfn",
  84. }, {
  85. #else /* CONFIG_PPC_64K_PAGES */
  86. .mask = H_PAGE_F_GIX,
  87. .val = H_PAGE_F_GIX,
  88. .set = "f_gix",
  89. .is_val = true,
  90. .shift = H_PAGE_F_GIX_SHIFT,
  91. }, {
  92. .mask = H_PAGE_F_SECOND,
  93. .val = H_PAGE_F_SECOND,
  94. .set = "f_second",
  95. }, {
  96. #endif /* CONFIG_PPC_64K_PAGES */
  97. .mask = _PAGE_SPECIAL,
  98. .val = _PAGE_SPECIAL,
  99. .set = "special",
  100. }
  101. };
  102. struct pgtable_level pg_level[5] = {
  103. { /* pgd */
  104. .flag = flag_array,
  105. .num = ARRAY_SIZE(flag_array),
  106. }, { /* p4d */
  107. .flag = flag_array,
  108. .num = ARRAY_SIZE(flag_array),
  109. }, { /* pud */
  110. .flag = flag_array,
  111. .num = ARRAY_SIZE(flag_array),
  112. }, { /* pmd */
  113. .flag = flag_array,
  114. .num = ARRAY_SIZE(flag_array),
  115. }, { /* pte */
  116. .flag = flag_array,
  117. .num = ARRAY_SIZE(flag_array),
  118. },
  119. };