diff options
author | njl <njl@FreeBSD.org> | 2003-07-13 22:44:13 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2003-07-13 22:44:13 +0000 |
commit | 148a8cc4ac210f6d3692eb478d20cc64818d274a (patch) | |
tree | dd1a453ab93efa28848b21047ec45d003c6f262e /sys/contrib/dev/acpica/dsmthdat.c | |
parent | 857b9ae7f340e84e806f355c2a19d9cac1ab3faf (diff) | |
download | FreeBSD-src-148a8cc4ac210f6d3692eb478d20cc64818d274a.zip FreeBSD-src-148a8cc4ac210f6d3692eb478d20cc64818d274a.tar.gz |
ACPICA import from the 0619 dist.
Diffstat (limited to 'sys/contrib/dev/acpica/dsmthdat.c')
-rw-r--r-- | sys/contrib/dev/acpica/dsmthdat.c | 40 |
1 files changed, 12 insertions, 28 deletions
diff --git a/sys/contrib/dev/acpica/dsmthdat.c b/sys/contrib/dev/acpica/dsmthdat.c index 61a4fc5..3515957 100644 --- a/sys/contrib/dev/acpica/dsmthdat.c +++ b/sys/contrib/dev/acpica/dsmthdat.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsmthdat - control method arguments and local variables - * $Revision: 69 $ + * $Revision: 71 $ * ******************************************************************************/ @@ -162,8 +162,8 @@ AcpiDsMethodDataInit ( for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) { - ACPI_MOVE_UNALIGNED32_TO_32 (&WalkState->Arguments[i].Name, - NAMEOF_ARG_NTE); + ACPI_MOVE_32_TO_32 (&WalkState->Arguments[i].Name, + NAMEOF_ARG_NTE); WalkState->Arguments[i].Name.Integer |= (i << 24); WalkState->Arguments[i].Descriptor = ACPI_DESC_TYPE_NAMED; WalkState->Arguments[i].Type = ACPI_TYPE_ANY; @@ -174,8 +174,8 @@ AcpiDsMethodDataInit ( for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) { - ACPI_MOVE_UNALIGNED32_TO_32 (&WalkState->LocalVariables[i].Name, - NAMEOF_LOCAL_NTE); + ACPI_MOVE_32_TO_32 (&WalkState->LocalVariables[i].Name, + NAMEOF_LOCAL_NTE); WalkState->LocalVariables[i].Name.Integer |= (i << 24); WalkState->LocalVariables[i].Descriptor = ACPI_DESC_TYPE_NAMED; @@ -392,7 +392,6 @@ AcpiDsMethodDataSetValue ( { ACPI_STATUS Status; ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *NewDesc = Object; ACPI_FUNCTION_TRACE ("DsMethodDataSetValue"); @@ -411,32 +410,17 @@ AcpiDsMethodDataSetValue ( return_ACPI_STATUS (Status); } - /* - * If the object has just been created and is not attached to anything, - * (the reference count is 1), then we can just store it directly into - * the arg/local. Otherwise, we must copy it. + /* + * Increment ref count so object can't be deleted while installed. + * NOTE: We do not copy the object in order to preserve the call by + * reference semantics of ACPI Control Method invocation. + * (See ACPI Specification 2.0C) */ - if (Object->Common.ReferenceCount > 1) - { - Status = AcpiUtCopyIobjectToIobject (Object, &NewDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Object Copied %p, new %p\n", - Object, NewDesc)); - } - else - { - /* Increment ref count so object can't be deleted while installed */ - - AcpiUtAddReference (NewDesc); - } + AcpiUtAddReference (Object); /* Install the object */ - Node->Object = NewDesc; + Node->Object = Object; return_ACPI_STATUS (Status); } |