您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ AcpiNsGetType函数代码示例

51自学网 2021-06-01 19:39:37
  C++
这篇教程C++ AcpiNsGetType函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中AcpiNsGetType函数的典型用法代码示例。如果您正苦于以下问题:C++ AcpiNsGetType函数的具体用法?C++ AcpiNsGetType怎么用?C++ AcpiNsGetType使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了AcpiNsGetType函数的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: AcpiNsInitOneObject

static ACPI_STATUSAcpiNsInitOneObject (    ACPI_HANDLE             ObjHandle,    UINT32                  Level,    void                    *Context,    void                    **ReturnValue){    ACPI_OBJECT_TYPE        Type;    ACPI_STATUS             Status = AE_OK;    ACPI_INIT_WALK_INFO     *Info = (ACPI_INIT_WALK_INFO *) Context;    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_FUNCTION_NAME (NsInitOneObject);    Info->ObjectCount++;    /* And even then, we are only interested in a few object types */    Type = AcpiNsGetType (ObjHandle);    ObjDesc = AcpiNsGetAttachedObject (Node);    if (!ObjDesc)    {        return (AE_OK);    }    /* Increment counters for object types we are looking for */    switch (Type)    {    case ACPI_TYPE_REGION:        Info->OpRegionCount++;        break;    case ACPI_TYPE_BUFFER_FIELD:        Info->FieldCount++;        break;    case ACPI_TYPE_LOCAL_BANK_FIELD:        Info->FieldCount++;        break;    case ACPI_TYPE_BUFFER:        Info->BufferCount++;        break;    case ACPI_TYPE_PACKAGE:        Info->PackageCount++;        break;    default:        /* No init required, just exit now */        return (AE_OK);    }    /* If the object is already initialized, nothing else to do */    if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)    {        return (AE_OK);    }    /* Must lock the interpreter before executing AML code */    AcpiExEnterInterpreter ();    /*     * Each of these types can contain executable AML code within the     * declaration.     */    switch (Type)    {    case ACPI_TYPE_REGION:        Info->OpRegionInit++;        Status = AcpiDsGetRegionArguments (ObjDesc);        break;    case ACPI_TYPE_BUFFER_FIELD:        Info->FieldInit++;        Status = AcpiDsGetBufferFieldArguments (ObjDesc);        break;    case ACPI_TYPE_LOCAL_BANK_FIELD:        Info->FieldInit++;        Status = AcpiDsGetBankFieldArguments (ObjDesc);        break;    case ACPI_TYPE_BUFFER://.........这里部分代码省略.........
开发者ID:CSharpLover,项目名称:MosquitOS,代码行数:101,


示例2: AcpiExResolveNodeToValue

ACPI_STATUSAcpiExResolveNodeToValue (    ACPI_NAMESPACE_NODE     **ObjectPtr,    ACPI_WALK_STATE         *WalkState){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *SourceDesc;    ACPI_OPERAND_OBJECT     *ObjDesc = NULL;    ACPI_NAMESPACE_NODE     *Node;    ACPI_OBJECT_TYPE        EntryType;    ACPI_FUNCTION_TRACE (ExResolveNodeToValue);    /*     * The stack pointer points to a ACPI_NAMESPACE_NODE (Node). Get the     * object that is attached to the Node.     */    Node       = *ObjectPtr;    SourceDesc = AcpiNsGetAttachedObject (Node);    EntryType  = AcpiNsGetType ((ACPI_HANDLE) Node);    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]/n",         Node, SourceDesc, AcpiUtGetTypeName (EntryType)));    if ((EntryType == ACPI_TYPE_LOCAL_ALIAS) ||        (EntryType == ACPI_TYPE_LOCAL_METHOD_ALIAS))    {        /* There is always exactly one level of indirection */        Node       = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object);        SourceDesc = AcpiNsGetAttachedObject (Node);        EntryType  = AcpiNsGetType ((ACPI_HANDLE) Node);        *ObjectPtr = Node;    }    /*     * Several object types require no further processing:     * 1) Device/Thermal objects don't have a "real" subobject, return the Node     * 2) Method locals and arguments have a pseudo-Node     * 3) 10/2007: Added method type to assist with Package construction.     */    if ((EntryType == ACPI_TYPE_DEVICE)  ||        (EntryType == ACPI_TYPE_THERMAL) ||        (EntryType == ACPI_TYPE_METHOD)  ||        (Node->Flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL)))    {        return_ACPI_STATUS (AE_OK);    }    if (!SourceDesc)    {        ACPI_ERROR ((AE_INFO, "No object attached to node %p",            Node));        return_ACPI_STATUS (AE_AML_NO_OPERAND);    }    /*     * Action is based on the type of the Node, which indicates the type     * of the attached object or pointer     */    switch (EntryType)    {    case ACPI_TYPE_PACKAGE:        if (SourceDesc->Common.Type != ACPI_TYPE_PACKAGE)        {            ACPI_ERROR ((AE_INFO, "Object not a Package, type %s",                AcpiUtGetObjectTypeName (SourceDesc)));            return_ACPI_STATUS (AE_AML_OPERAND_TYPE);        }        Status = AcpiDsGetPackageArguments (SourceDesc);        if (ACPI_SUCCESS (Status))        {            /* Return an additional reference to the object */            ObjDesc = SourceDesc;            AcpiUtAddReference (ObjDesc);        }        break;    case ACPI_TYPE_BUFFER:        if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER)        {            ACPI_ERROR ((AE_INFO, "Object not a Buffer, type %s",                AcpiUtGetObjectTypeName (SourceDesc)));            return_ACPI_STATUS (AE_AML_OPERAND_TYPE);        }        Status = AcpiDsGetBufferArguments (SourceDesc);        if (ACPI_SUCCESS (Status))        {            /* Return an additional reference to the object */            ObjDesc = SourceDesc;//.........这里部分代码省略.........
开发者ID:cloudius-systems,项目名称:acpica,代码行数:101,


示例3: AcpiEvaluateObject

//.........这里部分代码省略.........         * Add 1 to count to allow for null terminated internal list         */        Info->Parameters = ACPI_ALLOCATE_ZEROED (            ((ACPI_SIZE) Info->ParamCount + 1) * sizeof (void *));        if (!Info->Parameters)        {            Status = AE_NO_MEMORY;            goto Cleanup;        }        /* Convert each external object in the list to an internal object */        for (i = 0; i < Info->ParamCount; i++)        {            Status = AcpiUtCopyEobjectToIobject (                &ExternalParams->Pointer[i], &Info->Parameters[i]);            if (ACPI_FAILURE (Status))            {                goto Cleanup;            }        }        Info->Parameters[Info->ParamCount] = NULL;    }#if 0    /*     * Begin incoming argument count analysis. Check for too few args     * and too many args.     */    switch (AcpiNsGetType (Info->Node))    {    case ACPI_TYPE_METHOD:        /* Check incoming argument count against the method definition */        if (Info->ObjDesc->Method.ParamCount > Info->ParamCount)        {            ACPI_ERROR ((AE_INFO,                "Insufficient arguments (%u) - %u are required",                Info->ParamCount,                Info->ObjDesc->Method.ParamCount));            Status = AE_MISSING_ARGUMENTS;            goto Cleanup;        }        else if (Info->ObjDesc->Method.ParamCount < Info->ParamCount)        {            ACPI_WARNING ((AE_INFO,                "Excess arguments (%u) - only %u are required",                Info->ParamCount,                Info->ObjDesc->Method.ParamCount));            /* Just pass the required number of arguments */            Info->ParamCount = Info->ObjDesc->Method.ParamCount;        }        /*         * Any incoming external objects to be passed as arguments to the         * method must be converted to internal objects         */
开发者ID:AmirAbrams,项目名称:haiku,代码行数:67,


示例4: AcpiNsExecModuleCode

static voidAcpiNsExecModuleCode (    ACPI_OPERAND_OBJECT     *MethodObj,    ACPI_EVALUATE_INFO      *Info){    ACPI_OPERAND_OBJECT     *ParentObj;    ACPI_NAMESPACE_NODE     *ParentNode;    ACPI_OBJECT_TYPE        Type;    ACPI_STATUS             Status;    ACPI_FUNCTION_TRACE (NsExecModuleCode);    /*     * Get the parent node. We cheat by using the NextObject field     * of the method object descriptor.     */    ParentNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE,                    MethodObj->Method.NextObject);    Type = AcpiNsGetType (ParentNode);    /*     * Get the region handler and save it in the method object. We may need     * this if an operation region declaration causes a _REG method to be run.     *     * We can't do this in AcpiPsLinkModuleCode because     * AcpiGbl_RootNode->Object is NULL at PASS1.     */    if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object)    {        MethodObj->Method.Dispatch.Handler =            ParentNode->Object->Device.Handler;    }    /* Must clear NextObject (AcpiNsAttachObject needs the field) */    MethodObj->Method.NextObject = NULL;    /* Initialize the evaluation information block */    ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO));    Info->PrefixNode = ParentNode;    /*     * Get the currently attached parent object. Add a reference, because the     * ref count will be decreased when the method object is installed to     * the parent node.     */    ParentObj = AcpiNsGetAttachedObject (ParentNode);    if (ParentObj)    {        AcpiUtAddReference (ParentObj);    }    /* Install the method (module-level code) in the parent node */    Status = AcpiNsAttachObject (ParentNode, MethodObj,                ACPI_TYPE_METHOD);    if (ACPI_FAILURE (Status))    {        goto Exit;    }    /* Execute the parent node as a control method */    Status = AcpiNsEvaluate (Info);    ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Executed module-level code at %p/n",        MethodObj->Method.AmlStart));    /* Delete a possible implicit return value (in slack mode) */    if (Info->ReturnObject)    {        AcpiUtRemoveReference (Info->ReturnObject);    }    /* Detach the temporary method object */    AcpiNsDetachObject (ParentNode);    /* Restore the original parent object */    if (ParentObj)    {        Status = AcpiNsAttachObject (ParentNode, ParentObj, Type);    }    else    {        ParentNode->Type = (UINT8) Type;    }Exit:    if (ParentObj)    {        AcpiUtRemoveReference (ParentObj);    }    return_VOID;}
开发者ID:LauraBerry,项目名称:A2cpsc457,代码行数:100,


示例5: AcpiExStoreObjectToNode

ACPI_STATUSAcpiExStoreObjectToNode (    ACPI_OPERAND_OBJECT     *SourceDesc,    ACPI_NAMESPACE_NODE     *Node,    ACPI_WALK_STATE         *WalkState,    UINT8                   ImplicitConversion){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *TargetDesc;    ACPI_OPERAND_OBJECT     *NewDesc;    ACPI_OBJECT_TYPE        TargetType;    ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToNode, SourceDesc);    /* Get current type of the node, and object attached to Node */    TargetType = AcpiNsGetType (Node);    TargetDesc = AcpiNsGetAttachedObject (Node);    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p (%s) to node %p (%s)/n",        SourceDesc, AcpiUtGetObjectTypeName (SourceDesc),              Node, AcpiUtGetTypeName (TargetType)));    /*     * Resolve the source object to an actual value     * (If it is a reference object)     */    Status = AcpiExResolveObject (&SourceDesc, TargetType, WalkState);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    /* Do the actual store operation */    switch (TargetType)    {    case ACPI_TYPE_INTEGER:    case ACPI_TYPE_STRING:    case ACPI_TYPE_BUFFER:        /*         * The simple data types all support implicit source operand         * conversion before the store.         */        if ((WalkState->Opcode == AML_COPY_OP) ||            !ImplicitConversion)        {            /*             * However, CopyObject and Stores to ArgX do not perform             * an implicit conversion, as per the ACPI specification.             * A direct store is performed instead.             */            Status = AcpiExStoreDirectToNode (SourceDesc, Node,                WalkState);            break;        }        /* Store with implicit source operand conversion support */        Status = AcpiExStoreObjectToObject (SourceDesc, TargetDesc,            &NewDesc, WalkState);        if (ACPI_FAILURE (Status))        {            return_ACPI_STATUS (Status);        }        if (NewDesc != TargetDesc)        {            /*             * Store the new NewDesc as the new value of the Name, and set             * the Name's type to that of the value being stored in it.             * SourceDesc reference count is incremented by AttachObject.             *             * Note: This may change the type of the node if an explicit             * store has been performed such that the node/object type             * has been changed.             */            Status = AcpiNsAttachObject (Node, NewDesc,                NewDesc->Common.Type);            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,                "Store %s into %s via Convert/Attach/n",                AcpiUtGetObjectTypeName (SourceDesc),                AcpiUtGetObjectTypeName (NewDesc)));        }        break;    case ACPI_TYPE_BUFFER_FIELD:    case ACPI_TYPE_LOCAL_REGION_FIELD:    case ACPI_TYPE_LOCAL_BANK_FIELD:    case ACPI_TYPE_LOCAL_INDEX_FIELD:        /*         * For all fields, always write the source data to the target         * field. Any required implicit source operand conversion is         * performed in the function below as necessary. Note, field         * objects must retain their original type permanently.         *///.........这里部分代码省略.........
开发者ID:JasonFord53,项目名称:freebsd,代码行数:101,


