diff options
Diffstat (limited to 'sys/contrib/dev/acpica/dswstate.c')
-rw-r--r-- | sys/contrib/dev/acpica/dswstate.c | 189 |
1 files changed, 65 insertions, 124 deletions
diff --git a/sys/contrib/dev/acpica/dswstate.c b/sys/contrib/dev/acpica/dswstate.c index 95b27b8edac0b..8ba87c47c7713 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: 46 $ + * $Revision: 48 $ * *****************************************************************************/ @@ -156,23 +156,23 @@ AcpiDsResultInsert ( State = WalkState->Results; if (!State) { - DEBUG_PRINTP (ACPI_ERROR, ("No result object pushed! State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n", WalkState)); return (AE_NOT_EXIST); } if (Index >= OBJ_NUM_OPERANDS) { - DEBUG_PRINTP (ACPI_ERROR, - ("Index out of range: %X Obj=%p State=%p Num=%X\n", + 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) { - DEBUG_PRINTP (ACPI_ERROR, - ("Null Object! Index=%X Obj=%p State=%p Num=%X\n", + 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); } @@ -180,8 +180,8 @@ AcpiDsResultInsert ( State->Results.ObjDesc [Index] = Object; State->Results.NumResults++; - DEBUG_PRINTP (TRACE_EXEC, - ("Obj=%p [%s] State=%p Num=%X Cur=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "Obj=%p [%s] State=%p Num=%X Cur=%X\n", Object, Object ? AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) Object)->Common.Type) : "NULL", WalkState, State->Results.NumResults, WalkState->CurrentResult)); @@ -218,15 +218,15 @@ AcpiDsResultRemove ( State = WalkState->Results; if (!State) { - DEBUG_PRINTP (ACPI_ERROR, ("No result object pushed! State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n", WalkState)); return (AE_NOT_EXIST); } if (Index >= OBJ_NUM_OPERANDS) { - DEBUG_PRINTP (ACPI_ERROR, - ("Index out of range: %X State=%p Num=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Index out of range: %X State=%p Num=%X\n", Index, WalkState, State->Results.NumResults)); } @@ -235,8 +235,8 @@ AcpiDsResultRemove ( if (!State->Results.ObjDesc [Index]) { - DEBUG_PRINTP (ACPI_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, Index)); return (AE_AML_NO_RETURN_VALUE); } @@ -248,8 +248,8 @@ AcpiDsResultRemove ( *Object = State->Results.ObjDesc [Index]; State->Results.ObjDesc [Index] = NULL; - DEBUG_PRINTP (TRACE_EXEC, - ("Obj=%p [%s] Index=%X State=%p Num=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "Obj=%p [%s] Index=%X State=%p Num=%X\n", *Object, (*Object) ? AcpiUtGetTypeName ((*Object)->Common.Type) : "NULL", Index, WalkState, State->Results.NumResults)); @@ -292,7 +292,7 @@ AcpiDsResultPop ( if (!State->Results.NumResults) { - DEBUG_PRINTP (ACPI_ERROR, ("Result stack is empty! State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Result stack is empty! State=%p\n", WalkState)); return (AE_AML_NO_RETURN_VALUE); } @@ -310,7 +310,7 @@ AcpiDsResultPop ( *Object = State->Results.ObjDesc [Index -1]; State->Results.ObjDesc [Index -1] = NULL; - DEBUG_PRINTP (TRACE_EXEC, ("Obj=%p [%s] Index=%X State=%p Num=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n", *Object, (*Object) ? AcpiUtGetTypeName ((*Object)->Common.Type) : "NULL", Index -1, WalkState, State->Results.NumResults)); @@ -319,7 +319,7 @@ AcpiDsResultPop ( } - DEBUG_PRINTP (ACPI_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); } @@ -352,15 +352,15 @@ AcpiDsResultPopFromBottom ( State = WalkState->Results; if (!State) { - DEBUG_PRINTP (ACPI_ERROR, - ("Warning: No result object pushed! State=%p\n", WalkState)); + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Warning: No result object pushed! State=%p\n", WalkState)); return (AE_NOT_EXIST); } if (!State->Results.NumResults) { - DEBUG_PRINTP (ACPI_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); } @@ -382,12 +382,12 @@ AcpiDsResultPopFromBottom ( if (!*Object) { - DEBUG_PRINTP (ACPI_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, Index)); return (AE_AML_NO_RETURN_VALUE); } - DEBUG_PRINTP (TRACE_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) ? AcpiUtGetTypeName ((*Object)->Common.Type) : "NULL", State, WalkState)); @@ -423,21 +423,21 @@ AcpiDsResultPush ( State = WalkState->Results; if (!State) { - DEBUG_PRINTP (ACPI_ERROR, ("No result stack frame\n")); + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result stack frame\n")); return (AE_AML_INTERNAL); } if (State->Results.NumResults == OBJ_NUM_OPERANDS) { - DEBUG_PRINTP (ACPI_ERROR, - ("Result stack overflow: Obj=%p State=%p Num=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Result stack overflow: Obj=%p State=%p Num=%X\n", Object, WalkState, State->Results.NumResults)); return (AE_STACK_OVERFLOW); } if (!Object) { - DEBUG_PRINTP (ACPI_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); } @@ -446,7 +446,7 @@ AcpiDsResultPush ( State->Results.ObjDesc [State->Results.NumResults] = Object; State->Results.NumResults++; - DEBUG_PRINTP (TRACE_EXEC, ("Obj=%p [%s] State=%p Num=%X Cur=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n", Object, Object ? AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) Object)->Common.Type) : "NULL", WalkState, State->Results.NumResults, WalkState->CurrentResult)); @@ -473,6 +473,8 @@ AcpiDsResultStackPush ( { ACPI_GENERIC_STATE *State; + PROC_NAME ("DsResultStackPush"); + State = AcpiUtCreateGenericState (); if (!State) @@ -482,7 +484,7 @@ AcpiDsResultStackPush ( AcpiUtPushGenericState (&WalkState->Results, State); - DEBUG_PRINT (TRACE_EXEC, ("DsResultStackPush: Results=%p State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n", State, WalkState)); return (AE_OK); @@ -507,12 +509,14 @@ AcpiDsResultStackPop ( { ACPI_GENERIC_STATE *State; + PROC_NAME ("DsResultStackPop"); + /* Check for stack underflow */ if (WalkState->Results == NULL) { - DEBUG_PRINT (TRACE_EXEC, ("DsResultStackPop: Underflow - State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Underflow - State=%p\n", WalkState)); return (AE_AML_NO_OPERAND); } @@ -520,8 +524,8 @@ AcpiDsResultStackPop ( State = AcpiUtPopGenericState (&WalkState->Results); - DEBUG_PRINT (TRACE_EXEC, - ("DsResultStackPop: Result=%p RemainingResults=%X State=%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "Result=%p RemainingResults=%X State=%p\n", State, State->Results.NumResults, WalkState)); AcpiUtDeleteGenericState (State); @@ -586,14 +590,15 @@ AcpiDsObjStackPush ( void *Object, ACPI_WALK_STATE *WalkState) { + PROC_NAME ("DsObjStackPush"); /* Check for stack overflow */ if (WalkState->NumOperands >= OBJ_NUM_OPERANDS) { - DEBUG_PRINT (ACPI_ERROR, - ("DsObjStackPush: overflow! Obj=%p State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "overflow! Obj=%p State=%p #Ops=%X\n", Object, WalkState, WalkState->NumOperands)); return (AE_STACK_OVERFLOW); } @@ -603,7 +608,7 @@ AcpiDsObjStackPush ( WalkState->Operands [WalkState->NumOperands] = Object; WalkState->NumOperands++; - DEBUG_PRINT (TRACE_EXEC, ("DsObjStackPush: Obj=%p [%s] State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", Object, AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) Object)->Common.Type), WalkState, WalkState->NumOperands)); @@ -630,14 +635,15 @@ AcpiDsObjStackPopObject ( ACPI_OPERAND_OBJECT **Object, ACPI_WALK_STATE *WalkState) { + PROC_NAME ("DsObjStackPopObject"); /* Check for stack underflow */ if (WalkState->NumOperands == 0) { - DEBUG_PRINT (ACPI_ERROR, - ("DsObjStackPop: Missing operand/stack empty! State=%p #Ops=%X\n", + 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); @@ -651,8 +657,8 @@ AcpiDsObjStackPopObject ( if (!WalkState->Operands [WalkState->NumOperands]) { - DEBUG_PRINT (ACPI_ERROR, - ("DsObjStackPop: Null operand! State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Null operand! State=%p #Ops=%X\n", WalkState, WalkState->NumOperands)); *Object = NULL; return (AE_AML_NO_OPERAND); @@ -663,7 +669,7 @@ AcpiDsObjStackPopObject ( *Object = WalkState->Operands [WalkState->NumOperands]; WalkState->Operands [WalkState->NumOperands] = NULL; - DEBUG_PRINT (TRACE_EXEC, ("DsObjStackPopObject: Obj=%p [%s] State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", *Object, AcpiUtGetTypeName ((*Object)->Common.Type), WalkState, WalkState->NumOperands)); @@ -692,6 +698,8 @@ AcpiDsObjStackPop ( { UINT32 i; + PROC_NAME ("DsObjStackPop"); + for (i = 0; i < PopCount; i++) { @@ -699,8 +707,8 @@ AcpiDsObjStackPop ( if (WalkState->NumOperands == 0) { - DEBUG_PRINT (ACPI_ERROR, - ("DsObjStackPop: Underflow! Count=%X State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Underflow! Count=%X State=%p #Ops=%X\n", PopCount, WalkState, WalkState->NumOperands)); return (AE_STACK_UNDERFLOW); } @@ -711,7 +719,7 @@ AcpiDsObjStackPop ( WalkState->Operands [WalkState->NumOperands] = NULL; } - DEBUG_PRINT (TRACE_EXEC, ("DsObjStackPop: Count=%X State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n", PopCount, WalkState, WalkState->NumOperands)); return (AE_OK); @@ -740,6 +748,8 @@ AcpiDsObjStackPopAndDelete ( UINT32 i; ACPI_OPERAND_OBJECT *ObjDesc; + PROC_NAME ("DsObjStackPopAndDelete"); + for (i = 0; i < PopCount; i++) { @@ -747,8 +757,8 @@ AcpiDsObjStackPopAndDelete ( if (WalkState->NumOperands == 0) { - DEBUG_PRINT (ACPI_ERROR, - ("DsObjStackPop: Underflow! Count=%X State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Underflow! Count=%X State=%p #Ops=%X\n", PopCount, WalkState, WalkState->NumOperands)); return (AE_STACK_UNDERFLOW); } @@ -764,7 +774,7 @@ AcpiDsObjStackPopAndDelete ( } } - DEBUG_PRINT (TRACE_EXEC, ("DsObjStackPop: Count=%X State=%p #Ops=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n", PopCount, WalkState, WalkState->NumOperands)); return (AE_OK); @@ -833,8 +843,10 @@ AcpiDsGetCurrentWalkState ( ACPI_WALK_LIST *WalkList) { + PROC_NAME ("DsGetCurrentWalkState"); + - DEBUG_PRINT (TRACE_PARSE, ("DsGetCurrentWalkState, =%p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "DsGetCurrentWalkState, =%p\n", WalkList->WalkState)); if (!WalkList) @@ -947,39 +959,10 @@ AcpiDsCreateWalkState ( FUNCTION_TRACE ("DsCreateWalkState"); - AcpiUtAcquireMutex (ACPI_MTX_CACHES); - AcpiGbl_WalkStateCacheRequests++; - - /* Check the cache first */ - - if (AcpiGbl_WalkStateCache) - { - /* There is an object available, use it */ - - WalkState = AcpiGbl_WalkStateCache; - AcpiGbl_WalkStateCache = WalkState->Next; - - AcpiGbl_WalkStateCacheHits++; - AcpiGbl_WalkStateCacheDepth--; - - DEBUG_PRINTP (TRACE_EXEC, ("State %p from cache\n", WalkState)); - - AcpiUtReleaseMutex (ACPI_MTX_CACHES); - } - - else + WalkState = AcpiUtAcquireFromCache (ACPI_MEM_LIST_WALK); + if (!WalkState) { - /* The cache is empty, create a new object */ - - /* Avoid deadlock with ACPI_MEM_CALLOCATE */ - - AcpiUtReleaseMutex (ACPI_MTX_CACHES); - - WalkState = ACPI_MEM_CALLOCATE (sizeof (ACPI_WALK_STATE)); - if (!WalkState) - { - return_PTR (NULL); - } + return_PTR (NULL); } WalkState->DataType = ACPI_DESC_TYPE_WALK; @@ -1040,7 +1023,7 @@ AcpiDsDeleteWalkState ( if (WalkState->DataType != ACPI_DESC_TYPE_WALK) { - DEBUG_PRINTP (ACPI_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; } @@ -1076,34 +1059,7 @@ AcpiDsDeleteWalkState ( } - /* If walk cache is full, just free this wallkstate object */ - - if (AcpiGbl_WalkStateCacheDepth >= MAX_WALK_CACHE_DEPTH) - { - ACPI_MEM_FREE (WalkState); - } - - /* Otherwise put this object back into the cache */ - - else - { - AcpiUtAcquireMutex (ACPI_MTX_CACHES); - - /* Clear the state */ - - MEMSET (WalkState, 0, sizeof (ACPI_WALK_STATE)); - WalkState->DataType = ACPI_DESC_TYPE_WALK; - - /* Put the object at the head of the global cache list */ - - WalkState->Next = AcpiGbl_WalkStateCache; - AcpiGbl_WalkStateCache = WalkState; - AcpiGbl_WalkStateCacheDepth++; - - - AcpiUtReleaseMutex (ACPI_MTX_CACHES); - } - + AcpiUtReleaseToCache (ACPI_MEM_LIST_WALK, WalkState); return_VOID; } @@ -1125,25 +1081,10 @@ void AcpiDsDeleteWalkStateCache ( void) { - ACPI_WALK_STATE *Next; - - FUNCTION_TRACE ("DsDeleteWalkStateCache"); - /* Traverse the global cache list */ - - while (AcpiGbl_WalkStateCache) - { - /* Delete one cached state object */ - - Next = AcpiGbl_WalkStateCache->Next; - ACPI_MEM_FREE (AcpiGbl_WalkStateCache); - - AcpiGbl_WalkStateCache = Next; - AcpiGbl_WalkStateCacheDepth--; - } - + AcpiUtDeleteGenericCache (ACPI_MEM_LIST_WALK); return_VOID; } |