Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / acpi / acpica / rsserial.c
1 /*******************************************************************************
2  *
3  * Module Name: rsserial - GPIO/serial_bus resource descriptors
4  *
5  ******************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2015, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43
44 #include <acpi/acpi.h>
45 #include "accommon.h"
46 #include "acresrc.h"
47
48 #define _COMPONENT          ACPI_RESOURCES
49 ACPI_MODULE_NAME("rsserial")
50
51 /*******************************************************************************
52  *
53  * acpi_rs_convert_gpio
54  *
55  ******************************************************************************/
56 struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
57         {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO,
58          ACPI_RS_SIZE(struct acpi_resource_gpio),
59          ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)},
60
61         {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO,
62          sizeof(struct aml_resource_gpio),
63          0},
64
65         /*
66          * These fields are contiguous in both the source and destination:
67          * revision_id
68          * connection_type
69          */
70         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id),
71          AML_OFFSET(gpio.revision_id),
72          2},
73
74         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer),
75          AML_OFFSET(gpio.flags),
76          0},
77
78         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.sharable),
79          AML_OFFSET(gpio.int_flags),
80          3},
81
82         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable),
83          AML_OFFSET(gpio.int_flags),
84          4},
85
86         {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction),
87          AML_OFFSET(gpio.int_flags),
88          0},
89
90         {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering),
91          AML_OFFSET(gpio.int_flags),
92          0},
93
94         {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity),
95          AML_OFFSET(gpio.int_flags),
96          1},
97
98         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config),
99          AML_OFFSET(gpio.pin_config),
100          1},
101
102         /*
103          * These fields are contiguous in both the source and destination:
104          * drive_strength
105          * debounce_timeout
106          */
107         {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength),
108          AML_OFFSET(gpio.drive_strength),
109          2},
110
111         /* Pin Table */
112
113         {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length),
114          AML_OFFSET(gpio.pin_table_offset),
115          AML_OFFSET(gpio.res_source_offset)},
116
117         {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table),
118          AML_OFFSET(gpio.pin_table_offset),
119          0},
120
121         /* Resource Source */
122
123         {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index),
124          AML_OFFSET(gpio.res_source_index),
125          1},
126
127         {ACPI_RSC_COUNT_GPIO_RES,
128          ACPI_RS_OFFSET(data.gpio.resource_source.string_length),
129          AML_OFFSET(gpio.res_source_offset),
130          AML_OFFSET(gpio.vendor_offset)},
131
132         {ACPI_RSC_MOVE_GPIO_RES,
133          ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr),
134          AML_OFFSET(gpio.res_source_offset),
135          0},
136
137         /* Vendor Data */
138
139         {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length),
140          AML_OFFSET(gpio.vendor_length),
141          1},
142
143         {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data),
144          AML_OFFSET(gpio.vendor_offset),
145          0},
146 };
147
148 /*******************************************************************************
149  *
150  * acpi_rs_convert_i2c_serial_bus
151  *
152  ******************************************************************************/
153
154 struct 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
240 struct 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
342 struct 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 };