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