1 /*******************************************************************************
3 * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)
5 ******************************************************************************/
7 /******************************************************************************
11 * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
12 * All rights reserved.
16 * 2.1. This is your license from Intel Corp. under its intellectual property
17 * rights. You may have additional license terms from the party that provided
18 * you this software, covering your right to use that party's intellectual
21 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22 * copy of the source code appearing in this file ("Covered Code") an
23 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24 * base code distributed originally by Intel ("Original Intel Code") to copy,
25 * make derivatives, distribute, use and display any portion of the Covered
26 * Code in any form, with the right to sublicense such rights; and
28 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29 * license (with the right to sublicense), under only those claims of Intel
30 * patents that are infringed by the Original Intel Code, to make, use, sell,
31 * offer to sell, and import the Covered Code and derivative works thereof
32 * solely to the minimum extent necessary to exercise the above copyright
33 * license, and in no event shall the patent license extend to any additions
34 * to or modifications of the Original Intel Code. No other license or right
35 * is granted directly or by implication, estoppel or otherwise;
37 * The above copyright and patent license is granted only if the following
42 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43 * Redistribution of source code of any substantial portion of the Covered
44 * Code or modification with rights to further distribute source must include
45 * the above Copyright Notice, the above License, this list of Conditions,
46 * and the following Disclaimer and Export Compliance provision. In addition,
47 * Licensee must cause all Covered Code to which Licensee contributes to
48 * contain a file documenting the changes Licensee made to create that Covered
49 * Code and the date of any change. Licensee must include in that file the
50 * documentation of any changes made by any predecessor Licensee. Licensee
51 * must include a prominent statement that the modification is derived,
52 * directly or indirectly, from Original Intel Code.
54 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55 * Redistribution of source code of any substantial portion of the Covered
56 * Code or modification without rights to further distribute source must
57 * include the following Disclaimer and Export Compliance provision in the
58 * documentation and/or other materials provided with distribution. In
59 * addition, Licensee may not authorize further sublicense of source of any
60 * portion of the Covered Code, and must include terms to the effect that the
61 * license from Licensee to its licensee is limited to the intellectual
62 * property embodied in the software Licensee provides to its licensee, and
63 * not to intellectual property embodied in modifications its licensee may
66 * 3.3. Redistribution of Executable. Redistribution in executable form of any
67 * substantial portion of the Covered Code or modification must reproduce the
68 * above Copyright Notice, and the following Disclaimer and Export Compliance
69 * provision in the documentation and/or other materials provided with the
72 * 3.4. Intel retains all right, title, and interest in and to the Original
75 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76 * Intel shall be used in advertising or otherwise to promote the sale, use or
77 * other dealings in products derived from or relating to the Covered Code
78 * without prior written authorization from Intel.
80 * 4. Disclaimer and Export Compliance
82 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
90 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
99 * 4.3. Licensee shall not export, either directly or indirectly, any of this
100 * software or system incorporating such software without first obtaining any
101 * required license or other approval from the U. S. Department of Commerce or
102 * any other agency or department of the United States Government. In the
103 * event Licensee exports any such software from the United States or
104 * re-exports any such software from a foreign destination, Licensee shall
105 * ensure that the distribution and export/re-export of the software is in
106 * compliance with all laws, regulations, orders, or other restrictions of the
107 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108 * any of its subsidiaries will export/re-export any technical data, process,
109 * software, or service, directly or indirectly, to any country for which the
110 * United States government or any agency thereof requires an export license,
111 * other governmental approval, or letter of assurance, without first obtaining
112 * such license, approval or letter.
114 *****************************************************************************
116 * Alternatively, you may choose to be licensed under the terms of the
119 * Redistribution and use in source and binary forms, with or without
120 * modification, are permitted provided that the following conditions
122 * 1. Redistributions of source code must retain the above copyright
123 * notice, this list of conditions, and the following disclaimer,
124 * without modification.
125 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126 * substantially similar to the "NO WARRANTY" disclaimer below
127 * ("Disclaimer") and any redistribution must be conditioned upon
128 * including a substantially similar Disclaimer requirement for further
129 * binary redistribution.
130 * 3. Neither the names of the above-listed copyright holders nor the names
131 * of any contributors may be used to endorse or promote products derived
132 * from this software without specific prior written permission.
134 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
146 * Alternatively, you may choose to be licensed under the terms of the
147 * GNU General Public License ("GPL") version 2 as published by the Free
148 * Software Foundation.
150 *****************************************************************************/
153 #include "accommon.h"
154 #include "acdisasm.h"
157 #ifdef ACPI_DISASSEMBLER
159 #define _COMPONENT ACPI_CA_DEBUGGER
160 ACPI_MODULE_NAME ("dbresrcl2")
162 /* Local prototypes */
165 AcpiDmCsi2SerialBusDescriptor (
166 ACPI_OP_WALK_INFO
*Info
,
167 AML_RESOURCE
*Resource
,
172 AcpiDmI2cSerialBusDescriptor (
173 ACPI_OP_WALK_INFO
*Info
,
174 AML_RESOURCE
*Resource
,
179 AcpiDmSpiSerialBusDescriptor (
180 ACPI_OP_WALK_INFO
*Info
,
181 AML_RESOURCE
*Resource
,
186 AcpiDmUartSerialBusDescriptor (
187 ACPI_OP_WALK_INFO
*Info
,
188 AML_RESOURCE
*Resource
,
194 ACPI_OP_WALK_INFO
*Info
,
195 AML_RESOURCE
*Resource
,
199 AcpiDmDumpRawDataBuffer (
205 /* Dispatch table for the serial bus descriptors */
207 static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch
[] =
210 AcpiDmI2cSerialBusDescriptor
,
211 AcpiDmSpiSerialBusDescriptor
,
212 AcpiDmUartSerialBusDescriptor
,
213 AcpiDmCsi2SerialBusDescriptor
217 /*******************************************************************************
219 * FUNCTION: AcpiDmDumpRawDataBuffer
221 * PARAMETERS: Buffer - Pointer to the data bytes
222 * Length - Length of the descriptor in bytes
223 * Level - Current source code indentation level
227 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for
230 ******************************************************************************/
233 AcpiDmDumpRawDataBuffer (
248 AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length
);
251 AcpiDmIndent (Level
+ 1);
252 AcpiOsPrintf ("{\n");
253 AcpiDmIndent (Level
+ 2);
255 for (i
= 0; i
< Length
;)
257 for (j
= 0; j
< 8; j
++)
265 AcpiOsPrintf ("0x%2.2X", Buffer
[Index
]);
266 if ((Index
+ 1) >= Length
)
275 AcpiDmIndent (Level
+ 2);
282 AcpiDmIndent (Level
+ 1);
287 /*******************************************************************************
289 * FUNCTION: AcpiDmGpioCommon
291 * PARAMETERS: Info - Extra resource info
292 * Resource - Pointer to the resource descriptor
293 * Level - Current source code indentation level
297 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor
299 ******************************************************************************/
303 ACPI_OP_WALK_INFO
*Info
,
304 AML_RESOURCE
*Resource
,
309 char *DeviceName
= NULL
;
314 /* ResourceSource, ResourceSourceIndex, ResourceType */
316 AcpiDmIndent (Level
+ 1);
317 if (Resource
->Gpio
.ResSourceOffset
)
319 DeviceName
= ACPI_ADD_PTR (char,
320 Resource
, Resource
->Gpio
.ResSourceOffset
),
321 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
325 AcpiOsPrintf ("0x%2.2X, ", Resource
->Gpio
.ResSourceIndex
);
326 AcpiOsPrintf ("%s, ",
327 AcpiGbl_ConsumeDecode
[ACPI_GET_1BIT_FLAG (Resource
->Gpio
.Flags
)]);
329 /* Insert a descriptor name */
331 AcpiDmDescriptorName ();
334 /* Dump the vendor data */
336 if (Resource
->Gpio
.VendorOffset
)
339 AcpiDmIndent (Level
+ 1);
340 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
341 Resource
->Gpio
.VendorOffset
);
343 AcpiDmDumpRawDataBuffer (VendorData
,
344 Resource
->Gpio
.VendorLength
, Level
);
347 AcpiOsPrintf (")\n");
349 /* Dump the interrupt list */
351 AcpiDmIndent (Level
+ 1);
352 AcpiOsPrintf ("{ // Pin list\n");
354 PinCount
= ((UINT32
) (Resource
->Gpio
.ResSourceOffset
-
355 Resource
->Gpio
.PinTableOffset
)) /
358 PinList
= (UINT16
*) ACPI_ADD_PTR (char, Resource
,
359 Resource
->Gpio
.PinTableOffset
);
361 for (i
= 0; i
< PinCount
; i
++)
363 AcpiDmIndent (Level
+ 2);
364 AcpiOsPrintf ("0x%4.4X%s\n", PinList
[i
],
365 ((i
+ 1) < PinCount
) ? "," : "");
368 AcpiDmIndent (Level
+ 1);
369 AcpiOsPrintf ("}\n");
372 MpSaveGpioInfo (Info
->MappingOp
, Resource
,
373 PinCount
, PinList
, DeviceName
);
378 /*******************************************************************************
380 * FUNCTION: AcpiDmGpioIntDescriptor
382 * PARAMETERS: Info - Extra resource info
383 * Resource - Pointer to the resource descriptor
384 * Length - Length of the descriptor in bytes
385 * Level - Current source code indentation level
389 * DESCRIPTION: Decode a GPIO Interrupt descriptor
391 ******************************************************************************/
394 AcpiDmGpioIntDescriptor (
395 ACPI_OP_WALK_INFO
*Info
,
396 AML_RESOURCE
*Resource
,
401 /* Dump the GpioInt-specific portion of the descriptor */
403 /* EdgeLevel, ActiveLevel, Shared */
405 AcpiDmIndent (Level
);
406 AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
407 AcpiGbl_HeDecode
[ACPI_GET_1BIT_FLAG (Resource
->Gpio
.IntFlags
)],
408 AcpiGbl_LlDecode
[ACPI_EXTRACT_2BIT_FLAG (Resource
->Gpio
.IntFlags
, 1)],
409 AcpiGbl_ShrDecode
[ACPI_EXTRACT_2BIT_FLAG (Resource
->Gpio
.IntFlags
, 3)]);
411 /* PinConfig, DebounceTimeout */
413 if (Resource
->Gpio
.PinConfig
<= 3)
415 AcpiOsPrintf ("%s, ",
416 AcpiGbl_PpcDecode
[Resource
->Gpio
.PinConfig
]);
420 AcpiOsPrintf ("0x%2.2X, ", Resource
->Gpio
.PinConfig
);
422 AcpiOsPrintf ("0x%4.4X,\n", Resource
->Gpio
.DebounceTimeout
);
424 /* Dump the GpioInt/GpioIo common portion of the descriptor */
426 AcpiDmGpioCommon (Info
, Resource
, Level
);
430 /*******************************************************************************
432 * FUNCTION: AcpiDmGpioIoDescriptor
434 * PARAMETERS: Info - Extra resource info
435 * Resource - Pointer to the resource descriptor
436 * Length - Length of the descriptor in bytes
437 * Level - Current source code indentation level
441 * DESCRIPTION: Decode a GPIO I/O descriptor
443 ******************************************************************************/
446 AcpiDmGpioIoDescriptor (
447 ACPI_OP_WALK_INFO
*Info
,
448 AML_RESOURCE
*Resource
,
453 /* Dump the GpioIo-specific portion of the descriptor */
455 /* Shared, PinConfig */
457 AcpiDmIndent (Level
);
458 AcpiOsPrintf ("GpioIo (%s, ",
459 AcpiGbl_ShrDecode
[ACPI_EXTRACT_2BIT_FLAG (Resource
->Gpio
.IntFlags
, 3)]);
461 if (Resource
->Gpio
.PinConfig
<= 3)
463 AcpiOsPrintf ("%s, ",
464 AcpiGbl_PpcDecode
[Resource
->Gpio
.PinConfig
]);
468 AcpiOsPrintf ("0x%2.2X, ", Resource
->Gpio
.PinConfig
);
471 /* DebounceTimeout, DriveStrength, IoRestriction */
473 AcpiOsPrintf ("0x%4.4X, ", Resource
->Gpio
.DebounceTimeout
);
474 AcpiOsPrintf ("0x%4.4X, ", Resource
->Gpio
.DriveStrength
);
475 AcpiOsPrintf ("%s,\n",
476 AcpiGbl_IorDecode
[ACPI_GET_2BIT_FLAG (Resource
->Gpio
.IntFlags
)]);
478 /* Dump the GpioInt/GpioIo common portion of the descriptor */
480 AcpiDmGpioCommon (Info
, Resource
, Level
);
484 /*******************************************************************************
486 * FUNCTION: AcpiDmGpioDescriptor
488 * PARAMETERS: Info - Extra resource info
489 * Resource - Pointer to the resource descriptor
490 * Length - Length of the descriptor in bytes
491 * Level - Current source code indentation level
495 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor
497 ******************************************************************************/
500 AcpiDmGpioDescriptor (
501 ACPI_OP_WALK_INFO
*Info
,
502 AML_RESOURCE
*Resource
,
506 UINT8 ConnectionType
;
509 ConnectionType
= Resource
->Gpio
.ConnectionType
;
511 switch (ConnectionType
)
513 case AML_RESOURCE_GPIO_TYPE_INT
:
515 AcpiDmGpioIntDescriptor (Info
, Resource
, Length
, Level
);
518 case AML_RESOURCE_GPIO_TYPE_IO
:
520 AcpiDmGpioIoDescriptor (Info
, Resource
, Length
, Level
);
525 AcpiOsPrintf ("Unknown GPIO type\n");
530 /*******************************************************************************
532 * FUNCTION: AcpiDmPinFunctionDescriptor
534 * PARAMETERS: Info - Extra resource info
535 * Resource - Pointer to the resource descriptor
536 * Length - Length of the descriptor in bytes
537 * Level - Current source code indentation level
541 * DESCRIPTION: Decode a PinFunction descriptor
543 ******************************************************************************/
546 AcpiDmPinFunctionDescriptor (
547 ACPI_OP_WALK_INFO
*Info
,
548 AML_RESOURCE
*Resource
,
554 char *DeviceName
= NULL
;
558 AcpiDmIndent (Level
);
559 AcpiOsPrintf ("PinFunction (%s, ",
560 AcpiGbl_ShrDecode
[ACPI_GET_1BIT_FLAG (Resource
->PinFunction
.Flags
)]);
562 if (Resource
->PinFunction
.PinConfig
<= 3)
564 AcpiOsPrintf ("%s, ",
565 AcpiGbl_PpcDecode
[Resource
->PinFunction
.PinConfig
]);
569 AcpiOsPrintf ("0x%2.2X, ", Resource
->PinFunction
.PinConfig
);
574 AcpiOsPrintf ("0x%4.4X, ", Resource
->PinFunction
.FunctionNumber
);
576 if (Resource
->PinFunction
.ResSourceOffset
)
578 DeviceName
= ACPI_ADD_PTR (char,
579 Resource
, Resource
->PinFunction
.ResSourceOffset
),
580 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
584 AcpiOsPrintf ("0x%2.2X,\n", Resource
->PinFunction
.ResSourceIndex
);
586 AcpiDmIndent (Level
+ 1);
588 /* Always ResourceConsumer */
589 AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode
[ACPI_CONSUMER
]);
591 /* Insert a descriptor name */
593 AcpiDmDescriptorName ();
597 /* Dump the vendor data */
599 if (Resource
->PinFunction
.VendorLength
)
602 AcpiDmIndent (Level
+ 1);
603 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
604 Resource
->PinFunction
.VendorOffset
);
606 AcpiDmDumpRawDataBuffer (VendorData
,
607 Resource
->PinFunction
.VendorLength
, Level
);
610 AcpiOsPrintf (")\n");
612 AcpiDmIndent (Level
+ 1);
614 /* Dump the interrupt list */
616 AcpiOsPrintf ("{ // Pin list\n");
618 PinCount
= ((UINT32
) (Resource
->PinFunction
.ResSourceOffset
-
619 Resource
->PinFunction
.PinTableOffset
)) /
622 PinList
= (UINT16
*) ACPI_ADD_PTR (char, Resource
,
623 Resource
->PinFunction
.PinTableOffset
);
625 for (i
= 0; i
< PinCount
; i
++)
627 AcpiDmIndent (Level
+ 2);
628 AcpiOsPrintf ("0x%4.4X%s\n", PinList
[i
],
629 ((i
+ 1) < PinCount
) ? "," : "");
632 AcpiDmIndent (Level
+ 1);
633 AcpiOsPrintf ("}\n");
637 /*******************************************************************************
639 * FUNCTION: AcpiDmDumpSerialBusVendorData
641 * PARAMETERS: Resource - Pointer to the resource descriptor
645 * DESCRIPTION: Dump optional serial bus vendor data
647 ******************************************************************************/
650 AcpiDmDumpSerialBusVendorData (
651 AML_RESOURCE
*Resource
,
658 /* Get the (optional) vendor data and length */
660 switch (Resource
->CommonSerialBus
.Type
)
662 case AML_RESOURCE_I2C_SERIALBUSTYPE
:
664 VendorLength
= Resource
->CommonSerialBus
.TypeDataLength
-
665 AML_RESOURCE_I2C_MIN_DATA_LEN
;
667 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
668 sizeof (AML_RESOURCE_I2C_SERIALBUS
));
671 case AML_RESOURCE_SPI_SERIALBUSTYPE
:
673 VendorLength
= Resource
->CommonSerialBus
.TypeDataLength
-
674 AML_RESOURCE_SPI_MIN_DATA_LEN
;
676 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
677 sizeof (AML_RESOURCE_SPI_SERIALBUS
));
680 case AML_RESOURCE_UART_SERIALBUSTYPE
:
682 VendorLength
= Resource
->CommonSerialBus
.TypeDataLength
-
683 AML_RESOURCE_UART_MIN_DATA_LEN
;
685 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
686 sizeof (AML_RESOURCE_UART_SERIALBUS
));
689 case AML_RESOURCE_CSI2_SERIALBUSTYPE
:
691 VendorLength
= Resource
->CommonSerialBus
.TypeDataLength
-
692 AML_RESOURCE_CSI2_MIN_DATA_LEN
;
694 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
695 sizeof (AML_RESOURCE_CSI2_SERIALBUS
));
703 /* Dump the vendor bytes as a RawDataBuffer object */
705 AcpiDmDumpRawDataBuffer (VendorData
, VendorLength
, Level
);
709 /*******************************************************************************
711 * FUNCTION: AcpiDmCsi2SerialBusDescriptor
713 * PARAMETERS: Info - Extra resource info
714 * Resource - Pointer to the resource descriptor
715 * Length - Length of the descriptor in bytes
716 * Level - Current source code indentation level
720 * DESCRIPTION: Decode a CSI2 serial bus descriptor
722 ******************************************************************************/
725 AcpiDmCsi2SerialBusDescriptor (
726 ACPI_OP_WALK_INFO
*Info
,
727 AML_RESOURCE
*Resource
,
731 UINT32 ResourceSourceOffset
;
735 /* SlaveMode, PhyType, LocalPortInstance */
737 AcpiDmIndent (Level
);
738 AcpiOsPrintf ("Csi2Bus (%s,",
739 AcpiGbl_SmDecode
[ACPI_GET_1BIT_FLAG (Resource
->Csi2SerialBus
.Flags
)]);
741 AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",
742 Resource
->Csi2SerialBus
.TypeSpecificFlags
& 0x03,
743 Resource
->Csi2SerialBus
.TypeSpecificFlags
& 0xFC);
745 /* ResourceSource is a required field */
747 ResourceSourceOffset
= sizeof (AML_RESOURCE_COMMON_SERIALBUS
) +
748 Resource
->CommonSerialBus
.TypeDataLength
;
750 AcpiDmIndent (Level
+ 1);
751 DeviceName
= ACPI_ADD_PTR (char, Resource
, ResourceSourceOffset
);
752 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
754 /* ResourceSourceIndex, ResourceUsage */
756 AcpiOsPrintf (",\n");
757 AcpiDmIndent (Level
+ 1);
758 AcpiOsPrintf ("0x%2.2X, ", Resource
->Csi2SerialBus
.ResSourceIndex
);
760 AcpiOsPrintf ("%s, ",
761 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->Csi2SerialBus
.Flags
, 1)]);
763 /* Insert a descriptor name */
765 AcpiDmDescriptorName ();
767 /* Dump the vendor data */
769 AcpiOsPrintf (",\n");
770 AcpiDmIndent (Level
+ 1);
771 AcpiDmDumpSerialBusVendorData (Resource
, Level
);
772 AcpiOsPrintf (")\n");
775 MpSaveSerialInfo (Info
->MappingOp
, Resource
, DeviceName
);
780 /*******************************************************************************
782 * FUNCTION: AcpiDmI2cSerialBusDescriptor
784 * PARAMETERS: Info - Extra resource info
785 * Resource - Pointer to the resource descriptor
786 * Length - Length of the descriptor in bytes
787 * Level - Current source code indentation level
791 * DESCRIPTION: Decode a I2C serial bus descriptor
793 ******************************************************************************/
796 AcpiDmI2cSerialBusDescriptor (
797 ACPI_OP_WALK_INFO
*Info
,
798 AML_RESOURCE
*Resource
,
802 UINT32 ResourceSourceOffset
;
806 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
808 AcpiDmIndent (Level
);
809 AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
810 Resource
->I2cSerialBus
.SlaveAddress
,
811 AcpiGbl_SmDecode
[ACPI_GET_1BIT_FLAG (Resource
->I2cSerialBus
.Flags
)],
812 Resource
->I2cSerialBus
.ConnectionSpeed
);
814 AcpiDmIndent (Level
+ 1);
815 AcpiOsPrintf ("%s, ",
816 AcpiGbl_AmDecode
[ACPI_GET_1BIT_FLAG (Resource
->I2cSerialBus
.TypeSpecificFlags
)]);
818 /* ResourceSource is a required field */
820 ResourceSourceOffset
= sizeof (AML_RESOURCE_COMMON_SERIALBUS
) +
821 Resource
->CommonSerialBus
.TypeDataLength
;
823 DeviceName
= ACPI_ADD_PTR (char, Resource
, ResourceSourceOffset
);
824 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
826 /* ResourceSourceIndex, ResourceUsage */
828 AcpiOsPrintf (",\n");
829 AcpiDmIndent (Level
+ 1);
830 AcpiOsPrintf ("0x%2.2X, ", Resource
->I2cSerialBus
.ResSourceIndex
);
832 AcpiOsPrintf ("%s, ",
833 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->I2cSerialBus
.Flags
, 1)]);
835 /* Insert a descriptor name */
837 AcpiDmDescriptorName ();
841 AcpiOsPrintf (", %s,\n",
842 AcpiGbl_ShrDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->I2cSerialBus
.Flags
, 2)]);
844 /* Dump the vendor data */
846 AcpiDmIndent (Level
+ 1);
847 AcpiDmDumpSerialBusVendorData (Resource
, Level
);
848 AcpiOsPrintf (")\n");
851 MpSaveSerialInfo (Info
->MappingOp
, Resource
, DeviceName
);
856 /*******************************************************************************
858 * FUNCTION: AcpiDmSpiSerialBusDescriptor
860 * PARAMETERS: Info - Extra resource info
861 * Resource - Pointer to the resource descriptor
862 * Length - Length of the descriptor in bytes
863 * Level - Current source code indentation level
867 * DESCRIPTION: Decode a SPI serial bus descriptor
869 ******************************************************************************/
872 AcpiDmSpiSerialBusDescriptor (
873 ACPI_OP_WALK_INFO
*Info
,
874 AML_RESOURCE
*Resource
,
878 UINT32 ResourceSourceOffset
;
882 /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
884 AcpiDmIndent (Level
);
885 AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
886 Resource
->SpiSerialBus
.DeviceSelection
,
887 AcpiGbl_DpDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->SpiSerialBus
.TypeSpecificFlags
, 1)],
888 AcpiGbl_WmDecode
[ACPI_GET_1BIT_FLAG (Resource
->SpiSerialBus
.TypeSpecificFlags
)],
889 Resource
->SpiSerialBus
.DataBitLength
);
891 /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
893 AcpiDmIndent (Level
+ 1);
894 AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
895 AcpiGbl_SmDecode
[ACPI_GET_1BIT_FLAG (Resource
->SpiSerialBus
.Flags
)],
896 Resource
->SpiSerialBus
.ConnectionSpeed
,
897 AcpiGbl_CpoDecode
[ACPI_GET_1BIT_FLAG (Resource
->SpiSerialBus
.ClockPolarity
)]);
899 AcpiDmIndent (Level
+ 1);
900 AcpiOsPrintf ("%s, ",
901 AcpiGbl_CphDecode
[ACPI_GET_1BIT_FLAG (Resource
->SpiSerialBus
.ClockPhase
)]);
903 /* ResourceSource is a required field */
905 ResourceSourceOffset
= sizeof (AML_RESOURCE_COMMON_SERIALBUS
) +
906 Resource
->CommonSerialBus
.TypeDataLength
;
908 DeviceName
= ACPI_ADD_PTR (char, Resource
, ResourceSourceOffset
);
909 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
911 /* ResourceSourceIndex, ResourceUsage */
913 AcpiOsPrintf (",\n");
914 AcpiDmIndent (Level
+ 1);
915 AcpiOsPrintf ("0x%2.2X, ", Resource
->SpiSerialBus
.ResSourceIndex
);
917 AcpiOsPrintf ("%s, ",
918 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->SpiSerialBus
.Flags
, 1)]);
920 /* Insert a descriptor name */
922 AcpiDmDescriptorName ();
926 AcpiOsPrintf (", %s,\n",
927 AcpiGbl_ShrDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->SpiSerialBus
.Flags
, 2)]);
929 /* Dump the vendor data */
931 AcpiDmIndent (Level
+ 1);
932 AcpiDmDumpSerialBusVendorData (Resource
, Level
);
933 AcpiOsPrintf (")\n");
936 MpSaveSerialInfo (Info
->MappingOp
, Resource
, DeviceName
);
941 /*******************************************************************************
943 * FUNCTION: AcpiDmUartSerialBusDescriptor
945 * PARAMETERS: Info - Extra resource info
946 * Resource - Pointer to the resource descriptor
947 * Length - Length of the descriptor in bytes
948 * Level - Current source code indentation level
952 * DESCRIPTION: Decode a UART serial bus descriptor
954 ******************************************************************************/
957 AcpiDmUartSerialBusDescriptor (
958 ACPI_OP_WALK_INFO
*Info
,
959 AML_RESOURCE
*Resource
,
963 UINT32 ResourceSourceOffset
;
967 /* ConnectionSpeed, BitsPerByte, StopBits */
969 AcpiDmIndent (Level
);
970 AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
971 Resource
->UartSerialBus
.DefaultBaudRate
,
972 AcpiGbl_BpbDecode
[ACPI_EXTRACT_3BIT_FLAG (Resource
->UartSerialBus
.TypeSpecificFlags
, 4)],
973 AcpiGbl_SbDecode
[ACPI_EXTRACT_2BIT_FLAG (Resource
->UartSerialBus
.TypeSpecificFlags
, 2)]);
975 /* LinesInUse, IsBigEndian, Parity, FlowControl */
977 AcpiDmIndent (Level
+ 1);
978 AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",
979 Resource
->UartSerialBus
.LinesEnabled
,
980 AcpiGbl_EdDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->UartSerialBus
.TypeSpecificFlags
, 7)],
981 AcpiGbl_PtDecode
[ACPI_GET_3BIT_FLAG (Resource
->UartSerialBus
.Parity
)],
982 AcpiGbl_FcDecode
[ACPI_GET_2BIT_FLAG (Resource
->UartSerialBus
.TypeSpecificFlags
)]);
984 /* ReceiveBufferSize, TransmitBufferSize */
986 AcpiDmIndent (Level
+ 1);
987 AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
988 Resource
->UartSerialBus
.RxFifoSize
,
989 Resource
->UartSerialBus
.TxFifoSize
);
991 /* ResourceSource is a required field */
993 ResourceSourceOffset
= sizeof (AML_RESOURCE_COMMON_SERIALBUS
) +
994 Resource
->CommonSerialBus
.TypeDataLength
;
996 DeviceName
= ACPI_ADD_PTR (char, Resource
, ResourceSourceOffset
);
997 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
999 /* ResourceSourceIndex, ResourceUsage */
1001 AcpiOsPrintf (",\n");
1002 AcpiDmIndent (Level
+ 1);
1003 AcpiOsPrintf ("0x%2.2X, ", Resource
->UartSerialBus
.ResSourceIndex
);
1005 AcpiOsPrintf ("%s, ",
1006 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->UartSerialBus
.Flags
, 1)]);
1008 /* Insert a descriptor name */
1010 AcpiDmDescriptorName ();
1014 AcpiOsPrintf (", %s,\n",
1015 AcpiGbl_ShrDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->UartSerialBus
.Flags
, 2)]);
1017 /* Dump the vendor data */
1019 AcpiDmIndent (Level
+ 1);
1020 AcpiDmDumpSerialBusVendorData (Resource
, Level
);
1021 AcpiOsPrintf (")\n");
1024 MpSaveSerialInfo (Info
->MappingOp
, Resource
, DeviceName
);
1029 /*******************************************************************************
1031 * FUNCTION: AcpiDmSerialBusDescriptor
1033 * PARAMETERS: Info - Extra resource info
1034 * Resource - Pointer to the resource descriptor
1035 * Length - Length of the descriptor in bytes
1036 * Level - Current source code indentation level
1040 * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor
1042 ******************************************************************************/
1045 AcpiDmSerialBusDescriptor (
1046 ACPI_OP_WALK_INFO
*Info
,
1047 AML_RESOURCE
*Resource
,
1052 SerialBusResourceDispatch
[Resource
->CommonSerialBus
.Type
] (
1053 Info
, Resource
, Length
, Level
);
1056 /*******************************************************************************
1058 * FUNCTION: AcpiDmPinConfig
1060 * PARAMETERS: PinConfigType - Pin configuration type
1061 * PinConfigValue - Pin configuration value
1065 * DESCRIPTION: Pretty prints PinConfig type and value.
1067 ******************************************************************************/
1071 UINT8 PinConfigType
,
1072 UINT32 PinConfigValue
)
1074 if (PinConfigType
<= 13)
1076 AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType
,
1077 AcpiGbl_PtypDecode
[PinConfigType
]);
1081 AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType
);
1084 /* PinConfigValue */
1086 AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue
);
1089 /*******************************************************************************
1091 * FUNCTION: AcpiDmPinConfigDescriptor
1093 * PARAMETERS: Info - Extra resource info
1094 * Resource - Pointer to the resource descriptor
1095 * Length - Length of the descriptor in bytes
1096 * Level - Current source code indentation level
1100 * DESCRIPTION: Decode a PinConfig descriptor
1102 ******************************************************************************/
1105 AcpiDmPinConfigDescriptor (
1106 ACPI_OP_WALK_INFO
*Info
,
1107 AML_RESOURCE
*Resource
,
1113 char *DeviceName
= NULL
;
1117 AcpiDmIndent (Level
);
1118 AcpiOsPrintf ("PinConfig (%s, ",
1119 AcpiGbl_ShrDecode
[ACPI_GET_1BIT_FLAG (Resource
->PinConfig
.Flags
)]);
1121 AcpiDmPinConfig (Resource
->PinConfig
.PinConfigType
,
1122 Resource
->PinConfig
.PinConfigValue
);
1124 AcpiDmIndent (Level
+ 1);
1126 if (Resource
->PinConfig
.ResSourceOffset
)
1128 DeviceName
= ACPI_ADD_PTR (char,
1129 Resource
, Resource
->PinConfig
.ResSourceOffset
),
1130 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
1133 AcpiOsPrintf (", ");
1134 AcpiOsPrintf ("0x%2.2X, ", Resource
->PinConfig
.ResSourceIndex
);
1136 AcpiOsPrintf ("%s, ",
1137 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->PinConfig
.Flags
, 1)]);
1139 /* Insert a descriptor name */
1141 AcpiDmDescriptorName ();
1145 /* Dump the vendor data */
1147 if (Resource
->PinConfig
.VendorLength
)
1149 AcpiOsPrintf ("\n");
1150 AcpiDmIndent (Level
+ 1);
1151 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
1152 Resource
->PinConfig
.VendorOffset
);
1154 AcpiDmDumpRawDataBuffer (VendorData
,
1155 Resource
->PinConfig
.VendorLength
, Level
);
1158 AcpiOsPrintf (")\n");
1160 AcpiDmIndent (Level
+ 1);
1162 /* Dump the interrupt list */
1164 AcpiOsPrintf ("{ // Pin list\n");
1166 PinCount
= ((UINT32
) (Resource
->PinConfig
.ResSourceOffset
-
1167 Resource
->PinConfig
.PinTableOffset
)) /
1170 PinList
= (UINT16
*) ACPI_ADD_PTR (char, Resource
,
1171 Resource
->PinConfig
.PinTableOffset
);
1173 for (i
= 0; i
< PinCount
; i
++)
1175 AcpiDmIndent (Level
+ 2);
1176 AcpiOsPrintf ("0x%4.4X%s\n", PinList
[i
],
1177 ((i
+ 1) < PinCount
) ? "," : "");
1180 AcpiDmIndent (Level
+ 1);
1181 AcpiOsPrintf ("}\n");
1184 /*******************************************************************************
1186 * FUNCTION: AcpiDmPinGroupDescriptor
1188 * PARAMETERS: Info - Extra resource info
1189 * Resource - Pointer to the resource descriptor
1190 * Length - Length of the descriptor in bytes
1191 * Level - Current source code indentation level
1195 * DESCRIPTION: Decode a PinGroup descriptor
1197 ******************************************************************************/
1200 AcpiDmPinGroupDescriptor (
1201 ACPI_OP_WALK_INFO
*Info
,
1202 AML_RESOURCE
*Resource
,
1212 AcpiDmIndent (Level
);
1213 /* Always producer */
1214 AcpiOsPrintf ("PinGroup (");
1216 Label
= ACPI_ADD_PTR (char,
1217 Resource
, Resource
->PinGroup
.LabelOffset
),
1218 AcpiUtPrintString (Label
, ACPI_UINT16_MAX
);
1220 AcpiOsPrintf (", ");
1222 AcpiOsPrintf ("%s, ",
1223 AcpiGbl_ConsumeDecode
[ACPI_GET_1BIT_FLAG (Resource
->PinGroup
.Flags
)]);
1225 /* Insert a descriptor name */
1227 AcpiDmDescriptorName ();
1231 /* Dump the vendor data */
1233 if (Resource
->PinGroup
.VendorLength
)
1235 AcpiOsPrintf ("\n");
1236 AcpiDmIndent (Level
+ 1);
1237 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
1238 Resource
->PinGroup
.VendorOffset
);
1240 AcpiDmDumpRawDataBuffer (VendorData
,
1241 Resource
->PinGroup
.VendorLength
, Level
);
1244 AcpiOsPrintf (")\n");
1246 AcpiDmIndent (Level
+ 1);
1248 /* Dump the interrupt list */
1250 AcpiOsPrintf ("{ // Pin list\n");
1252 PinCount
= (Resource
->PinGroup
.LabelOffset
-
1253 Resource
->PinGroup
.PinTableOffset
) / sizeof (UINT16
);
1255 PinList
= (UINT16
*) ACPI_ADD_PTR (char, Resource
,
1256 Resource
->PinGroup
.PinTableOffset
);
1258 for (i
= 0; i
< PinCount
; i
++)
1260 AcpiDmIndent (Level
+ 2);
1261 AcpiOsPrintf ("0x%4.4X%s\n", PinList
[i
],
1262 ((i
+ 1) < PinCount
) ? "," : "");
1265 AcpiDmIndent (Level
+ 1);
1266 AcpiOsPrintf ("}\n");
1269 /*******************************************************************************
1271 * FUNCTION: AcpiDmPinGroupFunctionDescriptor
1273 * PARAMETERS: Info - Extra resource info
1274 * Resource - Pointer to the resource descriptor
1275 * Length - Length of the descriptor in bytes
1276 * Level - Current source code indentation level
1280 * DESCRIPTION: Decode a PinGroupFunction descriptor
1282 ******************************************************************************/
1285 AcpiDmPinGroupFunctionDescriptor (
1286 ACPI_OP_WALK_INFO
*Info
,
1287 AML_RESOURCE
*Resource
,
1292 char *DeviceName
= NULL
;
1295 AcpiDmIndent (Level
);
1296 AcpiOsPrintf ("PinGroupFunction (%s, ",
1297 AcpiGbl_ShrDecode
[ACPI_GET_1BIT_FLAG (Resource
->PinGroupFunction
.Flags
)]);
1299 /* FunctionNumber */
1301 AcpiOsPrintf ("0x%4.4X, ", Resource
->PinGroupFunction
.FunctionNumber
);
1303 DeviceName
= ACPI_ADD_PTR (char,
1304 Resource
, Resource
->PinGroupFunction
.ResSourceOffset
),
1305 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
1307 AcpiOsPrintf (", ");
1308 AcpiOsPrintf ("0x%2.2X,\n", Resource
->PinGroupFunction
.ResSourceIndex
);
1310 AcpiDmIndent (Level
+ 1);
1312 Label
= ACPI_ADD_PTR (char, Resource
,
1313 Resource
->PinGroupFunction
.ResSourceLabelOffset
);
1314 AcpiUtPrintString (Label
, ACPI_UINT16_MAX
);
1316 AcpiOsPrintf (", ");
1318 AcpiOsPrintf ("%s, ",
1319 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->PinGroupFunction
.Flags
, 1)]);
1321 /* Insert a descriptor name */
1323 AcpiDmDescriptorName ();
1327 /* Dump the vendor data */
1329 if (Resource
->PinGroupFunction
.VendorLength
)
1331 AcpiOsPrintf ("\n");
1332 AcpiDmIndent (Level
+ 1);
1333 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
1334 Resource
->PinGroupFunction
.VendorOffset
);
1336 AcpiDmDumpRawDataBuffer (VendorData
,
1337 Resource
->PinGroupFunction
.VendorLength
, Level
);
1340 AcpiOsPrintf (")\n");
1343 /*******************************************************************************
1345 * FUNCTION: AcpiDmPinGroupConfigDescriptor
1347 * PARAMETERS: Info - Extra resource info
1348 * Resource - Pointer to the resource descriptor
1349 * Length - Length of the descriptor in bytes
1350 * Level - Current source code indentation level
1354 * DESCRIPTION: Decode a PinGroupConfig descriptor
1356 ******************************************************************************/
1359 AcpiDmPinGroupConfigDescriptor (
1360 ACPI_OP_WALK_INFO
*Info
,
1361 AML_RESOURCE
*Resource
,
1366 char *DeviceName
= NULL
;
1369 AcpiDmIndent (Level
);
1370 AcpiOsPrintf ("PinGroupConfig (%s, ",
1371 AcpiGbl_ShrDecode
[ACPI_GET_1BIT_FLAG (Resource
->PinGroupConfig
.Flags
)]);
1373 AcpiDmPinConfig(Resource
->PinGroupConfig
.PinConfigType
,
1374 Resource
->PinGroupConfig
.PinConfigValue
);
1376 AcpiDmIndent (Level
+ 1);
1378 DeviceName
= ACPI_ADD_PTR (char,
1379 Resource
, Resource
->PinGroupConfig
.ResSourceOffset
),
1380 AcpiUtPrintString (DeviceName
, ACPI_UINT16_MAX
);
1382 AcpiOsPrintf (", ");
1383 AcpiOsPrintf ("0x%2.2X, ", Resource
->PinGroupConfig
.ResSourceIndex
);
1385 Label
= ACPI_ADD_PTR (char, Resource
,
1386 Resource
->PinGroupConfig
.ResSourceLabelOffset
);
1387 AcpiUtPrintString (Label
, ACPI_UINT16_MAX
);
1389 AcpiOsPrintf (", ");
1391 AcpiOsPrintf ("%s, ",
1392 AcpiGbl_ConsumeDecode
[ACPI_EXTRACT_1BIT_FLAG (Resource
->PinGroupConfig
.Flags
, 1)]);
1394 /* Insert a descriptor name */
1396 AcpiDmDescriptorName ();
1400 /* Dump the vendor data */
1402 if (Resource
->PinGroupConfig
.VendorLength
)
1404 AcpiOsPrintf ("\n");
1405 AcpiDmIndent (Level
+ 1);
1406 VendorData
= ACPI_ADD_PTR (UINT8
, Resource
,
1407 Resource
->PinGroupConfig
.VendorOffset
);
1409 AcpiDmDumpRawDataBuffer (VendorData
,
1410 Resource
->PinGroupConfig
.VendorLength
, Level
);
1413 AcpiOsPrintf (")\n");