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