dmresrcl2.c revision 281075
1/******************************************************************************* 2 * 3 * Module Name: dmresrcl2.c - "Large" Resource Descriptor disassembly (#2) 4 * 5 ******************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2015, 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 MERCHANTIBILITY 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 <contrib/dev/acpica/include/acpi.h> 45#include <contrib/dev/acpica/include/accommon.h> 46#include <contrib/dev/acpica/include/acdisasm.h> 47 48 49#ifdef ACPI_DISASSEMBLER 50 51#define _COMPONENT ACPI_CA_DEBUGGER 52 ACPI_MODULE_NAME ("dbresrcl2") 53 54/* Local prototypes */ 55 56static void 57AcpiDmI2cSerialBusDescriptor ( 58 ACPI_OP_WALK_INFO *Info, 59 AML_RESOURCE *Resource, 60 UINT32 Length, 61 UINT32 Level); 62 63static void 64AcpiDmSpiSerialBusDescriptor ( 65 ACPI_OP_WALK_INFO *Info, 66 AML_RESOURCE *Resource, 67 UINT32 Length, 68 UINT32 Level); 69 70static void 71AcpiDmUartSerialBusDescriptor ( 72 ACPI_OP_WALK_INFO *Info, 73 AML_RESOURCE *Resource, 74 UINT32 Length, 75 UINT32 Level); 76 77static void 78AcpiDmGpioCommon ( 79 ACPI_OP_WALK_INFO *Info, 80 AML_RESOURCE *Resource, 81 UINT32 Level); 82 83static void 84AcpiDmDumpRawDataBuffer ( 85 UINT8 *Buffer, 86 UINT32 Length, 87 UINT32 Level); 88 89 90/* Dispatch table for the serial bus descriptors */ 91 92static ACPI_RESOURCE_HANDLER SerialBusResourceDispatch [] = 93{ 94 NULL, 95 AcpiDmI2cSerialBusDescriptor, 96 AcpiDmSpiSerialBusDescriptor, 97 AcpiDmUartSerialBusDescriptor 98}; 99 100 101/******************************************************************************* 102 * 103 * FUNCTION: AcpiDmDumpRawDataBuffer 104 * 105 * PARAMETERS: Buffer - Pointer to the data bytes 106 * Length - Length of the descriptor in bytes 107 * Level - Current source code indentation level 108 * 109 * RETURN: None 110 * 111 * DESCRIPTION: Dump a data buffer as a RawDataBuffer() object. Used for 112 * vendor data bytes. 113 * 114 ******************************************************************************/ 115 116static void 117AcpiDmDumpRawDataBuffer ( 118 UINT8 *Buffer, 119 UINT32 Length, 120 UINT32 Level) 121{ 122 UINT32 Index; 123 UINT32 i; 124 UINT32 j; 125 126 127 if (!Length) 128 { 129 return; 130 } 131 132 AcpiOsPrintf ("RawDataBuffer (0x%.2X) // Vendor Data", Length); 133 134 AcpiOsPrintf ("\n"); 135 AcpiDmIndent (Level + 1); 136 AcpiOsPrintf ("{\n"); 137 AcpiDmIndent (Level + 2); 138 139 for (i = 0; i < Length;) 140 { 141 for (j = 0; j < 8; j++) 142 { 143 Index = i + j; 144 if (Index >= Length) 145 { 146 goto Finish; 147 } 148 149 AcpiOsPrintf ("0x%2.2X", Buffer[Index]); 150 if ((Index + 1) >= Length) 151 { 152 goto Finish; 153 } 154 155 AcpiOsPrintf (", "); 156 } 157 AcpiOsPrintf ("\n"); 158 AcpiDmIndent (Level + 2); 159 160 i += 8; 161 } 162 163Finish: 164 AcpiOsPrintf ("\n"); 165 AcpiDmIndent (Level + 1); 166 AcpiOsPrintf ("}"); 167} 168 169 170/******************************************************************************* 171 * 172 * FUNCTION: AcpiDmGpioCommon 173 * 174 * PARAMETERS: Info - Extra resource info 175 * Resource - Pointer to the resource descriptor 176 * Level - Current source code indentation level 177 * 178 * RETURN: None 179 * 180 * DESCRIPTION: Decode common parts of a GPIO Interrupt descriptor 181 * 182 ******************************************************************************/ 183 184static void 185AcpiDmGpioCommon ( 186 ACPI_OP_WALK_INFO *Info, 187 AML_RESOURCE *Resource, 188 UINT32 Level) 189{ 190 UINT16 *PinList; 191 UINT8 *VendorData; 192 char *DeviceName = NULL; 193 UINT32 PinCount; 194 UINT32 i; 195 196 197 /* ResourceSource, ResourceSourceIndex, ResourceType */ 198 199 AcpiDmIndent (Level + 1); 200 if (Resource->Gpio.ResSourceOffset) 201 { 202 DeviceName = ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset), 203 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 204 } 205 206 AcpiOsPrintf (", "); 207 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex); 208 AcpiOsPrintf ("%s, ", 209 AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]); 210 211 /* Insert a descriptor name */ 212 213 AcpiDmDescriptorName (); 214 AcpiOsPrintf (","); 215 216 /* Dump the vendor data */ 217 218 if (Resource->Gpio.VendorOffset) 219 { 220 AcpiOsPrintf ("\n"); 221 AcpiDmIndent (Level + 1); 222 VendorData = ACPI_ADD_PTR (UINT8, Resource, 223 Resource->Gpio.VendorOffset); 224 225 AcpiDmDumpRawDataBuffer (VendorData, 226 Resource->Gpio.VendorLength, Level); 227 } 228 229 AcpiOsPrintf (")\n"); 230 231 /* Dump the interrupt list */ 232 233 AcpiDmIndent (Level + 1); 234 AcpiOsPrintf ("{ // Pin list\n"); 235 236 PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset - 237 Resource->Gpio.PinTableOffset)) / 238 sizeof (UINT16); 239 240 PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, 241 Resource->Gpio.PinTableOffset); 242 243 for (i = 0; i < PinCount; i++) 244 { 245 AcpiDmIndent (Level + 2); 246 AcpiOsPrintf ("0x%4.4X%s\n", PinList[i], ((i + 1) < PinCount) ? "," : ""); 247 } 248 249 AcpiDmIndent (Level + 1); 250 AcpiOsPrintf ("}\n"); 251 252#ifndef _KERNEL 253 MpSaveGpioInfo (Info->MappingOp, Resource, PinCount, PinList, DeviceName); 254#endif 255} 256 257 258/******************************************************************************* 259 * 260 * FUNCTION: AcpiDmGpioIntDescriptor 261 * 262 * PARAMETERS: Info - Extra resource info 263 * Resource - Pointer to the resource descriptor 264 * Length - Length of the descriptor in bytes 265 * Level - Current source code indentation level 266 * 267 * RETURN: None 268 * 269 * DESCRIPTION: Decode a GPIO Interrupt descriptor 270 * 271 ******************************************************************************/ 272 273static void 274AcpiDmGpioIntDescriptor ( 275 ACPI_OP_WALK_INFO *Info, 276 AML_RESOURCE *Resource, 277 UINT32 Length, 278 UINT32 Level) 279{ 280 281 /* Dump the GpioInt-specific portion of the descriptor */ 282 283 /* EdgeLevel, ActiveLevel, Shared */ 284 285 AcpiDmIndent (Level); 286 AcpiOsPrintf ("GpioInt (%s, %s, %s, ", 287 AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)], 288 AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)], 289 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); 290 291 /* PinConfig, DebounceTimeout */ 292 293 if (Resource->Gpio.PinConfig <= 3) 294 { 295 AcpiOsPrintf ("%s, ", 296 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); 297 } 298 else 299 { 300 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); 301 } 302 AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout); 303 304 /* Dump the GpioInt/GpioIo common portion of the descriptor */ 305 306 AcpiDmGpioCommon (Info, Resource, Level); 307} 308 309 310/******************************************************************************* 311 * 312 * FUNCTION: AcpiDmGpioIoDescriptor 313 * 314 * PARAMETERS: Info - Extra resource info 315 * Resource - Pointer to the resource descriptor 316 * Length - Length of the descriptor in bytes 317 * Level - Current source code indentation level 318 * 319 * RETURN: None 320 * 321 * DESCRIPTION: Decode a GPIO I/O descriptor 322 * 323 ******************************************************************************/ 324 325static void 326AcpiDmGpioIoDescriptor ( 327 ACPI_OP_WALK_INFO *Info, 328 AML_RESOURCE *Resource, 329 UINT32 Length, 330 UINT32 Level) 331{ 332 333 /* Dump the GpioIo-specific portion of the descriptor */ 334 335 /* Shared, PinConfig */ 336 337 AcpiDmIndent (Level); 338 AcpiOsPrintf ("GpioIo (%s, ", 339 AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]); 340 341 if (Resource->Gpio.PinConfig <= 3) 342 { 343 AcpiOsPrintf ("%s, ", 344 AcpiGbl_PpcDecode[Resource->Gpio.PinConfig]); 345 } 346 else 347 { 348 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig); 349 } 350 351 /* DebounceTimeout, DriveStrength, IoRestriction */ 352 353 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout); 354 AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength); 355 AcpiOsPrintf ("%s,\n", 356 AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]); 357 358 /* Dump the GpioInt/GpioIo common portion of the descriptor */ 359 360 AcpiDmGpioCommon (Info, Resource, Level); 361} 362 363 364/******************************************************************************* 365 * 366 * FUNCTION: AcpiDmGpioDescriptor 367 * 368 * PARAMETERS: Info - Extra resource info 369 * Resource - Pointer to the resource descriptor 370 * Length - Length of the descriptor in bytes 371 * Level - Current source code indentation level 372 * 373 * RETURN: None 374 * 375 * DESCRIPTION: Decode a GpioInt/GpioIo GPIO Interrupt/IO descriptor 376 * 377 ******************************************************************************/ 378 379void 380AcpiDmGpioDescriptor ( 381 ACPI_OP_WALK_INFO *Info, 382 AML_RESOURCE *Resource, 383 UINT32 Length, 384 UINT32 Level) 385{ 386 UINT8 ConnectionType; 387 388 389 ConnectionType = Resource->Gpio.ConnectionType; 390 391 switch (ConnectionType) 392 { 393 case AML_RESOURCE_GPIO_TYPE_INT: 394 395 AcpiDmGpioIntDescriptor (Info, Resource, Length, Level); 396 break; 397 398 case AML_RESOURCE_GPIO_TYPE_IO: 399 400 AcpiDmGpioIoDescriptor (Info, Resource, Length, Level); 401 break; 402 403 default: 404 405 AcpiOsPrintf ("Unknown GPIO type\n"); 406 break; 407 } 408} 409 410 411/******************************************************************************* 412 * 413 * FUNCTION: AcpiDmDumpSerialBusVendorData 414 * 415 * PARAMETERS: Resource - Pointer to the resource descriptor 416 * 417 * RETURN: None 418 * 419 * DESCRIPTION: Dump optional serial bus vendor data 420 * 421 ******************************************************************************/ 422 423static void 424AcpiDmDumpSerialBusVendorData ( 425 AML_RESOURCE *Resource, 426 UINT32 Level) 427{ 428 UINT8 *VendorData; 429 UINT32 VendorLength; 430 431 432 /* Get the (optional) vendor data and length */ 433 434 switch (Resource->CommonSerialBus.Type) 435 { 436 case AML_RESOURCE_I2C_SERIALBUSTYPE: 437 438 VendorLength = Resource->CommonSerialBus.TypeDataLength - 439 AML_RESOURCE_I2C_MIN_DATA_LEN; 440 441 VendorData = ACPI_ADD_PTR (UINT8, Resource, 442 sizeof (AML_RESOURCE_I2C_SERIALBUS)); 443 break; 444 445 case AML_RESOURCE_SPI_SERIALBUSTYPE: 446 447 VendorLength = Resource->CommonSerialBus.TypeDataLength - 448 AML_RESOURCE_SPI_MIN_DATA_LEN; 449 450 VendorData = ACPI_ADD_PTR (UINT8, Resource, 451 sizeof (AML_RESOURCE_SPI_SERIALBUS)); 452 break; 453 454 case AML_RESOURCE_UART_SERIALBUSTYPE: 455 456 VendorLength = Resource->CommonSerialBus.TypeDataLength - 457 AML_RESOURCE_UART_MIN_DATA_LEN; 458 459 VendorData = ACPI_ADD_PTR (UINT8, Resource, 460 sizeof (AML_RESOURCE_UART_SERIALBUS)); 461 break; 462 463 default: 464 465 return; 466 } 467 468 /* Dump the vendor bytes as a RawDataBuffer object */ 469 470 AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); 471} 472 473 474/******************************************************************************* 475 * 476 * FUNCTION: AcpiDmI2cSerialBusDescriptor 477 * 478 * PARAMETERS: Info - Extra resource info 479 * Resource - Pointer to the resource descriptor 480 * Length - Length of the descriptor in bytes 481 * Level - Current source code indentation level 482 * 483 * RETURN: None 484 * 485 * DESCRIPTION: Decode a I2C serial bus descriptor 486 * 487 ******************************************************************************/ 488 489static void 490AcpiDmI2cSerialBusDescriptor ( 491 ACPI_OP_WALK_INFO *Info, 492 AML_RESOURCE *Resource, 493 UINT32 Length, 494 UINT32 Level) 495{ 496 UINT32 ResourceSourceOffset; 497 char *DeviceName; 498 499 500 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */ 501 502 AcpiDmIndent (Level); 503 AcpiOsPrintf ("I2cSerialBus (0x%4.4X, %s, 0x%8.8X,\n", 504 Resource->I2cSerialBus.SlaveAddress, 505 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)], 506 Resource->I2cSerialBus.ConnectionSpeed); 507 508 AcpiDmIndent (Level + 1); 509 AcpiOsPrintf ("%s, ", 510 AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]); 511 512 /* ResourceSource is a required field */ 513 514 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 515 Resource->CommonSerialBus.TypeDataLength; 516 517 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), 518 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 519 520 /* ResourceSourceIndex, ResourceUsage */ 521 522 AcpiOsPrintf (",\n"); 523 AcpiDmIndent (Level + 1); 524 AcpiOsPrintf ("0x%2.2X, ", Resource->I2cSerialBus.ResSourceIndex); 525 526 AcpiOsPrintf ("%s, ", 527 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->I2cSerialBus.Flags, 1)]); 528 529 /* Insert a descriptor name */ 530 531 AcpiDmDescriptorName (); 532 AcpiOsPrintf (",\n"); 533 534 /* Dump the vendor data */ 535 536 AcpiDmIndent (Level + 1); 537 AcpiDmDumpSerialBusVendorData (Resource, Level); 538 AcpiOsPrintf (")\n"); 539 540#ifndef _KERNEL 541 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 542#endif 543} 544 545 546/******************************************************************************* 547 * 548 * FUNCTION: AcpiDmSpiSerialBusDescriptor 549 * 550 * PARAMETERS: Info - Extra resource info 551 * Resource - Pointer to the resource descriptor 552 * Length - Length of the descriptor in bytes 553 * Level - Current source code indentation level 554 * 555 * RETURN: None 556 * 557 * DESCRIPTION: Decode a SPI serial bus descriptor 558 * 559 ******************************************************************************/ 560 561static void 562AcpiDmSpiSerialBusDescriptor ( 563 ACPI_OP_WALK_INFO *Info, 564 AML_RESOURCE *Resource, 565 UINT32 Length, 566 UINT32 Level) 567{ 568 UINT32 ResourceSourceOffset; 569 char *DeviceName; 570 571 572 /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */ 573 574 AcpiDmIndent (Level); 575 AcpiOsPrintf ("SpiSerialBus (0x%4.4X, %s, %s, 0x%2.2X,\n", 576 Resource->SpiSerialBus.DeviceSelection, 577 AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)], 578 AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)], 579 Resource->SpiSerialBus.DataBitLength); 580 581 /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */ 582 583 AcpiDmIndent (Level + 1); 584 AcpiOsPrintf ("%s, 0x%8.8X, %s,\n", 585 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)], 586 Resource->SpiSerialBus.ConnectionSpeed, 587 AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]); 588 589 AcpiDmIndent (Level + 1); 590 AcpiOsPrintf ("%s, ", 591 AcpiGbl_CphDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPhase)]); 592 593 /* ResourceSource is a required field */ 594 595 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 596 Resource->CommonSerialBus.TypeDataLength; 597 598 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), 599 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 600 601 /* ResourceSourceIndex, ResourceUsage */ 602 603 AcpiOsPrintf (",\n"); 604 AcpiDmIndent (Level + 1); 605 AcpiOsPrintf ("0x%2.2X, ", Resource->SpiSerialBus.ResSourceIndex); 606 607 AcpiOsPrintf ("%s, ", 608 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.Flags, 1)]); 609 610 /* Insert a descriptor name */ 611 612 AcpiDmDescriptorName (); 613 AcpiOsPrintf (",\n"); 614 615 /* Dump the vendor data */ 616 617 AcpiDmIndent (Level + 1); 618 AcpiDmDumpSerialBusVendorData (Resource, Level); 619 AcpiOsPrintf (")\n"); 620 621#ifndef _KERNEL 622 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 623#endif 624} 625 626 627/******************************************************************************* 628 * 629 * FUNCTION: AcpiDmUartSerialBusDescriptor 630 * 631 * PARAMETERS: Info - Extra resource info 632 * Resource - Pointer to the resource descriptor 633 * Length - Length of the descriptor in bytes 634 * Level - Current source code indentation level 635 * 636 * RETURN: None 637 * 638 * DESCRIPTION: Decode a UART serial bus descriptor 639 * 640 ******************************************************************************/ 641 642static void 643AcpiDmUartSerialBusDescriptor ( 644 ACPI_OP_WALK_INFO *Info, 645 AML_RESOURCE *Resource, 646 UINT32 Length, 647 UINT32 Level) 648{ 649 UINT32 ResourceSourceOffset; 650 char *DeviceName; 651 652 653 /* ConnectionSpeed, BitsPerByte, StopBits */ 654 655 AcpiDmIndent (Level); 656 AcpiOsPrintf ("UartSerialBus (0x%8.8X, %s, %s,\n", 657 Resource->UartSerialBus.DefaultBaudRate, 658 AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)], 659 AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]); 660 661 /* LinesInUse, IsBigEndian, Parity, FlowControl */ 662 663 AcpiDmIndent (Level + 1); 664 AcpiOsPrintf ("0x%2.2X, %s, %s, %s,\n", 665 Resource->UartSerialBus.LinesEnabled, 666 AcpiGbl_EdDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 7)], 667 AcpiGbl_PtDecode [ACPI_GET_3BIT_FLAG (Resource->UartSerialBus.Parity)], 668 AcpiGbl_FcDecode [ACPI_GET_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags)]); 669 670 /* ReceiveBufferSize, TransmitBufferSize */ 671 672 AcpiDmIndent (Level + 1); 673 AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ", 674 Resource->UartSerialBus.RxFifoSize, 675 Resource->UartSerialBus.TxFifoSize); 676 677 /* ResourceSource is a required field */ 678 679 ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + 680 Resource->CommonSerialBus.TypeDataLength; 681 682 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset), 683 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); 684 685 /* ResourceSourceIndex, ResourceUsage */ 686 687 AcpiOsPrintf (",\n"); 688 AcpiDmIndent (Level + 1); 689 AcpiOsPrintf ("0x%2.2X, ", Resource->UartSerialBus.ResSourceIndex); 690 691 AcpiOsPrintf ("%s, ", 692 AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->UartSerialBus.Flags, 1)]); 693 694 /* Insert a descriptor name */ 695 696 AcpiDmDescriptorName (); 697 AcpiOsPrintf (",\n"); 698 699 /* Dump the vendor data */ 700 701 AcpiDmIndent (Level + 1); 702 AcpiDmDumpSerialBusVendorData (Resource, Level); 703 AcpiOsPrintf (")\n"); 704 705#ifndef _KERNEL 706 MpSaveSerialInfo (Info->MappingOp, Resource, DeviceName); 707#endif 708} 709 710 711/******************************************************************************* 712 * 713 * FUNCTION: AcpiDmSerialBusDescriptor 714 * 715 * PARAMETERS: Info - Extra resource info 716 * Resource - Pointer to the resource descriptor 717 * Length - Length of the descriptor in bytes 718 * Level - Current source code indentation level 719 * 720 * RETURN: None 721 * 722 * DESCRIPTION: Decode a I2C/SPI/UART serial bus descriptor 723 * 724 ******************************************************************************/ 725 726void 727AcpiDmSerialBusDescriptor ( 728 ACPI_OP_WALK_INFO *Info, 729 AML_RESOURCE *Resource, 730 UINT32 Length, 731 UINT32 Level) 732{ 733 734 SerialBusResourceDispatch [Resource->CommonSerialBus.Type] ( 735 Info, Resource, Length, Level); 736} 737 738#endif 739