Home | History | Annotate | Line # | Download | only in disassembler
dmresrcl2.c revision 1.1.1.14
      1 /*******************************************************************************
      2  *
      3  * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
      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 "acdisasm.h"
     47 
     48 
     49 #define _COMPONENT          ACPI_CA_DEBUGGER
     50         ACPI_MODULE_NAME    ("dbresrcl2")
     51 
     52 /* Local prototypes */
     53 
     54 static void
     55 AcpiDmCsi2SerialBusDescriptor (
     56     ACPI_OP_WALK_INFO       *Info,
     57     AML_RESOURCE            *Resource,
     58     UINT32                  Length,
     59     UINT32                  Level);
     60 
     61 static void
     62 AcpiDmI2cSerialBusDescriptor (
     63     ACPI_OP_WALK_INFO       *Info,
     64     AML_RESOURCE            *Resource,
     65     UINT32                  Length,
     66     UINT32                  Level);
     67 
     68 static void
     69 AcpiDmSpiSerialBusDescriptor (
     70     ACPI_OP_WALK_INFO       *Info,
     71     AML_RESOURCE            *Resource,
     72     UINT32                  Length,
     73     UINT32                  Level);
     74 
     75 static void
     76 AcpiDmUartSerialBusDescriptor (
     77     ACPI_OP_WALK_INFO       *Info,
     78     AML_RESOURCE            *Resource,
     79     UINT32                  Length,
     80     UINT32                  Level);
     81 
     82 static void
     83 AcpiDmGpioCommon (
     84     ACPI_OP_WALK_INFO       *Info,
     85     AML_RESOURCE            *Resource,
     86     UINT32                  Level);
     87 
     88 static void
     89 AcpiDmDumpRawDataBuffer (
     90     UINT8                   *Buffer,
     91     UINT32                  Length,
     92     UINT32                  Level);
     93 
     94 
     95 /* Dispatch table for the serial bus descriptors */
     96 
     97 static ACPI_RESOURCE_HANDLER        SerialBusResourceDispatch [] =
     98 {
     99     NULL,
    100     AcpiDmI2cSerialBusDescriptor,
    101     AcpiDmSpiSerialBusDescriptor,
    102     AcpiDmUartSerialBusDescriptor,
    103     AcpiDmCsi2SerialBusDescriptor
    104 };
    105 
    106 
    107 /*******************************************************************************
    108  *
    109  * FUNCTION:    AcpiDmDumpRawDataBuffer
    110  *
    111  * PARAMETERS:  Buffer              - Pointer to the data bytes
    112  *              Length              - Length of the descriptor in bytes
    113  *              Level               - Current source code indentation level
    114  *
    115  * RETURN:      None
    116  *
    117  * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
    118  *              vendor data bytes.
    119  *
    120  ******************************************************************************/
    121 
    122 static void
    123 AcpiDmDumpRawDataBuffer (
    124     UINT8                   *Buffer,
    125     UINT32                  Length,
    126     UINT32                  Level)
    127 {
    128     UINT32                  Index;
    129     UINT32                  i;
    130     UINT32                  j;
    131 
    132 
    133     if (!Length)
    134     {
    135         return;
    136     }
    137 
    138     AcpiOsPrintf ("RawDataBuffer (0x%.2X)  // Vendor Data", Length);
    139 
    140     AcpiOsPrintf ("\n");
    141     AcpiDmIndent (Level + 1);
    142     AcpiOsPrintf ("{\n");
    143     AcpiDmIndent (Level + 2);
    144 
    145     for (i = 0; i < Length;)
    146     {
    147         for (j = 0; j < 8; j++)
    148         {
    149             Index = i + j;
    150             if (Index >= Length)
    151             {
    152                 goto Finish;
    153             }
    154 
    155             AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
    156             if ((Index + 1) >= Length)
    157             {
    158                 goto Finish;
    159             }
    160 
    161             AcpiOsPrintf (", ");
    162         }
    163 
    164         AcpiOsPrintf ("\n");
    165         AcpiDmIndent (Level + 2);
    166 
    167         i += 8;
    168     }
    169 
    170 Finish:
    171     AcpiOsPrintf ("\n");
    172     AcpiDmIndent (Level + 1);
    173     AcpiOsPrintf ("}");
    174 }
    175 
    176 
    177 /*******************************************************************************
    178  *
    179  * FUNCTION:    AcpiDmGpioCommon
    180  *
    181  * PARAMETERS:  Info                - Extra resource info
    182  *              Resource            - Pointer to the resource descriptor
    183  *              Level               - Current source code indentation level
    184  *
    185  * RETURN:      None
    186  *
    187  * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
    188  *
    189  ******************************************************************************/
    190 
    191 static void
    192 AcpiDmGpioCommon (
    193     ACPI_OP_WALK_INFO       *Info,
    194     AML_RESOURCE            *Resource,
    195     UINT32                  Level)
    196 {
    197     UINT16                  *PinList;
    198     UINT8                   *VendorData;
    199     char                    *DeviceName = NULL;
    200     UINT32                  PinCount;
    201     UINT32                  i;
    202 
    203 
    204     /* ResourceSource, ResourceSourceIndex, ResourceType */
    205 
    206     AcpiDmIndent (Level + 1);
    207     if (Resource->Gpio.ResSourceOffset)
    208     {
    209         DeviceName = ACPI_ADD_PTR (char,
    210             Resource, Resource->Gpio.ResSourceOffset),
    211         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    212     }
    213 
    214     AcpiOsPrintf (", ");
    215     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
    216     AcpiOsPrintf ("%s, ",
    217         AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
    218 
    219     /* Insert a descriptor name */
    220 
    221     AcpiDmDescriptorName ();
    222     AcpiOsPrintf (",");
    223 
    224     /* Dump the vendor data */
    225 
    226     if (Resource->Gpio.VendorOffset)
    227     {
    228         AcpiOsPrintf ("\n");
    229         AcpiDmIndent (Level + 1);
    230         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    231             Resource->Gpio.VendorOffset);
    232 
    233         AcpiDmDumpRawDataBuffer (VendorData,
    234             Resource->Gpio.VendorLength, Level);
    235     }
    236 
    237     AcpiOsPrintf (")\n");
    238 
    239     /* Dump the interrupt list */
    240 
    241     AcpiDmIndent (Level + 1);
    242     AcpiOsPrintf ("{   // Pin list\n");
    243 
    244     PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
    245         Resource->Gpio.PinTableOffset)) /
    246         sizeof (UINT16);
    247 
    248     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
    249         Resource->Gpio.PinTableOffset);
    250 
    251     for (i = 0; i < PinCount; i++)
    252     {
    253         AcpiDmIndent (Level + 2);
    254         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
    255             ((i + 1) < PinCount) ? "," : "");
    256     }
    257 
    258     AcpiDmIndent (Level + 1);
    259     AcpiOsPrintf ("}\n");
    260 
    261     MpSaveGpioInfo (Info->MappingOp, Resource,
    262         PinCount, PinList, DeviceName);
    263 }
    264 
    265 
    266 /*******************************************************************************
    267  *
    268  * FUNCTION:    AcpiDmGpioIntDescriptor
    269  *
    270  * PARAMETERS:  Info                - Extra resource info
    271  *              Resource            - Pointer to the resource descriptor
    272  *              Length              - Length of the descriptor in bytes
    273  *              Level               - Current source code indentation level
    274  *
    275  * RETURN:      None
    276  *
    277  * DESCRIPTION: Decode a GPIO Interrupt descriptor
    278  *
    279  ******************************************************************************/
    280 
    281 static void
    282 AcpiDmGpioIntDescriptor (
    283     ACPI_OP_WALK_INFO       *Info,
    284     AML_RESOURCE            *Resource,
    285     UINT32                  Length,
    286     UINT32                  Level)
    287 {
    288 
    289     /* Dump the GpioInt-specific portion of the descriptor */
    290 
    291     /* EdgeLevel, ActiveLevel, Shared */
    292 
    293     AcpiDmIndent (Level);
    294     AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
    295         AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
    296         AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
    297         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
    298 
    299     /* PinConfig, DebounceTimeout */
    300 
    301     if (Resource->Gpio.PinConfig <= 3)
    302     {
    303         AcpiOsPrintf ("%s, ",
    304             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
    305     }
    306     else
    307     {
    308         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
    309     }
    310     AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
    311 
    312     /* Dump the GpioInt/GpioIo common portion of the descriptor */
    313 
    314     AcpiDmGpioCommon (Info, Resource, Level);
    315 }
    316 
    317 
    318 /*******************************************************************************
    319  *
    320  * FUNCTION:    AcpiDmGpioIoDescriptor
    321  *
    322  * PARAMETERS:  Info                - Extra resource info
    323  *              Resource            - Pointer to the resource descriptor
    324  *              Length              - Length of the descriptor in bytes
    325  *              Level               - Current source code indentation level
    326  *
    327  * RETURN:      None
    328  *
    329  * DESCRIPTION: Decode a GPIO I/O descriptor
    330  *
    331  ******************************************************************************/
    332 
    333 static void
    334 AcpiDmGpioIoDescriptor (
    335     ACPI_OP_WALK_INFO       *Info,
    336     AML_RESOURCE            *Resource,
    337     UINT32                  Length,
    338     UINT32                  Level)
    339 {
    340 
    341     /* Dump the GpioIo-specific portion of the descriptor */
    342 
    343     /* Shared, PinConfig */
    344 
    345     AcpiDmIndent (Level);
    346     AcpiOsPrintf ("GpioIo (%s, ",
    347         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
    348 
    349     if (Resource->Gpio.PinConfig <= 3)
    350     {
    351         AcpiOsPrintf ("%s, ",
    352             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
    353     }
    354     else
    355     {
    356         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
    357     }
    358 
    359     /* DebounceTimeout, DriveStrength, IoRestriction */
    360 
    361     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
    362     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
    363     AcpiOsPrintf ("%s,\n",
    364         AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
    365 
    366     /* Dump the GpioInt/GpioIo common portion of the descriptor */
    367 
    368     AcpiDmGpioCommon (Info, Resource, Level);
    369 }
    370 
    371 
    372 /*******************************************************************************
    373  *
    374  * FUNCTION:    AcpiDmGpioDescriptor
    375  *
    376  * PARAMETERS:  Info                - Extra resource info
    377  *              Resource            - Pointer to the resource descriptor
    378  *              Length              - Length of the descriptor in bytes
    379  *              Level               - Current source code indentation level
    380  *
    381  * RETURN:      None
    382  *
    383  * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
    384  *
    385  ******************************************************************************/
    386 
    387 void
    388 AcpiDmGpioDescriptor (
    389     ACPI_OP_WALK_INFO       *Info,
    390     AML_RESOURCE            *Resource,
    391     UINT32                  Length,
    392     UINT32                  Level)
    393 {
    394     UINT8                   ConnectionType;
    395 
    396 
    397     ConnectionType = Resource->Gpio.ConnectionType;
    398 
    399     switch (ConnectionType)
    400     {
    401     case AML_RESOURCE_GPIO_TYPE_INT:
    402 
    403         AcpiDmGpioIntDescriptor (Info, Resource, Length, Level);
    404         break;
    405 
    406     case AML_RESOURCE_GPIO_TYPE_IO:
    407 
    408         AcpiDmGpioIoDescriptor (Info, Resource, Length, Level);
    409         break;
    410 
    411     default:
    412 
    413         AcpiOsPrintf ("Unknown GPIO type\n");
    414         break;
    415     }
    416 }
    417 
    418 void
    419 AcpiDmClockInputDescriptor (
    420     ACPI_OP_WALK_INFO       *Info,
    421     AML_RESOURCE            *Resource,
    422     UINT32                  Length,
    423     UINT32                  Level)
    424 {
    425     char                    *DeviceName = NULL;
    426     UINT8                   *ResourceIndex = NULL;
    427     AcpiDmIndent (Level);
    428 
    429     AcpiOsPrintf ("ClockInput (");
    430 
    431     AcpiOsPrintf ("0x%8.8X, ", Resource->ClockInput.FrequencyNumerator);
    432 
    433     AcpiOsPrintf ("0x%4.4X, ", Resource->ClockInput.FrequencyDivisor);
    434 
    435     AcpiOsPrintf ("%s, ",
    436         AcpiGbl_ClockInputScale [ACPI_EXTRACT_2BIT_FLAG (Resource->ClockInput.Flags, 1)]);
    437 
    438     AcpiOsPrintf ("%s, ",
    439         AcpiGbl_ClockInputMode [ACPI_GET_1BIT_FLAG (Resource->ClockInput.Flags)]);
    440 
    441     if (Length > sizeof(Resource->ClockInput))
    442     {
    443         DeviceName = ACPI_ADD_PTR (char,
    444             Resource, sizeof(Resource->ClockInput)+1),
    445         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    446 
    447         AcpiOsPrintf (", ");
    448         ResourceIndex = ACPI_ADD_PTR (UINT8,
    449             Resource, sizeof(Resource->ClockInput)),
    450 
    451         AcpiOsPrintf ("0x%2.2X", *ResourceIndex);
    452     }
    453 
    454     AcpiOsPrintf (")\n");
    455 
    456 }
    457 
    458 /*******************************************************************************
    459  *
    460  * FUNCTION:    AcpiDmPinFunctionDescriptor
    461  *
    462  * PARAMETERS:  Info                - Extra resource info
    463  *              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 PinFunction descriptor
    470  *
    471  ******************************************************************************/
    472 
    473 void
    474 AcpiDmPinFunctionDescriptor (
    475     ACPI_OP_WALK_INFO       *Info,
    476     AML_RESOURCE            *Resource,
    477     UINT32                  Length,
    478     UINT32                  Level)
    479 {
    480     UINT16                  *PinList;
    481     UINT8                   *VendorData;
    482     char                    *DeviceName = NULL;
    483     UINT32                  PinCount;
    484     UINT32                  i;
    485 
    486     AcpiDmIndent (Level);
    487     AcpiOsPrintf ("PinFunction (%s, ",
    488         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]);
    489 
    490     if (Resource->PinFunction.PinConfig <= 3)
    491     {
    492         AcpiOsPrintf ("%s, ",
    493             AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]);
    494     }
    495     else
    496     {
    497         AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig);
    498     }
    499 
    500     /* FunctionNumber */
    501 
    502     AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
    503 
    504     if (Resource->PinFunction.ResSourceOffset)
    505     {
    506         DeviceName = ACPI_ADD_PTR (char,
    507             Resource, Resource->PinFunction.ResSourceOffset),
    508         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    509     }
    510 
    511     AcpiOsPrintf (", ");
    512     AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex);
    513 
    514     AcpiDmIndent (Level + 1);
    515 
    516     /* Always ResourceConsumer */
    517     AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]);
    518 
    519     /* Insert a descriptor name */
    520 
    521     AcpiDmDescriptorName ();
    522 
    523     AcpiOsPrintf (",");
    524 
    525     /* Dump the vendor data */
    526 
    527     if (Resource->PinFunction.VendorLength)
    528     {
    529         AcpiOsPrintf ("\n");
    530         AcpiDmIndent (Level + 1);
    531         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    532             Resource->PinFunction.VendorOffset);
    533 
    534         AcpiDmDumpRawDataBuffer (VendorData,
    535             Resource->PinFunction.VendorLength, Level);
    536     }
    537 
    538     AcpiOsPrintf (")\n");
    539 
    540     AcpiDmIndent (Level + 1);
    541 
    542     /* Dump the interrupt list */
    543 
    544     AcpiOsPrintf ("{   // Pin list\n");
    545 
    546     PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
    547         Resource->PinFunction.PinTableOffset)) /
    548         sizeof (UINT16);
    549 
    550     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
    551         Resource->PinFunction.PinTableOffset);
    552 
    553     for (i = 0; i < PinCount; i++)
    554     {
    555         AcpiDmIndent (Level + 2);
    556         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
    557             ((i + 1) < PinCount) ? "," : "");
    558     }
    559 
    560     AcpiDmIndent (Level + 1);
    561     AcpiOsPrintf ("}\n");
    562 }
    563 
    564 
    565 /*******************************************************************************
    566  *
    567  * FUNCTION:    AcpiDmDumpSerialBusVendorData
    568  *
    569  * PARAMETERS:  Resource            - Pointer to the resource descriptor
    570  *
    571  * RETURN:      None
    572  *
    573  * DESCRIPTION: Dump optional serial bus vendor data
    574  *
    575  ******************************************************************************/
    576 
    577 static void
    578 AcpiDmDumpSerialBusVendorData (
    579     AML_RESOURCE            *Resource,
    580     UINT32                  Level)
    581 {
    582     UINT8                   *VendorData;
    583     UINT32                  VendorLength;
    584 
    585 
    586     /* Get the (optional) vendor data and length */
    587 
    588     switch (Resource->CommonSerialBus.Type)
    589     {
    590     case AML_RESOURCE_I2C_SERIALBUSTYPE:
    591 
    592         VendorLength = Resource->CommonSerialBus.TypeDataLength -
    593             AML_RESOURCE_I2C_MIN_DATA_LEN;
    594 
    595         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    596             sizeof (AML_RESOURCE_I2C_SERIALBUS));
    597         break;
    598 
    599     case AML_RESOURCE_SPI_SERIALBUSTYPE:
    600 
    601         VendorLength = Resource->CommonSerialBus.TypeDataLength -
    602             AML_RESOURCE_SPI_MIN_DATA_LEN;
    603 
    604         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    605             sizeof (AML_RESOURCE_SPI_SERIALBUS));
    606         break;
    607 
    608     case AML_RESOURCE_UART_SERIALBUSTYPE:
    609 
    610         VendorLength = Resource->CommonSerialBus.TypeDataLength -
    611             AML_RESOURCE_UART_MIN_DATA_LEN;
    612 
    613         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    614             sizeof (AML_RESOURCE_UART_SERIALBUS));
    615         break;
    616 
    617     case AML_RESOURCE_CSI2_SERIALBUSTYPE:
    618 
    619         VendorLength = Resource->CommonSerialBus.TypeDataLength -
    620             AML_RESOURCE_CSI2_MIN_DATA_LEN;
    621 
    622         VendorData = ACPI_ADD_PTR (UINT8, Resource,
    623             sizeof (AML_RESOURCE_CSI2_SERIALBUS));
    624         break;
    625 
    626     default:
    627 
    628         return;
    629     }
    630 
    631     /* Dump the vendor bytes as a RawDataBuffer object */
    632 
    633     AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
    634 }
    635 
    636 
    637 /*******************************************************************************
    638  *
    639  * FUNCTION:    AcpiDmCsi2SerialBusDescriptor
    640  *
    641  * PARAMETERS:  Info                - Extra resource info
    642  *              Resource            - Pointer to the resource descriptor
    643  *              Length              - Length of the descriptor in bytes
    644  *              Level               - Current source code indentation level
    645  *
    646  * RETURN:      None
    647  *
    648  * DESCRIPTION: Decode a CSI2 serial bus descriptor
    649  *
    650  ******************************************************************************/
    651 
    652 static void
    653 AcpiDmCsi2SerialBusDescriptor (
    654     ACPI_OP_WALK_INFO       *Info,
    655     AML_RESOURCE            *Resource,
    656     UINT32                  Length,
    657     UINT32                  Level)
    658 {
    659     UINT32                  ResourceSourceOffset;
    660     char                    *DeviceName;
    661 
    662 
    663     /* SlaveMode, PhyType, LocalPortInstance */
    664 
    665     AcpiDmIndent (Level);
    666     AcpiOsPrintf ("Csi2Bus (%s,",
    667         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]);
    668 
    669     AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",
    670         Resource->Csi2SerialBus.TypeSpecificFlags & 0x03,
    671         Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC);
    672 
    673     /* ResourceSource is a required field */
    674 
    675     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
    676         Resource->CommonSerialBus.TypeDataLength;
    677 
    678     AcpiDmIndent (Level + 1);
    679     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
    680     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    681 
    682     /* ResourceSourceIndex, ResourceUsage */
    683 
    684     AcpiOsPrintf (",\n");
    685     AcpiDmIndent (Level + 1);
    686     AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex);
    687 
    688     AcpiOsPrintf ("%s, ",
    689         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]);
    690 
    691     /* Insert a descriptor name */
    692 
    693     AcpiDmDescriptorName ();
    694 
    695     /* Dump the vendor data */
    696 
    697     AcpiOsPrintf (",\n");
    698     AcpiDmIndent (Level + 1);
    699     AcpiDmDumpSerialBusVendorData (Resource, Level);
    700     AcpiOsPrintf (")\n");
    701 
    702     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
    703 }
    704 
    705 
    706 /*******************************************************************************
    707  *
    708  * FUNCTION:    AcpiDmI2cSerialBusDescriptor
    709  *
    710  * PARAMETERS:  Info                - Extra resource info
    711  *              Resource            - Pointer to the resource descriptor
    712  *              Length              - Length of the descriptor in bytes
    713  *              Level               - Current source code indentation level
    714  *
    715  * RETURN:      None
    716  *
    717  * DESCRIPTION: Decode a I2C serial bus descriptor
    718  *
    719  ******************************************************************************/
    720 
    721 static void
    722 AcpiDmI2cSerialBusDescriptor (
    723     ACPI_OP_WALK_INFO       *Info,
    724     AML_RESOURCE            *Resource,
    725     UINT32                  Length,
    726     UINT32                  Level)
    727 {
    728     UINT32                  ResourceSourceOffset;
    729     char                    *DeviceName;
    730 
    731 
    732     /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
    733 
    734     AcpiDmIndent (Level);
    735     AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
    736         Resource->I2cSerialBus.SlaveAddress,
    737         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
    738         Resource->I2cSerialBus.ConnectionSpeed);
    739 
    740     AcpiDmIndent (Level + 1);
    741     AcpiOsPrintf ("%s, ",
    742         AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
    743 
    744     /* ResourceSource is a required field */
    745 
    746     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
    747         Resource->CommonSerialBus.TypeDataLength;
    748 
    749     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
    750     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    751 
    752     /* ResourceSourceIndex, ResourceUsage */
    753 
    754     AcpiOsPrintf (",\n");
    755     AcpiDmIndent (Level + 1);
    756     AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
    757 
    758     AcpiOsPrintf ("%s, ",
    759         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
    760 
    761     /* Insert a descriptor name */
    762 
    763     AcpiDmDescriptorName ();
    764 
    765     /* Share */
    766 
    767     AcpiOsPrintf (", %s,\n",
    768         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]);
    769 
    770     /* Dump the vendor data */
    771 
    772     AcpiDmIndent (Level + 1);
    773     AcpiDmDumpSerialBusVendorData (Resource, Level);
    774     AcpiOsPrintf (")\n");
    775 
    776     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
    777 }
    778 
    779 
    780 /*******************************************************************************
    781  *
    782  * FUNCTION:    AcpiDmSpiSerialBusDescriptor
    783  *
    784  * PARAMETERS:  Info                - Extra resource info
    785  *              Resource            - Pointer to the resource descriptor
    786  *              Length              - Length of the descriptor in bytes
    787  *              Level               - Current source code indentation level
    788  *
    789  * RETURN:      None
    790  *
    791  * DESCRIPTION: Decode a SPI serial bus descriptor
    792  *
    793  ******************************************************************************/
    794 
    795 static void
    796 AcpiDmSpiSerialBusDescriptor (
    797     ACPI_OP_WALK_INFO       *Info,
    798     AML_RESOURCE            *Resource,
    799     UINT32                  Length,
    800     UINT32                  Level)
    801 {
    802     UINT32                  ResourceSourceOffset;
    803     char                    *DeviceName;
    804 
    805 
    806     /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
    807 
    808     AcpiDmIndent (Level);
    809     AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
    810         Resource->SpiSerialBus.DeviceSelection,
    811         AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
    812         AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
    813         Resource->SpiSerialBus.DataBitLength);
    814 
    815     /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
    816 
    817     AcpiDmIndent (Level + 1);
    818     AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
    819         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
    820         Resource->SpiSerialBus.ConnectionSpeed,
    821         AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
    822 
    823     AcpiDmIndent (Level + 1);
    824     AcpiOsPrintf ("%s, ",
    825         AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
    826 
    827     /* ResourceSource is a required field */
    828 
    829     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
    830         Resource->CommonSerialBus.TypeDataLength;
    831 
    832     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
    833     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    834 
    835     /* ResourceSourceIndex, ResourceUsage */
    836 
    837     AcpiOsPrintf (",\n");
    838     AcpiDmIndent (Level + 1);
    839     AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
    840 
    841     AcpiOsPrintf ("%s, ",
    842         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
    843 
    844     /* Insert a descriptor name */
    845 
    846     AcpiDmDescriptorName ();
    847 
    848     /* Share */
    849 
    850     AcpiOsPrintf (", %s,\n",
    851         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]);
    852 
    853     /* Dump the vendor data */
    854 
    855     AcpiDmIndent (Level + 1);
    856     AcpiDmDumpSerialBusVendorData (Resource, Level);
    857     AcpiOsPrintf (")\n");
    858 
    859     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
    860 }
    861 
    862 
    863 /*******************************************************************************
    864  *
    865  * FUNCTION:    AcpiDmUartSerialBusDescriptor
    866  *
    867  * PARAMETERS:  Info                - Extra resource info
    868  *              Resource            - Pointer to the resource descriptor
    869  *              Length              - Length of the descriptor in bytes
    870  *              Level               - Current source code indentation level
    871  *
    872  * RETURN:      None
    873  *
    874  * DESCRIPTION: Decode a UART serial bus descriptor
    875  *
    876  ******************************************************************************/
    877 
    878 static void
    879 AcpiDmUartSerialBusDescriptor (
    880     ACPI_OP_WALK_INFO       *Info,
    881     AML_RESOURCE            *Resource,
    882     UINT32                  Length,
    883     UINT32                  Level)
    884 {
    885     UINT32                  ResourceSourceOffset;
    886     char                    *DeviceName;
    887 
    888 
    889     /* ConnectionSpeed, BitsPerByte, StopBits */
    890 
    891     AcpiDmIndent (Level);
    892     AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
    893         Resource->UartSerialBus.DefaultBaudRate,
    894         AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
    895         AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
    896 
    897     /* LinesInUse, IsBigEndian, Parity, FlowControl */
    898 
    899     AcpiDmIndent (Level + 1);
    900     AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
    901         Resource->UartSerialBus.LinesEnabled,
    902         AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
    903         AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
    904         AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
    905 
    906     /* ReceiveBufferSize, TransmitBufferSize */
    907 
    908     AcpiDmIndent (Level + 1);
    909     AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
    910         Resource->UartSerialBus.RxFifoSize,
    911         Resource->UartSerialBus.TxFifoSize);
    912 
    913     /* ResourceSource is a required field */
    914 
    915     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
    916         Resource->CommonSerialBus.TypeDataLength;
    917 
    918     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
    919     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
    920 
    921     /* ResourceSourceIndex, ResourceUsage */
    922 
    923     AcpiOsPrintf (",\n");
    924     AcpiDmIndent (Level + 1);
    925     AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
    926 
    927     AcpiOsPrintf ("%s, ",
    928         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
    929 
    930     /* Insert a descriptor name */
    931 
    932     AcpiDmDescriptorName ();
    933 
    934     /* Share */
    935 
    936     AcpiOsPrintf (", %s,\n",
    937         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]);
    938 
    939     /* Dump the vendor data */
    940 
    941     AcpiDmIndent (Level + 1);
    942     AcpiDmDumpSerialBusVendorData (Resource, Level);
    943     AcpiOsPrintf (")\n");
    944 
    945     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
    946 }
    947 
    948 
    949 /*******************************************************************************
    950  *
    951  * FUNCTION:    AcpiDmSerialBusDescriptor
    952  *
    953  * PARAMETERS:  Info                - Extra resource info
    954  *              Resource            - Pointer to the resource descriptor
    955  *              Length              - Length of the descriptor in bytes
    956  *              Level               - Current source code indentation level
    957  *
    958  * RETURN:      None
    959  *
    960  * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor
    961  *
    962  ******************************************************************************/
    963 
    964 void
    965 AcpiDmSerialBusDescriptor (
    966     ACPI_OP_WALK_INFO       *Info,
    967     AML_RESOURCE            *Resource,
    968     UINT32                  Length,
    969     UINT32                  Level)
    970 {
    971 
    972     SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
    973         Info, Resource, Length, Level);
    974 }
    975 
    976 /*******************************************************************************
    977  *
    978  * FUNCTION:    AcpiDmPinConfig
    979  *
    980  * PARAMETERS:  PinConfigType       - Pin configuration type
    981  *              PinConfigValue      - Pin configuration value
    982  *
    983  * RETURN:      None
    984  *
    985  * DESCRIPTION: Pretty prints PinConfig type and value.
    986  *
    987  ******************************************************************************/
    988 
    989 static void
    990 AcpiDmPinConfig(
    991     UINT8                   PinConfigType,
    992     UINT32                  PinConfigValue)
    993 {
    994     if (PinConfigType <= 13)
    995     {
    996         AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType,
    997             AcpiGbl_PtypDecode[PinConfigType]);
    998     }
    999     else
   1000     {
   1001         AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType);
   1002     }
   1003 
   1004     /* PinConfigValue */
   1005 
   1006     AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue);
   1007 }
   1008 
   1009 /*******************************************************************************
   1010  *
   1011  * FUNCTION:    AcpiDmPinConfigDescriptor
   1012  *
   1013  * PARAMETERS:  Info                - Extra resource info
   1014  *              Resource            - Pointer to the resource descriptor
   1015  *              Length              - Length of the descriptor in bytes
   1016  *              Level               - Current source code indentation level
   1017  *
   1018  * RETURN:      None
   1019  *
   1020  * DESCRIPTION: Decode a PinConfig descriptor
   1021  *
   1022  ******************************************************************************/
   1023 
   1024 void
   1025 AcpiDmPinConfigDescriptor (
   1026     ACPI_OP_WALK_INFO       *Info,
   1027     AML_RESOURCE            *Resource,
   1028     UINT32                  Length,
   1029     UINT32                  Level)
   1030 {
   1031     UINT16                  *PinList;
   1032     UINT8                   *VendorData;
   1033     char                    *DeviceName = NULL;
   1034     UINT32                  PinCount;
   1035     UINT32                  i;
   1036 
   1037     AcpiDmIndent (Level);
   1038     AcpiOsPrintf ("PinConfig (%s, ",
   1039         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]);
   1040 
   1041     AcpiDmPinConfig (Resource->PinConfig.PinConfigType,
   1042         Resource->PinConfig.PinConfigValue);
   1043 
   1044     AcpiDmIndent (Level + 1);
   1045 
   1046     if (Resource->PinConfig.ResSourceOffset)
   1047     {
   1048         DeviceName = ACPI_ADD_PTR (char,
   1049             Resource, Resource->PinConfig.ResSourceOffset),
   1050         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
   1051     }
   1052 
   1053     AcpiOsPrintf (", ");
   1054     AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex);
   1055 
   1056     AcpiOsPrintf ("%s, ",
   1057         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]);
   1058 
   1059     /* Insert a descriptor name */
   1060 
   1061     AcpiDmDescriptorName ();
   1062 
   1063     AcpiOsPrintf (",");
   1064 
   1065     /* Dump the vendor data */
   1066 
   1067     if (Resource->PinConfig.VendorLength)
   1068     {
   1069         AcpiOsPrintf ("\n");
   1070         AcpiDmIndent (Level + 1);
   1071         VendorData = ACPI_ADD_PTR (UINT8, Resource,
   1072             Resource->PinConfig.VendorOffset);
   1073 
   1074         AcpiDmDumpRawDataBuffer (VendorData,
   1075             Resource->PinConfig.VendorLength, Level);
   1076     }
   1077 
   1078     AcpiOsPrintf (")\n");
   1079 
   1080     AcpiDmIndent (Level + 1);
   1081 
   1082     /* Dump the interrupt list */
   1083 
   1084     AcpiOsPrintf ("{   // Pin list\n");
   1085 
   1086     PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset -
   1087         Resource->PinConfig.PinTableOffset)) /
   1088         sizeof (UINT16);
   1089 
   1090     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
   1091         Resource->PinConfig.PinTableOffset);
   1092 
   1093     for (i = 0; i < PinCount; i++)
   1094     {
   1095         AcpiDmIndent (Level + 2);
   1096         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
   1097             ((i + 1) < PinCount) ? "," : "");
   1098     }
   1099 
   1100     AcpiDmIndent (Level + 1);
   1101     AcpiOsPrintf ("}\n");
   1102 }
   1103 
   1104 /*******************************************************************************
   1105  *
   1106  * FUNCTION:    AcpiDmPinGroupDescriptor
   1107  *
   1108  * PARAMETERS:  Info                - Extra resource info
   1109  *              Resource            - Pointer to the resource descriptor
   1110  *              Length              - Length of the descriptor in bytes
   1111  *              Level               - Current source code indentation level
   1112  *
   1113  * RETURN:      None
   1114  *
   1115  * DESCRIPTION: Decode a PinGroup descriptor
   1116  *
   1117  ******************************************************************************/
   1118 
   1119 void
   1120 AcpiDmPinGroupDescriptor (
   1121     ACPI_OP_WALK_INFO       *Info,
   1122     AML_RESOURCE            *Resource,
   1123     UINT32                  Length,
   1124     UINT32                  Level)
   1125 {
   1126     char                    *Label;
   1127     UINT16                  *PinList;
   1128     UINT8                   *VendorData;
   1129     UINT32                  PinCount;
   1130     UINT32                  i;
   1131 
   1132     AcpiDmIndent (Level);
   1133     /* Always producer */
   1134     AcpiOsPrintf ("PinGroup (");
   1135 
   1136     Label = ACPI_ADD_PTR (char,
   1137         Resource, Resource->PinGroup.LabelOffset),
   1138     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
   1139 
   1140     AcpiOsPrintf (", ");
   1141 
   1142     AcpiOsPrintf ("%s, ",
   1143         AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]);
   1144 
   1145     /* Insert a descriptor name */
   1146 
   1147     AcpiDmDescriptorName ();
   1148 
   1149     AcpiOsPrintf (",");
   1150 
   1151     /* Dump the vendor data */
   1152 
   1153     if (Resource->PinGroup.VendorLength)
   1154     {
   1155         AcpiOsPrintf ("\n");
   1156         AcpiDmIndent (Level + 1);
   1157         VendorData = ACPI_ADD_PTR (UINT8, Resource,
   1158             Resource->PinGroup.VendorOffset);
   1159 
   1160         AcpiDmDumpRawDataBuffer (VendorData,
   1161             Resource->PinGroup.VendorLength, Level);
   1162     }
   1163 
   1164     AcpiOsPrintf (")\n");
   1165 
   1166     AcpiDmIndent (Level + 1);
   1167 
   1168     /* Dump the interrupt list */
   1169 
   1170     AcpiOsPrintf ("{   // Pin list\n");
   1171 
   1172     PinCount = (Resource->PinGroup.LabelOffset -
   1173         Resource->PinGroup.PinTableOffset) / sizeof (UINT16);
   1174 
   1175     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
   1176         Resource->PinGroup.PinTableOffset);
   1177 
   1178     for (i = 0; i < PinCount; i++)
   1179     {
   1180         AcpiDmIndent (Level + 2);
   1181         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
   1182             ((i + 1) < PinCount) ? "," : "");
   1183     }
   1184 
   1185     AcpiDmIndent (Level + 1);
   1186     AcpiOsPrintf ("}\n");
   1187 }
   1188 
   1189 /*******************************************************************************
   1190  *
   1191  * FUNCTION:    AcpiDmPinGroupFunctionDescriptor
   1192  *
   1193  * PARAMETERS:  Info                - Extra resource info
   1194  *              Resource            - Pointer to the resource descriptor
   1195  *              Length              - Length of the descriptor in bytes
   1196  *              Level               - Current source code indentation level
   1197  *
   1198  * RETURN:      None
   1199  *
   1200  * DESCRIPTION: Decode a PinGroupFunction descriptor
   1201  *
   1202  ******************************************************************************/
   1203 
   1204 void
   1205 AcpiDmPinGroupFunctionDescriptor (
   1206     ACPI_OP_WALK_INFO       *Info,
   1207     AML_RESOURCE            *Resource,
   1208     UINT32                  Length,
   1209     UINT32                  Level)
   1210 {
   1211     UINT8                   *VendorData;
   1212     char                    *DeviceName = NULL;
   1213     char                    *Label = NULL;
   1214 
   1215     AcpiDmIndent (Level);
   1216     AcpiOsPrintf ("PinGroupFunction (%s, ",
   1217         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]);
   1218 
   1219     /* FunctionNumber */
   1220 
   1221     AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber);
   1222 
   1223     DeviceName = ACPI_ADD_PTR (char,
   1224         Resource, Resource->PinGroupFunction.ResSourceOffset),
   1225     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
   1226 
   1227     AcpiOsPrintf (", ");
   1228     AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex);
   1229 
   1230     AcpiDmIndent (Level + 1);
   1231 
   1232     Label = ACPI_ADD_PTR (char, Resource,
   1233         Resource->PinGroupFunction.ResSourceLabelOffset);
   1234     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
   1235 
   1236     AcpiOsPrintf (", ");
   1237 
   1238     AcpiOsPrintf ("%s, ",
   1239         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]);
   1240 
   1241     /* Insert a descriptor name */
   1242 
   1243     AcpiDmDescriptorName ();
   1244 
   1245     AcpiOsPrintf (",");
   1246 
   1247     /* Dump the vendor data */
   1248 
   1249     if (Resource->PinGroupFunction.VendorLength)
   1250     {
   1251         AcpiOsPrintf ("\n");
   1252         AcpiDmIndent (Level + 1);
   1253         VendorData = ACPI_ADD_PTR (UINT8, Resource,
   1254             Resource->PinGroupFunction.VendorOffset);
   1255 
   1256         AcpiDmDumpRawDataBuffer (VendorData,
   1257             Resource->PinGroupFunction.VendorLength, Level);
   1258     }
   1259 
   1260     AcpiOsPrintf (")\n");
   1261 }
   1262 
   1263 /*******************************************************************************
   1264  *
   1265  * FUNCTION:    AcpiDmPinGroupConfigDescriptor
   1266  *
   1267  * PARAMETERS:  Info                - Extra resource info
   1268  *              Resource            - Pointer to the resource descriptor
   1269  *              Length              - Length of the descriptor in bytes
   1270  *              Level               - Current source code indentation level
   1271  *
   1272  * RETURN:      None
   1273  *
   1274  * DESCRIPTION: Decode a PinGroupConfig descriptor
   1275  *
   1276  ******************************************************************************/
   1277 
   1278 void
   1279 AcpiDmPinGroupConfigDescriptor (
   1280     ACPI_OP_WALK_INFO       *Info,
   1281     AML_RESOURCE            *Resource,
   1282     UINT32                  Length,
   1283     UINT32                  Level)
   1284 {
   1285     UINT8                   *VendorData;
   1286     char                    *DeviceName = NULL;
   1287     char                    *Label = NULL;
   1288 
   1289     AcpiDmIndent (Level);
   1290     AcpiOsPrintf ("PinGroupConfig (%s, ",
   1291         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]);
   1292 
   1293     AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType,
   1294         Resource->PinGroupConfig.PinConfigValue);
   1295 
   1296     AcpiDmIndent (Level + 1);
   1297 
   1298     DeviceName = ACPI_ADD_PTR (char,
   1299         Resource, Resource->PinGroupConfig.ResSourceOffset),
   1300     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
   1301 
   1302     AcpiOsPrintf (", ");
   1303     AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex);
   1304 
   1305     Label = ACPI_ADD_PTR (char, Resource,
   1306         Resource->PinGroupConfig.ResSourceLabelOffset);
   1307     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
   1308 
   1309     AcpiOsPrintf (", ");
   1310 
   1311     AcpiOsPrintf ("%s, ",
   1312         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]);
   1313 
   1314     /* Insert a descriptor name */
   1315 
   1316     AcpiDmDescriptorName ();
   1317 
   1318     AcpiOsPrintf (",");
   1319 
   1320     /* Dump the vendor data */
   1321 
   1322     if (Resource->PinGroupConfig.VendorLength)
   1323     {
   1324         AcpiOsPrintf ("\n");
   1325         AcpiDmIndent (Level + 1);
   1326         VendorData = ACPI_ADD_PTR (UINT8, Resource,
   1327             Resource->PinGroupConfig.VendorOffset);
   1328 
   1329         AcpiDmDumpRawDataBuffer (VendorData,
   1330             Resource->PinGroupConfig.VendorLength, Level);
   1331     }
   1332 
   1333     AcpiOsPrintf (")\n");
   1334 }
   1335