ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

exresolv.c
Go to the documentation of this file.
00001 
00002 /******************************************************************************
00003  *
00004  * Module Name: exresolv - AML Interpreter object resolution
00005  *
00006  *****************************************************************************/
00007 
00008 /******************************************************************************
00009  *
00010  * 1. Copyright Notice
00011  *
00012  * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
00013  * All rights reserved.
00014  *
00015  * 2. License
00016  *
00017  * 2.1. This is your license from Intel Corp. under its intellectual property
00018  * rights.  You may have additional license terms from the party that provided
00019  * you this software, covering your right to use that party's intellectual
00020  * property rights.
00021  *
00022  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
00023  * copy of the source code appearing in this file ("Covered Code") an
00024  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
00025  * base code distributed originally by Intel ("Original Intel Code") to copy,
00026  * make derivatives, distribute, use and display any portion of the Covered
00027  * Code in any form, with the right to sublicense such rights; and
00028  *
00029  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
00030  * license (with the right to sublicense), under only those claims of Intel
00031  * patents that are infringed by the Original Intel Code, to make, use, sell,
00032  * offer to sell, and import the Covered Code and derivative works thereof
00033  * solely to the minimum extent necessary to exercise the above copyright
00034  * license, and in no event shall the patent license extend to any additions
00035  * to or modifications of the Original Intel Code.  No other license or right
00036  * is granted directly or by implication, estoppel or otherwise;
00037  *
00038  * The above copyright and patent license is granted only if the following
00039  * conditions are met:
00040  *
00041  * 3. Conditions
00042  *
00043  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
00044  * Redistribution of source code of any substantial portion of the Covered
00045  * Code or modification with rights to further distribute source must include
00046  * the above Copyright Notice, the above License, this list of Conditions,
00047  * and the following Disclaimer and Export Compliance provision.  In addition,
00048  * Licensee must cause all Covered Code to which Licensee contributes to
00049  * contain a file documenting the changes Licensee made to create that Covered
00050  * Code and the date of any change.  Licensee must include in that file the
00051  * documentation of any changes made by any predecessor Licensee.  Licensee
00052  * must include a prominent statement that the modification is derived,
00053  * directly or indirectly, from Original Intel Code.
00054  *
00055  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
00056  * Redistribution of source code of any substantial portion of the Covered
00057  * Code or modification without rights to further distribute source must
00058  * include the following Disclaimer and Export Compliance provision in the
00059  * documentation and/or other materials provided with distribution.  In
00060  * addition, Licensee may not authorize further sublicense of source of any
00061  * portion of the Covered Code, and must include terms to the effect that the
00062  * license from Licensee to its licensee is limited to the intellectual
00063  * property embodied in the software Licensee provides to its licensee, and
00064  * not to intellectual property embodied in modifications its licensee may
00065  * make.
00066  *
00067  * 3.3. Redistribution of Executable. Redistribution in executable form of any
00068  * substantial portion of the Covered Code or modification must reproduce the
00069  * above Copyright Notice, and the following Disclaimer and Export Compliance
00070  * provision in the documentation and/or other materials provided with the
00071  * distribution.
00072  *
00073  * 3.4. Intel retains all right, title, and interest in and to the Original
00074  * Intel Code.
00075  *
00076  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
00077  * Intel shall be used in advertising or otherwise to promote the sale, use or
00078  * other dealings in products derived from or relating to the Covered Code
00079  * without prior written authorization from Intel.
00080  *
00081  * 4. Disclaimer and Export Compliance
00082  *
00083  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
00084  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
00085  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
00086  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
00087  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
00088  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
00089  * PARTICULAR PURPOSE.
00090  *
00091  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
00092  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
00093  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
00094  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
00095  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
00096  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
00097  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
00098  * LIMITED REMEDY.
00099  *
00100  * 4.3. Licensee shall not export, either directly or indirectly, any of this
00101  * software or system incorporating such software without first obtaining any
00102  * required license or other approval from the U. S. Department of Commerce or
00103  * any other agency or department of the United States Government.  In the
00104  * event Licensee exports any such software from the United States or
00105  * re-exports any such software from a foreign destination, Licensee shall
00106  * ensure that the distribution and export/re-export of the software is in
00107  * compliance with all laws, regulations, orders, or other restrictions of the
00108  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
00109  * any of its subsidiaries will export/re-export any technical data, process,
00110  * software, or service, directly or indirectly, to any country for which the
00111  * United States government or any agency thereof requires an export license,
00112  * other governmental approval, or letter of assurance, without first obtaining
00113  * such license, approval or letter.
00114  *
00115  *****************************************************************************/
00116 
00117 #define __EXRESOLV_C__
00118 
00119 #include "acpi.h"
00120 #include "accommon.h"
00121 #include "amlcode.h"
00122 #include "acdispat.h"
00123 #include "acinterp.h"
00124 #include "acnamesp.h"
00125 
00126 
00127 #define _COMPONENT          ACPI_EXECUTER
00128         ACPI_MODULE_NAME    ("exresolv")
00129 
00130 /* Local prototypes */
00131 
00132 static ACPI_STATUS
00133 AcpiExResolveObjectToValue (
00134     ACPI_OPERAND_OBJECT     **StackPtr,
00135     ACPI_WALK_STATE         *WalkState);
00136 
00137 
00138 /*******************************************************************************
00139  *
00140  * FUNCTION:    AcpiExResolveToValue
00141  *
00142  * PARAMETERS:  **StackPtr          - Points to entry on ObjStack, which can
00143  *                                    be either an (ACPI_OPERAND_OBJECT *)
00144  *                                    or an ACPI_HANDLE.
00145  *              WalkState           - Current method state
00146  *
00147  * RETURN:      Status
00148  *
00149  * DESCRIPTION: Convert Reference objects to values
00150  *
00151  ******************************************************************************/
00152 
00153 ACPI_STATUS
00154 AcpiExResolveToValue (
00155     ACPI_OPERAND_OBJECT     **StackPtr,
00156     ACPI_WALK_STATE         *WalkState)
00157 {
00158     ACPI_STATUS             Status;
00159 
00160 
00161     ACPI_FUNCTION_TRACE_PTR (ExResolveToValue, StackPtr);
00162 
00163 
00164     if (!StackPtr || !*StackPtr)
00165     {
00166         ACPI_ERROR ((AE_INFO, "Internal - null pointer"));
00167         return_ACPI_STATUS (AE_AML_NO_OPERAND);
00168     }
00169 
00170     /*
00171      * The entity pointed to by the StackPtr can be either
00172      * 1) A valid ACPI_OPERAND_OBJECT, or
00173      * 2) A ACPI_NAMESPACE_NODE (NamedObj)
00174      */
00175     if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_OPERAND)
00176     {
00177         Status = AcpiExResolveObjectToValue (StackPtr, WalkState);
00178         if (ACPI_FAILURE (Status))
00179         {
00180             return_ACPI_STATUS (Status);
00181         }
00182 
00183         if (!*StackPtr)
00184         {
00185             ACPI_ERROR ((AE_INFO, "Internal - null pointer"));
00186             return_ACPI_STATUS (AE_AML_NO_OPERAND);
00187         }
00188     }
00189 
00190     /*
00191      * Object on the stack may have changed if AcpiExResolveObjectToValue()
00192      * was called (i.e., we can't use an _else_ here.)
00193      */
00194     if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_NAMED)
00195     {
00196         Status = AcpiExResolveNodeToValue (
00197                         ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, StackPtr),
00198                         WalkState);
00199         if (ACPI_FAILURE (Status))
00200         {
00201             return_ACPI_STATUS (Status);
00202         }
00203     }
00204 
00205     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *StackPtr));
00206     return_ACPI_STATUS (AE_OK);
00207 }
00208 
00209 
00210 /*******************************************************************************
00211  *
00212  * FUNCTION:    AcpiExResolveObjectToValue
00213  *
00214  * PARAMETERS:  StackPtr        - Pointer to an internal object
00215  *              WalkState       - Current method state
00216  *
00217  * RETURN:      Status
00218  *
00219  * DESCRIPTION: Retrieve the value from an internal object. The Reference type
00220  *              uses the associated AML opcode to determine the value.
00221  *
00222  ******************************************************************************/
00223 
00224 static ACPI_STATUS
00225 AcpiExResolveObjectToValue (
00226     ACPI_OPERAND_OBJECT     **StackPtr,
00227     ACPI_WALK_STATE         *WalkState)
00228 {
00229     ACPI_STATUS             Status = AE_OK;
00230     ACPI_OPERAND_OBJECT     *StackDesc;
00231     ACPI_OPERAND_OBJECT     *ObjDesc = NULL;
00232     UINT8                   RefType;
00233 
00234 
00235     ACPI_FUNCTION_TRACE (ExResolveObjectToValue);
00236 
00237 
00238     StackDesc = *StackPtr;
00239 
00240     /* This is an ACPI_OPERAND_OBJECT  */
00241 
00242     switch (StackDesc->Common.Type)
00243     {
00244     case ACPI_TYPE_LOCAL_REFERENCE:
00245 
00246         RefType = StackDesc->Reference.Class;
00247 
00248         switch (RefType)
00249         {
00250         case ACPI_REFCLASS_LOCAL:
00251         case ACPI_REFCLASS_ARG:
00252 
00253             /*
00254              * Get the local from the method's state info
00255              * Note: this increments the local's object reference count
00256              */
00257             Status = AcpiDsMethodDataGetValue (RefType,
00258                             StackDesc->Reference.Value, WalkState, &ObjDesc);
00259             if (ACPI_FAILURE (Status))
00260             {
00261                 return_ACPI_STATUS (Status);
00262             }
00263 
00264             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %X] ValueObj is %p\n",
00265                 StackDesc->Reference.Value, ObjDesc));
00266 
00267             /*
00268              * Now we can delete the original Reference Object and
00269              * replace it with the resolved value
00270              */
00271             AcpiUtRemoveReference (StackDesc);
00272             *StackPtr = ObjDesc;
00273             break;
00274 
00275 
00276         case ACPI_REFCLASS_INDEX:
00277 
00278             switch (StackDesc->Reference.TargetType)
00279             {
00280             case ACPI_TYPE_BUFFER_FIELD:
00281 
00282                 /* Just return - do not dereference */
00283                 break;
00284 
00285 
00286             case ACPI_TYPE_PACKAGE:
00287 
00288                 /* If method call or CopyObject - do not dereference */
00289 
00290                 if ((WalkState->Opcode == AML_INT_METHODCALL_OP) ||
00291                     (WalkState->Opcode == AML_COPY_OP))
00292                 {
00293                     break;
00294                 }
00295 
00296                 /* Otherwise, dereference the PackageIndex to a package element */
00297 
00298                 ObjDesc = *StackDesc->Reference.Where;
00299                 if (ObjDesc)
00300                 {
00301                     /*
00302                      * Valid object descriptor, copy pointer to return value
00303                      * (i.e., dereference the package index)
00304                      * Delete the ref object, increment the returned object
00305                      */
00306                     AcpiUtRemoveReference (StackDesc);
00307                     AcpiUtAddReference (ObjDesc);
00308                     *StackPtr = ObjDesc;
00309                 }
00310                 else
00311                 {
00312                     /*
00313                      * A NULL object descriptor means an uninitialized element of
00314                      * the package, can't dereference it
00315                      */
00316                     ACPI_ERROR ((AE_INFO,
00317                         "Attempt to dereference an Index to NULL package element Idx=%p",
00318                         StackDesc));
00319                     Status = AE_AML_UNINITIALIZED_ELEMENT;
00320                 }
00321                 break;
00322 
00323 
00324             default:
00325 
00326                 /* Invalid reference object */
00327 
00328                 ACPI_ERROR ((AE_INFO,
00329                     "Unknown TargetType 0x%X in Index/Reference object %p",
00330                     StackDesc->Reference.TargetType, StackDesc));
00331                 Status = AE_AML_INTERNAL;
00332                 break;
00333             }
00334             break;
00335 
00336 
00337         case ACPI_REFCLASS_REFOF:
00338         case ACPI_REFCLASS_DEBUG:
00339         case ACPI_REFCLASS_TABLE:
00340 
00341             /* Just leave the object as-is, do not dereference */
00342 
00343             break;
00344 
00345         case ACPI_REFCLASS_NAME:   /* Reference to a named object */
00346 
00347             /* Dereference the name */
00348 
00349             if ((StackDesc->Reference.Node->Type == ACPI_TYPE_DEVICE) ||
00350                 (StackDesc->Reference.Node->Type == ACPI_TYPE_THERMAL))
00351             {
00352                 /* These node types do not have 'real' subobjects */
00353 
00354                 *StackPtr = (void *) StackDesc->Reference.Node;
00355             }
00356             else
00357             {
00358                 /* Get the object pointed to by the namespace node */
00359 
00360                 *StackPtr = (StackDesc->Reference.Node)->Object;
00361                 AcpiUtAddReference (*StackPtr);
00362             }
00363 
00364             AcpiUtRemoveReference (StackDesc);
00365             break;
00366 
00367         default:
00368 
00369             ACPI_ERROR ((AE_INFO,
00370                 "Unknown Reference type 0x%X in %p", RefType, StackDesc));
00371             Status = AE_AML_INTERNAL;
00372             break;
00373         }
00374         break;
00375 
00376 
00377     case ACPI_TYPE_BUFFER:
00378 
00379         Status = AcpiDsGetBufferArguments (StackDesc);
00380         break;
00381 
00382 
00383     case ACPI_TYPE_PACKAGE:
00384 
00385         Status = AcpiDsGetPackageArguments (StackDesc);
00386         break;
00387 
00388 
00389     case ACPI_TYPE_BUFFER_FIELD:
00390     case ACPI_TYPE_LOCAL_REGION_FIELD:
00391     case ACPI_TYPE_LOCAL_BANK_FIELD:
00392     case ACPI_TYPE_LOCAL_INDEX_FIELD:
00393 
00394         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead SourceDesc=%p Type=%X\n",
00395             StackDesc, StackDesc->Common.Type));
00396 
00397         Status = AcpiExReadDataFromField (WalkState, StackDesc, &ObjDesc);
00398 
00399         /* Remove a reference to the original operand, then override */
00400 
00401         AcpiUtRemoveReference (*StackPtr);
00402         *StackPtr = (void *) ObjDesc;
00403         break;
00404 
00405     default:
00406         break;
00407     }
00408 
00409     return_ACPI_STATUS (Status);
00410 }
00411 
00412 
00413 /*******************************************************************************
00414  *
00415  * FUNCTION:    AcpiExResolveMultiple
00416  *
00417  * PARAMETERS:  WalkState           - Current state (contains AML opcode)
00418  *              Operand             - Starting point for resolution
00419  *              ReturnType          - Where the object type is returned
00420  *              ReturnDesc          - Where the resolved object is returned
00421  *
00422  * RETURN:      Status
00423  *
00424  * DESCRIPTION: Return the base object and type.  Traverse a reference list if
00425  *              necessary to get to the base object.
00426  *
00427  ******************************************************************************/
00428 
00429 ACPI_STATUS
00430 AcpiExResolveMultiple (
00431     ACPI_WALK_STATE         *WalkState,
00432     ACPI_OPERAND_OBJECT     *Operand,
00433     ACPI_OBJECT_TYPE        *ReturnType,
00434     ACPI_OPERAND_OBJECT     **ReturnDesc)
00435 {
00436     ACPI_OPERAND_OBJECT     *ObjDesc = (void *) Operand;
00437     ACPI_NAMESPACE_NODE     *Node;
00438     ACPI_OBJECT_TYPE        Type;
00439     ACPI_STATUS             Status;
00440 
00441 
00442     ACPI_FUNCTION_TRACE (AcpiExResolveMultiple);
00443 
00444 
00445     /* Operand can be either a namespace node or an operand descriptor */
00446 
00447     switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
00448     {
00449     case ACPI_DESC_TYPE_OPERAND:
00450         Type = ObjDesc->Common.Type;
00451         break;
00452 
00453     case ACPI_DESC_TYPE_NAMED:
00454         Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;
00455         ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);
00456 
00457         /* If we had an Alias node, use the attached object for type info */
00458 
00459         if (Type == ACPI_TYPE_LOCAL_ALIAS)
00460         {
00461             Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;
00462             ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);
00463         }
00464         break;
00465 
00466     default:
00467         return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
00468     }
00469 
00470     /* If type is anything other than a reference, we are done */
00471 
00472     if (Type != ACPI_TYPE_LOCAL_REFERENCE)
00473     {
00474         goto Exit;
00475     }
00476 
00477     /*
00478      * For reference objects created via the RefOf, Index, or Load/LoadTable
00479      * operators, we need to get to the base object (as per the ACPI
00480      * specification of the ObjectType and SizeOf operators). This means
00481      * traversing the list of possibly many nested references.
00482      */
00483     while (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)
00484     {
00485         switch (ObjDesc->Reference.Class)
00486         {
00487         case ACPI_REFCLASS_REFOF:
00488         case ACPI_REFCLASS_NAME:
00489 
00490             /* Dereference the reference pointer */
00491 
00492             if (ObjDesc->Reference.Class == ACPI_REFCLASS_REFOF)
00493             {
00494                 Node = ObjDesc->Reference.Object;
00495             }
00496             else /* AML_INT_NAMEPATH_OP */
00497             {
00498                 Node = ObjDesc->Reference.Node;
00499             }
00500 
00501             /* All "References" point to a NS node */
00502 
00503             if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
00504             {
00505                 ACPI_ERROR ((AE_INFO,
00506                     "Not a namespace node %p [%s]",
00507                     Node, AcpiUtGetDescriptorName (Node)));
00508                 return_ACPI_STATUS (AE_AML_INTERNAL);
00509             }
00510 
00511             /* Get the attached object */
00512 
00513             ObjDesc = AcpiNsGetAttachedObject (Node);
00514             if (!ObjDesc)
00515             {
00516                 /* No object, use the NS node type */
00517 
00518                 Type = AcpiNsGetType (Node);
00519                 goto Exit;
00520             }
00521 
00522             /* Check for circular references */
00523 
00524             if (ObjDesc == Operand)
00525             {
00526                 return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE);
00527             }
00528             break;
00529 
00530 
00531         case ACPI_REFCLASS_INDEX:
00532 
00533             /* Get the type of this reference (index into another object) */
00534 
00535             Type = ObjDesc->Reference.TargetType;
00536             if (Type != ACPI_TYPE_PACKAGE)
00537             {
00538                 goto Exit;
00539             }
00540 
00541             /*
00542              * The main object is a package, we want to get the type
00543              * of the individual package element that is referenced by
00544              * the index.
00545              *
00546              * This could of course in turn be another reference object.
00547              */
00548             ObjDesc = *(ObjDesc->Reference.Where);
00549             if (!ObjDesc)
00550             {
00551                 /* NULL package elements are allowed */
00552 
00553                 Type = 0; /* Uninitialized */
00554                 goto Exit;
00555             }
00556             break;
00557 
00558 
00559         case ACPI_REFCLASS_TABLE:
00560 
00561             Type = ACPI_TYPE_DDB_HANDLE;
00562             goto Exit;
00563 
00564 
00565         case ACPI_REFCLASS_LOCAL:
00566         case ACPI_REFCLASS_ARG:
00567 
00568             if (ReturnDesc)
00569             {
00570                 Status = AcpiDsMethodDataGetValue (ObjDesc->Reference.Class,
00571                             ObjDesc->Reference.Value, WalkState, &ObjDesc);
00572                 if (ACPI_FAILURE (Status))
00573                 {
00574                     return_ACPI_STATUS (Status);
00575                 }
00576                 AcpiUtRemoveReference (ObjDesc);
00577             }
00578             else
00579             {
00580                 Status = AcpiDsMethodDataGetNode (ObjDesc->Reference.Class,
00581                             ObjDesc->Reference.Value, WalkState, &Node);
00582                 if (ACPI_FAILURE (Status))
00583                 {
00584                     return_ACPI_STATUS (Status);
00585                 }
00586 
00587                 ObjDesc = AcpiNsGetAttachedObject (Node);
00588                 if (!ObjDesc)
00589                 {
00590                     Type = ACPI_TYPE_ANY;
00591                     goto Exit;
00592                 }
00593             }
00594             break;
00595 
00596 
00597         case ACPI_REFCLASS_DEBUG:
00598 
00599             /* The Debug Object is of type "DebugObject" */
00600 
00601             Type = ACPI_TYPE_DEBUG_OBJECT;
00602             goto Exit;
00603 
00604 
00605         default:
00606 
00607             ACPI_ERROR ((AE_INFO,
00608                 "Unknown Reference Class 0x%2.2X", ObjDesc->Reference.Class));
00609             return_ACPI_STATUS (AE_AML_INTERNAL);
00610         }
00611     }
00612 
00613     /*
00614      * Now we are guaranteed to have an object that has not been created
00615      * via the RefOf or Index operators.
00616      */
00617     Type = ObjDesc->Common.Type;
00618 
00619 
00620 Exit:
00621     /* Convert internal types to external types */
00622 
00623     switch (Type)
00624     {
00625     case ACPI_TYPE_LOCAL_REGION_FIELD:
00626     case ACPI_TYPE_LOCAL_BANK_FIELD:
00627     case ACPI_TYPE_LOCAL_INDEX_FIELD:
00628 
00629         Type = ACPI_TYPE_FIELD_UNIT;
00630         break;
00631 
00632     case ACPI_TYPE_LOCAL_SCOPE:
00633 
00634         /* Per ACPI Specification, Scope is untyped */
00635 
00636         Type = ACPI_TYPE_ANY;
00637         break;
00638 
00639     default:
00640         /* No change to Type required */
00641         break;
00642     }
00643 
00644     *ReturnType = Type;
00645     if (ReturnDesc)
00646     {
00647         *ReturnDesc = ObjDesc;
00648     }
00649     return_ACPI_STATUS (AE_OK);
00650 }
00651 
00652 

Generated on Sat May 26 2012 04:25:47 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.