aboutsummaryrefslogtreecommitdiff
path: root/source/compiler/aslfold.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler/aslfold.c')
-rw-r--r--source/compiler/aslfold.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/source/compiler/aslfold.c b/source/compiler/aslfold.c
index 6c8cb37b8ec9..425a328a9e88 100644
--- a/source/compiler/aslfold.c
+++ b/source/compiler/aslfold.c
@@ -200,6 +200,19 @@ OpcAmlCheckForConstant (
DbgPrint (ASL_PARSE_OUTPUT, "[%.4d] Opcode: %12.12s ",
Op->Asl.LogicalLineNumber, Op->Asl.ParseOpName);
+ /*
+ * These opcodes do not appear in the OpcodeInfo table, but
+ * they represent constants, so abort the constant walk now.
+ */
+ if ((WalkState->Opcode == AML_RAW_DATA_BYTE) ||
+ (WalkState->Opcode == AML_RAW_DATA_WORD) ||
+ (WalkState->Opcode == AML_RAW_DATA_DWORD) ||
+ (WalkState->Opcode == AML_RAW_DATA_QWORD))
+ {
+ WalkState->WalkType = ACPI_WALK_CONST_OPTIONAL;
+ return (AE_TYPE);
+ }
+
if (!(WalkState->OpInfo->Flags & AML_CONSTANT))
{
/* The opcode is not a Type 3/4/5 opcode */
@@ -254,8 +267,8 @@ OpcAmlCheckForConstant (
{
DbgPrint (ASL_PARSE_OUTPUT, " TERMARG");
}
- DbgPrint (ASL_PARSE_OUTPUT, "\n");
+ DbgPrint (ASL_PARSE_OUTPUT, "\n");
return (AE_OK);
}