utcopy.c (151937) | utcopy.c (167802) |
---|---|
1/****************************************************************************** 2 * 3 * Module Name: utcopy - Internal to external object translation utilities | 1/****************************************************************************** 2 * 3 * Module Name: utcopy - Internal to external object translation utilities |
4 * $Revision: 1.122 $ | 4 * $Revision: 1.130 $ |
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. --- 173 unchanged lines hidden (view full) --- 194 ACPI_OPERAND_OBJECT *InternalObject, 195 ACPI_OBJECT *ExternalObject, 196 UINT8 *DataSpace, 197 ACPI_SIZE *BufferSpaceUsed) 198{ 199 ACPI_STATUS Status = AE_OK; 200 201 | 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. --- 173 unchanged lines hidden (view full) --- 194 ACPI_OPERAND_OBJECT *InternalObject, 195 ACPI_OBJECT *ExternalObject, 196 UINT8 *DataSpace, 197 ACPI_SIZE *BufferSpaceUsed) 198{ 199 ACPI_STATUS Status = AE_OK; 200 201 |
202 ACPI_FUNCTION_TRACE ("UtCopyIsimpleToEsimple"); | 202 ACPI_FUNCTION_TRACE (UtCopyIsimpleToEsimple); |
203 204 205 *BufferSpaceUsed = 0; 206 207 /* 208 * Check for NULL object case (could be an uninitialized 209 * package element) 210 */ --- 209 unchanged lines hidden (view full) --- 420 UINT8 *Buffer, 421 ACPI_SIZE *SpaceUsed) 422{ 423 ACPI_OBJECT *ExternalObject; 424 ACPI_STATUS Status; 425 ACPI_PKG_INFO Info; 426 427 | 203 204 205 *BufferSpaceUsed = 0; 206 207 /* 208 * Check for NULL object case (could be an uninitialized 209 * package element) 210 */ --- 209 unchanged lines hidden (view full) --- 420 UINT8 *Buffer, 421 ACPI_SIZE *SpaceUsed) 422{ 423 ACPI_OBJECT *ExternalObject; 424 ACPI_STATUS Status; 425 ACPI_PKG_INFO Info; 426 427 |
428 ACPI_FUNCTION_TRACE ("UtCopyIpackageToEpackage"); | 428 ACPI_FUNCTION_TRACE (UtCopyIpackageToEpackage); |
429 430 431 /* 432 * First package at head of the buffer 433 */ 434 ExternalObject = ACPI_CAST_PTR (ACPI_OBJECT, Buffer); 435 436 /* --- 44 unchanged lines hidden (view full) --- 481ACPI_STATUS 482AcpiUtCopyIobjectToEobject ( 483 ACPI_OPERAND_OBJECT *InternalObject, 484 ACPI_BUFFER *RetBuffer) 485{ 486 ACPI_STATUS Status; 487 488 | 429 430 431 /* 432 * First package at head of the buffer 433 */ 434 ExternalObject = ACPI_CAST_PTR (ACPI_OBJECT, Buffer); 435 436 /* --- 44 unchanged lines hidden (view full) --- 481ACPI_STATUS 482AcpiUtCopyIobjectToEobject ( 483 ACPI_OPERAND_OBJECT *InternalObject, 484 ACPI_BUFFER *RetBuffer) 485{ 486 ACPI_STATUS Status; 487 488 |
489 ACPI_FUNCTION_TRACE ("UtCopyIobjectToEobject"); | 489 ACPI_FUNCTION_TRACE (UtCopyIobjectToEobject); |
490 491 492 if (ACPI_GET_OBJECT_TYPE (InternalObject) == ACPI_TYPE_PACKAGE) 493 { 494 /* 495 * Package object: Copy all subobjects (including 496 * nested packages) 497 */ 498 Status = AcpiUtCopyIpackageToEpackage (InternalObject, 499 RetBuffer->Pointer, &RetBuffer->Length); 500 } 501 else 502 { 503 /* 504 * Build a simple object (no nested objects) 505 */ 506 Status = AcpiUtCopyIsimpleToEsimple (InternalObject, | 490 491 492 if (ACPI_GET_OBJECT_TYPE (InternalObject) == ACPI_TYPE_PACKAGE) 493 { 494 /* 495 * Package object: Copy all subobjects (including 496 * nested packages) 497 */ 498 Status = AcpiUtCopyIpackageToEpackage (InternalObject, 499 RetBuffer->Pointer, &RetBuffer->Length); 500 } 501 else 502 { 503 /* 504 * Build a simple object (no nested objects) 505 */ 506 Status = AcpiUtCopyIsimpleToEsimple (InternalObject, |
507 (ACPI_OBJECT *) RetBuffer->Pointer, 508 ((UINT8 *) RetBuffer->Pointer + 509 ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT))), | 507 ACPI_CAST_PTR (ACPI_OBJECT, RetBuffer->Pointer), 508 ACPI_ADD_PTR (UINT8, RetBuffer->Pointer, 509 ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT))), |
510 &RetBuffer->Length); 511 /* 512 * build simple does not include the object size in the length 513 * so we add it in here 514 */ 515 RetBuffer->Length += sizeof (ACPI_OBJECT); 516 } 517 --- 20 unchanged lines hidden (view full) --- 538static ACPI_STATUS 539AcpiUtCopyEsimpleToIsimple ( 540 ACPI_OBJECT *ExternalObject, 541 ACPI_OPERAND_OBJECT **RetInternalObject) 542{ 543 ACPI_OPERAND_OBJECT *InternalObject; 544 545 | 510 &RetBuffer->Length); 511 /* 512 * build simple does not include the object size in the length 513 * so we add it in here 514 */ 515 RetBuffer->Length += sizeof (ACPI_OBJECT); 516 } 517 --- 20 unchanged lines hidden (view full) --- 538static ACPI_STATUS 539AcpiUtCopyEsimpleToIsimple ( 540 ACPI_OBJECT *ExternalObject, 541 ACPI_OPERAND_OBJECT **RetInternalObject) 542{ 543 ACPI_OPERAND_OBJECT *InternalObject; 544 545 |
546 ACPI_FUNCTION_TRACE ("UtCopyEsimpleToIsimple"); | 546 ACPI_FUNCTION_TRACE (UtCopyEsimpleToIsimple); |
547 548 549 /* 550 * Simple types supported are: String, Buffer, Integer 551 */ 552 switch (ExternalObject->Type) 553 { 554 case ACPI_TYPE_STRING: --- 17 unchanged lines hidden (view full) --- 572 573 /* Must COPY string and buffer contents */ 574 575 switch (ExternalObject->Type) 576 { 577 case ACPI_TYPE_STRING: 578 579 InternalObject->String.Pointer = | 547 548 549 /* 550 * Simple types supported are: String, Buffer, Integer 551 */ 552 switch (ExternalObject->Type) 553 { 554 case ACPI_TYPE_STRING: --- 17 unchanged lines hidden (view full) --- 572 573 /* Must COPY string and buffer contents */ 574 575 switch (ExternalObject->Type) 576 { 577 case ACPI_TYPE_STRING: 578 579 InternalObject->String.Pointer = |
580 ACPI_MEM_CALLOCATE ((ACPI_SIZE) ExternalObject->String.Length + 1); | 580 ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) ExternalObject->String.Length + 1); |
581 if (!InternalObject->String.Pointer) 582 { 583 goto ErrorExit; 584 } 585 586 ACPI_MEMCPY (InternalObject->String.Pointer, 587 ExternalObject->String.Pointer, 588 ExternalObject->String.Length); 589 590 InternalObject->String.Length = ExternalObject->String.Length; 591 break; 592 593 594 case ACPI_TYPE_BUFFER: 595 596 InternalObject->Buffer.Pointer = | 581 if (!InternalObject->String.Pointer) 582 { 583 goto ErrorExit; 584 } 585 586 ACPI_MEMCPY (InternalObject->String.Pointer, 587 ExternalObject->String.Pointer, 588 ExternalObject->String.Length); 589 590 InternalObject->String.Length = ExternalObject->String.Length; 591 break; 592 593 594 case ACPI_TYPE_BUFFER: 595 596 InternalObject->Buffer.Pointer = |
597 ACPI_MEM_CALLOCATE (ExternalObject->Buffer.Length); | 597 ACPI_ALLOCATE_ZEROED (ExternalObject->Buffer.Length); |
598 if (!InternalObject->Buffer.Pointer) 599 { 600 goto ErrorExit; 601 } 602 603 ACPI_MEMCPY (InternalObject->Buffer.Pointer, 604 ExternalObject->Buffer.Pointer, 605 ExternalObject->Buffer.Length); --- 54 unchanged lines hidden (view full) --- 660 ACPI_OBJECT *ExternalObject; 661 UINT32 Length = 0; 662 UINT32 ThisIndex; 663 UINT32 ObjectSpace = 0; 664 ACPI_OPERAND_OBJECT *ThisInternalObj; 665 ACPI_OBJECT *ThisExternalObj; 666 667 | 598 if (!InternalObject->Buffer.Pointer) 599 { 600 goto ErrorExit; 601 } 602 603 ACPI_MEMCPY (InternalObject->Buffer.Pointer, 604 ExternalObject->Buffer.Pointer, 605 ExternalObject->Buffer.Length); --- 54 unchanged lines hidden (view full) --- 660 ACPI_OBJECT *ExternalObject; 661 UINT32 Length = 0; 662 UINT32 ThisIndex; 663 UINT32 ObjectSpace = 0; 664 ACPI_OPERAND_OBJECT *ThisInternalObj; 665 ACPI_OBJECT *ThisExternalObj; 666 667 |
668 ACPI_FUNCTION_TRACE ("UtCopyEpackageToIpackage"); | 668 ACPI_FUNCTION_TRACE (UtCopyEpackageToIpackage); |
669 670 671 /* 672 * First package at head of the buffer 673 */ 674 ExternalObject = (ACPI_OBJECT *)Buffer; 675 676 /* --- 36 unchanged lines hidden (view full) --- 713ACPI_STATUS 714AcpiUtCopyEobjectToIobject ( 715 ACPI_OBJECT *ExternalObject, 716 ACPI_OPERAND_OBJECT **InternalObject) 717{ 718 ACPI_STATUS Status; 719 720 | 669 670 671 /* 672 * First package at head of the buffer 673 */ 674 ExternalObject = (ACPI_OBJECT *)Buffer; 675 676 /* --- 36 unchanged lines hidden (view full) --- 713ACPI_STATUS 714AcpiUtCopyEobjectToIobject ( 715 ACPI_OBJECT *ExternalObject, 716 ACPI_OPERAND_OBJECT **InternalObject) 717{ 718 ACPI_STATUS Status; 719 720 |
721 ACPI_FUNCTION_TRACE ("UtCopyEobjectToIobject"); | 721 ACPI_FUNCTION_TRACE (UtCopyEobjectToIobject); |
722 723 724 if (ExternalObject->Type == ACPI_TYPE_PACKAGE) 725 { 726 /* 727 * Packages as external input to control methods are not supported, 728 */ | 722 723 724 if (ExternalObject->Type == ACPI_TYPE_PACKAGE) 725 { 726 /* 727 * Packages as external input to control methods are not supported, 728 */ |
729 ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, 730 "Packages as parameters not implemented!\n")); | 729 ACPI_ERROR ((AE_INFO, 730 "Packages as parameters not implemented!")); |
731 732 return_ACPI_STATUS (AE_NOT_IMPLEMENTED); 733 } 734 735 else 736 { 737 /* 738 * Build a simple object (no nested objects) --- 56 unchanged lines hidden (view full) --- 795 * Allocate and copy the actual buffer if and only if: 796 * 1) There is a valid buffer pointer 797 * 2) The buffer has a length > 0 798 */ 799 if ((SourceDesc->Buffer.Pointer) && 800 (SourceDesc->Buffer.Length)) 801 { 802 DestDesc->Buffer.Pointer = | 731 732 return_ACPI_STATUS (AE_NOT_IMPLEMENTED); 733 } 734 735 else 736 { 737 /* 738 * Build a simple object (no nested objects) --- 56 unchanged lines hidden (view full) --- 795 * Allocate and copy the actual buffer if and only if: 796 * 1) There is a valid buffer pointer 797 * 2) The buffer has a length > 0 798 */ 799 if ((SourceDesc->Buffer.Pointer) && 800 (SourceDesc->Buffer.Length)) 801 { 802 DestDesc->Buffer.Pointer = |
803 ACPI_MEM_ALLOCATE (SourceDesc->Buffer.Length); | 803 ACPI_ALLOCATE (SourceDesc->Buffer.Length); |
804 if (!DestDesc->Buffer.Pointer) 805 { 806 return (AE_NO_MEMORY); 807 } 808 809 /* Copy the actual buffer data */ 810 811 ACPI_MEMCPY (DestDesc->Buffer.Pointer, --- 6 unchanged lines hidden (view full) --- 818 /* 819 * Allocate and copy the actual string if and only if: 820 * 1) There is a valid string pointer 821 * (Pointer to a NULL string is allowed) 822 */ 823 if (SourceDesc->String.Pointer) 824 { 825 DestDesc->String.Pointer = | 804 if (!DestDesc->Buffer.Pointer) 805 { 806 return (AE_NO_MEMORY); 807 } 808 809 /* Copy the actual buffer data */ 810 811 ACPI_MEMCPY (DestDesc->Buffer.Pointer, --- 6 unchanged lines hidden (view full) --- 818 /* 819 * Allocate and copy the actual string if and only if: 820 * 1) There is a valid string pointer 821 * (Pointer to a NULL string is allowed) 822 */ 823 if (SourceDesc->String.Pointer) 824 { 825 DestDesc->String.Pointer = |
826 ACPI_MEM_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); | 826 ACPI_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); |
827 if (!DestDesc->String.Pointer) 828 { 829 return (AE_NO_MEMORY); 830 } 831 832 /* Copy the actual string data */ 833 834 ACPI_MEMCPY (DestDesc->String.Pointer, SourceDesc->String.Pointer, --- 4 unchanged lines hidden (view full) --- 839 case ACPI_TYPE_LOCAL_REFERENCE: 840 /* 841 * We copied the reference object, so we now must add a reference 842 * to the object pointed to by the reference 843 */ 844 AcpiUtAddReference (SourceDesc->Reference.Object); 845 break; 846 | 827 if (!DestDesc->String.Pointer) 828 { 829 return (AE_NO_MEMORY); 830 } 831 832 /* Copy the actual string data */ 833 834 ACPI_MEMCPY (DestDesc->String.Pointer, SourceDesc->String.Pointer, --- 4 unchanged lines hidden (view full) --- 839 case ACPI_TYPE_LOCAL_REFERENCE: 840 /* 841 * We copied the reference object, so we now must add a reference 842 * to the object pointed to by the reference 843 */ 844 AcpiUtAddReference (SourceDesc->Reference.Object); 845 break; 846 |
847 case ACPI_TYPE_REGION: 848 /* 849 * We copied the Region Handler, so we now must add a reference 850 */ 851 if (DestDesc->Region.Handler) 852 { 853 AcpiUtAddReference (DestDesc->Region.Handler); 854 } 855 break; 856 |
|
847 default: 848 /* Nothing to do for other simple objects */ 849 break; 850 } 851 852 return (AE_OK); 853} 854 --- 78 unchanged lines hidden (view full) --- 933 } 934 935 TargetObject->Package.Count = SourceObject->Package.Count; 936 TargetObject->Common.Flags = SourceObject->Common.Flags; 937 938 /* 939 * Create the object array 940 */ | 857 default: 858 /* Nothing to do for other simple objects */ 859 break; 860 } 861 862 return (AE_OK); 863} 864 --- 78 unchanged lines hidden (view full) --- 943 } 944 945 TargetObject->Package.Count = SourceObject->Package.Count; 946 TargetObject->Common.Flags = SourceObject->Common.Flags; 947 948 /* 949 * Create the object array 950 */ |
941 TargetObject->Package.Elements = 942 ACPI_MEM_CALLOCATE (((ACPI_SIZE) SourceObject->Package.Count + 1) * 943 sizeof (void *)); | 951 TargetObject->Package.Elements = ACPI_ALLOCATE_ZEROED ( 952 ((ACPI_SIZE) SourceObject->Package.Count + 1) * sizeof (void *)); |
944 if (!TargetObject->Package.Elements) 945 { 946 Status = AE_NO_MEMORY; 947 goto ErrorExit; 948 } 949 950 /* 951 * Pass the new package object back to the package walk routine --- 37 unchanged lines hidden (view full) --- 989AcpiUtCopyIpackageToIpackage ( 990 ACPI_OPERAND_OBJECT *SourceObj, 991 ACPI_OPERAND_OBJECT *DestObj, 992 ACPI_WALK_STATE *WalkState) 993{ 994 ACPI_STATUS Status = AE_OK; 995 996 | 953 if (!TargetObject->Package.Elements) 954 { 955 Status = AE_NO_MEMORY; 956 goto ErrorExit; 957 } 958 959 /* 960 * Pass the new package object back to the package walk routine --- 37 unchanged lines hidden (view full) --- 998AcpiUtCopyIpackageToIpackage ( 999 ACPI_OPERAND_OBJECT *SourceObj, 1000 ACPI_OPERAND_OBJECT *DestObj, 1001 ACPI_WALK_STATE *WalkState) 1002{ 1003 ACPI_STATUS Status = AE_OK; 1004 1005 |
997 ACPI_FUNCTION_TRACE ("UtCopyIpackageToIpackage"); | 1006 ACPI_FUNCTION_TRACE (UtCopyIpackageToIpackage); |
998 999 1000 DestObj->Common.Type = ACPI_GET_OBJECT_TYPE (SourceObj); 1001 DestObj->Common.Flags = SourceObj->Common.Flags; 1002 DestObj->Package.Count = SourceObj->Package.Count; 1003 1004 /* 1005 * Create the object array and walk the source package tree 1006 */ | 1007 1008 1009 DestObj->Common.Type = ACPI_GET_OBJECT_TYPE (SourceObj); 1010 DestObj->Common.Flags = SourceObj->Common.Flags; 1011 DestObj->Package.Count = SourceObj->Package.Count; 1012 1013 /* 1014 * Create the object array and walk the source package tree 1015 */ |
1007 DestObj->Package.Elements = ACPI_MEM_CALLOCATE ( | 1016 DestObj->Package.Elements = ACPI_ALLOCATE_ZEROED ( |
1008 ((ACPI_SIZE) SourceObj->Package.Count + 1) * 1009 sizeof (void *)); 1010 if (!DestObj->Package.Elements) 1011 { | 1017 ((ACPI_SIZE) SourceObj->Package.Count + 1) * 1018 sizeof (void *)); 1019 if (!DestObj->Package.Elements) 1020 { |
1012 ACPI_REPORT_ERROR ( 1013 ("AmlBuildCopyInternalPackageObject: Package allocation failure\n")); | 1021 ACPI_ERROR ((AE_INFO, "Package allocation failure")); |
1014 return_ACPI_STATUS (AE_NO_MEMORY); 1015 } 1016 1017 /* 1018 * Copy the package element-by-element by walking the package "tree". 1019 * This handles nested packages of arbitrary depth. 1020 */ 1021 Status = AcpiUtWalkPackageTree (SourceObj, DestObj, | 1022 return_ACPI_STATUS (AE_NO_MEMORY); 1023 } 1024 1025 /* 1026 * Copy the package element-by-element by walking the package "tree". 1027 * This handles nested packages of arbitrary depth. 1028 */ 1029 Status = AcpiUtWalkPackageTree (SourceObj, DestObj, |
1022 AcpiUtCopyIelementToIelement, WalkState); | 1030 AcpiUtCopyIelementToIelement, WalkState); |
1023 if (ACPI_FAILURE (Status)) 1024 { 1025 /* On failure, delete the destination package object */ 1026 1027 AcpiUtRemoveReference (DestObj); 1028 } 1029 1030 return_ACPI_STATUS (Status); --- 18 unchanged lines hidden (view full) --- 1049AcpiUtCopyIobjectToIobject ( 1050 ACPI_OPERAND_OBJECT *SourceDesc, 1051 ACPI_OPERAND_OBJECT **DestDesc, 1052 ACPI_WALK_STATE *WalkState) 1053{ 1054 ACPI_STATUS Status = AE_OK; 1055 1056 | 1031 if (ACPI_FAILURE (Status)) 1032 { 1033 /* On failure, delete the destination package object */ 1034 1035 AcpiUtRemoveReference (DestObj); 1036 } 1037 1038 return_ACPI_STATUS (Status); --- 18 unchanged lines hidden (view full) --- 1057AcpiUtCopyIobjectToIobject ( 1058 ACPI_OPERAND_OBJECT *SourceDesc, 1059 ACPI_OPERAND_OBJECT **DestDesc, 1060 ACPI_WALK_STATE *WalkState) 1061{ 1062 ACPI_STATUS Status = AE_OK; 1063 1064 |
1057 ACPI_FUNCTION_TRACE ("UtCopyIobjectToIobject"); | 1065 ACPI_FUNCTION_TRACE (UtCopyIobjectToIobject); |
1058 1059 1060 /* Create the top level object */ 1061 1062 *DestDesc = AcpiUtCreateInternalObject (ACPI_GET_OBJECT_TYPE (SourceDesc)); 1063 if (!*DestDesc) 1064 { 1065 return_ACPI_STATUS (AE_NO_MEMORY); --- 18 unchanged lines hidden --- | 1066 1067 1068 /* Create the top level object */ 1069 1070 *DestDesc = AcpiUtCreateInternalObject (ACPI_GET_OBJECT_TYPE (SourceDesc)); 1071 if (!*DestDesc) 1072 { 1073 return_ACPI_STATUS (AE_NO_MEMORY); --- 18 unchanged lines hidden --- |