Home | History | Annotate | Line # | Download | only in disassembler
dmopcode.c revision 1.1.1.4.2.2
      1          1.1    jruoho /*******************************************************************************
      2          1.1    jruoho  *
      3          1.1    jruoho  * Module Name: dmopcode - AML disassembler, specific AML opcodes
      4          1.1    jruoho  *
      5          1.1    jruoho  ******************************************************************************/
      6          1.1    jruoho 
      7      1.1.1.2    jruoho /*
      8  1.1.1.4.2.1     skrll  * Copyright (C) 2000 - 2015, Intel Corp.
      9          1.1    jruoho  * All rights reserved.
     10          1.1    jruoho  *
     11      1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12      1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13      1.1.1.2    jruoho  * are met:
     14      1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15      1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16      1.1.1.2    jruoho  *    without modification.
     17      1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18      1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19      1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20      1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21      1.1.1.2    jruoho  *    binary redistribution.
     22      1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23      1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24      1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25      1.1.1.2    jruoho  *
     26      1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27      1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28      1.1.1.2    jruoho  * Software Foundation.
     29      1.1.1.2    jruoho  *
     30      1.1.1.2    jruoho  * NO WARRANTY
     31      1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32      1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33      1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34      1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35      1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36      1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37      1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38      1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39      1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40      1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41      1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42      1.1.1.2    jruoho  */
     43          1.1    jruoho 
     44          1.1    jruoho #include "acpi.h"
     45          1.1    jruoho #include "accommon.h"
     46          1.1    jruoho #include "acparser.h"
     47          1.1    jruoho #include "amlcode.h"
     48          1.1    jruoho #include "acdisasm.h"
     49      1.1.1.4  christos #include "acinterp.h"
     50      1.1.1.4  christos #include "acnamesp.h"
     51  1.1.1.4.2.2     skrll #include "acdebug.h"
     52          1.1    jruoho 
     53          1.1    jruoho #ifdef ACPI_DISASSEMBLER
     54          1.1    jruoho 
     55          1.1    jruoho #define _COMPONENT          ACPI_CA_DEBUGGER
     56          1.1    jruoho         ACPI_MODULE_NAME    ("dmopcode")
     57          1.1    jruoho 
     58  1.1.1.4.2.1     skrll 
     59          1.1    jruoho /* Local prototypes */
     60          1.1    jruoho 
     61          1.1    jruoho static void
     62          1.1    jruoho AcpiDmMatchKeyword (
     63          1.1    jruoho     ACPI_PARSE_OBJECT       *Op);
     64          1.1    jruoho 
     65          1.1    jruoho 
     66          1.1    jruoho /*******************************************************************************
     67          1.1    jruoho  *
     68      1.1.1.4  christos  * FUNCTION:    AcpiDmDisplayTargetPathname
     69      1.1.1.4  christos  *
     70      1.1.1.4  christos  * PARAMETERS:  Op              - Parse object
     71      1.1.1.4  christos  *
     72      1.1.1.4  christos  * RETURN:      None
     73      1.1.1.4  christos  *
     74      1.1.1.4  christos  * DESCRIPTION: For AML opcodes that have a target operand, display the full
     75      1.1.1.4  christos  *              pathname for the target, in a comment field. Handles Return()
     76      1.1.1.4  christos  *              statements also.
     77      1.1.1.4  christos  *
     78      1.1.1.4  christos  ******************************************************************************/
     79      1.1.1.4  christos 
     80      1.1.1.4  christos void
     81      1.1.1.4  christos AcpiDmDisplayTargetPathname (
     82      1.1.1.4  christos     ACPI_PARSE_OBJECT       *Op)
     83      1.1.1.4  christos {
     84      1.1.1.4  christos     ACPI_PARSE_OBJECT       *NextOp;
     85      1.1.1.4  christos     ACPI_PARSE_OBJECT       *PrevOp = NULL;
     86      1.1.1.4  christos     char                    *Pathname;
     87      1.1.1.4  christos     const ACPI_OPCODE_INFO  *OpInfo;
     88      1.1.1.4  christos 
     89      1.1.1.4  christos 
     90      1.1.1.4  christos     if (Op->Common.AmlOpcode == AML_RETURN_OP)
     91      1.1.1.4  christos     {
     92      1.1.1.4  christos         PrevOp = Op->Asl.Value.Arg;
     93      1.1.1.4  christos     }
     94      1.1.1.4  christos     else
     95      1.1.1.4  christos     {
     96      1.1.1.4  christos         OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
     97      1.1.1.4  christos         if (!(OpInfo->Flags & AML_HAS_TARGET))
     98      1.1.1.4  christos         {
     99      1.1.1.4  christos             return;
    100      1.1.1.4  christos         }
    101      1.1.1.4  christos 
    102      1.1.1.4  christos         /* Target is the last Op in the arg list */
    103      1.1.1.4  christos 
    104      1.1.1.4  christos         NextOp = Op->Asl.Value.Arg;
    105      1.1.1.4  christos         while (NextOp)
    106      1.1.1.4  christos         {
    107      1.1.1.4  christos             PrevOp = NextOp;
    108      1.1.1.4  christos             NextOp = PrevOp->Asl.Next;
    109      1.1.1.4  christos         }
    110      1.1.1.4  christos     }
    111      1.1.1.4  christos 
    112      1.1.1.4  christos     if (!PrevOp)
    113      1.1.1.4  christos     {
    114      1.1.1.4  christos         return;
    115      1.1.1.4  christos     }
    116      1.1.1.4  christos 
    117      1.1.1.4  christos     /* We must have a namepath AML opcode */
    118      1.1.1.4  christos 
    119      1.1.1.4  christos     if (PrevOp->Asl.AmlOpcode != AML_INT_NAMEPATH_OP)
    120      1.1.1.4  christos     {
    121      1.1.1.4  christos         return;
    122      1.1.1.4  christos     }
    123      1.1.1.4  christos 
    124      1.1.1.4  christos     /* A null string is the "no target specified" case */
    125      1.1.1.4  christos 
    126      1.1.1.4  christos     if (!PrevOp->Asl.Value.String)
    127      1.1.1.4  christos     {
    128      1.1.1.4  christos         return;
    129      1.1.1.4  christos     }
    130      1.1.1.4  christos 
    131      1.1.1.4  christos     /* No node means "unresolved external reference" */
    132      1.1.1.4  christos 
    133      1.1.1.4  christos     if (!PrevOp->Asl.Node)
    134      1.1.1.4  christos     {
    135      1.1.1.4  christos         AcpiOsPrintf (" /* External reference */");
    136      1.1.1.4  christos         return;
    137      1.1.1.4  christos     }
    138      1.1.1.4  christos 
    139      1.1.1.4  christos     /* Ignore if path is already from the root */
    140      1.1.1.4  christos 
    141      1.1.1.4  christos     if (*PrevOp->Asl.Value.String == '\\')
    142      1.1.1.4  christos     {
    143      1.1.1.4  christos         return;
    144      1.1.1.4  christos     }
    145      1.1.1.4  christos 
    146      1.1.1.4  christos     /* Now: we can get the full pathname */
    147      1.1.1.4  christos 
    148      1.1.1.4  christos     Pathname = AcpiNsGetExternalPathname (PrevOp->Asl.Node);
    149      1.1.1.4  christos     if (!Pathname)
    150      1.1.1.4  christos     {
    151      1.1.1.4  christos         return;
    152      1.1.1.4  christos     }
    153      1.1.1.4  christos 
    154      1.1.1.4  christos     AcpiOsPrintf (" /* %s */", Pathname);
    155      1.1.1.4  christos     ACPI_FREE (Pathname);
    156      1.1.1.4  christos }
    157      1.1.1.4  christos 
    158      1.1.1.4  christos 
    159      1.1.1.4  christos /*******************************************************************************
    160      1.1.1.4  christos  *
    161      1.1.1.4  christos  * FUNCTION:    AcpiDmNotifyDescription
    162      1.1.1.4  christos  *
    163      1.1.1.4  christos  * PARAMETERS:  Op              - Name() parse object
    164      1.1.1.4  christos  *
    165      1.1.1.4  christos  * RETURN:      None
    166      1.1.1.4  christos  *
    167      1.1.1.4  christos  * DESCRIPTION: Emit a description comment for the value associated with a
    168      1.1.1.4  christos  *              Notify() operator.
    169      1.1.1.4  christos  *
    170      1.1.1.4  christos  ******************************************************************************/
    171      1.1.1.4  christos 
    172      1.1.1.4  christos void
    173      1.1.1.4  christos AcpiDmNotifyDescription (
    174      1.1.1.4  christos     ACPI_PARSE_OBJECT       *Op)
    175      1.1.1.4  christos {
    176      1.1.1.4  christos     ACPI_PARSE_OBJECT       *NextOp;
    177      1.1.1.4  christos     ACPI_NAMESPACE_NODE     *Node;
    178      1.1.1.4  christos     UINT8                   NotifyValue;
    179      1.1.1.4  christos     UINT8                   Type = ACPI_TYPE_ANY;
    180      1.1.1.4  christos 
    181      1.1.1.4  christos 
    182      1.1.1.4  christos     /* The notify value is the second argument */
    183      1.1.1.4  christos 
    184      1.1.1.4  christos     NextOp = Op->Asl.Value.Arg;
    185      1.1.1.4  christos     NextOp = NextOp->Asl.Next;
    186      1.1.1.4  christos 
    187      1.1.1.4  christos     switch (NextOp->Common.AmlOpcode)
    188      1.1.1.4  christos     {
    189      1.1.1.4  christos     case AML_ZERO_OP:
    190      1.1.1.4  christos     case AML_ONE_OP:
    191      1.1.1.4  christos 
    192      1.1.1.4  christos         NotifyValue = (UINT8) NextOp->Common.AmlOpcode;
    193      1.1.1.4  christos         break;
    194      1.1.1.4  christos 
    195      1.1.1.4  christos     case AML_BYTE_OP:
    196      1.1.1.4  christos 
    197      1.1.1.4  christos         NotifyValue = (UINT8) NextOp->Asl.Value.Integer;
    198      1.1.1.4  christos         break;
    199      1.1.1.4  christos 
    200      1.1.1.4  christos     default:
    201      1.1.1.4  christos         return;
    202      1.1.1.4  christos     }
    203      1.1.1.4  christos 
    204      1.1.1.4  christos     /*
    205      1.1.1.4  christos      * Attempt to get the namespace node so we can determine the object type.
    206      1.1.1.4  christos      * Some notify values are dependent on the object type (Device, Thermal,
    207      1.1.1.4  christos      * or Processor).
    208      1.1.1.4  christos      */
    209      1.1.1.4  christos     Node = Op->Asl.Node;
    210      1.1.1.4  christos     if (Node)
    211      1.1.1.4  christos     {
    212      1.1.1.4  christos         Type = Node->Type;
    213      1.1.1.4  christos     }
    214      1.1.1.4  christos 
    215      1.1.1.4  christos     AcpiOsPrintf (" // %s", AcpiUtGetNotifyName (NotifyValue, Type));
    216      1.1.1.4  christos }
    217      1.1.1.4  christos 
    218      1.1.1.4  christos 
    219      1.1.1.4  christos /*******************************************************************************
    220      1.1.1.4  christos  *
    221      1.1.1.3  christos  * FUNCTION:    AcpiDmPredefinedDescription
    222      1.1.1.3  christos  *
    223      1.1.1.3  christos  * PARAMETERS:  Op              - Name() parse object
    224      1.1.1.3  christos  *
    225      1.1.1.3  christos  * RETURN:      None
    226      1.1.1.3  christos  *
    227      1.1.1.3  christos  * DESCRIPTION: Emit a description comment for a predefined ACPI name.
    228      1.1.1.3  christos  *              Used for iASL compiler only.
    229      1.1.1.3  christos  *
    230      1.1.1.3  christos  ******************************************************************************/
    231      1.1.1.3  christos 
    232      1.1.1.3  christos void
    233      1.1.1.3  christos AcpiDmPredefinedDescription (
    234      1.1.1.3  christos     ACPI_PARSE_OBJECT       *Op)
    235      1.1.1.3  christos {
    236      1.1.1.3  christos #ifdef ACPI_ASL_COMPILER
    237      1.1.1.3  christos     const AH_PREDEFINED_NAME    *Info;
    238      1.1.1.3  christos     char                        *NameString;
    239      1.1.1.3  christos     int                         LastCharIsDigit;
    240      1.1.1.3  christos     int                         LastCharsAreHex;
    241      1.1.1.3  christos 
    242      1.1.1.3  christos 
    243      1.1.1.3  christos     if (!Op)
    244      1.1.1.3  christos     {
    245      1.1.1.3  christos         return;
    246      1.1.1.3  christos     }
    247      1.1.1.3  christos 
    248      1.1.1.3  christos     /* Ensure that the comment field is emitted only once */
    249      1.1.1.3  christos 
    250      1.1.1.3  christos     if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
    251      1.1.1.3  christos     {
    252      1.1.1.3  christos         return;
    253      1.1.1.3  christos     }
    254      1.1.1.3  christos     Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
    255      1.1.1.3  christos 
    256      1.1.1.3  christos     /* Predefined name must start with an underscore */
    257      1.1.1.3  christos 
    258      1.1.1.3  christos     NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
    259      1.1.1.3  christos     if (NameString[0] != '_')
    260      1.1.1.3  christos     {
    261      1.1.1.3  christos         return;
    262      1.1.1.3  christos     }
    263      1.1.1.3  christos 
    264      1.1.1.3  christos     /*
    265      1.1.1.3  christos      * Check for the special ACPI names:
    266      1.1.1.3  christos      * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a
    267      1.1.1.3  christos      * (where d=decimal_digit, x=hex_digit, a=anything)
    268      1.1.1.3  christos      *
    269      1.1.1.3  christos      * Convert these to the generic name for table lookup.
    270      1.1.1.3  christos      * Note: NameString is guaranteed to be upper case here.
    271      1.1.1.3  christos      */
    272      1.1.1.3  christos     LastCharIsDigit =
    273  1.1.1.4.2.2     skrll         (isdigit ((int) NameString[3]));    /* d */
    274      1.1.1.3  christos     LastCharsAreHex =
    275  1.1.1.4.2.2     skrll         (isxdigit ((int) NameString[2]) &&  /* xx */
    276  1.1.1.4.2.2     skrll          isxdigit ((int) NameString[3]));
    277      1.1.1.3  christos 
    278      1.1.1.3  christos     switch (NameString[1])
    279      1.1.1.3  christos     {
    280      1.1.1.3  christos     case 'A':
    281      1.1.1.3  christos 
    282      1.1.1.3  christos         if ((NameString[2] == 'C') && (LastCharIsDigit))
    283      1.1.1.3  christos         {
    284      1.1.1.3  christos             NameString = "_ACx";
    285      1.1.1.3  christos         }
    286      1.1.1.3  christos         else if ((NameString[2] == 'L') && (LastCharIsDigit))
    287      1.1.1.3  christos         {
    288      1.1.1.3  christos             NameString = "_ALx";
    289      1.1.1.3  christos         }
    290      1.1.1.3  christos         break;
    291      1.1.1.3  christos 
    292      1.1.1.3  christos     case 'E':
    293      1.1.1.3  christos 
    294      1.1.1.3  christos         if ((NameString[2] == 'J') && (LastCharIsDigit))
    295      1.1.1.3  christos         {
    296      1.1.1.3  christos             NameString = "_EJx";
    297      1.1.1.3  christos         }
    298      1.1.1.3  christos         else if (LastCharsAreHex)
    299      1.1.1.3  christos         {
    300      1.1.1.3  christos             NameString = "_Exx";
    301      1.1.1.3  christos         }
    302      1.1.1.3  christos         break;
    303      1.1.1.3  christos 
    304      1.1.1.3  christos     case 'L':
    305      1.1.1.3  christos 
    306      1.1.1.3  christos         if (LastCharsAreHex)
    307      1.1.1.3  christos         {
    308      1.1.1.3  christos             NameString = "_Lxx";
    309      1.1.1.3  christos         }
    310      1.1.1.3  christos         break;
    311      1.1.1.3  christos 
    312      1.1.1.3  christos     case 'Q':
    313      1.1.1.3  christos 
    314      1.1.1.3  christos         if (LastCharsAreHex)
    315      1.1.1.3  christos         {
    316      1.1.1.3  christos             NameString = "_Qxx";
    317      1.1.1.3  christos         }
    318      1.1.1.3  christos         break;
    319      1.1.1.3  christos 
    320      1.1.1.3  christos     case 'T':
    321      1.1.1.3  christos 
    322      1.1.1.3  christos         if (NameString[2] == '_')
    323      1.1.1.3  christos         {
    324      1.1.1.3  christos             NameString = "_T_x";
    325      1.1.1.3  christos         }
    326      1.1.1.3  christos         break;
    327      1.1.1.3  christos 
    328      1.1.1.3  christos     case 'W':
    329      1.1.1.3  christos 
    330      1.1.1.3  christos         if (LastCharsAreHex)
    331      1.1.1.3  christos         {
    332      1.1.1.3  christos             NameString = "_Wxx";
    333      1.1.1.3  christos         }
    334      1.1.1.3  christos         break;
    335      1.1.1.3  christos 
    336      1.1.1.3  christos     default:
    337      1.1.1.3  christos 
    338      1.1.1.3  christos         break;
    339      1.1.1.3  christos     }
    340      1.1.1.3  christos 
    341      1.1.1.3  christos     /* Match the name in the info table */
    342      1.1.1.3  christos 
    343      1.1.1.4  christos     Info = AcpiAhMatchPredefinedName (NameString);
    344      1.1.1.4  christos     if (Info)
    345      1.1.1.3  christos     {
    346      1.1.1.4  christos         AcpiOsPrintf ("  // %4.4s: %s",
    347      1.1.1.4  christos             NameString, ACPI_CAST_PTR (char, Info->Description));
    348      1.1.1.3  christos     }
    349      1.1.1.3  christos 
    350      1.1.1.3  christos #endif
    351      1.1.1.3  christos     return;
    352      1.1.1.3  christos }
    353      1.1.1.3  christos 
    354      1.1.1.3  christos 
    355      1.1.1.3  christos /*******************************************************************************
    356      1.1.1.3  christos  *
    357      1.1.1.3  christos  * FUNCTION:    AcpiDmFieldPredefinedDescription
    358      1.1.1.3  christos  *
    359      1.1.1.3  christos  * PARAMETERS:  Op              - Parse object
    360      1.1.1.3  christos  *
    361      1.1.1.3  christos  * RETURN:      None
    362      1.1.1.3  christos  *
    363      1.1.1.3  christos  * DESCRIPTION: Emit a description comment for a resource descriptor tag
    364      1.1.1.3  christos  *              (which is a predefined ACPI name.) Used for iASL compiler only.
    365      1.1.1.3  christos  *
    366      1.1.1.3  christos  ******************************************************************************/
    367      1.1.1.3  christos 
    368      1.1.1.3  christos void
    369      1.1.1.3  christos AcpiDmFieldPredefinedDescription (
    370      1.1.1.3  christos     ACPI_PARSE_OBJECT       *Op)
    371      1.1.1.3  christos {
    372      1.1.1.3  christos #ifdef ACPI_ASL_COMPILER
    373      1.1.1.3  christos     ACPI_PARSE_OBJECT       *IndexOp;
    374      1.1.1.3  christos     char                    *Tag;
    375      1.1.1.3  christos     const ACPI_OPCODE_INFO  *OpInfo;
    376      1.1.1.3  christos     const AH_PREDEFINED_NAME *Info;
    377      1.1.1.3  christos 
    378      1.1.1.3  christos 
    379      1.1.1.3  christos     if (!Op)
    380      1.1.1.3  christos     {
    381      1.1.1.3  christos         return;
    382      1.1.1.3  christos     }
    383      1.1.1.3  christos 
    384      1.1.1.3  christos     /* Ensure that the comment field is emitted only once */
    385      1.1.1.3  christos 
    386      1.1.1.3  christos     if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
    387      1.1.1.3  christos     {
    388      1.1.1.3  christos         return;
    389      1.1.1.3  christos     }
    390      1.1.1.3  christos     Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
    391      1.1.1.3  christos 
    392      1.1.1.3  christos     /*
    393      1.1.1.3  christos      * Op must be one of the Create* operators: CreateField, CreateBitField,
    394      1.1.1.3  christos      * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField
    395      1.1.1.3  christos      */
    396      1.1.1.3  christos     OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
    397      1.1.1.3  christos     if (!(OpInfo->Flags & AML_CREATE))
    398      1.1.1.3  christos     {
    399      1.1.1.3  christos         return;
    400      1.1.1.3  christos     }
    401      1.1.1.3  christos 
    402      1.1.1.3  christos     /* Second argument is the Index argument */
    403      1.1.1.3  christos 
    404      1.1.1.3  christos     IndexOp = Op->Common.Value.Arg;
    405      1.1.1.3  christos     IndexOp = IndexOp->Common.Next;
    406      1.1.1.3  christos 
    407      1.1.1.3  christos     /* Index argument must be a namepath */
    408      1.1.1.3  christos 
    409      1.1.1.3  christos     if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)
    410      1.1.1.3  christos     {
    411      1.1.1.3  christos         return;
    412      1.1.1.3  christos     }
    413      1.1.1.3  christos 
    414      1.1.1.3  christos     /* Major cheat: We previously put the Tag ptr in the Node field */
    415      1.1.1.3  christos 
    416      1.1.1.3  christos     Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node);
    417      1.1.1.3  christos     if (!Tag)
    418      1.1.1.3  christos     {
    419      1.1.1.3  christos         return;
    420      1.1.1.3  christos     }
    421      1.1.1.3  christos 
    422      1.1.1.3  christos     /* Match the name in the info table */
    423      1.1.1.3  christos 
    424      1.1.1.4  christos     Info = AcpiAhMatchPredefinedName (Tag);
    425      1.1.1.4  christos     if (Info)
    426      1.1.1.3  christos     {
    427      1.1.1.4  christos         AcpiOsPrintf ("  // %4.4s: %s", Tag,
    428      1.1.1.4  christos             ACPI_CAST_PTR (char, Info->Description));
    429      1.1.1.3  christos     }
    430      1.1.1.3  christos 
    431      1.1.1.3  christos #endif
    432      1.1.1.3  christos     return;
    433      1.1.1.3  christos }
    434      1.1.1.3  christos 
    435      1.1.1.3  christos 
    436      1.1.1.3  christos /*******************************************************************************
    437      1.1.1.3  christos  *
    438          1.1    jruoho  * FUNCTION:    AcpiDmMethodFlags
    439          1.1    jruoho  *
    440          1.1    jruoho  * PARAMETERS:  Op              - Method Object to be examined
    441          1.1    jruoho  *
    442          1.1    jruoho  * RETURN:      None
    443          1.1    jruoho  *
    444          1.1    jruoho  * DESCRIPTION: Decode control method flags
    445          1.1    jruoho  *
    446          1.1    jruoho  ******************************************************************************/
    447          1.1    jruoho 
    448          1.1    jruoho void
    449          1.1    jruoho AcpiDmMethodFlags (
    450          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    451          1.1    jruoho {
    452          1.1    jruoho     UINT32                  Flags;
    453          1.1    jruoho     UINT32                  Args;
    454          1.1    jruoho 
    455          1.1    jruoho 
    456          1.1    jruoho     /* The next Op contains the flags */
    457          1.1    jruoho 
    458          1.1    jruoho     Op = AcpiPsGetDepthNext (NULL, Op);
    459          1.1    jruoho     Flags = (UINT8) Op->Common.Value.Integer;
    460          1.1    jruoho     Args = Flags & 0x07;
    461          1.1    jruoho 
    462          1.1    jruoho     /* Mark the Op as completed */
    463          1.1    jruoho 
    464          1.1    jruoho     Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    465          1.1    jruoho 
    466          1.1    jruoho     /* 1) Method argument count */
    467          1.1    jruoho 
    468          1.1    jruoho     AcpiOsPrintf (", %u, ", Args);
    469          1.1    jruoho 
    470          1.1    jruoho     /* 2) Serialize rule */
    471          1.1    jruoho 
    472          1.1    jruoho     if (!(Flags & 0x08))
    473          1.1    jruoho     {
    474          1.1    jruoho         AcpiOsPrintf ("Not");
    475          1.1    jruoho     }
    476          1.1    jruoho 
    477          1.1    jruoho     AcpiOsPrintf ("Serialized");
    478          1.1    jruoho 
    479          1.1    jruoho     /* 3) SyncLevel */
    480          1.1    jruoho 
    481          1.1    jruoho     if (Flags & 0xF0)
    482          1.1    jruoho     {
    483          1.1    jruoho         AcpiOsPrintf (", %u", Flags >> 4);
    484          1.1    jruoho     }
    485          1.1    jruoho }
    486          1.1    jruoho 
    487          1.1    jruoho 
    488          1.1    jruoho /*******************************************************************************
    489          1.1    jruoho  *
    490          1.1    jruoho  * FUNCTION:    AcpiDmFieldFlags
    491          1.1    jruoho  *
    492          1.1    jruoho  * PARAMETERS:  Op              - Field Object to be examined
    493          1.1    jruoho  *
    494          1.1    jruoho  * RETURN:      None
    495          1.1    jruoho  *
    496          1.1    jruoho  * DESCRIPTION: Decode Field definition flags
    497          1.1    jruoho  *
    498          1.1    jruoho  ******************************************************************************/
    499          1.1    jruoho 
    500          1.1    jruoho void
    501          1.1    jruoho AcpiDmFieldFlags (
    502          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    503          1.1    jruoho {
    504          1.1    jruoho     UINT32                  Flags;
    505          1.1    jruoho 
    506          1.1    jruoho 
    507          1.1    jruoho     Op = Op->Common.Next;
    508          1.1    jruoho     Flags = (UINT8) Op->Common.Value.Integer;
    509          1.1    jruoho 
    510          1.1    jruoho     /* Mark the Op as completed */
    511          1.1    jruoho 
    512          1.1    jruoho     Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    513          1.1    jruoho 
    514          1.1    jruoho     AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]);
    515          1.1    jruoho     AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]);
    516          1.1    jruoho     AcpiOsPrintf ("%s)",  AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]);
    517          1.1    jruoho }
    518          1.1    jruoho 
    519          1.1    jruoho 
    520          1.1    jruoho /*******************************************************************************
    521          1.1    jruoho  *
    522          1.1    jruoho  * FUNCTION:    AcpiDmAddressSpace
    523          1.1    jruoho  *
    524          1.1    jruoho  * PARAMETERS:  SpaceId         - ID to be translated
    525          1.1    jruoho  *
    526          1.1    jruoho  * RETURN:      None
    527          1.1    jruoho  *
    528          1.1    jruoho  * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword
    529          1.1    jruoho  *
    530          1.1    jruoho  ******************************************************************************/
    531          1.1    jruoho 
    532          1.1    jruoho void
    533          1.1    jruoho AcpiDmAddressSpace (
    534          1.1    jruoho     UINT8                   SpaceId)
    535          1.1    jruoho {
    536          1.1    jruoho 
    537          1.1    jruoho     if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
    538          1.1    jruoho     {
    539          1.1    jruoho         if (SpaceId == 0x7F)
    540          1.1    jruoho         {
    541          1.1    jruoho             AcpiOsPrintf ("FFixedHW, ");
    542          1.1    jruoho         }
    543          1.1    jruoho         else
    544          1.1    jruoho         {
    545          1.1    jruoho             AcpiOsPrintf ("0x%.2X, ", SpaceId);
    546          1.1    jruoho         }
    547          1.1    jruoho     }
    548          1.1    jruoho     else
    549          1.1    jruoho     {
    550          1.1    jruoho         AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]);
    551          1.1    jruoho     }
    552          1.1    jruoho }
    553          1.1    jruoho 
    554          1.1    jruoho 
    555          1.1    jruoho /*******************************************************************************
    556          1.1    jruoho  *
    557          1.1    jruoho  * FUNCTION:    AcpiDmRegionFlags
    558          1.1    jruoho  *
    559          1.1    jruoho  * PARAMETERS:  Op              - Object to be examined
    560          1.1    jruoho  *
    561          1.1    jruoho  * RETURN:      None
    562          1.1    jruoho  *
    563          1.1    jruoho  * DESCRIPTION: Decode OperationRegion flags
    564          1.1    jruoho  *
    565          1.1    jruoho  ******************************************************************************/
    566          1.1    jruoho 
    567          1.1    jruoho void
    568          1.1    jruoho AcpiDmRegionFlags (
    569          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    570          1.1    jruoho {
    571          1.1    jruoho 
    572          1.1    jruoho     /* The next Op contains the SpaceId */
    573          1.1    jruoho 
    574          1.1    jruoho     Op = AcpiPsGetDepthNext (NULL, Op);
    575          1.1    jruoho 
    576          1.1    jruoho     /* Mark the Op as completed */
    577          1.1    jruoho 
    578          1.1    jruoho     Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    579          1.1    jruoho 
    580          1.1    jruoho     AcpiOsPrintf (", ");
    581          1.1    jruoho     AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer);
    582          1.1    jruoho }
    583          1.1    jruoho 
    584          1.1    jruoho 
    585          1.1    jruoho /*******************************************************************************
    586          1.1    jruoho  *
    587          1.1    jruoho  * FUNCTION:    AcpiDmMatchOp
    588          1.1    jruoho  *
    589          1.1    jruoho  * PARAMETERS:  Op              - Match Object to be examined
    590          1.1    jruoho  *
    591          1.1    jruoho  * RETURN:      None
    592          1.1    jruoho  *
    593          1.1    jruoho  * DESCRIPTION: Decode Match opcode operands
    594          1.1    jruoho  *
    595          1.1    jruoho  ******************************************************************************/
    596          1.1    jruoho 
    597          1.1    jruoho void
    598          1.1    jruoho AcpiDmMatchOp (
    599          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    600          1.1    jruoho {
    601          1.1    jruoho     ACPI_PARSE_OBJECT       *NextOp;
    602          1.1    jruoho 
    603          1.1    jruoho 
    604          1.1    jruoho     NextOp = AcpiPsGetDepthNext (NULL, Op);
    605          1.1    jruoho     NextOp = NextOp->Common.Next;
    606          1.1    jruoho 
    607          1.1    jruoho     if (!NextOp)
    608          1.1    jruoho     {
    609          1.1    jruoho         /* Handle partial tree during single-step */
    610          1.1    jruoho 
    611          1.1    jruoho         return;
    612          1.1    jruoho     }
    613          1.1    jruoho 
    614          1.1    jruoho     /* Mark the two nodes that contain the encoding for the match keywords */
    615          1.1    jruoho 
    616          1.1    jruoho     NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
    617          1.1    jruoho 
    618          1.1    jruoho     NextOp = NextOp->Common.Next;
    619          1.1    jruoho     NextOp = NextOp->Common.Next;
    620          1.1    jruoho     NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
    621          1.1    jruoho }
    622          1.1    jruoho 
    623          1.1    jruoho 
    624          1.1    jruoho /*******************************************************************************
    625          1.1    jruoho  *
    626          1.1    jruoho  * FUNCTION:    AcpiDmMatchKeyword
    627          1.1    jruoho  *
    628          1.1    jruoho  * PARAMETERS:  Op              - Match Object to be examined
    629          1.1    jruoho  *
    630          1.1    jruoho  * RETURN:      None
    631          1.1    jruoho  *
    632          1.1    jruoho  * DESCRIPTION: Decode Match opcode operands
    633          1.1    jruoho  *
    634          1.1    jruoho  ******************************************************************************/
    635          1.1    jruoho 
    636          1.1    jruoho static void
    637          1.1    jruoho AcpiDmMatchKeyword (
    638          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    639          1.1    jruoho {
    640          1.1    jruoho 
    641          1.1    jruoho     if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE)
    642          1.1    jruoho     {
    643          1.1    jruoho         AcpiOsPrintf ("/* Unknown Match Keyword encoding */");
    644          1.1    jruoho     }
    645          1.1    jruoho     else
    646          1.1    jruoho     {
    647          1.1    jruoho         AcpiOsPrintf ("%s", ACPI_CAST_PTR (char,
    648          1.1    jruoho             AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer]));
    649          1.1    jruoho     }
    650          1.1    jruoho }
    651          1.1    jruoho 
    652          1.1    jruoho 
    653          1.1    jruoho /*******************************************************************************
    654          1.1    jruoho  *
    655          1.1    jruoho  * FUNCTION:    AcpiDmDisassembleOneOp
    656          1.1    jruoho  *
    657          1.1    jruoho  * PARAMETERS:  WalkState           - Current walk info
    658          1.1    jruoho  *              Info                - Parse tree walk info
    659          1.1    jruoho  *              Op                  - Op that is to be printed
    660          1.1    jruoho  *
    661          1.1    jruoho  * RETURN:      None
    662          1.1    jruoho  *
    663          1.1    jruoho  * DESCRIPTION: Disassemble a single AML opcode
    664          1.1    jruoho  *
    665          1.1    jruoho  ******************************************************************************/
    666          1.1    jruoho 
    667          1.1    jruoho void
    668          1.1    jruoho AcpiDmDisassembleOneOp (
    669          1.1    jruoho     ACPI_WALK_STATE         *WalkState,
    670          1.1    jruoho     ACPI_OP_WALK_INFO       *Info,
    671          1.1    jruoho     ACPI_PARSE_OBJECT       *Op)
    672          1.1    jruoho {
    673          1.1    jruoho     const ACPI_OPCODE_INFO  *OpInfo = NULL;
    674          1.1    jruoho     UINT32                  Offset;
    675          1.1    jruoho     UINT32                  Length;
    676          1.1    jruoho     ACPI_PARSE_OBJECT       *Child;
    677          1.1    jruoho     ACPI_STATUS             Status;
    678      1.1.1.3  christos     UINT8                   *Aml;
    679      1.1.1.4  christos     const AH_DEVICE_ID      *IdInfo;
    680          1.1    jruoho 
    681          1.1    jruoho 
    682          1.1    jruoho     if (!Op)
    683          1.1    jruoho     {
    684          1.1    jruoho         AcpiOsPrintf ("<NULL OP PTR>");
    685          1.1    jruoho         return;
    686          1.1    jruoho     }
    687          1.1    jruoho 
    688          1.1    jruoho     switch (Op->Common.DisasmOpcode)
    689          1.1    jruoho     {
    690          1.1    jruoho     case ACPI_DASM_MATCHOP:
    691          1.1    jruoho 
    692          1.1    jruoho         AcpiDmMatchKeyword (Op);
    693          1.1    jruoho         return;
    694          1.1    jruoho 
    695          1.1    jruoho     case ACPI_DASM_LNOT_SUFFIX:
    696      1.1.1.3  christos 
    697  1.1.1.4.2.1     skrll         if (!AcpiGbl_CstyleDisassembly)
    698          1.1    jruoho         {
    699  1.1.1.4.2.1     skrll             switch (Op->Common.AmlOpcode)
    700  1.1.1.4.2.1     skrll             {
    701  1.1.1.4.2.1     skrll             case AML_LEQUAL_OP:
    702  1.1.1.4.2.1     skrll                 AcpiOsPrintf ("LNotEqual");
    703  1.1.1.4.2.1     skrll                 break;
    704      1.1.1.3  christos 
    705  1.1.1.4.2.1     skrll             case AML_LGREATER_OP:
    706  1.1.1.4.2.1     skrll                 AcpiOsPrintf ("LLessEqual");
    707  1.1.1.4.2.1     skrll                 break;
    708          1.1    jruoho 
    709  1.1.1.4.2.1     skrll             case AML_LLESS_OP:
    710  1.1.1.4.2.1     skrll                 AcpiOsPrintf ("LGreaterEqual");
    711  1.1.1.4.2.1     skrll                 break;
    712      1.1.1.3  christos 
    713  1.1.1.4.2.1     skrll             default:
    714  1.1.1.4.2.1     skrll                 break;
    715  1.1.1.4.2.1     skrll             }
    716          1.1    jruoho         }
    717  1.1.1.4.2.1     skrll 
    718          1.1    jruoho         Op->Common.DisasmOpcode = 0;
    719          1.1    jruoho         Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    720          1.1    jruoho         return;
    721          1.1    jruoho 
    722          1.1    jruoho     default:
    723          1.1    jruoho         break;
    724          1.1    jruoho     }
    725          1.1    jruoho 
    726          1.1    jruoho     OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
    727          1.1    jruoho 
    728          1.1    jruoho     /* The op and arguments */
    729          1.1    jruoho 
    730          1.1    jruoho     switch (Op->Common.AmlOpcode)
    731          1.1    jruoho     {
    732          1.1    jruoho     case AML_LNOT_OP:
    733          1.1    jruoho 
    734          1.1    jruoho         Child = Op->Common.Value.Arg;
    735          1.1    jruoho         if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) ||
    736          1.1    jruoho             (Child->Common.AmlOpcode == AML_LGREATER_OP) ||
    737          1.1    jruoho             (Child->Common.AmlOpcode == AML_LLESS_OP))
    738          1.1    jruoho         {
    739          1.1    jruoho             Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX;
    740          1.1    jruoho             Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX;
    741          1.1    jruoho         }
    742          1.1    jruoho         else
    743          1.1    jruoho         {
    744          1.1    jruoho             AcpiOsPrintf ("%s", OpInfo->Name);
    745          1.1    jruoho         }
    746          1.1    jruoho         break;
    747          1.1    jruoho 
    748          1.1    jruoho     case AML_BYTE_OP:
    749          1.1    jruoho 
    750          1.1    jruoho         AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer);
    751          1.1    jruoho         break;
    752          1.1    jruoho 
    753          1.1    jruoho     case AML_WORD_OP:
    754          1.1    jruoho 
    755          1.1    jruoho         if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
    756          1.1    jruoho         {
    757      1.1.1.4  christos             AcpiDmDecompressEisaId ((UINT32) Op->Common.Value.Integer);
    758          1.1    jruoho         }
    759          1.1    jruoho         else
    760          1.1    jruoho         {
    761          1.1    jruoho             AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer);
    762          1.1    jruoho         }
    763          1.1    jruoho         break;
    764          1.1    jruoho 
    765          1.1    jruoho     case AML_DWORD_OP:
    766          1.1    jruoho 
    767          1.1    jruoho         if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
    768          1.1    jruoho         {
    769      1.1.1.4  christos             AcpiDmDecompressEisaId ((UINT32) Op->Common.Value.Integer);
    770          1.1    jruoho         }
    771          1.1    jruoho         else
    772          1.1    jruoho         {
    773          1.1    jruoho             AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer);
    774          1.1    jruoho         }
    775          1.1    jruoho         break;
    776          1.1    jruoho 
    777          1.1    jruoho     case AML_QWORD_OP:
    778          1.1    jruoho 
    779          1.1    jruoho         AcpiOsPrintf ("0x%8.8X%8.8X",
    780          1.1    jruoho             ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
    781          1.1    jruoho         break;
    782          1.1    jruoho 
    783          1.1    jruoho     case AML_STRING_OP:
    784          1.1    jruoho 
    785      1.1.1.3  christos         AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT16_MAX);
    786      1.1.1.4  christos 
    787      1.1.1.4  christos         /* For _HID/_CID strings, attempt to output a descriptive comment */
    788      1.1.1.4  christos 
    789      1.1.1.4  christos         if (Op->Common.DisasmOpcode == ACPI_DASM_HID_STRING)
    790      1.1.1.4  christos         {
    791      1.1.1.4  christos             /* If we know about the ID, emit the description */
    792      1.1.1.4  christos 
    793      1.1.1.4  christos             IdInfo = AcpiAhMatchHardwareId (Op->Common.Value.String);
    794      1.1.1.4  christos             if (IdInfo)
    795      1.1.1.4  christos             {
    796      1.1.1.4  christos                 AcpiOsPrintf (" /* %s */", IdInfo->Description);
    797      1.1.1.4  christos             }
    798      1.1.1.4  christos         }
    799          1.1    jruoho         break;
    800          1.1    jruoho 
    801          1.1    jruoho     case AML_BUFFER_OP:
    802          1.1    jruoho         /*
    803      1.1.1.3  christos          * Determine the type of buffer. We can have one of the following:
    804          1.1    jruoho          *
    805          1.1    jruoho          * 1) ResourceTemplate containing Resource Descriptors.
    806          1.1    jruoho          * 2) Unicode String buffer
    807          1.1    jruoho          * 3) ASCII String buffer
    808          1.1    jruoho          * 4) Raw data buffer (if none of the above)
    809          1.1    jruoho          *
    810          1.1    jruoho          * Since there are no special AML opcodes to differentiate these
    811          1.1    jruoho          * types of buffers, we have to closely look at the data in the
    812          1.1    jruoho          * buffer to determine the type.
    813          1.1    jruoho          */
    814      1.1.1.3  christos         if (!AcpiGbl_NoResourceDisassembly)
    815          1.1    jruoho         {
    816      1.1.1.3  christos             Status = AcpiDmIsResourceTemplate (WalkState, Op);
    817      1.1.1.3  christos             if (ACPI_SUCCESS (Status))
    818      1.1.1.3  christos             {
    819      1.1.1.3  christos                 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
    820      1.1.1.3  christos                 AcpiOsPrintf ("ResourceTemplate");
    821      1.1.1.3  christos                 break;
    822      1.1.1.3  christos             }
    823      1.1.1.3  christos             else if (Status == AE_AML_NO_RESOURCE_END_TAG)
    824      1.1.1.3  christos             {
    825      1.1.1.3  christos                 AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ ");
    826      1.1.1.3  christos             }
    827          1.1    jruoho         }
    828          1.1    jruoho 
    829      1.1.1.4  christos         if (AcpiDmIsUuidBuffer (Op))
    830      1.1.1.4  christos         {
    831      1.1.1.4  christos             Op->Common.DisasmOpcode = ACPI_DASM_UUID;
    832      1.1.1.4  christos             AcpiOsPrintf ("ToUUID (");
    833      1.1.1.4  christos         }
    834      1.1.1.4  christos         else if (AcpiDmIsUnicodeBuffer (Op))
    835          1.1    jruoho         {
    836          1.1    jruoho             Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
    837          1.1    jruoho             AcpiOsPrintf ("Unicode (");
    838          1.1    jruoho         }
    839          1.1    jruoho         else if (AcpiDmIsStringBuffer (Op))
    840          1.1    jruoho         {
    841          1.1    jruoho             Op->Common.DisasmOpcode = ACPI_DASM_STRING;
    842          1.1    jruoho             AcpiOsPrintf ("Buffer");
    843          1.1    jruoho         }
    844      1.1.1.3  christos         else if (AcpiDmIsPldBuffer (Op))
    845      1.1.1.3  christos         {
    846      1.1.1.3  christos             Op->Common.DisasmOpcode = ACPI_DASM_PLD_METHOD;
    847  1.1.1.4.2.1     skrll             AcpiOsPrintf ("ToPLD (");
    848      1.1.1.3  christos         }
    849          1.1    jruoho         else
    850          1.1    jruoho         {
    851          1.1    jruoho             Op->Common.DisasmOpcode = ACPI_DASM_BUFFER;
    852          1.1    jruoho             AcpiOsPrintf ("Buffer");
    853          1.1    jruoho         }
    854          1.1    jruoho         break;
    855          1.1    jruoho 
    856          1.1    jruoho     case AML_INT_NAMEPATH_OP:
    857          1.1    jruoho 
    858          1.1    jruoho         AcpiDmNamestring (Op->Common.Value.Name);
    859          1.1    jruoho         break;
    860          1.1    jruoho 
    861          1.1    jruoho     case AML_INT_NAMEDFIELD_OP:
    862          1.1    jruoho 
    863          1.1    jruoho         Length = AcpiDmDumpName (Op->Named.Name);
    864          1.1    jruoho         AcpiOsPrintf (",%*.s  %u", (unsigned) (5 - Length), " ",
    865          1.1    jruoho             (UINT32) Op->Common.Value.Integer);
    866          1.1    jruoho         AcpiDmCommaIfFieldMember (Op);
    867          1.1    jruoho 
    868          1.1    jruoho         Info->BitOffset += (UINT32) Op->Common.Value.Integer;
    869          1.1    jruoho         break;
    870          1.1    jruoho 
    871          1.1    jruoho     case AML_INT_RESERVEDFIELD_OP:
    872          1.1    jruoho 
    873          1.1    jruoho         /* Offset() -- Must account for previous offsets */
    874          1.1    jruoho 
    875          1.1    jruoho         Offset = (UINT32) Op->Common.Value.Integer;
    876          1.1    jruoho         Info->BitOffset += Offset;
    877          1.1    jruoho 
    878          1.1    jruoho         if (Info->BitOffset % 8 == 0)
    879          1.1    jruoho         {
    880      1.1.1.3  christos             AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
    881          1.1    jruoho         }
    882          1.1    jruoho         else
    883          1.1    jruoho         {
    884          1.1    jruoho             AcpiOsPrintf ("    ,   %u", Offset);
    885          1.1    jruoho         }
    886          1.1    jruoho 
    887          1.1    jruoho         AcpiDmCommaIfFieldMember (Op);
    888          1.1    jruoho         break;
    889          1.1    jruoho 
    890          1.1    jruoho     case AML_INT_ACCESSFIELD_OP:
    891      1.1.1.3  christos     case AML_INT_EXTACCESSFIELD_OP:
    892      1.1.1.3  christos 
    893      1.1.1.3  christos         AcpiOsPrintf ("AccessAs (%s, ",
    894      1.1.1.3  christos             AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]);
    895      1.1.1.3  christos 
    896      1.1.1.3  christos         AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8));
    897          1.1    jruoho 
    898      1.1.1.3  christos         if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP)
    899      1.1.1.3  christos         {
    900      1.1.1.3  christos             AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF));
    901      1.1.1.3  christos         }
    902          1.1    jruoho 
    903          1.1    jruoho         AcpiOsPrintf (")");
    904          1.1    jruoho         AcpiDmCommaIfFieldMember (Op);
    905          1.1    jruoho         break;
    906          1.1    jruoho 
    907      1.1.1.3  christos     case AML_INT_CONNECTION_OP:
    908      1.1.1.3  christos         /*
    909      1.1.1.3  christos          * Two types of Connection() - one with a buffer object, the
    910      1.1.1.3  christos          * other with a namestring that points to a buffer object.
    911      1.1.1.3  christos          */
    912      1.1.1.3  christos         AcpiOsPrintf ("Connection (");
    913      1.1.1.3  christos         Child = Op->Common.Value.Arg;
    914      1.1.1.3  christos 
    915      1.1.1.3  christos         if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
    916      1.1.1.3  christos         {
    917      1.1.1.3  christos             AcpiOsPrintf ("\n");
    918      1.1.1.3  christos 
    919      1.1.1.3  christos             Aml = Child->Named.Data;
    920      1.1.1.3  christos             Length = (UINT32) Child->Common.Value.Integer;
    921      1.1.1.3  christos 
    922      1.1.1.3  christos             Info->Level += 1;
    923      1.1.1.4  christos             Info->MappingOp = Op;
    924      1.1.1.3  christos             Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
    925      1.1.1.4  christos 
    926      1.1.1.3  christos             AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length);
    927      1.1.1.3  christos 
    928      1.1.1.3  christos             Info->Level -= 1;
    929      1.1.1.3  christos             AcpiDmIndent (Info->Level);
    930      1.1.1.3  christos         }
    931      1.1.1.3  christos         else
    932      1.1.1.3  christos         {
    933      1.1.1.3  christos             AcpiDmNamestring (Child->Common.Value.Name);
    934      1.1.1.3  christos         }
    935      1.1.1.3  christos 
    936      1.1.1.3  christos         AcpiOsPrintf (")");
    937      1.1.1.3  christos         AcpiDmCommaIfFieldMember (Op);
    938      1.1.1.3  christos         AcpiOsPrintf ("\n");
    939      1.1.1.3  christos 
    940      1.1.1.3  christos         Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */
    941      1.1.1.3  christos         Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    942      1.1.1.3  christos         break;
    943          1.1    jruoho 
    944          1.1    jruoho     case AML_INT_BYTELIST_OP:
    945          1.1    jruoho 
    946          1.1    jruoho         AcpiDmByteList (Info, Op);
    947          1.1    jruoho         break;
    948          1.1    jruoho 
    949          1.1    jruoho     case AML_INT_METHODCALL_OP:
    950          1.1    jruoho 
    951          1.1    jruoho         Op = AcpiPsGetDepthNext (NULL, Op);
    952          1.1    jruoho         Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
    953          1.1    jruoho 
    954          1.1    jruoho         AcpiDmNamestring (Op->Common.Value.Name);
    955          1.1    jruoho         break;
    956          1.1    jruoho 
    957          1.1    jruoho     default:
    958          1.1    jruoho 
    959          1.1    jruoho         /* Just get the opcode name and print it */
    960          1.1    jruoho 
    961          1.1    jruoho         AcpiOsPrintf ("%s", OpInfo->Name);
    962          1.1    jruoho 
    963          1.1    jruoho 
    964          1.1    jruoho #ifdef ACPI_DEBUGGER
    965          1.1    jruoho 
    966          1.1    jruoho         if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) &&
    967          1.1    jruoho             (WalkState) &&
    968          1.1    jruoho             (WalkState->Results) &&
    969          1.1    jruoho             (WalkState->ResultCount))
    970          1.1    jruoho         {
    971  1.1.1.4.2.2     skrll             AcpiDbDecodeInternalObject (
    972          1.1    jruoho                 WalkState->Results->Results.ObjDesc [
    973          1.1    jruoho                     (WalkState->ResultCount - 1) %
    974          1.1    jruoho                         ACPI_RESULTS_FRAME_OBJ_NUM]);
    975          1.1    jruoho         }
    976          1.1    jruoho #endif
    977          1.1    jruoho 
    978          1.1    jruoho         break;
    979          1.1    jruoho     }
    980          1.1    jruoho }
    981          1.1    jruoho 
    982          1.1    jruoho #endif  /* ACPI_DISASSEMBLER */
    983