From 8ceeabba59040edd6358a88e4d5488433a318905 Mon Sep 17 00:00:00 2001 From: Zhao Yakui Date: Tue, 12 Aug 2008 10:40:10 +0800 Subject: [PATCH] --- yaml --- r: 108499 b: refs/heads/master c: 2500822bf4eb0179ef80e5b072c1e0fa83037381 h: refs/heads/master i: 108497: a6fc3a17f8a7b1343b6b9901c0912da29725abcc 108495: ee1b0294069453e77d659d518bc3f4d6e49a116c v: v3 --- [refs] | 2 +- trunk/drivers/acpi/ec.c | 34 +++++++++++++++++++++++++ trunk/drivers/acpi/executer/exconfig.c | 3 --- trunk/drivers/acpi/namespace/nsnames.c | 34 +++++++++---------------- trunk/drivers/acpi/resources/rscalc.c | 3 --- trunk/drivers/acpi/utilities/utalloc.c | 8 +++--- trunk/drivers/acpi/utilities/utdelete.c | 13 ++-------- trunk/drivers/acpi/utilities/utobject.c | 13 +++------- trunk/include/acpi/acnamesp.h | 2 +- 9 files changed, 57 insertions(+), 55 deletions(-) diff --git a/[refs] b/[refs] index 7f3406b712ba..ae19bef878b3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3c7db22a194d3b53584047425af82b4e1e03d9f7 +refs/heads/master: 2500822bf4eb0179ef80e5b072c1e0fa83037381 diff --git a/trunk/drivers/acpi/ec.c b/trunk/drivers/acpi/ec.c index 5622aee996b2..76784ae7e6a1 100644 --- a/trunk/drivers/acpi/ec.c +++ b/trunk/drivers/acpi/ec.c @@ -110,6 +110,31 @@ static struct acpi_ec { u8 handlers_installed; } *boot_ec, *first_ec; +/* + * Some Asus system have exchanged ECDT data/command IO addresses. + */ +static int print_ecdt_error(const struct dmi_system_id *id) +{ + printk(KERN_NOTICE PREFIX "%s detected - " + "ECDT has exchanged control/data I/O address\n", + id->ident); + return 0; +} + +static struct dmi_system_id __cpuinitdata ec_dmi_table[] = { + { + print_ecdt_error, "Asus L4R", { + DMI_MATCH(DMI_BIOS_VERSION, "1008.006"), + DMI_MATCH(DMI_PRODUCT_NAME, "L4R"), + DMI_MATCH(DMI_BOARD_NAME, "L4R") }, NULL}, + { + print_ecdt_error, "Asus M6R", { + DMI_MATCH(DMI_BIOS_VERSION, "0207"), + DMI_MATCH(DMI_PRODUCT_NAME, "M6R"), + DMI_MATCH(DMI_BOARD_NAME, "M6R") }, NULL}, + {}, +}; + /* -------------------------------------------------------------------------- Transaction Management -------------------------------------------------------------------------- */ @@ -911,6 +936,15 @@ int __init acpi_ec_ecdt_probe(void) pr_info(PREFIX "EC description table is found, configuring boot EC\n"); boot_ec->command_addr = ecdt_ptr->control.address; boot_ec->data_addr = ecdt_ptr->data.address; + if (dmi_check_system(ec_dmi_table)) { + /* + * If the board falls into ec_dmi_table, it means + * that ECDT table gives the incorrect command/status + * & data I/O address. Just fix it. + */ + boot_ec->data_addr = ecdt_ptr->control.address; + boot_ec->command_addr = ecdt_ptr->data.address; + } boot_ec->gpe = ecdt_ptr->gpe; boot_ec->handle = ACPI_ROOT_OBJECT; acpi_get_handle(ACPI_ROOT_OBJECT, ecdt_ptr->id, &boot_ec->handle); diff --git a/trunk/drivers/acpi/executer/exconfig.c b/trunk/drivers/acpi/executer/exconfig.c index 8892b9824fae..2a32c843cb4a 100644 --- a/trunk/drivers/acpi/executer/exconfig.c +++ b/trunk/drivers/acpi/executer/exconfig.c @@ -479,8 +479,5 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle) acpi_tb_set_table_loaded_flag(table_index, FALSE); - /* Table unloaded, remove a reference to the ddb_handle object */ - - acpi_ut_remove_reference(ddb_handle); return_ACPI_STATUS(AE_OK); } diff --git a/trunk/drivers/acpi/namespace/nsnames.c b/trunk/drivers/acpi/namespace/nsnames.c index bd5773878009..549db42f16cf 100644 --- a/trunk/drivers/acpi/namespace/nsnames.c +++ b/trunk/drivers/acpi/namespace/nsnames.c @@ -56,14 +56,13 @@ ACPI_MODULE_NAME("nsnames") * Size - Size of the pathname * *name_buffer - Where to return the pathname * - * RETURN: Status - * Places the pathname into the name_buffer, in external format + * RETURN: Places the pathname into the name_buffer, in external format * (name segments separated by path separators) * * DESCRIPTION: Generate a full pathaname * ******************************************************************************/ -acpi_status +void acpi_ns_build_external_path(struct acpi_namespace_node *node, acpi_size size, char *name_buffer) { @@ -78,7 +77,7 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node, if (index < ACPI_NAME_SIZE) { name_buffer[0] = AML_ROOT_PREFIX; name_buffer[1] = 0; - return (AE_OK); + return; } /* Store terminator byte, then build name backwards */ @@ -106,13 +105,11 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node, if (index != 0) { ACPI_ERROR((AE_INFO, - "Could not construct external pathname; index=%X, size=%X, Path=%s", + "Could not construct pathname; index=%X, size=%X, Path=%s", (u32) index, (u32) size, &name_buffer[size])); - - return (AE_BAD_PARAMETER); } - return (AE_OK); + return; } #ifdef ACPI_DEBUG_OUTPUT @@ -132,7 +129,6 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node, char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) { - acpi_status status; char *name_buffer; acpi_size size; @@ -142,7 +138,8 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) size = acpi_ns_get_pathname_length(node); if (!size) { - return (NULL); + ACPI_ERROR((AE_INFO, "Invalid node failure")); + return_PTR(NULL); } /* Allocate a buffer to be returned to caller */ @@ -155,11 +152,7 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) /* Build the path in the allocated buffer */ - status = acpi_ns_build_external_path(node, size, name_buffer); - if (ACPI_FAILURE(status)) { - return (NULL); - } - + acpi_ns_build_external_path(node, size, name_buffer); return_PTR(name_buffer); } #endif @@ -193,7 +186,7 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node) while (next_node && (next_node != acpi_gbl_root_node)) { if (ACPI_GET_DESCRIPTOR_TYPE(next_node) != ACPI_DESC_TYPE_NAMED) { ACPI_ERROR((AE_INFO, - "Invalid Namespace Node (%p) while traversing namespace", + "Invalid NS Node (%p) while traversing path", next_node)); return 0; } @@ -241,7 +234,8 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle, required_size = acpi_ns_get_pathname_length(node); if (!required_size) { - return_ACPI_STATUS(AE_BAD_PARAMETER); + ACPI_ERROR((AE_INFO, "Invalid node failure")); + return_ACPI_STATUS(AE_ERROR); } /* Validate/Allocate/Clear caller buffer */ @@ -253,11 +247,7 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle, /* Build the path in the caller buffer */ - status = - acpi_ns_build_external_path(node, required_size, buffer->pointer); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } + acpi_ns_build_external_path(node, required_size, buffer->pointer); ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X]\n", (char *)buffer->pointer, (u32) required_size)); diff --git a/trunk/drivers/acpi/resources/rscalc.c b/trunk/drivers/acpi/resources/rscalc.c index d9063ea414e3..f61ebc679e66 100644 --- a/trunk/drivers/acpi/resources/rscalc.c +++ b/trunk/drivers/acpi/resources/rscalc.c @@ -587,9 +587,6 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object, } else { temp_size_needed += acpi_ns_get_pathname_length((*sub_object_list)->reference.node); - if (!temp_size_needed) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } } } else { /* diff --git a/trunk/drivers/acpi/utilities/utalloc.c b/trunk/drivers/acpi/utilities/utalloc.c index 7dcb67e0b215..e7bf34a7b1d2 100644 --- a/trunk/drivers/acpi/utilities/utalloc.c +++ b/trunk/drivers/acpi/utilities/utalloc.c @@ -242,12 +242,10 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer, { acpi_status status = AE_OK; - /* Parameter validation */ - - if (!buffer || !required_length) { - return (AE_BAD_PARAMETER); + if (!required_length) { + WARN_ON(1); + return AE_ERROR; } - switch (buffer->length) { case ACPI_NO_BUFFER: diff --git a/trunk/drivers/acpi/utilities/utdelete.c b/trunk/drivers/acpi/utilities/utdelete.c index 42609d3a8aa9..c5c791a575c9 100644 --- a/trunk/drivers/acpi/utilities/utdelete.c +++ b/trunk/drivers/acpi/utilities/utdelete.c @@ -135,10 +135,6 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) obj_pointer = object->package.elements; break; - /* - * These objects have a possible list of notify handlers. - * Device object also may have a GPE block. - */ case ACPI_TYPE_DEVICE: if (object->device.gpe_block) { @@ -146,14 +142,9 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) gpe_block); } - /*lint -fallthrough */ - - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - - /* Walk the notify handler list for this object */ + /* Walk the handler list for this device */ - handler_desc = object->common_notify.handler; + handler_desc = object->device.handler; while (handler_desc) { next_desc = handler_desc->address_space.next; acpi_ut_remove_reference(handler_desc); diff --git a/trunk/drivers/acpi/utilities/utobject.c b/trunk/drivers/acpi/utilities/utobject.c index 916eff399eb3..e25484495e65 100644 --- a/trunk/drivers/acpi/utilities/utobject.c +++ b/trunk/drivers/acpi/utilities/utobject.c @@ -425,7 +425,6 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, acpi_size * obj_length) { acpi_size length; - acpi_size size; acpi_status status = AE_OK; ACPI_FUNCTION_TRACE_PTR(ut_get_simple_object_size, internal_object); @@ -485,14 +484,10 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, * Get the actual length of the full pathname to this object. * The reference will be converted to the pathname to the object */ - size = - acpi_ns_get_pathname_length(internal_object-> - reference.node); - if (!size) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - length += ACPI_ROUND_UP_TO_NATIVE_WORD(size); + length += + ACPI_ROUND_UP_TO_NATIVE_WORD + (acpi_ns_get_pathname_length + (internal_object->reference.node)); break; default: diff --git a/trunk/include/acpi/acnamesp.h b/trunk/include/acpi/acnamesp.h index c34008507b69..9ed70a050580 100644 --- a/trunk/include/acpi/acnamesp.h +++ b/trunk/include/acpi/acnamesp.h @@ -182,7 +182,7 @@ acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info); */ u32 acpi_ns_opens_scope(acpi_object_type type); -acpi_status +void acpi_ns_build_external_path(struct acpi_namespace_node *node, acpi_size size, char *name_buffer);