|
@@ -740,26 +740,38 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
|
|
value = acpi_gbl_integer_byte_width;
|
|
value = acpi_gbl_integer_byte_width;
|
|
break;
|
|
break;
|
|
|
|
|
|
- case ACPI_TYPE_BUFFER:
|
|
|
|
- value = temp_desc->buffer.length;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
case ACPI_TYPE_STRING:
|
|
case ACPI_TYPE_STRING:
|
|
value = temp_desc->string.length;
|
|
value = temp_desc->string.length;
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case ACPI_TYPE_BUFFER:
|
|
|
|
+
|
|
|
|
+ /* Buffer arguments may not be evaluated at this point */
|
|
|
|
+
|
|
|
|
+ status = acpi_ds_get_buffer_arguments(temp_desc);
|
|
|
|
+ value = temp_desc->buffer.length;
|
|
|
|
+ break;
|
|
|
|
+
|
|
case ACPI_TYPE_PACKAGE:
|
|
case ACPI_TYPE_PACKAGE:
|
|
|
|
+
|
|
|
|
+ /* Package arguments may not be evaluated at this point */
|
|
|
|
+
|
|
|
|
+ status = acpi_ds_get_package_arguments(temp_desc);
|
|
value = temp_desc->package.count;
|
|
value = temp_desc->package.count;
|
|
break;
|
|
break;
|
|
|
|
|
|
default:
|
|
default:
|
|
ACPI_ERROR((AE_INFO,
|
|
ACPI_ERROR((AE_INFO,
|
|
- "Operand is not Buf/Int/Str/Pkg - found type %s",
|
|
|
|
|
|
+ "Operand must be Buffer/Integer/String/Package - found type %s",
|
|
acpi_ut_get_type_name(type)));
|
|
acpi_ut_get_type_name(type)));
|
|
status = AE_AML_OPERAND_TYPE;
|
|
status = AE_AML_OPERAND_TYPE;
|
|
goto cleanup;
|
|
goto cleanup;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (ACPI_FAILURE(status)) {
|
|
|
|
+ goto cleanup;
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Now that we have the size of the object, create a result
|
|
* Now that we have the size of the object, create a result
|
|
* object to hold the value
|
|
* object to hold the value
|