提交 a5b6e982 编写于 作者: B Bob Moore 提交者: Rafael J. Wysocki

ACPICA: Interpreter: Update handling for Alias operator

ACPICA commit 719d0bdd48e3e8e7a62a86c04922b9f41da6def0

Provide common creation code for the Alias operator. All objects
are now handled the same, with the only exception being the
Method() operator. It has a special internal Alias type.

Link: https://github.com/acpica/acpica/commit/719d0bddSigned-off-by: NBob Moore <robert.moore@intel.com>
Signed-off-by: NLv Zheng <lv.zheng@intel.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 3958168f
...@@ -88,72 +88,39 @@ acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state) ...@@ -88,72 +88,39 @@ acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state)
} }
/* Ensure that the target node is valid */ /* Ensure that the target node is valid */
if (!target_node) { if (!target_node) {
return_ACPI_STATUS(AE_NULL_OBJECT); return_ACPI_STATUS(AE_NULL_OBJECT);
} }
/* /* Construct the alias object (a namespace node) */
* For objects that can never change (i.e., the NS node will
* permanently point to the same object), we can simply attach
* the object to the new NS node. For other objects (such as
* Integers, buffers, etc.), we have to point the Alias node
* to the original Node.
*/
switch (target_node->type) {
/* For these types, the sub-object can change dynamically via a Store */
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
case ACPI_TYPE_PACKAGE:
case ACPI_TYPE_BUFFER_FIELD:
/*
* These types open a new scope, so we need the NS node in order to access
* any children.
*/
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_POWER:
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_THERMAL:
case ACPI_TYPE_LOCAL_SCOPE:
/*
* The new alias has the type ALIAS and points to the original
* NS node, not the object itself.
*/
alias_node->type = ACPI_TYPE_LOCAL_ALIAS;
alias_node->object =
ACPI_CAST_PTR(union acpi_operand_object, target_node);
break;
switch (target_node->type) {
case ACPI_TYPE_METHOD: case ACPI_TYPE_METHOD:
/* /*
* Control method aliases need to be differentiated * Control method aliases need to be differentiated with
* a special type
*/ */
alias_node->type = ACPI_TYPE_LOCAL_METHOD_ALIAS; alias_node->type = ACPI_TYPE_LOCAL_METHOD_ALIAS;
alias_node->object =
ACPI_CAST_PTR(union acpi_operand_object, target_node);
break; break;
default: default:
/* Attach the original source object to the new Alias Node */
/* /*
* The new alias assumes the type of the target, and it points * All other object types.
* to the same object. The reference count of the object has an *
* additional reference to prevent deletion out from under either the * The new alias has the type ALIAS and points to the original
* target node or the alias Node * NS node, not the object itself.
*/ */
status = acpi_ns_attach_object(alias_node, alias_node->type = ACPI_TYPE_LOCAL_ALIAS;
acpi_ns_get_attached_object alias_node->object =
(target_node), ACPI_CAST_PTR(union acpi_operand_object, target_node);
target_node->type);
break; break;
} }
/* Since both operands are Nodes, we don't need to delete them */ /* Since both operands are Nodes, we don't need to delete them */
alias_node->object =
ACPI_CAST_PTR(union acpi_operand_object, target_node);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册