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 | |