| /******************************************************************************* |
| * |
| * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2) |
| * |
| ******************************************************************************/ |
| |
| /* |
| * Copyright (C) 2000 - 2015, Intel Corp. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions, and the following disclaimer, |
| * without modification. |
| * 2. Redistributions in binary form must reproduce at minimum a disclaimer |
| * substantially similar to the "NO WARRANTY" disclaimer below |
| * ("Disclaimer") and any redistribution must be conditioned upon |
| * including a substantially similar Disclaimer requirement for further |
| * binary redistribution. |
| * 3. Neither the names of the above-listed copyright holders nor the names |
| * of any contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * Alternatively, this software may be distributed under the terms of the |
| * GNU General Public License ("GPL") version 2 as published by the Free |
| * Software Foundation. |
| * |
| * NO WARRANTY |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
| * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGES. |
| */ |
| |
| #include <contrib/dev/acpica/include/acpi.h> |
| #include <contrib/dev/acpica/include/accommon.h> |
| #include <contrib/dev/acpica/include/acdisasm.h> |
| |
| |
| #define _COMPONENT ACPI_CA_DEBUGGER |
| ACPI_MODULE_NAME ("dbresrcl2") |
| |
| /* Local prototypes */ |
| |
| static void |
| AcpiDmI2cSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level); |
| |
| static void |
| AcpiDmSpiSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level); |
| |
| static void |
| AcpiDmUartSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level); |
| |
| static void |
| AcpiDmGpioCommon ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Level); |
| |
| static void |
| AcpiDmDumpRawDataBuffer ( |
| UINT8 *Buffer, |
| UINT32 Length, |
| UINT32 Level); |
| |
| |
| /* Dispatch table for the serial bus descriptors */ |
| |
| static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] = |
| { |
| NULL, |
| AcpiDmI2cSerialBusDescriptor, |
| AcpiDmSpiSerialBusDescriptor, |
| AcpiDmUartSerialBusDescriptor |
| }; |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmDumpRawDataBuffer |
| * |
| * PARAMETERS: Buffer - Pointer to the data bytes |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for |
| * vendor data bytes. |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmDumpRawDataBuffer ( |
| UINT8 *Buffer, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| UINT32 Index; |
| UINT32 i; |
| UINT32 j; |
| |
| |
| if (!Length) |
| { |
| return; |
| } |
| |
| AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length); |
| |
| AcpiOsPrintf ("\n"); |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("{\n"); |
| AcpiDmIndent (Level + 2); |
| |
| for (i = 0; i < Length;) |
| { |
| for (j = 0; j < 8; j++) |
| { |
| Index = i + j; |
| if (Index >= Length) |
| { |
| goto Finish; |
| } |
| |
| AcpiOsPrintf ("0x%2.2X", Buffer[Index]); |
| if ((Index + 1) >= Length) |
| { |
| goto Finish; |
| } |
| |
| AcpiOsPrintf (", "); |
| } |
| AcpiOsPrintf ("\n"); |
| AcpiDmIndent (Level + 2); |
| |
| i += 8; |
| } |
| |
| Finish: |
| AcpiOsPrintf ("\n"); |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("}"); |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmGpioCommon |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmGpioCommon ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Level) |
| { |
| UINT16 *PinList; |
| UINT8 *VendorData; |
| char *DeviceName = NULL; |
| UINT32 PinCount; |
| UINT32 i; |
| |
| |
| /* ResourceSource, ResourceSourceIndex, ResourceType */ |
| |
| AcpiDmIndent (Level + 1); |
| if (Resource->Gpio.ResSourceOffset) |
| { |
| DeviceName = ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset), |
| AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); |
| } |
| |
| AcpiOsPrintf (", "); |
| AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex); |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]); |
| |
| /* Insert a descriptor name */ |
| |
| AcpiDmDescriptorName (); |
| AcpiOsPrintf (","); |
| |
| /* Dump the vendor data */ |
| |
| if (Resource->Gpio.VendorOffset) |
| { |
| AcpiOsPrintf ("\n"); |
| AcpiDmIndent (Level + 1); |
| VendorData = ACPI_ADD_PTR (UINT8, Resource, |
| Resource->Gpio.VendorOffset); |
| |
| AcpiDmDumpRawDataBuffer (VendorData, |
| Resource->Gpio.VendorLength, Level); |
| } |
| |
| AcpiOsPrintf (")\n"); |
| |
| /* Dump the interrupt list */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("{ // Pin list\n"); |
| |
| PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset - |
| Resource->Gpio.PinTableOffset)) / |
| sizeof (UINT16); |
| |
| PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, |
| Resource->Gpio.PinTableOffset); |
| |
| for (i = 0; i < PinCount; i++) |
| { |
| AcpiDmIndent (Level + 2); |
| AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); |
| } |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("}\n"); |
| |
| #ifndef _KERNEL |
| MpSaveGpioInfo (Info->MappingOp, Resource, PinCount, PinList, DeviceName); |
| #endif |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmGpioIntDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a GPIO Interrupt descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmGpioIntDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| |
| /* Dump the GpioInt-specific portion of the descriptor */ |
| |
| /* EdgeLevel, ActiveLevel, Shared */ |
| |
| AcpiDmIndent (Level); |
| AcpiOsPrintf ("GpioInt (%s, %s, %s, ", |
| AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)], |
| AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)], |
| AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); |
| |
| /* PinConfig, DebounceTimeout */ |
| |
| if (Resource->Gpio.PinConfig <= 3) |
| { |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); |
| } |
| else |
| { |
| AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); |
| } |
| AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout); |
| |
| /* Dump the GpioInt/GpioIo common portion of the descriptor */ |
| |
| AcpiDmGpioCommon (Info, Resource, Level); |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmGpioIoDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a GPIO I/O descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmGpioIoDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| |
| /* Dump the GpioIo-specific portion of the descriptor */ |
| |
| /* Shared, PinConfig */ |
| |
| AcpiDmIndent (Level); |
| AcpiOsPrintf ("GpioIo (%s, ", |
| AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); |
| |
| if (Resource->Gpio.PinConfig <= 3) |
| { |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); |
| } |
| else |
| { |
| AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); |
| } |
| |
| /* DebounceTimeout, DriveStrength, IoRestriction */ |
| |
| AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout); |
| AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength); |
| AcpiOsPrintf ("%s,\n", |
| AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]); |
| |
| /* Dump the GpioInt/GpioIo common portion of the descriptor */ |
| |
| AcpiDmGpioCommon (Info, Resource, Level); |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmGpioDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor |
| * |
| ******************************************************************************/ |
| |
| void |
| AcpiDmGpioDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| UINT8 ConnectionType; |
| |
| |
| ConnectionType = Resource->Gpio.ConnectionType; |
| |
| switch (ConnectionType) |
| { |
| case AML_RESOURCE_GPIO_TYPE_INT: |
| |
| AcpiDmGpioIntDescriptor (Info, Resource, Length, Level); |
| break; |
| |
| case AML_RESOURCE_GPIO_TYPE_IO: |
| |
| AcpiDmGpioIoDescriptor (Info, Resource, Length, Level); |
| break; |
| |
| default: |
| |
| AcpiOsPrintf ("Unknown GPIO type\n"); |
| break; |
| } |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmDumpSerialBusVendorData |
| * |
| * PARAMETERS: Resource - Pointer to the resource descriptor |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Dump optional serial bus vendor data |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmDumpSerialBusVendorData ( |
| AML_RESOURCE *Resource, |
| UINT32 Level) |
| { |
| UINT8 *VendorData; |
| UINT32 VendorLength; |
| |
| |
| /* Get the (optional) vendor data and length */ |
| |
| switch (Resource->CommonSerialBus.Type) |
| { |
| case AML_RESOURCE_I2C_SERIALBUSTYPE: |
| |
| VendorLength = Resource->CommonSerialBus.TypeDataLength - |
| AML_RESOURCE_I2C_MIN_DATA_LEN; |
| |
| VendorData = ACPI_ADD_PTR (UINT8, Resource, |
| sizeof (AML_RESOURCE_I2C_SERIALBUS)); |
| break; |
| |
| case AML_RESOURCE_SPI_SERIALBUSTYPE: |
| |
| VendorLength = Resource->CommonSerialBus.TypeDataLength - |
| AML_RESOURCE_SPI_MIN_DATA_LEN; |
| |
| VendorData = ACPI_ADD_PTR (UINT8, Resource, |
| sizeof (AML_RESOURCE_SPI_SERIALBUS)); |
| break; |
| |
| case AML_RESOURCE_UART_SERIALBUSTYPE: |
| |
| VendorLength = Resource->CommonSerialBus.TypeDataLength - |
| AML_RESOURCE_UART_MIN_DATA_LEN; |
| |
| VendorData = ACPI_ADD_PTR (UINT8, Resource, |
| sizeof (AML_RESOURCE_UART_SERIALBUS)); |
| break; |
| |
| default: |
| |
| return; |
| } |
| |
| /* Dump the vendor bytes as a RawDataBuffer object */ |
| |
| AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmI2cSerialBusDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a I2C serial bus descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmI2cSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| UINT32 ResourceSourceOffset; |
| char *DeviceName; |
| |
| |
| /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */ |
| |
| AcpiDmIndent (Level); |
| AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n", |
| Resource->I2cSerialBus.SlaveAddress, |
| AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)], |
| Resource->I2cSerialBus.ConnectionSpeed); |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]); |
| |
| /* ResourceSource is a required field */ |
| |
| ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + |
| Resource->CommonSerialBus.TypeDataLength; |
| |
| DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), |
| AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); |
| |
| /* ResourceSourceIndex, ResourceUsage */ |
| |
| AcpiOsPrintf (",\n"); |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex); |
| |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]); |
| |
| /* Insert a descriptor name */ |
| |
| AcpiDmDescriptorName (); |
| AcpiOsPrintf (",\n"); |
| |
| /* Dump the vendor data */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiDmDumpSerialBusVendorData (Resource, Level); |
| AcpiOsPrintf (")\n"); |
| |
| #ifndef _KERNEL |
| MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); |
| #endif |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmSpiSerialBusDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a SPI serial bus descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmSpiSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| UINT32 ResourceSourceOffset; |
| char *DeviceName; |
| |
| |
| /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */ |
| |
| AcpiDmIndent (Level); |
| AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n", |
| Resource->SpiSerialBus.DeviceSelection, |
| AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)], |
| AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)], |
| Resource->SpiSerialBus.DataBitLength); |
| |
| /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("%s, 0x%8.8X, %s,\n", |
| AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)], |
| Resource->SpiSerialBus.ConnectionSpeed, |
| AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]); |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]); |
| |
| /* ResourceSource is a required field */ |
| |
| ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + |
| Resource->CommonSerialBus.TypeDataLength; |
| |
| DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), |
| AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); |
| |
| /* ResourceSourceIndex, ResourceUsage */ |
| |
| AcpiOsPrintf (",\n"); |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex); |
| |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]); |
| |
| /* Insert a descriptor name */ |
| |
| AcpiDmDescriptorName (); |
| AcpiOsPrintf (",\n"); |
| |
| /* Dump the vendor data */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiDmDumpSerialBusVendorData (Resource, Level); |
| AcpiOsPrintf (")\n"); |
| |
| #ifndef _KERNEL |
| MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); |
| #endif |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmUartSerialBusDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a UART serial bus descriptor |
| * |
| ******************************************************************************/ |
| |
| static void |
| AcpiDmUartSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| UINT32 ResourceSourceOffset; |
| char *DeviceName; |
| |
| |
| /* ConnectionSpeed, BitsPerByte, StopBits */ |
| |
| AcpiDmIndent (Level); |
| AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n", |
| Resource->UartSerialBus.DefaultBaudRate, |
| AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)], |
| AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]); |
| |
| /* LinesInUse, IsBigEndian, Parity, FlowControl */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n", |
| Resource->UartSerialBus.LinesEnabled, |
| AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)], |
| AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)], |
| AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]); |
| |
| /* ReceiveBufferSize, TransmitBufferSize */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ", |
| Resource->UartSerialBus.RxFifoSize, |
| Resource->UartSerialBus.TxFifoSize); |
| |
| /* ResourceSource is a required field */ |
| |
| ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + |
| Resource->CommonSerialBus.TypeDataLength; |
| |
| DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), |
| AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); |
| |
| /* ResourceSourceIndex, ResourceUsage */ |
| |
| AcpiOsPrintf (",\n"); |
| AcpiDmIndent (Level + 1); |
| AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex); |
| |
| AcpiOsPrintf ("%s, ", |
| AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]); |
| |
| /* Insert a descriptor name */ |
| |
| AcpiDmDescriptorName (); |
| AcpiOsPrintf (",\n"); |
| |
| /* Dump the vendor data */ |
| |
| AcpiDmIndent (Level + 1); |
| AcpiDmDumpSerialBusVendorData (Resource, Level); |
| AcpiOsPrintf (")\n"); |
| |
| #ifndef _KERNEL |
| MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); |
| #endif |
| } |
| |
| |
| /******************************************************************************* |
| * |
| * FUNCTION: AcpiDmSerialBusDescriptor |
| * |
| * PARAMETERS: Info - Extra resource info |
| * Resource - Pointer to the resource descriptor |
| * Length - Length of the descriptor in bytes |
| * Level - Current source code indentation level |
| * |
| * RETURN: None |
| * |
| * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor |
| * |
| ******************************************************************************/ |
| |
| void |
| AcpiDmSerialBusDescriptor ( |
| ACPI_OP_WALK_INFO *Info, |
| AML_RESOURCE *Resource, |
| UINT32 Length, |
| UINT32 Level) |
| { |
| |
| SerialBusResourceDispatch [Resource->CommonSerialBus.Type] ( |
| Info, Resource, Length, Level); |
| } |