10d02842fSSascha Wildner /*******************************************************************************
20d02842fSSascha Wildner  *
30d02842fSSascha Wildner  * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
40d02842fSSascha Wildner  *
50d02842fSSascha Wildner  ******************************************************************************/
60d02842fSSascha Wildner 
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner  *
9b4315fc7SSascha Wildner  * 1. Copyright Notice
10b4315fc7SSascha Wildner  *
11383048acSSascha Wildner  * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
120d02842fSSascha Wildner  * All rights reserved.
130d02842fSSascha Wildner  *
14b4315fc7SSascha Wildner  * 2. License
15b4315fc7SSascha Wildner  *
16b4315fc7SSascha Wildner  * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner  * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner  * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner  * property rights.
20b4315fc7SSascha Wildner  *
21b4315fc7SSascha Wildner  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner  * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner  * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner  * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner  * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner  *
28b4315fc7SSascha Wildner  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner  * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner  * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner  * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner  * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner  * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner  * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner  * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner  *
37b4315fc7SSascha Wildner  * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner  * conditions are met:
39b4315fc7SSascha Wildner  *
40b4315fc7SSascha Wildner  * 3. Conditions
41b4315fc7SSascha Wildner  *
42b4315fc7SSascha Wildner  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner  * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner  * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner  * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner  * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner  * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner  * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner  * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner  * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner  * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner  *
54b4315fc7SSascha Wildner  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner  * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner  * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner  * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner  * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner  * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner  * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner  * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner  * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner  * make.
65b4315fc7SSascha Wildner  *
66b4315fc7SSascha Wildner  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner  * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner  * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner  * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner  * distribution.
71b4315fc7SSascha Wildner  *
72b4315fc7SSascha Wildner  * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner  * Intel Code.
74b4315fc7SSascha Wildner  *
75b4315fc7SSascha Wildner  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner  * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner  * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner  * without prior written authorization from Intel.
79b4315fc7SSascha Wildner  *
80b4315fc7SSascha Wildner  * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner  *
82b4315fc7SSascha Wildner  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner  * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner  *
90b4315fc7SSascha Wildner  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner  * LIMITED REMEDY.
98b4315fc7SSascha Wildner  *
99b4315fc7SSascha Wildner  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner  * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner  * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner  * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner  * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner  * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner  * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner  * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner  * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner  * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner  * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner  * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner  * such license, approval or letter.
113b4315fc7SSascha Wildner  *
114b4315fc7SSascha Wildner  *****************************************************************************
115b4315fc7SSascha Wildner  *
116b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner  * following license:
118b4315fc7SSascha Wildner  *
1190d02842fSSascha Wildner  * Redistribution and use in source and binary forms, with or without
1200d02842fSSascha Wildner  * modification, are permitted provided that the following conditions
1210d02842fSSascha Wildner  * are met:
1220d02842fSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
1230d02842fSSascha Wildner  *    notice, this list of conditions, and the following disclaimer,
1240d02842fSSascha Wildner  *    without modification.
1250d02842fSSascha Wildner  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1260d02842fSSascha Wildner  *    substantially similar to the "NO WARRANTY" disclaimer below
1270d02842fSSascha Wildner  *    ("Disclaimer") and any redistribution must be conditioned upon
1280d02842fSSascha Wildner  *    including a substantially similar Disclaimer requirement for further
1290d02842fSSascha Wildner  *    binary redistribution.
1300d02842fSSascha Wildner  * 3. Neither the names of the above-listed copyright holders nor the names
1310d02842fSSascha Wildner  *    of any contributors may be used to endorse or promote products derived
1320d02842fSSascha Wildner  *    from this software without specific prior written permission.
1330d02842fSSascha Wildner  *
134b4315fc7SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner  *
146b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
1470d02842fSSascha Wildner  * GNU General Public License ("GPL") version 2 as published by the Free
1480d02842fSSascha Wildner  * Software Foundation.
1490d02842fSSascha Wildner  *
150b4315fc7SSascha Wildner  *****************************************************************************/
1510d02842fSSascha Wildner 
1520d02842fSSascha Wildner #include "acpi.h"
1530d02842fSSascha Wildner #include "accommon.h"
1540d02842fSSascha Wildner #include "acdisasm.h"
1550d02842fSSascha Wildner 
1560d02842fSSascha Wildner 
1570d02842fSSascha Wildner #ifdef ACPI_DISASSEMBLER
1580d02842fSSascha Wildner 
1590d02842fSSascha Wildner #define _COMPONENT          ACPI_CA_DEBUGGER
1600d02842fSSascha Wildner         ACPI_MODULE_NAME    ("dbresrcl2")
1610d02842fSSascha Wildner 
1620d02842fSSascha Wildner /* Local prototypes */
1630d02842fSSascha Wildner 
1640d02842fSSascha Wildner static void
165*01d5d5dfSSascha Wildner AcpiDmCsi2SerialBusDescriptor (
166*01d5d5dfSSascha Wildner     ACPI_OP_WALK_INFO       *Info,
167*01d5d5dfSSascha Wildner     AML_RESOURCE            *Resource,
168*01d5d5dfSSascha Wildner     UINT32                  Length,
169*01d5d5dfSSascha Wildner     UINT32                  Level);
170*01d5d5dfSSascha Wildner 
171*01d5d5dfSSascha Wildner static void
1720d02842fSSascha Wildner AcpiDmI2cSerialBusDescriptor (
1732e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
1740d02842fSSascha Wildner     AML_RESOURCE            *Resource,
1750d02842fSSascha Wildner     UINT32                  Length,
1760d02842fSSascha Wildner     UINT32                  Level);
1770d02842fSSascha Wildner 
1780d02842fSSascha Wildner static void
1790d02842fSSascha Wildner AcpiDmSpiSerialBusDescriptor (
1802e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
1810d02842fSSascha Wildner     AML_RESOURCE            *Resource,
1820d02842fSSascha Wildner     UINT32                  Length,
1830d02842fSSascha Wildner     UINT32                  Level);
1840d02842fSSascha Wildner 
1850d02842fSSascha Wildner static void
1860d02842fSSascha Wildner AcpiDmUartSerialBusDescriptor (
1872e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
1880d02842fSSascha Wildner     AML_RESOURCE            *Resource,
1890d02842fSSascha Wildner     UINT32                  Length,
1900d02842fSSascha Wildner     UINT32                  Level);
1910d02842fSSascha Wildner 
1920d02842fSSascha Wildner static void
1930d02842fSSascha Wildner AcpiDmGpioCommon (
1942e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
1950d02842fSSascha Wildner     AML_RESOURCE            *Resource,
1960d02842fSSascha Wildner     UINT32                  Level);
1970d02842fSSascha Wildner 
1980d02842fSSascha Wildner static void
1990d02842fSSascha Wildner AcpiDmDumpRawDataBuffer (
2000d02842fSSascha Wildner     UINT8                   *Buffer,
2010d02842fSSascha Wildner     UINT32                  Length,
2020d02842fSSascha Wildner     UINT32                  Level);
2030d02842fSSascha Wildner 
2040d02842fSSascha Wildner 
2050d02842fSSascha Wildner /* Dispatch table for the serial bus descriptors */
2060d02842fSSascha Wildner 
2070d02842fSSascha Wildner static ACPI_RESOURCE_HANDLER        SerialBusResourceDispatch [] =
2080d02842fSSascha Wildner {
2090d02842fSSascha Wildner     NULL,
2100d02842fSSascha Wildner     AcpiDmI2cSerialBusDescriptor,
2110d02842fSSascha Wildner     AcpiDmSpiSerialBusDescriptor,
212*01d5d5dfSSascha Wildner     AcpiDmUartSerialBusDescriptor,
213*01d5d5dfSSascha Wildner     AcpiDmCsi2SerialBusDescriptor
2140d02842fSSascha Wildner };
2150d02842fSSascha Wildner 
2160d02842fSSascha Wildner 
2170d02842fSSascha Wildner /*******************************************************************************
2180d02842fSSascha Wildner  *
2190d02842fSSascha Wildner  * FUNCTION:    AcpiDmDumpRawDataBuffer
2200d02842fSSascha Wildner  *
2210d02842fSSascha Wildner  * PARAMETERS:  Buffer              - Pointer to the data bytes
2220d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
2230d02842fSSascha Wildner  *              Level               - Current source code indentation level
2240d02842fSSascha Wildner  *
2250d02842fSSascha Wildner  * RETURN:      None
2260d02842fSSascha Wildner  *
2270d02842fSSascha Wildner  * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
2280d02842fSSascha Wildner  *              vendor data bytes.
2290d02842fSSascha Wildner  *
2300d02842fSSascha Wildner  ******************************************************************************/
2310d02842fSSascha Wildner 
2320d02842fSSascha Wildner static void
AcpiDmDumpRawDataBuffer(UINT8 * Buffer,UINT32 Length,UINT32 Level)2330d02842fSSascha Wildner AcpiDmDumpRawDataBuffer (
2340d02842fSSascha Wildner     UINT8                   *Buffer,
2350d02842fSSascha Wildner     UINT32                  Length,
2360d02842fSSascha Wildner     UINT32                  Level)
2370d02842fSSascha Wildner {
2380d02842fSSascha Wildner     UINT32                  Index;
2390d02842fSSascha Wildner     UINT32                  i;
2400d02842fSSascha Wildner     UINT32                  j;
2410d02842fSSascha Wildner 
2420d02842fSSascha Wildner 
2430d02842fSSascha Wildner     if (!Length)
2440d02842fSSascha Wildner     {
2450d02842fSSascha Wildner         return;
2460d02842fSSascha Wildner     }
2470d02842fSSascha Wildner 
2480d02842fSSascha Wildner     AcpiOsPrintf ("RawDataBuffer (0x%.2X)  // Vendor Data", Length);
2490d02842fSSascha Wildner 
2500d02842fSSascha Wildner     AcpiOsPrintf ("\n");
2510d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
2520d02842fSSascha Wildner     AcpiOsPrintf ("{\n");
2530d02842fSSascha Wildner     AcpiDmIndent (Level + 2);
2540d02842fSSascha Wildner 
2550d02842fSSascha Wildner     for (i = 0; i < Length;)
2560d02842fSSascha Wildner     {
2570d02842fSSascha Wildner         for (j = 0; j < 8; j++)
2580d02842fSSascha Wildner         {
2590d02842fSSascha Wildner             Index = i + j;
2600d02842fSSascha Wildner             if (Index >= Length)
2610d02842fSSascha Wildner             {
2620d02842fSSascha Wildner                 goto Finish;
2630d02842fSSascha Wildner             }
2640d02842fSSascha Wildner 
2650d02842fSSascha Wildner             AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
2660d02842fSSascha Wildner             if ((Index + 1) >= Length)
2670d02842fSSascha Wildner             {
2680d02842fSSascha Wildner                 goto Finish;
2690d02842fSSascha Wildner             }
2700d02842fSSascha Wildner 
2710d02842fSSascha Wildner             AcpiOsPrintf (", ");
2720d02842fSSascha Wildner         }
273820c5b08SSascha Wildner 
2740d02842fSSascha Wildner         AcpiOsPrintf ("\n");
2750d02842fSSascha Wildner         AcpiDmIndent (Level + 2);
2760d02842fSSascha Wildner 
2770d02842fSSascha Wildner         i += 8;
2780d02842fSSascha Wildner     }
2790d02842fSSascha Wildner 
2800d02842fSSascha Wildner Finish:
2810d02842fSSascha Wildner     AcpiOsPrintf ("\n");
2820d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
2830d02842fSSascha Wildner     AcpiOsPrintf ("}");
2840d02842fSSascha Wildner }
2850d02842fSSascha Wildner 
2860d02842fSSascha Wildner 
2870d02842fSSascha Wildner /*******************************************************************************
2880d02842fSSascha Wildner  *
2890d02842fSSascha Wildner  * FUNCTION:    AcpiDmGpioCommon
2900d02842fSSascha Wildner  *
2912e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
2922e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
2930d02842fSSascha Wildner  *              Level               - Current source code indentation level
2940d02842fSSascha Wildner  *
2950d02842fSSascha Wildner  * RETURN:      None
2960d02842fSSascha Wildner  *
2970d02842fSSascha Wildner  * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
2980d02842fSSascha Wildner  *
2990d02842fSSascha Wildner  ******************************************************************************/
3000d02842fSSascha Wildner 
3010d02842fSSascha Wildner static void
AcpiDmGpioCommon(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Level)3020d02842fSSascha Wildner AcpiDmGpioCommon (
3032e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
3040d02842fSSascha Wildner     AML_RESOURCE            *Resource,
3050d02842fSSascha Wildner     UINT32                  Level)
3060d02842fSSascha Wildner {
3070d02842fSSascha Wildner     UINT16                  *PinList;
3080d02842fSSascha Wildner     UINT8                   *VendorData;
3092e2672b8SSascha Wildner     char                    *DeviceName = NULL;
3102e2672b8SSascha Wildner     UINT32                  PinCount;
3110d02842fSSascha Wildner     UINT32                  i;
3120d02842fSSascha Wildner 
3130d02842fSSascha Wildner 
3140d02842fSSascha Wildner     /* ResourceSource, ResourceSourceIndex, ResourceType */
3150d02842fSSascha Wildner 
3160d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
3170d02842fSSascha Wildner     if (Resource->Gpio.ResSourceOffset)
3180d02842fSSascha Wildner     {
319820c5b08SSascha Wildner         DeviceName = ACPI_ADD_PTR (char,
320820c5b08SSascha Wildner             Resource, Resource->Gpio.ResSourceOffset),
3212e2672b8SSascha Wildner         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
3220d02842fSSascha Wildner     }
3230d02842fSSascha Wildner 
3240d02842fSSascha Wildner     AcpiOsPrintf (", ");
3250d02842fSSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
3260d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
3270d02842fSSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
3280d02842fSSascha Wildner 
3290d02842fSSascha Wildner     /* Insert a descriptor name */
3300d02842fSSascha Wildner 
3310d02842fSSascha Wildner     AcpiDmDescriptorName ();
3320d02842fSSascha Wildner     AcpiOsPrintf (",");
3330d02842fSSascha Wildner 
3340d02842fSSascha Wildner     /* Dump the vendor data */
3350d02842fSSascha Wildner 
3360d02842fSSascha Wildner     if (Resource->Gpio.VendorOffset)
3370d02842fSSascha Wildner     {
3380d02842fSSascha Wildner         AcpiOsPrintf ("\n");
3390d02842fSSascha Wildner         AcpiDmIndent (Level + 1);
3400d02842fSSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
3410d02842fSSascha Wildner             Resource->Gpio.VendorOffset);
3420d02842fSSascha Wildner 
3430d02842fSSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
3440d02842fSSascha Wildner             Resource->Gpio.VendorLength, Level);
3450d02842fSSascha Wildner     }
3460d02842fSSascha Wildner 
3470d02842fSSascha Wildner     AcpiOsPrintf (")\n");
3480d02842fSSascha Wildner 
3490d02842fSSascha Wildner     /* Dump the interrupt list */
3500d02842fSSascha Wildner 
3510d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
3520d02842fSSascha Wildner     AcpiOsPrintf ("{   // Pin list\n");
3530d02842fSSascha Wildner 
3540d02842fSSascha Wildner     PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
3550d02842fSSascha Wildner         Resource->Gpio.PinTableOffset)) /
3560d02842fSSascha Wildner         sizeof (UINT16);
3570d02842fSSascha Wildner 
3580d02842fSSascha Wildner     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
3590d02842fSSascha Wildner         Resource->Gpio.PinTableOffset);
3600d02842fSSascha Wildner 
3610d02842fSSascha Wildner     for (i = 0; i < PinCount; i++)
3620d02842fSSascha Wildner     {
3630d02842fSSascha Wildner         AcpiDmIndent (Level + 2);
364820c5b08SSascha Wildner         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
365820c5b08SSascha Wildner             ((i + 1) < PinCount) ? "," : "");
3660d02842fSSascha Wildner     }
3670d02842fSSascha Wildner 
3680d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
3690d02842fSSascha Wildner     AcpiOsPrintf ("}\n");
3702e2672b8SSascha Wildner 
371b061b83cSSascha Wildner #ifndef _KERNEL
372820c5b08SSascha Wildner     MpSaveGpioInfo (Info->MappingOp, Resource,
373820c5b08SSascha Wildner         PinCount, PinList, DeviceName);
374b061b83cSSascha Wildner #endif
3750d02842fSSascha Wildner }
3760d02842fSSascha Wildner 
3770d02842fSSascha Wildner 
3780d02842fSSascha Wildner /*******************************************************************************
3790d02842fSSascha Wildner  *
3800d02842fSSascha Wildner  * FUNCTION:    AcpiDmGpioIntDescriptor
3810d02842fSSascha Wildner  *
3822e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
3832e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
3840d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
3850d02842fSSascha Wildner  *              Level               - Current source code indentation level
3860d02842fSSascha Wildner  *
3870d02842fSSascha Wildner  * RETURN:      None
3880d02842fSSascha Wildner  *
3890d02842fSSascha Wildner  * DESCRIPTION: Decode a GPIO Interrupt descriptor
3900d02842fSSascha Wildner  *
3910d02842fSSascha Wildner  ******************************************************************************/
3920d02842fSSascha Wildner 
3930d02842fSSascha Wildner static void
AcpiDmGpioIntDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)3940d02842fSSascha Wildner AcpiDmGpioIntDescriptor (
3952e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
3960d02842fSSascha Wildner     AML_RESOURCE            *Resource,
3970d02842fSSascha Wildner     UINT32                  Length,
3980d02842fSSascha Wildner     UINT32                  Level)
3990d02842fSSascha Wildner {
4000d02842fSSascha Wildner 
4010d02842fSSascha Wildner     /* Dump the GpioInt-specific portion of the descriptor */
4020d02842fSSascha Wildner 
4030d02842fSSascha Wildner     /* EdgeLevel, ActiveLevel, Shared */
4040d02842fSSascha Wildner 
4050d02842fSSascha Wildner     AcpiDmIndent (Level);
4060d02842fSSascha Wildner     AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
4070d02842fSSascha Wildner         AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
40879eafdd7SSascha Wildner         AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
4090d02842fSSascha Wildner         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
4100d02842fSSascha Wildner 
4110d02842fSSascha Wildner     /* PinConfig, DebounceTimeout */
4120d02842fSSascha Wildner 
4130d02842fSSascha Wildner     if (Resource->Gpio.PinConfig <= 3)
4140d02842fSSascha Wildner     {
4150d02842fSSascha Wildner         AcpiOsPrintf ("%s, ",
4160d02842fSSascha Wildner             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
4170d02842fSSascha Wildner     }
4180d02842fSSascha Wildner     else
4190d02842fSSascha Wildner     {
4200d02842fSSascha Wildner         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
4210d02842fSSascha Wildner     }
4220d02842fSSascha Wildner     AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
4230d02842fSSascha Wildner 
4240d02842fSSascha Wildner     /* Dump the GpioInt/GpioIo common portion of the descriptor */
4250d02842fSSascha Wildner 
4262e2672b8SSascha Wildner     AcpiDmGpioCommon (Info, Resource, Level);
4270d02842fSSascha Wildner }
4280d02842fSSascha Wildner 
4290d02842fSSascha Wildner 
4300d02842fSSascha Wildner /*******************************************************************************
4310d02842fSSascha Wildner  *
4320d02842fSSascha Wildner  * FUNCTION:    AcpiDmGpioIoDescriptor
4330d02842fSSascha Wildner  *
4342e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
4352e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
4360d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
4370d02842fSSascha Wildner  *              Level               - Current source code indentation level
4380d02842fSSascha Wildner  *
4390d02842fSSascha Wildner  * RETURN:      None
4400d02842fSSascha Wildner  *
4410d02842fSSascha Wildner  * DESCRIPTION: Decode a GPIO I/O descriptor
4420d02842fSSascha Wildner  *
4430d02842fSSascha Wildner  ******************************************************************************/
4440d02842fSSascha Wildner 
4450d02842fSSascha Wildner static void
AcpiDmGpioIoDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)4460d02842fSSascha Wildner AcpiDmGpioIoDescriptor (
4472e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
4480d02842fSSascha Wildner     AML_RESOURCE            *Resource,
4490d02842fSSascha Wildner     UINT32                  Length,
4500d02842fSSascha Wildner     UINT32                  Level)
4510d02842fSSascha Wildner {
4520d02842fSSascha Wildner 
4530d02842fSSascha Wildner     /* Dump the GpioIo-specific portion of the descriptor */
4540d02842fSSascha Wildner 
4550d02842fSSascha Wildner     /* Shared, PinConfig */
4560d02842fSSascha Wildner 
4570d02842fSSascha Wildner     AcpiDmIndent (Level);
4580d02842fSSascha Wildner     AcpiOsPrintf ("GpioIo (%s, ",
4590d02842fSSascha Wildner         AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
4600d02842fSSascha Wildner 
4610d02842fSSascha Wildner     if (Resource->Gpio.PinConfig <= 3)
4620d02842fSSascha Wildner     {
4630d02842fSSascha Wildner         AcpiOsPrintf ("%s, ",
4640d02842fSSascha Wildner             AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
4650d02842fSSascha Wildner     }
4660d02842fSSascha Wildner     else
4670d02842fSSascha Wildner     {
4680d02842fSSascha Wildner         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
4690d02842fSSascha Wildner     }
4700d02842fSSascha Wildner 
4710d02842fSSascha Wildner     /* DebounceTimeout, DriveStrength, IoRestriction */
4720d02842fSSascha Wildner 
4730d02842fSSascha Wildner     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
4740d02842fSSascha Wildner     AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
4750d02842fSSascha Wildner     AcpiOsPrintf ("%s,\n",
4760d02842fSSascha Wildner         AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
4770d02842fSSascha Wildner 
4780d02842fSSascha Wildner     /* Dump the GpioInt/GpioIo common portion of the descriptor */
4790d02842fSSascha Wildner 
4802e2672b8SSascha Wildner     AcpiDmGpioCommon (Info, Resource, Level);
4810d02842fSSascha Wildner }
4820d02842fSSascha Wildner 
4830d02842fSSascha Wildner 
4840d02842fSSascha Wildner /*******************************************************************************
4850d02842fSSascha Wildner  *
4860d02842fSSascha Wildner  * FUNCTION:    AcpiDmGpioDescriptor
4870d02842fSSascha Wildner  *
4882e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
4892e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
4900d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
4910d02842fSSascha Wildner  *              Level               - Current source code indentation level
4920d02842fSSascha Wildner  *
4930d02842fSSascha Wildner  * RETURN:      None
4940d02842fSSascha Wildner  *
4950d02842fSSascha Wildner  * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
4960d02842fSSascha Wildner  *
4970d02842fSSascha Wildner  ******************************************************************************/
4980d02842fSSascha Wildner 
4990d02842fSSascha Wildner void
AcpiDmGpioDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)5000d02842fSSascha Wildner AcpiDmGpioDescriptor (
5012e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
5020d02842fSSascha Wildner     AML_RESOURCE            *Resource,
5030d02842fSSascha Wildner     UINT32                  Length,
5040d02842fSSascha Wildner     UINT32                  Level)
5050d02842fSSascha Wildner {
5060d02842fSSascha Wildner     UINT8                   ConnectionType;
5070d02842fSSascha Wildner 
5080d02842fSSascha Wildner 
5090d02842fSSascha Wildner     ConnectionType = Resource->Gpio.ConnectionType;
5100d02842fSSascha Wildner 
5110d02842fSSascha Wildner     switch (ConnectionType)
5120d02842fSSascha Wildner     {
5130d02842fSSascha Wildner     case AML_RESOURCE_GPIO_TYPE_INT:
5140d02842fSSascha Wildner 
5152e2672b8SSascha Wildner         AcpiDmGpioIntDescriptor (Info, Resource, Length, Level);
5160d02842fSSascha Wildner         break;
5170d02842fSSascha Wildner 
5180d02842fSSascha Wildner     case AML_RESOURCE_GPIO_TYPE_IO:
5190d02842fSSascha Wildner 
5202e2672b8SSascha Wildner         AcpiDmGpioIoDescriptor (Info, Resource, Length, Level);
5210d02842fSSascha Wildner         break;
5220d02842fSSascha Wildner 
5230d02842fSSascha Wildner     default:
5240d02842fSSascha Wildner 
5250d02842fSSascha Wildner         AcpiOsPrintf ("Unknown GPIO type\n");
5260d02842fSSascha Wildner         break;
5270d02842fSSascha Wildner     }
5280d02842fSSascha Wildner }
5290d02842fSSascha Wildner 
5301093ca81SSascha Wildner /*******************************************************************************
5311093ca81SSascha Wildner  *
5321093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinFunctionDescriptor
5331093ca81SSascha Wildner  *
5341093ca81SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
5351093ca81SSascha Wildner  *              Resource            - Pointer to the resource descriptor
5361093ca81SSascha Wildner  *              Length              - Length of the descriptor in bytes
5371093ca81SSascha Wildner  *              Level               - Current source code indentation level
5381093ca81SSascha Wildner  *
5391093ca81SSascha Wildner  * RETURN:      None
5401093ca81SSascha Wildner  *
5411093ca81SSascha Wildner  * DESCRIPTION: Decode a PinFunction descriptor
5421093ca81SSascha Wildner  *
5431093ca81SSascha Wildner  ******************************************************************************/
5441093ca81SSascha Wildner 
5451093ca81SSascha Wildner void
AcpiDmPinFunctionDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)5461093ca81SSascha Wildner AcpiDmPinFunctionDescriptor (
5471093ca81SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
5481093ca81SSascha Wildner     AML_RESOURCE            *Resource,
5491093ca81SSascha Wildner     UINT32                  Length,
5501093ca81SSascha Wildner     UINT32                  Level)
5511093ca81SSascha Wildner {
5521093ca81SSascha Wildner     UINT16                  *PinList;
5531093ca81SSascha Wildner     UINT8                   *VendorData;
5541093ca81SSascha Wildner     char                    *DeviceName = NULL;
5551093ca81SSascha Wildner     UINT32                  PinCount;
5561093ca81SSascha Wildner     UINT32                  i;
5571093ca81SSascha Wildner 
5581093ca81SSascha Wildner     AcpiDmIndent (Level);
5591093ca81SSascha Wildner     AcpiOsPrintf ("PinFunction (%s, ",
5601093ca81SSascha Wildner         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]);
5611093ca81SSascha Wildner 
5621093ca81SSascha Wildner     if (Resource->PinFunction.PinConfig <= 3)
5631093ca81SSascha Wildner     {
5641093ca81SSascha Wildner         AcpiOsPrintf ("%s, ",
5651093ca81SSascha Wildner             AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]);
5661093ca81SSascha Wildner     }
5671093ca81SSascha Wildner     else
5681093ca81SSascha Wildner     {
5691093ca81SSascha Wildner         AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig);
5701093ca81SSascha Wildner     }
5711093ca81SSascha Wildner 
5721093ca81SSascha Wildner     /* FunctionNumber */
5731093ca81SSascha Wildner 
5741093ca81SSascha Wildner     AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
5751093ca81SSascha Wildner 
5761093ca81SSascha Wildner     if (Resource->PinFunction.ResSourceOffset)
5771093ca81SSascha Wildner     {
5781093ca81SSascha Wildner         DeviceName = ACPI_ADD_PTR (char,
5791093ca81SSascha Wildner             Resource, Resource->PinFunction.ResSourceOffset),
5801093ca81SSascha Wildner         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
5811093ca81SSascha Wildner     }
5821093ca81SSascha Wildner 
5831093ca81SSascha Wildner     AcpiOsPrintf (", ");
5841093ca81SSascha Wildner     AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex);
5851093ca81SSascha Wildner 
5861093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
5871093ca81SSascha Wildner 
5881093ca81SSascha Wildner     /* Always ResourceConsumer */
5891093ca81SSascha Wildner     AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]);
5901093ca81SSascha Wildner 
5911093ca81SSascha Wildner     /* Insert a descriptor name */
5921093ca81SSascha Wildner 
5931093ca81SSascha Wildner     AcpiDmDescriptorName ();
5941093ca81SSascha Wildner 
5951093ca81SSascha Wildner     AcpiOsPrintf (",");
5961093ca81SSascha Wildner 
5971093ca81SSascha Wildner     /* Dump the vendor data */
5981093ca81SSascha Wildner 
5991093ca81SSascha Wildner     if (Resource->PinFunction.VendorLength)
6001093ca81SSascha Wildner     {
6011093ca81SSascha Wildner         AcpiOsPrintf ("\n");
6021093ca81SSascha Wildner         AcpiDmIndent (Level + 1);
6031093ca81SSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
6041093ca81SSascha Wildner             Resource->PinFunction.VendorOffset);
6051093ca81SSascha Wildner 
6061093ca81SSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
6071093ca81SSascha Wildner             Resource->PinFunction.VendorLength, Level);
6081093ca81SSascha Wildner     }
6091093ca81SSascha Wildner 
6101093ca81SSascha Wildner     AcpiOsPrintf (")\n");
6111093ca81SSascha Wildner 
6121093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
6131093ca81SSascha Wildner 
6141093ca81SSascha Wildner     /* Dump the interrupt list */
6151093ca81SSascha Wildner 
6161093ca81SSascha Wildner     AcpiOsPrintf ("{   // Pin list\n");
6171093ca81SSascha Wildner 
6181093ca81SSascha Wildner     PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
6191093ca81SSascha Wildner         Resource->PinFunction.PinTableOffset)) /
6201093ca81SSascha Wildner         sizeof (UINT16);
6211093ca81SSascha Wildner 
6221093ca81SSascha Wildner     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
6231093ca81SSascha Wildner         Resource->PinFunction.PinTableOffset);
6241093ca81SSascha Wildner 
6251093ca81SSascha Wildner     for (i = 0; i < PinCount; i++)
6261093ca81SSascha Wildner     {
6271093ca81SSascha Wildner         AcpiDmIndent (Level + 2);
6281093ca81SSascha Wildner         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
6291093ca81SSascha Wildner             ((i + 1) < PinCount) ? "," : "");
6301093ca81SSascha Wildner     }
6311093ca81SSascha Wildner 
6321093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
6331093ca81SSascha Wildner     AcpiOsPrintf ("}\n");
6341093ca81SSascha Wildner }
6351093ca81SSascha Wildner 
6360d02842fSSascha Wildner 
6370d02842fSSascha Wildner /*******************************************************************************
6380d02842fSSascha Wildner  *
6390d02842fSSascha Wildner  * FUNCTION:    AcpiDmDumpSerialBusVendorData
6400d02842fSSascha Wildner  *
6410d02842fSSascha Wildner  * PARAMETERS:  Resource            - Pointer to the resource descriptor
6420d02842fSSascha Wildner  *
6430d02842fSSascha Wildner  * RETURN:      None
6440d02842fSSascha Wildner  *
6450d02842fSSascha Wildner  * DESCRIPTION: Dump optional serial bus vendor data
6460d02842fSSascha Wildner  *
6470d02842fSSascha Wildner  ******************************************************************************/
6480d02842fSSascha Wildner 
6490d02842fSSascha Wildner static void
AcpiDmDumpSerialBusVendorData(AML_RESOURCE * Resource,UINT32 Level)6500d02842fSSascha Wildner AcpiDmDumpSerialBusVendorData (
6510d02842fSSascha Wildner     AML_RESOURCE            *Resource,
6520d02842fSSascha Wildner     UINT32                  Level)
6530d02842fSSascha Wildner {
6540d02842fSSascha Wildner     UINT8                   *VendorData;
6550d02842fSSascha Wildner     UINT32                  VendorLength;
6560d02842fSSascha Wildner 
6570d02842fSSascha Wildner 
6580d02842fSSascha Wildner     /* Get the (optional) vendor data and length */
6590d02842fSSascha Wildner 
6600d02842fSSascha Wildner     switch (Resource->CommonSerialBus.Type)
6610d02842fSSascha Wildner     {
6620d02842fSSascha Wildner     case AML_RESOURCE_I2C_SERIALBUSTYPE:
6630d02842fSSascha Wildner 
6640d02842fSSascha Wildner         VendorLength = Resource->CommonSerialBus.TypeDataLength -
6650d02842fSSascha Wildner             AML_RESOURCE_I2C_MIN_DATA_LEN;
6660d02842fSSascha Wildner 
6670d02842fSSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
6680d02842fSSascha Wildner             sizeof (AML_RESOURCE_I2C_SERIALBUS));
6690d02842fSSascha Wildner         break;
6700d02842fSSascha Wildner 
6710d02842fSSascha Wildner     case AML_RESOURCE_SPI_SERIALBUSTYPE:
6720d02842fSSascha Wildner 
6730d02842fSSascha Wildner         VendorLength = Resource->CommonSerialBus.TypeDataLength -
6740d02842fSSascha Wildner             AML_RESOURCE_SPI_MIN_DATA_LEN;
6750d02842fSSascha Wildner 
6760d02842fSSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
6770d02842fSSascha Wildner             sizeof (AML_RESOURCE_SPI_SERIALBUS));
6780d02842fSSascha Wildner         break;
6790d02842fSSascha Wildner 
6800d02842fSSascha Wildner     case AML_RESOURCE_UART_SERIALBUSTYPE:
6810d02842fSSascha Wildner 
6820d02842fSSascha Wildner         VendorLength = Resource->CommonSerialBus.TypeDataLength -
6830d02842fSSascha Wildner             AML_RESOURCE_UART_MIN_DATA_LEN;
6840d02842fSSascha Wildner 
6850d02842fSSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
6860d02842fSSascha Wildner             sizeof (AML_RESOURCE_UART_SERIALBUS));
6870d02842fSSascha Wildner         break;
6880d02842fSSascha Wildner 
689*01d5d5dfSSascha Wildner     case AML_RESOURCE_CSI2_SERIALBUSTYPE:
690*01d5d5dfSSascha Wildner 
691*01d5d5dfSSascha Wildner         VendorLength = Resource->CommonSerialBus.TypeDataLength -
692*01d5d5dfSSascha Wildner             AML_RESOURCE_CSI2_MIN_DATA_LEN;
693*01d5d5dfSSascha Wildner 
694*01d5d5dfSSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
695*01d5d5dfSSascha Wildner             sizeof (AML_RESOURCE_CSI2_SERIALBUS));
696*01d5d5dfSSascha Wildner         break;
697*01d5d5dfSSascha Wildner 
6980d02842fSSascha Wildner     default:
6990d02842fSSascha Wildner 
7000d02842fSSascha Wildner         return;
7010d02842fSSascha Wildner     }
7020d02842fSSascha Wildner 
7030d02842fSSascha Wildner     /* Dump the vendor bytes as a RawDataBuffer object */
7040d02842fSSascha Wildner 
7050d02842fSSascha Wildner     AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
7060d02842fSSascha Wildner }
7070d02842fSSascha Wildner 
7080d02842fSSascha Wildner 
7090d02842fSSascha Wildner /*******************************************************************************
7100d02842fSSascha Wildner  *
711*01d5d5dfSSascha Wildner  * FUNCTION:    AcpiDmCsi2SerialBusDescriptor
712*01d5d5dfSSascha Wildner  *
713*01d5d5dfSSascha Wildner  * PARAMETERS:  Info                - Extra resource info
714*01d5d5dfSSascha Wildner  *              Resource            - Pointer to the resource descriptor
715*01d5d5dfSSascha Wildner  *              Length              - Length of the descriptor in bytes
716*01d5d5dfSSascha Wildner  *              Level               - Current source code indentation level
717*01d5d5dfSSascha Wildner  *
718*01d5d5dfSSascha Wildner  * RETURN:      None
719*01d5d5dfSSascha Wildner  *
720*01d5d5dfSSascha Wildner  * DESCRIPTION: Decode a CSI2 serial bus descriptor
721*01d5d5dfSSascha Wildner  *
722*01d5d5dfSSascha Wildner  ******************************************************************************/
723*01d5d5dfSSascha Wildner 
724*01d5d5dfSSascha Wildner static void
AcpiDmCsi2SerialBusDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)725*01d5d5dfSSascha Wildner AcpiDmCsi2SerialBusDescriptor (
726*01d5d5dfSSascha Wildner     ACPI_OP_WALK_INFO       *Info,
727*01d5d5dfSSascha Wildner     AML_RESOURCE            *Resource,
728*01d5d5dfSSascha Wildner     UINT32                  Length,
729*01d5d5dfSSascha Wildner     UINT32                  Level)
730*01d5d5dfSSascha Wildner {
731*01d5d5dfSSascha Wildner     UINT32                  ResourceSourceOffset;
732*01d5d5dfSSascha Wildner     char                    *DeviceName;
733*01d5d5dfSSascha Wildner 
734*01d5d5dfSSascha Wildner 
735*01d5d5dfSSascha Wildner     /* SlaveMode, PhyType, LocalPortInstance */
736*01d5d5dfSSascha Wildner 
737*01d5d5dfSSascha Wildner     AcpiDmIndent (Level);
738*01d5d5dfSSascha Wildner     AcpiOsPrintf ("Csi2Bus (%s,",
739*01d5d5dfSSascha Wildner         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]);
740*01d5d5dfSSascha Wildner 
741*01d5d5dfSSascha Wildner     AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",
742*01d5d5dfSSascha Wildner         Resource->Csi2SerialBus.TypeSpecificFlags & 0x03,
743*01d5d5dfSSascha Wildner         Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC);
744*01d5d5dfSSascha Wildner 
745*01d5d5dfSSascha Wildner     /* ResourceSource is a required field */
746*01d5d5dfSSascha Wildner 
747*01d5d5dfSSascha Wildner     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
748*01d5d5dfSSascha Wildner         Resource->CommonSerialBus.TypeDataLength;
749*01d5d5dfSSascha Wildner 
750*01d5d5dfSSascha Wildner     AcpiDmIndent (Level + 1);
751*01d5d5dfSSascha Wildner     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
752*01d5d5dfSSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
753*01d5d5dfSSascha Wildner 
754*01d5d5dfSSascha Wildner     /* ResourceSourceIndex, ResourceUsage */
755*01d5d5dfSSascha Wildner 
756*01d5d5dfSSascha Wildner     AcpiOsPrintf (",\n");
757*01d5d5dfSSascha Wildner     AcpiDmIndent (Level + 1);
758*01d5d5dfSSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex);
759*01d5d5dfSSascha Wildner 
760*01d5d5dfSSascha Wildner     AcpiOsPrintf ("%s, ",
761*01d5d5dfSSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]);
762*01d5d5dfSSascha Wildner 
763*01d5d5dfSSascha Wildner     /* Insert a descriptor name */
764*01d5d5dfSSascha Wildner 
765*01d5d5dfSSascha Wildner     AcpiDmDescriptorName ();
766*01d5d5dfSSascha Wildner 
767*01d5d5dfSSascha Wildner     /* Dump the vendor data */
768*01d5d5dfSSascha Wildner 
769*01d5d5dfSSascha Wildner     AcpiOsPrintf (",\n");
770*01d5d5dfSSascha Wildner     AcpiDmIndent (Level + 1);
771*01d5d5dfSSascha Wildner     AcpiDmDumpSerialBusVendorData (Resource, Level);
772*01d5d5dfSSascha Wildner     AcpiOsPrintf (")\n");
773*01d5d5dfSSascha Wildner 
774*01d5d5dfSSascha Wildner #ifndef _KERNEL
775*01d5d5dfSSascha Wildner     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
776*01d5d5dfSSascha Wildner #endif
777*01d5d5dfSSascha Wildner }
778*01d5d5dfSSascha Wildner 
779*01d5d5dfSSascha Wildner 
780*01d5d5dfSSascha Wildner /*******************************************************************************
781*01d5d5dfSSascha Wildner  *
7820d02842fSSascha Wildner  * FUNCTION:    AcpiDmI2cSerialBusDescriptor
7830d02842fSSascha Wildner  *
7842e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
7852e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
7860d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
7870d02842fSSascha Wildner  *              Level               - Current source code indentation level
7880d02842fSSascha Wildner  *
7890d02842fSSascha Wildner  * RETURN:      None
7900d02842fSSascha Wildner  *
7910d02842fSSascha Wildner  * DESCRIPTION: Decode a I2C serial bus descriptor
7920d02842fSSascha Wildner  *
7930d02842fSSascha Wildner  ******************************************************************************/
7940d02842fSSascha Wildner 
7950d02842fSSascha Wildner static void
AcpiDmI2cSerialBusDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)7960d02842fSSascha Wildner AcpiDmI2cSerialBusDescriptor (
7972e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
7980d02842fSSascha Wildner     AML_RESOURCE            *Resource,
7990d02842fSSascha Wildner     UINT32                  Length,
8000d02842fSSascha Wildner     UINT32                  Level)
8010d02842fSSascha Wildner {
8020d02842fSSascha Wildner     UINT32                  ResourceSourceOffset;
8032e2672b8SSascha Wildner     char                    *DeviceName;
8040d02842fSSascha Wildner 
8050d02842fSSascha Wildner 
8060d02842fSSascha Wildner     /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
8070d02842fSSascha Wildner 
8080d02842fSSascha Wildner     AcpiDmIndent (Level);
8090d27ae55SSascha Wildner     AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
8100d02842fSSascha Wildner         Resource->I2cSerialBus.SlaveAddress,
8110d02842fSSascha Wildner         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
8120d02842fSSascha Wildner         Resource->I2cSerialBus.ConnectionSpeed);
8130d02842fSSascha Wildner 
8140d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
8150d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
8160d02842fSSascha Wildner         AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
8170d02842fSSascha Wildner 
8180d02842fSSascha Wildner     /* ResourceSource is a required field */
8190d02842fSSascha Wildner 
8200d02842fSSascha Wildner     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
8210d02842fSSascha Wildner         Resource->CommonSerialBus.TypeDataLength;
8220d02842fSSascha Wildner 
823e5e174adSSascha Wildner     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
8242e2672b8SSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
8250d02842fSSascha Wildner 
8260d02842fSSascha Wildner     /* ResourceSourceIndex, ResourceUsage */
8270d02842fSSascha Wildner 
8280d02842fSSascha Wildner     AcpiOsPrintf (",\n");
8290d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
8300d02842fSSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
8310d02842fSSascha Wildner 
8320d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
8330d02842fSSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
8340d02842fSSascha Wildner 
8350d02842fSSascha Wildner     /* Insert a descriptor name */
8360d02842fSSascha Wildner 
8370d02842fSSascha Wildner     AcpiDmDescriptorName ();
8380d27ae55SSascha Wildner 
8390d27ae55SSascha Wildner     /* Share */
8400d27ae55SSascha Wildner 
8410d27ae55SSascha Wildner     AcpiOsPrintf (", %s,\n",
8420d27ae55SSascha Wildner         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]);
8430d02842fSSascha Wildner 
8440d02842fSSascha Wildner     /* Dump the vendor data */
8450d02842fSSascha Wildner 
8460d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
8470d02842fSSascha Wildner     AcpiDmDumpSerialBusVendorData (Resource, Level);
8480d02842fSSascha Wildner     AcpiOsPrintf (")\n");
8492e2672b8SSascha Wildner 
850b061b83cSSascha Wildner #ifndef _KERNEL
8512e2672b8SSascha Wildner     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
852b061b83cSSascha Wildner #endif
8530d02842fSSascha Wildner }
8540d02842fSSascha Wildner 
8550d02842fSSascha Wildner 
8560d02842fSSascha Wildner /*******************************************************************************
8570d02842fSSascha Wildner  *
8580d02842fSSascha Wildner  * FUNCTION:    AcpiDmSpiSerialBusDescriptor
8590d02842fSSascha Wildner  *
8602e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
8612e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
8620d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
8630d02842fSSascha Wildner  *              Level               - Current source code indentation level
8640d02842fSSascha Wildner  *
8650d02842fSSascha Wildner  * RETURN:      None
8660d02842fSSascha Wildner  *
8670d02842fSSascha Wildner  * DESCRIPTION: Decode a SPI serial bus descriptor
8680d02842fSSascha Wildner  *
8690d02842fSSascha Wildner  ******************************************************************************/
8700d02842fSSascha Wildner 
8710d02842fSSascha Wildner static void
AcpiDmSpiSerialBusDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)8720d02842fSSascha Wildner AcpiDmSpiSerialBusDescriptor (
8732e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
8740d02842fSSascha Wildner     AML_RESOURCE            *Resource,
8750d02842fSSascha Wildner     UINT32                  Length,
8760d02842fSSascha Wildner     UINT32                  Level)
8770d02842fSSascha Wildner {
8780d02842fSSascha Wildner     UINT32                  ResourceSourceOffset;
8792e2672b8SSascha Wildner     char                    *DeviceName;
8800d02842fSSascha Wildner 
8810d02842fSSascha Wildner 
8820d02842fSSascha Wildner     /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
8830d02842fSSascha Wildner 
8840d02842fSSascha Wildner     AcpiDmIndent (Level);
8850d27ae55SSascha Wildner     AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
8860d02842fSSascha Wildner         Resource->SpiSerialBus.DeviceSelection,
8870d02842fSSascha Wildner         AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
8880d02842fSSascha Wildner         AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
8890d02842fSSascha Wildner         Resource->SpiSerialBus.DataBitLength);
8900d02842fSSascha Wildner 
8910d02842fSSascha Wildner     /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
8920d02842fSSascha Wildner 
8930d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
8940d02842fSSascha Wildner     AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
8950d02842fSSascha Wildner         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
8960d02842fSSascha Wildner         Resource->SpiSerialBus.ConnectionSpeed,
8970d02842fSSascha Wildner         AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
8980d02842fSSascha Wildner 
8990d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
9000d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
9010d02842fSSascha Wildner         AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
9020d02842fSSascha Wildner 
9030d02842fSSascha Wildner     /* ResourceSource is a required field */
9040d02842fSSascha Wildner 
9050d02842fSSascha Wildner     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
9060d02842fSSascha Wildner         Resource->CommonSerialBus.TypeDataLength;
9070d02842fSSascha Wildner 
908e5e174adSSascha Wildner     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
9092e2672b8SSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
9100d02842fSSascha Wildner 
9110d02842fSSascha Wildner     /* ResourceSourceIndex, ResourceUsage */
9120d02842fSSascha Wildner 
9130d02842fSSascha Wildner     AcpiOsPrintf (",\n");
9140d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
9150d02842fSSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
9160d02842fSSascha Wildner 
9170d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
9180d02842fSSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
9190d02842fSSascha Wildner 
9200d02842fSSascha Wildner     /* Insert a descriptor name */
9210d02842fSSascha Wildner 
9220d02842fSSascha Wildner     AcpiDmDescriptorName ();
9230d27ae55SSascha Wildner 
9240d27ae55SSascha Wildner     /* Share */
9250d27ae55SSascha Wildner 
9260d27ae55SSascha Wildner     AcpiOsPrintf (", %s,\n",
9270d27ae55SSascha Wildner         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]);
9280d02842fSSascha Wildner 
9290d02842fSSascha Wildner     /* Dump the vendor data */
9300d02842fSSascha Wildner 
9310d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
9320d02842fSSascha Wildner     AcpiDmDumpSerialBusVendorData (Resource, Level);
9330d02842fSSascha Wildner     AcpiOsPrintf (")\n");
9342e2672b8SSascha Wildner 
935b061b83cSSascha Wildner #ifndef _KERNEL
9362e2672b8SSascha Wildner     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
937b061b83cSSascha Wildner #endif
9380d02842fSSascha Wildner }
9390d02842fSSascha Wildner 
9400d02842fSSascha Wildner 
9410d02842fSSascha Wildner /*******************************************************************************
9420d02842fSSascha Wildner  *
9430d02842fSSascha Wildner  * FUNCTION:    AcpiDmUartSerialBusDescriptor
9440d02842fSSascha Wildner  *
9452e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
9462e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
9470d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
9480d02842fSSascha Wildner  *              Level               - Current source code indentation level
9490d02842fSSascha Wildner  *
9500d02842fSSascha Wildner  * RETURN:      None
9510d02842fSSascha Wildner  *
9520d02842fSSascha Wildner  * DESCRIPTION: Decode a UART serial bus descriptor
9530d02842fSSascha Wildner  *
9540d02842fSSascha Wildner  ******************************************************************************/
9550d02842fSSascha Wildner 
9560d02842fSSascha Wildner static void
AcpiDmUartSerialBusDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)9570d02842fSSascha Wildner AcpiDmUartSerialBusDescriptor (
9582e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
9590d02842fSSascha Wildner     AML_RESOURCE            *Resource,
9600d02842fSSascha Wildner     UINT32                  Length,
9610d02842fSSascha Wildner     UINT32                  Level)
9620d02842fSSascha Wildner {
9630d02842fSSascha Wildner     UINT32                  ResourceSourceOffset;
9642e2672b8SSascha Wildner     char                    *DeviceName;
9650d02842fSSascha Wildner 
9660d02842fSSascha Wildner 
9670d02842fSSascha Wildner     /* ConnectionSpeed, BitsPerByte, StopBits */
9680d02842fSSascha Wildner 
9690d02842fSSascha Wildner     AcpiDmIndent (Level);
9700d27ae55SSascha Wildner     AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
9710d02842fSSascha Wildner         Resource->UartSerialBus.DefaultBaudRate,
9720d02842fSSascha Wildner         AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
9730d02842fSSascha Wildner         AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
9740d02842fSSascha Wildner 
9750d02842fSSascha Wildner     /* LinesInUse, IsBigEndian, Parity, FlowControl */
9760d02842fSSascha Wildner 
9770d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
9780d02842fSSascha Wildner     AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
9790d02842fSSascha Wildner         Resource->UartSerialBus.LinesEnabled,
9800d02842fSSascha Wildner         AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
9810d02842fSSascha Wildner         AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
9820d02842fSSascha Wildner         AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
9830d02842fSSascha Wildner 
9840d02842fSSascha Wildner     /* ReceiveBufferSize, TransmitBufferSize */
9850d02842fSSascha Wildner 
9860d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
9870d02842fSSascha Wildner     AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
9880d02842fSSascha Wildner         Resource->UartSerialBus.RxFifoSize,
9890d02842fSSascha Wildner         Resource->UartSerialBus.TxFifoSize);
9900d02842fSSascha Wildner 
9910d02842fSSascha Wildner     /* ResourceSource is a required field */
9920d02842fSSascha Wildner 
9930d02842fSSascha Wildner     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
9940d02842fSSascha Wildner         Resource->CommonSerialBus.TypeDataLength;
9950d02842fSSascha Wildner 
996e5e174adSSascha Wildner     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
9972e2672b8SSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
9980d02842fSSascha Wildner 
9990d02842fSSascha Wildner     /* ResourceSourceIndex, ResourceUsage */
10000d02842fSSascha Wildner 
10010d02842fSSascha Wildner     AcpiOsPrintf (",\n");
10020d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
10030d02842fSSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
10040d02842fSSascha Wildner 
10050d02842fSSascha Wildner     AcpiOsPrintf ("%s, ",
10060d02842fSSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
10070d02842fSSascha Wildner 
10080d02842fSSascha Wildner     /* Insert a descriptor name */
10090d02842fSSascha Wildner 
10100d02842fSSascha Wildner     AcpiDmDescriptorName ();
10110d27ae55SSascha Wildner 
10120d27ae55SSascha Wildner     /* Share */
10130d27ae55SSascha Wildner 
10140d27ae55SSascha Wildner     AcpiOsPrintf (", %s,\n",
10150d27ae55SSascha Wildner         AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]);
10160d02842fSSascha Wildner 
10170d02842fSSascha Wildner     /* Dump the vendor data */
10180d02842fSSascha Wildner 
10190d02842fSSascha Wildner     AcpiDmIndent (Level + 1);
10200d02842fSSascha Wildner     AcpiDmDumpSerialBusVendorData (Resource, Level);
10210d02842fSSascha Wildner     AcpiOsPrintf (")\n");
10222e2672b8SSascha Wildner 
1023b061b83cSSascha Wildner #ifndef _KERNEL
10242e2672b8SSascha Wildner     MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);
1025b061b83cSSascha Wildner #endif
10260d02842fSSascha Wildner }
10270d02842fSSascha Wildner 
10280d02842fSSascha Wildner 
10290d02842fSSascha Wildner /*******************************************************************************
10300d02842fSSascha Wildner  *
10310d02842fSSascha Wildner  * FUNCTION:    AcpiDmSerialBusDescriptor
10320d02842fSSascha Wildner  *
10332e2672b8SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
10342e2672b8SSascha Wildner  *              Resource            - Pointer to the resource descriptor
10350d02842fSSascha Wildner  *              Length              - Length of the descriptor in bytes
10360d02842fSSascha Wildner  *              Level               - Current source code indentation level
10370d02842fSSascha Wildner  *
10380d02842fSSascha Wildner  * RETURN:      None
10390d02842fSSascha Wildner  *
1040*01d5d5dfSSascha Wildner  * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor
10410d02842fSSascha Wildner  *
10420d02842fSSascha Wildner  ******************************************************************************/
10430d02842fSSascha Wildner 
10440d02842fSSascha Wildner void
AcpiDmSerialBusDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)10450d02842fSSascha Wildner AcpiDmSerialBusDescriptor (
10462e2672b8SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
10470d02842fSSascha Wildner     AML_RESOURCE            *Resource,
10480d02842fSSascha Wildner     UINT32                  Length,
10490d02842fSSascha Wildner     UINT32                  Level)
10500d02842fSSascha Wildner {
10510d02842fSSascha Wildner 
10520d02842fSSascha Wildner     SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
10532e2672b8SSascha Wildner         Info, Resource, Length, Level);
10540d02842fSSascha Wildner }
10550d02842fSSascha Wildner 
10561093ca81SSascha Wildner /*******************************************************************************
10571093ca81SSascha Wildner  *
10581093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinConfig
10591093ca81SSascha Wildner  *
10601093ca81SSascha Wildner  * PARAMETERS:  PinConfigType       - Pin configuration type
10611093ca81SSascha Wildner  *              PinConfigValue      - Pin configuration value
10621093ca81SSascha Wildner  *
10631093ca81SSascha Wildner  * RETURN:      None
10641093ca81SSascha Wildner  *
10651093ca81SSascha Wildner  * DESCRIPTION: Pretty prints PinConfig type and value.
10661093ca81SSascha Wildner  *
10671093ca81SSascha Wildner  ******************************************************************************/
10681093ca81SSascha Wildner 
10691093ca81SSascha Wildner static void
AcpiDmPinConfig(UINT8 PinConfigType,UINT32 PinConfigValue)10701093ca81SSascha Wildner AcpiDmPinConfig(
10711093ca81SSascha Wildner     UINT8                   PinConfigType,
10721093ca81SSascha Wildner     UINT32                  PinConfigValue)
10731093ca81SSascha Wildner {
10741093ca81SSascha Wildner     if (PinConfigType <= 13)
10751093ca81SSascha Wildner     {
10761093ca81SSascha Wildner         AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType,
10771093ca81SSascha Wildner             AcpiGbl_PtypDecode[PinConfigType]);
10781093ca81SSascha Wildner     }
10791093ca81SSascha Wildner     else
10801093ca81SSascha Wildner     {
10811093ca81SSascha Wildner         AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType);
10821093ca81SSascha Wildner     }
10831093ca81SSascha Wildner 
10841093ca81SSascha Wildner     /* PinConfigValue */
10851093ca81SSascha Wildner 
10861093ca81SSascha Wildner     AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue);
10871093ca81SSascha Wildner }
10881093ca81SSascha Wildner 
10891093ca81SSascha Wildner /*******************************************************************************
10901093ca81SSascha Wildner  *
10911093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinConfigDescriptor
10921093ca81SSascha Wildner  *
10931093ca81SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
10941093ca81SSascha Wildner  *              Resource            - Pointer to the resource descriptor
10951093ca81SSascha Wildner  *              Length              - Length of the descriptor in bytes
10961093ca81SSascha Wildner  *              Level               - Current source code indentation level
10971093ca81SSascha Wildner  *
10981093ca81SSascha Wildner  * RETURN:      None
10991093ca81SSascha Wildner  *
11001093ca81SSascha Wildner  * DESCRIPTION: Decode a PinConfig descriptor
11011093ca81SSascha Wildner  *
11021093ca81SSascha Wildner  ******************************************************************************/
11031093ca81SSascha Wildner 
11041093ca81SSascha Wildner void
AcpiDmPinConfigDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)11051093ca81SSascha Wildner AcpiDmPinConfigDescriptor (
11061093ca81SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
11071093ca81SSascha Wildner     AML_RESOURCE            *Resource,
11081093ca81SSascha Wildner     UINT32                  Length,
11091093ca81SSascha Wildner     UINT32                  Level)
11101093ca81SSascha Wildner {
11111093ca81SSascha Wildner     UINT16                  *PinList;
11121093ca81SSascha Wildner     UINT8                   *VendorData;
11131093ca81SSascha Wildner     char                    *DeviceName = NULL;
11141093ca81SSascha Wildner     UINT32                  PinCount;
11151093ca81SSascha Wildner     UINT32                  i;
11161093ca81SSascha Wildner 
11171093ca81SSascha Wildner     AcpiDmIndent (Level);
11181093ca81SSascha Wildner     AcpiOsPrintf ("PinConfig (%s, ",
11191093ca81SSascha Wildner         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]);
11201093ca81SSascha Wildner 
11211093ca81SSascha Wildner     AcpiDmPinConfig (Resource->PinConfig.PinConfigType,
11221093ca81SSascha Wildner         Resource->PinConfig.PinConfigValue);
11231093ca81SSascha Wildner 
11241093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
11251093ca81SSascha Wildner 
11261093ca81SSascha Wildner     if (Resource->PinConfig.ResSourceOffset)
11271093ca81SSascha Wildner     {
11281093ca81SSascha Wildner         DeviceName = ACPI_ADD_PTR (char,
11291093ca81SSascha Wildner             Resource, Resource->PinConfig.ResSourceOffset),
11301093ca81SSascha Wildner         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
11311093ca81SSascha Wildner     }
11321093ca81SSascha Wildner 
11331093ca81SSascha Wildner     AcpiOsPrintf (", ");
11341093ca81SSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex);
11351093ca81SSascha Wildner 
11361093ca81SSascha Wildner     AcpiOsPrintf ("%s, ",
11371093ca81SSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]);
11381093ca81SSascha Wildner 
11391093ca81SSascha Wildner     /* Insert a descriptor name */
11401093ca81SSascha Wildner 
11411093ca81SSascha Wildner     AcpiDmDescriptorName ();
11421093ca81SSascha Wildner 
11431093ca81SSascha Wildner     AcpiOsPrintf (",");
11441093ca81SSascha Wildner 
11451093ca81SSascha Wildner     /* Dump the vendor data */
11461093ca81SSascha Wildner 
11471093ca81SSascha Wildner     if (Resource->PinConfig.VendorLength)
11481093ca81SSascha Wildner     {
11491093ca81SSascha Wildner         AcpiOsPrintf ("\n");
11501093ca81SSascha Wildner         AcpiDmIndent (Level + 1);
11511093ca81SSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
11521093ca81SSascha Wildner             Resource->PinConfig.VendorOffset);
11531093ca81SSascha Wildner 
11541093ca81SSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
11551093ca81SSascha Wildner             Resource->PinConfig.VendorLength, Level);
11561093ca81SSascha Wildner     }
11571093ca81SSascha Wildner 
11581093ca81SSascha Wildner     AcpiOsPrintf (")\n");
11591093ca81SSascha Wildner 
11601093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
11611093ca81SSascha Wildner 
11621093ca81SSascha Wildner     /* Dump the interrupt list */
11631093ca81SSascha Wildner 
11641093ca81SSascha Wildner     AcpiOsPrintf ("{   // Pin list\n");
11651093ca81SSascha Wildner 
11661093ca81SSascha Wildner     PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset -
11671093ca81SSascha Wildner         Resource->PinConfig.PinTableOffset)) /
11681093ca81SSascha Wildner         sizeof (UINT16);
11691093ca81SSascha Wildner 
11701093ca81SSascha Wildner     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
11711093ca81SSascha Wildner         Resource->PinConfig.PinTableOffset);
11721093ca81SSascha Wildner 
11731093ca81SSascha Wildner     for (i = 0; i < PinCount; i++)
11741093ca81SSascha Wildner     {
11751093ca81SSascha Wildner         AcpiDmIndent (Level + 2);
11761093ca81SSascha Wildner         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
11771093ca81SSascha Wildner             ((i + 1) < PinCount) ? "," : "");
11781093ca81SSascha Wildner     }
11791093ca81SSascha Wildner 
11801093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
11811093ca81SSascha Wildner     AcpiOsPrintf ("}\n");
11821093ca81SSascha Wildner }
11831093ca81SSascha Wildner 
11841093ca81SSascha Wildner /*******************************************************************************
11851093ca81SSascha Wildner  *
11861093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinGroupDescriptor
11871093ca81SSascha Wildner  *
11881093ca81SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
11891093ca81SSascha Wildner  *              Resource            - Pointer to the resource descriptor
11901093ca81SSascha Wildner  *              Length              - Length of the descriptor in bytes
11911093ca81SSascha Wildner  *              Level               - Current source code indentation level
11921093ca81SSascha Wildner  *
11931093ca81SSascha Wildner  * RETURN:      None
11941093ca81SSascha Wildner  *
11951093ca81SSascha Wildner  * DESCRIPTION: Decode a PinGroup descriptor
11961093ca81SSascha Wildner  *
11971093ca81SSascha Wildner  ******************************************************************************/
11981093ca81SSascha Wildner 
11991093ca81SSascha Wildner void
AcpiDmPinGroupDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)12001093ca81SSascha Wildner AcpiDmPinGroupDescriptor (
12011093ca81SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
12021093ca81SSascha Wildner     AML_RESOURCE            *Resource,
12031093ca81SSascha Wildner     UINT32                  Length,
12041093ca81SSascha Wildner     UINT32                  Level)
12051093ca81SSascha Wildner {
12061093ca81SSascha Wildner     char                    *Label;
12071093ca81SSascha Wildner     UINT16                  *PinList;
12081093ca81SSascha Wildner     UINT8                   *VendorData;
12091093ca81SSascha Wildner     UINT32                  PinCount;
12101093ca81SSascha Wildner     UINT32                  i;
12111093ca81SSascha Wildner 
12121093ca81SSascha Wildner     AcpiDmIndent (Level);
12131093ca81SSascha Wildner     /* Always producer */
12141093ca81SSascha Wildner     AcpiOsPrintf ("PinGroup (");
12151093ca81SSascha Wildner 
12161093ca81SSascha Wildner     Label = ACPI_ADD_PTR (char,
12171093ca81SSascha Wildner         Resource, Resource->PinGroup.LabelOffset),
12181093ca81SSascha Wildner     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
12191093ca81SSascha Wildner 
12201093ca81SSascha Wildner     AcpiOsPrintf (", ");
12211093ca81SSascha Wildner 
12221093ca81SSascha Wildner     AcpiOsPrintf ("%s, ",
12231093ca81SSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]);
12241093ca81SSascha Wildner 
12251093ca81SSascha Wildner     /* Insert a descriptor name */
12261093ca81SSascha Wildner 
12271093ca81SSascha Wildner     AcpiDmDescriptorName ();
12281093ca81SSascha Wildner 
12291093ca81SSascha Wildner     AcpiOsPrintf (",");
12301093ca81SSascha Wildner 
12311093ca81SSascha Wildner     /* Dump the vendor data */
12321093ca81SSascha Wildner 
12331093ca81SSascha Wildner     if (Resource->PinGroup.VendorLength)
12341093ca81SSascha Wildner     {
12351093ca81SSascha Wildner         AcpiOsPrintf ("\n");
12361093ca81SSascha Wildner         AcpiDmIndent (Level + 1);
12371093ca81SSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
12381093ca81SSascha Wildner             Resource->PinGroup.VendorOffset);
12391093ca81SSascha Wildner 
12401093ca81SSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
12411093ca81SSascha Wildner             Resource->PinGroup.VendorLength, Level);
12421093ca81SSascha Wildner     }
12431093ca81SSascha Wildner 
12441093ca81SSascha Wildner     AcpiOsPrintf (")\n");
12451093ca81SSascha Wildner 
12461093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
12471093ca81SSascha Wildner 
12481093ca81SSascha Wildner     /* Dump the interrupt list */
12491093ca81SSascha Wildner 
12501093ca81SSascha Wildner     AcpiOsPrintf ("{   // Pin list\n");
12511093ca81SSascha Wildner 
12521093ca81SSascha Wildner     PinCount = (Resource->PinGroup.LabelOffset -
12531093ca81SSascha Wildner         Resource->PinGroup.PinTableOffset) / sizeof (UINT16);
12541093ca81SSascha Wildner 
12551093ca81SSascha Wildner     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
12561093ca81SSascha Wildner         Resource->PinGroup.PinTableOffset);
12571093ca81SSascha Wildner 
12581093ca81SSascha Wildner     for (i = 0; i < PinCount; i++)
12591093ca81SSascha Wildner     {
12601093ca81SSascha Wildner         AcpiDmIndent (Level + 2);
12611093ca81SSascha Wildner         AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
12621093ca81SSascha Wildner             ((i + 1) < PinCount) ? "," : "");
12631093ca81SSascha Wildner     }
12641093ca81SSascha Wildner 
12651093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
12661093ca81SSascha Wildner     AcpiOsPrintf ("}\n");
12671093ca81SSascha Wildner }
12681093ca81SSascha Wildner 
12691093ca81SSascha Wildner /*******************************************************************************
12701093ca81SSascha Wildner  *
12711093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinGroupFunctionDescriptor
12721093ca81SSascha Wildner  *
12731093ca81SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
12741093ca81SSascha Wildner  *              Resource            - Pointer to the resource descriptor
12751093ca81SSascha Wildner  *              Length              - Length of the descriptor in bytes
12761093ca81SSascha Wildner  *              Level               - Current source code indentation level
12771093ca81SSascha Wildner  *
12781093ca81SSascha Wildner  * RETURN:      None
12791093ca81SSascha Wildner  *
12801093ca81SSascha Wildner  * DESCRIPTION: Decode a PinGroupFunction descriptor
12811093ca81SSascha Wildner  *
12821093ca81SSascha Wildner  ******************************************************************************/
12831093ca81SSascha Wildner 
12841093ca81SSascha Wildner void
AcpiDmPinGroupFunctionDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)12851093ca81SSascha Wildner AcpiDmPinGroupFunctionDescriptor (
12861093ca81SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
12871093ca81SSascha Wildner     AML_RESOURCE            *Resource,
12881093ca81SSascha Wildner     UINT32                  Length,
12891093ca81SSascha Wildner     UINT32                  Level)
12901093ca81SSascha Wildner {
12911093ca81SSascha Wildner     UINT8                   *VendorData;
12921093ca81SSascha Wildner     char                    *DeviceName = NULL;
12931093ca81SSascha Wildner     char                    *Label = NULL;
12941093ca81SSascha Wildner 
12951093ca81SSascha Wildner     AcpiDmIndent (Level);
12961093ca81SSascha Wildner     AcpiOsPrintf ("PinGroupFunction (%s, ",
12971093ca81SSascha Wildner         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]);
12981093ca81SSascha Wildner 
12991093ca81SSascha Wildner     /* FunctionNumber */
13001093ca81SSascha Wildner 
13011093ca81SSascha Wildner     AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber);
13021093ca81SSascha Wildner 
13031093ca81SSascha Wildner     DeviceName = ACPI_ADD_PTR (char,
13041093ca81SSascha Wildner         Resource, Resource->PinGroupFunction.ResSourceOffset),
13051093ca81SSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
13061093ca81SSascha Wildner 
13071093ca81SSascha Wildner     AcpiOsPrintf (", ");
13081093ca81SSascha Wildner     AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex);
13091093ca81SSascha Wildner 
13101093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
13111093ca81SSascha Wildner 
13121093ca81SSascha Wildner     Label = ACPI_ADD_PTR (char, Resource,
13131093ca81SSascha Wildner         Resource->PinGroupFunction.ResSourceLabelOffset);
13141093ca81SSascha Wildner     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
13151093ca81SSascha Wildner 
13161093ca81SSascha Wildner     AcpiOsPrintf (", ");
13171093ca81SSascha Wildner 
13181093ca81SSascha Wildner     AcpiOsPrintf ("%s, ",
13191093ca81SSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]);
13201093ca81SSascha Wildner 
13211093ca81SSascha Wildner     /* Insert a descriptor name */
13221093ca81SSascha Wildner 
13231093ca81SSascha Wildner     AcpiDmDescriptorName ();
13241093ca81SSascha Wildner 
13251093ca81SSascha Wildner     AcpiOsPrintf (",");
13261093ca81SSascha Wildner 
13271093ca81SSascha Wildner     /* Dump the vendor data */
13281093ca81SSascha Wildner 
13291093ca81SSascha Wildner     if (Resource->PinGroupFunction.VendorLength)
13301093ca81SSascha Wildner     {
13311093ca81SSascha Wildner         AcpiOsPrintf ("\n");
13321093ca81SSascha Wildner         AcpiDmIndent (Level + 1);
13331093ca81SSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
13341093ca81SSascha Wildner             Resource->PinGroupFunction.VendorOffset);
13351093ca81SSascha Wildner 
13361093ca81SSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
13371093ca81SSascha Wildner             Resource->PinGroupFunction.VendorLength, Level);
13381093ca81SSascha Wildner     }
13391093ca81SSascha Wildner 
13401093ca81SSascha Wildner     AcpiOsPrintf (")\n");
13411093ca81SSascha Wildner }
13421093ca81SSascha Wildner 
13431093ca81SSascha Wildner /*******************************************************************************
13441093ca81SSascha Wildner  *
13451093ca81SSascha Wildner  * FUNCTION:    AcpiDmPinGroupConfigDescriptor
13461093ca81SSascha Wildner  *
13471093ca81SSascha Wildner  * PARAMETERS:  Info                - Extra resource info
13481093ca81SSascha Wildner  *              Resource            - Pointer to the resource descriptor
13491093ca81SSascha Wildner  *              Length              - Length of the descriptor in bytes
13501093ca81SSascha Wildner  *              Level               - Current source code indentation level
13511093ca81SSascha Wildner  *
13521093ca81SSascha Wildner  * RETURN:      None
13531093ca81SSascha Wildner  *
13541093ca81SSascha Wildner  * DESCRIPTION: Decode a PinGroupConfig descriptor
13551093ca81SSascha Wildner  *
13561093ca81SSascha Wildner  ******************************************************************************/
13571093ca81SSascha Wildner 
13581093ca81SSascha Wildner void
AcpiDmPinGroupConfigDescriptor(ACPI_OP_WALK_INFO * Info,AML_RESOURCE * Resource,UINT32 Length,UINT32 Level)13591093ca81SSascha Wildner AcpiDmPinGroupConfigDescriptor (
13601093ca81SSascha Wildner     ACPI_OP_WALK_INFO       *Info,
13611093ca81SSascha Wildner     AML_RESOURCE            *Resource,
13621093ca81SSascha Wildner     UINT32                  Length,
13631093ca81SSascha Wildner     UINT32                  Level)
13641093ca81SSascha Wildner {
13651093ca81SSascha Wildner     UINT8                   *VendorData;
13661093ca81SSascha Wildner     char                    *DeviceName = NULL;
13671093ca81SSascha Wildner     char                    *Label = NULL;
13681093ca81SSascha Wildner 
13691093ca81SSascha Wildner     AcpiDmIndent (Level);
13701093ca81SSascha Wildner     AcpiOsPrintf ("PinGroupConfig (%s, ",
13711093ca81SSascha Wildner         AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]);
13721093ca81SSascha Wildner 
13731093ca81SSascha Wildner     AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType,
13741093ca81SSascha Wildner         Resource->PinGroupConfig.PinConfigValue);
13751093ca81SSascha Wildner 
13761093ca81SSascha Wildner     AcpiDmIndent (Level + 1);
13771093ca81SSascha Wildner 
13781093ca81SSascha Wildner     DeviceName = ACPI_ADD_PTR (char,
13791093ca81SSascha Wildner         Resource, Resource->PinGroupConfig.ResSourceOffset),
13801093ca81SSascha Wildner     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
13811093ca81SSascha Wildner 
13821093ca81SSascha Wildner     AcpiOsPrintf (", ");
13831093ca81SSascha Wildner     AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex);
13841093ca81SSascha Wildner 
13851093ca81SSascha Wildner     Label = ACPI_ADD_PTR (char, Resource,
13861093ca81SSascha Wildner         Resource->PinGroupConfig.ResSourceLabelOffset);
13871093ca81SSascha Wildner     AcpiUtPrintString (Label, ACPI_UINT16_MAX);
13881093ca81SSascha Wildner 
13891093ca81SSascha Wildner     AcpiOsPrintf (", ");
13901093ca81SSascha Wildner 
13911093ca81SSascha Wildner     AcpiOsPrintf ("%s, ",
13921093ca81SSascha Wildner         AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]);
13931093ca81SSascha Wildner 
13941093ca81SSascha Wildner     /* Insert a descriptor name */
13951093ca81SSascha Wildner 
13961093ca81SSascha Wildner     AcpiDmDescriptorName ();
13971093ca81SSascha Wildner 
13981093ca81SSascha Wildner     AcpiOsPrintf (",");
13991093ca81SSascha Wildner 
14001093ca81SSascha Wildner     /* Dump the vendor data */
14011093ca81SSascha Wildner 
14021093ca81SSascha Wildner     if (Resource->PinGroupConfig.VendorLength)
14031093ca81SSascha Wildner     {
14041093ca81SSascha Wildner         AcpiOsPrintf ("\n");
14051093ca81SSascha Wildner         AcpiDmIndent (Level + 1);
14061093ca81SSascha Wildner         VendorData = ACPI_ADD_PTR (UINT8, Resource,
14071093ca81SSascha Wildner             Resource->PinGroupConfig.VendorOffset);
14081093ca81SSascha Wildner 
14091093ca81SSascha Wildner         AcpiDmDumpRawDataBuffer (VendorData,
14101093ca81SSascha Wildner             Resource->PinGroupConfig.VendorLength, Level);
14111093ca81SSascha Wildner     }
14121093ca81SSascha Wildner 
14131093ca81SSascha Wildner     AcpiOsPrintf (")\n");
14141093ca81SSascha Wildner }
14151093ca81SSascha Wildner 
14160d02842fSSascha Wildner #endif
1417