Deleted Added
full compact
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 ---