dmopcode.c revision 240716
1/******************************************************************************* 2 * 3 * Module Name: dmopcode - AML disassembler, specific AML opcodes 4 * 5 ******************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2012, 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/acparser.h> 47#include <contrib/dev/acpica/include/amlcode.h> 48#include <contrib/dev/acpica/include/acdisasm.h> 49#include <contrib/dev/acpica/include/acnamesp.h> 50 51#ifdef ACPI_DISASSEMBLER 52 53#define _COMPONENT ACPI_CA_DEBUGGER 54 ACPI_MODULE_NAME ("dmopcode") 55 56/* Local prototypes */ 57 58static void 59AcpiDmMatchKeyword ( 60 ACPI_PARSE_OBJECT *Op); 61 62 63/******************************************************************************* 64 * 65 * FUNCTION: AcpiDmPredefinedDescription 66 * 67 * PARAMETERS: Op - Name() parse object 68 * 69 * RETURN: None 70 * 71 * DESCRIPTION: Emit a description comment for a predefined ACPI name. 72 * Used for iASL compiler only. 73 * 74 ******************************************************************************/ 75 76void 77AcpiDmPredefinedDescription ( 78 ACPI_PARSE_OBJECT *Op) 79{ 80#ifdef ACPI_ASL_COMPILER 81 const AH_PREDEFINED_NAME *Info; 82 char *NameString; 83 int LastCharIsDigit; 84 int LastCharsAreHex; 85 86 87 if (!Op) 88 { 89 return; 90 } 91 92 /* Ensure that the comment field is emitted only once */ 93 94 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED) 95 { 96 return; 97 } 98 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED; 99 100 /* Predefined name must start with an underscore */ 101 102 NameString = ACPI_CAST_PTR (char, &Op->Named.Name); 103 if (NameString[0] != '_') 104 { 105 return; 106 } 107 108 /* 109 * Check for the special ACPI names: 110 * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a 111 * (where d=decimal_digit, x=hex_digit, a=anything) 112 * 113 * Convert these to the generic name for table lookup. 114 * Note: NameString is guaranteed to be upper case here. 115 */ 116 LastCharIsDigit = 117 (ACPI_IS_DIGIT (NameString[3])); /* d */ 118 LastCharsAreHex = 119 (ACPI_IS_XDIGIT (NameString[2]) && /* xx */ 120 ACPI_IS_XDIGIT (NameString[3])); 121 122 switch (NameString[1]) 123 { 124 case 'A': 125 if ((NameString[2] == 'C') && (LastCharIsDigit)) 126 { 127 NameString = "_ACx"; 128 } 129 else if ((NameString[2] == 'L') && (LastCharIsDigit)) 130 { 131 NameString = "_ALx"; 132 } 133 break; 134 135 case 'E': 136 if ((NameString[2] == 'J') && (LastCharIsDigit)) 137 { 138 NameString = "_EJx"; 139 } 140 else if (LastCharsAreHex) 141 { 142 NameString = "_Exx"; 143 } 144 break; 145 146 case 'L': 147 if (LastCharsAreHex) 148 { 149 NameString = "_Lxx"; 150 } 151 break; 152 153 case 'Q': 154 if (LastCharsAreHex) 155 { 156 NameString = "_Qxx"; 157 } 158 break; 159 160 case 'T': 161 if (NameString[2] == '_') 162 { 163 NameString = "_T_x"; 164 } 165 break; 166 167 case 'W': 168 if (LastCharsAreHex) 169 { 170 NameString = "_Wxx"; 171 } 172 break; 173 174 default: 175 break; 176 } 177 178 /* Match the name in the info table */ 179 180 for (Info = AslPredefinedInfo; Info->Name; Info++) 181 { 182 if (ACPI_COMPARE_NAME (NameString, Info->Name)) 183 { 184 AcpiOsPrintf (" // %4.4s: %s", 185 NameString, ACPI_CAST_PTR (char, Info->Description)); 186 return; 187 } 188 } 189 190#endif 191 return; 192} 193 194 195/******************************************************************************* 196 * 197 * FUNCTION: AcpiDmFieldPredefinedDescription 198 * 199 * PARAMETERS: Op - Parse object 200 * 201 * RETURN: None 202 * 203 * DESCRIPTION: Emit a description comment for a resource descriptor tag 204 * (which is a predefined ACPI name.) Used for iASL compiler only. 205 * 206 ******************************************************************************/ 207 208void 209AcpiDmFieldPredefinedDescription ( 210 ACPI_PARSE_OBJECT *Op) 211{ 212#ifdef ACPI_ASL_COMPILER 213 ACPI_PARSE_OBJECT *IndexOp; 214 char *Tag; 215 const ACPI_OPCODE_INFO *OpInfo; 216 const AH_PREDEFINED_NAME *Info; 217 218 219 if (!Op) 220 { 221 return; 222 } 223 224 /* Ensure that the comment field is emitted only once */ 225 226 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED) 227 { 228 return; 229 } 230 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED; 231 232 /* 233 * Op must be one of the Create* operators: CreateField, CreateBitField, 234 * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField 235 */ 236 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 237 if (!(OpInfo->Flags & AML_CREATE)) 238 { 239 return; 240 } 241 242 /* Second argument is the Index argument */ 243 244 IndexOp = Op->Common.Value.Arg; 245 IndexOp = IndexOp->Common.Next; 246 247 /* Index argument must be a namepath */ 248 249 if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP) 250 { 251 return; 252 } 253 254 /* Major cheat: We previously put the Tag ptr in the Node field */ 255 256 Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node); 257 if (!Tag) 258 { 259 return; 260 } 261 262 /* Match the name in the info table */ 263 264 for (Info = AslPredefinedInfo; Info->Name; Info++) 265 { 266 if (ACPI_COMPARE_NAME (Tag, Info->Name)) 267 { 268 AcpiOsPrintf (" // %4.4s: %s", Tag, 269 ACPI_CAST_PTR (char, Info->Description)); 270 return; 271 } 272 } 273 274#endif 275 return; 276} 277 278 279/******************************************************************************* 280 * 281 * FUNCTION: AcpiDmMethodFlags 282 * 283 * PARAMETERS: Op - Method Object to be examined 284 * 285 * RETURN: None 286 * 287 * DESCRIPTION: Decode control method flags 288 * 289 ******************************************************************************/ 290 291void 292AcpiDmMethodFlags ( 293 ACPI_PARSE_OBJECT *Op) 294{ 295 UINT32 Flags; 296 UINT32 Args; 297 298 299 /* The next Op contains the flags */ 300 301 Op = AcpiPsGetDepthNext (NULL, Op); 302 Flags = (UINT8) Op->Common.Value.Integer; 303 Args = Flags & 0x07; 304 305 /* Mark the Op as completed */ 306 307 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 308 309 /* 1) Method argument count */ 310 311 AcpiOsPrintf (", %u, ", Args); 312 313 /* 2) Serialize rule */ 314 315 if (!(Flags & 0x08)) 316 { 317 AcpiOsPrintf ("Not"); 318 } 319 320 AcpiOsPrintf ("Serialized"); 321 322 /* 3) SyncLevel */ 323 324 if (Flags & 0xF0) 325 { 326 AcpiOsPrintf (", %u", Flags >> 4); 327 } 328} 329 330 331/******************************************************************************* 332 * 333 * FUNCTION: AcpiDmFieldFlags 334 * 335 * PARAMETERS: Op - Field Object to be examined 336 * 337 * RETURN: None 338 * 339 * DESCRIPTION: Decode Field definition flags 340 * 341 ******************************************************************************/ 342 343void 344AcpiDmFieldFlags ( 345 ACPI_PARSE_OBJECT *Op) 346{ 347 UINT32 Flags; 348 349 350 Op = Op->Common.Next; 351 Flags = (UINT8) Op->Common.Value.Integer; 352 353 /* Mark the Op as completed */ 354 355 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 356 357 AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]); 358 AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]); 359 AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]); 360} 361 362 363/******************************************************************************* 364 * 365 * FUNCTION: AcpiDmAddressSpace 366 * 367 * PARAMETERS: SpaceId - ID to be translated 368 * 369 * RETURN: None 370 * 371 * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword 372 * 373 ******************************************************************************/ 374 375void 376AcpiDmAddressSpace ( 377 UINT8 SpaceId) 378{ 379 380 if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) 381 { 382 if (SpaceId == 0x7F) 383 { 384 AcpiOsPrintf ("FFixedHW, "); 385 } 386 else 387 { 388 AcpiOsPrintf ("0x%.2X, ", SpaceId); 389 } 390 } 391 else 392 { 393 AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]); 394 } 395} 396 397 398/******************************************************************************* 399 * 400 * FUNCTION: AcpiDmRegionFlags 401 * 402 * PARAMETERS: Op - Object to be examined 403 * 404 * RETURN: None 405 * 406 * DESCRIPTION: Decode OperationRegion flags 407 * 408 ******************************************************************************/ 409 410void 411AcpiDmRegionFlags ( 412 ACPI_PARSE_OBJECT *Op) 413{ 414 415 416 /* The next Op contains the SpaceId */ 417 418 Op = AcpiPsGetDepthNext (NULL, Op); 419 420 /* Mark the Op as completed */ 421 422 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 423 424 AcpiOsPrintf (", "); 425 AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer); 426} 427 428 429/******************************************************************************* 430 * 431 * FUNCTION: AcpiDmMatchOp 432 * 433 * PARAMETERS: Op - Match Object to be examined 434 * 435 * RETURN: None 436 * 437 * DESCRIPTION: Decode Match opcode operands 438 * 439 ******************************************************************************/ 440 441void 442AcpiDmMatchOp ( 443 ACPI_PARSE_OBJECT *Op) 444{ 445 ACPI_PARSE_OBJECT *NextOp; 446 447 448 NextOp = AcpiPsGetDepthNext (NULL, Op); 449 NextOp = NextOp->Common.Next; 450 451 if (!NextOp) 452 { 453 /* Handle partial tree during single-step */ 454 455 return; 456 } 457 458 /* Mark the two nodes that contain the encoding for the match keywords */ 459 460 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; 461 462 NextOp = NextOp->Common.Next; 463 NextOp = NextOp->Common.Next; 464 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; 465} 466 467 468/******************************************************************************* 469 * 470 * FUNCTION: AcpiDmMatchKeyword 471 * 472 * PARAMETERS: Op - Match Object to be examined 473 * 474 * RETURN: None 475 * 476 * DESCRIPTION: Decode Match opcode operands 477 * 478 ******************************************************************************/ 479 480static void 481AcpiDmMatchKeyword ( 482 ACPI_PARSE_OBJECT *Op) 483{ 484 485 486 if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE) 487 { 488 AcpiOsPrintf ("/* Unknown Match Keyword encoding */"); 489 } 490 else 491 { 492 AcpiOsPrintf ("%s", ACPI_CAST_PTR (char, 493 AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer])); 494 } 495} 496 497 498/******************************************************************************* 499 * 500 * FUNCTION: AcpiDmDisassembleOneOp 501 * 502 * PARAMETERS: WalkState - Current walk info 503 * Info - Parse tree walk info 504 * Op - Op that is to be printed 505 * 506 * RETURN: None 507 * 508 * DESCRIPTION: Disassemble a single AML opcode 509 * 510 ******************************************************************************/ 511 512void 513AcpiDmDisassembleOneOp ( 514 ACPI_WALK_STATE *WalkState, 515 ACPI_OP_WALK_INFO *Info, 516 ACPI_PARSE_OBJECT *Op) 517{ 518 const ACPI_OPCODE_INFO *OpInfo = NULL; 519 UINT32 Offset; 520 UINT32 Length; 521 ACPI_PARSE_OBJECT *Child; 522 ACPI_STATUS Status; 523 UINT8 *Aml; 524 525 526 if (!Op) 527 { 528 AcpiOsPrintf ("<NULL OP PTR>"); 529 return; 530 } 531 532 switch (Op->Common.DisasmOpcode) 533 { 534 case ACPI_DASM_MATCHOP: 535 536 AcpiDmMatchKeyword (Op); 537 return; 538 539 case ACPI_DASM_LNOT_SUFFIX: 540 switch (Op->Common.AmlOpcode) 541 { 542 case AML_LEQUAL_OP: 543 AcpiOsPrintf ("LNotEqual"); 544 break; 545 546 case AML_LGREATER_OP: 547 AcpiOsPrintf ("LLessEqual"); 548 break; 549 550 case AML_LLESS_OP: 551 AcpiOsPrintf ("LGreaterEqual"); 552 break; 553 554 default: 555 break; 556 } 557 Op->Common.DisasmOpcode = 0; 558 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 559 return; 560 561 default: 562 break; 563 } 564 565 566 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 567 568 /* The op and arguments */ 569 570 switch (Op->Common.AmlOpcode) 571 { 572 case AML_LNOT_OP: 573 574 Child = Op->Common.Value.Arg; 575 if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) || 576 (Child->Common.AmlOpcode == AML_LGREATER_OP) || 577 (Child->Common.AmlOpcode == AML_LLESS_OP)) 578 { 579 Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX; 580 Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; 581 } 582 else 583 { 584 AcpiOsPrintf ("%s", OpInfo->Name); 585 } 586 break; 587 588 case AML_BYTE_OP: 589 590 AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer); 591 break; 592 593 594 case AML_WORD_OP: 595 596 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) 597 { 598 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer); 599 } 600 else 601 { 602 AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer); 603 } 604 break; 605 606 607 case AML_DWORD_OP: 608 609 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) 610 { 611 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer); 612 } 613 else 614 { 615 AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer); 616 } 617 break; 618 619 620 case AML_QWORD_OP: 621 622 AcpiOsPrintf ("0x%8.8X%8.8X", 623 ACPI_FORMAT_UINT64 (Op->Common.Value.Integer)); 624 break; 625 626 627 case AML_STRING_OP: 628 629 AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX); 630 break; 631 632 633 case AML_BUFFER_OP: 634 635 /* 636 * Determine the type of buffer. We can have one of the following: 637 * 638 * 1) ResourceTemplate containing Resource Descriptors. 639 * 2) Unicode String buffer 640 * 3) ASCII String buffer 641 * 4) Raw data buffer (if none of the above) 642 * 643 * Since there are no special AML opcodes to differentiate these 644 * types of buffers, we have to closely look at the data in the 645 * buffer to determine the type. 646 */ 647 if (!AcpiGbl_NoResourceDisassembly) 648 { 649 Status = AcpiDmIsResourceTemplate (Op); 650 if (ACPI_SUCCESS (Status)) 651 { 652 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; 653 AcpiOsPrintf ("ResourceTemplate"); 654 break; 655 } 656 else if (Status == AE_AML_NO_RESOURCE_END_TAG) 657 { 658 AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ "); 659 } 660 } 661 662 if (AcpiDmIsUnicodeBuffer (Op)) 663 { 664 Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; 665 AcpiOsPrintf ("Unicode ("); 666 } 667 else if (AcpiDmIsStringBuffer (Op)) 668 { 669 Op->Common.DisasmOpcode = ACPI_DASM_STRING; 670 AcpiOsPrintf ("Buffer"); 671 } 672 else if (AcpiDmIsPldBuffer (Op)) 673 { 674 Op->Common.DisasmOpcode = ACPI_DASM_PLD_METHOD; 675 AcpiOsPrintf ("Buffer"); 676 } 677 else 678 { 679 Op->Common.DisasmOpcode = ACPI_DASM_BUFFER; 680 AcpiOsPrintf ("Buffer"); 681 } 682 break; 683 684 685 case AML_INT_STATICSTRING_OP: 686 687 if (Op->Common.Value.String) 688 { 689 AcpiOsPrintf ("%s", Op->Common.Value.String); 690 } 691 else 692 { 693 AcpiOsPrintf ("\"<NULL STATIC STRING PTR>\""); 694 } 695 break; 696 697 698 case AML_INT_NAMEPATH_OP: 699 700 AcpiDmNamestring (Op->Common.Value.Name); 701 break; 702 703 704 case AML_INT_NAMEDFIELD_OP: 705 706 Length = AcpiDmDumpName (Op->Named.Name); 707 AcpiOsPrintf (",%*.s %u", (unsigned) (5 - Length), " ", 708 (UINT32) Op->Common.Value.Integer); 709 AcpiDmCommaIfFieldMember (Op); 710 711 Info->BitOffset += (UINT32) Op->Common.Value.Integer; 712 break; 713 714 715 case AML_INT_RESERVEDFIELD_OP: 716 717 /* Offset() -- Must account for previous offsets */ 718 719 Offset = (UINT32) Op->Common.Value.Integer; 720 Info->BitOffset += Offset; 721 722 if (Info->BitOffset % 8 == 0) 723 { 724 AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset)); 725 } 726 else 727 { 728 AcpiOsPrintf (" , %u", Offset); 729 } 730 731 AcpiDmCommaIfFieldMember (Op); 732 break; 733 734 735 case AML_INT_ACCESSFIELD_OP: 736 case AML_INT_EXTACCESSFIELD_OP: 737 738 AcpiOsPrintf ("AccessAs (%s, ", 739 AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]); 740 741 AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8)); 742 743 if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP) 744 { 745 AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF)); 746 } 747 748 AcpiOsPrintf (")"); 749 AcpiDmCommaIfFieldMember (Op); 750 break; 751 752 753 case AML_INT_CONNECTION_OP: 754 755 /* 756 * Two types of Connection() - one with a buffer object, the 757 * other with a namestring that points to a buffer object. 758 */ 759 AcpiOsPrintf ("Connection ("); 760 Child = Op->Common.Value.Arg; 761 762 if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP) 763 { 764 AcpiOsPrintf ("\n"); 765 766 Aml = Child->Named.Data; 767 Length = (UINT32) Child->Common.Value.Integer; 768 769 Info->Level += 1; 770 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; 771 AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length); 772 773 Info->Level -= 1; 774 AcpiDmIndent (Info->Level); 775 } 776 else 777 { 778 AcpiDmNamestring (Child->Common.Value.Name); 779 } 780 781 AcpiOsPrintf (")"); 782 AcpiDmCommaIfFieldMember (Op); 783 AcpiOsPrintf ("\n"); 784 785 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */ 786 Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 787 break; 788 789 case AML_INT_BYTELIST_OP: 790 791 AcpiDmByteList (Info, Op); 792 break; 793 794 795 case AML_INT_METHODCALL_OP: 796 797 Op = AcpiPsGetDepthNext (NULL, Op); 798 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; 799 800 AcpiDmNamestring (Op->Common.Value.Name); 801 break; 802 803 804 default: 805 806 /* Just get the opcode name and print it */ 807 808 AcpiOsPrintf ("%s", OpInfo->Name); 809 810 811#ifdef ACPI_DEBUGGER 812 813 if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) && 814 (WalkState) && 815 (WalkState->Results) && 816 (WalkState->ResultCount)) 817 { 818 AcpiDmDecodeInternalObject ( 819 WalkState->Results->Results.ObjDesc [ 820 (WalkState->ResultCount - 1) % 821 ACPI_RESULTS_FRAME_OBJ_NUM]); 822 } 823#endif 824 825 break; 826 } 827} 828 829#endif /* ACPI_DISASSEMBLER */ 830