ACPI_GENERIC_STATE * AcpiUtCreateControlState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE (UtCreateControlState); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return_PTR (NULL); } /* Init fields specific to the control struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_CONTROL; State->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING; return_PTR (State); }
ACPI_GENERIC_STATE * AcpiUtCreateUpdateState ( ACPI_OPERAND_OBJECT *Object, UINT16 Action) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE_PTR (UtCreateUpdateState, Object); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return_PTR (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_UPDATE; State->Update.Object = Object; State->Update.Value = Action; return_PTR (State); }
ACPI_GENERIC_STATE * AcpiUtCreatePkgState ( void *InternalObject, void *ExternalObject, UINT16 Index) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE_PTR (UtCreatePkgState, InternalObject); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return_PTR (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PACKAGE; State->Pkg.SourceObject = (ACPI_OPERAND_OBJECT *) InternalObject; State->Pkg.DestObject = ExternalObject; State->Pkg.Index= Index; State->Pkg.NumPackages = 1; return_PTR (State); }
ACPI_STATUS AcpiPsInitScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *RootOp) { ACPI_GENERIC_STATE *Scope; ACPI_FUNCTION_TRACE_PTR (PsInitScope, RootOp); Scope = AcpiUtCreateGenericState (); if (!Scope) { return_ACPI_STATUS (AE_NO_MEMORY); } Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RPSCOPE; Scope->ParseScope.Op = RootOp; Scope->ParseScope.ArgCount = ACPI_VAR_ARGS; Scope->ParseScope.ArgEnd = ParserState->AmlEnd; Scope->ParseScope.PkgEnd = ParserState->AmlEnd; ParserState->Scope = Scope; ParserState->StartOp = RootOp; return_ACPI_STATUS (AE_OK); }
ACPI_THREAD_STATE * AcpiUtCreateThreadState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE (UtCreateThreadState); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return_PTR (NULL); } /* Init fields specific to the update struct */ State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_THREAD; State->Thread.ThreadId = AcpiOsGetThreadId (); /* Check for invalid thread ID - zero is very bad, it will break things */ if (!State->Thread.ThreadId) { ACPI_ERROR ((AE_INFO, "Invalid zero ID from AcpiOsGetThreadId")); State->Thread.ThreadId = (ACPI_THREAD_ID) 1; } return_PTR ((ACPI_THREAD_STATE *) State); }
ACPI_THREAD_STATE * AcpiUtCreateThreadState ( void) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_TRACE ("UtCreateThreadState"); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return_PTR (NULL); } /* Init fields specific to the update struct */ State->Common.DataType = ACPI_DESC_TYPE_STATE_THREAD; State->Thread.ThreadId = AcpiOsGetThreadId (); return_PTR ((ACPI_THREAD_STATE *) State); }
ACPI_GENERIC_STATE * AcpiUtCreateControlState ( void) { ACPI_GENERIC_STATE *State; FUNCTION_TRACE ("UtCreateControlState"); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the control struct */ State->Common.State = CONTROL_CONDITIONAL_EXECUTING; return_PTR (State); }
ACPI_GENERIC_STATE * AcpiUtCreateUpdateState ( ACPI_OPERAND_OBJECT *Object, UINT16 Action) { ACPI_GENERIC_STATE *State; FUNCTION_TRACE_PTR ("UtCreateUpdateState", Object); /* Create the generic state object */ State = AcpiUtCreateGenericState (); if (!State) { return (NULL); } /* Init fields specific to the update struct */ State->Update.Object = Object; State->Update.Value = Action; return_PTR (State); }
ACPI_STATUS AcpiPsPushScope ( ACPI_PARSE_STATE *ParserState, ACPI_PARSE_OBJECT *Op, UINT32 RemainingArgs, UINT32 ArgCount) { ACPI_GENERIC_STATE *Scope; ACPI_FUNCTION_TRACE_PTR (PsPushScope, Op); Scope = AcpiUtCreateGenericState (); if (!Scope) { return_ACPI_STATUS (AE_NO_MEMORY); } Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PSCOPE; Scope->ParseScope.Op = Op; Scope->ParseScope.ArgList = RemainingArgs; Scope->ParseScope.ArgCount = ArgCount; Scope->ParseScope.PkgEnd = ParserState->PkgEnd; /* Push onto scope stack */ AcpiUtPushGenericState (&ParserState->Scope, Scope); if (ArgCount == ACPI_VAR_ARGS) { /* Multiple arguments */ Scope->ParseScope.ArgEnd = ParserState->PkgEnd; } else { /* Single argument */ Scope->ParseScope.ArgEnd = ACPI_TO_POINTER (ACPI_MAX_PTR); } return_ACPI_STATUS (AE_OK); }
static ACPI_STATUS AcpiDsResultStackPush ( ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *State; ACPI_FUNCTION_NAME (DsResultStackPush); /* Check for stack overflow */ if (((UINT32) WalkState->ResultSize + ACPI_RESULTS_FRAME_OBJ_NUM) > ACPI_RESULTS_OBJ_NUM_MAX) { ACPI_ERROR ((AE_INFO, "Result stack overflow: State=%p Num=%u", WalkState, WalkState->ResultSize)); return (AE_STACK_OVERFLOW); } State = AcpiUtCreateGenericState (); if (!State) { return (AE_NO_MEMORY); } State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RESULT; AcpiUtPushGenericState (&WalkState->Results, State); /* Increase the length of the result stack by the length of frame */ WalkState->ResultSize += ACPI_RESULTS_FRAME_OBJ_NUM; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n", State, WalkState)); return (AE_OK); }
ACPI_STATUS AcpiDsScopeStackPush ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *ScopeInfo; ACPI_GENERIC_STATE *OldScopeInfo; ACPI_FUNCTION_TRACE (DsScopeStackPush); if (!Node) { /* Invalid scope */ ACPI_ERROR ((AE_INFO, "Null scope parameter")); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Make sure object type is valid */ if (!AcpiUtValidObjectType (Type)) { ACPI_WARNING ((AE_INFO, "Invalid object type: 0x%X", Type)); } /* Allocate a new scope object */ ScopeInfo = AcpiUtCreateGenericState (); if (!ScopeInfo) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Init new scope object */ ScopeInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_WSCOPE; ScopeInfo->Scope.Node = Node; ScopeInfo->Common.Value = (UINT16) Type; WalkState->ScopeDepth++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth)); OldScopeInfo = WalkState->ScopeInfo; if (OldScopeInfo) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%s)", AcpiUtGetNodeName (OldScopeInfo->Scope.Node), AcpiUtGetTypeName (OldScopeInfo->Common.Value))); } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_NAMESPACE_ROOT)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ", New scope -> [%4.4s] (%s)\n", AcpiUtGetNodeName (ScopeInfo->Scope.Node), AcpiUtGetTypeName (ScopeInfo->Common.Value))); /* Push new scope object onto stack */ AcpiUtPushGenericState (&WalkState->ScopeInfo, ScopeInfo); return_ACPI_STATUS (AE_OK); }
ACPI_STATUS AcpiEvQueueNotifyRequest ( ACPI_NAMESPACE_NODE *Node, UINT32 NotifyValue) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerListHead = NULL; ACPI_GENERIC_STATE *Info; UINT8 HandlerListId = 0; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_NAME (EvQueueNotifyRequest); /* Are Notifies allowed on this object? */ if (!AcpiEvIsNotifyObject (Node)) { return (AE_TYPE); } /* Get the correct notify list type (System or Device) */ if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) { HandlerListId = ACPI_SYSTEM_HANDLER_LIST; } else { HandlerListId = ACPI_DEVICE_HANDLER_LIST; } /* Get the notify object attached to the namespace Node */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { /* We have an attached object, Get the correct handler list */ HandlerListHead = ObjDesc->CommonNotify.NotifyList[HandlerListId]; } /* * If there is no notify handler (Global or Local) * for this object, just ignore the notify */ if (!AcpiGbl_GlobalNotify[HandlerListId].Handler && !HandlerListHead) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "No notify handler for Notify, ignoring (%4.4s, %X) node %p\n", AcpiUtGetNodeName (Node), NotifyValue, Node)); return (AE_OK); } /* Setup notify info and schedule the notify dispatcher */ Info = AcpiUtCreateGenericState (); if (!Info) { return (AE_NO_MEMORY); } Info->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY; Info->Notify.Node = Node; Info->Notify.Value = (UINT16) NotifyValue; Info->Notify.HandlerListId = HandlerListId; Info->Notify.HandlerListHead = HandlerListHead; Info->Notify.Global = &AcpiGbl_GlobalNotify[HandlerListId]; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Dispatching Notify on [%4.4s] (%s) Value 0x%2.2X (%s) Node %p\n", AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type), NotifyValue, AcpiUtGetNotifyName (NotifyValue, ACPI_TYPE_ANY), Node)); Status = AcpiOsExecute (OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch, Info); if (ACPI_FAILURE (Status)) { AcpiUtDeleteGenericState (Info); } return (Status); }
ACPI_STATUS AcpiEvQueueNotifyRequest ( ACPI_NAMESPACE_NODE *Node, UINT32 NotifyValue) { ACPI_OPERAND_OBJECT *ObjDesc; ACPI_OPERAND_OBJECT *HandlerObj = NULL; ACPI_GENERIC_STATE *NotifyInfo; ACPI_STATUS Status = AE_OK; ACPI_FUNCTION_NAME (EvQueueNotifyRequest); /* * For value 3 (Ejection Request), some device method may need to be run. * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need * to be run. * For value 0x80 (Status Change) on the power button or sleep button, * initiate soft-off or sleep operation? */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Dispatching Notify on [%4.4s] Node %p Value 0x%2.2X (%s)\n", AcpiUtGetNodeName (Node), Node, NotifyValue, AcpiUtGetNotifyName (NotifyValue))); /* Get the notify object attached to the NS Node */ ObjDesc = AcpiNsGetAttachedObject (Node); if (ObjDesc) { /* We have the notify object, Get the right handler */ switch (Node->Type) { /* Notify allowed only on these types */ case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: case ACPI_TYPE_PROCESSOR: if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) { HandlerObj = ObjDesc->CommonNotify.SystemNotify; } else { HandlerObj = ObjDesc->CommonNotify.DeviceNotify; } break; default: /* All other types are not supported */ return (AE_TYPE); } } /* * If there is any handler to run, schedule the dispatcher. * Check for: * 1) Global system notify handler * 2) Global device notify handler * 3) Per-device notify handler */ if ((AcpiGbl_SystemNotify.Handler && (NotifyValue <= ACPI_MAX_SYS_NOTIFY)) || (AcpiGbl_DeviceNotify.Handler && (NotifyValue > ACPI_MAX_SYS_NOTIFY)) || HandlerObj) { NotifyInfo = AcpiUtCreateGenericState (); if (!NotifyInfo) { return (AE_NO_MEMORY); } if (!HandlerObj) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Executing system notify handler for Notify (%4.4s, %X) " "node %p\n", AcpiUtGetNodeName (Node), NotifyValue, Node)); } NotifyInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY; NotifyInfo->Notify.Node = Node; NotifyInfo->Notify.Value = (UINT16) NotifyValue; NotifyInfo->Notify.HandlerObj = HandlerObj; Status = AcpiOsExecute ( OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch, NotifyInfo); if (ACPI_FAILURE (Status)) { AcpiUtDeleteGenericState (NotifyInfo); } } else { /* There is no notify handler (per-device or system) for this device */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "No notify handler for Notify (%4.4s, %X) node %p\n", AcpiUtGetNodeName (Node), NotifyValue, Node)); } return (Status); }
ACPI_STATUS AcpiDsScopeStackPush ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState) { ACPI_GENERIC_STATE *ScopeInfo; ACPI_GENERIC_STATE *OldScopeInfo; ACPI_FUNCTION_TRACE ("DsScopeStackPush"); if (!Node) { /* Invalid scope */ ACPI_REPORT_ERROR (("DsScopeStackPush: null scope passed\n")); return_ACPI_STATUS (AE_BAD_PARAMETER); } /* Make sure object type is valid */ if (!AcpiUtValidObjectType (Type)) { ACPI_REPORT_WARNING (("DsScopeStackPush: type code out of range\n")); } /* Allocate a new scope object */ ScopeInfo = AcpiUtCreateGenericState (); if (!ScopeInfo) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Init new scope object */ ScopeInfo->Common.DataType = ACPI_DESC_TYPE_STATE_WSCOPE; ScopeInfo->Scope.Node = Node; ScopeInfo->Common.Value = (UINT16) Type; WalkState->ScopeDepth++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth)); OldScopeInfo = WalkState->ScopeInfo; if (OldScopeInfo) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%10s)", OldScopeInfo->Scope.Node->Name.Ascii, AcpiUtGetTypeName (OldScopeInfo->Common.Value))); } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[\\___] (%10s)", "ROOT")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ", New scope -> [%4.4s] (%s)\n", ScopeInfo->Scope.Node->Name.Ascii, AcpiUtGetTypeName (ScopeInfo->Common.Value))); /* Push new scope object onto stack */ AcpiUtPushGenericState (&WalkState->ScopeInfo, ScopeInfo); return_ACPI_STATUS (AE_OK); }