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:
parent
7b73806485
commit
f31a99cefd
@ -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);
|
||||||
|
@ -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");
|
||||||
|
@ -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 */
|
||||||
|
@ -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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user