xref: /openbmc/linux/drivers/acpi/acpica/rsserial.c (revision 160b8e75)
1 /*******************************************************************************
2  *
3  * Module Name: rsserial - GPIO/serial_bus resource descriptors
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2018, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #include <acpi/acpi.h>
45 #include "accommon.h"
46 #include "acresrc.h"
47 
48 #define _COMPONENT          ACPI_RESOURCES
49 ACPI_MODULE_NAME("rsserial")
50 
51 /*******************************************************************************
52  *
53  * acpi_rs_convert_gpio
54  *
55  ******************************************************************************/
56 struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
57 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO,
58 	 ACPI_RS_SIZE(struct acpi_resource_gpio),
59 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)},
60 
61 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO,
62 	 sizeof(struct aml_resource_gpio),
63 	 0},
64 
65 	/*
66 	 * These fields are contiguous in both the source and destination:
67 	 * revision_id
68 	 * connection_type
69 	 */
70 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id),
71 	 AML_OFFSET(gpio.revision_id),
72 	 2},
73 
74 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer),
75 	 AML_OFFSET(gpio.flags),
76 	 0},
77 
78 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.sharable),
79 	 AML_OFFSET(gpio.int_flags),
80 	 3},
81 
82 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable),
83 	 AML_OFFSET(gpio.int_flags),
84 	 4},
85 
86 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction),
87 	 AML_OFFSET(gpio.int_flags),
88 	 0},
89 
90 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering),
91 	 AML_OFFSET(gpio.int_flags),
92 	 0},
93 
94 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity),
95 	 AML_OFFSET(gpio.int_flags),
96 	 1},
97 
98 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config),
99 	 AML_OFFSET(gpio.pin_config),
100 	 1},
101 
102 	/*
103 	 * These fields are contiguous in both the source and destination:
104 	 * drive_strength
105 	 * debounce_timeout
106 	 */
107 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength),
108 	 AML_OFFSET(gpio.drive_strength),
109 	 2},
110 
111 	/* Pin Table */
112 
113 	{ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length),
114 	 AML_OFFSET(gpio.pin_table_offset),
115 	 AML_OFFSET(gpio.res_source_offset)},
116 
117 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table),
118 	 AML_OFFSET(gpio.pin_table_offset),
119 	 0},
120 
121 	/* Resource Source */
122 
123 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index),
124 	 AML_OFFSET(gpio.res_source_index),
125 	 1},
126 
127 	{ACPI_RSC_COUNT_GPIO_RES,
128 	 ACPI_RS_OFFSET(data.gpio.resource_source.string_length),
129 	 AML_OFFSET(gpio.res_source_offset),
130 	 AML_OFFSET(gpio.vendor_offset)},
131 
132 	{ACPI_RSC_MOVE_GPIO_RES,
133 	 ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr),
134 	 AML_OFFSET(gpio.res_source_offset),
135 	 0},
136 
137 	/* Vendor Data */
138 
139 	{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length),
140 	 AML_OFFSET(gpio.vendor_length),
141 	 1},
142 
143 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data),
144 	 AML_OFFSET(gpio.vendor_offset),
145 	 0},
146 };
147 
148 /*******************************************************************************
149  *
150  * acpi_rs_convert_pinfunction
151  *
152  ******************************************************************************/
153 
154 struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = {
155 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
156 	 ACPI_RS_SIZE(struct acpi_resource_pin_function),
157 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)},
158 
159 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
160 	 sizeof(struct aml_resource_pin_function),
161 	 0},
162 
163 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id),
164 	 AML_OFFSET(pin_function.revision_id),
165 	 1},
166 
167 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.sharable),
168 	 AML_OFFSET(pin_function.flags),
169 	 0},
170 
171 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config),
172 	 AML_OFFSET(pin_function.pin_config),
173 	 1},
174 
175 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number),
176 	 AML_OFFSET(pin_function.function_number),
177 	 2},
178 
179 	/* Pin Table */
180 
181 	/*
182 	 * It is OK to use GPIO operations here because none of them refer GPIO
183 	 * structures directly but instead use offsets given here.
184 	 */
185 
186 	{ACPI_RSC_COUNT_GPIO_PIN,
187 	 ACPI_RS_OFFSET(data.pin_function.pin_table_length),
188 	 AML_OFFSET(pin_function.pin_table_offset),
189 	 AML_OFFSET(pin_function.res_source_offset)},
190 
191 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table),
192 	 AML_OFFSET(pin_function.pin_table_offset),
193 	 0},
194 
195 	/* Resource Source */
196 
197 	{ACPI_RSC_MOVE8,
198 	 ACPI_RS_OFFSET(data.pin_function.resource_source.index),
199 	 AML_OFFSET(pin_function.res_source_index),
200 	 1},
201 
202 	{ACPI_RSC_COUNT_GPIO_RES,
203 	 ACPI_RS_OFFSET(data.pin_function.resource_source.string_length),
204 	 AML_OFFSET(pin_function.res_source_offset),
205 	 AML_OFFSET(pin_function.vendor_offset)},
206 
207 	{ACPI_RSC_MOVE_GPIO_RES,
208 	 ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr),
209 	 AML_OFFSET(pin_function.res_source_offset),
210 	 0},
211 
212 	/* Vendor Data */
213 
214 	{ACPI_RSC_COUNT_GPIO_VEN,
215 	 ACPI_RS_OFFSET(data.pin_function.vendor_length),
216 	 AML_OFFSET(pin_function.vendor_length),
217 	 1},
218 
219 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data),
220 	 AML_OFFSET(pin_function.vendor_offset),
221 	 0},
222 };
223 
224 /*******************************************************************************
225  *
226  * acpi_rs_convert_i2c_serial_bus
227  *
228  ******************************************************************************/
229 
230 struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
231 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
232 	 ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
233 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
234 
235 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
236 	 sizeof(struct aml_resource_i2c_serialbus),
237 	 0},
238 
239 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
240 	 AML_OFFSET(common_serial_bus.revision_id),
241 	 1},
242 
243 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
244 	 AML_OFFSET(common_serial_bus.type),
245 	 1},
246 
247 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
248 	 AML_OFFSET(common_serial_bus.flags),
249 	 0},
250 
251 	{ACPI_RSC_1BITFLAG,
252 	 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
253 	 AML_OFFSET(common_serial_bus.flags),
254 	 1},
255 
256 	{ACPI_RSC_1BITFLAG,
257 	 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
258 	 AML_OFFSET(common_serial_bus.flags),
259 	 2},
260 
261 	{ACPI_RSC_MOVE8,
262 	 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
263 	 AML_OFFSET(common_serial_bus.type_revision_id),
264 	 1},
265 
266 	{ACPI_RSC_MOVE16,
267 	 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
268 	 AML_OFFSET(common_serial_bus.type_data_length),
269 	 1},
270 
271 	/* Vendor data */
272 
273 	{ACPI_RSC_COUNT_SERIAL_VEN,
274 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
275 	 AML_OFFSET(common_serial_bus.type_data_length),
276 	 AML_RESOURCE_I2C_MIN_DATA_LEN},
277 
278 	{ACPI_RSC_MOVE_SERIAL_VEN,
279 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
280 	 0,
281 	 sizeof(struct aml_resource_i2c_serialbus)},
282 
283 	/* Resource Source */
284 
285 	{ACPI_RSC_MOVE8,
286 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
287 	 AML_OFFSET(common_serial_bus.res_source_index),
288 	 1},
289 
290 	{ACPI_RSC_COUNT_SERIAL_RES,
291 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
292 	 AML_OFFSET(common_serial_bus.type_data_length),
293 	 sizeof(struct aml_resource_common_serialbus)},
294 
295 	{ACPI_RSC_MOVE_SERIAL_RES,
296 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
297 	 AML_OFFSET(common_serial_bus.type_data_length),
298 	 sizeof(struct aml_resource_common_serialbus)},
299 
300 	/* I2C bus type specific */
301 
302 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode),
303 	 AML_OFFSET(i2c_serial_bus.type_specific_flags),
304 	 0},
305 
306 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),
307 	 AML_OFFSET(i2c_serial_bus.connection_speed),
308 	 1},
309 
310 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),
311 	 AML_OFFSET(i2c_serial_bus.slave_address),
312 	 1},
313 };
314 
315 /*******************************************************************************
316  *
317  * acpi_rs_convert_spi_serial_bus
318  *
319  ******************************************************************************/
320 
321 struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
322 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
323 	 ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
324 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
325 
326 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
327 	 sizeof(struct aml_resource_spi_serialbus),
328 	 0},
329 
330 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
331 	 AML_OFFSET(common_serial_bus.revision_id),
332 	 1},
333 
334 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
335 	 AML_OFFSET(common_serial_bus.type),
336 	 1},
337 
338 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
339 	 AML_OFFSET(common_serial_bus.flags),
340 	 0},
341 
342 	{ACPI_RSC_1BITFLAG,
343 	 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
344 	 AML_OFFSET(common_serial_bus.flags),
345 	 1},
346 
347 	{ACPI_RSC_1BITFLAG,
348 	 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
349 	 AML_OFFSET(common_serial_bus.flags),
350 	 2},
351 
352 	{ACPI_RSC_MOVE8,
353 	 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
354 	 AML_OFFSET(common_serial_bus.type_revision_id),
355 	 1},
356 
357 	{ACPI_RSC_MOVE16,
358 	 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
359 	 AML_OFFSET(common_serial_bus.type_data_length),
360 	 1},
361 
362 	/* Vendor data */
363 
364 	{ACPI_RSC_COUNT_SERIAL_VEN,
365 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
366 	 AML_OFFSET(common_serial_bus.type_data_length),
367 	 AML_RESOURCE_SPI_MIN_DATA_LEN},
368 
369 	{ACPI_RSC_MOVE_SERIAL_VEN,
370 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
371 	 0,
372 	 sizeof(struct aml_resource_spi_serialbus)},
373 
374 	/* Resource Source */
375 
376 	{ACPI_RSC_MOVE8,
377 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
378 	 AML_OFFSET(common_serial_bus.res_source_index),
379 	 1},
380 
381 	{ACPI_RSC_COUNT_SERIAL_RES,
382 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
383 	 AML_OFFSET(common_serial_bus.type_data_length),
384 	 sizeof(struct aml_resource_common_serialbus)},
385 
386 	{ACPI_RSC_MOVE_SERIAL_RES,
387 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
388 	 AML_OFFSET(common_serial_bus.type_data_length),
389 	 sizeof(struct aml_resource_common_serialbus)},
390 
391 	/* Spi bus type specific  */
392 
393 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),
394 	 AML_OFFSET(spi_serial_bus.type_specific_flags),
395 	 0},
396 
397 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),
398 	 AML_OFFSET(spi_serial_bus.type_specific_flags),
399 	 1},
400 
401 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),
402 	 AML_OFFSET(spi_serial_bus.data_bit_length),
403 	 1},
404 
405 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),
406 	 AML_OFFSET(spi_serial_bus.clock_phase),
407 	 1},
408 
409 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),
410 	 AML_OFFSET(spi_serial_bus.clock_polarity),
411 	 1},
412 
413 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),
414 	 AML_OFFSET(spi_serial_bus.device_selection),
415 	 1},
416 
417 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),
418 	 AML_OFFSET(spi_serial_bus.connection_speed),
419 	 1},
420 };
421 
422 /*******************************************************************************
423  *
424  * acpi_rs_convert_uart_serial_bus
425  *
426  ******************************************************************************/
427 
428 struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
429 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
430 	 ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
431 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
432 
433 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
434 	 sizeof(struct aml_resource_uart_serialbus),
435 	 0},
436 
437 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
438 	 AML_OFFSET(common_serial_bus.revision_id),
439 	 1},
440 
441 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
442 	 AML_OFFSET(common_serial_bus.type),
443 	 1},
444 
445 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
446 	 AML_OFFSET(common_serial_bus.flags),
447 	 0},
448 
449 	{ACPI_RSC_1BITFLAG,
450 	 ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
451 	 AML_OFFSET(common_serial_bus.flags),
452 	 1},
453 
454 	{ACPI_RSC_1BITFLAG,
455 	 ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
456 	 AML_OFFSET(common_serial_bus.flags),
457 	 2},
458 
459 	{ACPI_RSC_MOVE8,
460 	 ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
461 	 AML_OFFSET(common_serial_bus.type_revision_id),
462 	 1},
463 
464 	{ACPI_RSC_MOVE16,
465 	 ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
466 	 AML_OFFSET(common_serial_bus.type_data_length),
467 	 1},
468 
469 	/* Vendor data */
470 
471 	{ACPI_RSC_COUNT_SERIAL_VEN,
472 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
473 	 AML_OFFSET(common_serial_bus.type_data_length),
474 	 AML_RESOURCE_UART_MIN_DATA_LEN},
475 
476 	{ACPI_RSC_MOVE_SERIAL_VEN,
477 	 ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
478 	 0,
479 	 sizeof(struct aml_resource_uart_serialbus)},
480 
481 	/* Resource Source */
482 
483 	{ACPI_RSC_MOVE8,
484 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
485 	 AML_OFFSET(common_serial_bus.res_source_index),
486 	 1},
487 
488 	{ACPI_RSC_COUNT_SERIAL_RES,
489 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
490 	 AML_OFFSET(common_serial_bus.type_data_length),
491 	 sizeof(struct aml_resource_common_serialbus)},
492 
493 	{ACPI_RSC_MOVE_SERIAL_RES,
494 	 ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
495 	 AML_OFFSET(common_serial_bus.type_data_length),
496 	 sizeof(struct aml_resource_common_serialbus)},
497 
498 	/* Uart bus type specific  */
499 
500 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),
501 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
502 	 0},
503 
504 	{ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),
505 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
506 	 2},
507 
508 	{ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),
509 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
510 	 4},
511 
512 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),
513 	 AML_OFFSET(uart_serial_bus.type_specific_flags),
514 	 7},
515 
516 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),
517 	 AML_OFFSET(uart_serial_bus.parity),
518 	 1},
519 
520 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),
521 	 AML_OFFSET(uart_serial_bus.lines_enabled),
522 	 1},
523 
524 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),
525 	 AML_OFFSET(uart_serial_bus.rx_fifo_size),
526 	 1},
527 
528 	{ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),
529 	 AML_OFFSET(uart_serial_bus.tx_fifo_size),
530 	 1},
531 
532 	{ACPI_RSC_MOVE32,
533 	 ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),
534 	 AML_OFFSET(uart_serial_bus.default_baud_rate),
535 	 1},
536 };
537 
538 /*******************************************************************************
539  *
540  * acpi_rs_convert_pin_config
541  *
542  ******************************************************************************/
543 
544 struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
545 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
546 	 ACPI_RS_SIZE(struct acpi_resource_pin_config),
547 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
548 
549 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
550 	 sizeof(struct aml_resource_pin_config),
551 	 0},
552 
553 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
554 	 AML_OFFSET(pin_config.revision_id),
555 	 1},
556 
557 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.sharable),
558 	 AML_OFFSET(pin_config.flags),
559 	 0},
560 
561 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
562 	 AML_OFFSET(pin_config.flags),
563 	 1},
564 
565 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
566 	 AML_OFFSET(pin_config.pin_config_type),
567 	 1},
568 
569 	{ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
570 	 AML_OFFSET(pin_config.pin_config_value),
571 	 1},
572 
573 	/* Pin Table */
574 
575 	/*
576 	 * It is OK to use GPIO operations here because none of them refer GPIO
577 	 * structures directly but instead use offsets given here.
578 	 */
579 
580 	{ACPI_RSC_COUNT_GPIO_PIN,
581 	 ACPI_RS_OFFSET(data.pin_config.pin_table_length),
582 	 AML_OFFSET(pin_config.pin_table_offset),
583 	 AML_OFFSET(pin_config.res_source_offset)},
584 
585 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
586 	 AML_OFFSET(pin_config.pin_table_offset),
587 	 0},
588 
589 	/* Resource Source */
590 
591 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
592 	 AML_OFFSET(pin_config.res_source_index),
593 	 1},
594 
595 	{ACPI_RSC_COUNT_GPIO_RES,
596 	 ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
597 	 AML_OFFSET(pin_config.res_source_offset),
598 	 AML_OFFSET(pin_config.vendor_offset)},
599 
600 	{ACPI_RSC_MOVE_GPIO_RES,
601 	 ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
602 	 AML_OFFSET(pin_config.res_source_offset),
603 	 0},
604 
605 	/* Vendor Data */
606 
607 	{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
608 	 AML_OFFSET(pin_config.vendor_length),
609 	 1},
610 
611 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
612 	 AML_OFFSET(pin_config.vendor_offset),
613 	 0},
614 };
615 
616 /*******************************************************************************
617  *
618  * acpi_rs_convert_pin_group
619  *
620  ******************************************************************************/
621 
622 struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
623 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
624 	 ACPI_RS_SIZE(struct acpi_resource_pin_group),
625 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
626 
627 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
628 	 sizeof(struct aml_resource_pin_group),
629 	 0},
630 
631 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
632 	 AML_OFFSET(pin_group.revision_id),
633 	 1},
634 
635 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
636 	 AML_OFFSET(pin_group.flags),
637 	 0},
638 
639 	/* Pin Table */
640 
641 	/*
642 	 * It is OK to use GPIO operations here because none of them refer GPIO
643 	 * structures directly but instead use offsets given here.
644 	 */
645 
646 	{ACPI_RSC_COUNT_GPIO_PIN,
647 	 ACPI_RS_OFFSET(data.pin_group.pin_table_length),
648 	 AML_OFFSET(pin_group.pin_table_offset),
649 	 AML_OFFSET(pin_group.label_offset)},
650 
651 	{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
652 	 AML_OFFSET(pin_group.pin_table_offset),
653 	 0},
654 
655 	/* Resource Label */
656 
657 	{ACPI_RSC_COUNT_GPIO_RES,
658 	 ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
659 	 AML_OFFSET(pin_group.label_offset),
660 	 AML_OFFSET(pin_group.vendor_offset)},
661 
662 	{ACPI_RSC_MOVE_GPIO_RES,
663 	 ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
664 	 AML_OFFSET(pin_group.label_offset),
665 	 0},
666 
667 	/* Vendor Data */
668 
669 	{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
670 	 AML_OFFSET(pin_group.vendor_length),
671 	 1},
672 
673 	{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
674 	 AML_OFFSET(pin_group.vendor_offset),
675 	 0},
676 };
677 
678 /*******************************************************************************
679  *
680  * acpi_rs_convert_pin_group_function
681  *
682  ******************************************************************************/
683 
684 struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
685 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
686 	 ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
687 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
688 
689 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
690 	 sizeof(struct aml_resource_pin_group_function),
691 	 0},
692 
693 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
694 	 AML_OFFSET(pin_group_function.revision_id),
695 	 1},
696 
697 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.sharable),
698 	 AML_OFFSET(pin_group_function.flags),
699 	 0},
700 
701 	{ACPI_RSC_1BITFLAG,
702 	 ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
703 	 AML_OFFSET(pin_group_function.flags),
704 	 1},
705 
706 	{ACPI_RSC_MOVE16,
707 	 ACPI_RS_OFFSET(data.pin_group_function.function_number),
708 	 AML_OFFSET(pin_group_function.function_number),
709 	 1},
710 
711 	/* Resource Source */
712 
713 	{ACPI_RSC_MOVE8,
714 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
715 	 AML_OFFSET(pin_group_function.res_source_index),
716 	 1},
717 
718 	{ACPI_RSC_COUNT_GPIO_RES,
719 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
720 	 AML_OFFSET(pin_group_function.res_source_offset),
721 	 AML_OFFSET(pin_group_function.res_source_label_offset)},
722 
723 	{ACPI_RSC_MOVE_GPIO_RES,
724 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
725 	 AML_OFFSET(pin_group_function.res_source_offset),
726 	 0},
727 
728 	/* Resource Source Label */
729 
730 	{ACPI_RSC_COUNT_GPIO_RES,
731 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
732 			string_length),
733 	 AML_OFFSET(pin_group_function.res_source_label_offset),
734 	 AML_OFFSET(pin_group_function.vendor_offset)},
735 
736 	{ACPI_RSC_MOVE_GPIO_RES,
737 	 ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
738 			string_ptr),
739 	 AML_OFFSET(pin_group_function.res_source_label_offset),
740 	 0},
741 
742 	/* Vendor Data */
743 
744 	{ACPI_RSC_COUNT_GPIO_VEN,
745 	 ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
746 	 AML_OFFSET(pin_group_function.vendor_length),
747 	 1},
748 
749 	{ACPI_RSC_MOVE_GPIO_RES,
750 	 ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
751 	 AML_OFFSET(pin_group_function.vendor_offset),
752 	 0},
753 };
754 
755 /*******************************************************************************
756  *
757  * acpi_rs_convert_pin_group_config
758  *
759  ******************************************************************************/
760 
761 struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
762 	{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
763 	 ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
764 	 ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
765 
766 	{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
767 	 sizeof(struct aml_resource_pin_group_config),
768 	 0},
769 
770 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
771 	 AML_OFFSET(pin_group_config.revision_id),
772 	 1},
773 
774 	{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.sharable),
775 	 AML_OFFSET(pin_group_config.flags),
776 	 0},
777 
778 	{ACPI_RSC_1BITFLAG,
779 	 ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
780 	 AML_OFFSET(pin_group_config.flags),
781 	 1},
782 
783 	{ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
784 	 AML_OFFSET(pin_group_config.pin_config_type),
785 	 1},
786 
787 	{ACPI_RSC_MOVE32,
788 	 ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
789 	 AML_OFFSET(pin_group_config.pin_config_value),
790 	 1},
791 
792 	/* Resource Source */
793 
794 	{ACPI_RSC_MOVE8,
795 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
796 	 AML_OFFSET(pin_group_config.res_source_index),
797 	 1},
798 
799 	{ACPI_RSC_COUNT_GPIO_RES,
800 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
801 	 AML_OFFSET(pin_group_config.res_source_offset),
802 	 AML_OFFSET(pin_group_config.res_source_label_offset)},
803 
804 	{ACPI_RSC_MOVE_GPIO_RES,
805 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
806 	 AML_OFFSET(pin_group_config.res_source_offset),
807 	 0},
808 
809 	/* Resource Source Label */
810 
811 	{ACPI_RSC_COUNT_GPIO_RES,
812 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
813 			string_length),
814 	 AML_OFFSET(pin_group_config.res_source_label_offset),
815 	 AML_OFFSET(pin_group_config.vendor_offset)},
816 
817 	{ACPI_RSC_MOVE_GPIO_RES,
818 	 ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
819 	 AML_OFFSET(pin_group_config.res_source_label_offset),
820 	 0},
821 
822 	/* Vendor Data */
823 
824 	{ACPI_RSC_COUNT_GPIO_VEN,
825 	 ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
826 	 AML_OFFSET(pin_group_config.vendor_length),
827 	 1},
828 
829 	{ACPI_RSC_MOVE_GPIO_RES,
830 	 ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
831 	 AML_OFFSET(pin_group_config.vendor_offset),
832 	 0},
833 };
834