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