]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - sys/contrib/dev/acpica/components/resources/rsserial.c
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / sys / contrib / dev / acpica / components / resources / rsserial.c
1 /*******************************************************************************
2  *
3  * Module Name: rsserial - GPIO/SerialBus resource descriptors
4  *
5  ******************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2013, 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 #define __RSIRQ_C__
45
46 #include <contrib/dev/acpica/include/acpi.h>
47 #include <contrib/dev/acpica/include/accommon.h>
48 #include <contrib/dev/acpica/include/acresrc.h>
49
50 #define _COMPONENT          ACPI_RESOURCES
51         ACPI_MODULE_NAME    ("rsserial")
52
53
54 /*******************************************************************************
55  *
56  * AcpiRsConvertGpio
57  *
58  ******************************************************************************/
59
60 ACPI_RSCONVERT_INFO     AcpiRsConvertGpio[18] =
61 {
62     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_GPIO,
63                         ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
64                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)},
65
66     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_GPIO,
67                         sizeof (AML_RESOURCE_GPIO),
68                         0},
69
70     /*
71      * These fields are contiguous in both the source and destination:
72      * RevisionId
73      * ConnectionType
74      */
75     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.RevisionId),
76                         AML_OFFSET (Gpio.RevisionId),
77                         2},
78
79     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer),
80                         AML_OFFSET (Gpio.Flags),
81                         0},
82
83     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Sharable),
84                         AML_OFFSET (Gpio.IntFlags),
85                         3},
86
87     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable),
88                         AML_OFFSET (Gpio.IntFlags),
89                         4},
90
91     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction),
92                         AML_OFFSET (Gpio.IntFlags),
93                         0},
94
95     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering),
96                         AML_OFFSET (Gpio.IntFlags),
97                         0},
98
99     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity),
100                         AML_OFFSET (Gpio.IntFlags),
101                         1},
102
103     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.PinConfig),
104                         AML_OFFSET (Gpio.PinConfig),
105                         1},
106
107     /*
108      * These fields are contiguous in both the source and destination:
109      * DriveStrength
110      * DebounceTimeout
111      */
112     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Gpio.DriveStrength),
113                         AML_OFFSET (Gpio.DriveStrength),
114                         2},
115
116     /* Pin Table */
117
118     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength),
119                         AML_OFFSET (Gpio.PinTableOffset),
120                         AML_OFFSET (Gpio.ResSourceOffset)},
121
122     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable),
123                         AML_OFFSET (Gpio.PinTableOffset),
124                         0},
125
126     /* Resource Source */
127
128     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index),
129                         AML_OFFSET (Gpio.ResSourceIndex),
130                         1},
131
132     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength),
133                         AML_OFFSET (Gpio.ResSourceOffset),
134                         AML_OFFSET (Gpio.VendorOffset)},
135
136     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr),
137                         AML_OFFSET (Gpio.ResSourceOffset),
138                         0},
139
140     /* Vendor Data */
141
142     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.Gpio.VendorLength),
143                         AML_OFFSET (Gpio.VendorLength),
144                         1},
145
146     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.VendorData),
147                         AML_OFFSET (Gpio.VendorOffset),
148                         0},
149 };
150
151
152 /*******************************************************************************
153  *
154  * AcpiRsConvertI2cSerialBus
155  *
156  ******************************************************************************/
157
158 ACPI_RSCONVERT_INFO     AcpiRsConvertI2cSerialBus[16] =
159 {
160     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
161                         ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS),
162                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)},
163
164     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
165                         sizeof (AML_RESOURCE_I2C_SERIALBUS),
166                         0},
167
168     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
169                         AML_OFFSET (CommonSerialBus.RevisionId),
170                         1},
171
172     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
173                         AML_OFFSET (CommonSerialBus.Type),
174                         1},
175
176     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
177                         AML_OFFSET (CommonSerialBus.Flags),
178                         0},
179
180     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
181                         AML_OFFSET (CommonSerialBus.Flags),
182                         1},
183
184     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
185                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
186                         1},
187
188     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
189                         AML_OFFSET (CommonSerialBus.TypeDataLength),
190                         1},
191
192     /* Vendor data */
193
194     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
195                         AML_OFFSET (CommonSerialBus.TypeDataLength),
196                         AML_RESOURCE_I2C_MIN_DATA_LEN},
197
198     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
199                         0,
200                         sizeof (AML_RESOURCE_I2C_SERIALBUS)},
201
202     /* Resource Source */
203
204     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
205                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
206                         1},
207
208     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
209                         AML_OFFSET (CommonSerialBus.TypeDataLength),
210                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
211
212     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
213                         AML_OFFSET (CommonSerialBus.TypeDataLength),
214                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
215
216     /* I2C bus type specific */
217
218     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode),
219                         AML_OFFSET (I2cSerialBus.TypeSpecificFlags),
220                         0},
221
222     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed),
223                         AML_OFFSET (I2cSerialBus.ConnectionSpeed),
224                         1},
225
226     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress),
227                         AML_OFFSET (I2cSerialBus.SlaveAddress),
228                         1},
229 };
230
231
232 /*******************************************************************************
233  *
234  * AcpiRsConvertSpiSerialBus
235  *
236  ******************************************************************************/
237
238 ACPI_RSCONVERT_INFO     AcpiRsConvertSpiSerialBus[20] =
239 {
240     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
241                         ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS),
242                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)},
243
244     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
245                         sizeof (AML_RESOURCE_SPI_SERIALBUS),
246                         0},
247
248     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
249                         AML_OFFSET (CommonSerialBus.RevisionId),
250                         1},
251
252     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
253                         AML_OFFSET (CommonSerialBus.Type),
254                         1},
255
256     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
257                         AML_OFFSET (CommonSerialBus.Flags),
258                         0},
259
260     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
261                         AML_OFFSET (CommonSerialBus.Flags),
262                         1},
263
264     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
265                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
266                         1},
267
268     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
269                         AML_OFFSET (CommonSerialBus.TypeDataLength),
270                         1},
271
272     /* Vendor data */
273
274     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
275                         AML_OFFSET (CommonSerialBus.TypeDataLength),
276                         AML_RESOURCE_SPI_MIN_DATA_LEN},
277
278     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
279                         0,
280                         sizeof (AML_RESOURCE_SPI_SERIALBUS)},
281
282     /* Resource Source */
283
284     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
285                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
286                         1},
287
288     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
289                         AML_OFFSET (CommonSerialBus.TypeDataLength),
290                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
291
292     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
293                         AML_OFFSET (CommonSerialBus.TypeDataLength),
294                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
295
296     /* Spi bus type specific  */
297
298     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode),
299                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
300                         0},
301
302     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity),
303                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
304                         1},
305
306     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength),
307                         AML_OFFSET (SpiSerialBus.DataBitLength),
308                         1},
309
310     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase),
311                         AML_OFFSET (SpiSerialBus.ClockPhase),
312                         1},
313
314     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity),
315                         AML_OFFSET (SpiSerialBus.ClockPolarity),
316                         1},
317
318     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection),
319                         AML_OFFSET (SpiSerialBus.DeviceSelection),
320                         1},
321
322     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed),
323                         AML_OFFSET (SpiSerialBus.ConnectionSpeed),
324                         1},
325 };
326
327
328 /*******************************************************************************
329  *
330  * AcpiRsConvertUartSerialBus
331  *
332  ******************************************************************************/
333
334 ACPI_RSCONVERT_INFO     AcpiRsConvertUartSerialBus[22] =
335 {
336     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
337                         ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS),
338                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)},
339
340     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
341                         sizeof (AML_RESOURCE_UART_SERIALBUS),
342                         0},
343
344     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
345                         AML_OFFSET (CommonSerialBus.RevisionId),
346                         1},
347
348     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
349                         AML_OFFSET (CommonSerialBus.Type),
350                         1},
351
352     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
353                         AML_OFFSET (CommonSerialBus.Flags),
354                         0},
355
356     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
357                         AML_OFFSET (CommonSerialBus.Flags),
358                         1},
359
360     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
361                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
362                         1},
363
364     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
365                         AML_OFFSET (CommonSerialBus.TypeDataLength),
366                         1},
367
368     /* Vendor data */
369
370     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
371                         AML_OFFSET (CommonSerialBus.TypeDataLength),
372                         AML_RESOURCE_UART_MIN_DATA_LEN},
373
374     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
375                         0,
376                         sizeof (AML_RESOURCE_UART_SERIALBUS)},
377
378     /* Resource Source */
379
380     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
381                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
382                         1},
383
384     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
385                         AML_OFFSET (CommonSerialBus.TypeDataLength),
386                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
387
388     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
389                         AML_OFFSET (CommonSerialBus.TypeDataLength),
390                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
391
392     /* Uart bus type specific  */
393
394     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl),
395                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
396                         0},
397
398     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits),
399                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
400                         2},
401
402     {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits),
403                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
404                         4},
405
406     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian),
407                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
408                         7},
409
410     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.Parity),
411                         AML_OFFSET (UartSerialBus.Parity),
412                         1},
413
414     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled),
415                         AML_OFFSET (UartSerialBus.LinesEnabled),
416                         1},
417
418     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize),
419                         AML_OFFSET (UartSerialBus.RxFifoSize),
420                         1},
421
422     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize),
423                         AML_OFFSET (UartSerialBus.TxFifoSize),
424                         1},
425
426     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate),
427                         AML_OFFSET (UartSerialBus.DefaultBaudRate),
428                         1},
429 };