1 | // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 |
2 | /******************************************************************************* |
3 | * |
4 | * Module Name: rsserial - GPIO/serial_bus 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("rsserial" ) |
14 | |
15 | /******************************************************************************* |
16 | * |
17 | * acpi_rs_convert_gpio |
18 | * |
19 | ******************************************************************************/ |
20 | struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = { |
21 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO, |
22 | ACPI_RS_SIZE(struct acpi_resource_gpio), |
23 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)}, |
24 | |
25 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO, |
26 | sizeof(struct aml_resource_gpio), |
27 | 0}, |
28 | |
29 | /* |
30 | * These fields are contiguous in both the source and destination: |
31 | * revision_id |
32 | * connection_type |
33 | */ |
34 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id), |
35 | AML_OFFSET(gpio.revision_id), |
36 | 2}, |
37 | |
38 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer), |
39 | AML_OFFSET(gpio.flags), |
40 | 0}, |
41 | |
42 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.shareable), |
43 | AML_OFFSET(gpio.int_flags), |
44 | 3}, |
45 | |
46 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable), |
47 | AML_OFFSET(gpio.int_flags), |
48 | 4}, |
49 | |
50 | {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction), |
51 | AML_OFFSET(gpio.int_flags), |
52 | 0}, |
53 | |
54 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering), |
55 | AML_OFFSET(gpio.int_flags), |
56 | 0}, |
57 | |
58 | {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity), |
59 | AML_OFFSET(gpio.int_flags), |
60 | 1}, |
61 | |
62 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config), |
63 | AML_OFFSET(gpio.pin_config), |
64 | 1}, |
65 | |
66 | /* |
67 | * These fields are contiguous in both the source and destination: |
68 | * drive_strength |
69 | * debounce_timeout |
70 | */ |
71 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength), |
72 | AML_OFFSET(gpio.drive_strength), |
73 | 2}, |
74 | |
75 | /* Pin Table */ |
76 | |
77 | {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length), |
78 | AML_OFFSET(gpio.pin_table_offset), |
79 | AML_OFFSET(gpio.res_source_offset)}, |
80 | |
81 | {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table), |
82 | AML_OFFSET(gpio.pin_table_offset), |
83 | 0}, |
84 | |
85 | /* Resource Source */ |
86 | |
87 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index), |
88 | AML_OFFSET(gpio.res_source_index), |
89 | 1}, |
90 | |
91 | {ACPI_RSC_COUNT_GPIO_RES, |
92 | ACPI_RS_OFFSET(data.gpio.resource_source.string_length), |
93 | AML_OFFSET(gpio.res_source_offset), |
94 | AML_OFFSET(gpio.vendor_offset)}, |
95 | |
96 | {ACPI_RSC_MOVE_GPIO_RES, |
97 | ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr), |
98 | AML_OFFSET(gpio.res_source_offset), |
99 | 0}, |
100 | |
101 | /* Vendor Data */ |
102 | |
103 | {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length), |
104 | AML_OFFSET(gpio.vendor_length), |
105 | 1}, |
106 | |
107 | {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data), |
108 | AML_OFFSET(gpio.vendor_offset), |
109 | 0}, |
110 | }; |
111 | |
112 | /******************************************************************************* |
113 | * |
114 | * acpi_rs_convert_clock_input |
115 | * |
116 | ******************************************************************************/ |
117 | |
118 | struct acpi_rsconvert_info acpi_rs_convert_clock_input[8] = { |
119 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_CLOCK_INPUT, |
120 | ACPI_RS_SIZE(struct acpi_resource_clock_input), |
121 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_clock_input)}, |
122 | |
123 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_CLOCK_INPUT, |
124 | sizeof(struct aml_resource_clock_input), |
125 | 0} |
126 | , |
127 | |
128 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.clock_input.revision_id), |
129 | AML_OFFSET(clock_input.revision_id), |
130 | 1} |
131 | , |
132 | |
133 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.clock_input.mode), |
134 | AML_OFFSET(clock_input.flags), |
135 | 0} |
136 | , |
137 | |
138 | {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.clock_input.scale), |
139 | AML_OFFSET(clock_input.flags), |
140 | 1} |
141 | , |
142 | |
143 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.clock_input.frequency_divisor), |
144 | AML_OFFSET(clock_input.frequency_divisor), |
145 | 2} |
146 | , |
147 | |
148 | {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.clock_input.frequency_numerator), |
149 | AML_OFFSET(clock_input.frequency_numerator), |
150 | 4} |
151 | , |
152 | |
153 | /* Resource Source */ |
154 | {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.clock_input.resource_source), |
155 | 0, |
156 | sizeof(struct aml_resource_clock_input)} |
157 | , |
158 | |
159 | }; |
160 | |
161 | /******************************************************************************* |
162 | * |
163 | * acpi_rs_convert_pinfunction |
164 | * |
165 | ******************************************************************************/ |
166 | |
167 | struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = { |
168 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION, |
169 | ACPI_RS_SIZE(struct acpi_resource_pin_function), |
170 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)}, |
171 | |
172 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION, |
173 | sizeof(struct aml_resource_pin_function), |
174 | 0}, |
175 | |
176 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id), |
177 | AML_OFFSET(pin_function.revision_id), |
178 | 1}, |
179 | |
180 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.shareable), |
181 | AML_OFFSET(pin_function.flags), |
182 | 0}, |
183 | |
184 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config), |
185 | AML_OFFSET(pin_function.pin_config), |
186 | 1}, |
187 | |
188 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number), |
189 | AML_OFFSET(pin_function.function_number), |
190 | 2}, |
191 | |
192 | /* Pin Table */ |
193 | |
194 | /* |
195 | * It is OK to use GPIO operations here because none of them refer GPIO |
196 | * structures directly but instead use offsets given here. |
197 | */ |
198 | |
199 | {ACPI_RSC_COUNT_GPIO_PIN, |
200 | ACPI_RS_OFFSET(data.pin_function.pin_table_length), |
201 | AML_OFFSET(pin_function.pin_table_offset), |
202 | AML_OFFSET(pin_function.res_source_offset)}, |
203 | |
204 | {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table), |
205 | AML_OFFSET(pin_function.pin_table_offset), |
206 | 0}, |
207 | |
208 | /* Resource Source */ |
209 | |
210 | {ACPI_RSC_MOVE8, |
211 | ACPI_RS_OFFSET(data.pin_function.resource_source.index), |
212 | AML_OFFSET(pin_function.res_source_index), |
213 | 1}, |
214 | |
215 | {ACPI_RSC_COUNT_GPIO_RES, |
216 | ACPI_RS_OFFSET(data.pin_function.resource_source.string_length), |
217 | AML_OFFSET(pin_function.res_source_offset), |
218 | AML_OFFSET(pin_function.vendor_offset)}, |
219 | |
220 | {ACPI_RSC_MOVE_GPIO_RES, |
221 | ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr), |
222 | AML_OFFSET(pin_function.res_source_offset), |
223 | 0}, |
224 | |
225 | /* Vendor Data */ |
226 | |
227 | {ACPI_RSC_COUNT_GPIO_VEN, |
228 | ACPI_RS_OFFSET(data.pin_function.vendor_length), |
229 | AML_OFFSET(pin_function.vendor_length), |
230 | 1}, |
231 | |
232 | {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data), |
233 | AML_OFFSET(pin_function.vendor_offset), |
234 | 0}, |
235 | }; |
236 | |
237 | /******************************************************************************* |
238 | * |
239 | * acpi_rs_convert_csi2_serial_bus |
240 | * |
241 | ******************************************************************************/ |
242 | |
243 | struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[14] = { |
244 | { ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, |
245 | ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus), |
246 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_csi2_serial_bus) }, |
247 | |
248 | { ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, |
249 | sizeof(struct aml_resource_csi2_serialbus), |
250 | 0 }, |
251 | |
252 | { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), |
253 | AML_OFFSET(common_serial_bus.revision_id), |
254 | 1 }, |
255 | |
256 | { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type), |
257 | AML_OFFSET(csi2_serial_bus.type), |
258 | 1 }, |
259 | |
260 | { ACPI_RSC_1BITFLAG, |
261 | ACPI_RS_OFFSET(data.csi2_serial_bus.producer_consumer), |
262 | AML_OFFSET(csi2_serial_bus.flags), |
263 | 1 }, |
264 | |
265 | { ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.slave_mode), |
266 | AML_OFFSET(csi2_serial_bus.flags), |
267 | 0 }, |
268 | |
269 | { ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.phy_type), |
270 | AML_OFFSET(csi2_serial_bus.type_specific_flags), |
271 | 0 }, |
272 | |
273 | { ACPI_RSC_6BITFLAG, |
274 | ACPI_RS_OFFSET(data.csi2_serial_bus.local_port_instance), |
275 | AML_OFFSET(csi2_serial_bus.type_specific_flags), |
276 | 2 }, |
277 | |
278 | { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type_revision_id), |
279 | AML_OFFSET(csi2_serial_bus.type_revision_id), |
280 | 1 }, |
281 | |
282 | /* Vendor data */ |
283 | |
284 | { ACPI_RSC_COUNT_SERIAL_VEN, |
285 | ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_length), |
286 | AML_OFFSET(csi2_serial_bus.type_data_length), |
287 | AML_RESOURCE_CSI2_MIN_DATA_LEN }, |
288 | |
289 | { ACPI_RSC_MOVE_SERIAL_VEN, |
290 | ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_data), |
291 | 0, |
292 | sizeof(struct aml_resource_csi2_serialbus) }, |
293 | |
294 | /* Resource Source */ |
295 | |
296 | { ACPI_RSC_MOVE8, |
297 | ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.index), |
298 | AML_OFFSET(csi2_serial_bus.res_source_index), |
299 | 1 }, |
300 | |
301 | { ACPI_RSC_COUNT_SERIAL_RES, |
302 | ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_length), |
303 | AML_OFFSET(csi2_serial_bus.type_data_length), |
304 | sizeof(struct aml_resource_csi2_serialbus) }, |
305 | |
306 | { ACPI_RSC_MOVE_SERIAL_RES, |
307 | ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_ptr), |
308 | AML_OFFSET(csi2_serial_bus.type_data_length), |
309 | sizeof(struct aml_resource_csi2_serialbus) }, |
310 | }; |
311 | |
312 | /******************************************************************************* |
313 | * |
314 | * acpi_rs_convert_i2c_serial_bus |
315 | * |
316 | ******************************************************************************/ |
317 | |
318 | struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = { |
319 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, |
320 | ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus), |
321 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)}, |
322 | |
323 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, |
324 | sizeof(struct aml_resource_i2c_serialbus), |
325 | 0}, |
326 | |
327 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), |
328 | AML_OFFSET(common_serial_bus.revision_id), |
329 | 1}, |
330 | |
331 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), |
332 | AML_OFFSET(common_serial_bus.type), |
333 | 1}, |
334 | |
335 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), |
336 | AML_OFFSET(common_serial_bus.flags), |
337 | 0}, |
338 | |
339 | {ACPI_RSC_1BITFLAG, |
340 | ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), |
341 | AML_OFFSET(common_serial_bus.flags), |
342 | 1}, |
343 | |
344 | {ACPI_RSC_1BITFLAG, |
345 | ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), |
346 | AML_OFFSET(common_serial_bus.flags), |
347 | 2}, |
348 | |
349 | {ACPI_RSC_MOVE8, |
350 | ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), |
351 | AML_OFFSET(common_serial_bus.type_revision_id), |
352 | 1}, |
353 | |
354 | {ACPI_RSC_MOVE16, |
355 | ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), |
356 | AML_OFFSET(common_serial_bus.type_data_length), |
357 | 1}, |
358 | |
359 | /* Vendor data */ |
360 | |
361 | {ACPI_RSC_COUNT_SERIAL_VEN, |
362 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), |
363 | AML_OFFSET(common_serial_bus.type_data_length), |
364 | AML_RESOURCE_I2C_MIN_DATA_LEN}, |
365 | |
366 | {ACPI_RSC_MOVE_SERIAL_VEN, |
367 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), |
368 | 0, |
369 | sizeof(struct aml_resource_i2c_serialbus)}, |
370 | |
371 | /* Resource Source */ |
372 | |
373 | {ACPI_RSC_MOVE8, |
374 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), |
375 | AML_OFFSET(common_serial_bus.res_source_index), |
376 | 1}, |
377 | |
378 | {ACPI_RSC_COUNT_SERIAL_RES, |
379 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), |
380 | AML_OFFSET(common_serial_bus.type_data_length), |
381 | sizeof(struct aml_resource_common_serialbus)}, |
382 | |
383 | {ACPI_RSC_MOVE_SERIAL_RES, |
384 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), |
385 | AML_OFFSET(common_serial_bus.type_data_length), |
386 | sizeof(struct aml_resource_common_serialbus)}, |
387 | |
388 | /* I2C bus type specific */ |
389 | |
390 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode), |
391 | AML_OFFSET(i2c_serial_bus.type_specific_flags), |
392 | 0}, |
393 | |
394 | {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed), |
395 | AML_OFFSET(i2c_serial_bus.connection_speed), |
396 | 1}, |
397 | |
398 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address), |
399 | AML_OFFSET(i2c_serial_bus.slave_address), |
400 | 1}, |
401 | }; |
402 | |
403 | /******************************************************************************* |
404 | * |
405 | * acpi_rs_convert_spi_serial_bus |
406 | * |
407 | ******************************************************************************/ |
408 | |
409 | struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = { |
410 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, |
411 | ACPI_RS_SIZE(struct acpi_resource_spi_serialbus), |
412 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)}, |
413 | |
414 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, |
415 | sizeof(struct aml_resource_spi_serialbus), |
416 | 0}, |
417 | |
418 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), |
419 | AML_OFFSET(common_serial_bus.revision_id), |
420 | 1}, |
421 | |
422 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), |
423 | AML_OFFSET(common_serial_bus.type), |
424 | 1}, |
425 | |
426 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), |
427 | AML_OFFSET(common_serial_bus.flags), |
428 | 0}, |
429 | |
430 | {ACPI_RSC_1BITFLAG, |
431 | ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), |
432 | AML_OFFSET(common_serial_bus.flags), |
433 | 1}, |
434 | |
435 | {ACPI_RSC_1BITFLAG, |
436 | ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), |
437 | AML_OFFSET(common_serial_bus.flags), |
438 | 2}, |
439 | |
440 | {ACPI_RSC_MOVE8, |
441 | ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), |
442 | AML_OFFSET(common_serial_bus.type_revision_id), |
443 | 1}, |
444 | |
445 | {ACPI_RSC_MOVE16, |
446 | ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), |
447 | AML_OFFSET(common_serial_bus.type_data_length), |
448 | 1}, |
449 | |
450 | /* Vendor data */ |
451 | |
452 | {ACPI_RSC_COUNT_SERIAL_VEN, |
453 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), |
454 | AML_OFFSET(common_serial_bus.type_data_length), |
455 | AML_RESOURCE_SPI_MIN_DATA_LEN}, |
456 | |
457 | {ACPI_RSC_MOVE_SERIAL_VEN, |
458 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), |
459 | 0, |
460 | sizeof(struct aml_resource_spi_serialbus)}, |
461 | |
462 | /* Resource Source */ |
463 | |
464 | {ACPI_RSC_MOVE8, |
465 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), |
466 | AML_OFFSET(common_serial_bus.res_source_index), |
467 | 1}, |
468 | |
469 | {ACPI_RSC_COUNT_SERIAL_RES, |
470 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), |
471 | AML_OFFSET(common_serial_bus.type_data_length), |
472 | sizeof(struct aml_resource_common_serialbus)}, |
473 | |
474 | {ACPI_RSC_MOVE_SERIAL_RES, |
475 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), |
476 | AML_OFFSET(common_serial_bus.type_data_length), |
477 | sizeof(struct aml_resource_common_serialbus)}, |
478 | |
479 | /* Spi bus type specific */ |
480 | |
481 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode), |
482 | AML_OFFSET(spi_serial_bus.type_specific_flags), |
483 | 0}, |
484 | |
485 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity), |
486 | AML_OFFSET(spi_serial_bus.type_specific_flags), |
487 | 1}, |
488 | |
489 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length), |
490 | AML_OFFSET(spi_serial_bus.data_bit_length), |
491 | 1}, |
492 | |
493 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase), |
494 | AML_OFFSET(spi_serial_bus.clock_phase), |
495 | 1}, |
496 | |
497 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity), |
498 | AML_OFFSET(spi_serial_bus.clock_polarity), |
499 | 1}, |
500 | |
501 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection), |
502 | AML_OFFSET(spi_serial_bus.device_selection), |
503 | 1}, |
504 | |
505 | {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed), |
506 | AML_OFFSET(spi_serial_bus.connection_speed), |
507 | 1}, |
508 | }; |
509 | |
510 | /******************************************************************************* |
511 | * |
512 | * acpi_rs_convert_uart_serial_bus |
513 | * |
514 | ******************************************************************************/ |
515 | |
516 | struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = { |
517 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, |
518 | ACPI_RS_SIZE(struct acpi_resource_uart_serialbus), |
519 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)}, |
520 | |
521 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, |
522 | sizeof(struct aml_resource_uart_serialbus), |
523 | 0}, |
524 | |
525 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), |
526 | AML_OFFSET(common_serial_bus.revision_id), |
527 | 1}, |
528 | |
529 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type), |
530 | AML_OFFSET(common_serial_bus.type), |
531 | 1}, |
532 | |
533 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode), |
534 | AML_OFFSET(common_serial_bus.flags), |
535 | 0}, |
536 | |
537 | {ACPI_RSC_1BITFLAG, |
538 | ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer), |
539 | AML_OFFSET(common_serial_bus.flags), |
540 | 1}, |
541 | |
542 | {ACPI_RSC_1BITFLAG, |
543 | ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing), |
544 | AML_OFFSET(common_serial_bus.flags), |
545 | 2}, |
546 | |
547 | {ACPI_RSC_MOVE8, |
548 | ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), |
549 | AML_OFFSET(common_serial_bus.type_revision_id), |
550 | 1}, |
551 | |
552 | {ACPI_RSC_MOVE16, |
553 | ACPI_RS_OFFSET(data.common_serial_bus.type_data_length), |
554 | AML_OFFSET(common_serial_bus.type_data_length), |
555 | 1}, |
556 | |
557 | /* Vendor data */ |
558 | |
559 | {ACPI_RSC_COUNT_SERIAL_VEN, |
560 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_length), |
561 | AML_OFFSET(common_serial_bus.type_data_length), |
562 | AML_RESOURCE_UART_MIN_DATA_LEN}, |
563 | |
564 | {ACPI_RSC_MOVE_SERIAL_VEN, |
565 | ACPI_RS_OFFSET(data.common_serial_bus.vendor_data), |
566 | 0, |
567 | sizeof(struct aml_resource_uart_serialbus)}, |
568 | |
569 | /* Resource Source */ |
570 | |
571 | {ACPI_RSC_MOVE8, |
572 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index), |
573 | AML_OFFSET(common_serial_bus.res_source_index), |
574 | 1}, |
575 | |
576 | {ACPI_RSC_COUNT_SERIAL_RES, |
577 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length), |
578 | AML_OFFSET(common_serial_bus.type_data_length), |
579 | sizeof(struct aml_resource_common_serialbus)}, |
580 | |
581 | {ACPI_RSC_MOVE_SERIAL_RES, |
582 | ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr), |
583 | AML_OFFSET(common_serial_bus.type_data_length), |
584 | sizeof(struct aml_resource_common_serialbus)}, |
585 | |
586 | /* Uart bus type specific */ |
587 | |
588 | {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control), |
589 | AML_OFFSET(uart_serial_bus.type_specific_flags), |
590 | 0}, |
591 | |
592 | {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits), |
593 | AML_OFFSET(uart_serial_bus.type_specific_flags), |
594 | 2}, |
595 | |
596 | {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits), |
597 | AML_OFFSET(uart_serial_bus.type_specific_flags), |
598 | 4}, |
599 | |
600 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian), |
601 | AML_OFFSET(uart_serial_bus.type_specific_flags), |
602 | 7}, |
603 | |
604 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity), |
605 | AML_OFFSET(uart_serial_bus.parity), |
606 | 1}, |
607 | |
608 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled), |
609 | AML_OFFSET(uart_serial_bus.lines_enabled), |
610 | 1}, |
611 | |
612 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size), |
613 | AML_OFFSET(uart_serial_bus.rx_fifo_size), |
614 | 1}, |
615 | |
616 | {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size), |
617 | AML_OFFSET(uart_serial_bus.tx_fifo_size), |
618 | 1}, |
619 | |
620 | {ACPI_RSC_MOVE32, |
621 | ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate), |
622 | AML_OFFSET(uart_serial_bus.default_baud_rate), |
623 | 1}, |
624 | }; |
625 | |
626 | /******************************************************************************* |
627 | * |
628 | * acpi_rs_convert_pin_config |
629 | * |
630 | ******************************************************************************/ |
631 | |
632 | struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = { |
633 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG, |
634 | ACPI_RS_SIZE(struct acpi_resource_pin_config), |
635 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)}, |
636 | |
637 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG, |
638 | sizeof(struct aml_resource_pin_config), |
639 | 0}, |
640 | |
641 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id), |
642 | AML_OFFSET(pin_config.revision_id), |
643 | 1}, |
644 | |
645 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable), |
646 | AML_OFFSET(pin_config.flags), |
647 | 0}, |
648 | |
649 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer), |
650 | AML_OFFSET(pin_config.flags), |
651 | 1}, |
652 | |
653 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type), |
654 | AML_OFFSET(pin_config.pin_config_type), |
655 | 1}, |
656 | |
657 | {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value), |
658 | AML_OFFSET(pin_config.pin_config_value), |
659 | 1}, |
660 | |
661 | /* Pin Table */ |
662 | |
663 | /* |
664 | * It is OK to use GPIO operations here because none of them refer GPIO |
665 | * structures directly but instead use offsets given here. |
666 | */ |
667 | |
668 | {ACPI_RSC_COUNT_GPIO_PIN, |
669 | ACPI_RS_OFFSET(data.pin_config.pin_table_length), |
670 | AML_OFFSET(pin_config.pin_table_offset), |
671 | AML_OFFSET(pin_config.res_source_offset)}, |
672 | |
673 | {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table), |
674 | AML_OFFSET(pin_config.pin_table_offset), |
675 | 0}, |
676 | |
677 | /* Resource Source */ |
678 | |
679 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index), |
680 | AML_OFFSET(pin_config.res_source_index), |
681 | 1}, |
682 | |
683 | {ACPI_RSC_COUNT_GPIO_RES, |
684 | ACPI_RS_OFFSET(data.pin_config.resource_source.string_length), |
685 | AML_OFFSET(pin_config.res_source_offset), |
686 | AML_OFFSET(pin_config.vendor_offset)}, |
687 | |
688 | {ACPI_RSC_MOVE_GPIO_RES, |
689 | ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr), |
690 | AML_OFFSET(pin_config.res_source_offset), |
691 | 0}, |
692 | |
693 | /* Vendor Data */ |
694 | |
695 | {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length), |
696 | AML_OFFSET(pin_config.vendor_length), |
697 | 1}, |
698 | |
699 | {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data), |
700 | AML_OFFSET(pin_config.vendor_offset), |
701 | 0}, |
702 | }; |
703 | |
704 | /******************************************************************************* |
705 | * |
706 | * acpi_rs_convert_pin_group |
707 | * |
708 | ******************************************************************************/ |
709 | |
710 | struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = { |
711 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP, |
712 | ACPI_RS_SIZE(struct acpi_resource_pin_group), |
713 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)}, |
714 | |
715 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP, |
716 | sizeof(struct aml_resource_pin_group), |
717 | 0}, |
718 | |
719 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id), |
720 | AML_OFFSET(pin_group.revision_id), |
721 | 1}, |
722 | |
723 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer), |
724 | AML_OFFSET(pin_group.flags), |
725 | 0}, |
726 | |
727 | /* Pin Table */ |
728 | |
729 | /* |
730 | * It is OK to use GPIO operations here because none of them refer GPIO |
731 | * structures directly but instead use offsets given here. |
732 | */ |
733 | |
734 | {ACPI_RSC_COUNT_GPIO_PIN, |
735 | ACPI_RS_OFFSET(data.pin_group.pin_table_length), |
736 | AML_OFFSET(pin_group.pin_table_offset), |
737 | AML_OFFSET(pin_group.label_offset)}, |
738 | |
739 | {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table), |
740 | AML_OFFSET(pin_group.pin_table_offset), |
741 | 0}, |
742 | |
743 | /* Resource Label */ |
744 | |
745 | {ACPI_RSC_COUNT_GPIO_RES, |
746 | ACPI_RS_OFFSET(data.pin_group.resource_label.string_length), |
747 | AML_OFFSET(pin_group.label_offset), |
748 | AML_OFFSET(pin_group.vendor_offset)}, |
749 | |
750 | {ACPI_RSC_MOVE_GPIO_RES, |
751 | ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr), |
752 | AML_OFFSET(pin_group.label_offset), |
753 | 0}, |
754 | |
755 | /* Vendor Data */ |
756 | |
757 | {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length), |
758 | AML_OFFSET(pin_group.vendor_length), |
759 | 1}, |
760 | |
761 | {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data), |
762 | AML_OFFSET(pin_group.vendor_offset), |
763 | 0}, |
764 | }; |
765 | |
766 | /******************************************************************************* |
767 | * |
768 | * acpi_rs_convert_pin_group_function |
769 | * |
770 | ******************************************************************************/ |
771 | |
772 | struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = { |
773 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION, |
774 | ACPI_RS_SIZE(struct acpi_resource_pin_group_function), |
775 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)}, |
776 | |
777 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION, |
778 | sizeof(struct aml_resource_pin_group_function), |
779 | 0}, |
780 | |
781 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id), |
782 | AML_OFFSET(pin_group_function.revision_id), |
783 | 1}, |
784 | |
785 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable), |
786 | AML_OFFSET(pin_group_function.flags), |
787 | 0}, |
788 | |
789 | {ACPI_RSC_1BITFLAG, |
790 | ACPI_RS_OFFSET(data.pin_group_function.producer_consumer), |
791 | AML_OFFSET(pin_group_function.flags), |
792 | 1}, |
793 | |
794 | {ACPI_RSC_MOVE16, |
795 | ACPI_RS_OFFSET(data.pin_group_function.function_number), |
796 | AML_OFFSET(pin_group_function.function_number), |
797 | 1}, |
798 | |
799 | /* Resource Source */ |
800 | |
801 | {ACPI_RSC_MOVE8, |
802 | ACPI_RS_OFFSET(data.pin_group_function.resource_source.index), |
803 | AML_OFFSET(pin_group_function.res_source_index), |
804 | 1}, |
805 | |
806 | {ACPI_RSC_COUNT_GPIO_RES, |
807 | ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length), |
808 | AML_OFFSET(pin_group_function.res_source_offset), |
809 | AML_OFFSET(pin_group_function.res_source_label_offset)}, |
810 | |
811 | {ACPI_RSC_MOVE_GPIO_RES, |
812 | ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr), |
813 | AML_OFFSET(pin_group_function.res_source_offset), |
814 | 0}, |
815 | |
816 | /* Resource Source Label */ |
817 | |
818 | {ACPI_RSC_COUNT_GPIO_RES, |
819 | ACPI_RS_OFFSET(data.pin_group_function.resource_source_label. |
820 | string_length), |
821 | AML_OFFSET(pin_group_function.res_source_label_offset), |
822 | AML_OFFSET(pin_group_function.vendor_offset)}, |
823 | |
824 | {ACPI_RSC_MOVE_GPIO_RES, |
825 | ACPI_RS_OFFSET(data.pin_group_function.resource_source_label. |
826 | string_ptr), |
827 | AML_OFFSET(pin_group_function.res_source_label_offset), |
828 | 0}, |
829 | |
830 | /* Vendor Data */ |
831 | |
832 | {ACPI_RSC_COUNT_GPIO_VEN, |
833 | ACPI_RS_OFFSET(data.pin_group_function.vendor_length), |
834 | AML_OFFSET(pin_group_function.vendor_length), |
835 | 1}, |
836 | |
837 | {ACPI_RSC_MOVE_GPIO_RES, |
838 | ACPI_RS_OFFSET(data.pin_group_function.vendor_data), |
839 | AML_OFFSET(pin_group_function.vendor_offset), |
840 | 0}, |
841 | }; |
842 | |
843 | /******************************************************************************* |
844 | * |
845 | * acpi_rs_convert_pin_group_config |
846 | * |
847 | ******************************************************************************/ |
848 | |
849 | struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = { |
850 | {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG, |
851 | ACPI_RS_SIZE(struct acpi_resource_pin_group_config), |
852 | ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)}, |
853 | |
854 | {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG, |
855 | sizeof(struct aml_resource_pin_group_config), |
856 | 0}, |
857 | |
858 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id), |
859 | AML_OFFSET(pin_group_config.revision_id), |
860 | 1}, |
861 | |
862 | {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable), |
863 | AML_OFFSET(pin_group_config.flags), |
864 | 0}, |
865 | |
866 | {ACPI_RSC_1BITFLAG, |
867 | ACPI_RS_OFFSET(data.pin_group_config.producer_consumer), |
868 | AML_OFFSET(pin_group_config.flags), |
869 | 1}, |
870 | |
871 | {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type), |
872 | AML_OFFSET(pin_group_config.pin_config_type), |
873 | 1}, |
874 | |
875 | {ACPI_RSC_MOVE32, |
876 | ACPI_RS_OFFSET(data.pin_group_config.pin_config_value), |
877 | AML_OFFSET(pin_group_config.pin_config_value), |
878 | 1}, |
879 | |
880 | /* Resource Source */ |
881 | |
882 | {ACPI_RSC_MOVE8, |
883 | ACPI_RS_OFFSET(data.pin_group_config.resource_source.index), |
884 | AML_OFFSET(pin_group_config.res_source_index), |
885 | 1}, |
886 | |
887 | {ACPI_RSC_COUNT_GPIO_RES, |
888 | ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length), |
889 | AML_OFFSET(pin_group_config.res_source_offset), |
890 | AML_OFFSET(pin_group_config.res_source_label_offset)}, |
891 | |
892 | {ACPI_RSC_MOVE_GPIO_RES, |
893 | ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr), |
894 | AML_OFFSET(pin_group_config.res_source_offset), |
895 | 0}, |
896 | |
897 | /* Resource Source Label */ |
898 | |
899 | {ACPI_RSC_COUNT_GPIO_RES, |
900 | ACPI_RS_OFFSET(data.pin_group_config.resource_source_label. |
901 | string_length), |
902 | AML_OFFSET(pin_group_config.res_source_label_offset), |
903 | AML_OFFSET(pin_group_config.vendor_offset)}, |
904 | |
905 | {ACPI_RSC_MOVE_GPIO_RES, |
906 | ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr), |
907 | AML_OFFSET(pin_group_config.res_source_label_offset), |
908 | 0}, |
909 | |
910 | /* Vendor Data */ |
911 | |
912 | {ACPI_RSC_COUNT_GPIO_VEN, |
913 | ACPI_RS_OFFSET(data.pin_group_config.vendor_length), |
914 | AML_OFFSET(pin_group_config.vendor_length), |
915 | 1}, |
916 | |
917 | {ACPI_RSC_MOVE_GPIO_RES, |
918 | ACPI_RS_OFFSET(data.pin_group_config.vendor_data), |
919 | AML_OFFSET(pin_group_config.vendor_offset), |
920 | 0}, |
921 | }; |
922 | |