diff options
Diffstat (limited to 'drivers/acpi/executer/exoparg1.c')
| -rw-r--r-- | drivers/acpi/executer/exoparg1.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/acpi/executer/exoparg1.c b/drivers/acpi/executer/exoparg1.c index 252f10acbbcc..7c3bea575e02 100644 --- a/drivers/acpi/executer/exoparg1.c +++ b/drivers/acpi/executer/exoparg1.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2007, R. Byron Moore | 9 | * Copyright (C) 2000 - 2008, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
| @@ -121,6 +121,7 @@ acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 121 | 121 | ||
| 122 | if ((ACPI_FAILURE(status)) || walk_state->result_obj) { | 122 | if ((ACPI_FAILURE(status)) || walk_state->result_obj) { |
| 123 | acpi_ut_remove_reference(return_desc); | 123 | acpi_ut_remove_reference(return_desc); |
| 124 | walk_state->result_obj = NULL; | ||
| 124 | } else { | 125 | } else { |
| 125 | /* Save the return value */ | 126 | /* Save the return value */ |
| 126 | 127 | ||
| @@ -739,26 +740,38 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 739 | value = acpi_gbl_integer_byte_width; | 740 | value = acpi_gbl_integer_byte_width; |
| 740 | break; | 741 | break; |
| 741 | 742 | ||
| 742 | case ACPI_TYPE_BUFFER: | ||
| 743 | value = temp_desc->buffer.length; | ||
| 744 | break; | ||
| 745 | |||
| 746 | case ACPI_TYPE_STRING: | 743 | case ACPI_TYPE_STRING: |
| 747 | value = temp_desc->string.length; | 744 | value = temp_desc->string.length; |
| 748 | break; | 745 | break; |
| 749 | 746 | ||
| 747 | case ACPI_TYPE_BUFFER: | ||
| 748 | |||
| 749 | /* Buffer arguments may not be evaluated at this point */ | ||
| 750 | |||
| 751 | status = acpi_ds_get_buffer_arguments(temp_desc); | ||
| 752 | value = temp_desc->buffer.length; | ||
| 753 | break; | ||
| 754 | |||
| 750 | case ACPI_TYPE_PACKAGE: | 755 | case ACPI_TYPE_PACKAGE: |
| 756 | |||
| 757 | /* Package arguments may not be evaluated at this point */ | ||
| 758 | |||
| 759 | status = acpi_ds_get_package_arguments(temp_desc); | ||
| 751 | value = temp_desc->package.count; | 760 | value = temp_desc->package.count; |
| 752 | break; | 761 | break; |
| 753 | 762 | ||
| 754 | default: | 763 | default: |
| 755 | ACPI_ERROR((AE_INFO, | 764 | ACPI_ERROR((AE_INFO, |
| 756 | "Operand is not Buf/Int/Str/Pkg - found type %s", | 765 | "Operand must be Buffer/Integer/String/Package - found type %s", |
| 757 | acpi_ut_get_type_name(type))); | 766 | acpi_ut_get_type_name(type))); |
| 758 | status = AE_AML_OPERAND_TYPE; | 767 | status = AE_AML_OPERAND_TYPE; |
| 759 | goto cleanup; | 768 | goto cleanup; |
| 760 | } | 769 | } |
| 761 | 770 | ||
| 771 | if (ACPI_FAILURE(status)) { | ||
| 772 | goto cleanup; | ||
| 773 | } | ||
| 774 | |||
| 762 | /* | 775 | /* |
| 763 | * Now that we have the size of the object, create a result | 776 | * Now that we have the size of the object, create a result |
| 764 | * object to hold the value | 777 | * object to hold the value |
