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; |
