diff options
Diffstat (limited to 'sys/contrib/dev/acpica/dsopcode.c')
-rw-r--r-- | sys/contrib/dev/acpica/dsopcode.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/sys/contrib/dev/acpica/dsopcode.c b/sys/contrib/dev/acpica/dsopcode.c index b3d63c111a93..086f5c28ea36 100644 --- a/sys/contrib/dev/acpica/dsopcode.c +++ b/sys/contrib/dev/acpica/dsopcode.c @@ -2,7 +2,7 @@ * * Module Name: dsopcode - Dispatcher Op Region support and handling of * "control" opcodes - * $Revision: 21 $ + * $Revision: 25 $ * *****************************************************************************/ @@ -728,26 +728,41 @@ AcpiDsEvalRegionOperands ( return_ACPI_STATUS (Status); } + /* Resolve the length and address operands to numbers */ + + Status = AcpiAmlResolveOperands (Op->Opcode, WALK_OPERANDS, WalkState); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } + + DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE, + AcpiPsGetOpcodeName (Op->Opcode), + 1, "after AcpiAmlResolveOperands"); + + ObjDesc = AcpiNsGetAttachedObject (Node); if (!ObjDesc) { return_ACPI_STATUS (AE_NOT_EXIST); } - /* Get the length and save it */ - - /* Top of stack */ + /* + * Get the length operand and save it + * (at Top of stack) + */ OperandDesc = WalkState->Operands[WalkState->NumOperands - 1]; ObjDesc->Region.Length = (UINT32) OperandDesc->Number.Value; AcpiCmRemoveReference (OperandDesc); - /* Get the address and save it */ - - /* Top of stack - 1 */ + /* + * Get the address and save it + * (at top of stack - 1) + */ OperandDesc = WalkState->Operands[WalkState->NumOperands - 2]; - ObjDesc->Region.Address = OperandDesc->Number.Value; + ObjDesc->Region.Address = (ACPI_PHYSICAL_ADDRESS) OperandDesc->Number.Value; AcpiCmRemoveReference (OperandDesc); |