diff options
Diffstat (limited to 'sys/contrib/dev/acpica/dswexec.c')
-rw-r--r-- | sys/contrib/dev/acpica/dswexec.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/sys/contrib/dev/acpica/dswexec.c b/sys/contrib/dev/acpica/dswexec.c index 276514c..25e1a63 100644 --- a/sys/contrib/dev/acpica/dswexec.c +++ b/sys/contrib/dev/acpica/dswexec.c @@ -2,7 +2,7 @@ * * Module Name: dswexec - Dispatcher method execution callbacks; * dispatch to interpreter. - * $Revision: 106 $ + * $Revision: 113 $ * *****************************************************************************/ @@ -134,17 +134,18 @@ * Dispatch table for opcode classes */ static ACPI_EXECUTE_OP AcpiGbl_OpTypeDispatch [] = { - AcpiExOpcode_1A_0T_0R, - AcpiExOpcode_1A_0T_1R, - AcpiExOpcode_1A_1T_0R, - AcpiExOpcode_1A_1T_1R, - AcpiExOpcode_2A_0T_0R, - AcpiExOpcode_2A_0T_1R, - AcpiExOpcode_2A_1T_1R, - AcpiExOpcode_2A_2T_1R, - AcpiExOpcode_3A_0T_0R, - AcpiExOpcode_3A_1T_1R, - AcpiExOpcode_6A_0T_1R}; + AcpiExOpcode_0A_0T_1R, + AcpiExOpcode_1A_0T_0R, + AcpiExOpcode_1A_0T_1R, + AcpiExOpcode_1A_1T_0R, + AcpiExOpcode_1A_1T_1R, + AcpiExOpcode_2A_0T_0R, + AcpiExOpcode_2A_0T_1R, + AcpiExOpcode_2A_1T_1R, + AcpiExOpcode_2A_2T_1R, + AcpiExOpcode_3A_0T_0R, + AcpiExOpcode_3A_1T_1R, + AcpiExOpcode_6A_0T_1R}; /***************************************************************************** * @@ -514,7 +515,7 @@ AcpiDsExecEndOp ( * routine. There is one routine per opcode "type" based upon the * number of opcode arguments and return type. */ - Status = AcpiGbl_OpTypeDispatch [OpType] (WalkState); + Status = AcpiGbl_OpTypeDispatch[OpType] (WalkState); } else { @@ -527,7 +528,9 @@ AcpiDsExecEndOp ( (WalkState->Operands[0]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (WalkState->Operands[1]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && (WalkState->Operands[0]->Reference.Opcode == - WalkState->Operands[1]->Reference.Opcode)) + WalkState->Operands[1]->Reference.Opcode) && + (WalkState->Operands[0]->Reference.Offset == + WalkState->Operands[1]->Reference.Offset)) { Status = AE_OK; } @@ -755,7 +758,8 @@ AcpiDsExecEndOp ( * conditional predicate */ - if ((WalkState->ControlState) && + if ((ACPI_SUCCESS (Status)) && + (WalkState->ControlState) && (WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING) && (WalkState->ControlState->Control.PredicateOp == Op)) @@ -766,6 +770,20 @@ AcpiDsExecEndOp ( Cleanup: + + /* Invoke exception handler on error */ + + if (ACPI_FAILURE (Status) && + AcpiGbl_ExceptionHandler && + !(Status & AE_CODE_CONTROL)) + { + AcpiExExitInterpreter (); + Status = AcpiGbl_ExceptionHandler (Status, + WalkState->MethodNode->Name.Integer, WalkState->Opcode, + WalkState->AmlOffset, NULL); + AcpiExEnterInterpreter (); + } + if (WalkState->ResultObj) { /* Break to debugger to display result */ |