xref: /linux/drivers/acpi/acpica/rsserial.c (revision bba2c3615bd6cfee7456d1130f2e6b01b3f4e9ba)
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[18] = {
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 	/* Read LVR from Type Specific Flags, bits[15:8] */
395 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.i2c_serial_bus.lvr),
396 	 AML_OFFSET(i2c_serial_bus.type_specific_flags) + 1,
397 	 1},
398 
399 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),
400 	 AML_OFFSET(i2c_serial_bus.connection_speed),
401 	 1},
402 
403 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),
404 	 AML_OFFSET(i2c_serial_bus.slave_address),
405 	 1},
406 };
407 
408 /*******************************************************************************
409  *
410  * acpi_rs_convert_spi_serial_bus
411  *
412  ******************************************************************************/
413 
414 struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
415 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
416 	 ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
417 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
418 
419 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
420 	 sizeof(struct aml_resource_spi_serialbus),
421 	 0},
422 
423 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
424 	 AML_OFFSET(common_serial_bus.revision_id),
425 	 1},
426 
427 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
428 	 AML_OFFSET(common_serial_bus.type),
429 	 1},
430 
431 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
432 	 AML_OFFSET(common_serial_bus.flags),
433 	 0},
434 
435 	{ACPI_RSC_1BITFLAG,
436 	 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
437 	 AML_OFFSET(common_serial_bus.flags),
438 	 1},
439 
440 	{ACPI_RSC_1BITFLAG,
441 	 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
442 	 AML_OFFSET(common_serial_bus.flags),
443 	 2},
444 
445 	{ACPI_RSC_MOVE8,
446 	 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
447 	 AML_OFFSET(common_serial_bus.type_revision_id),
448 	 1},
449 
450 	{ACPI_RSC_MOVE16,
451 	 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
452 	 AML_OFFSET(common_serial_bus.type_data_length),
453 	 1},
454 
455 	/* Vendor data */
456 
457 	{ACPI_RSC_COUNT_SERIAL_VEN,
458 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
459 	 AML_OFFSET(common_serial_bus.type_data_length),
460 	 AML_RESOURCE_SPI_MIN_DATA_LEN},
461 
462 	{ACPI_RSC_MOVE_SERIAL_VEN,
463 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
464 	 0,
465 	 sizeof(struct aml_resource_spi_serialbus)},
466 
467 	/* Resource Source */
468 
469 	{ACPI_RSC_MOVE8,
470 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
471 	 AML_OFFSET(common_serial_bus.res_source_index),
472 	 1},
473 
474 	{ACPI_RSC_COUNT_SERIAL_RES,
475 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
476 	 AML_OFFSET(common_serial_bus.type_data_length),
477 	 sizeof(struct aml_resource_common_serialbus)},
478 
479 	{ACPI_RSC_MOVE_SERIAL_RES,
480 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
481 	 AML_OFFSET(common_serial_bus.type_data_length),
482 	 sizeof(struct aml_resource_common_serialbus)},
483 
484 	/* Spi bus type specific  */
485 
486 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),
487 	 AML_OFFSET(spi_serial_bus.type_specific_flags),
488 	 0},
489 
490 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),
491 	 AML_OFFSET(spi_serial_bus.type_specific_flags),
492 	 1},
493 
494 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),
495 	 AML_OFFSET(spi_serial_bus.data_bit_length),
496 	 1},
497 
498 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),
499 	 AML_OFFSET(spi_serial_bus.clock_phase),
500 	 1},
501 
502 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),
503 	 AML_OFFSET(spi_serial_bus.clock_polarity),
504 	 1},
505 
506 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),
507 	 AML_OFFSET(spi_serial_bus.device_selection),
508 	 1},
509 
510 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),
511 	 AML_OFFSET(spi_serial_bus.connection_speed),
512 	 1},
513 };
514 
515 /*******************************************************************************
516  *
517  * acpi_rs_convert_uart_serial_bus
518  *
519  ******************************************************************************/
520 
521 struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
522 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
523 	 ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
524 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
525 
526 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
527 	 sizeof(struct aml_resource_uart_serialbus),
528 	 0},
529 
530 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
531 	 AML_OFFSET(common_serial_bus.revision_id),
532 	 1},
533 
534 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
535 	 AML_OFFSET(common_serial_bus.type),
536 	 1},
537 
538 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
539 	 AML_OFFSET(common_serial_bus.flags),
540 	 0},
541 
542 	{ACPI_RSC_1BITFLAG,
543 	 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
544 	 AML_OFFSET(common_serial_bus.flags),
545 	 1},
546 
547 	{ACPI_RSC_1BITFLAG,
548 	 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
549 	 AML_OFFSET(common_serial_bus.flags),
550 	 2},
551 
552 	{ACPI_RSC_MOVE8,
553 	 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
554 	 AML_OFFSET(common_serial_bus.type_revision_id),
555 	 1},
556 
557 	{ACPI_RSC_MOVE16,
558 	 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
559 	 AML_OFFSET(common_serial_bus.type_data_length),
560 	 1},
561 
562 	/* Vendor data */
563 
564 	{ACPI_RSC_COUNT_SERIAL_VEN,
565 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
566 	 AML_OFFSET(common_serial_bus.type_data_length),
567 	 AML_RESOURCE_UART_MIN_DATA_LEN},
568 
569 	{ACPI_RSC_MOVE_SERIAL_VEN,
570 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
571 	 0,
572 	 sizeof(struct aml_resource_uart_serialbus)},
573 
574 	/* Resource Source */
575 
576 	{ACPI_RSC_MOVE8,
577 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
578 	 AML_OFFSET(common_serial_bus.res_source_index),
579 	 1},
580 
581 	{ACPI_RSC_COUNT_SERIAL_RES,
582 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
583 	 AML_OFFSET(common_serial_bus.type_data_length),
584 	 sizeof(struct aml_resource_common_serialbus)},
585 
586 	{ACPI_RSC_MOVE_SERIAL_RES,
587 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
588 	 AML_OFFSET(common_serial_bus.type_data_length),
589 	 sizeof(struct aml_resource_common_serialbus)},
590 
591 	/* Uart bus type specific  */
592 
593 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),
594 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
595 	 0},
596 
597 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),
598 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
599 	 2},
600 
601 	{ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),
602 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
603 	 4},
604 
605 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),
606 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
607 	 7},
608 
609 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),
610 	 AML_OFFSET(uart_serial_bus.parity),
611 	 1},
612 
613 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),
614 	 AML_OFFSET(uart_serial_bus.lines_enabled),
615 	 1},
616 
617 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),
618 	 AML_OFFSET(uart_serial_bus.rx_fifo_size),
619 	 1},
620 
621 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),
622 	 AML_OFFSET(uart_serial_bus.tx_fifo_size),
623 	 1},
624 
625 	{ACPI_RSC_MOVE32,
626 	 ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),
627 	 AML_OFFSET(uart_serial_bus.default_baud_rate),
628 	 1},
629 };
630 
631 /*******************************************************************************
632  *
633  * acpi_rs_convert_pin_config
634  *
635  ******************************************************************************/
636 
637 struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
638 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
639 	 ACPI_RS_SIZE(struct acpi_resource_pin_config),
640 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
641 
642 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
643 	 sizeof(struct aml_resource_pin_config),
644 	 0},
645 
646 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
647 	 AML_OFFSET(pin_config.revision_id),
648 	 1},
649 
650 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable),
651 	 AML_OFFSET(pin_config.flags),
652 	 0},
653 
654 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
655 	 AML_OFFSET(pin_config.flags),
656 	 1},
657 
658 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
659 	 AML_OFFSET(pin_config.pin_config_type),
660 	 1},
661 
662 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
663 	 AML_OFFSET(pin_config.pin_config_value),
664 	 1},
665 
666 	/* Pin Table */
667 
668 	/*
669 	 * It is OK to use GPIO operations here because none of them refer GPIO
670 	 * structures directly but instead use offsets given here.
671 	 */
672 
673 	{ACPI_RSC_COUNT_GPIO_PIN,
674 	 ACPI_RS_OFFSET(data.pin_config.pin_table_length),
675 	 AML_OFFSET(pin_config.pin_table_offset),
676 	 AML_OFFSET(pin_config.res_source_offset)},
677 
678 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
679 	 AML_OFFSET(pin_config.pin_table_offset),
680 	 0},
681 
682 	/* Resource Source */
683 
684 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
685 	 AML_OFFSET(pin_config.res_source_index),
686 	 1},
687 
688 	{ACPI_RSC_COUNT_GPIO_RES,
689 	 ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
690 	 AML_OFFSET(pin_config.res_source_offset),
691 	 AML_OFFSET(pin_config.vendor_offset)},
692 
693 	{ACPI_RSC_MOVE_GPIO_RES,
694 	 ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
695 	 AML_OFFSET(pin_config.res_source_offset),
696 	 0},
697 
698 	/* Vendor Data */
699 
700 	{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
701 	 AML_OFFSET(pin_config.vendor_length),
702 	 1},
703 
704 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
705 	 AML_OFFSET(pin_config.vendor_offset),
706 	 0},
707 };
708 
709 /*******************************************************************************
710  *
711  * acpi_rs_convert_pin_group
712  *
713  ******************************************************************************/
714 
715 struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
716 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
717 	 ACPI_RS_SIZE(struct acpi_resource_pin_group),
718 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
719 
720 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
721 	 sizeof(struct aml_resource_pin_group),
722 	 0},
723 
724 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
725 	 AML_OFFSET(pin_group.revision_id),
726 	 1},
727 
728 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
729 	 AML_OFFSET(pin_group.flags),
730 	 0},
731 
732 	/* Pin Table */
733 
734 	/*
735 	 * It is OK to use GPIO operations here because none of them refer GPIO
736 	 * structures directly but instead use offsets given here.
737 	 */
738 
739 	{ACPI_RSC_COUNT_GPIO_PIN,
740 	 ACPI_RS_OFFSET(data.pin_group.pin_table_length),
741 	 AML_OFFSET(pin_group.pin_table_offset),
742 	 AML_OFFSET(pin_group.label_offset)},
743 
744 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
745 	 AML_OFFSET(pin_group.pin_table_offset),
746 	 0},
747 
748 	/* Resource Label */
749 
750 	{ACPI_RSC_COUNT_GPIO_RES,
751 	 ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
752 	 AML_OFFSET(pin_group.label_offset),
753 	 AML_OFFSET(pin_group.vendor_offset)},
754 
755 	{ACPI_RSC_MOVE_GPIO_RES,
756 	 ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
757 	 AML_OFFSET(pin_group.label_offset),
758 	 0},
759 
760 	/* Vendor Data */
761 
762 	{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
763 	 AML_OFFSET(pin_group.vendor_length),
764 	 1},
765 
766 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
767 	 AML_OFFSET(pin_group.vendor_offset),
768 	 0},
769 };
770 
771 /*******************************************************************************
772  *
773  * acpi_rs_convert_pin_group_function
774  *
775  ******************************************************************************/
776 
777 struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
778 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
779 	 ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
780 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
781 
782 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
783 	 sizeof(struct aml_resource_pin_group_function),
784 	 0},
785 
786 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
787 	 AML_OFFSET(pin_group_function.revision_id),
788 	 1},
789 
790 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable),
791 	 AML_OFFSET(pin_group_function.flags),
792 	 0},
793 
794 	{ACPI_RSC_1BITFLAG,
795 	 ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
796 	 AML_OFFSET(pin_group_function.flags),
797 	 1},
798 
799 	{ACPI_RSC_MOVE16,
800 	 ACPI_RS_OFFSET(data.pin_group_function.function_number),
801 	 AML_OFFSET(pin_group_function.function_number),
802 	 1},
803 
804 	/* Resource Source */
805 
806 	{ACPI_RSC_MOVE8,
807 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
808 	 AML_OFFSET(pin_group_function.res_source_index),
809 	 1},
810 
811 	{ACPI_RSC_COUNT_GPIO_RES,
812 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
813 	 AML_OFFSET(pin_group_function.res_source_offset),
814 	 AML_OFFSET(pin_group_function.res_source_label_offset)},
815 
816 	{ACPI_RSC_MOVE_GPIO_RES,
817 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
818 	 AML_OFFSET(pin_group_function.res_source_offset),
819 	 0},
820 
821 	/* Resource Source Label */
822 
823 	{ACPI_RSC_COUNT_GPIO_RES,
824 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
825 			string_length),
826 	 AML_OFFSET(pin_group_function.res_source_label_offset),
827 	 AML_OFFSET(pin_group_function.vendor_offset)},
828 
829 	{ACPI_RSC_MOVE_GPIO_RES,
830 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
831 			string_ptr),
832 	 AML_OFFSET(pin_group_function.res_source_label_offset),
833 	 0},
834 
835 	/* Vendor Data */
836 
837 	{ACPI_RSC_COUNT_GPIO_VEN,
838 	 ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
839 	 AML_OFFSET(pin_group_function.vendor_length),
840 	 1},
841 
842 	{ACPI_RSC_MOVE_GPIO_RES,
843 	 ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
844 	 AML_OFFSET(pin_group_function.vendor_offset),
845 	 0},
846 };
847 
848 /*******************************************************************************
849  *
850  * acpi_rs_convert_pin_group_config
851  *
852  ******************************************************************************/
853 
854 struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
855 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
856 	 ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
857 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
858 
859 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
860 	 sizeof(struct aml_resource_pin_group_config),
861 	 0},
862 
863 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
864 	 AML_OFFSET(pin_group_config.revision_id),
865 	 1},
866 
867 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable),
868 	 AML_OFFSET(pin_group_config.flags),
869 	 0},
870 
871 	{ACPI_RSC_1BITFLAG,
872 	 ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
873 	 AML_OFFSET(pin_group_config.flags),
874 	 1},
875 
876 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
877 	 AML_OFFSET(pin_group_config.pin_config_type),
878 	 1},
879 
880 	{ACPI_RSC_MOVE32,
881 	 ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
882 	 AML_OFFSET(pin_group_config.pin_config_value),
883 	 1},
884 
885 	/* Resource Source */
886 
887 	{ACPI_RSC_MOVE8,
888 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
889 	 AML_OFFSET(pin_group_config.res_source_index),
890 	 1},
891 
892 	{ACPI_RSC_COUNT_GPIO_RES,
893 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
894 	 AML_OFFSET(pin_group_config.res_source_offset),
895 	 AML_OFFSET(pin_group_config.res_source_label_offset)},
896 
897 	{ACPI_RSC_MOVE_GPIO_RES,
898 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
899 	 AML_OFFSET(pin_group_config.res_source_offset),
900 	 0},
901 
902 	/* Resource Source Label */
903 
904 	{ACPI_RSC_COUNT_GPIO_RES,
905 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
906 			string_length),
907 	 AML_OFFSET(pin_group_config.res_source_label_offset),
908 	 AML_OFFSET(pin_group_config.vendor_offset)},
909 
910 	{ACPI_RSC_MOVE_GPIO_RES,
911 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
912 	 AML_OFFSET(pin_group_config.res_source_label_offset),
913 	 0},
914 
915 	/* Vendor Data */
916 
917 	{ACPI_RSC_COUNT_GPIO_VEN,
918 	 ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
919 	 AML_OFFSET(pin_group_config.vendor_length),
920 	 1},
921 
922 	{ACPI_RSC_MOVE_GPIO_RES,
923 	 ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
924 	 AML_OFFSET(pin_group_config.vendor_offset),
925 	 0},
926 };
927