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