1/******************************************************************************* 2 * 3 * Module Name: dsmthdat - control method arguments and local variables |
4 * $Revision: 1.92 $ |
5 * 6 ******************************************************************************/ 7 8/****************************************************************************** 9 * 10 * 1. Copyright Notice 11 * |
12 * Some or all of this work - Copyright (c) 1999 - 2007, 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. --- 138 unchanged lines hidden (view full) --- 159 * RETURN: Status 160 * 161 * DESCRIPTION: Initialize the data structures that hold the method's arguments 162 * and locals. The data struct is an array of namespace nodes for 163 * each - this allows RefOf and DeRefOf to work properly for these 164 * special data types. 165 * 166 * NOTES: WalkState fields are initialized to zero by the |
167 * ACPI_ALLOCATE_ZEROED(). |
168 * 169 * A pseudo-Namespace Node is assigned to each argument and local 170 * so that RefOf() can return a pointer to the Node. 171 * 172 ******************************************************************************/ 173 174void 175AcpiDsMethodDataInit ( 176 ACPI_WALK_STATE *WalkState) 177{ 178 UINT32 i; 179 180 |
181 ACPI_FUNCTION_TRACE (DsMethodDataInit); |
182 183 184 /* Init the method arguments */ 185 186 for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) 187 { |
188 ACPI_MOVE_32_TO_32 (&WalkState->Arguments[i].Name, NAMEOF_ARG_NTE); |
189 WalkState->Arguments[i].Name.Integer |= (i << 24); |
190 WalkState->Arguments[i].DescriptorType = ACPI_DESC_TYPE_NAMED; 191 WalkState->Arguments[i].Type = ACPI_TYPE_ANY; 192 WalkState->Arguments[i].Flags = 193 ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG; |
194 } 195 196 /* Init the method locals */ 197 198 for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) 199 { |
200 ACPI_MOVE_32_TO_32 (&WalkState->LocalVariables[i].Name, NAMEOF_LOCAL_NTE); |
201 202 WalkState->LocalVariables[i].Name.Integer |= (i << 24); |
203 WalkState->LocalVariables[i].DescriptorType = ACPI_DESC_TYPE_NAMED; 204 WalkState->LocalVariables[i].Type = ACPI_TYPE_ANY; 205 WalkState->LocalVariables[i].Flags = 206 ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL; |
207 } 208 209 return_VOID; 210} 211 212 213/******************************************************************************* 214 * --- 10 unchanged lines hidden (view full) --- 225 226void 227AcpiDsMethodDataDeleteAll ( 228 ACPI_WALK_STATE *WalkState) 229{ 230 UINT32 Index; 231 232 |
233 ACPI_FUNCTION_TRACE (DsMethodDataDeleteAll); |
234 235 236 /* Detach the locals */ 237 238 for (Index = 0; Index < ACPI_METHOD_NUM_LOCALS; Index++) 239 { 240 if (WalkState->LocalVariables[Index].Object) 241 { --- 46 unchanged lines hidden (view full) --- 288 ACPI_OPERAND_OBJECT **Params, 289 UINT32 MaxParamCount, 290 ACPI_WALK_STATE *WalkState) 291{ 292 ACPI_STATUS Status; 293 UINT32 Index = 0; 294 295 |
296 ACPI_FUNCTION_TRACE_PTR (DsMethodDataInitArgs, Params); |
297 298 299 if (!Params) 300 { 301 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "No param list passed to method\n")); 302 return_ACPI_STATUS (AE_OK); 303 } 304 --- 40 unchanged lines hidden (view full) --- 345 346ACPI_STATUS 347AcpiDsMethodDataGetNode ( 348 UINT16 Opcode, 349 UINT32 Index, 350 ACPI_WALK_STATE *WalkState, 351 ACPI_NAMESPACE_NODE **Node) 352{ |
353 ACPI_FUNCTION_TRACE (DsMethodDataGetNode); |
354 355 356 /* 357 * Method Locals and Arguments are supported 358 */ 359 switch (Opcode) 360 { 361 case AML_LOCAL_OP: 362 363 if (Index > ACPI_METHOD_MAX_LOCAL) 364 { |
365 ACPI_ERROR ((AE_INFO, 366 "Local index %d is invalid (max %d)", |
367 Index, ACPI_METHOD_MAX_LOCAL)); 368 return_ACPI_STATUS (AE_AML_INVALID_INDEX); 369 } 370 371 /* Return a pointer to the pseudo-node */ 372 373 *Node = &WalkState->LocalVariables[Index]; 374 break; 375 376 case AML_ARG_OP: 377 378 if (Index > ACPI_METHOD_MAX_ARG) 379 { |
380 ACPI_ERROR ((AE_INFO, 381 "Arg index %d is invalid (max %d)", |
382 Index, ACPI_METHOD_MAX_ARG)); 383 return_ACPI_STATUS (AE_AML_INVALID_INDEX); 384 } 385 386 /* Return a pointer to the pseudo-node */ 387 388 *Node = &WalkState->Arguments[Index]; 389 break; 390 391 default: |
392 ACPI_ERROR ((AE_INFO, "Opcode %d is invalid", Opcode)); |
393 return_ACPI_STATUS (AE_AML_BAD_OPCODE); 394 } 395 396 return_ACPI_STATUS (AE_OK); 397} 398 399 400/******************************************************************************* --- 18 unchanged lines hidden (view full) --- 419 UINT32 Index, 420 ACPI_OPERAND_OBJECT *Object, 421 ACPI_WALK_STATE *WalkState) 422{ 423 ACPI_STATUS Status; 424 ACPI_NAMESPACE_NODE *Node; 425 426 |
427 ACPI_FUNCTION_TRACE (DsMethodDataSetValue); |
428 429 430 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 431 "NewObj %p Opcode %X, Refs=%d [%s]\n", Object, 432 Opcode, Object->Common.ReferenceCount, 433 AcpiUtGetTypeName (Object->Common.Type))); 434 435 /* Get the namespace node for the arg/local */ --- 42 unchanged lines hidden (view full) --- 478 ACPI_WALK_STATE *WalkState, 479 ACPI_OPERAND_OBJECT **DestDesc) 480{ 481 ACPI_STATUS Status; 482 ACPI_NAMESPACE_NODE *Node; 483 ACPI_OPERAND_OBJECT *Object; 484 485 |
486 ACPI_FUNCTION_TRACE (DsMethodDataGetValue); |
487 488 489 /* Validate the object descriptor */ 490 491 if (!DestDesc) 492 { |
493 ACPI_ERROR ((AE_INFO, "Null object descriptor pointer")); |
494 return_ACPI_STATUS (AE_BAD_PARAMETER); 495 } 496 497 /* Get the namespace node for the arg/local */ 498 499 Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node); 500 if (ACPI_FAILURE (Status)) 501 { --- 31 unchanged lines hidden (view full) --- 533 } 534 535 /* Otherwise, return the error */ 536 537 else switch (Opcode) 538 { 539 case AML_ARG_OP: 540 |
541 ACPI_ERROR ((AE_INFO, 542 "Uninitialized Arg[%d] at node %p", |
543 Index, Node)); 544 545 return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG); 546 547 case AML_LOCAL_OP: 548 |
549 ACPI_ERROR ((AE_INFO, 550 "Uninitialized Local[%d] at node %p", |
551 Index, Node)); 552 553 return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL); 554 555 default: |
556 ACPI_ERROR ((AE_INFO, "Not a Arg/Local opcode: %X", Opcode)); |
557 return_ACPI_STATUS (AE_AML_INTERNAL); 558 } 559 } 560 561 /* 562 * The Index points to an initialized and valid object. 563 * Return an additional reference to the object 564 */ --- 25 unchanged lines hidden (view full) --- 590 UINT32 Index, 591 ACPI_WALK_STATE *WalkState) 592{ 593 ACPI_STATUS Status; 594 ACPI_NAMESPACE_NODE *Node; 595 ACPI_OPERAND_OBJECT *Object; 596 597 |
598 ACPI_FUNCTION_TRACE (DsMethodDataDeleteValue); |
599 600 601 /* Get the namespace node for the arg/local */ 602 603 Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node); 604 if (ACPI_FAILURE (Status)) 605 { 606 return_VOID; --- 50 unchanged lines hidden (view full) --- 657 ACPI_WALK_STATE *WalkState) 658{ 659 ACPI_STATUS Status; 660 ACPI_NAMESPACE_NODE *Node; 661 ACPI_OPERAND_OBJECT *CurrentObjDesc; 662 ACPI_OPERAND_OBJECT *NewObjDesc; 663 664 |
665 ACPI_FUNCTION_TRACE (DsStoreObjectToLocal); |
666 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode=%X Index=%d Obj=%p\n", 667 Opcode, Index, ObjDesc)); 668 669 /* Parameter validation */ 670 671 if (!ObjDesc) 672 { 673 return_ACPI_STATUS (AE_BAD_PARAMETER); --- 135 unchanged lines hidden (view full) --- 809 UINT32 Index, 810 ACPI_WALK_STATE *WalkState) 811{ 812 ACPI_STATUS Status; 813 ACPI_NAMESPACE_NODE *Node; 814 ACPI_OPERAND_OBJECT *Object; 815 816 |
817 ACPI_FUNCTION_TRACE (DsMethodDataGetType); |
818 819 820 /* Get the namespace node for the arg/local */ 821 822 Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node); 823 if (ACPI_FAILURE (Status)) 824 { 825 return_VALUE ((ACPI_TYPE_NOT_FOUND)); --- 19 unchanged lines hidden --- |