⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dswstate.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
ACPI_STATUSAcpiDsObjStackPop (    UINT32                  PopCount,    ACPI_WALK_STATE         *WalkState){    UINT32                  i;    ACPI_FUNCTION_NAME (DsObjStackPop);    for (i = 0; i < PopCount; i++)    {        /* Check for stack underflow */        if (WalkState->NumOperands == 0)        {            ACPI_ERROR ((AE_INFO,                "Object stack underflow! Count=%X State=%p #Ops=%X",                PopCount, WalkState, WalkState->NumOperands));            return (AE_STACK_UNDERFLOW);        }        /* Just set the stack entry to null */        WalkState->NumOperands--;        WalkState->Operands [WalkState->NumOperands] = NULL;    }    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",        PopCount, WalkState, WalkState->NumOperands));    return (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiDsObjStackPopAndDelete * * PARAMETERS:  PopCount            - Number of objects/entries to pop *              WalkState           - Current Walk state * * RETURN:      Status * * DESCRIPTION: Pop this walk's object stack and delete each object that is *              popped off. * ******************************************************************************/voidAcpiDsObjStackPopAndDelete (    UINT32                  PopCount,    ACPI_WALK_STATE         *WalkState){    ACPI_NATIVE_INT         i;    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_FUNCTION_NAME (DsObjStackPopAndDelete);    if (PopCount == 0)    {        return;    }    for (i = (ACPI_NATIVE_INT)(PopCount - 1); i >= 0; i--)    {        if (WalkState->NumOperands == 0)        {            return;        }        /* Pop the stack and delete an object if present in this stack entry */        WalkState->NumOperands--;        ObjDesc = WalkState->Operands [i];        if (ObjDesc)        {            AcpiUtRemoveReference (WalkState->Operands [i]);            WalkState->Operands [i] = NULL;        }    }    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",        PopCount, WalkState, WalkState->NumOperands));}/******************************************************************************* * * FUNCTION:    AcpiDsGetCurrentWalkState * * PARAMETERS:  Thread          - Get current active state for this Thread * * RETURN:      Pointer to the current walk state * * DESCRIPTION: Get the walk state that is at the head of the list (the "current" *              walk state.) * ******************************************************************************/ACPI_WALK_STATE *AcpiDsGetCurrentWalkState (    ACPI_THREAD_STATE       *Thread){    ACPI_FUNCTION_NAME (DsGetCurrentWalkState);    if (!Thread)    {        return (NULL);    }    ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Current WalkState %p\n",        Thread->WalkStateList));    return (Thread->WalkStateList);}/******************************************************************************* * * FUNCTION:    AcpiDsPushWalkState * * PARAMETERS:  WalkState       - State to push *              Thread          - Thread state object * * RETURN:      None * * DESCRIPTION: Place the Thread state at the head of the state list * ******************************************************************************/voidAcpiDsPushWalkState (    ACPI_WALK_STATE         *WalkState,    ACPI_THREAD_STATE       *Thread){    ACPI_FUNCTION_TRACE (DsPushWalkState);    WalkState->Next = Thread->WalkStateList;    Thread->WalkStateList = WalkState;    return_VOID;}/******************************************************************************* * * FUNCTION:    AcpiDsPopWalkState * * PARAMETERS:  Thread      - Current thread state * * RETURN:      A WalkState object popped from the thread's stack * * DESCRIPTION: Remove and return the walkstate object that is at the head of *              the walk stack for the given walk list.  NULL indicates that *              the list is empty. * ******************************************************************************/ACPI_WALK_STATE *AcpiDsPopWalkState (    ACPI_THREAD_STATE       *Thread){    ACPI_WALK_STATE         *WalkState;    ACPI_FUNCTION_TRACE (DsPopWalkState);    WalkState = Thread->WalkStateList;    if (WalkState)    {        /* Next walk state becomes the current walk state */        Thread->WalkStateList = WalkState->Next;        /*         * Don't clear the NEXT field, this serves as an indicator         * that there is a parent WALK STATE         * Do Not: WalkState->Next = NULL;         */    }    return_PTR (WalkState);}/******************************************************************************* * * FUNCTION:    AcpiDsCreateWalkState * * PARAMETERS:  OwnerId         - ID for object creation *              Origin          - Starting point for this walk *              MethodDesc      - Method object *              Thread          - Current thread state * * RETURN:      Pointer to the new walk state. * * DESCRIPTION: Allocate and initialize a new walk state.  The current walk *              state is set to this new state. * ******************************************************************************/ACPI_WALK_STATE *AcpiDsCreateWalkState (    ACPI_OWNER_ID           OwnerId,    ACPI_PARSE_OBJECT       *Origin,    ACPI_OPERAND_OBJECT     *MethodDesc,    ACPI_THREAD_STATE       *Thread){    ACPI_WALK_STATE         *WalkState;    ACPI_FUNCTION_TRACE (DsCreateWalkState);    WalkState = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_WALK_STATE));    if (!WalkState)    {        return_PTR (NULL);    }    WalkState->DescriptorType = ACPI_DESC_TYPE_WALK;    WalkState->MethodDesc = MethodDesc;    WalkState->OwnerId = OwnerId;    WalkState->Origin = Origin;    WalkState->Thread = Thread;    WalkState->ParserState.StartOp = Origin;    /* Init the method args/local */#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))    AcpiDsMethodDataInit (WalkState);#endif    /* Put the new state at the head of the walk list */    if (Thread)    {        AcpiDsPushWalkState (WalkState, Thread);    }    return_PTR (WalkState);}/******************************************************************************* * * FUNCTION:    AcpiDsInitAmlWalk * * PARAMETERS:  WalkState       - New state to be initialized *              Op              - Current parse op *              MethodNode      - Control method NS node, if any *              AmlStart        - Start of AML *              AmlLength       - Length of AML *              Info            - Method info block (params, etc.) *              PassNumber      - 1, 2, or 3 * * RETURN:      Status * * DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk * ******************************************************************************/ACPI_STATUSAcpiDsInitAmlWalk (    ACPI_WALK_STATE         *WalkState,    ACPI_PARSE_OBJECT       *Op,    ACPI_NAMESPACE_NODE     *MethodNode,    UINT8                   *AmlStart,    UINT32                  AmlLength,    ACPI_EVALUATE_INFO      *Info,    UINT8                   PassNumber){    ACPI_STATUS             Status;    ACPI_PARSE_STATE        *ParserState = &WalkState->ParserState;    ACPI_PARSE_OBJECT       *ExtraOp;    ACPI_FUNCTION_TRACE (DsInitAmlWalk);    WalkState->ParserState.Aml =    WalkState->ParserState.AmlStart = AmlStart;    WalkState->ParserState.AmlEnd =    WalkState->ParserState.PkgEnd = AmlStart + AmlLength;    /* The NextOp of the NextWalk will be the beginning of the method */    WalkState->NextOp = NULL;    WalkState->PassNumber = PassNumber;    if (Info)    {        if (Info->ParameterType == ACPI_PARAM_GPE)        {            WalkState->GpeEventInfo =                ACPI_CAST_PTR (ACPI_GPE_EVENT_INFO, Info->Parameters);        }        else        {            WalkState->Params = Info->Parameters;            WalkState->CallerReturnDesc = &Info->ReturnObject;        }    }    Status = AcpiPsInitScope (&WalkState->ParserState, Op);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    if (MethodNode)    {        WalkState->ParserState.StartNode = MethodNode;        WalkState->WalkType = ACPI_WALK_METHOD;        WalkState->MethodNode = MethodNode;        WalkState->MethodDesc = AcpiNsGetAttachedObject (MethodNode);        /* Push start scope on scope stack and make it current  */        Status = AcpiDsScopeStackPush (MethodNode, ACPI_TYPE_METHOD, WalkState);        if (ACPI_FAILURE (Status))        {            return_ACPI_STATUS (Status);        }        /* Init the method arguments */        Status = AcpiDsMethodDataInitArgs (WalkState->Params,                    ACPI_METHOD_NUM_ARGS, WalkState);        if (ACPI_FAILURE (Status))        {            return_ACPI_STATUS (Status);        }    }    else    {        /*         * Setup the current scope.         * Find a Named Op that has a namespace node associated with it.         * search upwards from this Op.  Current scope is the first         * Op with a namespace node.         */        ExtraOp = ParserState->StartOp;        while (ExtraOp && !ExtraOp->Common.Node)        {            ExtraOp = ExtraOp->Common.Parent;        }        if (!ExtraOp)        {            ParserState->StartNode = NULL;        }        else        {            ParserState->StartNode = ExtraOp->Common.Node;        }        if (ParserState->StartNode)        {            /* Push start scope on scope stack and make it current  */            Status = AcpiDsScopeStackPush (ParserState->StartNode,                            ParserState->StartNode->Type, WalkState);            if (ACPI_FAILURE (Status))            {                return_ACPI_STATUS (Status);            }        }    }    Status = AcpiDsInitCallbacks (WalkState, PassNumber);    return_ACPI_STATUS (Status);}/******************************************************************************* * * FUNCTION:    AcpiDsDeleteWalkState * * PARAMETERS:  WalkState       - State to delete * * RETURN:      Status * * DESCRIPTION: Delete a walk state including all internal data structures * ******************************************************************************/voidAcpiDsDeleteWalkState (    ACPI_WALK_STATE         *WalkState){    ACPI_GENERIC_STATE      *State;    ACPI_FUNCTION_TRACE_PTR (DsDeleteWalkState, WalkState);    if (!WalkState)    {        return;    }    if (WalkState->DescriptorType != ACPI_DESC_TYPE_WALK)    {        ACPI_ERROR ((AE_INFO, "%p is not a valid walk state",            WalkState));        return;    }    /* There should not be any open scopes */    if (WalkState->ParserState.Scope)    {        ACPI_ERROR ((AE_INFO, "%p walk still has a scope list",            WalkState));        AcpiPsCleanupScope (&WalkState->ParserState);    }    /* Always must free any linked control states */    while (WalkState->ControlState)    {        State = WalkState->ControlState;        WalkState->ControlState = State->Common.Next;        AcpiUtDeleteGenericState (State);    }    /* Always must free any linked parse states */    while (WalkState->ScopeInfo)    {        State = WalkState->ScopeInfo;        WalkState->ScopeInfo = State->Common.Next;        AcpiUtDeleteGenericState (State);    }    /* Always must free any stacked result states */    while (WalkState->Results)    {        State = WalkState->Results;        WalkState->Results = State->Common.Next;        AcpiUtDeleteGenericState (State);    }    ACPI_FREE (WalkState);    return_VOID;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -