aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/executer/exresnte.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/executer/exresnte.c')
-rw-r--r--drivers/acpi/executer/exresnte.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/acpi/executer/exresnte.c b/drivers/acpi/executer/exresnte.c
index 01b26c80d22b..3089b05a1368 100644
--- a/drivers/acpi/executer/exresnte.c
+++ b/drivers/acpi/executer/exresnte.c
@@ -87,7 +87,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
87 struct acpi_namespace_node *node; 87 struct acpi_namespace_node *node;
88 acpi_object_type entry_type; 88 acpi_object_type entry_type;
89 89
90 ACPI_FUNCTION_TRACE("ex_resolve_node_to_value"); 90 ACPI_FUNCTION_TRACE(ex_resolve_node_to_value);
91 91
92 /* 92 /*
93 * The stack pointer points to a struct acpi_namespace_node (Node). Get the 93 * The stack pointer points to a struct acpi_namespace_node (Node). Get the
@@ -97,12 +97,13 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
97 source_desc = acpi_ns_get_attached_object(node); 97 source_desc = acpi_ns_get_attached_object(node);
98 entry_type = acpi_ns_get_type((acpi_handle) node); 98 entry_type = acpi_ns_get_type((acpi_handle) node);
99 99
100 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p source_desc=%p [%s]\n", 100 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n",
101 node, source_desc, 101 node, source_desc,
102 acpi_ut_get_type_name(entry_type))); 102 acpi_ut_get_type_name(entry_type)));
103 103
104 if ((entry_type == ACPI_TYPE_LOCAL_ALIAS) || 104 if ((entry_type == ACPI_TYPE_LOCAL_ALIAS) ||
105 (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) { 105 (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
106
106 /* There is always exactly one level of indirection */ 107 /* There is always exactly one level of indirection */
107 108
108 node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object); 109 node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object);
@@ -113,10 +114,11 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
113 114
114 /* 115 /*
115 * Several object types require no further processing: 116 * Several object types require no further processing:
116 * 1) Devices rarely have an attached object, return the Node 117 * 1) Device/Thermal objects don't have a "real" subobject, return the Node
117 * 2) Method locals and arguments have a pseudo-Node 118 * 2) Method locals and arguments have a pseudo-Node
118 */ 119 */
119 if (entry_type == ACPI_TYPE_DEVICE || 120 if ((entry_type == ACPI_TYPE_DEVICE) ||
121 (entry_type == ACPI_TYPE_THERMAL) ||
120 (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) { 122 (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) {
121 return_ACPI_STATUS(AE_OK); 123 return_ACPI_STATUS(AE_OK);
122 } 124 }
@@ -141,6 +143,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
141 143
142 status = acpi_ds_get_package_arguments(source_desc); 144 status = acpi_ds_get_package_arguments(source_desc);
143 if (ACPI_SUCCESS(status)) { 145 if (ACPI_SUCCESS(status)) {
146
144 /* Return an additional reference to the object */ 147 /* Return an additional reference to the object */
145 148
146 obj_desc = source_desc; 149 obj_desc = source_desc;
@@ -158,6 +161,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
158 161
159 status = acpi_ds_get_buffer_arguments(source_desc); 162 status = acpi_ds_get_buffer_arguments(source_desc);
160 if (ACPI_SUCCESS(status)) { 163 if (ACPI_SUCCESS(status)) {
164
161 /* Return an additional reference to the object */ 165 /* Return an additional reference to the object */
162 166
163 obj_desc = source_desc; 167 obj_desc = source_desc;
@@ -199,7 +203,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
199 case ACPI_TYPE_LOCAL_INDEX_FIELD: 203 case ACPI_TYPE_LOCAL_INDEX_FIELD:
200 204
201 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 205 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
202 "field_read Node=%p source_desc=%p Type=%X\n", 206 "FieldRead Node=%p SourceDesc=%p Type=%X\n",
203 node, source_desc, entry_type)); 207 node, source_desc, entry_type));
204 208
205 status = 209 status =
@@ -213,7 +217,6 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
213 case ACPI_TYPE_METHOD: 217 case ACPI_TYPE_METHOD:
214 case ACPI_TYPE_POWER: 218 case ACPI_TYPE_POWER:
215 case ACPI_TYPE_PROCESSOR: 219 case ACPI_TYPE_PROCESSOR:
216 case ACPI_TYPE_THERMAL:
217 case ACPI_TYPE_EVENT: 220 case ACPI_TYPE_EVENT:
218 case ACPI_TYPE_REGION: 221 case ACPI_TYPE_REGION:
219 222
@@ -240,6 +243,8 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
240 /* This is a ddb_handle */ 243 /* This is a ddb_handle */
241 /* Return an additional reference to the object */ 244 /* Return an additional reference to the object */
242 245
246 case AML_REF_OF_OP:
247
243 obj_desc = source_desc; 248 obj_desc = source_desc;
244 acpi_ut_add_reference(obj_desc); 249 acpi_ut_add_reference(obj_desc);
245 break; 250 break;