rsserial.c revision 1.1.1.13 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