本文整理汇总了C++中AcpiPsGetOpcodeInfo函数的典型用法代码示例。如果您正苦于以下问题:C++ AcpiPsGetOpcodeInfo函数的具体用法?C++ AcpiPsGetOpcodeInfo怎么用?C++ AcpiPsGetOpcodeInfo使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了AcpiPsGetOpcodeInfo函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AcpiPsGetArg
ACPI_PARSE_OBJECT *
AcpiPsGetArg (
ACPI_PARSE_OBJECT *Op,
UINT32 Argn)
{
ACPI_PARSE_OBJECT *Arg = NULL;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_FUNCTION_ENTRY ();
/*
if (Op->Common.AmlOpcode == AML_INT_CONNECTION_OP)
{
return (Op->Common.Value.Arg);
}
*/
/* Get the info structure for this opcode */
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (OpInfo->Class == AML_CLASS_UNKNOWN)
{
/* Invalid opcode or ASCII character */
return (NULL);
}
/* Check if this opcode requires argument sub-objects */
if (!(OpInfo->Flags & AML_HAS_ARGS))
{
/* Has no linked argument objects */
return (NULL);
}
/* Get the requested argument object */
Arg = Op->Common.Value.Arg;
while (Arg && Argn)
{
Argn--;
Arg = Arg->Common.Next;
}
return (Arg);
}
示例2: AcpiDmListType
UINT32
AcpiDmListType (
ACPI_PARSE_OBJECT *Op)
{
const ACPI_OPCODE_INFO *OpInfo;
if (!Op)
{
return (BLOCK_NONE);
}
switch (Op->Common.AmlOpcode)
{
case AML_ELSE_OP:
case AML_METHOD_OP:
case AML_DEVICE_OP:
case AML_SCOPE_OP:
case AML_POWER_RES_OP:
case AML_PROCESSOR_OP:
case AML_THERMAL_ZONE_OP:
case AML_IF_OP:
case AML_WHILE_OP:
case AML_FIELD_OP:
case AML_INDEX_FIELD_OP:
case AML_BANK_FIELD_OP:
return (BLOCK_NONE);
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
return (BLOCK_COMMA_LIST);
default:
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (OpInfo->Flags & AML_HAS_ARGS)
{
return (BLOCK_COMMA_LIST);
}
return (BLOCK_NONE);
}
}
示例3: AcpiDmInspectPossibleArgs
static UINT32
AcpiDmInspectPossibleArgs (
UINT32 CurrentOpArgCount,
UINT32 TargetCount,
ACPI_PARSE_OBJECT *Op)
{
const ACPI_OPCODE_INFO *OpInfo;
UINT32 i;
UINT32 Last = 0;
UINT32 Lookahead;
Lookahead = (ACPI_METHOD_NUM_ARGS + TargetCount) - CurrentOpArgCount;
/* Lookahead for the maximum number of possible arguments */
for (i = 0; i < Lookahead; i++)
{
if (!Op)
{
break;
}
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
/*
* Any one of these operators is "very probably" not a method arg
*/
if ((Op->Common.AmlOpcode == AML_STORE_OP) ||
(Op->Common.AmlOpcode == AML_NOTIFY_OP))
{
break;
}
if ((OpInfo->Class != AML_CLASS_EXECUTE) &&
(OpInfo->Class != AML_CLASS_CONTROL))
{
Last = i+1;
}
Op = Op->Common.Next;
}
return (Last);
}
示例4: XfNamespaceLocateEnd
static ACPI_STATUS
XfNamespaceLocateEnd (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
{
ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_FUNCTION_TRACE (XfNamespaceLocateEnd);
/* We are only interested in opcodes that have an associated name */
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
if (!(OpInfo->Flags & AML_NAMED))
{
return_ACPI_STATUS (AE_OK);
}
/* Not interested in name references, we did not open a scope for them */
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
(Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
(Op->Asl.ParseOpcode == PARSEOP_METHODCALL) ||
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
{
return_ACPI_STATUS (AE_OK);
}
/* Pop the scope stack if necessary */
if (AcpiNsOpensScope (AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode)))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"%s: Popping scope for Op %p\n",
AcpiUtGetTypeName (OpInfo->ObjectType), Op));
(void) AcpiDsScopeStackPop (WalkState);
}
return_ACPI_STATUS (AE_OK);
}
示例5: AcpiDbDumpParserDescriptor
void
AcpiDbDumpParserDescriptor (
ACPI_PARSE_OBJECT *Op)
{
const ACPI_OPCODE_INFO *Info;
Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
AcpiOsPrintf ("Parser Op Descriptor:\n");
AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode);
ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name", Info->Name));
AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg);
AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent);
AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next);
}
示例6: AcpiPsGetOpcodeName
char *
AcpiPsGetOpcodeName (
UINT16 Opcode)
{
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
const ACPI_OPCODE_INFO *Op;
Op = AcpiPsGetOpcodeInfo (Opcode);
/* Always guaranteed to return a valid pointer */
return (Op->Name);
#else
return ("OpcodeName unavailable");
#endif
}
示例7: LkGetNameOp
static ACPI_PARSE_OBJECT *
LkGetNameOp (
ACPI_PARSE_OBJECT *Op)
{
const ACPI_OPCODE_INFO *OpInfo;
ACPI_PARSE_OBJECT *NameOp = Op;
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
/* Get the NamePath from the appropriate place */
if (OpInfo->Flags & AML_NAMED)
{
/* For nearly all NAMED operators, the name reference is the first child */
NameOp = Op->Asl.Child;
if (Op->Asl.AmlOpcode == AML_ALIAS_OP)
{
/*
* ALIAS is the only oddball opcode, the name declaration
* (alias name) is the second operand
*/
NameOp = Op->Asl.Child->Asl.Next;
}
}
else if (OpInfo->Flags & AML_CREATE)
{
/* Name must appear as the last parameter */
NameOp = Op->Asl.Child;
while (!(NameOp->Asl.CompileFlags & NODE_IS_NAME_DECLARATION))
{
NameOp = NameOp->Asl.Next;
}
}
return (NameOp);
}
示例8: MtCheckNamedObjectInMethod
static void
MtCheckNamedObjectInMethod (
ACPI_PARSE_OBJECT *Op,
ASL_METHOD_INFO *MethodInfo)
{
const ACPI_OPCODE_INFO *OpInfo;
/* We don't care about actual method declarations or scopes */
if ((Op->Asl.AmlOpcode == AML_METHOD_OP) ||
(Op->Asl.AmlOpcode == AML_SCOPE_OP))
{
return;
}
/* Determine if we are creating a named object */
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
if (OpInfo->Class == AML_CLASS_NAMED_OBJECT)
{
/*
* If we have a named object created within a non-serialized method,
* emit a remark that the method should be serialized.
*
* Reason: If a thread blocks within the method for any reason, and
* another thread enters the method, the method will fail because an
* attempt will be made to create the same object twice.
*/
if (MethodInfo && !MethodInfo->ShouldBeSerialized)
{
AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op,
"due to creation of named objects within");
/* Emit message only ONCE per method */
MethodInfo->ShouldBeSerialized = TRUE;
}
}
}
示例9: AcpiDmResourceDescendingOp
static ACPI_STATUS
AcpiDmResourceDescendingOp (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
{
ACPI_OP_WALK_INFO *Info = Context;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_WALK_STATE *WalkState;
ACPI_OBJECT_TYPE ObjectType;
ACPI_STATUS Status;
WalkState = Info->WalkState;
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
/* Open new scope if necessary */
ObjectType = OpInfo->ObjectType;
if (AcpiNsOpensScope (ObjectType))
{
if (Op->Common.Node)
{
Status = AcpiDsScopeStackPush (Op->Common.Node, ObjectType, WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
}
}
}
/*
* Check if this operator contains a reference to a resource descriptor.
* If so, convert the reference into a symbolic reference.
*/
AcpiDmCheckResourceReference (Op, WalkState);
return (AE_OK);
}
示例10: AcpiDmCommonAscendingOp
static ACPI_STATUS
AcpiDmCommonAscendingOp (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
{
ACPI_OP_WALK_INFO *Info = Context;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_OBJECT_TYPE ObjectType;
/* Close scope if necessary */
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
ObjectType = OpInfo->ObjectType;
ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
if (AcpiNsOpensScope (ObjectType))
{
(void) AcpiDsScopeStackPop (Info->WalkState);
}
return (AE_OK);
}
示例11: AcpiDsBuildInternalObject
ACPI_STATUS
AcpiDsBuildInternalObject (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
ACPI_OPERAND_OBJECT **ObjDescPtr)
{
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE (DsBuildInternalObject);
*ObjDescPtr = NULL;
if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
{
/*
* This is a named object reference. If this name was
* previously looked up in the namespace, it was stored in
* this op. Otherwise, go ahead and look it up now
*/
if (!Op->Common.Node)
{
/* Check if we are resolving a named reference within a package */
if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
{
/*
* We won't resolve package elements here, we will do this
* after all ACPI tables are loaded into the namespace. This
* behavior supports both forward references to named objects
* and external references to objects in other tables.
*/
goto CreateNewObject;
}
else
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
Op->Common.Value.String,
ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL,
ACPI_CAST_INDIRECT_PTR (
ACPI_NAMESPACE_NODE, &(Op->Common.Node)));
if (ACPI_FAILURE (Status))
{
ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
Op->Common.Value.String, Status);
return_ACPI_STATUS (Status);
}
}
}
}
CreateNewObject:
/* Create and init a new internal ACPI object */
ObjDesc = AcpiUtCreateInternalObject (
(AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode))->ObjectType);
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
Status = AcpiDsInitObjectFromOp (
WalkState, Op, Op->Common.AmlOpcode, &ObjDesc);
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (ObjDesc);
return_ACPI_STATUS (Status);
}
/*
* Handling for unresolved package reference elements.
* These are elements that are namepaths.
*/
if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
(Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
{
ObjDesc->Reference.Resolved = TRUE;
if ((Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
!ObjDesc->Reference.Node)
{
/*
* Name was unresolved above.
* Get the prefix node for later lookup
*/
ObjDesc->Reference.Node = WalkState->ScopeInfo->Scope.Node;
ObjDesc->Reference.Aml = Op->Common.Aml;
ObjDesc->Reference.Resolved = FALSE;
}
}
*ObjDescPtr = ObjDesc;
return_ACPI_STATUS (Status);
}
示例12: AcpiDmCheckResourceReference
void
AcpiDmCheckResourceReference (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState)
{
ACPI_STATUS Status;
ACPI_PARSE_OBJECT *BufferNameOp;
ACPI_PARSE_OBJECT *IndexOp;
ACPI_NAMESPACE_NODE *BufferNode;
ACPI_NAMESPACE_NODE *ResourceNode;
const ACPI_OPCODE_INFO *OpInfo;
UINT32 BitIndex;
/* We are only interested in the CreateXxxxField opcodes */
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (OpInfo->Type != AML_TYPE_CREATE_FIELD)
{
return;
}
/* Get the buffer term operand */
BufferNameOp = AcpiPsGetDepthNext (NULL, Op);
/* Must be a named buffer, not an arg or local or method call */
if (BufferNameOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)
{
return;
}
/* Get the Index term, must be an integer constant to convert */
IndexOp = BufferNameOp->Common.Next;
/* Major cheat: The Node field is also used for the Tag ptr. Clear it now */
IndexOp->Common.Node = NULL;
OpInfo = AcpiPsGetOpcodeInfo (IndexOp->Common.AmlOpcode);
if (OpInfo->ObjectType != ACPI_TYPE_INTEGER)
{
return;
}
/* Get the bit offset of the descriptor within the buffer */
if ((Op->Common.AmlOpcode == AML_CREATE_BIT_FIELD_OP) ||
(Op->Common.AmlOpcode == AML_CREATE_FIELD_OP))
{
/* Index operand is a bit offset */
BitIndex = (UINT32) IndexOp->Common.Value.Integer;
}
else
{
/* Index operand is a byte offset, convert to bits */
BitIndex = (UINT32) ACPI_MUL_8 (IndexOp->Common.Value.Integer);
}
/* Lookup the buffer in the namespace */
Status = AcpiNsLookup (WalkState->ScopeInfo,
BufferNameOp->Common.Value.String, ACPI_TYPE_BUFFER,
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState,
&BufferNode);
if (ACPI_FAILURE (Status))
{
return;
}
/* Validate object type, we must have a buffer */
if (BufferNode->Type != ACPI_TYPE_BUFFER)
{
return;
}
/* Find the resource descriptor node corresponding to the index */
ResourceNode = AcpiDmGetResourceNode (BufferNode, BitIndex);
if (!ResourceNode)
{
return;
}
/* Translate the Index to a resource tag pathname */
AcpiGetTagPathname (IndexOp, BufferNode, ResourceNode, BitIndex);
}
示例13: AcpiPsCompleteOp
static ACPI_STATUS
AcpiPsCompleteOp (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT **Op,
ACPI_STATUS Status)
{
ACPI_STATUS Status2;
ACPI_FUNCTION_TRACE_PTR (PsCompleteOp, WalkState);
/*
* Finished one argument of the containing scope
*/
WalkState->ParserState.Scope->ParseScope.ArgCount--;
/* Close this Op (will result in parse subtree deletion) */
Status2 = AcpiPsCompleteThisOp (WalkState, *Op);
if (ACPI_FAILURE (Status2))
{
return_ACPI_STATUS (Status2);
}
*Op = NULL;
switch (Status)
{
case AE_OK:
break;
case AE_CTRL_TRANSFER:
/* We are about to transfer to a called method */
WalkState->PrevOp = NULL;
WalkState->PrevArgTypes = WalkState->ArgTypes;
return_ACPI_STATUS (Status);
case AE_CTRL_END:
AcpiPsPopScope (&(WalkState->ParserState), Op,
&WalkState->ArgTypes, &WalkState->ArgCount);
if (*Op)
{
WalkState->Op = *Op;
WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode);
WalkState->Opcode = (*Op)->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, *Op, Status);
Status2 = AcpiPsCompleteThisOp (WalkState, *Op);
if (ACPI_FAILURE (Status2))
{
return_ACPI_STATUS (Status2);
}
}
Status = AE_OK;
break;
case AE_CTRL_BREAK:
case AE_CTRL_CONTINUE:
/* Pop off scopes until we find the While */
while (!(*Op) || ((*Op)->Common.AmlOpcode != AML_WHILE_OP))
{
AcpiPsPopScope (&(WalkState->ParserState), Op,
&WalkState->ArgTypes, &WalkState->ArgCount);
}
/* Close this iteration of the While loop */
WalkState->Op = *Op;
WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode);
WalkState->Opcode = (*Op)->Common.AmlOpcode;
Status = WalkState->AscendingCallback (WalkState);
Status = AcpiPsNextParseState (WalkState, *Op, Status);
Status2 = AcpiPsCompleteThisOp (WalkState, *Op);
if (ACPI_FAILURE (Status2))
{
return_ACPI_STATUS (Status2);
}
Status = AE_OK;
break;
case AE_CTRL_TERMINATE:
/* Clean up */
//.........这里部分代码省略.........
示例14: AcpiDbDisplayMethodInfo
void
AcpiDbDisplayMethodInfo (
ACPI_PARSE_OBJECT *StartOp)
{
ACPI_WALK_STATE *WalkState;
ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_NAMESPACE_NODE *Node;
ACPI_PARSE_OBJECT *RootOp;
ACPI_PARSE_OBJECT *Op;
const ACPI_OPCODE_INFO *OpInfo;
UINT32 NumOps = 0;
UINT32 NumOperands = 0;
UINT32 NumOperators = 0;
UINT32 NumRemainingOps = 0;
UINT32 NumRemainingOperands = 0;
UINT32 NumRemainingOperators = 0;
BOOLEAN CountRemaining = FALSE;
WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
if (!WalkState)
{
AcpiOsPrintf ("There is no method currently executing\n");
return;
}
ObjDesc = WalkState->MethodDesc;
Node = WalkState->MethodNode;
AcpiOsPrintf ("Currently executing control method is [%4.4s]\n",
AcpiUtGetNodeName (Node));
AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n",
(UINT32) ObjDesc->Method.ParamCount,
(UINT32) ObjDesc->Method.SyncLevel);
RootOp = StartOp;
while (RootOp->Common.Parent)
{
RootOp = RootOp->Common.Parent;
}
Op = RootOp;
while (Op)
{
if (Op == StartOp)
{
CountRemaining = TRUE;
}
NumOps++;
if (CountRemaining)
{
NumRemainingOps++;
}
/* Decode the opcode */
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
switch (OpInfo->Class)
{
case AML_CLASS_ARGUMENT:
if (CountRemaining)
{
NumRemainingOperands++;
}
NumOperands++;
break;
case AML_CLASS_UNKNOWN:
/* Bad opcode or ASCII character */
continue;
default:
if (CountRemaining)
{
NumRemainingOperators++;
}
NumOperators++;
break;
}
Op = AcpiPsGetDepthNext (StartOp, Op);
}
AcpiOsPrintf (
"Method contains: %X AML Opcodes - %X Operators, %X Operands\n",
NumOps, NumOperators, NumOperands);
AcpiOsPrintf (
"Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n",
NumRemainingOps, NumRemainingOperators, NumRemainingOperands);
}
示例15: AcpiPsCreateOp
static ACPI_STATUS
AcpiPsCreateOp (
ACPI_WALK_STATE *WalkState,
UINT8 *AmlOpStart,
ACPI_PARSE_OBJECT **NewOp)
{
ACPI_STATUS Status = AE_OK;
ACPI_PARSE_OBJECT *Op;
ACPI_PARSE_OBJECT *NamedOp = NULL;
ACPI_PARSE_OBJECT *ParentScope;
UINT8 ArgumentCount;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_FUNCTION_TRACE_PTR (PsCreateOp, WalkState);
Status = AcpiPsGetAmlOpcode (WalkState);
if (Status == AE_CTRL_PARSE_CONTINUE)
{
return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE);
}
/* Create Op structure and append to parent's argument list */
WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode);
Op = AcpiPsAllocOp (WalkState->Opcode);
if (!Op)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
if (WalkState->OpInfo->Flags & AML_NAMED)
{
Status = AcpiPsBuildNamedOp (WalkState, AmlOpStart, Op, &NamedOp);
AcpiPsFreeOp (Op);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
*NewOp = NamedOp;
return_ACPI_STATUS (AE_OK);
}
/* Not a named opcode, just allocate Op and append to parent */
if (WalkState->OpInfo->Flags & AML_CREATE)
{
/*
* Backup to beginning of CreateXXXfield declaration
* BodyLength is unknown until we parse the body
*/
Op->Named.Data = AmlOpStart;
Op->Named.Length = 0;
}
if (WalkState->Opcode == AML_BANK_FIELD_OP)
{
/*
* Backup to beginning of BankField declaration
* BodyLength is unknown until we parse the body
*/
Op->Named.Data = AmlOpStart;
Op->Named.Length = 0;
}
ParentScope = AcpiPsGetParentScope (&(WalkState->ParserState));
AcpiPsAppendArg (ParentScope, Op);
if (ParentScope)
{
OpInfo = AcpiPsGetOpcodeInfo (ParentScope->Common.AmlOpcode);
if (OpInfo->Flags & AML_HAS_TARGET)
{
ArgumentCount = AcpiPsGetArgumentCount (OpInfo->Type);
if (ParentScope->Common.ArgListLength > ArgumentCount)
{
Op->Common.Flags |= ACPI_PARSEOP_TARGET;
}
}
else if (ParentScope->Common.AmlOpcode == AML_INCREMENT_OP)
{
Op->Common.Flags |= ACPI_PARSEOP_TARGET;
}
}
if (WalkState->DescendingCallback != NULL)
{
/*
* Find the object. This will either insert the object into
* the namespace or simply look it up
*/
WalkState->Op = *NewOp = Op;
Status = WalkState->DescendingCallback (WalkState, &Op);
Status = AcpiPsNextParseState (WalkState, Op, Status);
if (Status == AE_CTRL_PENDING)
{
Status = AE_CTRL_PARSE_PENDING;
//.........这里部分代码省略.........