xref: /netbsd-src/sys/external/bsd/acpica/dist/resources/rsserial.c (revision 046a29855e04359424fd074e8313af6b6be8cfb6)
1 /*******************************************************************************
2  *
3  * Module Name: rsserial - GPIO/SerialBus resource descriptors
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2023, 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 MERCHANTABILITY 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.h"
45 #include "accommon.h"
46 #include "acresrc.h"
47 
48 #define _COMPONENT          ACPI_RESOURCES
49         ACPI_MODULE_NAME    ("rsserial")
50 
51 
52 /*******************************************************************************
53  *
54  * AcpiRsConvertGpio
55  *
56  ******************************************************************************/
57 
58 ACPI_RSCONVERT_INFO     AcpiRsConvertGpio[18] =
59 {
60     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_GPIO,
61                         ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
62                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertGpio)},
63 
64     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_GPIO,
65                         sizeof (AML_RESOURCE_GPIO),
66                         0},
67 
68     /*
69      * These fields are contiguous in both the source and destination:
70      * RevisionId
71      * ConnectionType
72      */
73     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.RevisionId),
74                         AML_OFFSET (Gpio.RevisionId),
75                         2},
76 
77     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.ProducerConsumer),
78                         AML_OFFSET (Gpio.Flags),
79                         0},
80 
81     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Shareable),
82                         AML_OFFSET (Gpio.IntFlags),
83                         3},
84 
85     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.WakeCapable),
86                         AML_OFFSET (Gpio.IntFlags),
87                         4},
88 
89     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.IoRestriction),
90                         AML_OFFSET (Gpio.IntFlags),
91                         0},
92 
93     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Triggering),
94                         AML_OFFSET (Gpio.IntFlags),
95                         0},
96 
97     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Gpio.Polarity),
98                         AML_OFFSET (Gpio.IntFlags),
99                         1},
100 
101     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.PinConfig),
102                         AML_OFFSET (Gpio.PinConfig),
103                         1},
104 
105     /*
106      * These fields are contiguous in both the source and destination:
107      * DriveStrength
108      * DebounceTimeout
109      */
110     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Gpio.DriveStrength),
111                         AML_OFFSET (Gpio.DriveStrength),
112                         2},
113 
114     /* Pin Table */
115 
116     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTableLength),
117                         AML_OFFSET (Gpio.PinTableOffset),
118                         AML_OFFSET (Gpio.ResSourceOffset)},
119 
120     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.Gpio.PinTable),
121                         AML_OFFSET (Gpio.PinTableOffset),
122                         0},
123 
124     /* Resource Source */
125 
126     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Gpio.ResourceSource.Index),
127                         AML_OFFSET (Gpio.ResSourceIndex),
128                         1},
129 
130     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringLength),
131                         AML_OFFSET (Gpio.ResSourceOffset),
132                         AML_OFFSET (Gpio.VendorOffset)},
133 
134     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.ResourceSource.StringPtr),
135                         AML_OFFSET (Gpio.ResSourceOffset),
136                         0},
137 
138     /* Vendor Data */
139 
140     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.Gpio.VendorLength),
141                         AML_OFFSET (Gpio.VendorLength),
142                         1},
143 
144     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.Gpio.VendorData),
145                         AML_OFFSET (Gpio.VendorOffset),
146                         0},
147 };
148 
149 /*******************************************************************************
150  *
151  * AcpiRsConvertClockInput
152  *
153  ******************************************************************************/
154 
155 ACPI_RSCONVERT_INFO     AcpiRsConvertClockInput[8] =
156 {
157     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_CLOCK_INPUT,
158                         ACPI_RS_SIZE (ACPI_RESOURCE_CLOCK_INPUT),
159                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertClockInput)},
160 
161     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_CLOCK_INPUT,
162                         sizeof (AML_RESOURCE_CLOCK_INPUT),
163                         0},
164 
165     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.ClockInput.RevisionId),
166                         AML_OFFSET (ClockInput.RevisionId),
167                         1},
168 
169     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Mode),
170                         AML_OFFSET (ClockInput.Flags),
171                         0},
172 
173     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.ClockInput.Scale),
174                         AML_OFFSET (ClockInput.Flags),
175                         1},
176 
177     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.ClockInput.FrequencyDivisor),
178                         AML_OFFSET (ClockInput.FrequencyDivisor),
179                         2},
180 
181     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.ClockInput.FrequencyNumerator),
182                         AML_OFFSET (ClockInput.FrequencyNumerator),
183                         4},
184 
185     /* Resource Source */
186     {ACPI_RSC_SOURCE,    ACPI_RS_OFFSET (Data.ClockInput.ResourceSource),
187                         0,
188                         sizeof(AML_RESOURCE_CLOCK_INPUT)},
189 
190 };
191 
192 
193 /*******************************************************************************
194  *
195  * AcpiRsConvertPinfunction
196  *
197  ******************************************************************************/
198 
199 ACPI_RSCONVERT_INFO     AcpiRsConvertPinFunction[13] =
200 {
201     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_FUNCTION,
202                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
203                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)},
204 
205     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_FUNCTION,
206                         sizeof (AML_RESOURCE_PIN_FUNCTION),
207                         0},
208 
209     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.RevisionId),
210                         AML_OFFSET (PinFunction.RevisionId),
211                         1},
212 
213     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Shareable),
214                         AML_OFFSET (PinFunction.Flags),
215                         0},
216 
217     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.PinConfig),
218                         AML_OFFSET (PinFunction.PinConfig),
219                         1},
220 
221     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber),
222                         AML_OFFSET (PinFunction.FunctionNumber),
223                         2},
224 
225     /* Pin Table */
226 
227     /*
228      * It is OK to use GPIO operations here because none of them refer GPIO
229      * structures directly but instead use offsets given here.
230      */
231 
232     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength),
233                         AML_OFFSET (PinFunction.PinTableOffset),
234                         AML_OFFSET (PinFunction.ResSourceOffset)},
235 
236     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable),
237                         AML_OFFSET (PinFunction.PinTableOffset),
238                         0},
239 
240     /* Resource Source */
241 
242     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index),
243                         AML_OFFSET (PinFunction.ResSourceIndex),
244                         1},
245 
246     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength),
247                         AML_OFFSET (PinFunction.ResSourceOffset),
248                         AML_OFFSET (PinFunction.VendorOffset)},
249 
250     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr),
251                         AML_OFFSET (PinFunction.ResSourceOffset),
252                         0},
253 
254     /* Vendor Data */
255 
256     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinFunction.VendorLength),
257                         AML_OFFSET (PinFunction.VendorLength),
258                         1},
259 
260     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinFunction.VendorData),
261                         AML_OFFSET (PinFunction.VendorOffset),
262                         0},
263 };
264 
265 
266 /*******************************************************************************
267  *
268  * AcpiRsConvertCsi2SerialBus
269  *
270  ******************************************************************************/
271 
272 ACPI_RSCONVERT_INFO     AcpiRsConvertCsi2SerialBus[14] =
273 {
274     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
275                         ACPI_RS_SIZE (ACPI_RESOURCE_CSI2_SERIALBUS),
276                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertCsi2SerialBus)},
277 
278     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
279                         sizeof (AML_RESOURCE_CSI2_SERIALBUS),
280                         0},
281 
282     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
283                         AML_OFFSET (CommonSerialBus.RevisionId),
284                         1},
285 
286     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.Type),
287                         AML_OFFSET (Csi2SerialBus.Type),
288                         1},
289 
290     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.ProducerConsumer),
291                         AML_OFFSET (Csi2SerialBus.Flags),
292                         1},
293 
294     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.SlaveMode),
295                         AML_OFFSET (Csi2SerialBus.Flags),
296                         0},
297 
298     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.PhyType),
299                         AML_OFFSET (Csi2SerialBus.TypeSpecificFlags),
300                         0},
301 
302     {ACPI_RSC_6BITFLAG, ACPI_RS_OFFSET (Data.Csi2SerialBus.LocalPortInstance),
303                         AML_OFFSET (Csi2SerialBus.TypeSpecificFlags),
304                         2},
305 
306     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.TypeRevisionId),
307                         AML_OFFSET (Csi2SerialBus.TypeRevisionId),
308                         1},
309 
310     /* Vendor data */
311 
312     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorLength),
313                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
314                         AML_RESOURCE_CSI2_MIN_DATA_LEN},
315 
316     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.Csi2SerialBus.VendorData),
317                         0,
318                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
319 
320     /* Resource Source */
321 
322     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.Index),
323                         AML_OFFSET (Csi2SerialBus.ResSourceIndex),
324                         1},
325 
326     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringLength),
327                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
328                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
329 
330     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.Csi2SerialBus.ResourceSource.StringPtr),
331                         AML_OFFSET (Csi2SerialBus.TypeDataLength),
332                         sizeof (AML_RESOURCE_CSI2_SERIALBUS)},
333 };
334 
335 
336 /*******************************************************************************
337  *
338  * AcpiRsConvertI2cSerialBus
339  *
340  ******************************************************************************/
341 
342 ACPI_RSCONVERT_INFO     AcpiRsConvertI2cSerialBus[17] =
343 {
344     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
345                         ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS),
346                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertI2cSerialBus)},
347 
348     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
349                         sizeof (AML_RESOURCE_I2C_SERIALBUS),
350                         0},
351 
352     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
353                         AML_OFFSET (CommonSerialBus.RevisionId),
354                         1},
355 
356     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
357                         AML_OFFSET (CommonSerialBus.Type),
358                         1},
359 
360     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
361                         AML_OFFSET (CommonSerialBus.Flags),
362                         0},
363 
364     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
365                         AML_OFFSET (CommonSerialBus.Flags),
366                         1},
367 
368     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
369                         AML_OFFSET (CommonSerialBus.Flags),
370                         2},
371 
372     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
373                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
374                         1},
375 
376     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
377                         AML_OFFSET (CommonSerialBus.TypeDataLength),
378                         1},
379 
380     /* Vendor data */
381 
382     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
383                         AML_OFFSET (CommonSerialBus.TypeDataLength),
384                         AML_RESOURCE_I2C_MIN_DATA_LEN},
385 
386     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
387                         0,
388                         sizeof (AML_RESOURCE_I2C_SERIALBUS)},
389 
390     /* Resource Source */
391 
392     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
393                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
394                         1},
395 
396     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
397                         AML_OFFSET (CommonSerialBus.TypeDataLength),
398                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
399 
400     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
401                         AML_OFFSET (CommonSerialBus.TypeDataLength),
402                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
403 
404     /* I2C bus type specific */
405 
406     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.I2cSerialBus.AccessMode),
407                         AML_OFFSET (I2cSerialBus.TypeSpecificFlags),
408                         0},
409 
410     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.I2cSerialBus.ConnectionSpeed),
411                         AML_OFFSET (I2cSerialBus.ConnectionSpeed),
412                         1},
413 
414     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.I2cSerialBus.SlaveAddress),
415                         AML_OFFSET (I2cSerialBus.SlaveAddress),
416                         1},
417 };
418 
419 
420 /*******************************************************************************
421  *
422  * AcpiRsConvertSpiSerialBus
423  *
424  ******************************************************************************/
425 
426 ACPI_RSCONVERT_INFO     AcpiRsConvertSpiSerialBus[21] =
427 {
428     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
429                         ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS),
430                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertSpiSerialBus)},
431 
432     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
433                         sizeof (AML_RESOURCE_SPI_SERIALBUS),
434                         0},
435 
436     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
437                         AML_OFFSET (CommonSerialBus.RevisionId),
438                         1},
439 
440     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
441                         AML_OFFSET (CommonSerialBus.Type),
442                         1},
443 
444     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
445                         AML_OFFSET (CommonSerialBus.Flags),
446                         0},
447 
448     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
449                         AML_OFFSET (CommonSerialBus.Flags),
450                         1},
451 
452     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
453                         AML_OFFSET (CommonSerialBus.Flags),
454                         2},
455 
456     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
457                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
458                         1},
459 
460     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
461                         AML_OFFSET (CommonSerialBus.TypeDataLength),
462                         1},
463 
464     /* Vendor data */
465 
466     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
467                         AML_OFFSET (CommonSerialBus.TypeDataLength),
468                         AML_RESOURCE_SPI_MIN_DATA_LEN},
469 
470     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
471                         0,
472                         sizeof (AML_RESOURCE_SPI_SERIALBUS)},
473 
474     /* Resource Source */
475 
476     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
477                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
478                         1},
479 
480     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
481                         AML_OFFSET (CommonSerialBus.TypeDataLength),
482                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
483 
484     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
485                         AML_OFFSET (CommonSerialBus.TypeDataLength),
486                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
487 
488     /* Spi bus type specific  */
489 
490     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.WireMode),
491                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
492                         0},
493 
494     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.SpiSerialBus.DevicePolarity),
495                         AML_OFFSET (SpiSerialBus.TypeSpecificFlags),
496                         1},
497 
498     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.DataBitLength),
499                         AML_OFFSET (SpiSerialBus.DataBitLength),
500                         1},
501 
502     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPhase),
503                         AML_OFFSET (SpiSerialBus.ClockPhase),
504                         1},
505 
506     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.SpiSerialBus.ClockPolarity),
507                         AML_OFFSET (SpiSerialBus.ClockPolarity),
508                         1},
509 
510     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.SpiSerialBus.DeviceSelection),
511                         AML_OFFSET (SpiSerialBus.DeviceSelection),
512                         1},
513 
514     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.SpiSerialBus.ConnectionSpeed),
515                         AML_OFFSET (SpiSerialBus.ConnectionSpeed),
516                         1},
517 };
518 
519 
520 /*******************************************************************************
521  *
522  * AcpiRsConvertUartSerialBus
523  *
524  ******************************************************************************/
525 
526 ACPI_RSCONVERT_INFO     AcpiRsConvertUartSerialBus[23] =
527 {
528     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_SERIAL_BUS,
529                         ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS),
530                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertUartSerialBus)},
531 
532     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_SERIAL_BUS,
533                         sizeof (AML_RESOURCE_UART_SERIALBUS),
534                         0},
535 
536     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.RevisionId),
537                         AML_OFFSET (CommonSerialBus.RevisionId),
538                         1},
539 
540     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.Type),
541                         AML_OFFSET (CommonSerialBus.Type),
542                         1},
543 
544     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.SlaveMode),
545                         AML_OFFSET (CommonSerialBus.Flags),
546                         0},
547 
548     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ProducerConsumer),
549                         AML_OFFSET (CommonSerialBus.Flags),
550                         1},
551 
552     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.CommonSerialBus.ConnectionSharing),
553                         AML_OFFSET (CommonSerialBus.Flags),
554                         2},
555 
556     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.TypeRevisionId),
557                         AML_OFFSET (CommonSerialBus.TypeRevisionId),
558                         1},
559 
560     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.CommonSerialBus.TypeDataLength),
561                         AML_OFFSET (CommonSerialBus.TypeDataLength),
562                         1},
563 
564     /* Vendor data */
565 
566     {ACPI_RSC_COUNT_SERIAL_VEN, ACPI_RS_OFFSET (Data.CommonSerialBus.VendorLength),
567                         AML_OFFSET (CommonSerialBus.TypeDataLength),
568                         AML_RESOURCE_UART_MIN_DATA_LEN},
569 
570     {ACPI_RSC_MOVE_SERIAL_VEN,  ACPI_RS_OFFSET (Data.CommonSerialBus.VendorData),
571                         0,
572                         sizeof (AML_RESOURCE_UART_SERIALBUS)},
573 
574     /* Resource Source */
575 
576     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.Index),
577                         AML_OFFSET (CommonSerialBus.ResSourceIndex),
578                         1},
579 
580     {ACPI_RSC_COUNT_SERIAL_RES, ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringLength),
581                         AML_OFFSET (CommonSerialBus.TypeDataLength),
582                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
583 
584     {ACPI_RSC_MOVE_SERIAL_RES,  ACPI_RS_OFFSET (Data.CommonSerialBus.ResourceSource.StringPtr),
585                         AML_OFFSET (CommonSerialBus.TypeDataLength),
586                         sizeof (AML_RESOURCE_COMMON_SERIALBUS)},
587 
588     /* Uart bus type specific  */
589 
590     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.FlowControl),
591                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
592                         0},
593 
594     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.StopBits),
595                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
596                         2},
597 
598     {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.DataBits),
599                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
600                         4},
601 
602     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.UartSerialBus.Endian),
603                         AML_OFFSET (UartSerialBus.TypeSpecificFlags),
604                         7},
605 
606     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.Parity),
607                         AML_OFFSET (UartSerialBus.Parity),
608                         1},
609 
610     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.UartSerialBus.LinesEnabled),
611                         AML_OFFSET (UartSerialBus.LinesEnabled),
612                         1},
613 
614     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.RxFifoSize),
615                         AML_OFFSET (UartSerialBus.RxFifoSize),
616                         1},
617 
618     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.UartSerialBus.TxFifoSize),
619                         AML_OFFSET (UartSerialBus.TxFifoSize),
620                         1},
621 
622     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.UartSerialBus.DefaultBaudRate),
623                         AML_OFFSET (UartSerialBus.DefaultBaudRate),
624                         1},
625 };
626 
627 
628 /*******************************************************************************
629  *
630  * AcpiRsConvertPinConfig
631  *
632  ******************************************************************************/
633 
634 ACPI_RSCONVERT_INFO     AcpiRsConvertPinConfig[14] =
635 {
636     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_CONFIG,
637                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
638                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)},
639 
640     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_CONFIG,
641                         sizeof (AML_RESOURCE_PIN_CONFIG),
642                         0},
643 
644     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.RevisionId),
645                         AML_OFFSET (PinConfig.RevisionId),
646                         1},
647 
648     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Shareable),
649                         AML_OFFSET (PinConfig.Flags),
650                         0},
651 
652     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer),
653                         AML_OFFSET (PinConfig.Flags),
654                         1},
655 
656     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.PinConfigType),
657                         AML_OFFSET (PinConfig.PinConfigType),
658                         1},
659 
660     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue),
661                         AML_OFFSET (PinConfig.PinConfigValue),
662                         1},
663 
664     /* Pin Table */
665 
666     /*
667      * It is OK to use GPIO operations here because none of them refer GPIO
668      * structures directly but instead use offsets given here.
669      */
670 
671     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength),
672                         AML_OFFSET (PinConfig.PinTableOffset),
673                         AML_OFFSET (PinConfig.ResSourceOffset)},
674 
675     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable),
676                         AML_OFFSET (PinConfig.PinTableOffset),
677                         0},
678 
679     /* Resource Source */
680 
681     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index),
682                         AML_OFFSET (PinConfig.ResSourceIndex),
683                         1},
684 
685     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength),
686                         AML_OFFSET (PinConfig.ResSourceOffset),
687                         AML_OFFSET (PinConfig.VendorOffset)},
688 
689     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr),
690                         AML_OFFSET (PinConfig.ResSourceOffset),
691                         0},
692 
693     /* Vendor Data */
694 
695     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinConfig.VendorLength),
696                         AML_OFFSET (PinConfig.VendorLength),
697                         1},
698 
699     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinConfig.VendorData),
700                         AML_OFFSET (PinConfig.VendorOffset),
701                         0},
702 };
703 
704 /*******************************************************************************
705  *
706  * AcpiRsConvertPinGroup
707  *
708  ******************************************************************************/
709 
710 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroup[10] =
711 {
712     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP,
713                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
714                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)},
715 
716     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP,
717                         sizeof (AML_RESOURCE_PIN_GROUP),
718                         0},
719 
720     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroup.RevisionId),
721                         AML_OFFSET (PinGroup.RevisionId),
722                         1},
723 
724     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer),
725                         AML_OFFSET (PinGroup.Flags),
726                         0},
727 
728     /* Pin Table */
729 
730     /*
731      * It is OK to use GPIO operations here because none of them refer GPIO
732      * structures directly but instead use offsets given here.
733      */
734 
735     {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength),
736                         AML_OFFSET (PinGroup.PinTableOffset),
737                         AML_OFFSET (PinGroup.LabelOffset)},
738 
739     {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable),
740                         AML_OFFSET (PinGroup.PinTableOffset),
741                         0},
742 
743     /* Resource Label */
744 
745     {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength),
746                         AML_OFFSET (PinGroup.LabelOffset),
747                         AML_OFFSET (PinGroup.VendorOffset)},
748 
749     {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr),
750                         AML_OFFSET (PinGroup.LabelOffset),
751                         0},
752 
753     /* Vendor Data */
754 
755     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroup.VendorLength),
756                         AML_OFFSET (PinGroup.VendorLength),
757                         1},
758 
759     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroup.VendorData),
760                         AML_OFFSET (PinGroup.VendorOffset),
761                         0},
762 };
763 
764 /*******************************************************************************
765  *
766  * AcpiRsConvertPinGroupFunction
767  *
768  ******************************************************************************/
769 
770 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroupFunction[13] =
771 {
772     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
773                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
774                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)},
775 
776     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
777                         sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION),
778                         0},
779 
780     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId),
781                         AML_OFFSET (PinGroupFunction.RevisionId),
782                         1},
783 
784     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Shareable),
785                         AML_OFFSET (PinGroupFunction.Flags),
786                         0},
787 
788     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer),
789                         AML_OFFSET (PinGroupFunction.Flags),
790                         1},
791 
792     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber),
793                         AML_OFFSET (PinGroupFunction.FunctionNumber),
794                         1},
795 
796     /* Resource Source */
797 
798     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index),
799                         AML_OFFSET (PinGroupFunction.ResSourceIndex),
800                         1},
801 
802     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength),
803                         AML_OFFSET (PinGroupFunction.ResSourceOffset),
804                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)},
805 
806     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr),
807                         AML_OFFSET (PinGroupFunction.ResSourceOffset),
808                         0},
809 
810     /* Resource Source Label */
811 
812     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength),
813                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
814                         AML_OFFSET (PinGroupFunction.VendorOffset)},
815 
816     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr),
817                         AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
818                         0},
819 
820     /* Vendor Data */
821 
822     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength),
823                         AML_OFFSET (PinGroupFunction.VendorLength),
824                         1},
825 
826     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData),
827                         AML_OFFSET (PinGroupFunction.VendorOffset),
828                         0},
829 };
830 
831 /*******************************************************************************
832  *
833  * AcpiRsConvertPinGroupConfig
834  *
835  ******************************************************************************/
836 
837 ACPI_RSCONVERT_INFO     AcpiRsConvertPinGroupConfig[14] =
838 {
839     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
840                         ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
841                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)},
842 
843     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
844                         sizeof (AML_RESOURCE_PIN_GROUP_CONFIG),
845                         0},
846 
847     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId),
848                         AML_OFFSET (PinGroupConfig.RevisionId),
849                         1},
850 
851     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Shareable),
852                         AML_OFFSET (PinGroupConfig.Flags),
853                         0},
854 
855     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer),
856                         AML_OFFSET (PinGroupConfig.Flags),
857                         1},
858 
859     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType),
860                         AML_OFFSET (PinGroupConfig.PinConfigType),
861                         1},
862 
863     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue),
864                         AML_OFFSET (PinGroupConfig.PinConfigValue),
865                         1},
866 
867     /* Resource Source */
868 
869     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index),
870                         AML_OFFSET (PinGroupConfig.ResSourceIndex),
871                         1},
872 
873     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength),
874                         AML_OFFSET (PinGroupConfig.ResSourceOffset),
875                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)},
876 
877     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr),
878                         AML_OFFSET (PinGroupConfig.ResSourceOffset),
879                         0},
880 
881     /* Resource Source Label */
882 
883     {ACPI_RSC_COUNT_GPIO_RES,  ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength),
884                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
885                         AML_OFFSET (PinGroupConfig.VendorOffset)},
886 
887     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr),
888                         AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
889                         0},
890 
891     /* Vendor Data */
892 
893     {ACPI_RSC_COUNT_GPIO_VEN,   ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength),
894                         AML_OFFSET (PinGroupConfig.VendorLength),
895                         1},
896 
897     {ACPI_RSC_MOVE_GPIO_RES,   ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData),
898                         AML_OFFSET (PinGroupConfig.VendorOffset),
899                         0},
900 };
901