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