summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/components/namespace/nspredef.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/components/namespace/nspredef.c')
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nspredef.c208
1 files changed, 42 insertions, 166 deletions
diff --git a/sys/contrib/dev/acpica/components/namespace/nspredef.c b/sys/contrib/dev/acpica/components/namespace/nspredef.c
index 3f6ee23..2de8f41 100644
--- a/sys/contrib/dev/acpica/components/namespace/nspredef.c
+++ b/sys/contrib/dev/acpica/components/namespace/nspredef.c
@@ -63,12 +63,12 @@
* There are several areas that are validated:
*
* 1) The number of input arguments as defined by the method/object in the
- * ASL is validated against the ACPI specification.
+ * ASL is validated against the ACPI specification.
* 2) The type of the return object (if any) is validated against the ACPI
- * specification.
+ * specification.
* 3) For returned package objects, the count of package elements is
- * validated, as well as the type of each package element. Nested
- * packages are supported.
+ * validated, as well as the type of each package element. Nested
+ * packages are supported.
*
* For any problems found, a warning message is issued.
*
@@ -79,7 +79,7 @@
static ACPI_STATUS
AcpiNsCheckReference (
- ACPI_PREDEFINED_DATA *Data,
+ ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT *ReturnObject);
static UINT32
@@ -89,9 +89,10 @@ AcpiNsGetBitmappedType (
/*******************************************************************************
*
- * FUNCTION: AcpiNsCheckPredefinedNames
+ * FUNCTION: AcpiNsCheckReturnValue
*
* PARAMETERS: Node - Namespace node for the method/object
+ * Info - Method execution information block
* UserParamCount - Number of parameters actually passed
* ReturnStatus - Status from the object evaluation
* ReturnObjectPtr - Pointer to the object returned from the
@@ -99,56 +100,38 @@ AcpiNsGetBitmappedType (
*
* RETURN: Status
*
- * DESCRIPTION: Check an ACPI name for a match in the predefined name list.
+ * DESCRIPTION: Check the value returned from a predefined name.
*
******************************************************************************/
ACPI_STATUS
-AcpiNsCheckPredefinedNames (
+AcpiNsCheckReturnValue (
ACPI_NAMESPACE_NODE *Node,
+ ACPI_EVALUATE_INFO *Info,
UINT32 UserParamCount,
ACPI_STATUS ReturnStatus,
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
{
- ACPI_STATUS Status = AE_OK;
+ ACPI_STATUS Status;
const ACPI_PREDEFINED_INFO *Predefined;
- char *Pathname;
- ACPI_PREDEFINED_DATA *Data;
-
-
- /* Match the name for this method/object against the predefined list */
-
- Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii);
- /* Get the full pathname to the object, for use in warning messages */
-
- Pathname = AcpiNsGetExternalPathname (Node);
- if (!Pathname)
- {
- return (AE_OK); /* Could not get pathname, ignore */
- }
-
- /*
- * Check that the parameter count for this method matches the ASL
- * definition. For predefined names, ensure that both the caller and
- * the method itself are in accordance with the ACPI specification.
- */
- AcpiNsCheckParameterCount (Pathname, Node, UserParamCount, Predefined);
/* If not a predefined name, we cannot validate the return object */
+ Predefined = Info->Predefined;
if (!Predefined)
{
- goto Cleanup;
+ return (AE_OK);
}
/*
* If the method failed or did not actually return an object, we cannot
* validate the return object
*/
- if ((ReturnStatus != AE_OK) && (ReturnStatus != AE_CTRL_RETURN_VALUE))
+ if ((ReturnStatus != AE_OK) &&
+ (ReturnStatus != AE_CTRL_RETURN_VALUE))
{
- goto Cleanup;
+ return (AE_OK);
}
/*
@@ -168,27 +151,15 @@ AcpiNsCheckPredefinedNames (
(!Predefined->Info.ExpectedBtypes) ||
(Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL))
{
- goto Cleanup;
- }
-
- /* Create the parameter data block for object validation */
-
- Data = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PREDEFINED_DATA));
- if (!Data)
- {
- goto Cleanup;
+ return (AE_OK);
}
- Data->Predefined = Predefined;
- Data->Node = Node;
- Data->NodeFlags = Node->Flags;
- Data->Pathname = Pathname;
/*
* Check that the type of the main return object is what is expected
* for this predefined name
*/
- Status = AcpiNsCheckObjectType (Data, ReturnObjectPtr,
- Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT);
+ Status = AcpiNsCheckObjectType (Info, ReturnObjectPtr,
+ Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT);
if (ACPI_FAILURE (Status))
{
goto Exit;
@@ -200,8 +171,8 @@ AcpiNsCheckPredefinedNames (
*/
if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE)
{
- Data->ParentPackage = *ReturnObjectPtr;
- Status = AcpiNsCheckPackage (Data, ReturnObjectPtr);
+ Info->ParentPackage = *ReturnObjectPtr;
+ Status = AcpiNsCheckPackage (Info, ReturnObjectPtr);
if (ACPI_FAILURE (Status))
{
goto Exit;
@@ -216,7 +187,7 @@ AcpiNsCheckPredefinedNames (
* performed on a per-name basis, i.e., the code is specific to
* particular predefined names.
*/
- Status = AcpiNsComplexRepairs (Data, Node, Status, ReturnObjectPtr);
+ Status = AcpiNsComplexRepairs (Info, Node, Status, ReturnObjectPtr);
Exit:
/*
@@ -224,119 +195,21 @@ Exit:
* or more objects, mark the parent node to suppress further warning
* messages during the next evaluation of the same method/object.
*/
- if (ACPI_FAILURE (Status) || (Data->Flags & ACPI_OBJECT_REPAIRED))
+ if (ACPI_FAILURE (Status) ||
+ (Info->ReturnFlags & ACPI_OBJECT_REPAIRED))
{
Node->Flags |= ANOBJ_EVALUATED;
}
- ACPI_FREE (Data);
-Cleanup:
- ACPI_FREE (Pathname);
return (Status);
}
/*******************************************************************************
*
- * FUNCTION: AcpiNsCheckParameterCount
- *
- * PARAMETERS: Pathname - Full pathname to the node (for error msgs)
- * Node - Namespace node for the method/object
- * UserParamCount - Number of args passed in by the caller
- * Predefined - Pointer to entry in predefined name table
- *
- * RETURN: None
- *
- * DESCRIPTION: Check that the declared (in ASL/AML) parameter count for a
- * predefined name is what is expected (i.e., what is defined in
- * the ACPI specification for this predefined name.)
- *
- ******************************************************************************/
-
-void
-AcpiNsCheckParameterCount (
- char *Pathname,
- ACPI_NAMESPACE_NODE *Node,
- UINT32 UserParamCount,
- const ACPI_PREDEFINED_INFO *Predefined)
-{
- UINT32 ParamCount;
- UINT32 RequiredParamsCurrent;
- UINT32 RequiredParamsOld;
-
-
- /* Methods have 0-7 parameters. All other types have zero. */
-
- ParamCount = 0;
- if (Node->Type == ACPI_TYPE_METHOD)
- {
- ParamCount = Node->Object->Method.ParamCount;
- }
-
- if (!Predefined)
- {
- /*
- * Check the parameter count for non-predefined methods/objects.
- *
- * Warning if too few or too many arguments have been passed by the
- * caller. An incorrect number of arguments may not cause the method
- * to fail. However, the method will fail if there are too few
- * arguments and the method attempts to use one of the missing ones.
- */
- if (UserParamCount < ParamCount)
- {
- ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS,
- "Insufficient arguments - needs %u, found %u",
- ParamCount, UserParamCount));
- }
- else if (UserParamCount > ParamCount)
- {
- ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS,
- "Excess arguments - needs %u, found %u",
- ParamCount, UserParamCount));
- }
- return;
- }
-
- /*
- * Validate the user-supplied parameter count.
- * Allow two different legal argument counts (_SCP, etc.)
- */
- RequiredParamsCurrent = Predefined->Info.ArgumentList & METHOD_ARG_MASK;
- RequiredParamsOld = Predefined->Info.ArgumentList >> METHOD_ARG_BIT_WIDTH;
-
- if (UserParamCount != ACPI_UINT32_MAX)
- {
- if ((UserParamCount != RequiredParamsCurrent) &&
- (UserParamCount != RequiredParamsOld))
- {
- ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS,
- "Parameter count mismatch - "
- "caller passed %u, ACPI requires %u",
- UserParamCount, RequiredParamsCurrent));
- }
- }
-
- /*
- * Check that the ASL-defined parameter count is what is expected for
- * this predefined name (parameter count as defined by the ACPI
- * specification)
- */
- if ((ParamCount != RequiredParamsCurrent) &&
- (ParamCount != RequiredParamsOld))
- {
- ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, Node->Flags,
- "Parameter count mismatch - ASL declared %u, ACPI requires %u",
- ParamCount, RequiredParamsCurrent));
- }
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AcpiNsCheckObjectType
*
- * PARAMETERS: Data - Pointer to validation data structure
+ * PARAMETERS: Info - Method execution information block
* ReturnObjectPtr - Pointer to the object returned from the
* evaluation of a method or object
* ExpectedBtypes - Bitmap of expected return type(s)
@@ -353,7 +226,7 @@ AcpiNsCheckParameterCount (
ACPI_STATUS
AcpiNsCheckObjectType (
- ACPI_PREDEFINED_DATA *Data,
+ ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT **ReturnObjectPtr,
UINT32 ExpectedBtypes,
UINT32 PackageIndex)
@@ -368,7 +241,7 @@ AcpiNsCheckObjectType (
if (ReturnObject &&
ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED)
{
- ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
"Invalid return type - Found a Namespace node [%4.4s] type %s",
ReturnObject->Node.Name.Ascii,
AcpiUtGetTypeName (ReturnObject->Node.Type)));
@@ -383,8 +256,8 @@ AcpiNsCheckObjectType (
* from all of the predefined names (including elements of returned
* packages)
*/
- Data->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject);
- if (Data->ReturnBtype == ACPI_RTYPE_ANY)
+ Info->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject);
+ if (Info->ReturnBtype == ACPI_RTYPE_ANY)
{
/* Not one of the supported objects, must be incorrect */
goto TypeErrorExit;
@@ -392,17 +265,20 @@ AcpiNsCheckObjectType (
/* For reference objects, check that the reference type is correct */
- if ((Data->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE)
+ if ((Info->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE)
{
- Status = AcpiNsCheckReference (Data, ReturnObject);
+ Status = AcpiNsCheckReference (Info, ReturnObject);
return (Status);
}
/* Attempt simple repair of the returned object if necessary */
- Status = AcpiNsSimpleRepair (Data, ExpectedBtypes,
- PackageIndex, ReturnObjectPtr);
- return (Status);
+ Status = AcpiNsSimpleRepair (Info, ExpectedBtypes,
+ PackageIndex, ReturnObjectPtr);
+ if (ACPI_SUCCESS (Status))
+ {
+ return (AE_OK); /* Successful repair */
+ }
TypeErrorExit:
@@ -413,13 +289,13 @@ TypeErrorExit:
if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)
{
- ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
"Return type mismatch - found %s, expected %s",
AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer));
}
else
{
- ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
"Return Package type mismatch at index %u - "
"found %s, expected %s", PackageIndex,
AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer));
@@ -433,7 +309,7 @@ TypeErrorExit:
*
* FUNCTION: AcpiNsCheckReference
*
- * PARAMETERS: Data - Pointer to validation data structure
+ * PARAMETERS: Info - Method execution information block
* ReturnObject - Object returned from the evaluation of a
* method or object
*
@@ -447,7 +323,7 @@ TypeErrorExit:
static ACPI_STATUS
AcpiNsCheckReference (
- ACPI_PREDEFINED_DATA *Data,
+ ACPI_EVALUATE_INFO *Info,
ACPI_OPERAND_OBJECT *ReturnObject)
{
@@ -461,7 +337,7 @@ AcpiNsCheckReference (
return (AE_OK);
}
- ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+ ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
"Return type mismatch - unexpected reference object type [%s] %2.2X",
AcpiUtGetReferenceName (ReturnObject),
ReturnObject->Reference.Class));
OpenPOWER on IntegriCloud