1 /*******************************************************************************
2  *
3  * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2014, 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 
45 #include "acpi.h"
46 #include "accommon.h"
47 #include "acdisasm.h"
48 
49 
50 #ifdef ACPI_DISASSEMBLER
51 
52 #define _COMPONENT          ACPI_CA_DEBUGGER
53         ACPI_MODULE_NAME    ("dbresrcl2")
54 
55 /* Local prototypes */
56 
57 static void
58 AcpiDmI2cSerialBusDescriptor (
59     AML_RESOURCE            *Resource,
60     UINT32                  Length,
61     UINT32                  Level);
62 
63 static void
64 AcpiDmSpiSerialBusDescriptor (
65     AML_RESOURCE            *Resource,
66     UINT32                  Length,
67     UINT32                  Level);
68 
69 static void
70 AcpiDmUartSerialBusDescriptor (
71     AML_RESOURCE            *Resource,
72     UINT32                  Length,
73     UINT32                  Level);
74 
75 static void
76 AcpiDmGpioCommon (
77     AML_RESOURCE            *Resource,
78     UINT32                  Level);
79 
80 static void
81 AcpiDmDumpRawDataBuffer (
82     UINT8                   *Buffer,
83     UINT32                  Length,
84     UINT32                  Level);
85 
86 
87 /* Dispatch table for the serial bus descriptors */
88 
89 static ACPI_RESOURCE_HANDLER        SerialBusResourceDispatch [] =
90 {
91     NULL,
92     AcpiDmI2cSerialBusDescriptor,
93     AcpiDmSpiSerialBusDescriptor,
94     AcpiDmUartSerialBusDescriptor
95 };
96 
97 
98 /*******************************************************************************
99  *
100  * FUNCTION:    AcpiDmDumpRawDataBuffer
101  *
102  * PARAMETERS:  Buffer              - Pointer to the data bytes
103  *              Length              - Length of the descriptor in bytes
104  *              Level               - Current source code indentation level
105  *
106  * RETURN:      None
107  *
108  * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
109  *              vendor data bytes.
110  *
111  ******************************************************************************/
112 
113 static void
114 AcpiDmDumpRawDataBuffer (
115     UINT8                   *Buffer,
116     UINT32                  Length,
117     UINT32                  Level)
118 {
119     UINT32                  Index;
120     UINT32                  i;
121     UINT32                  j;
122 
123 
124     if (!Length)
125     {
126         return;
127     }
128 
129     AcpiOsPrintf ("RawDataBuffer (0x%.2X)  // Vendor Data", Length);
130 
131     AcpiOsPrintf ("\n");
132     AcpiDmIndent (Level + 1);
133     AcpiOsPrintf ("{\n");
134     AcpiDmIndent (Level + 2);
135 
136     for (i = 0; i < Length;)
137     {
138         for (j = 0; j < 8; j++)
139         {
140             Index = i + j;
141             if (Index >= Length)
142             {
143                 goto Finish;
144             }
145 
146             AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
147             if ((Index + 1) >= Length)
148             {
149                 goto Finish;
150             }
151 
152             AcpiOsPrintf (", ");
153         }
154         AcpiOsPrintf ("\n");
155         AcpiDmIndent (Level + 2);
156 
157         i += 8;
158     }
159 
160 Finish:
161     AcpiOsPrintf ("\n");
162     AcpiDmIndent (Level + 1);
163     AcpiOsPrintf ("}");
164 }
165 
166 
167 /*******************************************************************************
168  *
169  * FUNCTION:    AcpiDmGpioCommon
170  *
171  * PARAMETERS:  Resource            - Pointer to the resource descriptor
172  *              Level               - Current source code indentation level
173  *
174  * RETURN:      None
175  *
176  * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
177  *
178  ******************************************************************************/
179 
180 static void
181 AcpiDmGpioCommon (
182     AML_RESOURCE            *Resource,
183     UINT32                  Level)
184 {
185     UINT32                  PinCount;
186     UINT16                  *PinList;
187     UINT8                   *VendorData;
188     UINT32                  i;
189 
190 
191     /* ResourceSource, ResourceSourceIndex, ResourceType */
192 
193     AcpiDmIndent (Level + 1);
194     if (Resource->Gpio.ResSourceOffset)
195     {
196         AcpiUtPrintString (
197             ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset),
198             ACPI_UINT16_MAX);
199     }
200 
201     AcpiOsPrintf (", ");
202     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
203     AcpiOsPrintf ("%s, ",
204         AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
205 
206     /* Insert a descriptor name */
207 
208     AcpiDmDescriptorName ();
209     AcpiOsPrintf (",");
210 
211     /* Dump the vendor data */
212 
213     if (Resource->Gpio.VendorOffset)
214     {
215         AcpiOsPrintf ("\n");
216         AcpiDmIndent (Level + 1);
217         VendorData = ACPI_ADD_PTR (UINT8, Resource,
218             Resource->Gpio.VendorOffset);
219 
220         AcpiDmDumpRawDataBuffer (VendorData,
221             Resource->Gpio.VendorLength, Level);
222     }
223 
224     AcpiOsPrintf (")\n");
225 
226     /* Dump the interrupt list */
227 
228     AcpiDmIndent (Level + 1);
229     AcpiOsPrintf ("{   // Pin list\n");
230 
231     PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
232         Resource->Gpio.PinTableOffset)) /
233         sizeof (UINT16);
234 
235     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
236         Resource->Gpio.PinTableOffset);
237 
238     for (i = 0; i < PinCount; i++)
239     {
240         AcpiDmIndent (Level + 2);
241         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : "");
242     }
243 
244     AcpiDmIndent (Level + 1);
245     AcpiOsPrintf ("}\n");
246 }
247 
248 
249 /*******************************************************************************
250  *
251  * FUNCTION:    AcpiDmGpioIntDescriptor
252  *
253  * PARAMETERS:  Resource            - Pointer to the resource descriptor
254  *              Length              - Length of the descriptor in bytes
255  *              Level               - Current source code indentation level
256  *
257  * RETURN:      None
258  *
259  * DESCRIPTION: Decode a GPIO Interrupt descriptor
260  *
261  ******************************************************************************/
262 
263 static void
264 AcpiDmGpioIntDescriptor (
265     AML_RESOURCE            *Resource,
266     UINT32                  Length,
267     UINT32                  Level)
268 {
269 
270     /* Dump the GpioInt-specific portion of the descriptor */
271 
272     /* EdgeLevel, ActiveLevel, Shared */
273 
274     AcpiDmIndent (Level);
275     AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
276         AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
277         AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Gpio.IntFlags, 1)],
278         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
279 
280     /* PinConfig, DebounceTimeout */
281 
282     if (Resource->Gpio.PinConfig <= 3)
283     {
284         AcpiOsPrintf ("%s, ",
285             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
286     }
287     else
288     {
289         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
290     }
291     AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
292 
293     /* Dump the GpioInt/GpioIo common portion of the descriptor */
294 
295     AcpiDmGpioCommon (Resource, Level);
296 }
297 
298 
299 /*******************************************************************************
300  *
301  * FUNCTION:    AcpiDmGpioIoDescriptor
302  *
303  * PARAMETERS:  Resource            - Pointer to the resource descriptor
304  *              Length              - Length of the descriptor in bytes
305  *              Level               - Current source code indentation level
306  *
307  * RETURN:      None
308  *
309  * DESCRIPTION: Decode a GPIO I/O descriptor
310  *
311  ******************************************************************************/
312 
313 static void
314 AcpiDmGpioIoDescriptor (
315     AML_RESOURCE            *Resource,
316     UINT32                  Length,
317     UINT32                  Level)
318 {
319 
320     /* Dump the GpioIo-specific portion of the descriptor */
321 
322     /* Shared, PinConfig */
323 
324     AcpiDmIndent (Level);
325     AcpiOsPrintf ("GpioIo (%s, ",
326         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
327 
328     if (Resource->Gpio.PinConfig <= 3)
329     {
330         AcpiOsPrintf ("%s, ",
331             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
332     }
333     else
334     {
335         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
336     }
337 
338     /* DebounceTimeout, DriveStrength, IoRestriction */
339 
340     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
341     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
342     AcpiOsPrintf ("%s,\n",
343         AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
344 
345     /* Dump the GpioInt/GpioIo common portion of the descriptor */
346 
347     AcpiDmGpioCommon (Resource, Level);
348 }
349 
350 
351 /*******************************************************************************
352  *
353  * FUNCTION:    AcpiDmGpioDescriptor
354  *
355  * PARAMETERS:  Resource            - Pointer to the resource descriptor
356  *              Length              - Length of the descriptor in bytes
357  *              Level               - Current source code indentation level
358  *
359  * RETURN:      None
360  *
361  * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
362  *
363  ******************************************************************************/
364 
365 void
366 AcpiDmGpioDescriptor (
367     AML_RESOURCE            *Resource,
368     UINT32                  Length,
369     UINT32                  Level)
370 {
371     UINT8                   ConnectionType;
372 
373 
374     ConnectionType = Resource->Gpio.ConnectionType;
375 
376     switch (ConnectionType)
377     {
378     case AML_RESOURCE_GPIO_TYPE_INT:
379 
380         AcpiDmGpioIntDescriptor (Resource, Length, Level);
381         break;
382 
383     case AML_RESOURCE_GPIO_TYPE_IO:
384 
385         AcpiDmGpioIoDescriptor (Resource, Length, Level);
386         break;
387 
388     default:
389 
390         AcpiOsPrintf ("Unknown GPIO type\n");
391         break;
392     }
393 }
394 
395 
396 /*******************************************************************************
397  *
398  * FUNCTION:    AcpiDmDumpSerialBusVendorData
399  *
400  * PARAMETERS:  Resource            - Pointer to the resource descriptor
401  *
402  * RETURN:      None
403  *
404  * DESCRIPTION: Dump optional serial bus vendor data
405  *
406  ******************************************************************************/
407 
408 static void
409 AcpiDmDumpSerialBusVendorData (
410     AML_RESOURCE            *Resource,
411     UINT32                  Level)
412 {
413     UINT8                   *VendorData;
414     UINT32                  VendorLength;
415 
416 
417     /* Get the (optional) vendor data and length */
418 
419     switch (Resource->CommonSerialBus.Type)
420     {
421     case AML_RESOURCE_I2C_SERIALBUSTYPE:
422 
423         VendorLength = Resource->CommonSerialBus.TypeDataLength -
424             AML_RESOURCE_I2C_MIN_DATA_LEN;
425 
426         VendorData = ACPI_ADD_PTR (UINT8, Resource,
427             sizeof (AML_RESOURCE_I2C_SERIALBUS));
428         break;
429 
430     case AML_RESOURCE_SPI_SERIALBUSTYPE:
431 
432         VendorLength = Resource->CommonSerialBus.TypeDataLength -
433             AML_RESOURCE_SPI_MIN_DATA_LEN;
434 
435         VendorData = ACPI_ADD_PTR (UINT8, Resource,
436             sizeof (AML_RESOURCE_SPI_SERIALBUS));
437         break;
438 
439     case AML_RESOURCE_UART_SERIALBUSTYPE:
440 
441         VendorLength = Resource->CommonSerialBus.TypeDataLength -
442             AML_RESOURCE_UART_MIN_DATA_LEN;
443 
444         VendorData = ACPI_ADD_PTR (UINT8, Resource,
445             sizeof (AML_RESOURCE_UART_SERIALBUS));
446         break;
447 
448     default:
449 
450         return;
451     }
452 
453     /* Dump the vendor bytes as a RawDataBuffer object */
454 
455     AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
456 }
457 
458 
459 /*******************************************************************************
460  *
461  * FUNCTION:    AcpiDmI2cSerialBusDescriptor
462  *
463  * PARAMETERS:  Resource            - Pointer to the resource descriptor
464  *              Length              - Length of the descriptor in bytes
465  *              Level               - Current source code indentation level
466  *
467  * RETURN:      None
468  *
469  * DESCRIPTION: Decode a I2C serial bus descriptor
470  *
471  ******************************************************************************/
472 
473 static void
474 AcpiDmI2cSerialBusDescriptor (
475     AML_RESOURCE            *Resource,
476     UINT32                  Length,
477     UINT32                  Level)
478 {
479     UINT32                  ResourceSourceOffset;
480 
481 
482     /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
483 
484     AcpiDmIndent (Level);
485     AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n",
486         Resource->I2cSerialBus.SlaveAddress,
487         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
488         Resource->I2cSerialBus.ConnectionSpeed);
489 
490     AcpiDmIndent (Level + 1);
491     AcpiOsPrintf ("%s, ",
492         AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
493 
494     /* ResourceSource is a required field */
495 
496     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
497         Resource->CommonSerialBus.TypeDataLength;
498 
499     AcpiUtPrintString (
500         ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
501         ACPI_UINT16_MAX);
502 
503     /* ResourceSourceIndex, ResourceUsage */
504 
505     AcpiOsPrintf (",\n");
506     AcpiDmIndent (Level + 1);
507     AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
508 
509     AcpiOsPrintf ("%s, ",
510         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
511 
512     /* Insert a descriptor name */
513 
514     AcpiDmDescriptorName ();
515     AcpiOsPrintf (",\n");
516 
517     /* Dump the vendor data */
518 
519     AcpiDmIndent (Level + 1);
520     AcpiDmDumpSerialBusVendorData (Resource, Level);
521     AcpiOsPrintf (")\n");
522 }
523 
524 
525 /*******************************************************************************
526  *
527  * FUNCTION:    AcpiDmSpiSerialBusDescriptor
528  *
529  * PARAMETERS:  Resource            - Pointer to the resource descriptor
530  *              Length              - Length of the descriptor in bytes
531  *              Level               - Current source code indentation level
532  *
533  * RETURN:      None
534  *
535  * DESCRIPTION: Decode a SPI serial bus descriptor
536  *
537  ******************************************************************************/
538 
539 static void
540 AcpiDmSpiSerialBusDescriptor (
541     AML_RESOURCE            *Resource,
542     UINT32                  Length,
543     UINT32                  Level)
544 {
545     UINT32                  ResourceSourceOffset;
546 
547 
548     /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
549 
550     AcpiDmIndent (Level);
551     AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n",
552         Resource->SpiSerialBus.DeviceSelection,
553         AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
554         AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
555         Resource->SpiSerialBus.DataBitLength);
556 
557     /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
558 
559     AcpiDmIndent (Level + 1);
560     AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
561         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
562         Resource->SpiSerialBus.ConnectionSpeed,
563         AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
564 
565     AcpiDmIndent (Level + 1);
566     AcpiOsPrintf ("%s, ",
567         AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
568 
569     /* ResourceSource is a required field */
570 
571     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
572         Resource->CommonSerialBus.TypeDataLength;
573 
574     AcpiUtPrintString (
575         ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
576         ACPI_UINT16_MAX);
577 
578     /* ResourceSourceIndex, ResourceUsage */
579 
580     AcpiOsPrintf (",\n");
581     AcpiDmIndent (Level + 1);
582     AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
583 
584     AcpiOsPrintf ("%s, ",
585         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
586 
587     /* Insert a descriptor name */
588 
589     AcpiDmDescriptorName ();
590     AcpiOsPrintf (",\n");
591 
592     /* Dump the vendor data */
593 
594     AcpiDmIndent (Level + 1);
595     AcpiDmDumpSerialBusVendorData (Resource, Level);
596     AcpiOsPrintf (")\n");
597 }
598 
599 
600 /*******************************************************************************
601  *
602  * FUNCTION:    AcpiDmUartSerialBusDescriptor
603  *
604  * PARAMETERS:  Resource            - Pointer to the resource descriptor
605  *              Length              - Length of the descriptor in bytes
606  *              Level               - Current source code indentation level
607  *
608  * RETURN:      None
609  *
610  * DESCRIPTION: Decode a UART serial bus descriptor
611  *
612  ******************************************************************************/
613 
614 static void
615 AcpiDmUartSerialBusDescriptor (
616     AML_RESOURCE            *Resource,
617     UINT32                  Length,
618     UINT32                  Level)
619 {
620     UINT32                  ResourceSourceOffset;
621 
622 
623     /* ConnectionSpeed, BitsPerByte, StopBits */
624 
625     AcpiDmIndent (Level);
626     AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n",
627         Resource->UartSerialBus.DefaultBaudRate,
628         AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
629         AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
630 
631     /* LinesInUse, IsBigEndian, Parity, FlowControl */
632 
633     AcpiDmIndent (Level + 1);
634     AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
635         Resource->UartSerialBus.LinesEnabled,
636         AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
637         AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
638         AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
639 
640     /* ReceiveBufferSize, TransmitBufferSize */
641 
642     AcpiDmIndent (Level + 1);
643     AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
644         Resource->UartSerialBus.RxFifoSize,
645         Resource->UartSerialBus.TxFifoSize);
646 
647     /* ResourceSource is a required field */
648 
649     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
650         Resource->CommonSerialBus.TypeDataLength;
651 
652     AcpiUtPrintString (
653         ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
654         ACPI_UINT16_MAX);
655 
656     /* ResourceSourceIndex, ResourceUsage */
657 
658     AcpiOsPrintf (",\n");
659     AcpiDmIndent (Level + 1);
660     AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
661 
662     AcpiOsPrintf ("%s, ",
663         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
664 
665     /* Insert a descriptor name */
666 
667     AcpiDmDescriptorName ();
668     AcpiOsPrintf (",\n");
669 
670     /* Dump the vendor data */
671 
672     AcpiDmIndent (Level + 1);
673     AcpiDmDumpSerialBusVendorData (Resource, Level);
674     AcpiOsPrintf (")\n");
675 }
676 
677 
678 /*******************************************************************************
679  *
680  * FUNCTION:    AcpiDmSerialBusDescriptor
681  *
682  * PARAMETERS:  Resource            - Pointer to the resource descriptor
683  *              Length              - Length of the descriptor in bytes
684  *              Level               - Current source code indentation level
685  *
686  * RETURN:      None
687  *
688  * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor
689  *
690  ******************************************************************************/
691 
692 void
693 AcpiDmSerialBusDescriptor (
694     AML_RESOURCE            *Resource,
695     UINT32                  Length,
696     UINT32                  Level)
697 {
698 
699     SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
700         Resource, Length, Level);
701 }
702 
703 #endif
704