示例6: AcpiDsInitOneObject

ACPI_STATUSAcpiDsInitOneObject (    ACPI_HANDLE             ObjHandle,    UINT32                  Level,    void                    *Context,    void                    **ReturnValue){    ACPI_OBJECT_TYPE        Type;    ACPI_STATUS             Status;    ACPI_INIT_WALK_INFO     *Info = (ACPI_INIT_WALK_INFO *) Context;    ACPI_FUNCTION_NAME ("DsInitOneObject");    /*     * We are only interested in objects owned by the table that     * was just loaded     */    if (((ACPI_NAMESPACE_NODE *) ObjHandle)->OwnerId !=            Info->TableDesc->TableId)    {        return (AE_OK);    }    Info->ObjectCount++;    /* And even then, we are only interested in a few object types */    Type = AcpiNsGetType (ObjHandle);    switch (Type)    {    case ACPI_TYPE_REGION:        Status = AcpiDsInitializeRegion (ObjHandle);        if (ACPI_FAILURE (Status))        {            ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Region %p [%4.4s] - Init failure, %s/n",                ObjHandle, ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii,                AcpiFormatException (Status)));        }        Info->OpRegionCount++;        break;    case ACPI_TYPE_METHOD:        Info->MethodCount++;        /* Print a dot for each method unless we are going to print the entire pathname */        if (!(AcpiDbgLevel & ACPI_LV_INIT_NAMES))        {            ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));        }        /*         * Set the execution data width (32 or 64) based upon the         * revision number of the parent ACPI table.         * TBD: This is really for possible future support of integer width         * on a per-table basis. Currently, we just use a global for the width.         */        if (Info->TableDesc->Pointer->Revision == 1)        {            ((ACPI_NAMESPACE_NODE *) ObjHandle)->Flags |= ANOBJ_DATA_WIDTH_32;        }        /*         * Always parse methods to detect errors, we may delete         * the parse tree below         */        Status = AcpiDsParseMethod (ObjHandle);        if (ACPI_FAILURE (Status))        {            ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Method %p [%4.4s] - parse failure, %s/n",                ObjHandle, ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii,                AcpiFormatException (Status)));            /* This parse failed, but we will continue parsing more methods */            break;        }        /*         * Delete the parse tree.  We simple re-parse the method         * for every execution since there isn't much overhead         */        AcpiNsDeleteNamespaceSubtree (ObjHandle);        AcpiNsDeleteNamespaceByOwner (((ACPI_NAMESPACE_NODE *) ObjHandle)->Object->Method.OwningId);        break;    case ACPI_TYPE_DEVICE:        Info->DeviceCount++;        break;//.........这里部分代码省略.........
开发者ID:UnitedMarsupials,项目名称:kame,代码行数:101,


