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