summaryrefslogtreecommitdiff
path: root/source/components/dispatcher/dswexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/components/dispatcher/dswexec.c')
-rw-r--r--source/components/dispatcher/dswexec.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/source/components/dispatcher/dswexec.c b/source/components/dispatcher/dswexec.c
index f2925ecff00d..3fa7b95bba8e 100644
--- a/source/components/dispatcher/dswexec.c
+++ b/source/components/dispatcher/dswexec.c
@@ -158,7 +158,9 @@
#include "acinterp.h"
#include "acnamesp.h"
#include "acdebug.h"
-
+#ifdef ACPI_EXEC_APP
+#include "aecommon.h"
+#endif
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME ("dswexec")
@@ -504,7 +506,10 @@ AcpiDsExecEndOp (
UINT32 OpClass;
ACPI_PARSE_OBJECT *NextOp;
ACPI_PARSE_OBJECT *FirstArg;
-
+#ifdef ACPI_EXEC_APP
+ char *Namepath;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+#endif
ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState);
@@ -717,6 +722,29 @@ AcpiDsExecEndOp (
}
Status = AcpiDsEvalBufferFieldOperands (WalkState, Op);
+ if (ACPI_FAILURE (Status))
+ {
+ break;
+ }
+
+#ifdef ACPI_EXEC_APP
+ /*
+ * AcpiExec support for namespace initialization file (initialize
+ * BufferFields in this code.)
+ */
+ Namepath = AcpiNsGetExternalPathname (Op->Common.Node);
+ Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
+ if (ACPI_SUCCESS (Status))
+ {
+ Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL);
+ if ACPI_FAILURE (Status)
+ {
+ ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field"));
+ }
+ }
+ ACPI_FREE (Namepath);
+ Status = AE_OK;
+#endif
break;