summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/dswstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/dswstate.c')
-rw-r--r--sys/contrib/dev/acpica/dswstate.c480
1 files changed, 245 insertions, 235 deletions
diff --git a/sys/contrib/dev/acpica/dswstate.c b/sys/contrib/dev/acpica/dswstate.c
index e052dc2..f611d9d 100644
--- a/sys/contrib/dev/acpica/dswstate.c
+++ b/sys/contrib/dev/acpica/dswstate.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswstate - Dispatcher parse tree walk management routines
- * $Revision: 81 $
+ * $Revision: 1.90 $
*
*****************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -125,67 +125,29 @@
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME ("dswstate")
+/* Local prototypes */
-/*******************************************************************************
- *
- * FUNCTION: AcpiDsResultInsert
- *
- * PARAMETERS: Object - Object to push
- * Index - Where to insert the object
- * WalkState - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Insert an object onto this walk's result stack
- *
- ******************************************************************************/
-
+#ifdef ACPI_OBSOLETE_FUNCTIONS
ACPI_STATUS
AcpiDsResultInsert (
void *Object,
UINT32 Index,
- ACPI_WALK_STATE *WalkState)
-{
- ACPI_GENERIC_STATE *State;
-
-
- ACPI_FUNCTION_NAME ("DsResultInsert");
+ ACPI_WALK_STATE *WalkState);
+ACPI_STATUS
+AcpiDsObjStackDeleteAll (
+ ACPI_WALK_STATE *WalkState);
- State = WalkState->Results;
- if (!State)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
- WalkState));
- return (AE_NOT_EXIST);
- }
-
- if (Index >= ACPI_OBJ_NUM_OPERANDS)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Index out of range: %X Obj=%p State=%p Num=%X\n",
- Index, Object, WalkState, State->Results.NumResults));
- return (AE_BAD_PARAMETER);
- }
-
- if (!Object)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Null Object! Index=%X Obj=%p State=%p Num=%X\n",
- Index, Object, WalkState, State->Results.NumResults));
- return (AE_BAD_PARAMETER);
- }
-
- State->Results.ObjDesc [Index] = Object;
- State->Results.NumResults++;
-
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
- "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
- Object, Object ? AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object) : "NULL",
- WalkState, State->Results.NumResults, WalkState->CurrentResult));
+ACPI_STATUS
+AcpiDsObjStackPopObject (
+ ACPI_OPERAND_OBJECT **Object,
+ ACPI_WALK_STATE *WalkState);
- return (AE_OK);
-}
+void *
+AcpiDsObjStackGetValue (
+ UINT32 Index,
+ ACPI_WALK_STATE *WalkState);
+#endif
/*******************************************************************************
@@ -308,15 +270,18 @@ AcpiDsResultPop (
*Object = State->Results.ObjDesc [Index -1];
State->Results.ObjDesc [Index -1] = NULL;
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n",
- *Object, (*Object) ? AcpiUtGetObjectTypeName (*Object) : "NULL",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+ "Obj=%p [%s] Index=%X State=%p Num=%X\n",
+ *Object,
+ (*Object) ? AcpiUtGetObjectTypeName (*Object) : "NULL",
(UINT32) Index -1, WalkState, State->Results.NumResults));
return (AE_OK);
}
}
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n", WalkState));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "No result objects! State=%p\n", WalkState));
return (AE_AML_NO_RETURN_VALUE);
}
@@ -357,7 +322,8 @@ AcpiDsResultPopFromBottom (
if (!State->Results.NumResults)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n", WalkState));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n",
+ WalkState));
return (AE_AML_NO_RETURN_VALUE);
}
@@ -378,12 +344,13 @@ AcpiDsResultPopFromBottom (
if (!*Object)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null operand! State=%p #Ops=%X, Index=%X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Null operand! State=%p #Ops=%X Index=%X\n",
WalkState, State->Results.NumResults, (UINT32) Index));
return (AE_AML_NO_RETURN_VALUE);
}
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s], Results=%p State=%p\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Results=%p State=%p\n",
*Object, (*Object) ? AcpiUtGetObjectTypeName (*Object) : "NULL",
State, WalkState));
@@ -432,7 +399,8 @@ AcpiDsResultPush (
if (!Object)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Object! Obj=%p State=%p Num=%X\n",
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Null Object! Obj=%p State=%p Num=%X\n",
Object, WalkState, State->Results.NumResults));
return (AE_BAD_PARAMETER);
}
@@ -529,44 +497,6 @@ AcpiDsResultStackPop (
/*******************************************************************************
*
- * FUNCTION: AcpiDsObjStackDeleteAll
- *
- * PARAMETERS: WalkState - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Clear the object stack by deleting all objects that are on it.
- * Should be used with great care, if at all!
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDsObjStackDeleteAll (
- ACPI_WALK_STATE *WalkState)
-{
- UINT32 i;
-
-
- ACPI_FUNCTION_TRACE_PTR ("DsObjStackDeleteAll", WalkState);
-
-
- /* The stack size is configurable, but fixed */
-
- for (i = 0; i < ACPI_OBJ_NUM_OPERANDS; i++)
- {
- if (WalkState->Operands[i])
- {
- AcpiUtRemoveReference (WalkState->Operands[i]);
- WalkState->Operands[i] = NULL;
- }
- }
-
- return_ACPI_STATUS (AE_OK);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiDsObjStackPush
*
* PARAMETERS: Object - Object to push
@@ -609,69 +539,6 @@ AcpiDsObjStackPush (
}
-#if 0
-/*******************************************************************************
- *
- * FUNCTION: AcpiDsObjStackPopObject
- *
- * PARAMETERS: PopCount - Number of objects/entries to pop
- * WalkState - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT
- * deleted by this routine.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AcpiDsObjStackPopObject (
- ACPI_OPERAND_OBJECT **Object,
- ACPI_WALK_STATE *WalkState)
-{
- ACPI_FUNCTION_NAME ("DsObjStackPopObject");
-
-
- /* Check for stack underflow */
-
- if (WalkState->NumOperands == 0)
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Missing operand/stack empty! State=%p #Ops=%X\n",
- WalkState, WalkState->NumOperands));
- *Object = NULL;
- return (AE_AML_NO_OPERAND);
- }
-
- /* Pop the stack */
-
- WalkState->NumOperands--;
-
- /* Check for a valid operand */
-
- if (!WalkState->Operands [WalkState->NumOperands])
- {
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
- "Null operand! State=%p #Ops=%X\n",
- WalkState, WalkState->NumOperands));
- *Object = NULL;
- return (AE_AML_NO_OPERAND);
- }
-
- /* Get operand and set stack entry to null */
-
- *Object = WalkState->Operands [WalkState->NumOperands];
- WalkState->Operands [WalkState->NumOperands] = NULL;
-
- ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
- *Object, AcpiUtGetObjectTypeName (*Object),
- WalkState, WalkState->NumOperands));
-
- return (AE_OK);
-}
-#endif
-
-
/*******************************************************************************
*
* FUNCTION: AcpiDsObjStackPop
@@ -779,49 +646,6 @@ AcpiDsObjStackPopAndDelete (
/*******************************************************************************
*
- * FUNCTION: AcpiDsObjStackGetValue
- *
- * PARAMETERS: Index - Stack index whose value is desired. Based
- * on the top of the stack (index=0 == top)
- * WalkState - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve an object from this walk's object stack. Index must
- * be within the range of the current stack pointer.
- *
- ******************************************************************************/
-
-void *
-AcpiDsObjStackGetValue (
- UINT32 Index,
- ACPI_WALK_STATE *WalkState)
-{
-
- ACPI_FUNCTION_TRACE_PTR ("DsObjStackGetValue", WalkState);
-
-
- /* Can't do it if the stack is empty */
-
- if (WalkState->NumOperands == 0)
- {
- return_PTR (NULL);
- }
-
- /* or if the index is past the top of the stack */
-
- if (Index > (WalkState->NumOperands - (UINT32) 1))
- {
- return_PTR (NULL);
- }
-
- return_PTR (WalkState->Operands[(ACPI_NATIVE_UINT)(WalkState->NumOperands - 1) -
- Index]);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiDsGetCurrentWalkState
*
* PARAMETERS: Thread - Get current active state for this Thread
@@ -858,11 +682,11 @@ AcpiDsGetCurrentWalkState (
* FUNCTION: AcpiDsPushWalkState
*
* PARAMETERS: WalkState - State to push
- * WalkList - The list that owns the walk stack
+ * Thread - Thread state object
*
* RETURN: None
*
- * DESCRIPTION: Place the WalkState at the head of the state list.
+ * DESCRIPTION: Place the Thread state at the head of the state list.
*
******************************************************************************/
@@ -885,9 +709,9 @@ AcpiDsPushWalkState (
*
* FUNCTION: AcpiDsPopWalkState
*
- * PARAMETERS: WalkList - The list that owns the walk stack
+ * PARAMETERS: Thread - Current thread state
*
- * RETURN: A WalkState object popped from the stack
+ * 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
@@ -916,7 +740,7 @@ AcpiDsPopWalkState (
/*
* Don't clear the NEXT field, this serves as an indicator
* that there is a parent WALK STATE
- * NO: WalkState->Next = NULL;
+ * Do Not: WalkState->Next = NULL;
*/
}
@@ -928,7 +752,9 @@ AcpiDsPopWalkState (
*
* FUNCTION: AcpiDsCreateWalkState
*
- * PARAMETERS: Origin - Starting point for this walk
+ * PARAMETERS: OwnerId - ID for object creation
+ * Origin - Starting point for this walk
+ * MthDesc - Method object
* Thread - Current thread state
*
* RETURN: Pointer to the new walk state.
@@ -952,7 +778,7 @@ AcpiDsCreateWalkState (
ACPI_FUNCTION_TRACE ("DsCreateWalkState");
- WalkState = AcpiUtAcquireFromCache (ACPI_MEM_LIST_WALK);
+ WalkState = ACPI_MEM_CALLOCATE (sizeof (ACPI_WALK_STATE));
if (!WalkState)
{
return_PTR (NULL);
@@ -977,7 +803,7 @@ AcpiDsCreateWalkState (
Status = AcpiDsResultStackPush (WalkState);
if (ACPI_FAILURE (Status))
{
- AcpiUtReleaseToCache (ACPI_MEM_LIST_WALK, WalkState);
+ ACPI_MEM_FREE (WalkState);
return_PTR (NULL);
}
@@ -1001,8 +827,7 @@ AcpiDsCreateWalkState (
* MethodNode - Control method NS node, if any
* AmlStart - Start of AML
* AmlLength - Length of AML
- * Params - Method args, if any
- * ReturnObjDesc - Where to store a return object, if any
+ * Info - Method info block (params, etc.)
* PassNumber - 1, 2, or 3
*
* RETURN: Status
@@ -1019,7 +844,7 @@ AcpiDsInitAmlWalk (
UINT8 *AmlStart,
UINT32 AmlLength,
ACPI_PARAMETER_INFO *Info,
- UINT32 PassNumber)
+ UINT8 PassNumber)
{
ACPI_STATUS Status;
ACPI_PARSE_STATE *ParserState = &WalkState->ParserState;
@@ -1036,7 +861,8 @@ AcpiDsInitAmlWalk (
/* The NextOp of the NextWalk will be the beginning of the method */
- WalkState->NextOp = NULL;
+ WalkState->NextOp = NULL;
+ WalkState->PassNumber = PassNumber;
if (Info)
{
@@ -1047,8 +873,8 @@ AcpiDsInitAmlWalk (
}
else
{
- WalkState->Params = Info->Parameters;
- WalkState->CallerReturnDesc = &Info->ReturnObject;
+ WalkState->Params = Info->Parameters;
+ WalkState->CallerReturnDesc = &Info->ReturnObject;
}
}
@@ -1075,7 +901,8 @@ AcpiDsInitAmlWalk (
/* Init the method arguments */
- Status = AcpiDsMethodDataInitArgs (WalkState->Params, ACPI_METHOD_NUM_ARGS, WalkState);
+ Status = AcpiDsMethodDataInitArgs (WalkState->Params,
+ ACPI_METHOD_NUM_ARGS, WalkState);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -1151,13 +978,15 @@ AcpiDsDeleteWalkState (
if (WalkState->DataType != ACPI_DESC_TYPE_WALK)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p is not a valid walk state\n", WalkState));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p is not a valid walk state\n",
+ WalkState));
return;
}
if (WalkState->ParserState.Scope)
{
- ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n", WalkState));
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n",
+ WalkState));
}
/* Always must free any linked control states */
@@ -1190,33 +1019,214 @@ AcpiDsDeleteWalkState (
AcpiUtDeleteGenericState (State);
}
- AcpiUtReleaseToCache (ACPI_MEM_LIST_WALK, WalkState);
+ ACPI_MEM_FREE (WalkState);
return_VOID;
}
-/******************************************************************************
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
*
- * FUNCTION: AcpiDsDeleteWalkStateCache
+ * FUNCTION: AcpiDsResultInsert
*
- * PARAMETERS: None
+ * PARAMETERS: Object - Object to push
+ * Index - Where to insert the object
+ * WalkState - Current Walk state
*
* RETURN: Status
*
- * DESCRIPTION: Purge the global state object cache. Used during subsystem
- * termination.
+ * DESCRIPTION: Insert an object onto this walk's result stack
*
******************************************************************************/
-void
-AcpiDsDeleteWalkStateCache (
- void)
+ACPI_STATUS
+AcpiDsResultInsert (
+ void *Object,
+ UINT32 Index,
+ ACPI_WALK_STATE *WalkState)
{
- ACPI_FUNCTION_TRACE ("DsDeleteWalkStateCache");
+ ACPI_GENERIC_STATE *State;
- AcpiUtDeleteGenericCache (ACPI_MEM_LIST_WALK);
- return_VOID;
+ ACPI_FUNCTION_NAME ("DsResultInsert");
+
+
+ State = WalkState->Results;
+ if (!State)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
+ WalkState));
+ return (AE_NOT_EXIST);
+ }
+
+ if (Index >= ACPI_OBJ_NUM_OPERANDS)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Index out of range: %X Obj=%p State=%p Num=%X\n",
+ Index, Object, WalkState, State->Results.NumResults));
+ return (AE_BAD_PARAMETER);
+ }
+
+ if (!Object)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Null Object! Index=%X Obj=%p State=%p Num=%X\n",
+ Index, Object, WalkState, State->Results.NumResults));
+ return (AE_BAD_PARAMETER);
+ }
+
+ State->Results.ObjDesc [Index] = Object;
+ State->Results.NumResults++;
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+ "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
+ Object, Object ? AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object) : "NULL",
+ WalkState, State->Results.NumResults, WalkState->CurrentResult));
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDsObjStackDeleteAll
+ *
+ * PARAMETERS: WalkState - Current Walk state
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Clear the object stack by deleting all objects that are on it.
+ * Should be used with great care, if at all!
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDsObjStackDeleteAll (
+ ACPI_WALK_STATE *WalkState)
+{
+ UINT32 i;
+
+
+ ACPI_FUNCTION_TRACE_PTR ("DsObjStackDeleteAll", WalkState);
+
+
+ /* The stack size is configurable, but fixed */
+
+ for (i = 0; i < ACPI_OBJ_NUM_OPERANDS; i++)
+ {
+ if (WalkState->Operands[i])
+ {
+ AcpiUtRemoveReference (WalkState->Operands[i]);
+ WalkState->Operands[i] = NULL;
+ }
+ }
+
+ return_ACPI_STATUS (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDsObjStackPopObject
+ *
+ * PARAMETERS: Object - Where to return the popped object
+ * WalkState - Current Walk state
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT
+ * deleted by this routine.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDsObjStackPopObject (
+ ACPI_OPERAND_OBJECT **Object,
+ ACPI_WALK_STATE *WalkState)
+{
+ ACPI_FUNCTION_NAME ("DsObjStackPopObject");
+
+
+ /* Check for stack underflow */
+
+ if (WalkState->NumOperands == 0)
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Missing operand/stack empty! State=%p #Ops=%X\n",
+ WalkState, WalkState->NumOperands));
+ *Object = NULL;
+ return (AE_AML_NO_OPERAND);
+ }
+
+ /* Pop the stack */
+
+ WalkState->NumOperands--;
+
+ /* Check for a valid operand */
+
+ if (!WalkState->Operands [WalkState->NumOperands])
+ {
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Null operand! State=%p #Ops=%X\n",
+ WalkState, WalkState->NumOperands));
+ *Object = NULL;
+ return (AE_AML_NO_OPERAND);
+ }
+
+ /* Get operand and set stack entry to null */
+
+ *Object = WalkState->Operands [WalkState->NumOperands];
+ WalkState->Operands [WalkState->NumOperands] = NULL;
+
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
+ *Object, AcpiUtGetObjectTypeName (*Object),
+ WalkState, WalkState->NumOperands));
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDsObjStackGetValue
+ *
+ * PARAMETERS: Index - Stack index whose value is desired. Based
+ * on the top of the stack (index=0 == top)
+ * WalkState - Current Walk state
+ *
+ * RETURN: Pointer to the requested operand
+ *
+ * DESCRIPTION: Retrieve an object from this walk's operand stack. Index must
+ * be within the range of the current stack pointer.
+ *
+ ******************************************************************************/
+
+void *
+AcpiDsObjStackGetValue (
+ UINT32 Index,
+ ACPI_WALK_STATE *WalkState)
+{
+
+ ACPI_FUNCTION_TRACE_PTR ("DsObjStackGetValue", WalkState);
+
+
+ /* Can't do it if the stack is empty */
+
+ if (WalkState->NumOperands == 0)
+ {
+ return_PTR (NULL);
+ }
+
+ /* or if the index is past the top of the stack */
+
+ if (Index > (WalkState->NumOperands - (UINT32) 1))
+ {
+ return_PTR (NULL);
+ }
+
+ return_PTR (WalkState->Operands[(ACPI_NATIVE_UINT)(WalkState->NumOperands - 1) -
+ Index]);
}
+#endif
OpenPOWER on IntegriCloud