rsmemory.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
  2. /*******************************************************************************
  3. *
  4. * Module Name: rsmem24 - Memory resource descriptors
  5. *
  6. ******************************************************************************/
  7. #include <acpi/acpi.h>
  8. #include "accommon.h"
  9. #include "acresrc.h"
  10. #define _COMPONENT ACPI_RESOURCES
  11. ACPI_MODULE_NAME("rsmemory")
  12. /*******************************************************************************
  13. *
  14. * acpi_rs_convert_memory24
  15. *
  16. ******************************************************************************/
  17. struct acpi_rsconvert_info acpi_rs_convert_memory24[4] = {
  18. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24,
  19. ACPI_RS_SIZE(struct acpi_resource_memory24),
  20. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)},
  21. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24,
  22. sizeof(struct aml_resource_memory24),
  23. 0},
  24. /* Read/Write bit */
  25. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect),
  26. AML_OFFSET(memory24.flags),
  27. 0},
  28. /*
  29. * These fields are contiguous in both the source and destination:
  30. * Minimum Base Address
  31. * Maximum Base Address
  32. * Address Base Alignment
  33. * Range Length
  34. */
  35. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum),
  36. AML_OFFSET(memory24.minimum),
  37. 4}
  38. };
  39. /*******************************************************************************
  40. *
  41. * acpi_rs_convert_memory32
  42. *
  43. ******************************************************************************/
  44. struct acpi_rsconvert_info acpi_rs_convert_memory32[4] = {
  45. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32,
  46. ACPI_RS_SIZE(struct acpi_resource_memory32),
  47. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)},
  48. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32,
  49. sizeof(struct aml_resource_memory32),
  50. 0},
  51. /* Read/Write bit */
  52. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect),
  53. AML_OFFSET(memory32.flags),
  54. 0},
  55. /*
  56. * These fields are contiguous in both the source and destination:
  57. * Minimum Base Address
  58. * Maximum Base Address
  59. * Address Base Alignment
  60. * Range Length
  61. */
  62. {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum),
  63. AML_OFFSET(memory32.minimum),
  64. 4}
  65. };
  66. /*******************************************************************************
  67. *
  68. * acpi_rs_convert_fixed_memory32
  69. *
  70. ******************************************************************************/
  71. struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = {
  72. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32,
  73. ACPI_RS_SIZE(struct acpi_resource_fixed_memory32),
  74. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)},
  75. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32,
  76. sizeof(struct aml_resource_fixed_memory32),
  77. 0},
  78. /* Read/Write bit */
  79. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect),
  80. AML_OFFSET(fixed_memory32.flags),
  81. 0},
  82. /*
  83. * These fields are contiguous in both the source and destination:
  84. * Base Address
  85. * Range Length
  86. */
  87. {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address),
  88. AML_OFFSET(fixed_memory32.address),
  89. 2}
  90. };
  91. /*******************************************************************************
  92. *
  93. * acpi_rs_get_vendor_small
  94. *
  95. ******************************************************************************/
  96. struct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = {
  97. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
  98. ACPI_RS_SIZE(struct acpi_resource_vendor),
  99. ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)},
  100. /* Length of the vendor data (byte count) */
  101. {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  102. 0,
  103. sizeof(u8)},
  104. /* Vendor data */
  105. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  106. sizeof(struct aml_resource_small_header),
  107. 0}
  108. };
  109. /*******************************************************************************
  110. *
  111. * acpi_rs_get_vendor_large
  112. *
  113. ******************************************************************************/
  114. struct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = {
  115. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR,
  116. ACPI_RS_SIZE(struct acpi_resource_vendor),
  117. ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)},
  118. /* Length of the vendor data (byte count) */
  119. {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  120. 0,
  121. sizeof(u8)},
  122. /* Vendor data */
  123. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  124. sizeof(struct aml_resource_large_header),
  125. 0}
  126. };
  127. /*******************************************************************************
  128. *
  129. * acpi_rs_set_vendor
  130. *
  131. ******************************************************************************/
  132. struct acpi_rsconvert_info acpi_rs_set_vendor[7] = {
  133. /* Default is a small vendor descriptor */
  134. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL,
  135. sizeof(struct aml_resource_small_header),
  136. ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)},
  137. /* Get the length and copy the data */
  138. {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  139. 0,
  140. 0},
  141. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  142. sizeof(struct aml_resource_small_header),
  143. 0},
  144. /*
  145. * All done if the Vendor byte length is 7 or less, meaning that it will
  146. * fit within a small descriptor
  147. */
  148. {ACPI_RSC_EXIT_LE, 0, 0, 7},
  149. /* Must create a large vendor descriptor */
  150. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE,
  151. sizeof(struct aml_resource_large_header),
  152. 0},
  153. {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length),
  154. 0,
  155. 0},
  156. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]),
  157. sizeof(struct aml_resource_large_header),
  158. 0}
  159. };