1227896Sjkim/*******************************************************************************
2227896Sjkim *
3227896Sjkim * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
4227896Sjkim *
5227896Sjkim ******************************************************************************/
6227896Sjkim
7227896Sjkim/*
8245582Sjkim * Copyright (C) 2000 - 2013, Intel Corp.
9227896Sjkim * All rights reserved.
10227896Sjkim *
11227896Sjkim * Redistribution and use in source and binary forms, with or without
12227896Sjkim * modification, are permitted provided that the following conditions
13227896Sjkim * are met:
14227896Sjkim * 1. Redistributions of source code must retain the above copyright
15227896Sjkim *    notice, this list of conditions, and the following disclaimer,
16227896Sjkim *    without modification.
17227896Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18227896Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19227896Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20227896Sjkim *    including a substantially similar Disclaimer requirement for further
21227896Sjkim *    binary redistribution.
22227896Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23227896Sjkim *    of any contributors may be used to endorse or promote products derived
24227896Sjkim *    from this software without specific prior written permission.
25227896Sjkim *
26227896Sjkim * Alternatively, this software may be distributed under the terms of the
27227896Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28227896Sjkim * Software Foundation.
29227896Sjkim *
30227896Sjkim * NO WARRANTY
31227896Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32227896Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33227896Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34227896Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35227896Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36227896Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37227896Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38227896Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39227896Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40227896Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41227896Sjkim * POSSIBILITY OF SUCH DAMAGES.
42227896Sjkim */
43227896Sjkim
44227896Sjkim
45228110Sjkim#include <contrib/dev/acpica/include/acpi.h>
46228110Sjkim#include <contrib/dev/acpica/include/accommon.h>
47228110Sjkim#include <contrib/dev/acpica/include/acdisasm.h>
48227896Sjkim
49227896Sjkim
50227896Sjkim#ifdef ACPI_DISASSEMBLER
51227896Sjkim
52227896Sjkim#define _COMPONENT          ACPI_CA_DEBUGGER
53227896Sjkim        ACPI_MODULE_NAME    ("dbresrcl2")
54227896Sjkim
55227896Sjkim/* Local prototypes */
56227896Sjkim
57227896Sjkimstatic void
58227896SjkimAcpiDmI2cSerialBusDescriptor (
59227896Sjkim    AML_RESOURCE            *Resource,
60227896Sjkim    UINT32                  Length,
61227896Sjkim    UINT32                  Level);
62227896Sjkim
63227896Sjkimstatic void
64227896SjkimAcpiDmSpiSerialBusDescriptor (
65227896Sjkim    AML_RESOURCE            *Resource,
66227896Sjkim    UINT32                  Length,
67227896Sjkim    UINT32                  Level);
68227896Sjkim
69227896Sjkimstatic void
70227896SjkimAcpiDmUartSerialBusDescriptor (
71227896Sjkim    AML_RESOURCE            *Resource,
72227896Sjkim    UINT32                  Length,
73227896Sjkim    UINT32                  Level);
74227896Sjkim
75227896Sjkimstatic void
76227896SjkimAcpiDmGpioCommon (
77227896Sjkim    AML_RESOURCE            *Resource,
78227896Sjkim    UINT32                  Level);
79227896Sjkim
80227896Sjkimstatic void
81227896SjkimAcpiDmDumpRawDataBuffer (
82227896Sjkim    UINT8                   *Buffer,
83227896Sjkim    UINT32                  Length,
84227896Sjkim    UINT32                  Level);
85227896Sjkim
86227896Sjkim
87227896Sjkim/* Dispatch table for the serial bus descriptors */
88227896Sjkim
89227896Sjkimstatic ACPI_RESOURCE_HANDLER        SerialBusResourceDispatch [] =
90227896Sjkim{
91227896Sjkim    NULL,
92227896Sjkim    AcpiDmI2cSerialBusDescriptor,
93227896Sjkim    AcpiDmSpiSerialBusDescriptor,
94227896Sjkim    AcpiDmUartSerialBusDescriptor
95227896Sjkim};
96227896Sjkim
97227896Sjkim
98227896Sjkim/*******************************************************************************
99227896Sjkim *
100227896Sjkim * FUNCTION:    AcpiDmDumpRawDataBuffer
101227896Sjkim *
102227896Sjkim * PARAMETERS:  Buffer              - Pointer to the data bytes
103227896Sjkim *              Length              - Length of the descriptor in bytes
104227896Sjkim *              Level               - Current source code indentation level
105227896Sjkim *
106227896Sjkim * RETURN:      None
107227896Sjkim *
108227896Sjkim * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
109227896Sjkim *              vendor data bytes.
110227896Sjkim *
111227896Sjkim ******************************************************************************/
112227896Sjkim
113227896Sjkimstatic void
114227896SjkimAcpiDmDumpRawDataBuffer (
115227896Sjkim    UINT8                   *Buffer,
116227896Sjkim    UINT32                  Length,
117227896Sjkim    UINT32                  Level)
118227896Sjkim{
119227896Sjkim    UINT32                  Index;
120227896Sjkim    UINT32                  i;
121227896Sjkim    UINT32                  j;
122227896Sjkim
123227896Sjkim
124227896Sjkim    if (!Length)
125227896Sjkim    {
126227896Sjkim        return;
127227896Sjkim    }
128227896Sjkim
129227896Sjkim    AcpiOsPrintf ("RawDataBuffer (0x%.2X)  // Vendor Data", Length);
130227896Sjkim
131227896Sjkim    AcpiOsPrintf ("\n");
132227896Sjkim    AcpiDmIndent (Level + 1);
133227896Sjkim    AcpiOsPrintf ("{\n");
134227896Sjkim    AcpiDmIndent (Level + 2);
135227896Sjkim
136227896Sjkim    for (i = 0; i < Length;)
137227896Sjkim    {
138227896Sjkim        for (j = 0; j < 8; j++)
139227896Sjkim        {
140227896Sjkim            Index = i + j;
141227896Sjkim            if (Index >= Length)
142227896Sjkim            {
143227896Sjkim                goto Finish;
144227896Sjkim            }
145227896Sjkim
146227896Sjkim            AcpiOsPrintf ("0x%2.2X", Buffer[Index]);
147227896Sjkim            if ((Index + 1) >= Length)
148227896Sjkim            {
149227896Sjkim                goto Finish;
150227896Sjkim            }
151227896Sjkim
152227896Sjkim            AcpiOsPrintf (", ");
153227896Sjkim        }
154227896Sjkim        AcpiOsPrintf ("\n");
155227896Sjkim        AcpiDmIndent (Level + 2);
156227896Sjkim
157227896Sjkim        i += 8;
158227896Sjkim    }
159227896Sjkim
160227896SjkimFinish:
161227896Sjkim    AcpiOsPrintf ("\n");
162227896Sjkim    AcpiDmIndent (Level + 1);
163227896Sjkim    AcpiOsPrintf ("}");
164227896Sjkim}
165227896Sjkim
166227896Sjkim
167227896Sjkim/*******************************************************************************
168227896Sjkim *
169227896Sjkim * FUNCTION:    AcpiDmGpioCommon
170227896Sjkim *
171227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
172227896Sjkim *              Level               - Current source code indentation level
173227896Sjkim *
174227896Sjkim * RETURN:      None
175227896Sjkim *
176227896Sjkim * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
177227896Sjkim *
178227896Sjkim ******************************************************************************/
179227896Sjkim
180227896Sjkimstatic void
181227896SjkimAcpiDmGpioCommon (
182227896Sjkim    AML_RESOURCE            *Resource,
183227896Sjkim    UINT32                  Level)
184227896Sjkim{
185227896Sjkim    UINT32                  PinCount;
186227896Sjkim    UINT16                  *PinList;
187227896Sjkim    UINT8                   *VendorData;
188227896Sjkim    UINT32                  i;
189227896Sjkim
190227896Sjkim
191227896Sjkim    /* ResourceSource, ResourceSourceIndex, ResourceType */
192227896Sjkim
193227896Sjkim    AcpiDmIndent (Level + 1);
194227896Sjkim    if (Resource->Gpio.ResSourceOffset)
195227896Sjkim    {
196227896Sjkim        AcpiUtPrintString (
197227896Sjkim            ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset),
198252279Sjkim            ACPI_UINT16_MAX);
199227896Sjkim    }
200227896Sjkim
201227896Sjkim    AcpiOsPrintf (", ");
202227896Sjkim    AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
203227896Sjkim    AcpiOsPrintf ("%s, ",
204243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
205227896Sjkim
206227896Sjkim    /* Insert a descriptor name */
207227896Sjkim
208227896Sjkim    AcpiDmDescriptorName ();
209227896Sjkim    AcpiOsPrintf (",");
210227896Sjkim
211227896Sjkim    /* Dump the vendor data */
212227896Sjkim
213227896Sjkim    if (Resource->Gpio.VendorOffset)
214227896Sjkim    {
215227896Sjkim        AcpiOsPrintf ("\n");
216227896Sjkim        AcpiDmIndent (Level + 1);
217227896Sjkim        VendorData = ACPI_ADD_PTR (UINT8, Resource,
218227896Sjkim            Resource->Gpio.VendorOffset);
219227896Sjkim
220227896Sjkim        AcpiDmDumpRawDataBuffer (VendorData,
221227896Sjkim            Resource->Gpio.VendorLength, Level);
222227896Sjkim    }
223227896Sjkim
224227896Sjkim    AcpiOsPrintf (")\n");
225227896Sjkim
226227896Sjkim    /* Dump the interrupt list */
227227896Sjkim
228227896Sjkim    AcpiDmIndent (Level + 1);
229227896Sjkim    AcpiOsPrintf ("{   // Pin list\n");
230227896Sjkim
231227896Sjkim    PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
232227896Sjkim        Resource->Gpio.PinTableOffset)) /
233227896Sjkim        sizeof (UINT16);
234227896Sjkim
235227896Sjkim    PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
236227896Sjkim        Resource->Gpio.PinTableOffset);
237227896Sjkim
238227896Sjkim    for (i = 0; i < PinCount; i++)
239227896Sjkim    {
240227896Sjkim        AcpiDmIndent (Level + 2);
241227896Sjkim        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : "");
242227896Sjkim    }
243227896Sjkim
244227896Sjkim    AcpiDmIndent (Level + 1);
245227896Sjkim    AcpiOsPrintf ("}\n");
246227896Sjkim}
247227896Sjkim
248227896Sjkim
249227896Sjkim/*******************************************************************************
250227896Sjkim *
251227896Sjkim * FUNCTION:    AcpiDmGpioIntDescriptor
252227896Sjkim *
253227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
254227896Sjkim *              Length              - Length of the descriptor in bytes
255227896Sjkim *              Level               - Current source code indentation level
256227896Sjkim *
257227896Sjkim * RETURN:      None
258227896Sjkim *
259227896Sjkim * DESCRIPTION: Decode a GPIO Interrupt descriptor
260227896Sjkim *
261227896Sjkim ******************************************************************************/
262227896Sjkim
263227896Sjkimstatic void
264227896SjkimAcpiDmGpioIntDescriptor (
265227896Sjkim    AML_RESOURCE            *Resource,
266227896Sjkim    UINT32                  Length,
267227896Sjkim    UINT32                  Level)
268227896Sjkim{
269227896Sjkim
270227896Sjkim    /* Dump the GpioInt-specific portion of the descriptor */
271227896Sjkim
272227896Sjkim    /* EdgeLevel, ActiveLevel, Shared */
273227896Sjkim
274227896Sjkim    AcpiDmIndent (Level);
275227896Sjkim    AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
276243347Sjkim        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
277243347Sjkim        AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Gpio.IntFlags, 1)],
278243347Sjkim        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
279227896Sjkim
280227896Sjkim    /* PinConfig, DebounceTimeout */
281227896Sjkim
282227896Sjkim    if (Resource->Gpio.PinConfig <= 3)
283227896Sjkim    {
284227896Sjkim        AcpiOsPrintf ("%s, ",
285227896Sjkim            AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
286227896Sjkim    }
287227896Sjkim    else
288227896Sjkim    {
289227896Sjkim        AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
290227896Sjkim    }
291227896Sjkim    AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
292227896Sjkim
293227896Sjkim    /* Dump the GpioInt/GpioIo common portion of the descriptor */
294227896Sjkim
295227896Sjkim    AcpiDmGpioCommon (Resource, Level);
296227896Sjkim}
297227896Sjkim
298227896Sjkim
299227896Sjkim/*******************************************************************************
300227896Sjkim *
301227896Sjkim * FUNCTION:    AcpiDmGpioIoDescriptor
302227896Sjkim *
303227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
304227896Sjkim *              Length              - Length of the descriptor in bytes
305227896Sjkim *              Level               - Current source code indentation level
306227896Sjkim *
307227896Sjkim * RETURN:      None
308227896Sjkim *
309243347Sjkim * DESCRIPTION: Decode a GPIO I/O descriptor
310227896Sjkim *
311227896Sjkim ******************************************************************************/
312227896Sjkim
313227896Sjkimstatic void
314227896SjkimAcpiDmGpioIoDescriptor (
315227896Sjkim    AML_RESOURCE            *Resource,
316227896Sjkim    UINT32                  Length,
317227896Sjkim    UINT32                  Level)
318227896Sjkim{
319227896Sjkim
320227896Sjkim    /* Dump the GpioIo-specific portion of the descriptor */
321227896Sjkim
322227896Sjkim    /* Shared, PinConfig */
323227896Sjkim
324227896Sjkim    AcpiDmIndent (Level);
325227896Sjkim    AcpiOsPrintf ("GpioIo (%s, ",
326243347Sjkim        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
327227896Sjkim
328227896Sjkim    if (Resource->Gpio.PinConfig <= 3)
329227896Sjkim    {
330227896Sjkim        AcpiOsPrintf ("%s, ",
331227896Sjkim            AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);
332227896Sjkim    }
333227896Sjkim    else
334227896Sjkim    {
335227896Sjkim        AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
336227896Sjkim    }
337227896Sjkim
338227896Sjkim    /* DebounceTimeout, DriveStrength, IoRestriction */
339227896Sjkim
340227896Sjkim    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
341227896Sjkim    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
342227896Sjkim    AcpiOsPrintf ("%s,\n",
343243347Sjkim        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
344227896Sjkim
345227896Sjkim    /* Dump the GpioInt/GpioIo common portion of the descriptor */
346227896Sjkim
347227896Sjkim    AcpiDmGpioCommon (Resource, Level);
348227896Sjkim}
349227896Sjkim
350227896Sjkim
351227896Sjkim/*******************************************************************************
352227896Sjkim *
353227896Sjkim * FUNCTION:    AcpiDmGpioDescriptor
354227896Sjkim *
355227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
356227896Sjkim *              Length              - Length of the descriptor in bytes
357227896Sjkim *              Level               - Current source code indentation level
358227896Sjkim *
359227896Sjkim * RETURN:      None
360227896Sjkim *
361227896Sjkim * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
362227896Sjkim *
363227896Sjkim ******************************************************************************/
364227896Sjkim
365227896Sjkimvoid
366227896SjkimAcpiDmGpioDescriptor (
367227896Sjkim    AML_RESOURCE            *Resource,
368227896Sjkim    UINT32                  Length,
369227896Sjkim    UINT32                  Level)
370227896Sjkim{
371227896Sjkim    UINT8                   ConnectionType;
372227896Sjkim
373227896Sjkim
374227896Sjkim    ConnectionType = Resource->Gpio.ConnectionType;
375227896Sjkim
376227896Sjkim    switch (ConnectionType)
377227896Sjkim    {
378227896Sjkim    case AML_RESOURCE_GPIO_TYPE_INT:
379250838Sjkim
380227896Sjkim        AcpiDmGpioIntDescriptor (Resource, Length, Level);
381227896Sjkim        break;
382227896Sjkim
383227896Sjkim    case AML_RESOURCE_GPIO_TYPE_IO:
384250838Sjkim
385227896Sjkim        AcpiDmGpioIoDescriptor (Resource, Length, Level);
386227896Sjkim        break;
387227896Sjkim
388227896Sjkim    default:
389250838Sjkim
390227896Sjkim        AcpiOsPrintf ("Unknown GPIO type\n");
391227896Sjkim        break;
392227896Sjkim    }
393227896Sjkim}
394227896Sjkim
395227896Sjkim
396227896Sjkim/*******************************************************************************
397227896Sjkim *
398227896Sjkim * FUNCTION:    AcpiDmDumpSerialBusVendorData
399227896Sjkim *
400227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
401227896Sjkim *
402227896Sjkim * RETURN:      None
403227896Sjkim *
404227896Sjkim * DESCRIPTION: Dump optional serial bus vendor data
405227896Sjkim *
406227896Sjkim ******************************************************************************/
407227896Sjkim
408227896Sjkimstatic void
409227896SjkimAcpiDmDumpSerialBusVendorData (
410227896Sjkim    AML_RESOURCE            *Resource,
411227896Sjkim    UINT32                  Level)
412227896Sjkim{
413227896Sjkim    UINT8                   *VendorData;
414227896Sjkim    UINT32                  VendorLength;
415227896Sjkim
416227896Sjkim
417227896Sjkim    /* Get the (optional) vendor data and length */
418227896Sjkim
419227896Sjkim    switch (Resource->CommonSerialBus.Type)
420227896Sjkim    {
421227896Sjkim    case AML_RESOURCE_I2C_SERIALBUSTYPE:
422227896Sjkim
423227896Sjkim        VendorLength = Resource->CommonSerialBus.TypeDataLength -
424227896Sjkim            AML_RESOURCE_I2C_MIN_DATA_LEN;
425227896Sjkim
426227896Sjkim        VendorData = ACPI_ADD_PTR (UINT8, Resource,
427227896Sjkim            sizeof (AML_RESOURCE_I2C_SERIALBUS));
428227896Sjkim        break;
429227896Sjkim
430227896Sjkim    case AML_RESOURCE_SPI_SERIALBUSTYPE:
431227896Sjkim
432227896Sjkim        VendorLength = Resource->CommonSerialBus.TypeDataLength -
433227896Sjkim            AML_RESOURCE_SPI_MIN_DATA_LEN;
434227896Sjkim
435227896Sjkim        VendorData = ACPI_ADD_PTR (UINT8, Resource,
436227896Sjkim            sizeof (AML_RESOURCE_SPI_SERIALBUS));
437227896Sjkim        break;
438227896Sjkim
439227896Sjkim    case AML_RESOURCE_UART_SERIALBUSTYPE:
440227896Sjkim
441227896Sjkim        VendorLength = Resource->CommonSerialBus.TypeDataLength -
442227896Sjkim            AML_RESOURCE_UART_MIN_DATA_LEN;
443227896Sjkim
444227896Sjkim        VendorData = ACPI_ADD_PTR (UINT8, Resource,
445227896Sjkim            sizeof (AML_RESOURCE_UART_SERIALBUS));
446227896Sjkim        break;
447227896Sjkim
448227896Sjkim    default:
449250838Sjkim
450227896Sjkim        return;
451227896Sjkim    }
452227896Sjkim
453227896Sjkim    /* Dump the vendor bytes as a RawDataBuffer object */
454227896Sjkim
455227896Sjkim    AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
456227896Sjkim}
457227896Sjkim
458227896Sjkim
459227896Sjkim/*******************************************************************************
460227896Sjkim *
461227896Sjkim * FUNCTION:    AcpiDmI2cSerialBusDescriptor
462227896Sjkim *
463227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
464227896Sjkim *              Length              - Length of the descriptor in bytes
465227896Sjkim *              Level               - Current source code indentation level
466227896Sjkim *
467227896Sjkim * RETURN:      None
468227896Sjkim *
469227896Sjkim * DESCRIPTION: Decode a I2C serial bus descriptor
470227896Sjkim *
471227896Sjkim ******************************************************************************/
472227896Sjkim
473227896Sjkimstatic void
474227896SjkimAcpiDmI2cSerialBusDescriptor (
475227896Sjkim    AML_RESOURCE            *Resource,
476227896Sjkim    UINT32                  Length,
477227896Sjkim    UINT32                  Level)
478227896Sjkim{
479227896Sjkim    UINT32                  ResourceSourceOffset;
480227896Sjkim
481227896Sjkim
482227896Sjkim    /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
483227896Sjkim
484227896Sjkim    AcpiDmIndent (Level);
485227896Sjkim    AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n",
486227896Sjkim        Resource->I2cSerialBus.SlaveAddress,
487243347Sjkim        AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
488227896Sjkim        Resource->I2cSerialBus.ConnectionSpeed);
489227896Sjkim
490227896Sjkim    AcpiDmIndent (Level + 1);
491227896Sjkim    AcpiOsPrintf ("%s, ",
492243347Sjkim        AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
493227896Sjkim
494227896Sjkim    /* ResourceSource is a required field */
495227896Sjkim
496227896Sjkim    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
497227896Sjkim        Resource->CommonSerialBus.TypeDataLength;
498227896Sjkim
499227896Sjkim    AcpiUtPrintString (
500227896Sjkim        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
501252279Sjkim        ACPI_UINT16_MAX);
502227896Sjkim
503227896Sjkim    /* ResourceSourceIndex, ResourceUsage */
504227896Sjkim
505227896Sjkim    AcpiOsPrintf (",\n");
506227896Sjkim    AcpiDmIndent (Level + 1);
507227896Sjkim    AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);
508227896Sjkim
509227896Sjkim    AcpiOsPrintf ("%s, ",
510243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);
511227896Sjkim
512227896Sjkim    /* Insert a descriptor name */
513227896Sjkim
514227896Sjkim    AcpiDmDescriptorName ();
515227896Sjkim    AcpiOsPrintf (",\n");
516227896Sjkim
517227896Sjkim    /* Dump the vendor data */
518227896Sjkim
519227896Sjkim    AcpiDmIndent (Level + 1);
520227896Sjkim    AcpiDmDumpSerialBusVendorData (Resource, Level);
521227896Sjkim    AcpiOsPrintf (")\n");
522227896Sjkim}
523227896Sjkim
524227896Sjkim
525227896Sjkim/*******************************************************************************
526227896Sjkim *
527227896Sjkim * FUNCTION:    AcpiDmSpiSerialBusDescriptor
528227896Sjkim *
529227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
530227896Sjkim *              Length              - Length of the descriptor in bytes
531227896Sjkim *              Level               - Current source code indentation level
532227896Sjkim *
533227896Sjkim * RETURN:      None
534227896Sjkim *
535227896Sjkim * DESCRIPTION: Decode a SPI serial bus descriptor
536227896Sjkim *
537227896Sjkim ******************************************************************************/
538227896Sjkim
539227896Sjkimstatic void
540227896SjkimAcpiDmSpiSerialBusDescriptor (
541227896Sjkim    AML_RESOURCE            *Resource,
542227896Sjkim    UINT32                  Length,
543227896Sjkim    UINT32                  Level)
544227896Sjkim{
545227896Sjkim    UINT32                  ResourceSourceOffset;
546227896Sjkim
547227896Sjkim
548227896Sjkim    /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
549227896Sjkim
550227896Sjkim    AcpiDmIndent (Level);
551227896Sjkim    AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n",
552227896Sjkim        Resource->SpiSerialBus.DeviceSelection,
553243347Sjkim        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
554243347Sjkim        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
555227896Sjkim        Resource->SpiSerialBus.DataBitLength);
556227896Sjkim
557227896Sjkim    /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
558227896Sjkim
559227896Sjkim    AcpiDmIndent (Level + 1);
560227896Sjkim    AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
561243347Sjkim        AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
562227896Sjkim        Resource->SpiSerialBus.ConnectionSpeed,
563243347Sjkim        AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
564227896Sjkim
565227896Sjkim    AcpiDmIndent (Level + 1);
566227896Sjkim    AcpiOsPrintf ("%s, ",
567243347Sjkim        AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);
568227896Sjkim
569227896Sjkim    /* ResourceSource is a required field */
570227896Sjkim
571227896Sjkim    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
572227896Sjkim        Resource->CommonSerialBus.TypeDataLength;
573227896Sjkim
574227896Sjkim    AcpiUtPrintString (
575227896Sjkim        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
576252279Sjkim        ACPI_UINT16_MAX);
577227896Sjkim
578227896Sjkim    /* ResourceSourceIndex, ResourceUsage */
579227896Sjkim
580227896Sjkim    AcpiOsPrintf (",\n");
581227896Sjkim    AcpiDmIndent (Level + 1);
582227896Sjkim    AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);
583227896Sjkim
584227896Sjkim    AcpiOsPrintf ("%s, ",
585243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);
586227896Sjkim
587227896Sjkim    /* Insert a descriptor name */
588227896Sjkim
589227896Sjkim    AcpiDmDescriptorName ();
590227896Sjkim    AcpiOsPrintf (",\n");
591227896Sjkim
592227896Sjkim    /* Dump the vendor data */
593227896Sjkim
594227896Sjkim    AcpiDmIndent (Level + 1);
595227896Sjkim    AcpiDmDumpSerialBusVendorData (Resource, Level);
596227896Sjkim    AcpiOsPrintf (")\n");
597227896Sjkim}
598227896Sjkim
599227896Sjkim
600227896Sjkim/*******************************************************************************
601227896Sjkim *
602227896Sjkim * FUNCTION:    AcpiDmUartSerialBusDescriptor
603227896Sjkim *
604227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
605227896Sjkim *              Length              - Length of the descriptor in bytes
606227896Sjkim *              Level               - Current source code indentation level
607227896Sjkim *
608227896Sjkim * RETURN:      None
609227896Sjkim *
610227896Sjkim * DESCRIPTION: Decode a UART serial bus descriptor
611227896Sjkim *
612227896Sjkim ******************************************************************************/
613227896Sjkim
614227896Sjkimstatic void
615227896SjkimAcpiDmUartSerialBusDescriptor (
616227896Sjkim    AML_RESOURCE            *Resource,
617227896Sjkim    UINT32                  Length,
618227896Sjkim    UINT32                  Level)
619227896Sjkim{
620227896Sjkim    UINT32                  ResourceSourceOffset;
621227896Sjkim
622227896Sjkim
623227896Sjkim    /* ConnectionSpeed, BitsPerByte, StopBits */
624227896Sjkim
625227896Sjkim    AcpiDmIndent (Level);
626227896Sjkim    AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n",
627227896Sjkim        Resource->UartSerialBus.DefaultBaudRate,
628243347Sjkim        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
629243347Sjkim        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
630227896Sjkim
631227896Sjkim    /* LinesInUse, IsBigEndian, Parity, FlowControl */
632227896Sjkim
633227896Sjkim    AcpiDmIndent (Level + 1);
634227896Sjkim    AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
635227896Sjkim        Resource->UartSerialBus.LinesEnabled,
636243347Sjkim        AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],
637243347Sjkim        AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],
638243347Sjkim        AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);
639227896Sjkim
640227896Sjkim    /* ReceiveBufferSize, TransmitBufferSize */
641227896Sjkim
642227896Sjkim    AcpiDmIndent (Level + 1);
643227896Sjkim    AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
644227896Sjkim        Resource->UartSerialBus.RxFifoSize,
645227896Sjkim        Resource->UartSerialBus.TxFifoSize);
646227896Sjkim
647227896Sjkim    /* ResourceSource is a required field */
648227896Sjkim
649227896Sjkim    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
650227896Sjkim        Resource->CommonSerialBus.TypeDataLength;
651227896Sjkim
652227896Sjkim    AcpiUtPrintString (
653227896Sjkim        ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
654252279Sjkim        ACPI_UINT16_MAX);
655227896Sjkim
656227896Sjkim    /* ResourceSourceIndex, ResourceUsage */
657227896Sjkim
658227896Sjkim    AcpiOsPrintf (",\n");
659227896Sjkim    AcpiDmIndent (Level + 1);
660227896Sjkim    AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);
661227896Sjkim
662227896Sjkim    AcpiOsPrintf ("%s, ",
663243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);
664227896Sjkim
665227896Sjkim    /* Insert a descriptor name */
666227896Sjkim
667227896Sjkim    AcpiDmDescriptorName ();
668227896Sjkim    AcpiOsPrintf (",\n");
669227896Sjkim
670227896Sjkim    /* Dump the vendor data */
671227896Sjkim
672227896Sjkim    AcpiDmIndent (Level + 1);
673227896Sjkim    AcpiDmDumpSerialBusVendorData (Resource, Level);
674227896Sjkim    AcpiOsPrintf (")\n");
675227896Sjkim}
676227896Sjkim
677227896Sjkim
678227896Sjkim/*******************************************************************************
679227896Sjkim *
680227896Sjkim * FUNCTION:    AcpiDmSerialBusDescriptor
681227896Sjkim *
682227896Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
683227896Sjkim *              Length              - Length of the descriptor in bytes
684227896Sjkim *              Level               - Current source code indentation level
685227896Sjkim *
686227896Sjkim * RETURN:      None
687227896Sjkim *
688227896Sjkim * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor
689227896Sjkim *
690227896Sjkim ******************************************************************************/
691227896Sjkim
692227896Sjkimvoid
693227896SjkimAcpiDmSerialBusDescriptor (
694227896Sjkim    AML_RESOURCE            *Resource,
695227896Sjkim    UINT32                  Length,
696227896Sjkim    UINT32                  Level)
697227896Sjkim{
698227896Sjkim
699227896Sjkim    SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
700227896Sjkim        Resource, Length, Level);
701227896Sjkim}
702227896Sjkim
703227896Sjkim#endif
704