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