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