diff options
Diffstat (limited to 'drivers/acpi/executer/exresolv.c')
-rw-r--r-- | drivers/acpi/executer/exresolv.c | 284 |
1 files changed, 136 insertions, 148 deletions
diff --git a/drivers/acpi/executer/exresolv.c b/drivers/acpi/executer/exresolv.c index 3de45672379a..97eecbd3242d 100644 --- a/drivers/acpi/executer/exresolv.c +++ b/drivers/acpi/executer/exresolv.c | |||
@@ -42,7 +42,6 @@ | |||
42 | * POSSIBILITY OF SUCH DAMAGES. | 42 | * POSSIBILITY OF SUCH DAMAGES. |
43 | */ | 43 | */ |
44 | 44 | ||
45 | |||
46 | #include <acpi/acpi.h> | 45 | #include <acpi/acpi.h> |
47 | #include <acpi/amlcode.h> | 46 | #include <acpi/amlcode.h> |
48 | #include <acpi/acdispat.h> | 47 | #include <acpi/acdispat.h> |
@@ -50,17 +49,13 @@ | |||
50 | #include <acpi/acnamesp.h> | 49 | #include <acpi/acnamesp.h> |
51 | #include <acpi/acparser.h> | 50 | #include <acpi/acparser.h> |
52 | 51 | ||
53 | |||
54 | #define _COMPONENT ACPI_EXECUTER | 52 | #define _COMPONENT ACPI_EXECUTER |
55 | ACPI_MODULE_NAME ("exresolv") | 53 | ACPI_MODULE_NAME("exresolv") |
56 | 54 | ||
57 | /* Local prototypes */ | 55 | /* Local prototypes */ |
58 | |||
59 | static acpi_status | 56 | static acpi_status |
60 | acpi_ex_resolve_object_to_value ( | 57 | acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, |
61 | union acpi_operand_object **stack_ptr, | 58 | struct acpi_walk_state *walk_state); |
62 | struct acpi_walk_state *walk_state); | ||
63 | |||
64 | 59 | ||
65 | /******************************************************************************* | 60 | /******************************************************************************* |
66 | * | 61 | * |
@@ -78,19 +73,16 @@ acpi_ex_resolve_object_to_value ( | |||
78 | ******************************************************************************/ | 73 | ******************************************************************************/ |
79 | 74 | ||
80 | acpi_status | 75 | acpi_status |
81 | acpi_ex_resolve_to_value ( | 76 | acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr, |
82 | union acpi_operand_object **stack_ptr, | 77 | struct acpi_walk_state *walk_state) |
83 | struct acpi_walk_state *walk_state) | ||
84 | { | 78 | { |
85 | acpi_status status; | 79 | acpi_status status; |
86 | |||
87 | |||
88 | ACPI_FUNCTION_TRACE_PTR ("ex_resolve_to_value", stack_ptr); | ||
89 | 80 | ||
81 | ACPI_FUNCTION_TRACE_PTR("ex_resolve_to_value", stack_ptr); | ||
90 | 82 | ||
91 | if (!stack_ptr || !*stack_ptr) { | 83 | if (!stack_ptr || !*stack_ptr) { |
92 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null pointer\n")); | 84 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Internal - null pointer\n")); |
93 | return_ACPI_STATUS (AE_AML_NO_OPERAND); | 85 | return_ACPI_STATUS(AE_AML_NO_OPERAND); |
94 | } | 86 | } |
95 | 87 | ||
96 | /* | 88 | /* |
@@ -98,15 +90,16 @@ acpi_ex_resolve_to_value ( | |||
98 | * 1) A valid union acpi_operand_object, or | 90 | * 1) A valid union acpi_operand_object, or |
99 | * 2) A struct acpi_namespace_node (named_obj) | 91 | * 2) A struct acpi_namespace_node (named_obj) |
100 | */ | 92 | */ |
101 | if (ACPI_GET_DESCRIPTOR_TYPE (*stack_ptr) == ACPI_DESC_TYPE_OPERAND) { | 93 | if (ACPI_GET_DESCRIPTOR_TYPE(*stack_ptr) == ACPI_DESC_TYPE_OPERAND) { |
102 | status = acpi_ex_resolve_object_to_value (stack_ptr, walk_state); | 94 | status = acpi_ex_resolve_object_to_value(stack_ptr, walk_state); |
103 | if (ACPI_FAILURE (status)) { | 95 | if (ACPI_FAILURE(status)) { |
104 | return_ACPI_STATUS (status); | 96 | return_ACPI_STATUS(status); |
105 | } | 97 | } |
106 | 98 | ||
107 | if (!*stack_ptr) { | 99 | if (!*stack_ptr) { |
108 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null pointer\n")); | 100 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
109 | return_ACPI_STATUS (AE_AML_NO_OPERAND); | 101 | "Internal - null pointer\n")); |
102 | return_ACPI_STATUS(AE_AML_NO_OPERAND); | ||
110 | } | 103 | } |
111 | } | 104 | } |
112 | 105 | ||
@@ -114,20 +107,20 @@ acpi_ex_resolve_to_value ( | |||
114 | * Object on the stack may have changed if acpi_ex_resolve_object_to_value() | 107 | * Object on the stack may have changed if acpi_ex_resolve_object_to_value() |
115 | * was called (i.e., we can't use an _else_ here.) | 108 | * was called (i.e., we can't use an _else_ here.) |
116 | */ | 109 | */ |
117 | if (ACPI_GET_DESCRIPTOR_TYPE (*stack_ptr) == ACPI_DESC_TYPE_NAMED) { | 110 | if (ACPI_GET_DESCRIPTOR_TYPE(*stack_ptr) == ACPI_DESC_TYPE_NAMED) { |
118 | status = acpi_ex_resolve_node_to_value ( | 111 | status = |
119 | ACPI_CAST_INDIRECT_PTR (struct acpi_namespace_node, stack_ptr), | 112 | acpi_ex_resolve_node_to_value(ACPI_CAST_INDIRECT_PTR |
120 | walk_state); | 113 | (struct acpi_namespace_node, |
121 | if (ACPI_FAILURE (status)) { | 114 | stack_ptr), walk_state); |
122 | return_ACPI_STATUS (status); | 115 | if (ACPI_FAILURE(status)) { |
116 | return_ACPI_STATUS(status); | ||
123 | } | 117 | } |
124 | } | 118 | } |
125 | 119 | ||
126 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *stack_ptr)); | 120 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Resolved object %p\n", *stack_ptr)); |
127 | return_ACPI_STATUS (AE_OK); | 121 | return_ACPI_STATUS(AE_OK); |
128 | } | 122 | } |
129 | 123 | ||
130 | |||
131 | /******************************************************************************* | 124 | /******************************************************************************* |
132 | * | 125 | * |
133 | * FUNCTION: acpi_ex_resolve_object_to_value | 126 | * FUNCTION: acpi_ex_resolve_object_to_value |
@@ -143,25 +136,22 @@ acpi_ex_resolve_to_value ( | |||
143 | ******************************************************************************/ | 136 | ******************************************************************************/ |
144 | 137 | ||
145 | static acpi_status | 138 | static acpi_status |
146 | acpi_ex_resolve_object_to_value ( | 139 | acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, |
147 | union acpi_operand_object **stack_ptr, | 140 | struct acpi_walk_state *walk_state) |
148 | struct acpi_walk_state *walk_state) | ||
149 | { | 141 | { |
150 | acpi_status status = AE_OK; | 142 | acpi_status status = AE_OK; |
151 | union acpi_operand_object *stack_desc; | 143 | union acpi_operand_object *stack_desc; |
152 | void *temp_node; | 144 | void *temp_node; |
153 | union acpi_operand_object *obj_desc; | 145 | union acpi_operand_object *obj_desc; |
154 | u16 opcode; | 146 | u16 opcode; |
155 | |||
156 | |||
157 | ACPI_FUNCTION_TRACE ("ex_resolve_object_to_value"); | ||
158 | 147 | ||
148 | ACPI_FUNCTION_TRACE("ex_resolve_object_to_value"); | ||
159 | 149 | ||
160 | stack_desc = *stack_ptr; | 150 | stack_desc = *stack_ptr; |
161 | 151 | ||
162 | /* This is an union acpi_operand_object */ | 152 | /* This is an union acpi_operand_object */ |
163 | 153 | ||
164 | switch (ACPI_GET_OBJECT_TYPE (stack_desc)) { | 154 | switch (ACPI_GET_OBJECT_TYPE(stack_desc)) { |
165 | case ACPI_TYPE_LOCAL_REFERENCE: | 155 | case ACPI_TYPE_LOCAL_REFERENCE: |
166 | 156 | ||
167 | opcode = stack_desc->reference.opcode; | 157 | opcode = stack_desc->reference.opcode; |
@@ -177,14 +167,13 @@ acpi_ex_resolve_object_to_value ( | |||
177 | 167 | ||
178 | /* Delete the Reference Object */ | 168 | /* Delete the Reference Object */ |
179 | 169 | ||
180 | acpi_ut_remove_reference (stack_desc); | 170 | acpi_ut_remove_reference(stack_desc); |
181 | 171 | ||
182 | /* Return the namespace node */ | 172 | /* Return the namespace node */ |
183 | 173 | ||
184 | (*stack_ptr) = temp_node; | 174 | (*stack_ptr) = temp_node; |
185 | break; | 175 | break; |
186 | 176 | ||
187 | |||
188 | case AML_LOCAL_OP: | 177 | case AML_LOCAL_OP: |
189 | case AML_ARG_OP: | 178 | case AML_ARG_OP: |
190 | 179 | ||
@@ -192,24 +181,28 @@ acpi_ex_resolve_object_to_value ( | |||
192 | * Get the local from the method's state info | 181 | * Get the local from the method's state info |
193 | * Note: this increments the local's object reference count | 182 | * Note: this increments the local's object reference count |
194 | */ | 183 | */ |
195 | status = acpi_ds_method_data_get_value (opcode, | 184 | status = acpi_ds_method_data_get_value(opcode, |
196 | stack_desc->reference.offset, walk_state, &obj_desc); | 185 | stack_desc-> |
197 | if (ACPI_FAILURE (status)) { | 186 | reference.offset, |
198 | return_ACPI_STATUS (status); | 187 | walk_state, |
188 | &obj_desc); | ||
189 | if (ACPI_FAILURE(status)) { | ||
190 | return_ACPI_STATUS(status); | ||
199 | } | 191 | } |
200 | 192 | ||
201 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %X] value_obj is %p\n", | 193 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
202 | stack_desc->reference.offset, obj_desc)); | 194 | "[Arg/Local %X] value_obj is %p\n", |
195 | stack_desc->reference.offset, | ||
196 | obj_desc)); | ||
203 | 197 | ||
204 | /* | 198 | /* |
205 | * Now we can delete the original Reference Object and | 199 | * Now we can delete the original Reference Object and |
206 | * replace it with the resolved value | 200 | * replace it with the resolved value |
207 | */ | 201 | */ |
208 | acpi_ut_remove_reference (stack_desc); | 202 | acpi_ut_remove_reference(stack_desc); |
209 | *stack_ptr = obj_desc; | 203 | *stack_ptr = obj_desc; |
210 | break; | 204 | break; |
211 | 205 | ||
212 | |||
213 | case AML_INDEX_OP: | 206 | case AML_INDEX_OP: |
214 | 207 | ||
215 | switch (stack_desc->reference.target_type) { | 208 | switch (stack_desc->reference.target_type) { |
@@ -218,7 +211,6 @@ acpi_ex_resolve_object_to_value ( | |||
218 | /* Just return - leave the Reference on the stack */ | 211 | /* Just return - leave the Reference on the stack */ |
219 | break; | 212 | break; |
220 | 213 | ||
221 | |||
222 | case ACPI_TYPE_PACKAGE: | 214 | case ACPI_TYPE_PACKAGE: |
223 | 215 | ||
224 | obj_desc = *stack_desc->reference.where; | 216 | obj_desc = *stack_desc->reference.where; |
@@ -228,36 +220,31 @@ acpi_ex_resolve_object_to_value ( | |||
228 | * (i.e., dereference the package index) | 220 | * (i.e., dereference the package index) |
229 | * Delete the ref object, increment the returned object | 221 | * Delete the ref object, increment the returned object |
230 | */ | 222 | */ |
231 | acpi_ut_remove_reference (stack_desc); | 223 | acpi_ut_remove_reference(stack_desc); |
232 | acpi_ut_add_reference (obj_desc); | 224 | acpi_ut_add_reference(obj_desc); |
233 | *stack_ptr = obj_desc; | 225 | *stack_ptr = obj_desc; |
234 | } | 226 | } else { |
235 | else { | ||
236 | /* | 227 | /* |
237 | * A NULL object descriptor means an unitialized element of | 228 | * A NULL object descriptor means an unitialized element of |
238 | * the package, can't dereference it | 229 | * the package, can't dereference it |
239 | */ | 230 | */ |
240 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, | 231 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
241 | "Attempt to deref an Index to NULL pkg element Idx=%p\n", | 232 | "Attempt to deref an Index to NULL pkg element Idx=%p\n", |
242 | stack_desc)); | 233 | stack_desc)); |
243 | status = AE_AML_UNINITIALIZED_ELEMENT; | 234 | status = AE_AML_UNINITIALIZED_ELEMENT; |
244 | } | 235 | } |
245 | break; | 236 | break; |
246 | 237 | ||
247 | |||
248 | default: | 238 | default: |
249 | 239 | ||
250 | /* Invalid reference object */ | 240 | /* Invalid reference object */ |
251 | 241 | ||
252 | ACPI_REPORT_ERROR (( | 242 | ACPI_REPORT_ERROR(("During resolve, Unknown target_type %X in Index/Reference obj %p\n", stack_desc->reference.target_type, stack_desc)); |
253 | "During resolve, Unknown target_type %X in Index/Reference obj %p\n", | ||
254 | stack_desc->reference.target_type, stack_desc)); | ||
255 | status = AE_AML_INTERNAL; | 243 | status = AE_AML_INTERNAL; |
256 | break; | 244 | break; |
257 | } | 245 | } |
258 | break; | 246 | break; |
259 | 247 | ||
260 | |||
261 | case AML_REF_OF_OP: | 248 | case AML_REF_OF_OP: |
262 | case AML_DEBUG_OP: | 249 | case AML_DEBUG_OP: |
263 | case AML_LOAD_OP: | 250 | case AML_LOAD_OP: |
@@ -266,60 +253,58 @@ acpi_ex_resolve_object_to_value ( | |||
266 | 253 | ||
267 | break; | 254 | break; |
268 | 255 | ||
269 | case AML_INT_NAMEPATH_OP: /* Reference to a named object */ | 256 | case AML_INT_NAMEPATH_OP: /* Reference to a named object */ |
270 | 257 | ||
271 | /* Get the object pointed to by the namespace node */ | 258 | /* Get the object pointed to by the namespace node */ |
272 | 259 | ||
273 | *stack_ptr = (stack_desc->reference.node)->object; | 260 | *stack_ptr = (stack_desc->reference.node)->object; |
274 | acpi_ut_add_reference (*stack_ptr); | 261 | acpi_ut_add_reference(*stack_ptr); |
275 | acpi_ut_remove_reference (stack_desc); | 262 | acpi_ut_remove_reference(stack_desc); |
276 | break; | 263 | break; |
277 | 264 | ||
278 | default: | 265 | default: |
279 | 266 | ||
280 | ACPI_REPORT_ERROR (( | 267 | ACPI_REPORT_ERROR(("During resolve, Unknown Reference opcode %X (%s) in %p\n", opcode, acpi_ps_get_opcode_name(opcode), stack_desc)); |
281 | "During resolve, Unknown Reference opcode %X (%s) in %p\n", | ||
282 | opcode, acpi_ps_get_opcode_name (opcode), stack_desc)); | ||
283 | status = AE_AML_INTERNAL; | 268 | status = AE_AML_INTERNAL; |
284 | break; | 269 | break; |
285 | } | 270 | } |
286 | break; | 271 | break; |
287 | 272 | ||
288 | |||
289 | case ACPI_TYPE_BUFFER: | 273 | case ACPI_TYPE_BUFFER: |
290 | 274 | ||
291 | status = acpi_ds_get_buffer_arguments (stack_desc); | 275 | status = acpi_ds_get_buffer_arguments(stack_desc); |
292 | break; | 276 | break; |
293 | 277 | ||
294 | |||
295 | case ACPI_TYPE_PACKAGE: | 278 | case ACPI_TYPE_PACKAGE: |
296 | 279 | ||
297 | status = acpi_ds_get_package_arguments (stack_desc); | 280 | status = acpi_ds_get_package_arguments(stack_desc); |
298 | break; | 281 | break; |
299 | 282 | ||
300 | 283 | /* These cases may never happen here, but just in case.. */ | |
301 | /* These cases may never happen here, but just in case.. */ | ||
302 | 284 | ||
303 | case ACPI_TYPE_BUFFER_FIELD: | 285 | case ACPI_TYPE_BUFFER_FIELD: |
304 | case ACPI_TYPE_LOCAL_REGION_FIELD: | 286 | case ACPI_TYPE_LOCAL_REGION_FIELD: |
305 | case ACPI_TYPE_LOCAL_BANK_FIELD: | 287 | case ACPI_TYPE_LOCAL_BANK_FIELD: |
306 | case ACPI_TYPE_LOCAL_INDEX_FIELD: | 288 | case ACPI_TYPE_LOCAL_INDEX_FIELD: |
307 | 289 | ||
308 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "field_read source_desc=%p Type=%X\n", | 290 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
309 | stack_desc, ACPI_GET_OBJECT_TYPE (stack_desc))); | 291 | "field_read source_desc=%p Type=%X\n", |
292 | stack_desc, | ||
293 | ACPI_GET_OBJECT_TYPE(stack_desc))); | ||
310 | 294 | ||
311 | status = acpi_ex_read_data_from_field (walk_state, stack_desc, &obj_desc); | 295 | status = |
312 | *stack_ptr = (void *) obj_desc; | 296 | acpi_ex_read_data_from_field(walk_state, stack_desc, |
297 | &obj_desc); | ||
298 | *stack_ptr = (void *)obj_desc; | ||
313 | break; | 299 | break; |
314 | 300 | ||
315 | default: | 301 | default: |
316 | break; | 302 | break; |
317 | } | 303 | } |
318 | 304 | ||
319 | return_ACPI_STATUS (status); | 305 | return_ACPI_STATUS(status); |
320 | } | 306 | } |
321 | 307 | ||
322 | |||
323 | /******************************************************************************* | 308 | /******************************************************************************* |
324 | * | 309 | * |
325 | * FUNCTION: acpi_ex_resolve_multiple | 310 | * FUNCTION: acpi_ex_resolve_multiple |
@@ -337,42 +322,44 @@ acpi_ex_resolve_object_to_value ( | |||
337 | ******************************************************************************/ | 322 | ******************************************************************************/ |
338 | 323 | ||
339 | acpi_status | 324 | acpi_status |
340 | acpi_ex_resolve_multiple ( | 325 | acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, |
341 | struct acpi_walk_state *walk_state, | 326 | union acpi_operand_object *operand, |
342 | union acpi_operand_object *operand, | 327 | acpi_object_type * return_type, |
343 | acpi_object_type *return_type, | 328 | union acpi_operand_object **return_desc) |
344 | union acpi_operand_object **return_desc) | ||
345 | { | 329 | { |
346 | union acpi_operand_object *obj_desc = (void *) operand; | 330 | union acpi_operand_object *obj_desc = (void *)operand; |
347 | struct acpi_namespace_node *node; | 331 | struct acpi_namespace_node *node; |
348 | acpi_object_type type; | 332 | acpi_object_type type; |
349 | acpi_status status; | 333 | acpi_status status; |
350 | |||
351 | |||
352 | ACPI_FUNCTION_TRACE ("acpi_ex_resolve_multiple"); | ||
353 | 334 | ||
335 | ACPI_FUNCTION_TRACE("acpi_ex_resolve_multiple"); | ||
354 | 336 | ||
355 | /* Operand can be either a namespace node or an operand descriptor */ | 337 | /* Operand can be either a namespace node or an operand descriptor */ |
356 | 338 | ||
357 | switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) { | 339 | switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) { |
358 | case ACPI_DESC_TYPE_OPERAND: | 340 | case ACPI_DESC_TYPE_OPERAND: |
359 | type = obj_desc->common.type; | 341 | type = obj_desc->common.type; |
360 | break; | 342 | break; |
361 | 343 | ||
362 | case ACPI_DESC_TYPE_NAMED: | 344 | case ACPI_DESC_TYPE_NAMED: |
363 | type = ((struct acpi_namespace_node *) obj_desc)->type; | 345 | type = ((struct acpi_namespace_node *)obj_desc)->type; |
364 | obj_desc = acpi_ns_get_attached_object ((struct acpi_namespace_node *) obj_desc); | 346 | obj_desc = |
347 | acpi_ns_get_attached_object((struct acpi_namespace_node *) | ||
348 | obj_desc); | ||
365 | 349 | ||
366 | /* If we had an Alias node, use the attached object for type info */ | 350 | /* If we had an Alias node, use the attached object for type info */ |
367 | 351 | ||
368 | if (type == ACPI_TYPE_LOCAL_ALIAS) { | 352 | if (type == ACPI_TYPE_LOCAL_ALIAS) { |
369 | type = ((struct acpi_namespace_node *) obj_desc)->type; | 353 | type = ((struct acpi_namespace_node *)obj_desc)->type; |
370 | obj_desc = acpi_ns_get_attached_object ((struct acpi_namespace_node *) obj_desc); | 354 | obj_desc = |
355 | acpi_ns_get_attached_object((struct | ||
356 | acpi_namespace_node *) | ||
357 | obj_desc); | ||
371 | } | 358 | } |
372 | break; | 359 | break; |
373 | 360 | ||
374 | default: | 361 | default: |
375 | return_ACPI_STATUS (AE_AML_OPERAND_TYPE); | 362 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); |
376 | } | 363 | } |
377 | 364 | ||
378 | /* If type is anything other than a reference, we are done */ | 365 | /* If type is anything other than a reference, we are done */ |
@@ -387,7 +374,7 @@ acpi_ex_resolve_multiple ( | |||
387 | * of the object_type and size_of operators). This means traversing | 374 | * of the object_type and size_of operators). This means traversing |
388 | * the list of possibly many nested references. | 375 | * the list of possibly many nested references. |
389 | */ | 376 | */ |
390 | while (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) { | 377 | while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) { |
391 | switch (obj_desc->reference.opcode) { | 378 | switch (obj_desc->reference.opcode) { |
392 | case AML_REF_OF_OP: | 379 | case AML_REF_OF_OP: |
393 | 380 | ||
@@ -397,31 +384,29 @@ acpi_ex_resolve_multiple ( | |||
397 | 384 | ||
398 | /* All "References" point to a NS node */ | 385 | /* All "References" point to a NS node */ |
399 | 386 | ||
400 | if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) { | 387 | if (ACPI_GET_DESCRIPTOR_TYPE(node) != |
401 | ACPI_REPORT_ERROR (( | 388 | ACPI_DESC_TYPE_NAMED) { |
402 | "acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", | 389 | ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", node, acpi_ut_get_descriptor_name(node))); |
403 | node, acpi_ut_get_descriptor_name (node))); | 390 | return_ACPI_STATUS(AE_AML_INTERNAL); |
404 | return_ACPI_STATUS (AE_AML_INTERNAL); | ||
405 | } | 391 | } |
406 | 392 | ||
407 | /* Get the attached object */ | 393 | /* Get the attached object */ |
408 | 394 | ||
409 | obj_desc = acpi_ns_get_attached_object (node); | 395 | obj_desc = acpi_ns_get_attached_object(node); |
410 | if (!obj_desc) { | 396 | if (!obj_desc) { |
411 | /* No object, use the NS node type */ | 397 | /* No object, use the NS node type */ |
412 | 398 | ||
413 | type = acpi_ns_get_type (node); | 399 | type = acpi_ns_get_type(node); |
414 | goto exit; | 400 | goto exit; |
415 | } | 401 | } |
416 | 402 | ||
417 | /* Check for circular references */ | 403 | /* Check for circular references */ |
418 | 404 | ||
419 | if (obj_desc == operand) { | 405 | if (obj_desc == operand) { |
420 | return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE); | 406 | return_ACPI_STATUS(AE_AML_CIRCULAR_REFERENCE); |
421 | } | 407 | } |
422 | break; | 408 | break; |
423 | 409 | ||
424 | |||
425 | case AML_INDEX_OP: | 410 | case AML_INDEX_OP: |
426 | 411 | ||
427 | /* Get the type of this reference (index into another object) */ | 412 | /* Get the type of this reference (index into another object) */ |
@@ -442,12 +427,11 @@ acpi_ex_resolve_multiple ( | |||
442 | if (!obj_desc) { | 427 | if (!obj_desc) { |
443 | /* NULL package elements are allowed */ | 428 | /* NULL package elements are allowed */ |
444 | 429 | ||
445 | type = 0; /* Uninitialized */ | 430 | type = 0; /* Uninitialized */ |
446 | goto exit; | 431 | goto exit; |
447 | } | 432 | } |
448 | break; | 433 | break; |
449 | 434 | ||
450 | |||
451 | case AML_INT_NAMEPATH_OP: | 435 | case AML_INT_NAMEPATH_OP: |
452 | 436 | ||
453 | /* Dereference the reference pointer */ | 437 | /* Dereference the reference pointer */ |
@@ -456,50 +440,61 @@ acpi_ex_resolve_multiple ( | |||
456 | 440 | ||
457 | /* All "References" point to a NS node */ | 441 | /* All "References" point to a NS node */ |
458 | 442 | ||
459 | if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) { | 443 | if (ACPI_GET_DESCRIPTOR_TYPE(node) != |
460 | ACPI_REPORT_ERROR (( | 444 | ACPI_DESC_TYPE_NAMED) { |
461 | "acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", | 445 | ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", node, acpi_ut_get_descriptor_name(node))); |
462 | node, acpi_ut_get_descriptor_name (node))); | 446 | return_ACPI_STATUS(AE_AML_INTERNAL); |
463 | return_ACPI_STATUS (AE_AML_INTERNAL); | ||
464 | } | 447 | } |
465 | 448 | ||
466 | /* Get the attached object */ | 449 | /* Get the attached object */ |
467 | 450 | ||
468 | obj_desc = acpi_ns_get_attached_object (node); | 451 | obj_desc = acpi_ns_get_attached_object(node); |
469 | if (!obj_desc) { | 452 | if (!obj_desc) { |
470 | /* No object, use the NS node type */ | 453 | /* No object, use the NS node type */ |
471 | 454 | ||
472 | type = acpi_ns_get_type (node); | 455 | type = acpi_ns_get_type(node); |
473 | goto exit; | 456 | goto exit; |
474 | } | 457 | } |
475 | 458 | ||
476 | /* Check for circular references */ | 459 | /* Check for circular references */ |
477 | 460 | ||
478 | if (obj_desc == operand) { | 461 | if (obj_desc == operand) { |
479 | return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE); | 462 | return_ACPI_STATUS(AE_AML_CIRCULAR_REFERENCE); |
480 | } | 463 | } |
481 | break; | 464 | break; |
482 | 465 | ||
483 | |||
484 | case AML_LOCAL_OP: | 466 | case AML_LOCAL_OP: |
485 | case AML_ARG_OP: | 467 | case AML_ARG_OP: |
486 | 468 | ||
487 | if (return_desc) { | 469 | if (return_desc) { |
488 | status = acpi_ds_method_data_get_value (obj_desc->reference.opcode, | 470 | status = |
489 | obj_desc->reference.offset, walk_state, &obj_desc); | 471 | acpi_ds_method_data_get_value(obj_desc-> |
490 | if (ACPI_FAILURE (status)) { | 472 | reference. |
491 | return_ACPI_STATUS (status); | 473 | opcode, |
474 | obj_desc-> | ||
475 | reference. | ||
476 | offset, | ||
477 | walk_state, | ||
478 | &obj_desc); | ||
479 | if (ACPI_FAILURE(status)) { | ||
480 | return_ACPI_STATUS(status); | ||
492 | } | 481 | } |
493 | acpi_ut_remove_reference (obj_desc); | 482 | acpi_ut_remove_reference(obj_desc); |
494 | } | 483 | } else { |
495 | else { | 484 | status = |
496 | status = acpi_ds_method_data_get_node (obj_desc->reference.opcode, | 485 | acpi_ds_method_data_get_node(obj_desc-> |
497 | obj_desc->reference.offset, walk_state, &node); | 486 | reference. |
498 | if (ACPI_FAILURE (status)) { | 487 | opcode, |
499 | return_ACPI_STATUS (status); | 488 | obj_desc-> |
489 | reference. | ||
490 | offset, | ||
491 | walk_state, | ||
492 | &node); | ||
493 | if (ACPI_FAILURE(status)) { | ||
494 | return_ACPI_STATUS(status); | ||
500 | } | 495 | } |
501 | 496 | ||
502 | obj_desc = acpi_ns_get_attached_object (node); | 497 | obj_desc = acpi_ns_get_attached_object(node); |
503 | if (!obj_desc) { | 498 | if (!obj_desc) { |
504 | type = ACPI_TYPE_ANY; | 499 | type = ACPI_TYPE_ANY; |
505 | goto exit; | 500 | goto exit; |
@@ -507,7 +502,6 @@ acpi_ex_resolve_multiple ( | |||
507 | } | 502 | } |
508 | break; | 503 | break; |
509 | 504 | ||
510 | |||
511 | case AML_DEBUG_OP: | 505 | case AML_DEBUG_OP: |
512 | 506 | ||
513 | /* The Debug Object is of type "debug_object" */ | 507 | /* The Debug Object is of type "debug_object" */ |
@@ -515,13 +509,10 @@ acpi_ex_resolve_multiple ( | |||
515 | type = ACPI_TYPE_DEBUG_OBJECT; | 509 | type = ACPI_TYPE_DEBUG_OBJECT; |
516 | goto exit; | 510 | goto exit; |
517 | 511 | ||
518 | |||
519 | default: | 512 | default: |
520 | 513 | ||
521 | ACPI_REPORT_ERROR (( | 514 | ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Unknown Reference subtype %X\n", obj_desc->reference.opcode)); |
522 | "acpi_ex_resolve_multiple: Unknown Reference subtype %X\n", | 515 | return_ACPI_STATUS(AE_AML_INTERNAL); |
523 | obj_desc->reference.opcode)); | ||
524 | return_ACPI_STATUS (AE_AML_INTERNAL); | ||
525 | } | 516 | } |
526 | } | 517 | } |
527 | 518 | ||
@@ -529,10 +520,9 @@ acpi_ex_resolve_multiple ( | |||
529 | * Now we are guaranteed to have an object that has not been created | 520 | * Now we are guaranteed to have an object that has not been created |
530 | * via the ref_of or Index operators. | 521 | * via the ref_of or Index operators. |
531 | */ | 522 | */ |
532 | type = ACPI_GET_OBJECT_TYPE (obj_desc); | 523 | type = ACPI_GET_OBJECT_TYPE(obj_desc); |
533 | 524 | ||
534 | 525 | exit: | |
535 | exit: | ||
536 | /* Convert internal types to external types */ | 526 | /* Convert internal types to external types */ |
537 | 527 | ||
538 | switch (type) { | 528 | switch (type) { |
@@ -559,7 +549,5 @@ exit: | |||
559 | if (return_desc) { | 549 | if (return_desc) { |
560 | *return_desc = obj_desc; | 550 | *return_desc = obj_desc; |
561 | } | 551 | } |
562 | return_ACPI_STATUS (AE_OK); | 552 | return_ACPI_STATUS(AE_OK); |
563 | } | 553 | } |
564 | |||
565 | |||