summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/utdelete.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/utdelete.c')
-rw-r--r--sys/contrib/dev/acpica/utdelete.c87
1 files changed, 42 insertions, 45 deletions
diff --git a/sys/contrib/dev/acpica/utdelete.c b/sys/contrib/dev/acpica/utdelete.c
index 890973e..56f546b 100644
--- a/sys/contrib/dev/acpica/utdelete.c
+++ b/sys/contrib/dev/acpica/utdelete.c
@@ -1,7 +1,7 @@
/*******************************************************************************
*
* Module Name: utdelete - object deletion and reference count utilities
- * $Revision: 95 $
+ * $Revision: 97 $
*
******************************************************************************/
@@ -119,6 +119,7 @@
#include "acpi.h"
#include "acinterp.h"
#include "acnamesp.h"
+#include "acevents.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME ("utdelete")
@@ -144,6 +145,7 @@ AcpiUtDeleteInternalObj (
void *ObjPointer = NULL;
ACPI_OPERAND_OBJECT *HandlerDesc;
ACPI_OPERAND_OBJECT *SecondDesc;
+ ACPI_OPERAND_OBJECT *NextDesc;
ACPI_FUNCTION_TRACE_PTR ("UtDeleteInternalObj", Object);
@@ -208,6 +210,25 @@ AcpiUtDeleteInternalObj (
break;
+ case ACPI_TYPE_DEVICE:
+
+ if (Object->Device.GpeBlock)
+ {
+ (void) AcpiEvDeleteGpeBlock (Object->Device.GpeBlock);
+ }
+
+ /* Walk the handler list for this device */
+
+ HandlerDesc = Object->Device.AddressSpace;
+ while (HandlerDesc)
+ {
+ NextDesc = HandlerDesc->AddressSpace.Next;
+ AcpiUtRemoveReference (HandlerDesc);
+ HandlerDesc = NextDesc;
+ }
+ break;
+
+
case ACPI_TYPE_MUTEX:
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "***** Mutex %p, Semaphore %p\n",
@@ -254,11 +275,15 @@ AcpiUtDeleteInternalObj (
* default handlers -- and therefore, we created the context object
* locally, it was not created by an external caller.
*/
- HandlerDesc = Object->Region.AddrHandler;
- if ((HandlerDesc) &&
- (HandlerDesc->AddrHandler.Hflags == ACPI_ADDR_HANDLER_DEFAULT_INSTALLED))
+ HandlerDesc = Object->Region.AddressSpace;
+ if (HandlerDesc)
{
- ObjPointer = SecondDesc->Extra.RegionContext;
+ if (HandlerDesc->AddressSpace.Hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)
+ {
+ ObjPointer = SecondDesc->Extra.RegionContext;
+ }
+
+ AcpiUtRemoveReference (HandlerDesc);
}
/* Now we can free the Extra object */
@@ -284,7 +309,6 @@ AcpiUtDeleteInternalObj (
break;
}
-
/* Free any allocated memory (pointer within the object) found above */
if (ObjPointer)
@@ -375,7 +399,7 @@ AcpiUtUpdateRefCount (
NewCount = Count;
/*
- * Reference count action (increment, decrement, or force delete)
+ * Perform the reference count action (increment, decrement, or force delete)
*/
switch (Action)
{
@@ -484,8 +508,6 @@ AcpiUtUpdateObjectReference (
{
ACPI_STATUS Status;
UINT32 i;
- ACPI_OPERAND_OBJECT *Next;
- ACPI_OPERAND_OBJECT *New;
ACPI_GENERIC_STATE *StateList = NULL;
ACPI_GENERIC_STATE *State;
@@ -500,9 +522,8 @@ AcpiUtUpdateObjectReference (
return_ACPI_STATUS (AE_OK);
}
- /*
- * Make sure that this isn't a namespace handle
- */
+ /* Make sure that this isn't a namespace handle */
+
if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)
{
ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Object %p is NS handle\n", Object));
@@ -525,30 +546,8 @@ AcpiUtUpdateObjectReference (
{
case ACPI_TYPE_DEVICE:
- Status = AcpiUtCreateUpdateStateAndPush (Object->Device.AddrHandler,
- Action, &StateList);
- if (ACPI_FAILURE (Status))
- {
- goto ErrorExit;
- }
-
- AcpiUtUpdateRefCount (Object->Device.SysHandler, Action);
- AcpiUtUpdateRefCount (Object->Device.DrvHandler, Action);
- break;
-
-
- case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
-
- /* Must walk list of address handlers */
-
- Next = Object->AddrHandler.Next;
- while (Next)
- {
- New = Next->AddrHandler.Next;
- AcpiUtUpdateRefCount (Next, Action);
-
- Next = New;
- }
+ AcpiUtUpdateRefCount (Object->Device.SystemNotify, Action);
+ AcpiUtUpdateRefCount (Object->Device.DeviceNotify, Action);
break;
@@ -686,17 +685,15 @@ AcpiUtAddReference (
ACPI_FUNCTION_TRACE_PTR ("UtAddReference", Object);
- /*
- * Ensure that we have a valid object
- */
+ /* Ensure that we have a valid object */
+
if (!AcpiUtValidInternalObject (Object))
{
return_VOID;
}
- /*
- * We have a valid ACPI internal object, now increment the reference count
- */
+ /* Increment the reference count */
+
(void) AcpiUtUpdateObjectReference (Object, REF_INCREMENT);
return_VOID;
}
@@ -721,6 +718,7 @@ AcpiUtRemoveReference (
ACPI_FUNCTION_TRACE_PTR ("UtRemoveReference", Object);
+
/*
* Allow a NULL pointer to be passed in, just ignore it. This saves
* each caller from having to check. Also, ignore NS nodes.
@@ -733,9 +731,8 @@ AcpiUtRemoveReference (
return_VOID;
}
- /*
- * Ensure that we have a valid object
- */
+ /* Ensure that we have a valid object */
+
if (!AcpiUtValidInternalObject (Object))
{
return_VOID;
OpenPOWER on IntegriCloud