示例7: AcpiNsEvaluate

ACPI_STATUSAcpiNsEvaluate (    ACPI_EVALUATE_INFO      *Info){    ACPI_STATUS             Status;    ACPI_FUNCTION_TRACE (NsEvaluate);    if (!Info)    {        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    if (!Info->Node)    {        /*         * Get the actual namespace node for the target object if we         * need to. Handles these cases:         *         * 1) Null node, valid pathname from root (absolute path)         * 2) Node and valid pathname (path relative to Node)         * 3) Node, Null pathname         */        Status = AcpiNsGetNode (Info->PrefixNode, Info->RelativePathname,            ACPI_NS_NO_UPSEARCH, &Info->Node);        if (ACPI_FAILURE (Status))        {            return_ACPI_STATUS (Status);        }    }    /*     * For a method alias, we must grab the actual method node so that     * proper scoping context will be established before execution.     */    if (AcpiNsGetType (Info->Node) == ACPI_TYPE_LOCAL_METHOD_ALIAS)    {        Info->Node = ACPI_CAST_PTR (            ACPI_NAMESPACE_NODE, Info->Node->Object);    }    /* Complete the info block initialization */    Info->ReturnObject = NULL;    Info->NodeFlags = Info->Node->Flags;    Info->ObjDesc = AcpiNsGetAttachedObject (Info->Node);    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p/n",        Info->RelativePathname, Info->Node,        AcpiNsGetAttachedObject (Info->Node)));    /* Get info if we have a predefined name (_HID, etc.) */    Info->Predefined = AcpiUtMatchPredefinedMethod (Info->Node->Name.Ascii);    /* Get the full pathname to the object, for use in warning messages */    Info->FullPathname = AcpiNsGetExternalPathname (Info->Node);    if (!Info->FullPathname)    {        return_ACPI_STATUS (AE_NO_MEMORY);    }    /* Count the number of arguments being passed in */    Info->ParamCount = 0;    if (Info->Parameters)    {        while (Info->Parameters[Info->ParamCount])        {            Info->ParamCount++;        }        /* Warn on impossible argument count */        if (Info->ParamCount > ACPI_METHOD_NUM_ARGS)        {            ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, ACPI_WARN_ALWAYS,                "Excess arguments (%u) - using only %u",                Info->ParamCount, ACPI_METHOD_NUM_ARGS));            Info->ParamCount = ACPI_METHOD_NUM_ARGS;        }    }    /*     * For predefined names: Check that the declared argument count     * matches the ACPI spec -- otherwise this is a BIOS error.     */    AcpiNsCheckAcpiCompliance (Info->FullPathname, Info->Node,        Info->Predefined);    /*     * For all names: Check that the incoming argument count for     * this method/object matches the actual ASL/AML definition.     */    AcpiNsCheckArgumentCount (Info->FullPathname, Info->Node,        Info->ParamCount, Info->Predefined);//.........这里部分代码省略.........
开发者ID:LauraBerry,项目名称:A2cpsc457,代码行数:101,


示例8: AcpiExPrepFieldValue

ACPI_STATUSAcpiExPrepFieldValue (    ACPI_CREATE_FIELD_INFO  *Info){    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_OPERAND_OBJECT     *SecondDesc = NULL;    ACPI_STATUS             Status;    UINT32                  AccessByteWidth;    UINT32                  Type;    ACPI_FUNCTION_TRACE (ExPrepFieldValue);    /* Parameter validation */    if (Info->FieldType != ACPI_TYPE_LOCAL_INDEX_FIELD)    {        if (!Info->RegionNode)        {            ACPI_ERROR ((AE_INFO, "Null RegionNode"));            return_ACPI_STATUS (AE_AML_NO_OPERAND);        }        Type = AcpiNsGetType (Info->RegionNode);        if (Type != ACPI_TYPE_REGION)        {            ACPI_ERROR ((AE_INFO, "Needed Region, found type 0x%X (%s)",                Type, AcpiUtGetTypeName (Type)));            return_ACPI_STATUS (AE_AML_OPERAND_TYPE);        }    }    /* Allocate a new field object */    ObjDesc = AcpiUtCreateInternalObject (Info->FieldType);    if (!ObjDesc)    {        return_ACPI_STATUS (AE_NO_MEMORY);    }    /* Initialize areas of the object that are common to all fields */    ObjDesc->CommonField.Node = Info->FieldNode;    Status = AcpiExPrepCommonFieldObject (ObjDesc,                Info->FieldFlags, Info->Attribute,                Info->FieldBitPosition, Info->FieldBitLength);    if (ACPI_FAILURE (Status))    {        AcpiUtDeleteObjectDesc (ObjDesc);        return_ACPI_STATUS (Status);    }    /* Initialize areas of the object that are specific to the field type */    switch (Info->FieldType)    {    case ACPI_TYPE_LOCAL_REGION_FIELD:        ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode);        /* Fields specific to GenericSerialBus fields */        ObjDesc->Field.AccessLength = Info->AccessLength;        if (Info->ConnectionNode)        {            SecondDesc = Info->ConnectionNode->Object;            if (!(SecondDesc->Common.Flags & AOPOBJ_DATA_VALID))            {                Status = AcpiDsGetBufferArguments (SecondDesc);                if (ACPI_FAILURE (Status))                {                    AcpiUtDeleteObjectDesc (ObjDesc);                    return_ACPI_STATUS (Status);                }            }            ObjDesc->Field.ResourceBuffer = SecondDesc->Buffer.Pointer;            ObjDesc->Field.ResourceLength = (UINT16) SecondDesc->Buffer.Length;        }        else if (Info->ResourceBuffer)        {            ObjDesc->Field.ResourceBuffer = Info->ResourceBuffer;            ObjDesc->Field.ResourceLength = Info->ResourceLength;        }        /* Allow full data read from EC address space */        if ((ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) &&            (ObjDesc->CommonField.BitLength > 8))        {            AccessByteWidth = ACPI_ROUND_BITS_UP_TO_BYTES (                ObjDesc->CommonField.BitLength);            /* Maximum byte width supported is 255 */            if (AccessByteWidth < 256)            {//.........这里部分代码省略.........
开发者ID:CSharpLover,项目名称:MosquitOS,代码行数:101,


示例9: AcpiDsInitOneObject

static ACPI_STATUSAcpiDsInitOneObject (    ACPI_HANDLE             ObjHandle,    UINT32                  Level,    void                    *Context,    void                    **ReturnValue){    ACPI_INIT_WALK_INFO     *Info = (ACPI_INIT_WALK_INFO *) Context;    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;    ACPI_OBJECT_TYPE        Type;    ACPI_STATUS             Status;    ACPI_FUNCTION_ENTRY ();    /*     * We are only interested in NS nodes owned by the table that     * was just loaded     */    if (Node->OwnerId != Info->OwnerId)    {        return (AE_OK);    }    Info->ObjectCount++;    /* And even then, we are only interested in a few object types */    Type = AcpiNsGetType (ObjHandle);    switch (Type)    {    case ACPI_TYPE_REGION:        Status = AcpiDsInitializeRegion (ObjHandle);        if (ACPI_FAILURE (Status))        {            ACPI_EXCEPTION ((AE_INFO, Status,                "During Region initialization %p [%4.4s]",                ObjHandle, AcpiUtGetNodeName (ObjHandle)));        }        Info->OpRegionCount++;        break;    case ACPI_TYPE_METHOD:        Info->MethodCount++;        break;    case ACPI_TYPE_DEVICE:        Info->DeviceCount++;        break;    default:        break;    }    /*     * We ignore errors from above, and always return OK, since     * we don't want to abort the walk on a single error.     */    return (AE_OK);}
开发者ID:Aresthu,项目名称:ucore_plus,代码行数:69,


示例10: AcpiExStoreObjectToNode

ACPI_STATUSAcpiExStoreObjectToNode (    ACPI_OPERAND_OBJECT     *SourceDesc,    ACPI_NAMESPACE_NODE     *Node,    ACPI_WALK_STATE         *WalkState,    UINT8                   ImplicitConversion){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *TargetDesc;    ACPI_OPERAND_OBJECT     *NewDesc;    ACPI_OBJECT_TYPE        TargetType;    ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToNode, SourceDesc);    /* Get current type of the node, and object attached to Node */    TargetType = AcpiNsGetType (Node);    TargetDesc = AcpiNsGetAttachedObject (Node);    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p [%s] to node %p [%s]/n",        SourceDesc, AcpiUtGetObjectTypeName (SourceDesc),        Node, AcpiUtGetTypeName (TargetType)));    /* Only limited target types possible for everything except CopyObject */    if (WalkState->Opcode != AML_COPY_OBJECT_OP)    {        /*         * Only CopyObject allows all object types to be overwritten. For         * TargetRef(s), there are restrictions on the object types that         * are allowed.         *         * Allowable operations/typing for Store:         *         * 1) Simple Store         *      Integer     --> Integer (Named/Local/Arg)         *      String      --> String  (Named/Local/Arg)         *      Buffer      --> Buffer  (Named/Local/Arg)         *      Package     --> Package (Named/Local/Arg)         *         * 2) Store with implicit conversion         *      Integer     --> String or Buffer  (Named)         *      String      --> Integer or Buffer (Named)         *      Buffer      --> Integer or String (Named)         */        switch (TargetType)        {        case ACPI_TYPE_PACKAGE:            /*             * Here, can only store a package to an existing package.             * Storing a package to a Local/Arg is OK, and handled             * elsewhere.             */            if (WalkState->Opcode == AML_STORE_OP)            {                if (SourceDesc->Common.Type != ACPI_TYPE_PACKAGE)                {                    ACPI_ERROR ((AE_INFO,                        "Cannot assign type [%s] to [Package] "                        "(source must be type Pkg)",                        AcpiUtGetObjectTypeName (SourceDesc)));                    return_ACPI_STATUS (AE_AML_TARGET_TYPE);                }                break;            }        /* Fallthrough */        case ACPI_TYPE_DEVICE:        case ACPI_TYPE_EVENT:        case ACPI_TYPE_MUTEX:        case ACPI_TYPE_REGION:        case ACPI_TYPE_POWER:        case ACPI_TYPE_PROCESSOR:        case ACPI_TYPE_THERMAL:            ACPI_ERROR ((AE_INFO,                "Target must be [Buffer/Integer/String/Reference]"                ", found [%s] (%4.4s)",                AcpiUtGetTypeName (Node->Type), Node->Name.Ascii));            return_ACPI_STATUS (AE_AML_TARGET_TYPE);        default:            break;        }    }    /*     * Resolve the source object to an actual value     * (If it is a reference object)     */    Status = AcpiExResolveObject (&SourceDesc, TargetType, WalkState);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }//.........这里部分代码省略.........
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:101,


示例11: AcpiNsEvaluate

ACPI_STATUSAcpiNsEvaluate (    ACPI_EVALUATE_INFO      *Info){    ACPI_STATUS             Status;    ACPI_NAMESPACE_NODE     *Node;    ACPI_FUNCTION_TRACE (NsEvaluate);    if (!Info)    {        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    /* Initialize the return value to an invalid object */    Info->ReturnObject = NULL;    Info->ParamCount = 0;    /*     * Get the actual namespace node for the target object. Handles these cases:     *     * 1) Null node, Pathname (absolute path)     * 2) Node, Pathname (path relative to Node)     * 3) Node, Null Pathname     */    Status = AcpiNsGetNode (Info->PrefixNode, Info->Pathname,                ACPI_NS_NO_UPSEARCH, &Info->ResolvedNode);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    /*     * For a method alias, we must grab the actual method node so that proper     * scoping context will be established before execution.     */    if (AcpiNsGetType (Info->ResolvedNode) == ACPI_TYPE_LOCAL_METHOD_ALIAS)    {        Info->ResolvedNode =            ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Info->ResolvedNode->Object);    }    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p/n", Info->Pathname,        Info->ResolvedNode, AcpiNsGetAttachedObject (Info->ResolvedNode)));    Node = Info->ResolvedNode;    /*     * Two major cases here:     *     * 1) The object is a control method -- execute it     * 2) The object is not a method -- just return it's current value     */    if (AcpiNsGetType (Info->ResolvedNode) == ACPI_TYPE_METHOD)    {        /*         * 1) Object is a control method - execute it         */        /* Verify that there is a method object associated with this node */        Info->ObjDesc = AcpiNsGetAttachedObject (Info->ResolvedNode);        if (!Info->ObjDesc)        {            ACPI_ERROR ((AE_INFO, "Control method has no attached sub-object"));            return_ACPI_STATUS (AE_NULL_OBJECT);        }        /* Count the number of arguments being passed to the method */        if (Info->Parameters)        {            while (Info->Parameters[Info->ParamCount])            {                if (Info->ParamCount > ACPI_METHOD_MAX_ARG)                {                    return_ACPI_STATUS (AE_LIMIT);                }                Info->ParamCount++;            }        }        ACPI_DUMP_PATHNAME (Info->ResolvedNode, "ACPI: Execute Method",            ACPI_LV_INFO, _COMPONENT);        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,            "Method at AML address %p Length %X/n",            Info->ObjDesc->Method.AmlStart + 1,            Info->ObjDesc->Method.AmlLength - 1));        /*         * Any namespace deletion must acquire both the namespace and         * interpreter locks to ensure that no thread is using the portion of         * the namespace that is being deleted.         *         * Execute the method via the interpreter. The interpreter is locked         * here before calling into the AML parser//.........这里部分代码省略.........
开发者ID:cloudius-systems,项目名称:acpica,代码行数:101,


示例12: AcpiExStoreObjectToNode

ACPI_STATUSAcpiExStoreObjectToNode (    ACPI_OPERAND_OBJECT     *SourceDesc,    ACPI_NAMESPACE_NODE     *Node,    ACPI_WALK_STATE         *WalkState,    UINT8                   ImplicitConversion){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *TargetDesc;    ACPI_OPERAND_OBJECT     *NewDesc;    ACPI_OBJECT_TYPE        TargetType;    ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToNode, SourceDesc);    /* Get current type of the node, and object attached to Node */    TargetType = AcpiNsGetType (Node);    TargetDesc = AcpiNsGetAttachedObject (Node);    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)/n",        SourceDesc, AcpiUtGetObjectTypeName (SourceDesc),              Node, AcpiUtGetTypeName (TargetType)));    /*     * Resolve the source object to an actual value     * (If it is a reference object)     */    Status = AcpiExResolveObject (&SourceDesc, TargetType, WalkState);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    /* If no implicit conversion, drop into the default case below */    if ((!ImplicitConversion) ||          ((WalkState->Opcode == AML_COPY_OP) &&           (TargetType != ACPI_TYPE_LOCAL_REGION_FIELD) &&           (TargetType != ACPI_TYPE_LOCAL_BANK_FIELD) &&           (TargetType != ACPI_TYPE_LOCAL_INDEX_FIELD)))    {        /*         * Force execution of default (no implicit conversion). Note:         * CopyObject does not perform an implicit conversion, as per the ACPI         * spec -- except in case of region/bank/index fields -- because these         * objects must retain their original type permanently.         */        TargetType = ACPI_TYPE_ANY;    }    /* Do the actual store operation */    switch (TargetType)    {    case ACPI_TYPE_BUFFER_FIELD:    case ACPI_TYPE_LOCAL_REGION_FIELD:    case ACPI_TYPE_LOCAL_BANK_FIELD:    case ACPI_TYPE_LOCAL_INDEX_FIELD:        /* For fields, copy the source data to the target field. */        Status = AcpiExWriteDataToField (SourceDesc, TargetDesc,                    &WalkState->ResultObj);        break;    case ACPI_TYPE_INTEGER:    case ACPI_TYPE_STRING:    case ACPI_TYPE_BUFFER:        /*         * These target types are all of type Integer/String/Buffer, and         * therefore support implicit conversion before the store.         *         * Copy and/or convert the source object to a new target object         */        Status = AcpiExStoreObjectToObject (SourceDesc, TargetDesc,                    &NewDesc, WalkState);        if (ACPI_FAILURE (Status))        {            return_ACPI_STATUS (Status);        }        if (NewDesc != TargetDesc)        {            /*             * Store the new NewDesc as the new value of the Name, and set             * the Name's type to that of the value being stored in it.             * SourceDesc reference count is incremented by AttachObject.             *             * Note: This may change the type of the node if an explicit store             * has been performed such that the node/object type has been             * changed.             */            Status = AcpiNsAttachObject (Node, NewDesc, NewDesc->Common.Type);            ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,                "Store %s into %s via Convert/Attach/n",//.........这里部分代码省略.........
开发者ID:NoSuchProcess,项目名称:phantomuserland,代码行数:101,


示例13: AcpiNsEvaluateByHandle

ACPI_STATUSAcpiNsEvaluateByHandle (    ACPI_NAMESPACE_NODE     *Handle,    ACPI_OPERAND_OBJECT     **Params,    ACPI_OPERAND_OBJECT     **ReturnObject){    ACPI_NAMESPACE_NODE     *Node;    ACPI_STATUS             Status;    ACPI_OPERAND_OBJECT     *LocalReturnObject;    ACPI_FUNCTION_TRACE ("NsEvaluateByHandle");    /* Check if namespace has been initialized */    if (!AcpiGbl_RootNode)    {        return_ACPI_STATUS (AE_NO_NAMESPACE);    }    /* Parameter Validation */    if (!Handle)    {        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    if (ReturnObject)    {        /* Initialize the return value to an invalid object */        *ReturnObject = NULL;    }    /* Get the prefix handle and Node */    Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    Node = AcpiNsMapHandleToNode (Handle);    if (!Node)    {        (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);        return_ACPI_STATUS (AE_BAD_PARAMETER);    }    /*     * Two major cases here:     * 1) The object is an actual control method -- execute it.     * 2) The object is not a method -- just return it's current     *      value     *     * In both cases, the namespace is unlocked by the     *  AcpiNs* procedure     */    if (AcpiNsGetType (Node) == ACPI_TYPE_METHOD)    {        /*         * Case 1) We have an actual control method to execute         */        Status = AcpiNsExecuteControlMethod (Node, Params,                                            &LocalReturnObject);    }    else    {        /*         * Case 2) Object is NOT a method, just return its         * current value         */        Status = AcpiNsGetObjectValue (Node, &LocalReturnObject);    }    /*     * Check if there is a return value on the stack that must     * be dealt with     */    if (Status == AE_CTRL_RETURN_VALUE)    {        /*         * If the Method returned a value and the caller         * provided a place to store a returned value, Copy         * the returned value to the object descriptor provided         * by the caller.         */        if (ReturnObject)        {            /*             * Valid return object, copy the pointer to             * the returned object             */            *ReturnObject = LocalReturnObject;        }        /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */        Status = AE_OK;//.........这里部分代码省略.........
开发者ID:UnitedMarsupials,项目名称:kame,代码行数:101,



注:本文中的AcpiNsGetType函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ AcpiNsHandleToPathname函数代码示例
C++ AcpiNsGetSecondaryObject函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。