summaryrefslogtreecommitdiffstats
path: root/source/components/disassembler/dmwalk.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/components/disassembler/dmwalk.c')
-rw-r--r--source/components/disassembler/dmwalk.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c
index 92f27e5..823ce18 100644
--- a/source/components/disassembler/dmwalk.c
+++ b/source/components/disassembler/dmwalk.c
@@ -285,7 +285,8 @@ AcpiDmBlockType (
case AML_BUFFER_OP:
if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) ||
- (Op->Common.DisasmOpcode == ACPI_DASM_UUID))
+ (Op->Common.DisasmOpcode == ACPI_DASM_UUID) ||
+ (Op->Common.DisasmOpcode == ACPI_DASM_PLD_METHOD))
{
return (BLOCK_NONE);
}
@@ -301,6 +302,17 @@ AcpiDmBlockType (
return (BLOCK_PAREN);
+ case AML_INT_METHODCALL_OP:
+
+ if (Op->Common.Parent &&
+ ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
+ (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)))
+ {
+ /* This is a reference to a method, not an invocation */
+
+ return (BLOCK_NONE);
+ }
+
default:
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
@@ -477,13 +489,20 @@ AcpiDmDescendingOp (
* keep track of the current column.
*/
Info->Count++;
- if (Info->Count /* +Info->LastLevel */ > 10)
+ if (Info->Count /* +Info->LastLevel */ > 12)
{
Info->Count = 0;
AcpiOsPrintf ("\n");
AcpiDmIndent (Info->LastLevel + 1);
}
+ /* If ASL+ is enabled, check for a C-style operator */
+
+ if (AcpiDmCheckForSymbolicOpcode (Op, Info))
+ {
+ return (AE_OK);
+ }
+
/* Print the opcode name */
AcpiDmDisassembleOneOp (NULL, Info, Op);
@@ -563,7 +582,6 @@ AcpiDmDescendingOp (
AcpiDmPredefinedDescription (Op);
break;
-
case AML_NAME_OP:
/* Check for _HID and related EISAID() */
@@ -572,13 +590,11 @@ AcpiDmDescendingOp (
AcpiOsPrintf (", ");
break;
-
case AML_REGION_OP:
AcpiDmRegionFlags (Op);
break;
-
case AML_POWER_RES_OP:
/* Mark the next two Ops as part of the parameter list */
@@ -591,7 +607,6 @@ AcpiDmDescendingOp (
NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
return (AE_OK);
-
case AML_PROCESSOR_OP:
/* Mark the next three Ops as part of the parameter list */
@@ -607,20 +622,17 @@ AcpiDmDescendingOp (
NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST;
return (AE_OK);
-
case AML_MUTEX_OP:
case AML_DATA_REGION_OP:
AcpiOsPrintf (", ");
return (AE_OK);
-
case AML_EVENT_OP:
case AML_ALIAS_OP:
return (AE_OK);
-
case AML_SCOPE_OP:
case AML_DEVICE_OP:
case AML_THERMAL_ZONE_OP:
@@ -628,7 +640,6 @@ AcpiDmDescendingOp (
AcpiOsPrintf (")");
break;
-
default:
AcpiOsPrintf ("*** Unhandled named opcode %X\n",
@@ -825,9 +836,9 @@ AcpiDmAscendingOp (
{
case BLOCK_PAREN:
- /* Completed an op that has arguments, add closing paren */
+ /* Completed an op that has arguments, add closing paren if needed */
- AcpiOsPrintf (")");
+ AcpiDmCloseOperator (Op);
if (Op->Common.AmlOpcode == AML_NAME_OP)
{
@@ -999,8 +1010,21 @@ AcpiDmAscendingOp (
{
Info->Level++;
}
+
+ /*
+ * For ASL+, check for and emit a C-style symbol. If valid, the
+ * symbol string has been deferred until after the first operand
+ */
+ if (AcpiGbl_CstyleDisassembly)
+ {
+ if (Op->Asl.OperatorSymbol)
+ {
+ AcpiOsPrintf ("%s", Op->Asl.OperatorSymbol);
+ Op->Asl.OperatorSymbol = NULL;
+ }
+ }
+
return (AE_OK);
}
-
#endif /* ACPI_DISASSEMBLER */
OpenPOWER on IntegriCloud