GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / acpi / acpica / rsserial.c
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 };