summaryrefslogtreecommitdiff
path: root/source/components/namespace/nsinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/components/namespace/nsinit.c')
-rw-r--r--source/components/namespace/nsinit.c82
1 files changed, 62 insertions, 20 deletions
diff --git a/source/components/namespace/nsinit.c b/source/components/namespace/nsinit.c
index dc76db9f6a70..dcfb41ed7d5d 100644
--- a/source/components/namespace/nsinit.c
+++ b/source/components/namespace/nsinit.c
@@ -408,6 +408,65 @@ ErrorExit:
/*******************************************************************************
*
+ * FUNCTION: AcpiNsInitOnePackage
+ *
+ * PARAMETERS: ObjHandle - Node
+ * Level - Current nesting level
+ * Context - Not used
+ * ReturnValue - Not used
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every package
+ * within the namespace. Used during dynamic load of an SSDT.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiNsInitOnePackage (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue)
+{
+ ACPI_STATUS Status;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+ ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
+
+
+ ObjDesc = AcpiNsGetAttachedObject (Node);
+ if (!ObjDesc)
+ {
+ return (AE_OK);
+ }
+
+ /* Exit if package is already initialized */
+
+ if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID)
+ {
+ return (AE_OK);
+ }
+
+ Status = AcpiDsGetPackageArguments (ObjDesc);
+ if (ACPI_FAILURE (Status))
+ {
+ return (AE_OK);
+ }
+
+ Status = AcpiUtWalkPackageTree (ObjDesc, NULL, AcpiDsInitPackageElement,
+ NULL);
+ if (ACPI_FAILURE (Status))
+ {
+ return (AE_OK);
+ }
+
+ ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiNsInitOneObject
*
* PARAMETERS: ObjHandle - Node
@@ -533,27 +592,10 @@ AcpiNsInitOneObject (
case ACPI_TYPE_PACKAGE:
- Info->PackageInit++;
- Status = AcpiDsGetPackageArguments (ObjDesc);
- if (ACPI_FAILURE (Status))
- {
- break;
- }
-
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE,
- "%s: Completing resolution of Package elements\n",
- ACPI_GET_FUNCTION_NAME));
+ /* Complete the initialization/resolution of the package object */
- /*
- * Resolve all named references in package objects (and all
- * sub-packages). This action has been deferred until the entire
- * namespace has been loaded, in order to support external and
- * forward references from individual package elements (05/2017).
- */
- Status = AcpiUtWalkPackageTree (ObjDesc, NULL,
- AcpiDsInitPackageElement, NULL);
-
- ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
+ Info->PackageInit++;
+ Status = AcpiNsInitOnePackage (ObjHandle, Level, NULL, NULL);
break;
default: