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  };
922