exresop.c revision 241973
1/******************************************************************************
2 *
3 * Module Name: exresop - AML Interpreter operand/object resolution
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#define __EXRESOP_C__
45
46#include <contrib/dev/acpica/include/acpi.h>
47#include <contrib/dev/acpica/include/accommon.h>
48#include <contrib/dev/acpica/include/amlcode.h>
49#include <contrib/dev/acpica/include/acparser.h>
50#include <contrib/dev/acpica/include/acinterp.h>
51#include <contrib/dev/acpica/include/acnamesp.h>
52
53
54#define _COMPONENT          ACPI_EXECUTER
55        ACPI_MODULE_NAME    ("exresop")
56
57/* Local prototypes */
58
59static ACPI_STATUS
60AcpiExCheckObjectType (
61    ACPI_OBJECT_TYPE        TypeNeeded,
62    ACPI_OBJECT_TYPE        ThisType,
63    void                    *Object);
64
65
66/*******************************************************************************
67 *
68 * FUNCTION:    AcpiExCheckObjectType
69 *
70 * PARAMETERS:  TypeNeeded          Object type needed
71 *              ThisType            Actual object type
72 *              Object              Object pointer
73 *
74 * RETURN:      Status
75 *
76 * DESCRIPTION: Check required type against actual type
77 *
78 ******************************************************************************/
79
80static ACPI_STATUS
81AcpiExCheckObjectType (
82    ACPI_OBJECT_TYPE        TypeNeeded,
83    ACPI_OBJECT_TYPE        ThisType,
84    void                    *Object)
85{
86    ACPI_FUNCTION_ENTRY ();
87
88
89    if (TypeNeeded == ACPI_TYPE_ANY)
90    {
91        /* All types OK, so we don't perform any typechecks */
92
93        return (AE_OK);
94    }
95
96    if (TypeNeeded == ACPI_TYPE_LOCAL_REFERENCE)
97    {
98        /*
99         * Allow the AML "Constant" opcodes (Zero, One, etc.) to be reference
100         * objects and thus allow them to be targets. (As per the ACPI
101         * specification, a store to a constant is a noop.)
102         */
103        if ((ThisType == ACPI_TYPE_INTEGER) &&
104            (((ACPI_OPERAND_OBJECT *) Object)->Common.Flags & AOPOBJ_AML_CONSTANT))
105        {
106            return (AE_OK);
107        }
108    }
109
110    if (TypeNeeded != ThisType)
111    {
112        ACPI_ERROR ((AE_INFO,
113            "Needed type [%s], found [%s] %p",
114            AcpiUtGetTypeName (TypeNeeded),
115            AcpiUtGetTypeName (ThisType), Object));
116
117        return (AE_AML_OPERAND_TYPE);
118    }
119
120    return (AE_OK);
121}
122
123
124/*******************************************************************************
125 *
126 * FUNCTION:    AcpiExResolveOperands
127 *
128 * PARAMETERS:  Opcode              - Opcode being interpreted
129 *              StackPtr            - Pointer to the operand stack to be
130 *                                    resolved
131 *              WalkState           - Current state
132 *
133 * RETURN:      Status
134 *
135 * DESCRIPTION: Convert multiple input operands to the types required by the
136 *              target operator.
137 *
138 *      Each 5-bit group in ArgTypes represents one required
139 *      operand and indicates the required Type. The corresponding operand
140 *      will be converted to the required type if possible, otherwise we
141 *      abort with an exception.
142 *
143 ******************************************************************************/
144
145ACPI_STATUS
146AcpiExResolveOperands (
147    UINT16                  Opcode,
148    ACPI_OPERAND_OBJECT     **StackPtr,
149    ACPI_WALK_STATE         *WalkState)
150{
151    ACPI_OPERAND_OBJECT     *ObjDesc;
152    ACPI_STATUS             Status = AE_OK;
153    UINT8                   ObjectType;
154    UINT32                  ArgTypes;
155    const ACPI_OPCODE_INFO  *OpInfo;
156    UINT32                  ThisArgType;
157    ACPI_OBJECT_TYPE        TypeNeeded;
158    UINT16                  TargetOp = 0;
159
160
161    ACPI_FUNCTION_TRACE_U32 (ExResolveOperands, Opcode);
162
163
164    OpInfo = AcpiPsGetOpcodeInfo (Opcode);
165    if (OpInfo->Class == AML_CLASS_UNKNOWN)
166    {
167        return_ACPI_STATUS (AE_AML_BAD_OPCODE);
168    }
169
170    ArgTypes = OpInfo->RuntimeArgs;
171    if (ArgTypes == ARGI_INVALID_OPCODE)
172    {
173        ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
174            Opcode));
175
176        return_ACPI_STATUS (AE_AML_INTERNAL);
177    }
178
179    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
180        "Opcode %X [%s] RequiredOperandTypes=%8.8X\n",
181        Opcode, OpInfo->Name, ArgTypes));
182
183    /*
184     * Normal exit is with (ArgTypes == 0) at end of argument list.
185     * Function will return an exception from within the loop upon
186     * finding an entry which is not (or cannot be converted
187     * to) the required type; if stack underflows; or upon
188     * finding a NULL stack entry (which should not happen).
189     */
190    while (GET_CURRENT_ARG_TYPE (ArgTypes))
191    {
192        if (!StackPtr || !*StackPtr)
193        {
194            ACPI_ERROR ((AE_INFO, "Null stack entry at %p",
195                StackPtr));
196
197            return_ACPI_STATUS (AE_AML_INTERNAL);
198        }
199
200        /* Extract useful items */
201
202        ObjDesc = *StackPtr;
203
204        /* Decode the descriptor type */
205
206        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
207        {
208        case ACPI_DESC_TYPE_NAMED:
209
210            /* Namespace Node */
211
212            ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;
213
214            /*
215             * Resolve an alias object. The construction of these objects
216             * guarantees that there is only one level of alias indirection;
217             * thus, the attached object is always the aliased namespace node
218             */
219            if (ObjectType == ACPI_TYPE_LOCAL_ALIAS)
220            {
221                ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);
222                *StackPtr = ObjDesc;
223                ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;
224            }
225            break;
226
227
228        case ACPI_DESC_TYPE_OPERAND:
229
230            /* ACPI internal object */
231
232            ObjectType = ObjDesc->Common.Type;
233
234            /* Check for bad ACPI_OBJECT_TYPE */
235
236            if (!AcpiUtValidObjectType (ObjectType))
237            {
238                ACPI_ERROR ((AE_INFO,
239                    "Bad operand object type [0x%X]", ObjectType));
240
241                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
242            }
243
244            if (ObjectType == (UINT8) ACPI_TYPE_LOCAL_REFERENCE)
245            {
246                /* Validate the Reference */
247
248                switch (ObjDesc->Reference.Class)
249                {
250                case ACPI_REFCLASS_DEBUG:
251
252                    TargetOp = AML_DEBUG_OP;
253
254                    /*lint -fallthrough */
255
256                case ACPI_REFCLASS_ARG:
257                case ACPI_REFCLASS_LOCAL:
258                case ACPI_REFCLASS_INDEX:
259                case ACPI_REFCLASS_REFOF:
260                case ACPI_REFCLASS_TABLE:    /* DdbHandle from LOAD_OP or LOAD_TABLE_OP */
261                case ACPI_REFCLASS_NAME:     /* Reference to a named object */
262
263                    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
264                        "Operand is a Reference, Class [%s] %2.2X\n",
265                        AcpiUtGetReferenceName (ObjDesc),
266                        ObjDesc->Reference.Class));
267                    break;
268
269                default:
270
271                    ACPI_ERROR ((AE_INFO,
272                        "Unknown Reference Class 0x%2.2X in %p",
273                        ObjDesc->Reference.Class, ObjDesc));
274
275                    return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
276                }
277            }
278            break;
279
280
281        default:
282
283            /* Invalid descriptor */
284
285            ACPI_ERROR ((AE_INFO, "Invalid descriptor %p [%s]",
286                ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
287
288            return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
289        }
290
291        /* Get one argument type, point to the next */
292
293        ThisArgType = GET_CURRENT_ARG_TYPE (ArgTypes);
294        INCREMENT_ARG_LIST (ArgTypes);
295
296        /*
297         * Handle cases where the object does not need to be
298         * resolved to a value
299         */
300        switch (ThisArgType)
301        {
302        case ARGI_REF_OR_STRING:        /* Can be a String or Reference */
303
304            if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) &&
305                (ObjDesc->Common.Type == ACPI_TYPE_STRING))
306            {
307                /*
308                 * String found - the string references a named object and
309                 * must be resolved to a node
310                 */
311                goto NextOperand;
312            }
313
314            /*
315             * Else not a string - fall through to the normal Reference
316             * case below
317             */
318            /*lint -fallthrough */
319
320        case ARGI_REFERENCE:            /* References: */
321        case ARGI_INTEGER_REF:
322        case ARGI_OBJECT_REF:
323        case ARGI_DEVICE_REF:
324        case ARGI_TARGETREF:     /* Allows implicit conversion rules before store */
325        case ARGI_FIXED_TARGET:  /* No implicit conversion before store to target */
326        case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion  */
327
328            /*
329             * Need an operand of type ACPI_TYPE_LOCAL_REFERENCE
330             * A Namespace Node is OK as-is
331             */
332            if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
333            {
334                goto NextOperand;
335            }
336
337            Status = AcpiExCheckObjectType (ACPI_TYPE_LOCAL_REFERENCE,
338                            ObjectType, ObjDesc);
339            if (ACPI_FAILURE (Status))
340            {
341                return_ACPI_STATUS (Status);
342            }
343            goto NextOperand;
344
345
346        case ARGI_DATAREFOBJ:  /* Store operator only */
347
348            /*
349             * We don't want to resolve IndexOp reference objects during
350             * a store because this would be an implicit DeRefOf operation.
351             * Instead, we just want to store the reference object.
352             * -- All others must be resolved below.
353             */
354            if ((Opcode == AML_STORE_OP) &&
355                ((*StackPtr)->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) &&
356                ((*StackPtr)->Reference.Class == ACPI_REFCLASS_INDEX))
357            {
358                goto NextOperand;
359            }
360            break;
361
362        default:
363            /* All cases covered above */
364            break;
365        }
366
367        /*
368         * Resolve this object to a value
369         */
370        Status = AcpiExResolveToValue (StackPtr, WalkState);
371        if (ACPI_FAILURE (Status))
372        {
373            return_ACPI_STATUS (Status);
374        }
375
376        /* Get the resolved object */
377
378        ObjDesc = *StackPtr;
379
380        /*
381         * Check the resulting object (value) type
382         */
383        switch (ThisArgType)
384        {
385        /*
386         * For the simple cases, only one type of resolved object
387         * is allowed
388         */
389        case ARGI_MUTEX:
390
391            /* Need an operand of type ACPI_TYPE_MUTEX */
392
393            TypeNeeded = ACPI_TYPE_MUTEX;
394            break;
395
396        case ARGI_EVENT:
397
398            /* Need an operand of type ACPI_TYPE_EVENT */
399
400            TypeNeeded = ACPI_TYPE_EVENT;
401            break;
402
403        case ARGI_PACKAGE:   /* Package */
404
405            /* Need an operand of type ACPI_TYPE_PACKAGE */
406
407            TypeNeeded = ACPI_TYPE_PACKAGE;
408            break;
409
410        case ARGI_ANYTYPE:
411
412            /* Any operand type will do */
413
414            TypeNeeded = ACPI_TYPE_ANY;
415            break;
416
417        case ARGI_DDBHANDLE:
418
419            /* Need an operand of type ACPI_TYPE_DDB_HANDLE */
420
421            TypeNeeded = ACPI_TYPE_LOCAL_REFERENCE;
422            break;
423
424
425        /*
426         * The more complex cases allow multiple resolved object types
427         */
428        case ARGI_INTEGER:
429
430            /*
431             * Need an operand of type ACPI_TYPE_INTEGER,
432             * But we can implicitly convert from a STRING or BUFFER
433             * Aka - "Implicit Source Operand Conversion"
434             */
435            Status = AcpiExConvertToInteger (ObjDesc, StackPtr, 16);
436            if (ACPI_FAILURE (Status))
437            {
438                if (Status == AE_TYPE)
439                {
440                    ACPI_ERROR ((AE_INFO,
441                        "Needed [Integer/String/Buffer], found [%s] %p",
442                        AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
443
444                    return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
445                }
446
447                return_ACPI_STATUS (Status);
448            }
449
450            if (ObjDesc != *StackPtr)
451            {
452                AcpiUtRemoveReference (ObjDesc);
453            }
454            goto NextOperand;
455
456
457        case ARGI_BUFFER:
458
459            /*
460             * Need an operand of type ACPI_TYPE_BUFFER,
461             * But we can implicitly convert from a STRING or INTEGER
462             * Aka - "Implicit Source Operand Conversion"
463             */
464            Status = AcpiExConvertToBuffer (ObjDesc, StackPtr);
465            if (ACPI_FAILURE (Status))
466            {
467                if (Status == AE_TYPE)
468                {
469                    ACPI_ERROR ((AE_INFO,
470                        "Needed [Integer/String/Buffer], found [%s] %p",
471                        AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
472
473                    return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
474                }
475
476                return_ACPI_STATUS (Status);
477            }
478
479            if (ObjDesc != *StackPtr)
480            {
481                AcpiUtRemoveReference (ObjDesc);
482            }
483            goto NextOperand;
484
485
486        case ARGI_STRING:
487
488            /*
489             * Need an operand of type ACPI_TYPE_STRING,
490             * But we can implicitly convert from a BUFFER or INTEGER
491             * Aka - "Implicit Source Operand Conversion"
492             */
493            Status = AcpiExConvertToString (ObjDesc, StackPtr,
494                        ACPI_IMPLICIT_CONVERT_HEX);
495            if (ACPI_FAILURE (Status))
496            {
497                if (Status == AE_TYPE)
498                {
499                    ACPI_ERROR ((AE_INFO,
500                        "Needed [Integer/String/Buffer], found [%s] %p",
501                        AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
502
503                    return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
504                }
505
506                return_ACPI_STATUS (Status);
507            }
508
509            if (ObjDesc != *StackPtr)
510            {
511                AcpiUtRemoveReference (ObjDesc);
512            }
513            goto NextOperand;
514
515
516        case ARGI_COMPUTEDATA:
517
518            /* Need an operand of type INTEGER, STRING or BUFFER */
519
520            switch (ObjDesc->Common.Type)
521            {
522            case ACPI_TYPE_INTEGER:
523            case ACPI_TYPE_STRING:
524            case ACPI_TYPE_BUFFER:
525
526                /* Valid operand */
527               break;
528
529            default:
530                ACPI_ERROR ((AE_INFO,
531                    "Needed [Integer/String/Buffer], found [%s] %p",
532                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
533
534                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
535            }
536            goto NextOperand;
537
538
539        case ARGI_BUFFER_OR_STRING:
540
541            /* Need an operand of type STRING or BUFFER */
542
543            switch (ObjDesc->Common.Type)
544            {
545            case ACPI_TYPE_STRING:
546            case ACPI_TYPE_BUFFER:
547
548                /* Valid operand */
549               break;
550
551            case ACPI_TYPE_INTEGER:
552
553                /* Highest priority conversion is to type Buffer */
554
555                Status = AcpiExConvertToBuffer (ObjDesc, StackPtr);
556                if (ACPI_FAILURE (Status))
557                {
558                    return_ACPI_STATUS (Status);
559                }
560
561                if (ObjDesc != *StackPtr)
562                {
563                    AcpiUtRemoveReference (ObjDesc);
564                }
565                break;
566
567            default:
568                ACPI_ERROR ((AE_INFO,
569                    "Needed [Integer/String/Buffer], found [%s] %p",
570                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
571
572                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
573            }
574            goto NextOperand;
575
576
577        case ARGI_DATAOBJECT:
578            /*
579             * ARGI_DATAOBJECT is only used by the SizeOf operator.
580             * Need a buffer, string, package, or RefOf reference.
581             *
582             * The only reference allowed here is a direct reference to
583             * a namespace node.
584             */
585            switch (ObjDesc->Common.Type)
586            {
587            case ACPI_TYPE_PACKAGE:
588            case ACPI_TYPE_STRING:
589            case ACPI_TYPE_BUFFER:
590            case ACPI_TYPE_LOCAL_REFERENCE:
591
592                /* Valid operand */
593                break;
594
595            default:
596                ACPI_ERROR ((AE_INFO,
597                    "Needed [Buffer/String/Package/Reference], found [%s] %p",
598                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
599
600                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
601            }
602            goto NextOperand;
603
604
605        case ARGI_COMPLEXOBJ:
606
607            /* Need a buffer or package or (ACPI 2.0) String */
608
609            switch (ObjDesc->Common.Type)
610            {
611            case ACPI_TYPE_PACKAGE:
612            case ACPI_TYPE_STRING:
613            case ACPI_TYPE_BUFFER:
614
615                /* Valid operand */
616                break;
617
618            default:
619                ACPI_ERROR ((AE_INFO,
620                    "Needed [Buffer/String/Package], found [%s] %p",
621                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
622
623                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
624            }
625            goto NextOperand;
626
627
628        case ARGI_REGION_OR_BUFFER: /* Used by Load() only */
629
630            /* Need an operand of type REGION or a BUFFER (which could be a resolved region field) */
631
632            switch (ObjDesc->Common.Type)
633            {
634            case ACPI_TYPE_BUFFER:
635            case ACPI_TYPE_REGION:
636
637                /* Valid operand */
638                break;
639
640            default:
641                ACPI_ERROR ((AE_INFO,
642                    "Needed [Region/Buffer], found [%s] %p",
643                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
644
645                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
646            }
647            goto NextOperand;
648
649
650        case ARGI_DATAREFOBJ:
651
652            /* Used by the Store() operator only */
653
654            switch (ObjDesc->Common.Type)
655            {
656            case ACPI_TYPE_INTEGER:
657            case ACPI_TYPE_PACKAGE:
658            case ACPI_TYPE_STRING:
659            case ACPI_TYPE_BUFFER:
660            case ACPI_TYPE_BUFFER_FIELD:
661            case ACPI_TYPE_LOCAL_REFERENCE:
662            case ACPI_TYPE_LOCAL_REGION_FIELD:
663            case ACPI_TYPE_LOCAL_BANK_FIELD:
664            case ACPI_TYPE_LOCAL_INDEX_FIELD:
665            case ACPI_TYPE_DDB_HANDLE:
666
667                /* Valid operand */
668                break;
669
670            default:
671
672                if (AcpiGbl_EnableInterpreterSlack)
673                {
674                    /*
675                     * Enable original behavior of Store(), allowing any and all
676                     * objects as the source operand. The ACPI spec does not
677                     * allow this, however.
678                     */
679                    break;
680                }
681
682                if (TargetOp == AML_DEBUG_OP)
683                {
684                    /* Allow store of any object to the Debug object */
685
686                    break;
687                }
688
689                ACPI_ERROR ((AE_INFO,
690                    "Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p",
691                    AcpiUtGetObjectTypeName (ObjDesc), ObjDesc));
692
693                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
694            }
695            goto NextOperand;
696
697
698        default:
699
700            /* Unknown type */
701
702            ACPI_ERROR ((AE_INFO,
703                "Internal - Unknown ARGI (required operand) type 0x%X",
704                ThisArgType));
705
706            return_ACPI_STATUS (AE_BAD_PARAMETER);
707        }
708
709        /*
710         * Make sure that the original object was resolved to the
711         * required object type (Simple cases only).
712         */
713        Status = AcpiExCheckObjectType (TypeNeeded,
714                        (*StackPtr)->Common.Type, *StackPtr);
715        if (ACPI_FAILURE (Status))
716        {
717            return_ACPI_STATUS (Status);
718        }
719
720NextOperand:
721        /*
722         * If more operands needed, decrement StackPtr to point
723         * to next operand on stack
724         */
725        if (GET_CURRENT_ARG_TYPE (ArgTypes))
726        {
727            StackPtr--;
728        }
729    }
730
731    ACPI_DUMP_OPERANDS (WalkState->Operands,
732        AcpiPsGetOpcodeName (Opcode), WalkState->NumOperands);
733
734    return_ACPI_STATUS (Status);
735}
736