1 /******************************************************************************* 2 * 3 * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2) 4 * 5 ******************************************************************************/ 6 7 /****************************************************************************** 8 * 9 * 1. Copyright Notice 10 * 11 * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp. 12 * All rights reserved. 13 * 14 * 2. License 15 * 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 19 * property rights. 20 * 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 27 * 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; 36 * 37 * The above copyright and patent license is granted only if the following 38 * conditions are met: 39 * 40 * 3. Conditions 41 * 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. 53 * 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 64 * make. 65 * 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 70 * distribution. 71 * 72 * 3.4. Intel retains all right, title, and interest in and to the Original 73 * Intel Code. 74 * 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. 79 * 80 * 4. Disclaimer and Export Compliance 81 * 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 88 * PARTICULAR PURPOSE. 89 * 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 97 * LIMITED REMEDY. 98 * 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. 113 * 114 ***************************************************************************** 115 * 116 * Alternatively, you may choose to be licensed under the terms of the 117 * following license: 118 * 119 * Redistribution and use in source and binary forms, with or without 120 * modification, are permitted provided that the following conditions 121 * are met: 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. 133 * 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. 145 * 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. 149 * 150 *****************************************************************************/ 151 152 #include "acpi.h" 153 #include "accommon.h" 154 #include "acdisasm.h" 155 156 #ifdef _KERNEL 157 #define MpSaveGpioInfo(a, b, c, d, e) 158 #define MpSaveSerialInfo(a, b, c) 159 #endif 160 161 #define _COMPONENT ACPI_CA_DEBUGGER 162 ACPI_MODULE_NAME ("dbresrcl2") 163 164 /* Local prototypes */ 165 166 static void 167 AcpiDmCsi2SerialBusDescriptor ( 168 ACPI_OP_WALK_INFO *Info, 169 AML_RESOURCE *Resource, 170 UINT32 Length, 171 UINT32 Level); 172 173 static void 174 AcpiDmI2cSerialBusDescriptor ( 175 ACPI_OP_WALK_INFO *Info, 176 AML_RESOURCE *Resource, 177 UINT32 Length, 178 UINT32 Level); 179 180 static void 181 AcpiDmSpiSerialBusDescriptor ( 182 ACPI_OP_WALK_INFO *Info, 183 AML_RESOURCE *Resource, 184 UINT32 Length, 185 UINT32 Level); 186 187 static void 188 AcpiDmUartSerialBusDescriptor ( 189 ACPI_OP_WALK_INFO *Info, 190 AML_RESOURCE *Resource, 191 UINT32 Length, 192 UINT32 Level); 193 194 static void 195 AcpiDmGpioCommon ( 196 ACPI_OP_WALK_INFO *Info, 197 AML_RESOURCE *Resource, 198 UINT32 Level); 199 200 static void 201 AcpiDmDumpRawDataBuffer ( 202 UINT8 *Buffer, 203 UINT32 Length, 204 UINT32 Level); 205 206 207 /* Dispatch table for the serial bus descriptors */ 208 209 static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] = 210 { 211 NULL, 212 AcpiDmI2cSerialBusDescriptor, 213 AcpiDmSpiSerialBusDescriptor, 214 AcpiDmUartSerialBusDescriptor, 215 AcpiDmCsi2SerialBusDescriptor 216 }; 217 218 219 /******************************************************************************* 220 * 221 * FUNCTION: AcpiDmDumpRawDataBuffer 222 * 223 * PARAMETERS: Buffer - Pointer to the data bytes 224 * Length - Length of the descriptor in bytes 225 * Level - Current source code indentation level 226 * 227 * RETURN: None 228 * 229 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for 230 * vendor data bytes. 231 * 232 ******************************************************************************/ 233 234 static void 235 AcpiDmDumpRawDataBuffer ( 236 UINT8 *Buffer, 237 UINT32 Length, 238 UINT32 Level) 239 { 240 UINT32 Index; 241 UINT32 i; 242 UINT32 j; 243 244 245 if (!Length) 246 { 247 return; 248 } 249 250 AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length); 251 252 AcpiOsPrintf ("\n"); 253 AcpiDmIndent (Level + 1); 254 AcpiOsPrintf ("{\n"); 255 AcpiDmIndent (Level + 2); 256 257 for (i = 0; i < Length;) 258 { 259 for (j = 0; j < 8; j++) 260 { 261 Index = i + j; 262 if (Index >= Length) 263 { 264 goto Finish; 265 } 266 267 AcpiOsPrintf ("0x%2.2X", Buffer[Index]); 268 if ((Index + 1) >= Length) 269 { 270 goto Finish; 271 } 272 273 AcpiOsPrintf (", "); 274 } 275 276 AcpiOsPrintf ("\n"); 277 AcpiDmIndent (Level + 2); 278 279 i += 8; 280 } 281 282 Finish: 283 AcpiOsPrintf ("\n"); 284 AcpiDmIndent (Level + 1); 285 AcpiOsPrintf ("}"); 286 } 287 288 289 /******************************************************************************* 290 * 291 * FUNCTION: AcpiDmGpioCommon 292 * 293 * PARAMETERS: Info - Extra resource info 294 * Resource - Pointer to the resource descriptor 295 * Level - Current source code indentation level 296 * 297 * RETURN: None 298 * 299 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor 300 * 301 ******************************************************************************/ 302 303 static void 304 AcpiDmGpioCommon ( 305 ACPI_OP_WALK_INFO *Info, 306 AML_RESOURCE *Resource, 307 UINT32 Level) 308 { 309 UINT16 *PinList; 310 UINT8 *VendorData; 311 char *DeviceName = NULL; 312 UINT32 PinCount; 313 UINT32 i; 314 315 316 /* ResourceSource, ResourceSourceIndex, ResourceType */ 317 318 AcpiDmIndent (Level + 1); 319 if (Resource->Gpio.ResSourceOffset) 320 { 321 DeviceName = ACPI_ADD_PTR (char, 322 Resource, Resource->Gpio.ResSourceOffset); 323 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 324 } 325 326 AcpiOsPrintf (", "); 327 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex); 328 AcpiOsPrintf ("%s, ", 329 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]); 330 331 /* Insert a descriptor name */ 332 333 AcpiDmDescriptorName (); 334 AcpiOsPrintf (","); 335 336 /* Dump the vendor data */ 337 338 if (Resource->Gpio.VendorOffset) 339 { 340 AcpiOsPrintf ("\n"); 341 AcpiDmIndent (Level + 1); 342 VendorData = ACPI_ADD_PTR (UINT8, Resource, 343 Resource->Gpio.VendorOffset); 344 345 AcpiDmDumpRawDataBuffer (VendorData, 346 Resource->Gpio.VendorLength, Level); 347 } 348 349 AcpiOsPrintf (")\n"); 350 351 /* Dump the interrupt list */ 352 353 AcpiDmIndent (Level + 1); 354 AcpiOsPrintf ("{ // Pin list\n"); 355 356 PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset - 357 Resource->Gpio.PinTableOffset)) / 358 sizeof (UINT16); 359 360 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, 361 Resource->Gpio.PinTableOffset); 362 363 for (i = 0; i < PinCount; i++) 364 { 365 AcpiDmIndent (Level + 2); 366 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], 367 ((i + 1) < PinCount) ? "," : ""); 368 } 369 370 AcpiDmIndent (Level + 1); 371 AcpiOsPrintf ("}\n"); 372 373 MpSaveGpioInfo (Info->MappingOp, Resource, 374 PinCount, PinList, DeviceName); 375 } 376 377 378 /******************************************************************************* 379 * 380 * FUNCTION: AcpiDmGpioIntDescriptor 381 * 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 386 * 387 * RETURN: None 388 * 389 * DESCRIPTION: Decode a GPIO Interrupt descriptor 390 * 391 ******************************************************************************/ 392 393 static void 394 AcpiDmGpioIntDescriptor ( 395 ACPI_OP_WALK_INFO *Info, 396 AML_RESOURCE *Resource, 397 UINT32 Length, 398 UINT32 Level) 399 { 400 401 /* Dump the GpioInt-specific portion of the descriptor */ 402 403 /* EdgeLevel, ActiveLevel, Shared */ 404 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)]); 410 411 /* PinConfig, DebounceTimeout */ 412 413 if (Resource->Gpio.PinConfig <= 3) 414 { 415 AcpiOsPrintf ("%s, ", 416 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); 417 } 418 else 419 { 420 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); 421 } 422 AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout); 423 424 /* Dump the GpioInt/GpioIo common portion of the descriptor */ 425 426 AcpiDmGpioCommon (Info, Resource, Level); 427 } 428 429 430 /******************************************************************************* 431 * 432 * FUNCTION: AcpiDmGpioIoDescriptor 433 * 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 438 * 439 * RETURN: None 440 * 441 * DESCRIPTION: Decode a GPIO I/O descriptor 442 * 443 ******************************************************************************/ 444 445 static void 446 AcpiDmGpioIoDescriptor ( 447 ACPI_OP_WALK_INFO *Info, 448 AML_RESOURCE *Resource, 449 UINT32 Length, 450 UINT32 Level) 451 { 452 453 /* Dump the GpioIo-specific portion of the descriptor */ 454 455 /* Shared, PinConfig */ 456 457 AcpiDmIndent (Level); 458 AcpiOsPrintf ("GpioIo (%s, ", 459 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); 460 461 if (Resource->Gpio.PinConfig <= 3) 462 { 463 AcpiOsPrintf ("%s, ", 464 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); 465 } 466 else 467 { 468 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); 469 } 470 471 /* DebounceTimeout, DriveStrength, IoRestriction */ 472 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)]); 477 478 /* Dump the GpioInt/GpioIo common portion of the descriptor */ 479 480 AcpiDmGpioCommon (Info, Resource, Level); 481 } 482 483 484 /******************************************************************************* 485 * 486 * FUNCTION: AcpiDmGpioDescriptor 487 * 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 492 * 493 * RETURN: None 494 * 495 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor 496 * 497 ******************************************************************************/ 498 499 void 500 AcpiDmGpioDescriptor ( 501 ACPI_OP_WALK_INFO *Info, 502 AML_RESOURCE *Resource, 503 UINT32 Length, 504 UINT32 Level) 505 { 506 UINT8 ConnectionType; 507 508 509 ConnectionType = Resource->Gpio.ConnectionType; 510 511 switch (ConnectionType) 512 { 513 case AML_RESOURCE_GPIO_TYPE_INT: 514 515 AcpiDmGpioIntDescriptor (Info, Resource, Length, Level); 516 break; 517 518 case AML_RESOURCE_GPIO_TYPE_IO: 519 520 AcpiDmGpioIoDescriptor (Info, Resource, Length, Level); 521 break; 522 523 default: 524 525 AcpiOsPrintf ("Unknown GPIO type\n"); 526 break; 527 } 528 } 529 530 void 531 AcpiDmClockInputDescriptor ( 532 ACPI_OP_WALK_INFO *Info, 533 AML_RESOURCE *Resource, 534 UINT32 Length, 535 UINT32 Level) 536 { 537 char *DeviceName = NULL; 538 UINT8 *ResourceIndex = NULL; 539 AcpiDmIndent (Level); 540 541 AcpiOsPrintf ("ClockInput ("); 542 543 AcpiOsPrintf ("0x%8.8X, ", Resource->ClockInput.FrequencyNumerator); 544 545 AcpiOsPrintf ("0x%4.4X, ", Resource->ClockInput.FrequencyDivisor); 546 547 AcpiOsPrintf ("%s, ", 548 AcpiGbl_ClockInputScale [ACPI_EXTRACT_2BIT_FLAG (Resource->ClockInput.Flags, 1)]); 549 550 AcpiOsPrintf ("%s, ", 551 AcpiGbl_ClockInputMode [ACPI_GET_1BIT_FLAG (Resource->ClockInput.Flags)]); 552 553 if (Length > sizeof(Resource->ClockInput)) 554 { 555 DeviceName = ACPI_ADD_PTR (char, 556 Resource, sizeof(Resource->ClockInput)+1), 557 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 558 559 AcpiOsPrintf (", "); 560 ResourceIndex = ACPI_ADD_PTR (UINT8, 561 Resource, sizeof(Resource->ClockInput)), 562 563 AcpiOsPrintf ("0x%2.2X", *ResourceIndex); 564 } 565 566 AcpiOsPrintf (")\n"); 567 568 } 569 570 /******************************************************************************* 571 * 572 * FUNCTION: AcpiDmPinFunctionDescriptor 573 * 574 * PARAMETERS: Info - Extra resource info 575 * Resource - Pointer to the resource descriptor 576 * Length - Length of the descriptor in bytes 577 * Level - Current source code indentation level 578 * 579 * RETURN: None 580 * 581 * DESCRIPTION: Decode a PinFunction descriptor 582 * 583 ******************************************************************************/ 584 585 void 586 AcpiDmPinFunctionDescriptor ( 587 ACPI_OP_WALK_INFO *Info, 588 AML_RESOURCE *Resource, 589 UINT32 Length, 590 UINT32 Level) 591 { 592 UINT16 *PinList; 593 UINT8 *VendorData; 594 char *DeviceName = NULL; 595 UINT32 PinCount; 596 UINT32 i; 597 598 AcpiDmIndent (Level); 599 AcpiOsPrintf ("PinFunction (%s, ", 600 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]); 601 602 if (Resource->PinFunction.PinConfig <= 3) 603 { 604 AcpiOsPrintf ("%s, ", 605 AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]); 606 } 607 else 608 { 609 AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig); 610 } 611 612 /* FunctionNumber */ 613 614 AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber); 615 616 if (Resource->PinFunction.ResSourceOffset) 617 { 618 DeviceName = ACPI_ADD_PTR (char, 619 Resource, Resource->PinFunction.ResSourceOffset), 620 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 621 } 622 623 AcpiOsPrintf (", "); 624 AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex); 625 626 AcpiDmIndent (Level + 1); 627 628 /* Always ResourceConsumer */ 629 AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]); 630 631 /* Insert a descriptor name */ 632 633 AcpiDmDescriptorName (); 634 635 AcpiOsPrintf (","); 636 637 /* Dump the vendor data */ 638 639 if (Resource->PinFunction.VendorLength) 640 { 641 AcpiOsPrintf ("\n"); 642 AcpiDmIndent (Level + 1); 643 VendorData = ACPI_ADD_PTR (UINT8, Resource, 644 Resource->PinFunction.VendorOffset); 645 646 AcpiDmDumpRawDataBuffer (VendorData, 647 Resource->PinFunction.VendorLength, Level); 648 } 649 650 AcpiOsPrintf (")\n"); 651 652 AcpiDmIndent (Level + 1); 653 654 /* Dump the interrupt list */ 655 656 AcpiOsPrintf ("{ // Pin list\n"); 657 658 PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset - 659 Resource->PinFunction.PinTableOffset)) / 660 sizeof (UINT16); 661 662 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, 663 Resource->PinFunction.PinTableOffset); 664 665 for (i = 0; i < PinCount; i++) 666 { 667 AcpiDmIndent (Level + 2); 668 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], 669 ((i + 1) < PinCount) ? "," : ""); 670 } 671 672 AcpiDmIndent (Level + 1); 673 AcpiOsPrintf ("}\n"); 674 } 675 676 677 /******************************************************************************* 678 * 679 * FUNCTION: AcpiDmDumpSerialBusVendorData 680 * 681 * PARAMETERS: Resource - Pointer to the resource descriptor 682 * 683 * RETURN: None 684 * 685 * DESCRIPTION: Dump optional serial bus vendor data 686 * 687 ******************************************************************************/ 688 689 static void 690 AcpiDmDumpSerialBusVendorData ( 691 AML_RESOURCE *Resource, 692 UINT32 Level) 693 { 694 UINT8 *VendorData; 695 UINT32 VendorLength; 696 697 698 /* Get the (optional) vendor data and length */ 699 700 switch (Resource->CommonSerialBus.Type) 701 { 702 case AML_RESOURCE_I2C_SERIALBUSTYPE: 703 704 VendorLength = Resource->CommonSerialBus.TypeDataLength - 705 AML_RESOURCE_I2C_MIN_DATA_LEN; 706 707 VendorData = ACPI_ADD_PTR (UINT8, Resource, 708 sizeof (AML_RESOURCE_I2C_SERIALBUS)); 709 break; 710 711 case AML_RESOURCE_SPI_SERIALBUSTYPE: 712 713 VendorLength = Resource->CommonSerialBus.TypeDataLength - 714 AML_RESOURCE_SPI_MIN_DATA_LEN; 715 716 VendorData = ACPI_ADD_PTR (UINT8, Resource, 717 sizeof (AML_RESOURCE_SPI_SERIALBUS)); 718 break; 719 720 case AML_RESOURCE_UART_SERIALBUSTYPE: 721 722 VendorLength = Resource->CommonSerialBus.TypeDataLength - 723 AML_RESOURCE_UART_MIN_DATA_LEN; 724 725 VendorData = ACPI_ADD_PTR (UINT8, Resource, 726 sizeof (AML_RESOURCE_UART_SERIALBUS)); 727 break; 728 729 case AML_RESOURCE_CSI2_SERIALBUSTYPE: 730 731 VendorLength = Resource->CommonSerialBus.TypeDataLength - 732 AML_RESOURCE_CSI2_MIN_DATA_LEN; 733 734 VendorData = ACPI_ADD_PTR (UINT8, Resource, 735 sizeof (AML_RESOURCE_CSI2_SERIALBUS)); 736 break; 737 738 default: 739 740 return; 741 } 742 743 /* Dump the vendor bytes as a RawDataBuffer object */ 744 745 AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); 746 } 747 748 749 /******************************************************************************* 750 * 751 * FUNCTION: AcpiDmCsi2SerialBusDescriptor 752 * 753 * PARAMETERS: Info - Extra resource info 754 * Resource - Pointer to the resource descriptor 755 * Length - Length of the descriptor in bytes 756 * Level - Current source code indentation level 757 * 758 * RETURN: None 759 * 760 * DESCRIPTION: Decode a CSI2 serial bus descriptor 761 * 762 ******************************************************************************/ 763 764 static void 765 AcpiDmCsi2SerialBusDescriptor ( 766 ACPI_OP_WALK_INFO *Info, 767 AML_RESOURCE *Resource, 768 UINT32 Length, 769 UINT32 Level) 770 { 771 UINT32 ResourceSourceOffset; 772 char *DeviceName; 773 774 775 /* SlaveMode, PhyType, LocalPortInstance */ 776 777 AcpiDmIndent (Level); 778 AcpiOsPrintf ("Csi2Bus (%s,", 779 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->Csi2SerialBus.Flags)]); 780 781 AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n", 782 Resource->Csi2SerialBus.TypeSpecificFlags & 0x03, 783 (Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC) >> 2); 784 785 /* ResourceSource is a required field */ 786 787 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 788 Resource->CommonSerialBus.TypeDataLength; 789 790 AcpiDmIndent (Level + 1); 791 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); 792 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 793 794 /* ResourceSourceIndex, ResourceUsage */ 795 796 AcpiOsPrintf (",\n"); 797 AcpiDmIndent (Level + 1); 798 AcpiOsPrintf ("0x%2.2X, ", Resource->Csi2SerialBus.ResSourceIndex); 799 800 AcpiOsPrintf ("%s, ", 801 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Csi2SerialBus.Flags, 1)]); 802 803 /* Insert a descriptor name */ 804 805 AcpiDmDescriptorName (); 806 807 /* Dump the vendor data */ 808 809 AcpiOsPrintf (",\n"); 810 AcpiDmIndent (Level + 1); 811 AcpiDmDumpSerialBusVendorData (Resource, Level); 812 AcpiOsPrintf (")\n"); 813 814 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 815 } 816 817 818 /******************************************************************************* 819 * 820 * FUNCTION: AcpiDmI2cSerialBusDescriptor 821 * 822 * PARAMETERS: Info - Extra resource info 823 * Resource - Pointer to the resource descriptor 824 * Length - Length of the descriptor in bytes 825 * Level - Current source code indentation level 826 * 827 * RETURN: None 828 * 829 * DESCRIPTION: Decode a I2C serial bus descriptor 830 * 831 ******************************************************************************/ 832 833 static void 834 AcpiDmI2cSerialBusDescriptor ( 835 ACPI_OP_WALK_INFO *Info, 836 AML_RESOURCE *Resource, 837 UINT32 Length, 838 UINT32 Level) 839 { 840 UINT32 ResourceSourceOffset; 841 char *DeviceName; 842 843 844 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */ 845 846 AcpiDmIndent (Level); 847 AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n", 848 Resource->I2cSerialBus.SlaveAddress, 849 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)], 850 Resource->I2cSerialBus.ConnectionSpeed); 851 852 AcpiDmIndent (Level + 1); 853 AcpiOsPrintf ("%s, ", 854 AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]); 855 856 /* ResourceSource is a required field */ 857 858 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 859 Resource->CommonSerialBus.TypeDataLength; 860 861 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); 862 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 863 864 /* ResourceSourceIndex, ResourceUsage */ 865 866 AcpiOsPrintf (",\n"); 867 AcpiDmIndent (Level + 1); 868 AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex); 869 870 AcpiOsPrintf ("%s, ", 871 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]); 872 873 /* Insert a descriptor name */ 874 875 AcpiDmDescriptorName (); 876 877 /* Share */ 878 879 AcpiOsPrintf (", %s,\n", 880 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 2)]); 881 882 /* Dump the vendor data */ 883 884 AcpiDmIndent (Level + 1); 885 AcpiDmDumpSerialBusVendorData (Resource, Level); 886 AcpiOsPrintf (")\n"); 887 888 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 889 } 890 891 892 /******************************************************************************* 893 * 894 * FUNCTION: AcpiDmSpiSerialBusDescriptor 895 * 896 * PARAMETERS: Info - Extra resource info 897 * Resource - Pointer to the resource descriptor 898 * Length - Length of the descriptor in bytes 899 * Level - Current source code indentation level 900 * 901 * RETURN: None 902 * 903 * DESCRIPTION: Decode a SPI serial bus descriptor 904 * 905 ******************************************************************************/ 906 907 static void 908 AcpiDmSpiSerialBusDescriptor ( 909 ACPI_OP_WALK_INFO *Info, 910 AML_RESOURCE *Resource, 911 UINT32 Length, 912 UINT32 Level) 913 { 914 UINT32 ResourceSourceOffset; 915 char *DeviceName; 916 917 918 /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */ 919 920 AcpiDmIndent (Level); 921 AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n", 922 Resource->SpiSerialBus.DeviceSelection, 923 AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)], 924 AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)], 925 Resource->SpiSerialBus.DataBitLength); 926 927 /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */ 928 929 AcpiDmIndent (Level + 1); 930 AcpiOsPrintf ("%s, 0x%8.8X, %s,\n", 931 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)], 932 Resource->SpiSerialBus.ConnectionSpeed, 933 AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]); 934 935 AcpiDmIndent (Level + 1); 936 AcpiOsPrintf ("%s, ", 937 AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]); 938 939 /* ResourceSource is a required field */ 940 941 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 942 Resource->CommonSerialBus.TypeDataLength; 943 944 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); 945 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 946 947 /* ResourceSourceIndex, ResourceUsage */ 948 949 AcpiOsPrintf (",\n"); 950 AcpiDmIndent (Level + 1); 951 AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex); 952 953 AcpiOsPrintf ("%s, ", 954 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]); 955 956 /* Insert a descriptor name */ 957 958 AcpiDmDescriptorName (); 959 960 /* Share */ 961 962 AcpiOsPrintf (", %s,\n", 963 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 2)]); 964 965 /* Dump the vendor data */ 966 967 AcpiDmIndent (Level + 1); 968 AcpiDmDumpSerialBusVendorData (Resource, Level); 969 AcpiOsPrintf (")\n"); 970 971 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 972 } 973 974 975 /******************************************************************************* 976 * 977 * FUNCTION: AcpiDmUartSerialBusDescriptor 978 * 979 * PARAMETERS: Info - Extra resource info 980 * Resource - Pointer to the resource descriptor 981 * Length - Length of the descriptor in bytes 982 * Level - Current source code indentation level 983 * 984 * RETURN: None 985 * 986 * DESCRIPTION: Decode a UART serial bus descriptor 987 * 988 ******************************************************************************/ 989 990 static void 991 AcpiDmUartSerialBusDescriptor ( 992 ACPI_OP_WALK_INFO *Info, 993 AML_RESOURCE *Resource, 994 UINT32 Length, 995 UINT32 Level) 996 { 997 UINT32 ResourceSourceOffset; 998 char *DeviceName; 999 1000 1001 /* ConnectionSpeed, BitsPerByte, StopBits */ 1002 1003 AcpiDmIndent (Level); 1004 AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n", 1005 Resource->UartSerialBus.DefaultBaudRate, 1006 AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)], 1007 AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]); 1008 1009 /* LinesInUse, IsBigEndian, Parity, FlowControl */ 1010 1011 AcpiDmIndent (Level + 1); 1012 AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n", 1013 Resource->UartSerialBus.LinesEnabled, 1014 AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)], 1015 AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)], 1016 AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]); 1017 1018 /* ReceiveBufferSize, TransmitBufferSize */ 1019 1020 AcpiDmIndent (Level + 1); 1021 AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ", 1022 Resource->UartSerialBus.RxFifoSize, 1023 Resource->UartSerialBus.TxFifoSize); 1024 1025 /* ResourceSource is a required field */ 1026 1027 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 1028 Resource->CommonSerialBus.TypeDataLength; 1029 1030 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset); 1031 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 1032 1033 /* ResourceSourceIndex, ResourceUsage */ 1034 1035 AcpiOsPrintf (",\n"); 1036 AcpiDmIndent (Level + 1); 1037 AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex); 1038 1039 AcpiOsPrintf ("%s, ", 1040 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]); 1041 1042 /* Insert a descriptor name */ 1043 1044 AcpiDmDescriptorName (); 1045 1046 /* Share */ 1047 1048 AcpiOsPrintf (", %s,\n", 1049 AcpiGbl_ShrDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 2)]); 1050 1051 /* Dump the vendor data */ 1052 1053 AcpiDmIndent (Level + 1); 1054 AcpiDmDumpSerialBusVendorData (Resource, Level); 1055 AcpiOsPrintf (")\n"); 1056 1057 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 1058 } 1059 1060 1061 /******************************************************************************* 1062 * 1063 * FUNCTION: AcpiDmSerialBusDescriptor 1064 * 1065 * PARAMETERS: Info - Extra resource info 1066 * Resource - Pointer to the resource descriptor 1067 * Length - Length of the descriptor in bytes 1068 * Level - Current source code indentation level 1069 * 1070 * RETURN: None 1071 * 1072 * DESCRIPTION: Decode a I2C/SPI/UART/CSI2 serial bus descriptor 1073 * 1074 ******************************************************************************/ 1075 1076 void 1077 AcpiDmSerialBusDescriptor ( 1078 ACPI_OP_WALK_INFO *Info, 1079 AML_RESOURCE *Resource, 1080 UINT32 Length, 1081 UINT32 Level) 1082 { 1083 1084 SerialBusResourceDispatch [Resource->CommonSerialBus.Type] ( 1085 Info, Resource, Length, Level); 1086 } 1087 1088 /******************************************************************************* 1089 * 1090 * FUNCTION: AcpiDmPinConfig 1091 * 1092 * PARAMETERS: PinConfigType - Pin configuration type 1093 * PinConfigValue - Pin configuration value 1094 * 1095 * RETURN: None 1096 * 1097 * DESCRIPTION: Pretty prints PinConfig type and value. 1098 * 1099 ******************************************************************************/ 1100 1101 static void 1102 AcpiDmPinConfig( 1103 UINT8 PinConfigType, 1104 UINT32 PinConfigValue) 1105 { 1106 if (PinConfigType <= 13) 1107 { 1108 AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType, 1109 AcpiGbl_PtypDecode[PinConfigType]); 1110 } 1111 else 1112 { 1113 AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType); 1114 } 1115 1116 /* PinConfigValue */ 1117 1118 AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue); 1119 } 1120 1121 /******************************************************************************* 1122 * 1123 * FUNCTION: AcpiDmPinConfigDescriptor 1124 * 1125 * PARAMETERS: Info - Extra resource info 1126 * Resource - Pointer to the resource descriptor 1127 * Length - Length of the descriptor in bytes 1128 * Level - Current source code indentation level 1129 * 1130 * RETURN: None 1131 * 1132 * DESCRIPTION: Decode a PinConfig descriptor 1133 * 1134 ******************************************************************************/ 1135 1136 void 1137 AcpiDmPinConfigDescriptor ( 1138 ACPI_OP_WALK_INFO *Info, 1139 AML_RESOURCE *Resource, 1140 UINT32 Length, 1141 UINT32 Level) 1142 { 1143 UINT16 *PinList; 1144 UINT8 *VendorData; 1145 char *DeviceName = NULL; 1146 UINT32 PinCount; 1147 UINT32 i; 1148 1149 AcpiDmIndent (Level); 1150 AcpiOsPrintf ("PinConfig (%s, ", 1151 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]); 1152 1153 AcpiDmPinConfig (Resource->PinConfig.PinConfigType, 1154 Resource->PinConfig.PinConfigValue); 1155 1156 AcpiDmIndent (Level + 1); 1157 1158 if (Resource->PinConfig.ResSourceOffset) 1159 { 1160 DeviceName = ACPI_ADD_PTR (char, 1161 Resource, Resource->PinConfig.ResSourceOffset), 1162 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 1163 } 1164 1165 AcpiOsPrintf (", "); 1166 AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex); 1167 1168 AcpiOsPrintf ("%s, ", 1169 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]); 1170 1171 /* Insert a descriptor name */ 1172 1173 AcpiDmDescriptorName (); 1174 1175 AcpiOsPrintf (","); 1176 1177 /* Dump the vendor data */ 1178 1179 if (Resource->PinConfig.VendorLength) 1180 { 1181 AcpiOsPrintf ("\n"); 1182 AcpiDmIndent (Level + 1); 1183 VendorData = ACPI_ADD_PTR (UINT8, Resource, 1184 Resource->PinConfig.VendorOffset); 1185 1186 AcpiDmDumpRawDataBuffer (VendorData, 1187 Resource->PinConfig.VendorLength, Level); 1188 } 1189 1190 AcpiOsPrintf (")\n"); 1191 1192 AcpiDmIndent (Level + 1); 1193 1194 /* Dump the interrupt list */ 1195 1196 AcpiOsPrintf ("{ // Pin list\n"); 1197 1198 PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset - 1199 Resource->PinConfig.PinTableOffset)) / 1200 sizeof (UINT16); 1201 1202 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, 1203 Resource->PinConfig.PinTableOffset); 1204 1205 for (i = 0; i < PinCount; i++) 1206 { 1207 AcpiDmIndent (Level + 2); 1208 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], 1209 ((i + 1) < PinCount) ? "," : ""); 1210 } 1211 1212 AcpiDmIndent (Level + 1); 1213 AcpiOsPrintf ("}\n"); 1214 } 1215 1216 /******************************************************************************* 1217 * 1218 * FUNCTION: AcpiDmPinGroupDescriptor 1219 * 1220 * PARAMETERS: Info - Extra resource info 1221 * Resource - Pointer to the resource descriptor 1222 * Length - Length of the descriptor in bytes 1223 * Level - Current source code indentation level 1224 * 1225 * RETURN: None 1226 * 1227 * DESCRIPTION: Decode a PinGroup descriptor 1228 * 1229 ******************************************************************************/ 1230 1231 void 1232 AcpiDmPinGroupDescriptor ( 1233 ACPI_OP_WALK_INFO *Info, 1234 AML_RESOURCE *Resource, 1235 UINT32 Length, 1236 UINT32 Level) 1237 { 1238 char *Label; 1239 UINT16 *PinList; 1240 UINT8 *VendorData; 1241 UINT32 PinCount; 1242 UINT32 i; 1243 1244 AcpiDmIndent (Level); 1245 /* Always producer */ 1246 AcpiOsPrintf ("PinGroup ("); 1247 1248 Label = ACPI_ADD_PTR (char, 1249 Resource, Resource->PinGroup.LabelOffset), 1250 AcpiUtPrintString (Label, ACPI_UINT16_MAX); 1251 1252 AcpiOsPrintf (", "); 1253 1254 AcpiOsPrintf ("%s, ", 1255 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]); 1256 1257 /* Insert a descriptor name */ 1258 1259 AcpiDmDescriptorName (); 1260 1261 AcpiOsPrintf (","); 1262 1263 /* Dump the vendor data */ 1264 1265 if (Resource->PinGroup.VendorLength) 1266 { 1267 AcpiOsPrintf ("\n"); 1268 AcpiDmIndent (Level + 1); 1269 VendorData = ACPI_ADD_PTR (UINT8, Resource, 1270 Resource->PinGroup.VendorOffset); 1271 1272 AcpiDmDumpRawDataBuffer (VendorData, 1273 Resource->PinGroup.VendorLength, Level); 1274 } 1275 1276 AcpiOsPrintf (")\n"); 1277 1278 AcpiDmIndent (Level + 1); 1279 1280 /* Dump the interrupt list */ 1281 1282 AcpiOsPrintf ("{ // Pin list\n"); 1283 1284 PinCount = (Resource->PinGroup.LabelOffset - 1285 Resource->PinGroup.PinTableOffset) / sizeof (UINT16); 1286 1287 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, 1288 Resource->PinGroup.PinTableOffset); 1289 1290 for (i = 0; i < PinCount; i++) 1291 { 1292 AcpiDmIndent (Level + 2); 1293 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], 1294 ((i + 1) < PinCount) ? "," : ""); 1295 } 1296 1297 AcpiDmIndent (Level + 1); 1298 AcpiOsPrintf ("}\n"); 1299 } 1300 1301 /******************************************************************************* 1302 * 1303 * FUNCTION: AcpiDmPinGroupFunctionDescriptor 1304 * 1305 * PARAMETERS: Info - Extra resource info 1306 * Resource - Pointer to the resource descriptor 1307 * Length - Length of the descriptor in bytes 1308 * Level - Current source code indentation level 1309 * 1310 * RETURN: None 1311 * 1312 * DESCRIPTION: Decode a PinGroupFunction descriptor 1313 * 1314 ******************************************************************************/ 1315 1316 void 1317 AcpiDmPinGroupFunctionDescriptor ( 1318 ACPI_OP_WALK_INFO *Info, 1319 AML_RESOURCE *Resource, 1320 UINT32 Length, 1321 UINT32 Level) 1322 { 1323 UINT8 *VendorData; 1324 char *DeviceName = NULL; 1325 char *Label = NULL; 1326 1327 AcpiDmIndent (Level); 1328 AcpiOsPrintf ("PinGroupFunction (%s, ", 1329 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]); 1330 1331 /* FunctionNumber */ 1332 1333 AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber); 1334 1335 DeviceName = ACPI_ADD_PTR (char, 1336 Resource, Resource->PinGroupFunction.ResSourceOffset), 1337 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 1338 1339 AcpiOsPrintf (", "); 1340 AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex); 1341 1342 AcpiDmIndent (Level + 1); 1343 1344 Label = ACPI_ADD_PTR (char, Resource, 1345 Resource->PinGroupFunction.ResSourceLabelOffset); 1346 AcpiUtPrintString (Label, ACPI_UINT16_MAX); 1347 1348 AcpiOsPrintf (", "); 1349 1350 AcpiOsPrintf ("%s, ", 1351 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]); 1352 1353 /* Insert a descriptor name */ 1354 1355 AcpiDmDescriptorName (); 1356 1357 AcpiOsPrintf (","); 1358 1359 /* Dump the vendor data */ 1360 1361 if (Resource->PinGroupFunction.VendorLength) 1362 { 1363 AcpiOsPrintf ("\n"); 1364 AcpiDmIndent (Level + 1); 1365 VendorData = ACPI_ADD_PTR (UINT8, Resource, 1366 Resource->PinGroupFunction.VendorOffset); 1367 1368 AcpiDmDumpRawDataBuffer (VendorData, 1369 Resource->PinGroupFunction.VendorLength, Level); 1370 } 1371 1372 AcpiOsPrintf (")\n"); 1373 } 1374 1375 /******************************************************************************* 1376 * 1377 * FUNCTION: AcpiDmPinGroupConfigDescriptor 1378 * 1379 * PARAMETERS: Info - Extra resource info 1380 * Resource - Pointer to the resource descriptor 1381 * Length - Length of the descriptor in bytes 1382 * Level - Current source code indentation level 1383 * 1384 * RETURN: None 1385 * 1386 * DESCRIPTION: Decode a PinGroupConfig descriptor 1387 * 1388 ******************************************************************************/ 1389 1390 void 1391 AcpiDmPinGroupConfigDescriptor ( 1392 ACPI_OP_WALK_INFO *Info, 1393 AML_RESOURCE *Resource, 1394 UINT32 Length, 1395 UINT32 Level) 1396 { 1397 UINT8 *VendorData; 1398 char *DeviceName = NULL; 1399 char *Label = NULL; 1400 1401 AcpiDmIndent (Level); 1402 AcpiOsPrintf ("PinGroupConfig (%s, ", 1403 AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]); 1404 1405 AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType, 1406 Resource->PinGroupConfig.PinConfigValue); 1407 1408 AcpiDmIndent (Level + 1); 1409 1410 DeviceName = ACPI_ADD_PTR (char, 1411 Resource, Resource->PinGroupConfig.ResSourceOffset), 1412 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 1413 1414 AcpiOsPrintf (", "); 1415 AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex); 1416 1417 Label = ACPI_ADD_PTR (char, Resource, 1418 Resource->PinGroupConfig.ResSourceLabelOffset); 1419 AcpiUtPrintString (Label, ACPI_UINT16_MAX); 1420 1421 AcpiOsPrintf (", "); 1422 1423 AcpiOsPrintf ("%s, ", 1424 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]); 1425 1426 /* Insert a descriptor name */ 1427 1428 AcpiDmDescriptorName (); 1429 1430 AcpiOsPrintf (","); 1431 1432 /* Dump the vendor data */ 1433 1434 if (Resource->PinGroupConfig.VendorLength) 1435 { 1436 AcpiOsPrintf ("\n"); 1437 AcpiDmIndent (Level + 1); 1438 VendorData = ACPI_ADD_PTR (UINT8, Resource, 1439 Resource->PinGroupConfig.VendorOffset); 1440 1441 AcpiDmDumpRawDataBuffer (VendorData, 1442 Resource->PinGroupConfig.VendorLength, Level); 1443 } 1444 1445 AcpiOsPrintf (")\n"); 1446 } 1447