GNU Linux-libre 4.19.286-gnu1
[releases.git] / drivers / acpi / acpica / rsmemory.c
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 };