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