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