Linux Audio

Check our new training course

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