ACPICA: Events: Deploys acpi_ev_find_region_handler()

ACPICA commit b916a0a0ae9e81db1a85523c63ec6aa32d5c70c8

There are code fragments that can be substituted by
acpi_ev_find_region_handler().

This patch cleans up these code fragments. Lv Zheng.

Link: https://github.com/acpica/acpica/commit/b916a0a0
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Lv Zheng 2015-12-29 14:02:00 +08:00 committed by Rafael J. Wysocki
parent 7b73806485
commit f31a99cefd
4 changed files with 76 additions and 92 deletions

View File

@ -161,6 +161,11 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
/* /*
* evhandler - Address space handling * evhandler - Address space handling
*/ */
union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
space_id,
union acpi_operand_object
*handler_obj);
u8 u8
acpi_ev_has_default_handler(struct acpi_namespace_node *node, acpi_ev_has_default_handler(struct acpi_namespace_node *node,
acpi_adr_space_type space_id); acpi_adr_space_type space_id);

View File

@ -48,6 +48,7 @@
#include "acnamesp.h" #include "acnamesp.h"
#include "acparser.h" #include "acparser.h"
#include "acinterp.h" #include "acinterp.h"
#include "acevents.h"
#include "acdebug.h" #include "acdebug.h"
#define _COMPONENT ACPI_CA_DEBUGGER #define _COMPONENT ACPI_CA_DEBUGGER
@ -949,17 +950,17 @@ void acpi_db_display_handlers(void)
if (obj_desc) { if (obj_desc) {
for (i = 0; i < ACPI_ARRAY_LENGTH(acpi_gbl_space_id_list); i++) { for (i = 0; i < ACPI_ARRAY_LENGTH(acpi_gbl_space_id_list); i++) {
space_id = acpi_gbl_space_id_list[i]; space_id = acpi_gbl_space_id_list[i];
handler_obj = obj_desc->device.handler;
acpi_os_printf(ACPI_PREDEFINED_PREFIX, acpi_os_printf(ACPI_PREDEFINED_PREFIX,
acpi_ut_get_region_name((u8)space_id), acpi_ut_get_region_name((u8)space_id),
space_id); space_id);
while (handler_obj) { handler_obj =
if (acpi_gbl_space_id_list[i] == acpi_ev_find_region_handler(space_id,
handler_obj->address_space.space_id) { obj_desc->device.
acpi_os_printf handler);
(ACPI_HANDLER_PRESENT_STRING, if (handler_obj) {
acpi_os_printf(ACPI_HANDLER_PRESENT_STRING,
(handler_obj->address_space. (handler_obj->address_space.
handler_flags & handler_flags &
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)
@ -970,9 +971,6 @@ void acpi_db_display_handlers(void)
goto found_handler; goto found_handler;
} }
handler_obj = handler_obj->address_space.next;
}
/* There is no handler for this space_id */ /* There is no handler for this space_id */
acpi_os_printf("None\n"); acpi_os_printf("None\n");

View File

@ -55,10 +55,6 @@ static acpi_status
acpi_ev_install_handler(acpi_handle obj_handle, acpi_ev_install_handler(acpi_handle obj_handle,
u32 level, void *context, void **return_value); u32 level, void *context, void **return_value);
static union acpi_operand_object
*acpi_ev_find_region_handler(acpi_adr_space_type space_id,
union acpi_operand_object *handler_obj);
/* These are the address spaces that will get default handlers */ /* These are the address spaces that will get default handlers */
u8 acpi_gbl_default_address_spaces[ACPI_NUM_DEFAULT_SPACES] = { u8 acpi_gbl_default_address_spaces[ACPI_NUM_DEFAULT_SPACES] = {
@ -251,37 +247,32 @@ acpi_ev_install_handler(acpi_handle obj_handle,
/* Check if this Device already has a handler for this address space */ /* Check if this Device already has a handler for this address space */
next_handler_obj = obj_desc->device.handler; next_handler_obj =
while (next_handler_obj) { acpi_ev_find_region_handler(handler_obj->address_space.
space_id,
obj_desc->device.handler);
if (next_handler_obj) {
/* Found a handler, is it for the same address space? */ /* Found a handler, is it for the same address space? */
if (next_handler_obj->address_space.space_id ==
handler_obj->address_space.space_id) {
ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
"Found handler for region [%s] in device %p(%p) " "Found handler for region [%s] in device %p(%p) handler %p\n",
"handler %p\n", acpi_ut_get_region_name(handler_obj->
acpi_ut_get_region_name address_space.
(handler_obj->address_space. space_id),
space_id), obj_desc, obj_desc, next_handler_obj,
next_handler_obj,
handler_obj)); handler_obj));
/* /*
* Since the object we found it on was a device, then it * Since the object we found it on was a device, then it means
* means that someone has already installed a handler for * that someone has already installed a handler for the branch
* the branch of the namespace from this device on. Just * of the namespace from this device on. Just bail out telling
* bail out telling the walk routine to not traverse this * the walk routine to not traverse this branch. This preserves
* branch. This preserves the scoping rule for handlers. * the scoping rule for handlers.
*/ */
return (AE_CTRL_DEPTH); return (AE_CTRL_DEPTH);
} }
/* Walk the linked list of handlers attached to this device */
next_handler_obj = next_handler_obj->address_space.next;
}
/* /*
* As long as the device didn't have a handler for this space we * As long as the device didn't have a handler for this space we
* don't care about it. We just ignore it and proceed. * don't care about it. We just ignore it and proceed.
@ -325,9 +316,10 @@ acpi_ev_install_handler(acpi_handle obj_handle,
* *
******************************************************************************/ ******************************************************************************/
static union acpi_operand_object union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
*acpi_ev_find_region_handler(acpi_adr_space_type space_id, space_id,
union acpi_operand_object *handler_obj) union acpi_operand_object
*handler_obj)
{ {
/* Walk the handler list for this device */ /* Walk the handler list for this device */

View File

@ -602,19 +602,15 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
break; break;
} }
while (handler_obj) { handler_obj =
acpi_ev_find_region_handler(space_id, handler_obj);
/* Is this handler of the correct type? */ if (handler_obj) {
if (handler_obj->address_space.space_id ==
space_id) {
/* Found correct handler */ /* Found correct handler */
ACPI_DEBUG_PRINT((ACPI_DB_OPREGION, ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
"Found handler %p for region %p in obj %p\n", "Found handler %p for region %p in obj %p\n",
handler_obj, handler_obj, region_obj,
region_obj,
obj_desc)); obj_desc));
status = status =
@ -631,32 +627,25 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
acpi_ut_release_mutex acpi_ut_release_mutex
(ACPI_MTX_NAMESPACE); (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return_ACPI_STATUS return_ACPI_STATUS(status);
(status);
} }
} }
status = status =
acpi_ev_execute_reg_method acpi_ev_execute_reg_method(region_obj,
(region_obj, ACPI_REG_CONNECT); ACPI_REG_CONNECT);
if (acpi_ns_locked) { if (acpi_ns_locked) {
status = status =
acpi_ut_acquire_mutex acpi_ut_acquire_mutex
(ACPI_MTX_NAMESPACE); (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return_ACPI_STATUS return_ACPI_STATUS(status);
(status);
} }
} }
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
/* Try next handler in the list */
handler_obj = handler_obj->address_space.next;
}
} }
/* This node does not have the handler we need; Pop up one level */ /* This node does not have the handler we need; Pop up one level */