diff options
author | Lv Zheng <lv.zheng@intel.com> | 2015-12-29 07:02:58 +0100 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-01-01 03:47:38 +0100 |
commit | 849c25719ac6acc7420515c7b6324f4248a13790 (patch) | |
tree | 163574cc06a6fa6ebdf5b6389162d56071bf0979 /drivers/acpi/acpica/evregion.c | |
parent | ACPICA: Events: Fix an issue that region object is re-attached to another sco... (diff) | |
download | linux-849c25719ac6acc7420515c7b6324f4248a13790.tar.xz linux-849c25719ac6acc7420515c7b6324f4248a13790.zip |
ACPICA: Events: Split acpi_ev_associate_reg_method() from region initialization code
ACPICA commit 87c85610250ff7141a84507f68dbc1e00f2936db
This patch introduces a new region initialization function
acpi_ev_associate_reg_method(), which is invoked to associate the _REG method
to its related region object.
Region object's default value assignments are also sorted by cleaning up
the code using this new function. Lv Zheng.
Link: https://github.com/acpica/acpica/commit/87c85610
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>
Diffstat (limited to 'drivers/acpi/acpica/evregion.c')
-rw-r--r-- | drivers/acpi/acpica/evregion.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index 19a4e695555f..432b81080369 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -529,6 +529,52 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj, /******************************************************************************* * + * FUNCTION: acpi_ev_associate_reg_method + * + * PARAMETERS: region_obj - Region object + * + * RETURN: Status + * + * DESCRIPTION: Find and associate _REG method to a region + * + ******************************************************************************/ + +void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj) +{ + acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG; + struct acpi_namespace_node *method_node; + struct acpi_namespace_node *node; + union acpi_operand_object *region_obj2; + acpi_status status; + + ACPI_FUNCTION_TRACE(ev_associate_reg_method); + + region_obj2 = acpi_ns_get_secondary_object(region_obj); + if (!region_obj2) { + return_VOID; + } + + node = region_obj->region.node->parent; + + /* Find any "_REG" method associated with this region definition */ + + status = + acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD, + &method_node); + if (ACPI_SUCCESS(status)) { + /* + * The _REG method is optional and there can be only one per region + * definition. This will be executed when the handler is attached + * or removed + */ + region_obj2->extra.method_REG = method_node; + } + + return_VOID; +} + +/******************************************************************************* + * * FUNCTION: acpi_ev_execute_reg_method * * PARAMETERS: region_obj - Region object |