Path: blob/main/sys/contrib/dev/acpica/components/disassembler/dmresrcl2.c
48524 views
/*******************************************************************************1*2* Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2)3*4******************************************************************************/56/******************************************************************************7*8* 1. Copyright Notice9*10* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.11* All rights reserved.12*13* 2. License14*15* 2.1. This is your license from Intel Corp. under its intellectual property16* rights. You may have additional license terms from the party that provided17* you this software, covering your right to use that party's intellectual18* property rights.19*20* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a21* copy of the source code appearing in this file ("Covered Code") an22* irrevocable, perpetual, worldwide license under Intel's copyrights in the23* base code distributed originally by Intel ("Original Intel Code") to copy,24* make derivatives, distribute, use and display any portion of the Covered25* Code in any form, with the right to sublicense such rights; and26*27* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent28* license (with the right to sublicense), under only those claims of Intel29* patents that are infringed by the Original Intel Code, to make, use, sell,30* offer to sell, and import the Covered Code and derivative works thereof31* solely to the minimum extent necessary to exercise the above copyright32* license, and in no event shall the patent license extend to any additions33* to or modifications of the Original Intel Code. No other license or right34* is granted directly or by implication, estoppel or otherwise;35*36* The above copyright and patent license is granted only if the following37* conditions are met:38*39* 3. Conditions40*41* 3.1. Redistribution of Source with Rights to Further Distribute Source.42* Redistribution of source code of any substantial portion of the Covered43* Code or modification with rights to further distribute source must include44* the above Copyright Notice, the above License, this list of Conditions,45* and the following Disclaimer and Export Compliance provision. In addition,46* Licensee must cause all Covered Code to which Licensee contributes to47* contain a file documenting the changes Licensee made to create that Covered48* Code and the date of any change. Licensee must include in that file the49* documentation of any changes made by any predecessor Licensee. Licensee50* must include a prominent statement that the modification is derived,51* directly or indirectly, from Original Intel Code.52*53* 3.2. Redistribution of Source with no Rights to Further Distribute Source.54* Redistribution of source code of any substantial portion of the Covered55* Code or modification without rights to further distribute source must56* include the following Disclaimer and Export Compliance provision in the57* documentation and/or other materials provided with distribution. In58* addition, Licensee may not authorize further sublicense of source of any59* portion of the Covered Code, and must include terms to the effect that the60* license from Licensee to its licensee is limited to the intellectual61* property embodied in the software Licensee provides to its licensee, and62* not to intellectual property embodied in modifications its licensee may63* make.64*65* 3.3. Redistribution of Executable. Redistribution in executable form of any66* substantial portion of the Covered Code or modification must reproduce the67* above Copyright Notice, and the following Disclaimer and Export Compliance68* provision in the documentation and/or other materials provided with the69* distribution.70*71* 3.4. Intel retains all right, title, and interest in and to the Original72* Intel Code.73*74* 3.5. Neither the name Intel nor any other trademark owned or controlled by75* Intel shall be used in advertising or otherwise to promote the sale, use or76* other dealings in products derived from or relating to the Covered Code77* without prior written authorization from Intel.78*79* 4. Disclaimer and Export Compliance80*81* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED82* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE83* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,84* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY85* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY86* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A87* PARTICULAR PURPOSE.88*89* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES90* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR91* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,92* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY93* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL94* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS95* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY96* LIMITED REMEDY.97*98* 4.3. Licensee shall not export, either directly or indirectly, any of this99* software or system incorporating such software without first obtaining any100* required license or other approval from the U. S. Department of Commerce or101* any other agency or department of the United States Government. In the102* event Licensee exports any such software from the United States or103* re-exports any such software from a foreign destination, Licensee shall104* ensure that the distribution and export/re-export of the software is in105* compliance with all laws, regulations, orders, or other restrictions of the106* U.S. Export Administration Regulations. Licensee agrees that neither it nor107* any of its subsidiaries will export/re-export any technical data, process,108* software, or service, directly or indirectly, to any country for which the109* United States government or any agency thereof requires an export license,110* other governmental approval, or letter of assurance, without first obtaining111* such license, approval or letter.112*113*****************************************************************************114*115* Alternatively, you may choose to be licensed under the terms of the116* following license:117*118* Redistribution and use in source and binary forms, with or without119* modification, are permitted provided that the following conditions120* are met:121* 1. Redistributions of source code must retain the above copyright122* notice, this list of conditions, and the following disclaimer,123* without modification.124* 2. Redistributions in binary form must reproduce at minimum a disclaimer125* substantially similar to the "NO WARRANTY" disclaimer below126* ("Disclaimer") and any redistribution must be conditioned upon127* including a substantially similar Disclaimer requirement for further128* binary redistribution.129* 3. Neither the names of the above-listed copyright holders nor the names130* of any contributors may be used to endorse or promote products derived131* from this software without specific prior written permission.132*133* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS134* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT135* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR136* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT137* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,138* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT139* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,140* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY141* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT142* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE143* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.144*145* Alternatively, you may choose to be licensed under the terms of the146* GNU General Public License ("GPL") version 2 as published by the Free147* Software Foundation.148*149*****************************************************************************/150151#include <contrib/dev/acpica/include/acpi.h>152#include <contrib/dev/acpica/include/accommon.h>153#include <contrib/dev/acpica/include/acdisasm.h>154155156#define _COMPONENT ACPI_CA_DEBUGGER157ACPI_MODULE_NAME ("dbresrcl2")158159/* Local prototypes */160161static void162AcpiDmCsi2SerialBusDescriptor (163ACPI_OP_WALK_INFO *Info,164AML_RESOURCE *Resource,165UINT32 Length,166UINT32 Level);167168static void169AcpiDmI2cSerialBusDescriptor (170ACPI_OP_WALK_INFO *Info,171AML_RESOURCE *Resource,172UINT32 Length,173UINT32 Level);174175static void176AcpiDmSpiSerialBusDescriptor (177ACPI_OP_WALK_INFO *Info,178AML_RESOURCE *Resource,179UINT32 Length,180UINT32 Level);181182static void183AcpiDmUartSerialBusDescriptor (184ACPI_OP_WALK_INFO *Info,185AML_RESOURCE *Resource,186UINT32 Length,187UINT32 Level);188189static void190AcpiDmGpioCommon (191ACPI_OP_WALK_INFO *Info,192AML_RESOURCE *Resource,193UINT32 Level);194195static void196AcpiDmDumpRawDataBuffer (197UINT8 *Buffer,198UINT32 Length,199UINT32 Level);200201202/* Dispatch table for the serial bus descriptors */203204static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] =205{206NULL,207AcpiDmI2cSerialBusDescriptor,208AcpiDmSpiSerialBusDescriptor,209AcpiDmUartSerialBusDescriptor,210AcpiDmCsi2SerialBusDescriptor211};212213214/*******************************************************************************215*216* FUNCTION: AcpiDmDumpRawDataBuffer217*218* PARAMETERS: Buffer - Pointer to the data bytes219* Length - Length of the descriptor in bytes220* Level - Current source code indentation level221*222* RETURN: None223*224* DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for225* vendor data bytes.226*227******************************************************************************/228229static void230AcpiDmDumpRawDataBuffer (231UINT8 *Buffer,232UINT32 Length,233UINT32 Level)234{235UINT32 Index;236UINT32 i;237UINT32 j;238239240if (!Length)241{242return;243}244245AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length);246247AcpiOsPrintf ("\n");248AcpiDmIndent (Level + 1);249AcpiOsPrintf ("{\n");250AcpiDmIndent (Level + 2);251252for (i = 0; i < Length;)253{254for (j = 0; j < 8; j++)255{256Index = i + j;257if (Index >= Length)258{259goto Finish;260}261262AcpiOsPrintf ("0x%2.2X", Buffer[Index]);263if ((Index + 1) >= Length)264{265goto Finish;266}267268AcpiOsPrintf (", ");269}270271AcpiOsPrintf ("\n");272AcpiDmIndent (Level + 2);273274i += 8;275}276277Finish:278AcpiOsPrintf ("\n");279AcpiDmIndent (Level + 1);280AcpiOsPrintf ("}");281}282283284/*******************************************************************************285*286* FUNCTION: AcpiDmGpioCommon287*288* PARAMETERS: Info - Extra resource info289* Resource - Pointer to the resource descriptor290* Level - Current source code indentation level291*292* RETURN: None293*294* DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor295*296******************************************************************************/297298static void299AcpiDmGpioCommon (300ACPI_OP_WALK_INFO *Info,301AML_RESOURCE *Resource,302UINT32 Level)303{304UINT16 *PinList;305UINT8 *VendorData;306char *DeviceName = NULL;307UINT32 PinCount;308UINT32 i;309310311/* ResourceSource, ResourceSourceIndex, ResourceType */312313AcpiDmIndent (Level + 1);314if (Resource->Gpio.ResSourceOffset)315{316DeviceName = ACPI_ADD_PTR (char,317Resource, Resource->Gpio.ResSourceOffset),318AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);319}320321AcpiOsPrintf (", ");322AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);323AcpiOsPrintf ("%s, ",324AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);325326/* Insert a descriptor name */327328AcpiDmDescriptorName ();329AcpiOsPrintf (",");330331/* Dump the vendor data */332333if (Resource->Gpio.VendorOffset)334{335AcpiOsPrintf ("\n");336AcpiDmIndent (Level + 1);337VendorData = ACPI_ADD_PTR (UINT8, Resource,338Resource->Gpio.VendorOffset);339340AcpiDmDumpRawDataBuffer (VendorData,341Resource->Gpio.VendorLength, Level);342}343344AcpiOsPrintf (")\n");345346/* Dump the interrupt list */347348AcpiDmIndent (Level + 1);349AcpiOsPrintf ("{ // Pin list\n");350351PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -352Resource->Gpio.PinTableOffset)) /353sizeof (UINT16);354355PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,356Resource->Gpio.PinTableOffset);357358for (i = 0; i < PinCount; i++)359{360AcpiDmIndent (Level + 2);361AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],362((i + 1) < PinCount) ? "," : "");363}364365AcpiDmIndent (Level + 1);366AcpiOsPrintf ("}\n");367368#ifndef _KERNEL369MpSaveGpioInfo (Info->MappingOp, Resource,370PinCount, PinList, DeviceName);371#endif372}373374375/*******************************************************************************376*377* FUNCTION: AcpiDmGpioIntDescriptor378*379* PARAMETERS: Info - Extra resource info380* Resource - Pointer to the resource descriptor381* Length - Length of the descriptor in bytes382* Level - Current source code indentation level383*384* RETURN: None385*386* DESCRIPTION: Decode a GPIO Interrupt descriptor387*388******************************************************************************/389390static void391AcpiDmGpioIntDescriptor (392ACPI_OP_WALK_INFO *Info,393AML_RESOURCE *Resource,394UINT32 Length,395UINT32 Level)396{397398/* Dump the GpioInt-specific portion of the descriptor */399400/* EdgeLevel, ActiveLevel, Shared */401402AcpiDmIndent (Level);403AcpiOsPrintf ("GpioInt (%s, %s, %s, ",404AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],405AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],406AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);407408/* PinConfig, DebounceTimeout */409410if (Resource->Gpio.PinConfig <= 3)411{412AcpiOsPrintf ("%s, ",413AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);414}415else416{417AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);418}419AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);420421/* Dump the GpioInt/GpioIo common portion of the descriptor */422423AcpiDmGpioCommon (Info, Resource, Level);424}425426427/*******************************************************************************428*429* FUNCTION: AcpiDmGpioIoDescriptor430*431* PARAMETERS: Info - Extra resource info432* Resource - Pointer to the resource descriptor433* Length - Length of the descriptor in bytes434* Level - Current source code indentation level435*436* RETURN: None437*438* DESCRIPTION: Decode a GPIO I/O descriptor439*440******************************************************************************/441442static void443AcpiDmGpioIoDescriptor (444ACPI_OP_WALK_INFO *Info,445AML_RESOURCE *Resource,446UINT32 Length,447UINT32 Level)448{449450/* Dump the GpioIo-specific portion of the descriptor */451452/* Shared, PinConfig */453454AcpiDmIndent (Level);455AcpiOsPrintf ("GpioIo (%s, ",456AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);457458if (Resource->Gpio.PinConfig <= 3)459{460AcpiOsPrintf ("%s, ",461AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]);462}463else464{465AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);466}467468/* DebounceTimeout, DriveStrength, IoRestriction */469470AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);471AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);472AcpiOsPrintf ("%s,\n",473AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);474475/* Dump the GpioInt/GpioIo common portion of the descriptor */476477AcpiDmGpioCommon (Info, Resource, Level);478}479480481/*******************************************************************************482*483* FUNCTION: AcpiDmGpioDescriptor484*485* PARAMETERS: Info - Extra resource info486* Resource - Pointer to the resource descriptor487* Length - Length of the descriptor in bytes488* Level - Current source code indentation level489*490* RETURN: None491*492* DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor493*494******************************************************************************/495496void497AcpiDmGpioDescriptor (498ACPI_OP_WALK_INFO *Info,499AML_RESOURCE *Resource,500UINT32 Length,501UINT32 Level)502{503UINT8 ConnectionType;504505506ConnectionType = Resource->Gpio.ConnectionType;507508switch (ConnectionType)509{510case AML_RESOURCE_GPIO_TYPE_INT:511512AcpiDmGpioIntDescriptor (Info, Resource, Length, Level);513break;514515case AML_RESOURCE_GPIO_TYPE_IO:516517AcpiDmGpioIoDescriptor (Info, Resource, Length, Level);518break;519520default:521522AcpiOsPrintf ("Unknown GPIO type\n");523break;524}525}526527void528AcpiDmClockInputDescriptor (529ACPI_OP_WALK_INFO *Info,530AML_RESOURCE *Resource,531UINT32 Length,532UINT32 Level)533{534char *DeviceName = NULL;535UINT8 *ResourceIndex = NULL;536AcpiDmIndent (Level);537538AcpiOsPrintf ("ClockInput (");539540AcpiOsPrintf ("0x%8.8X, ", Resource->ClockInput.FrequencyNumerator);541542AcpiOsPrintf ("0x%4.4X, ", Resource->ClockInput.FrequencyDivisor);543544AcpiOsPrintf ("%s, ",545AcpiGbl_ClockInputScale [ACPI_EXTRACT_2BIT_FLAG (Resource->ClockInput.Flags, 1)]);546547AcpiOsPrintf ("%s, ",548AcpiGbl_ClockInputMode [ACPI_GET_1BIT_FLAG (Resource->ClockInput.Flags)]);549550if (Length > sizeof(Resource->ClockInput))551{552DeviceName = ACPI_ADD_PTR (char,553Resource, sizeof(Resource->ClockInput)+1),554AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);555556AcpiOsPrintf (", ");557ResourceIndex = ACPI_ADD_PTR (UINT8,558Resource, sizeof(Resource->ClockInput)),559560AcpiOsPrintf ("0x%2.2X", *ResourceIndex);561}562563AcpiOsPrintf (")\n");564565}566567/*******************************************************************************568*569* FUNCTION: AcpiDmPinFunctionDescriptor570*571* PARAMETERS: Info - Extra resource info572* Resource - Pointer to the resource descriptor573* Length - Length of the descriptor in bytes574* Level - Current source code indentation level575*576* RETURN: None577*578* DESCRIPTION: Decode a PinFunction descriptor579*580******************************************************************************/581582void583AcpiDmPinFunctionDescriptor (584ACPI_OP_WALK_INFO *Info,585AML_RESOURCE *Resource,586UINT32 Length,587UINT32 Level)588{589UINT16 *PinList;590UINT8 *VendorData;591char *DeviceName = NULL;592UINT32 PinCount;593UINT32 i;594595AcpiDmIndent (Level);596AcpiOsPrintf ("PinFunction (%s, ",597AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]);598599if (Resource->PinFunction.PinConfig <= 3)600{601AcpiOsPrintf ("%s, ",602AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]);603}604else605{606AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig);607}608609/* FunctionNumber */610611AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);612613if (Resource->PinFunction.ResSourceOffset)614{615DeviceName = ACPI_ADD_PTR (char,616Resource, Resource->PinFunction.ResSourceOffset),617AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);618}619620AcpiOsPrintf (", ");621AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex);622623AcpiDmIndent (Level + 1);624625/* Always ResourceConsumer */626AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]);627628/* Insert a descriptor name */629630AcpiDmDescriptorName ();631632AcpiOsPrintf (",");633634/* Dump the vendor data */635636if (Resource->PinFunction.VendorLength)637{638AcpiOsPrintf ("\n");639AcpiDmIndent (Level + 1);640VendorData = ACPI_ADD_PTR (UINT8, Resource,641Resource->PinFunction.VendorOffset);642643AcpiDmDumpRawDataBuffer (VendorData,644Resource->PinFunction.VendorLength, Level);645}646647AcpiOsPrintf (")\n");648649AcpiDmIndent (Level + 1);650651/* Dump the interrupt list */652653AcpiOsPrintf ("{ // Pin list\n");654655PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -656Resource->PinFunction.PinTableOffset)) /657sizeof (UINT16);658659PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,660Resource->PinFunction.PinTableOffset);661662for (i = 0; i < PinCount; i++)663{664AcpiDmIndent (Level + 2);665AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],666((i + 1) < PinCount) ? "," : "");667}668669AcpiDmIndent (Level + 1);670AcpiOsPrintf ("}\n");671}672673674/*******************************************************************************675*676* FUNCTION: AcpiDmDumpSerialBusVendorData677*678* PARAMETERS: Resource - Pointer to the resource descriptor679*680* RETURN: None681*682* DESCRIPTION: Dump optional serial bus vendor data683*684******************************************************************************/685686static void687AcpiDmDumpSerialBusVendorData (688AML_RESOURCE *Resource,689UINT32 Level)690{691UINT8 *VendorData;692UINT32 VendorLength;693694695/* Get the (optional) vendor data and length */696697switch (Resource->CommonSerialBus.Type)698{699case AML_RESOURCE_I2C_SERIALBUSTYPE:700701VendorLength = Resource->CommonSerialBus.TypeDataLength -702AML_RESOURCE_I2C_MIN_DATA_LEN;703704VendorData = ACPI_ADD_PTR (UINT8, Resource,705sizeof (AML_RESOURCE_I2C_SERIALBUS));706break;707708case AML_RESOURCE_SPI_SERIALBUSTYPE:709710VendorLength = Resource->CommonSerialBus.TypeDataLength -711AML_RESOURCE_SPI_MIN_DATA_LEN;712713VendorData = ACPI_ADD_PTR (UINT8, Resource,714sizeof (AML_RESOURCE_SPI_SERIALBUS));715break;716717case AML_RESOURCE_UART_SERIALBUSTYPE:718719VendorLength = Resource->CommonSerialBus.TypeDataLength -720AML_RESOURCE_UART_MIN_DATA_LEN;721722VendorData = ACPI_ADD_PTR (UINT8, Resource,723sizeof (AML_RESOURCE_UART_SERIALBUS));724break;725726case AML_RESOURCE_CSI2_SERIALBUSTYPE:727728VendorLength = Resource->CommonSerialBus.TypeDataLength -729AML_RESOURCE_CSI2_MIN_DATA_LEN;730731VendorData = ACPI_ADD_PTR (UINT8, Resource,732sizeof (AML_RESOURCE_CSI2_SERIALBUS));733break;734735default:736737return;738}739740/* Dump the vendor bytes as a RawDataBuffer object */741742AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);743}744745746/*******************************************************************************747*748* FUNCTION: AcpiDmCsi2SerialBusDescriptor749*750* PARAMETERS: Info - Extra resource info751* Resource - Pointer to the resource descriptor752* Length - Length of the descriptor in bytes753* Level - Current source code indentation level754*755* RETURN: None756*757* DESCRIPTION: Decode a CSI2 serial bus descriptor758*759******************************************************************************/760761static void762AcpiDmCsi2SerialBusDescriptor (763ACPI_OP_WALK_INFO *Info,764AML_RESOURCE *Resource,765UINT32 Length,766UINT32 Level)767{768UINT32 ResourceSourceOffset;769char *DeviceName;770771772/* SlaveMode, PhyType, LocalPortInstance */773774AcpiDmIndent (Level);775AcpiOsPrintf ("Csi2Bus (%s,",776AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]);777778AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",779Resource->Csi2SerialBus.TypeSpecificFlags & 0x03,780(Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC) >> 2);781782/* ResourceSource is a required field */783784ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +785Resource->CommonSerialBus.TypeDataLength;786787AcpiDmIndent (Level + 1);788DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);789AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);790791/* ResourceSourceIndex, ResourceUsage */792793AcpiOsPrintf (",\n");794AcpiDmIndent (Level + 1);795AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex);796797AcpiOsPrintf ("%s, ",798AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]);799800/* Insert a descriptor name */801802AcpiDmDescriptorName ();803804/* Dump the vendor data */805806AcpiOsPrintf (",\n");807AcpiDmIndent (Level + 1);808AcpiDmDumpSerialBusVendorData (Resource, Level);809AcpiOsPrintf (")\n");810811#ifndef _KERNEL812MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);813#endif814}815816817/*******************************************************************************818*819* FUNCTION: AcpiDmI2cSerialBusDescriptor820*821* PARAMETERS: Info - Extra resource info822* Resource - Pointer to the resource descriptor823* Length - Length of the descriptor in bytes824* Level - Current source code indentation level825*826* RETURN: None827*828* DESCRIPTION: Decode a I2C serial bus descriptor829*830******************************************************************************/831832static void833AcpiDmI2cSerialBusDescriptor (834ACPI_OP_WALK_INFO *Info,835AML_RESOURCE *Resource,836UINT32 Length,837UINT32 Level)838{839UINT32 ResourceSourceOffset;840char *DeviceName;841842843/* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */844845AcpiDmIndent (Level);846AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",847Resource->I2cSerialBus.SlaveAddress,848AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],849Resource->I2cSerialBus.ConnectionSpeed);850851AcpiDmIndent (Level + 1);852AcpiOsPrintf ("%s, ",853AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);854855/* ResourceSource is a required field */856857ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +858Resource->CommonSerialBus.TypeDataLength;859860DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);861AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);862863/* ResourceSourceIndex, ResourceUsage */864865AcpiOsPrintf (",\n");866AcpiDmIndent (Level + 1);867AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex);868869AcpiOsPrintf ("%s, ",870AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]);871872/* Insert a descriptor name */873874AcpiDmDescriptorName ();875876/* Share */877878AcpiOsPrintf (", %s,\n",879AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]);880881/* Dump the vendor data */882883AcpiDmIndent (Level + 1);884AcpiDmDumpSerialBusVendorData (Resource, Level);885AcpiOsPrintf (")\n");886887#ifndef _KERNEL888MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);889#endif890}891892893/*******************************************************************************894*895* FUNCTION: AcpiDmSpiSerialBusDescriptor896*897* PARAMETERS: Info - Extra resource info898* Resource - Pointer to the resource descriptor899* Length - Length of the descriptor in bytes900* Level - Current source code indentation level901*902* RETURN: None903*904* DESCRIPTION: Decode a SPI serial bus descriptor905*906******************************************************************************/907908static void909AcpiDmSpiSerialBusDescriptor (910ACPI_OP_WALK_INFO *Info,911AML_RESOURCE *Resource,912UINT32 Length,913UINT32 Level)914{915UINT32 ResourceSourceOffset;916char *DeviceName;917918919/* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */920921AcpiDmIndent (Level);922AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",923Resource->SpiSerialBus.DeviceSelection,924AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],925AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],926Resource->SpiSerialBus.DataBitLength);927928/* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */929930AcpiDmIndent (Level + 1);931AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",932AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],933Resource->SpiSerialBus.ConnectionSpeed,934AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);935936AcpiDmIndent (Level + 1);937AcpiOsPrintf ("%s, ",938AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]);939940/* ResourceSource is a required field */941942ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +943Resource->CommonSerialBus.TypeDataLength;944945DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);946AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);947948/* ResourceSourceIndex, ResourceUsage */949950AcpiOsPrintf (",\n");951AcpiDmIndent (Level + 1);952AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex);953954AcpiOsPrintf ("%s, ",955AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]);956957/* Insert a descriptor name */958959AcpiDmDescriptorName ();960961/* Share */962963AcpiOsPrintf (", %s,\n",964AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]);965966/* Dump the vendor data */967968AcpiDmIndent (Level + 1);969AcpiDmDumpSerialBusVendorData (Resource, Level);970AcpiOsPrintf (")\n");971972#ifndef _KERNEL973MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);974#endif975}976977978/*******************************************************************************979*980* FUNCTION: AcpiDmUartSerialBusDescriptor981*982* PARAMETERS: Info - Extra resource info983* Resource - Pointer to the resource descriptor984* Length - Length of the descriptor in bytes985* Level - Current source code indentation level986*987* RETURN: None988*989* DESCRIPTION: Decode a UART serial bus descriptor990*991******************************************************************************/992993static void994AcpiDmUartSerialBusDescriptor (995ACPI_OP_WALK_INFO *Info,996AML_RESOURCE *Resource,997UINT32 Length,998UINT32 Level)999{1000UINT32 ResourceSourceOffset;1001char *DeviceName;100210031004/* ConnectionSpeed, BitsPerByte, StopBits */10051006AcpiDmIndent (Level);1007AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",1008Resource->UartSerialBus.DefaultBaudRate,1009AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],1010AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);10111012/* LinesInUse, IsBigEndian, Parity, FlowControl */10131014AcpiDmIndent (Level + 1);1015AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n",1016Resource->UartSerialBus.LinesEnabled,1017AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)],1018AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)],1019AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]);10201021/* ReceiveBufferSize, TransmitBufferSize */10221023AcpiDmIndent (Level + 1);1024AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",1025Resource->UartSerialBus.RxFifoSize,1026Resource->UartSerialBus.TxFifoSize);10271028/* ResourceSource is a required field */10291030ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +1031Resource->CommonSerialBus.TypeDataLength;10321033DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);1034AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);10351036/* ResourceSourceIndex, ResourceUsage */10371038AcpiOsPrintf (",\n");1039AcpiDmIndent (Level + 1);1040AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex);10411042AcpiOsPrintf ("%s, ",1043AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]);10441045/* Insert a descriptor name */10461047AcpiDmDescriptorName ();10481049/* Share */10501051AcpiOsPrintf (", %s,\n",1052AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]);10531054/* Dump the vendor data */10551056AcpiDmIndent (Level + 1);1057AcpiDmDumpSerialBusVendorData (Resource, Level);1058AcpiOsPrintf (")\n");10591060#ifndef _KERNEL1061MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName);1062#endif1063}106410651066/*******************************************************************************1067*1068* FUNCTION: AcpiDmSerialBusDescriptor1069*1070* PARAMETERS: Info - Extra resource info1071* Resource - Pointer to the resource descriptor1072* Length - Length of the descriptor in bytes1073* Level - Current source code indentation level1074*1075* RETURN: None1076*1077* DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor1078*1079******************************************************************************/10801081void1082AcpiDmSerialBusDescriptor (1083ACPI_OP_WALK_INFO *Info,1084AML_RESOURCE *Resource,1085UINT32 Length,1086UINT32 Level)1087{10881089SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (1090Info, Resource, Length, Level);1091}10921093/*******************************************************************************1094*1095* FUNCTION: AcpiDmPinConfig1096*1097* PARAMETERS: PinConfigType - Pin configuration type1098* PinConfigValue - Pin configuration value1099*1100* RETURN: None1101*1102* DESCRIPTION: Pretty prints PinConfig type and value.1103*1104******************************************************************************/11051106static void1107AcpiDmPinConfig(1108UINT8 PinConfigType,1109UINT32 PinConfigValue)1110{1111if (PinConfigType <= 13)1112{1113AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType,1114AcpiGbl_PtypDecode[PinConfigType]);1115}1116else1117{1118AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType);1119}11201121/* PinConfigValue */11221123AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue);1124}11251126/*******************************************************************************1127*1128* FUNCTION: AcpiDmPinConfigDescriptor1129*1130* PARAMETERS: Info - Extra resource info1131* Resource - Pointer to the resource descriptor1132* Length - Length of the descriptor in bytes1133* Level - Current source code indentation level1134*1135* RETURN: None1136*1137* DESCRIPTION: Decode a PinConfig descriptor1138*1139******************************************************************************/11401141void1142AcpiDmPinConfigDescriptor (1143ACPI_OP_WALK_INFO *Info,1144AML_RESOURCE *Resource,1145UINT32 Length,1146UINT32 Level)1147{1148UINT16 *PinList;1149UINT8 *VendorData;1150char *DeviceName = NULL;1151UINT32 PinCount;1152UINT32 i;11531154AcpiDmIndent (Level);1155AcpiOsPrintf ("PinConfig (%s, ",1156AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]);11571158AcpiDmPinConfig (Resource->PinConfig.PinConfigType,1159Resource->PinConfig.PinConfigValue);11601161AcpiDmIndent (Level + 1);11621163if (Resource->PinConfig.ResSourceOffset)1164{1165DeviceName = ACPI_ADD_PTR (char,1166Resource, Resource->PinConfig.ResSourceOffset),1167AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);1168}11691170AcpiOsPrintf (", ");1171AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex);11721173AcpiOsPrintf ("%s, ",1174AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]);11751176/* Insert a descriptor name */11771178AcpiDmDescriptorName ();11791180AcpiOsPrintf (",");11811182/* Dump the vendor data */11831184if (Resource->PinConfig.VendorLength)1185{1186AcpiOsPrintf ("\n");1187AcpiDmIndent (Level + 1);1188VendorData = ACPI_ADD_PTR (UINT8, Resource,1189Resource->PinConfig.VendorOffset);11901191AcpiDmDumpRawDataBuffer (VendorData,1192Resource->PinConfig.VendorLength, Level);1193}11941195AcpiOsPrintf (")\n");11961197AcpiDmIndent (Level + 1);11981199/* Dump the interrupt list */12001201AcpiOsPrintf ("{ // Pin list\n");12021203PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset -1204Resource->PinConfig.PinTableOffset)) /1205sizeof (UINT16);12061207PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,1208Resource->PinConfig.PinTableOffset);12091210for (i = 0; i < PinCount; i++)1211{1212AcpiDmIndent (Level + 2);1213AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],1214((i + 1) < PinCount) ? "," : "");1215}12161217AcpiDmIndent (Level + 1);1218AcpiOsPrintf ("}\n");1219}12201221/*******************************************************************************1222*1223* FUNCTION: AcpiDmPinGroupDescriptor1224*1225* PARAMETERS: Info - Extra resource info1226* Resource - Pointer to the resource descriptor1227* Length - Length of the descriptor in bytes1228* Level - Current source code indentation level1229*1230* RETURN: None1231*1232* DESCRIPTION: Decode a PinGroup descriptor1233*1234******************************************************************************/12351236void1237AcpiDmPinGroupDescriptor (1238ACPI_OP_WALK_INFO *Info,1239AML_RESOURCE *Resource,1240UINT32 Length,1241UINT32 Level)1242{1243char *Label;1244UINT16 *PinList;1245UINT8 *VendorData;1246UINT32 PinCount;1247UINT32 i;12481249AcpiDmIndent (Level);1250/* Always producer */1251AcpiOsPrintf ("PinGroup (");12521253Label = ACPI_ADD_PTR (char,1254Resource, Resource->PinGroup.LabelOffset),1255AcpiUtPrintString (Label, ACPI_UINT16_MAX);12561257AcpiOsPrintf (", ");12581259AcpiOsPrintf ("%s, ",1260AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]);12611262/* Insert a descriptor name */12631264AcpiDmDescriptorName ();12651266AcpiOsPrintf (",");12671268/* Dump the vendor data */12691270if (Resource->PinGroup.VendorLength)1271{1272AcpiOsPrintf ("\n");1273AcpiDmIndent (Level + 1);1274VendorData = ACPI_ADD_PTR (UINT8, Resource,1275Resource->PinGroup.VendorOffset);12761277AcpiDmDumpRawDataBuffer (VendorData,1278Resource->PinGroup.VendorLength, Level);1279}12801281AcpiOsPrintf (")\n");12821283AcpiDmIndent (Level + 1);12841285/* Dump the interrupt list */12861287AcpiOsPrintf ("{ // Pin list\n");12881289PinCount = (Resource->PinGroup.LabelOffset -1290Resource->PinGroup.PinTableOffset) / sizeof (UINT16);12911292PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,1293Resource->PinGroup.PinTableOffset);12941295for (i = 0; i < PinCount; i++)1296{1297AcpiDmIndent (Level + 2);1298AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],1299((i + 1) < PinCount) ? "," : "");1300}13011302AcpiDmIndent (Level + 1);1303AcpiOsPrintf ("}\n");1304}13051306/*******************************************************************************1307*1308* FUNCTION: AcpiDmPinGroupFunctionDescriptor1309*1310* PARAMETERS: Info - Extra resource info1311* Resource - Pointer to the resource descriptor1312* Length - Length of the descriptor in bytes1313* Level - Current source code indentation level1314*1315* RETURN: None1316*1317* DESCRIPTION: Decode a PinGroupFunction descriptor1318*1319******************************************************************************/13201321void1322AcpiDmPinGroupFunctionDescriptor (1323ACPI_OP_WALK_INFO *Info,1324AML_RESOURCE *Resource,1325UINT32 Length,1326UINT32 Level)1327{1328UINT8 *VendorData;1329char *DeviceName = NULL;1330char *Label = NULL;13311332AcpiDmIndent (Level);1333AcpiOsPrintf ("PinGroupFunction (%s, ",1334AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]);13351336/* FunctionNumber */13371338AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber);13391340DeviceName = ACPI_ADD_PTR (char,1341Resource, Resource->PinGroupFunction.ResSourceOffset),1342AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);13431344AcpiOsPrintf (", ");1345AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex);13461347AcpiDmIndent (Level + 1);13481349Label = ACPI_ADD_PTR (char, Resource,1350Resource->PinGroupFunction.ResSourceLabelOffset);1351AcpiUtPrintString (Label, ACPI_UINT16_MAX);13521353AcpiOsPrintf (", ");13541355AcpiOsPrintf ("%s, ",1356AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]);13571358/* Insert a descriptor name */13591360AcpiDmDescriptorName ();13611362AcpiOsPrintf (",");13631364/* Dump the vendor data */13651366if (Resource->PinGroupFunction.VendorLength)1367{1368AcpiOsPrintf ("\n");1369AcpiDmIndent (Level + 1);1370VendorData = ACPI_ADD_PTR (UINT8, Resource,1371Resource->PinGroupFunction.VendorOffset);13721373AcpiDmDumpRawDataBuffer (VendorData,1374Resource->PinGroupFunction.VendorLength, Level);1375}13761377AcpiOsPrintf (")\n");1378}13791380/*******************************************************************************1381*1382* FUNCTION: AcpiDmPinGroupConfigDescriptor1383*1384* PARAMETERS: Info - Extra resource info1385* Resource - Pointer to the resource descriptor1386* Length - Length of the descriptor in bytes1387* Level - Current source code indentation level1388*1389* RETURN: None1390*1391* DESCRIPTION: Decode a PinGroupConfig descriptor1392*1393******************************************************************************/13941395void1396AcpiDmPinGroupConfigDescriptor (1397ACPI_OP_WALK_INFO *Info,1398AML_RESOURCE *Resource,1399UINT32 Length,1400UINT32 Level)1401{1402UINT8 *VendorData;1403char *DeviceName = NULL;1404char *Label = NULL;14051406AcpiDmIndent (Level);1407AcpiOsPrintf ("PinGroupConfig (%s, ",1408AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]);14091410AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType,1411Resource->PinGroupConfig.PinConfigValue);14121413AcpiDmIndent (Level + 1);14141415DeviceName = ACPI_ADD_PTR (char,1416Resource, Resource->PinGroupConfig.ResSourceOffset),1417AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);14181419AcpiOsPrintf (", ");1420AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex);14211422Label = ACPI_ADD_PTR (char, Resource,1423Resource->PinGroupConfig.ResSourceLabelOffset);1424AcpiUtPrintString (Label, ACPI_UINT16_MAX);14251426AcpiOsPrintf (", ");14271428AcpiOsPrintf ("%s, ",1429AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]);14301431/* Insert a descriptor name */14321433AcpiDmDescriptorName ();14341435AcpiOsPrintf (",");14361437/* Dump the vendor data */14381439if (Resource->PinGroupConfig.VendorLength)1440{1441AcpiOsPrintf ("\n");1442AcpiDmIndent (Level + 1);1443VendorData = ACPI_ADD_PTR (UINT8, Resource,1444Resource->PinGroupConfig.VendorOffset);14451446AcpiDmDumpRawDataBuffer (VendorData,1447Resource->PinGroupConfig.VendorLength, Level);1448}14491450AcpiOsPrintf (")\n");1451}145214531454