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