summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/evregion.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/evregion.c')
-rw-r--r--sys/contrib/dev/acpica/evregion.c71
1 files changed, 45 insertions, 26 deletions
diff --git a/sys/contrib/dev/acpica/evregion.c b/sys/contrib/dev/acpica/evregion.c
index f0e35b2..544e7fb 100644
--- a/sys/contrib/dev/acpica/evregion.c
+++ b/sys/contrib/dev/acpica/evregion.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: evregion - ACPI AddressSpace (OpRegion) handler dispatch
- * $Revision: 113 $
+ * $Revision: 120 $
*
*****************************************************************************/
@@ -161,14 +161,14 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
* space must be always available -- even though we are nowhere
* near ready to find the PCI root buses at this point.
*
- * NOTE: We ignore AE_EXIST because this means that a handler has
- * already been installed (via AcpiInstallAddressSpaceHandler)
+ * NOTE: We ignore AE_ALREADY_EXISTS because this means that a handler
+ * has already been installed (via AcpiInstallAddressSpaceHandler)
*/
Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode,
ACPI_ADR_SPACE_SYSTEM_MEMORY,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
- (Status != AE_EXIST))
+ (Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@@ -177,7 +177,7 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
ACPI_ADR_SPACE_SYSTEM_IO,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
- (Status != AE_EXIST))
+ (Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@@ -186,7 +186,7 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
ACPI_ADR_SPACE_PCI_CONFIG,
ACPI_DEFAULT_HANDLER, NULL, NULL);
if ((ACPI_FAILURE (Status)) &&
- (Status != AE_EXIST))
+ (Status != AE_ALREADY_EXISTS))
{
return_ACPI_STATUS (Status);
}
@@ -196,8 +196,6 @@ AcpiEvInstallDefaultAddressSpaceHandlers (
}
-/* TBD: [Restructure] Move elsewhere */
-
/*******************************************************************************
*
* FUNCTION: AcpiEvExecuteRegMethod
@@ -217,13 +215,20 @@ AcpiEvExecuteRegMethod (
UINT32 Function)
{
ACPI_OPERAND_OBJECT *Params[3];
+ ACPI_OPERAND_OBJECT *RegionObj2;
ACPI_STATUS Status;
FUNCTION_TRACE ("EvExecuteRegMethod");
- if (RegionObj->Region.Extra->Extra.Method_REG == NULL)
+ RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
+ if (!RegionObj2)
+ {
+ return_ACPI_STATUS (AE_NOT_EXIST);
+ }
+
+ if (RegionObj2->Extra.Method_REG == NULL)
{
return_ACPI_STATUS (AE_OK);
}
@@ -260,8 +265,8 @@ AcpiEvExecuteRegMethod (
/*
* Execute the method, no return value
*/
- DEBUG_EXEC(AcpiUtDisplayInitPathname (RegionObj->Region.Extra->Extra.Method_REG, " [Method]"));
- Status = AcpiNsEvaluateByHandle (RegionObj->Region.Extra->Extra.Method_REG, Params, NULL);
+ DEBUG_EXEC(AcpiUtDisplayInitPathname (RegionObj2->Extra.Method_REG, " [Method]"));
+ Status = AcpiNsEvaluateByHandle (RegionObj2->Extra.Method_REG, Params, NULL);
AcpiUtRemoveReference (Params[1]);
@@ -280,7 +285,7 @@ Cleanup:
* SpaceId - ID of the address space (0-255)
* Function - Read or Write operation
* Address - Where in the space to read or write
- * BitWidth - Field width in bits (8, 16, or 32)
+ * BitWidth - Field width in bits (8, 16, 32, or 64)
* Value - Pointer to in or out value
*
* RETURN: Status
@@ -296,18 +301,25 @@ AcpiEvAddressSpaceDispatch (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
- UINT32 *Value)
+ ACPI_INTEGER *Value)
{
ACPI_STATUS Status;
ACPI_ADR_SPACE_HANDLER Handler;
ACPI_ADR_SPACE_SETUP RegionSetup;
ACPI_OPERAND_OBJECT *HandlerDesc;
+ ACPI_OPERAND_OBJECT *RegionObj2;
void *RegionContext = NULL;
FUNCTION_TRACE ("EvAddressSpaceDispatch");
+ RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
+ if (!RegionObj2)
+ {
+ return_ACPI_STATUS (AE_NOT_EXIST);
+ }
+
/*
* Ensure that there is a handler associated with this region
*/
@@ -317,14 +329,14 @@ AcpiEvAddressSpaceDispatch (
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "no handler for region(%p) [%s]\n",
RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
- return_ACPI_STATUS(AE_NOT_EXIST);
+ return_ACPI_STATUS (AE_NOT_EXIST);
}
/*
* It may be the case that the region has never been initialized
* Some types of regions require special init code
*/
- if (!(RegionObj->Region.Flags & AOPOBJ_INITIALIZED))
+ if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE))
{
/*
* This region has not been initialized yet, do it
@@ -361,16 +373,16 @@ AcpiEvAddressSpaceDispatch (
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Region Init: %s [%s]\n",
AcpiFormatException (Status),
AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
- return_ACPI_STATUS(Status);
+ return_ACPI_STATUS (Status);
}
- RegionObj->Region.Flags |= AOPOBJ_INITIALIZED;
+ RegionObj->Region.Flags |= AOPOBJ_SETUP_COMPLETE;
/*
* Save the returned context for use in all accesses to
* this particular region.
*/
- RegionObj->Region.Extra->Extra.RegionContext = RegionContext;
+ RegionObj2->Extra.RegionContext = RegionContext;
}
/*
@@ -398,7 +410,7 @@ AcpiEvAddressSpaceDispatch (
*/
Status = Handler (Function, Address, BitWidth, Value,
HandlerDesc->AddrHandler.Context,
- RegionObj->Region.Extra->Extra.RegionContext);
+ RegionObj2->Extra.RegionContext);
if (ACPI_FAILURE (Status))
{
@@ -443,13 +455,19 @@ AcpiEvDisassociateRegionFromHandler(
ACPI_OPERAND_OBJECT **LastObjPtr;
ACPI_ADR_SPACE_SETUP RegionSetup;
void *RegionContext;
+ ACPI_OPERAND_OBJECT *RegionObj2;
ACPI_STATUS Status;
FUNCTION_TRACE ("EvDisassociateRegionFromHandler");
- RegionContext = RegionObj->Region.Extra->Extra.RegionContext;
+ RegionObj2 = AcpiNsGetSecondaryObject (RegionObj);
+ if (!RegionObj2)
+ {
+ return;
+ }
+ RegionContext = RegionObj2->Extra.RegionContext;
/*
* Get the address handler from the region object
@@ -518,7 +536,7 @@ AcpiEvDisassociateRegionFromHandler(
AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
}
- RegionObj->Region.Flags &= ~(AOPOBJ_INITIALIZED);
+ RegionObj->Region.Flags &= ~(AOPOBJ_SETUP_COMPLETE);
/*
* Remove handler reference in the region
@@ -587,18 +605,19 @@ AcpiEvAssociateRegionAndHandler (
/*
- * Link this region to the front of the handler's list
+ * Link this region to the front of the handler's list
*/
RegionObj->Region.Next = HandlerObj->AddrHandler.RegionList;
HandlerObj->AddrHandler.RegionList = RegionObj;
/*
- * set the region's handler
+ * Set the region's handler
*/
RegionObj->Region.AddrHandler = HandlerObj;
/*
- * Last thing, tell all users that this region is usable
+ * Tell all users that this region is usable by running the _REG
+ * method
*/
if (AcpiNsIsLocked)
{
@@ -624,8 +643,8 @@ AcpiEvAssociateRegionAndHandler (
* Level - Nesting level of the handle
* Context - Passed into AcpiNsWalkNamespace
*
- * DESCRIPTION: This routine checks to see if the object is a Region if it
- * is then the address handler is installed in it.
+ * DESCRIPTION: This routine installs an address handler into objects that are
+ * of type Region.
*
* If the Object is a Device, and the device has a handler of
* the same type then the search is terminated in that branch.
OpenPOWER on IntegriCloud