diff options
Diffstat (limited to 'drivers/acpi/executer/exresnte.c')
-rw-r--r-- | drivers/acpi/executer/exresnte.c | 17 |
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; |