1/******************************************************************************* 2 * 3 * Module Name: dsmthdat - control method arguments and local variables |
4 * $Revision: 77 $ |
5 * 6 ******************************************************************************/ 7 8/****************************************************************************** 9 * 10 * 1. Copyright Notice 11 * |
12 * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp. |
13 * All rights reserved. 14 * 15 * 2. License 16 * 17 * 2.1. This is your license from Intel Corp. under its intellectual property 18 * rights. You may have additional license terms from the party that provided 19 * you this software, covering your right to use that party's intellectual 20 * property rights. --- 259 unchanged lines hidden (view full) --- 280 } 281 282 /* Copy passed parameters into the new method stack frame */ 283 284 while ((Index < ACPI_METHOD_NUM_ARGS) && (Index < MaxParamCount) && Params[Index]) 285 { 286 /* 287 * A valid parameter. |
288 * Store the argument in the method/walk descriptor. 289 * Do not copy the arg in order to implement call by reference |
290 */ |
291 Status = AcpiDsMethodDataSetValue (AML_ARG_OP, Index, Params[Index], WalkState); |
292 if (ACPI_FAILURE (Status)) 293 { 294 return_ACPI_STATUS (Status); 295 } 296 297 Index++; 298 } 299 --- 252 unchanged lines hidden (view full) --- 552 case AML_LOCAL_OP: 553 554 ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Local[%d] at node %p\n", 555 Index, Node)); 556 557 return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL); 558 559 default: |
560 ACPI_REPORT_ERROR (("Not Arg/Local opcode: %X\n", Opcode)); |
561 return_ACPI_STATUS (AE_AML_INTERNAL); 562 } 563 } 564 565 /* 566 * The Index points to an initialized and valid object. 567 * Return an additional reference to the object 568 */ --- 90 unchanged lines hidden (view full) --- 659 UINT32 Index, 660 ACPI_OPERAND_OBJECT *ObjDesc, 661 ACPI_WALK_STATE *WalkState) 662{ 663 ACPI_STATUS Status; 664 ACPI_NAMESPACE_NODE *Node; 665 ACPI_OPERAND_OBJECT *CurrentObjDesc; 666 ACPI_OPERAND_OBJECT *NewObjDesc; |
667 668 669 ACPI_FUNCTION_TRACE ("DsStoreObjectToLocal"); 670 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode=%d Idx=%d Obj=%p\n", 671 Opcode, Index, ObjDesc)); 672 673 /* Parameter validation */ 674 --- 15 unchanged lines hidden (view full) --- 690 { 691 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", 692 ObjDesc)); 693 return_ACPI_STATUS (Status); 694 } 695 696 /* 697 * If the reference count on the object is more than one, we must |
698 * take a copy of the object before we store. A reference count 699 * of exactly 1 means that the object was just created during the 700 * evaluation of an expression, and we can safely use it since it 701 * is not used anywhere else. |
702 */ 703 NewObjDesc = ObjDesc; |
704 if (ObjDesc->Common.ReferenceCount > 1) |
705 { 706 Status = AcpiUtCopyIobjectToIobject (ObjDesc, &NewObjDesc, WalkState); 707 if (ACPI_FAILURE (Status)) 708 { 709 return_ACPI_STATUS (Status); 710 } 711 } 712 --- 91 unchanged lines hidden --- |