[ACPI] ACPICA 20060210
Removed a couple of extraneous ACPI_ERROR messages that appeared during normal execution. These became apparent after the conversion from ACPI_DEBUG_PRINT. Fixed a problem where the CreateField operator could hang if the BitIndex or NumBits parameter referred to a named object. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5359 Fixed a problem where a DeRefOf operation on a buffer object incorrectly failed with an exception. This also fixes a couple of related RefOf and DeRefOf issues. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5360 http://bugzilla.kernel.org/show_bug.cgi?id=5387 http://bugzilla.kernel.org/show_bug.cgi?id=5392 Fixed a problem where the AE_BUFFER_LIMIT exception was returned instead of AE_STRING_LIMIT on an out-of-bounds Index() operation. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5480 Implemented a memory cleanup at the end of the execution of each iteration of an AML While() loop, preventing the accumulation of outstanding objects. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5427 Eliminated a chunk of duplicate code in the object resolution code. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5336 Fixed several warnings during the 64-bit code generation. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:

zatwierdzone przez
Len Brown

rodzic
46358614ed
commit
52fc0b026e
@@ -78,6 +78,7 @@ static u8 acpi_rs_count_set_bits(u16 bit_field)
|
||||
ACPI_FUNCTION_ENTRY();
|
||||
|
||||
for (bits_set = 0; bit_field; bits_set++) {
|
||||
|
||||
/* Zero the least significant bit that is set */
|
||||
|
||||
bit_field &= (bit_field - 1);
|
||||
@@ -154,6 +155,7 @@ acpi_rs_stream_option_length(u32 resource_length,
|
||||
* length, minus one byte for the resource_source_index itself.
|
||||
*/
|
||||
if (resource_length > minimum_aml_resource_length) {
|
||||
|
||||
/* Compute the length of the optional string */
|
||||
|
||||
string_length =
|
||||
@@ -162,7 +164,7 @@ acpi_rs_stream_option_length(u32 resource_length,
|
||||
|
||||
/* Round up length to 32 bits for internal structure alignment */
|
||||
|
||||
return (ACPI_ROUND_UP_to_32_bITS(string_length));
|
||||
return ((u32) ACPI_ROUND_UP_to_32_bITS(string_length));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@@ -191,6 +193,7 @@ acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
|
||||
/* Traverse entire list of internal resource descriptors */
|
||||
|
||||
while (resource) {
|
||||
|
||||
/* Validate the descriptor type */
|
||||
|
||||
if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
|
||||
@@ -214,6 +217,7 @@ acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed)
|
||||
* is a Large Resource data type.
|
||||
*/
|
||||
if (resource->data.vendor.byte_length > 7) {
|
||||
|
||||
/* Base size of a Large resource descriptor */
|
||||
|
||||
total_size =
|
||||
@@ -346,6 +350,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
/* Walk the list of AML resource descriptors */
|
||||
|
||||
while (aml_buffer < end_aml) {
|
||||
|
||||
/* Validate the Resource Type and Resource Length */
|
||||
|
||||
status = acpi_ut_validate_resource(aml_buffer, &resource_index);
|
||||
@@ -390,7 +395,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
* Vendor Resource:
|
||||
* Ensure a 32-bit boundary for the structure
|
||||
*/
|
||||
extra_struct_bytes =
|
||||
extra_struct_bytes = (u32)
|
||||
ACPI_ROUND_UP_to_32_bITS(resource_length) -
|
||||
resource_length;
|
||||
break;
|
||||
@@ -407,7 +412,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
* Vendor Resource:
|
||||
* Add vendor data and ensure a 32-bit boundary for the structure
|
||||
*/
|
||||
extra_struct_bytes =
|
||||
extra_struct_bytes = (u32)
|
||||
ACPI_ROUND_UP_to_32_bITS(resource_length) -
|
||||
resource_length;
|
||||
break;
|
||||
@@ -431,7 +436,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
*/
|
||||
buffer++;
|
||||
|
||||
extra_struct_bytes =
|
||||
extra_struct_bytes = (u32)
|
||||
/*
|
||||
* Add 4 bytes for each additional interrupt. Note: at
|
||||
* least one interrupt is required and is included in
|
||||
@@ -450,7 +455,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
* Add the size of any optional data (resource_source)
|
||||
* Ensure a 64-bit boundary for the structure
|
||||
*/
|
||||
extra_struct_bytes =
|
||||
extra_struct_bytes = (u32)
|
||||
ACPI_ROUND_UP_to_64_bITS
|
||||
(acpi_rs_stream_option_length
|
||||
(resource_length, minimum_aml_resource_length));
|
||||
@@ -525,6 +530,7 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
||||
top_object_list = package_object->package.elements;
|
||||
|
||||
for (index = 0; index < number_of_elements; index++) {
|
||||
|
||||
/* Dereference the sub-package */
|
||||
|
||||
package_element = *top_object_list;
|
||||
|
@@ -77,6 +77,7 @@ acpi_rs_convert_aml_to_resources(u8 * aml, u32 aml_length, u8 * output_buffer)
|
||||
/* Loop until end-of-buffer or an end_tag is found */
|
||||
|
||||
while (aml < end_aml) {
|
||||
|
||||
/* Validate the Resource Type and Resource Length */
|
||||
|
||||
status = acpi_ut_validate_resource(aml, &resource_index);
|
||||
@@ -155,6 +156,7 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
|
||||
/* Walk the resource descriptor list, convert each descriptor */
|
||||
|
||||
while (aml < end_aml) {
|
||||
|
||||
/* Validate the (internal) Resource Type */
|
||||
|
||||
if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
|
||||
@@ -191,6 +193,7 @@ acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
|
||||
/* Check for end-of-list, normal exit */
|
||||
|
||||
if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) {
|
||||
|
||||
/* An End Tag indicates the end of the input Resource Template */
|
||||
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
|
@@ -84,6 +84,7 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
|
||||
ACPI_FUNCTION_TRACE("rs_get_resource");
|
||||
|
||||
if (((acpi_native_uint) resource) & 0x3) {
|
||||
|
||||
/* Each internal resource struct is expected to be 32-bit aligned */
|
||||
|
||||
ACPI_WARNING((AE_INFO,
|
||||
@@ -295,9 +296,11 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
|
||||
|
||||
exit:
|
||||
if (!flags_mode) {
|
||||
|
||||
/* Round the resource struct length up to the next 32-bit boundary */
|
||||
|
||||
resource->length = ACPI_ROUND_UP_to_32_bITS(resource->length);
|
||||
resource->length =
|
||||
(u32) ACPI_ROUND_UP_to_32_bITS(resource->length);
|
||||
}
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
@@ -535,6 +538,7 @@ if (((aml->irq.flags & 0x09) == 0x00) || ((aml->irq.flags & 0x09) == 0x09)) {
|
||||
|
||||
resource->data.extended_irq.interrupt_count = temp8;
|
||||
if (temp8 < 1) {
|
||||
|
||||
/* Must have at least one IRQ */
|
||||
|
||||
return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
|
||||
|
@@ -205,6 +205,7 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
|
||||
/* Length is stored differently for large and small descriptors */
|
||||
|
||||
if (aml->small_header.descriptor_type & ACPI_RESOURCE_NAME_LARGE) {
|
||||
|
||||
/* Large descriptor -- bytes 1-2 contain the 16-bit length */
|
||||
|
||||
ACPI_MOVE_16_TO_16(&aml->large_header.resource_length,
|
||||
@@ -328,6 +329,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
* we add 1 to the minimum length.
|
||||
*/
|
||||
if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) {
|
||||
|
||||
/* Get the resource_source_index */
|
||||
|
||||
resource_source->index = aml_resource_source[0];
|
||||
@@ -351,16 +353,20 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
* Zero the entire area of the buffer.
|
||||
*/
|
||||
total_length =
|
||||
(u32)
|
||||
ACPI_ROUND_UP_to_32_bITS(ACPI_STRLEN
|
||||
((char *)&aml_resource_source[1]) +
|
||||
1);
|
||||
(ACPI_CAST_PTR
|
||||
(char,
|
||||
&aml_resource_source[1])) + 1);
|
||||
|
||||
ACPI_MEMSET(resource_source->string_ptr, 0, total_length);
|
||||
|
||||
/* Copy the resource_source string to the destination */
|
||||
|
||||
resource_source->string_length =
|
||||
acpi_rs_strcpy(resource_source->string_ptr,
|
||||
(char *)&aml_resource_source[1]);
|
||||
ACPI_CAST_PTR(char,
|
||||
&aml_resource_source[1]));
|
||||
|
||||
return ((acpi_rs_length) total_length);
|
||||
}
|
||||
@@ -405,6 +411,7 @@ acpi_rs_set_resource_source(union aml_resource * aml,
|
||||
/* Non-zero string length indicates presence of a resource_source */
|
||||
|
||||
if (resource_source->string_length) {
|
||||
|
||||
/* Point to the end of the AML descriptor */
|
||||
|
||||
aml_resource_source = ACPI_ADD_PTR(u8, aml, minimum_length);
|
||||
@@ -415,7 +422,7 @@ acpi_rs_set_resource_source(union aml_resource * aml,
|
||||
|
||||
/* Copy the resource_source string */
|
||||
|
||||
ACPI_STRCPY((char *)&aml_resource_source[1],
|
||||
ACPI_STRCPY(ACPI_CAST_PTR(char, &aml_resource_source[1]),
|
||||
resource_source->string_ptr);
|
||||
|
||||
/*
|
||||
@@ -435,9 +442,9 @@ acpi_rs_set_resource_source(union aml_resource * aml,
|
||||
*
|
||||
* FUNCTION: acpi_rs_get_prt_method_data
|
||||
*
|
||||
* PARAMETERS: Handle - a handle to the containing object
|
||||
* ret_buffer - a pointer to a buffer structure for the
|
||||
* results
|
||||
* PARAMETERS: Handle - Handle to the containing object
|
||||
* ret_buffer - Pointer to a buffer structure for the
|
||||
* results
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -483,9 +490,9 @@ acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer * ret_buffer)
|
||||
*
|
||||
* FUNCTION: acpi_rs_get_crs_method_data
|
||||
*
|
||||
* PARAMETERS: Handle - a handle to the containing object
|
||||
* ret_buffer - a pointer to a buffer structure for the
|
||||
* results
|
||||
* PARAMETERS: Handle - Handle to the containing object
|
||||
* ret_buffer - Pointer to a buffer structure for the
|
||||
* results
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -532,9 +539,9 @@ acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
|
||||
*
|
||||
* FUNCTION: acpi_rs_get_prs_method_data
|
||||
*
|
||||
* PARAMETERS: Handle - a handle to the containing object
|
||||
* ret_buffer - a pointer to a buffer structure for the
|
||||
* results
|
||||
* PARAMETERS: Handle - Handle to the containing object
|
||||
* ret_buffer - Pointer to a buffer structure for the
|
||||
* results
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -583,10 +590,10 @@ acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
|
||||
*
|
||||
* FUNCTION: acpi_rs_get_method_data
|
||||
*
|
||||
* PARAMETERS: Handle - a handle to the containing object
|
||||
* PARAMETERS: Handle - Handle to the containing object
|
||||
* Path - Path to method, relative to Handle
|
||||
* ret_buffer - a pointer to a buffer structure for the
|
||||
* results
|
||||
* ret_buffer - Pointer to a buffer structure for the
|
||||
* results
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -634,9 +641,9 @@ acpi_rs_get_method_data(acpi_handle handle,
|
||||
*
|
||||
* FUNCTION: acpi_rs_set_srs_method_data
|
||||
*
|
||||
* PARAMETERS: Handle - a handle to the containing object
|
||||
* in_buffer - a pointer to a buffer structure of the
|
||||
* parameter
|
||||
* PARAMETERS: Handle - Handle to the containing object
|
||||
* in_buffer - Pointer to a buffer structure of the
|
||||
* parameter
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
@@ -696,6 +703,7 @@ acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *in_buffer)
|
||||
|
||||
status = acpi_ns_evaluate_relative(METHOD_NAME__SRS, &info);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
|
||||
/* Delete any return object (especially if implicit_return is enabled) */
|
||||
|
||||
if (info.return_object) {
|
||||
|
@@ -279,6 +279,7 @@ acpi_walk_resources(acpi_handle device_handle,
|
||||
/* Walk the resource list until the end_tag is found (or buffer end) */
|
||||
|
||||
while (resource < resource_end) {
|
||||
|
||||
/* Sanity check the resource */
|
||||
|
||||
if (resource->type > ACPI_RESOURCE_TYPE_MAX) {
|
||||
@@ -291,6 +292,7 @@ acpi_walk_resources(acpi_handle device_handle,
|
||||
status = user_function(resource, context);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status == AE_CTRL_TERMINATE) {
|
||||
|
||||
/* This is an OK termination by the user function */
|
||||
|
||||
status = AE_OK;
|
||||
|
Reference in New Issue
Block a user