diff options
Diffstat (limited to 'drivers/acpi/executer')
| -rw-r--r-- | drivers/acpi/executer/exconfig.c | 123 | ||||
| -rw-r--r-- | drivers/acpi/executer/exconvrt.c | 32 | ||||
| -rw-r--r-- | drivers/acpi/executer/exdump.c | 87 | ||||
| -rw-r--r-- | drivers/acpi/executer/exmisc.c | 14 | ||||
| -rw-r--r-- | drivers/acpi/executer/exoparg1.c | 26 | ||||
| -rw-r--r-- | drivers/acpi/executer/exoparg2.c | 4 | ||||
| -rw-r--r-- | drivers/acpi/executer/exresnte.c | 16 | ||||
| -rw-r--r-- | drivers/acpi/executer/exresolv.c | 60 | ||||
| -rw-r--r-- | drivers/acpi/executer/exresop.c | 50 | ||||
| -rw-r--r-- | drivers/acpi/executer/exstore.c | 61 | ||||
| -rw-r--r-- | drivers/acpi/executer/exstoren.c | 3 |
11 files changed, 259 insertions, 217 deletions
diff --git a/drivers/acpi/executer/exconfig.c b/drivers/acpi/executer/exconfig.c index 8892b9824fae..74da6fa52ef1 100644 --- a/drivers/acpi/executer/exconfig.c +++ b/drivers/acpi/executer/exconfig.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
| 45 | #include <acpi/acinterp.h> | 45 | #include <acpi/acinterp.h> |
| 46 | #include <acpi/amlcode.h> | ||
| 47 | #include <acpi/acnamesp.h> | 46 | #include <acpi/acnamesp.h> |
| 48 | #include <acpi/actables.h> | 47 | #include <acpi/actables.h> |
| 49 | #include <acpi/acdispat.h> | 48 | #include <acpi/acdispat.h> |
| @@ -91,13 +90,12 @@ acpi_ex_add_table(u32 table_index, | |||
| 91 | 90 | ||
| 92 | /* Init the table handle */ | 91 | /* Init the table handle */ |
| 93 | 92 | ||
| 94 | obj_desc->reference.opcode = AML_LOAD_OP; | 93 | obj_desc->reference.class = ACPI_REFCLASS_TABLE; |
| 95 | *ddb_handle = obj_desc; | 94 | *ddb_handle = obj_desc; |
| 96 | 95 | ||
| 97 | /* Install the new table into the local data structures */ | 96 | /* Install the new table into the local data structures */ |
| 98 | 97 | ||
| 99 | obj_desc->reference.object = ACPI_CAST_PTR(void, | 98 | obj_desc->reference.value = table_index; |
| 100 | (unsigned long)table_index); | ||
| 101 | 99 | ||
| 102 | /* Add the table to the namespace */ | 100 | /* Add the table to the namespace */ |
| 103 | 101 | ||
| @@ -280,6 +278,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, | |||
| 280 | struct acpi_walk_state *walk_state) | 278 | struct acpi_walk_state *walk_state) |
| 281 | { | 279 | { |
| 282 | union acpi_operand_object *ddb_handle; | 280 | union acpi_operand_object *ddb_handle; |
| 281 | struct acpi_table_header *table; | ||
| 283 | struct acpi_table_desc table_desc; | 282 | struct acpi_table_desc table_desc; |
| 284 | u32 table_index; | 283 | u32 table_index; |
| 285 | acpi_status status; | 284 | acpi_status status; |
| @@ -294,9 +293,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, | |||
| 294 | switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { | 293 | switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { |
| 295 | case ACPI_TYPE_REGION: | 294 | case ACPI_TYPE_REGION: |
| 296 | 295 | ||
| 297 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Load from Region %p %s\n", | 296 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 298 | obj_desc, | 297 | "Load table from Region %p\n", obj_desc)); |
| 299 | acpi_ut_get_object_type_name(obj_desc))); | ||
| 300 | 298 | ||
| 301 | /* Region must be system_memory (from ACPI spec) */ | 299 | /* Region must be system_memory (from ACPI spec) */ |
| 302 | 300 | ||
| @@ -316,61 +314,112 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, | |||
| 316 | } | 314 | } |
| 317 | 315 | ||
| 318 | /* | 316 | /* |
| 319 | * We will simply map the memory region for the table. However, the | 317 | * Map the table header and get the actual table length. The region |
| 320 | * memory region is technically not guaranteed to remain stable and | 318 | * length is not guaranteed to be the same as the table length. |
| 321 | * we may eventually have to copy the table to a local buffer. | 319 | */ |
| 320 | table = acpi_os_map_memory(obj_desc->region.address, | ||
| 321 | sizeof(struct acpi_table_header)); | ||
| 322 | if (!table) { | ||
| 323 | return_ACPI_STATUS(AE_NO_MEMORY); | ||
| 324 | } | ||
| 325 | |||
| 326 | length = table->length; | ||
| 327 | acpi_os_unmap_memory(table, sizeof(struct acpi_table_header)); | ||
| 328 | |||
| 329 | /* Must have at least an ACPI table header */ | ||
| 330 | |||
| 331 | if (length < sizeof(struct acpi_table_header)) { | ||
| 332 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); | ||
| 333 | } | ||
| 334 | |||
| 335 | /* | ||
| 336 | * The memory region is not guaranteed to remain stable and we must | ||
| 337 | * copy the table to a local buffer. For example, the memory region | ||
| 338 | * is corrupted after suspend on some machines. Dynamically loaded | ||
| 339 | * tables are usually small, so this overhead is minimal. | ||
| 322 | */ | 340 | */ |
| 341 | |||
| 342 | /* Allocate a buffer for the table */ | ||
| 343 | |||
| 344 | table_desc.pointer = ACPI_ALLOCATE(length); | ||
| 345 | if (!table_desc.pointer) { | ||
| 346 | return_ACPI_STATUS(AE_NO_MEMORY); | ||
| 347 | } | ||
| 348 | |||
| 349 | /* Map the entire table and copy it */ | ||
| 350 | |||
| 351 | table = acpi_os_map_memory(obj_desc->region.address, length); | ||
| 352 | if (!table) { | ||
| 353 | ACPI_FREE(table_desc.pointer); | ||
| 354 | return_ACPI_STATUS(AE_NO_MEMORY); | ||
| 355 | } | ||
| 356 | |||
| 357 | ACPI_MEMCPY(table_desc.pointer, table, length); | ||
| 358 | acpi_os_unmap_memory(table, length); | ||
| 359 | |||
| 323 | table_desc.address = obj_desc->region.address; | 360 | table_desc.address = obj_desc->region.address; |
| 324 | table_desc.length = obj_desc->region.length; | ||
| 325 | table_desc.flags = ACPI_TABLE_ORIGIN_MAPPED; | ||
| 326 | break; | 361 | break; |
| 327 | 362 | ||
| 328 | case ACPI_TYPE_BUFFER: /* Buffer or resolved region_field */ | 363 | case ACPI_TYPE_BUFFER: /* Buffer or resolved region_field */ |
| 329 | 364 | ||
| 330 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 365 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 331 | "Load from Buffer or Field %p %s\n", obj_desc, | 366 | "Load table from Buffer or Field %p\n", |
| 332 | acpi_ut_get_object_type_name(obj_desc))); | 367 | obj_desc)); |
| 333 | |||
| 334 | length = obj_desc->buffer.length; | ||
| 335 | 368 | ||
| 336 | /* Must have at least an ACPI table header */ | 369 | /* Must have at least an ACPI table header */ |
| 337 | 370 | ||
| 338 | if (length < sizeof(struct acpi_table_header)) { | 371 | if (obj_desc->buffer.length < sizeof(struct acpi_table_header)) { |
| 339 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); | 372 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); |
| 340 | } | 373 | } |
| 341 | 374 | ||
| 342 | /* Validate checksum here. It won't get validated in tb_add_table */ | 375 | /* Get the actual table length from the table header */ |
| 343 | 376 | ||
| 344 | status = | 377 | table = |
| 345 | acpi_tb_verify_checksum(ACPI_CAST_PTR | 378 | ACPI_CAST_PTR(struct acpi_table_header, |
| 346 | (struct acpi_table_header, | 379 | obj_desc->buffer.pointer); |
| 347 | obj_desc->buffer.pointer), length); | 380 | length = table->length; |
| 348 | if (ACPI_FAILURE(status)) { | 381 | |
| 349 | return_ACPI_STATUS(status); | 382 | /* Table cannot extend beyond the buffer */ |
| 383 | |||
| 384 | if (length > obj_desc->buffer.length) { | ||
| 385 | return_ACPI_STATUS(AE_AML_BUFFER_LIMIT); | ||
| 386 | } | ||
| 387 | if (length < sizeof(struct acpi_table_header)) { | ||
| 388 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); | ||
| 350 | } | 389 | } |
| 351 | 390 | ||
| 352 | /* | 391 | /* |
| 353 | * We need to copy the buffer since the original buffer could be | 392 | * Copy the table from the buffer because the buffer could be modified |
| 354 | * changed or deleted in the future | 393 | * or even deleted in the future |
| 355 | */ | 394 | */ |
| 356 | table_desc.pointer = ACPI_ALLOCATE(length); | 395 | table_desc.pointer = ACPI_ALLOCATE(length); |
| 357 | if (!table_desc.pointer) { | 396 | if (!table_desc.pointer) { |
| 358 | return_ACPI_STATUS(AE_NO_MEMORY); | 397 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 359 | } | 398 | } |
| 360 | 399 | ||
| 361 | ACPI_MEMCPY(table_desc.pointer, obj_desc->buffer.pointer, | 400 | ACPI_MEMCPY(table_desc.pointer, table, length); |
| 362 | length); | 401 | table_desc.address = ACPI_TO_INTEGER(table_desc.pointer); |
| 363 | table_desc.length = length; | ||
| 364 | table_desc.flags = ACPI_TABLE_ORIGIN_ALLOCATED; | ||
| 365 | break; | 402 | break; |
| 366 | 403 | ||
| 367 | default: | 404 | default: |
| 368 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); | 405 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); |
| 369 | } | 406 | } |
| 370 | 407 | ||
| 371 | /* | 408 | /* Validate table checksum (will not get validated in tb_add_table) */ |
| 372 | * Install the new table into the local data structures | 409 | |
| 373 | */ | 410 | status = acpi_tb_verify_checksum(table_desc.pointer, length); |
| 411 | if (ACPI_FAILURE(status)) { | ||
| 412 | ACPI_FREE(table_desc.pointer); | ||
| 413 | return_ACPI_STATUS(status); | ||
| 414 | } | ||
| 415 | |||
| 416 | /* Complete the table descriptor */ | ||
| 417 | |||
| 418 | table_desc.length = length; | ||
| 419 | table_desc.flags = ACPI_TABLE_ORIGIN_ALLOCATED; | ||
| 420 | |||
| 421 | /* Install the new table into the local data structures */ | ||
| 422 | |||
| 374 | status = acpi_tb_add_table(&table_desc, &table_index); | 423 | status = acpi_tb_add_table(&table_desc, &table_index); |
| 375 | if (ACPI_FAILURE(status)) { | 424 | if (ACPI_FAILURE(status)) { |
| 376 | goto cleanup; | 425 | goto cleanup; |
| @@ -379,7 +428,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, | |||
| 379 | /* | 428 | /* |
| 380 | * Add the table to the namespace. | 429 | * Add the table to the namespace. |
| 381 | * | 430 | * |
| 382 | * Note: We load the table objects relative to the root of the namespace. | 431 | * Note: Load the table objects relative to the root of the namespace. |
| 383 | * This appears to go against the ACPI specification, but we do it for | 432 | * This appears to go against the ACPI specification, but we do it for |
| 384 | * compatibility with other ACPI implementations. | 433 | * compatibility with other ACPI implementations. |
| 385 | */ | 434 | */ |
| @@ -415,7 +464,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, | |||
| 415 | cleanup: | 464 | cleanup: |
| 416 | if (ACPI_FAILURE(status)) { | 465 | if (ACPI_FAILURE(status)) { |
| 417 | 466 | ||
| 418 | /* Delete allocated buffer or mapping */ | 467 | /* Delete allocated table buffer */ |
| 419 | 468 | ||
| 420 | acpi_tb_delete_table(&table_desc); | 469 | acpi_tb_delete_table(&table_desc); |
| 421 | } | 470 | } |
| @@ -455,9 +504,9 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle) | |||
| 455 | return_ACPI_STATUS(AE_BAD_PARAMETER); | 504 | return_ACPI_STATUS(AE_BAD_PARAMETER); |
| 456 | } | 505 | } |
| 457 | 506 | ||
| 458 | /* Get the table index from the ddb_handle (acpi_size for 64-bit case) */ | 507 | /* Get the table index from the ddb_handle */ |
| 459 | 508 | ||
| 460 | table_index = (u32) (acpi_size) table_desc->reference.object; | 509 | table_index = table_desc->reference.value; |
| 461 | 510 | ||
| 462 | /* Invoke table handler if present */ | 511 | /* Invoke table handler if present */ |
| 463 | 512 | ||
diff --git a/drivers/acpi/executer/exconvrt.c b/drivers/acpi/executer/exconvrt.c index 261d97516d9b..1d1f35adddde 100644 --- a/drivers/acpi/executer/exconvrt.c +++ b/drivers/acpi/executer/exconvrt.c | |||
| @@ -57,7 +57,7 @@ acpi_ex_convert_to_ascii(acpi_integer integer, | |||
| 57 | * | 57 | * |
| 58 | * FUNCTION: acpi_ex_convert_to_integer | 58 | * FUNCTION: acpi_ex_convert_to_integer |
| 59 | * | 59 | * |
| 60 | * PARAMETERS: obj_desc - Object to be converted. Must be an | 60 | * PARAMETERS: obj_desc - Object to be converted. Must be an |
| 61 | * Integer, Buffer, or String | 61 | * Integer, Buffer, or String |
| 62 | * result_desc - Where the new Integer object is returned | 62 | * result_desc - Where the new Integer object is returned |
| 63 | * Flags - Used for string conversion | 63 | * Flags - Used for string conversion |
| @@ -103,7 +103,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc, | |||
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | /* | 105 | /* |
| 106 | * Convert the buffer/string to an integer. Note that both buffers and | 106 | * Convert the buffer/string to an integer. Note that both buffers and |
| 107 | * strings are treated as raw data - we don't convert ascii to hex for | 107 | * strings are treated as raw data - we don't convert ascii to hex for |
| 108 | * strings. | 108 | * strings. |
| 109 | * | 109 | * |
| @@ -120,7 +120,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc, | |||
| 120 | 120 | ||
| 121 | /* | 121 | /* |
| 122 | * Convert string to an integer - for most cases, the string must be | 122 | * Convert string to an integer - for most cases, the string must be |
| 123 | * hexadecimal as per the ACPI specification. The only exception (as | 123 | * hexadecimal as per the ACPI specification. The only exception (as |
| 124 | * of ACPI 3.0) is that the to_integer() operator allows both decimal | 124 | * of ACPI 3.0) is that the to_integer() operator allows both decimal |
| 125 | * and hexadecimal strings (hex prefixed with "0x"). | 125 | * and hexadecimal strings (hex prefixed with "0x"). |
| 126 | */ | 126 | */ |
| @@ -159,6 +159,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc, | |||
| 159 | break; | 159 | break; |
| 160 | 160 | ||
| 161 | default: | 161 | default: |
| 162 | |||
| 162 | /* No other types can get here */ | 163 | /* No other types can get here */ |
| 163 | break; | 164 | break; |
| 164 | } | 165 | } |
| @@ -185,7 +186,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc, | |||
| 185 | * | 186 | * |
| 186 | * FUNCTION: acpi_ex_convert_to_buffer | 187 | * FUNCTION: acpi_ex_convert_to_buffer |
| 187 | * | 188 | * |
| 188 | * PARAMETERS: obj_desc - Object to be converted. Must be an | 189 | * PARAMETERS: obj_desc - Object to be converted. Must be an |
| 189 | * Integer, Buffer, or String | 190 | * Integer, Buffer, or String |
| 190 | * result_desc - Where the new buffer object is returned | 191 | * result_desc - Where the new buffer object is returned |
| 191 | * | 192 | * |
| @@ -365,7 +366,7 @@ acpi_ex_convert_to_ascii(acpi_integer integer, | |||
| 365 | } | 366 | } |
| 366 | 367 | ||
| 367 | /* | 368 | /* |
| 368 | * Since leading zeros are supressed, we must check for the case where | 369 | * Since leading zeros are suppressed, we must check for the case where |
| 369 | * the integer equals 0 | 370 | * the integer equals 0 |
| 370 | * | 371 | * |
| 371 | * Finally, null terminate the string and return the length | 372 | * Finally, null terminate the string and return the length |
| @@ -383,7 +384,7 @@ acpi_ex_convert_to_ascii(acpi_integer integer, | |||
| 383 | * | 384 | * |
| 384 | * FUNCTION: acpi_ex_convert_to_string | 385 | * FUNCTION: acpi_ex_convert_to_string |
| 385 | * | 386 | * |
| 386 | * PARAMETERS: obj_desc - Object to be converted. Must be an | 387 | * PARAMETERS: obj_desc - Object to be converted. Must be an |
| 387 | * Integer, Buffer, or String | 388 | * Integer, Buffer, or String |
| 388 | * result_desc - Where the string object is returned | 389 | * result_desc - Where the string object is returned |
| 389 | * Type - String flags (base and conversion type) | 390 | * Type - String flags (base and conversion type) |
| @@ -472,7 +473,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc, | |||
| 472 | base = 10; | 473 | base = 10; |
| 473 | 474 | ||
| 474 | /* | 475 | /* |
| 475 | * Calculate the final string length. Individual string values | 476 | * Calculate the final string length. Individual string values |
| 476 | * are variable length (include separator for each) | 477 | * are variable length (include separator for each) |
| 477 | */ | 478 | */ |
| 478 | for (i = 0; i < obj_desc->buffer.length; i++) { | 479 | for (i = 0; i < obj_desc->buffer.length; i++) { |
| @@ -511,9 +512,14 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc, | |||
| 511 | /* | 512 | /* |
| 512 | * Create a new string object and string buffer | 513 | * Create a new string object and string buffer |
| 513 | * (-1 because of extra separator included in string_length from above) | 514 | * (-1 because of extra separator included in string_length from above) |
| 515 | * Allow creation of zero-length strings from zero-length buffers. | ||
| 514 | */ | 516 | */ |
| 517 | if (string_length) { | ||
| 518 | string_length--; | ||
| 519 | } | ||
| 520 | |||
| 515 | return_desc = acpi_ut_create_string_object((acpi_size) | 521 | return_desc = acpi_ut_create_string_object((acpi_size) |
| 516 | (string_length - 1)); | 522 | string_length); |
| 517 | if (!return_desc) { | 523 | if (!return_desc) { |
| 518 | return_ACPI_STATUS(AE_NO_MEMORY); | 524 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 519 | } | 525 | } |
| @@ -536,7 +542,9 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc, | |||
| 536 | * Null terminate the string | 542 | * Null terminate the string |
| 537 | * (overwrites final comma/space from above) | 543 | * (overwrites final comma/space from above) |
| 538 | */ | 544 | */ |
| 539 | new_buf--; | 545 | if (obj_desc->buffer.length) { |
| 546 | new_buf--; | ||
| 547 | } | ||
| 540 | *new_buf = 0; | 548 | *new_buf = 0; |
| 541 | break; | 549 | break; |
| 542 | 550 | ||
| @@ -617,7 +625,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type, | |||
| 617 | case ACPI_TYPE_LOCAL_BANK_FIELD: | 625 | case ACPI_TYPE_LOCAL_BANK_FIELD: |
| 618 | case ACPI_TYPE_LOCAL_INDEX_FIELD: | 626 | case ACPI_TYPE_LOCAL_INDEX_FIELD: |
| 619 | /* | 627 | /* |
| 620 | * These types require an Integer operand. We can convert | 628 | * These types require an Integer operand. We can convert |
| 621 | * a Buffer or a String to an Integer if necessary. | 629 | * a Buffer or a String to an Integer if necessary. |
| 622 | */ | 630 | */ |
| 623 | status = | 631 | status = |
| @@ -627,7 +635,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type, | |||
| 627 | 635 | ||
| 628 | case ACPI_TYPE_STRING: | 636 | case ACPI_TYPE_STRING: |
| 629 | /* | 637 | /* |
| 630 | * The operand must be a String. We can convert an | 638 | * The operand must be a String. We can convert an |
| 631 | * Integer or Buffer if necessary | 639 | * Integer or Buffer if necessary |
| 632 | */ | 640 | */ |
| 633 | status = | 641 | status = |
| @@ -637,7 +645,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type, | |||
| 637 | 645 | ||
| 638 | case ACPI_TYPE_BUFFER: | 646 | case ACPI_TYPE_BUFFER: |
| 639 | /* | 647 | /* |
| 640 | * The operand must be a Buffer. We can convert an | 648 | * The operand must be a Buffer. We can convert an |
| 641 | * Integer or String if necessary | 649 | * Integer or String if necessary |
| 642 | */ | 650 | */ |
| 643 | status = | 651 | status = |
diff --git a/drivers/acpi/executer/exdump.c b/drivers/acpi/executer/exdump.c index 2be2e2bf95bf..d087a7d28aa5 100644 --- a/drivers/acpi/executer/exdump.c +++ b/drivers/acpi/executer/exdump.c | |||
| @@ -45,7 +45,6 @@ | |||
| 45 | #include <acpi/acinterp.h> | 45 | #include <acpi/acinterp.h> |
| 46 | #include <acpi/amlcode.h> | 46 | #include <acpi/amlcode.h> |
| 47 | #include <acpi/acnamesp.h> | 47 | #include <acpi/acnamesp.h> |
| 48 | #include <acpi/acparser.h> | ||
| 49 | 48 | ||
| 50 | #define _COMPONENT ACPI_EXECUTER | 49 | #define _COMPONENT ACPI_EXECUTER |
| 51 | ACPI_MODULE_NAME("exdump") | 50 | ACPI_MODULE_NAME("exdump") |
| @@ -214,10 +213,11 @@ static struct acpi_exdump_info acpi_ex_dump_index_field[5] = { | |||
| 214 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(index_field.data_obj), "Data Object"} | 213 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(index_field.data_obj), "Data Object"} |
| 215 | }; | 214 | }; |
| 216 | 215 | ||
| 217 | static struct acpi_exdump_info acpi_ex_dump_reference[7] = { | 216 | static struct acpi_exdump_info acpi_ex_dump_reference[8] = { |
| 218 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_reference), NULL}, | 217 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_reference), NULL}, |
| 218 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.class), "Class"}, | ||
| 219 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"}, | 219 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"}, |
| 220 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(reference.offset), "Offset"}, | 220 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(reference.value), "Value"}, |
| 221 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"}, | 221 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"}, |
| 222 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.node), "Node"}, | 222 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.node), "Node"}, |
| 223 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"}, | 223 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"}, |
| @@ -413,10 +413,10 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc, | |||
| 413 | 413 | ||
| 414 | case ACPI_EXD_REFERENCE: | 414 | case ACPI_EXD_REFERENCE: |
| 415 | 415 | ||
| 416 | acpi_ex_out_string("Opcode", | 416 | acpi_ex_out_string("Class Name", |
| 417 | (acpi_ps_get_opcode_info | 417 | (char *) |
| 418 | (obj_desc->reference.opcode))-> | 418 | acpi_ut_get_reference_name |
| 419 | name); | 419 | (obj_desc)); |
| 420 | acpi_ex_dump_reference_obj(obj_desc); | 420 | acpi_ex_dump_reference_obj(obj_desc); |
| 421 | break; | 421 | break; |
| 422 | 422 | ||
| @@ -494,40 +494,41 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth) | |||
| 494 | switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { | 494 | switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { |
| 495 | case ACPI_TYPE_LOCAL_REFERENCE: | 495 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 496 | 496 | ||
| 497 | switch (obj_desc->reference.opcode) { | 497 | acpi_os_printf("Reference: [%s] ", |
| 498 | case AML_DEBUG_OP: | 498 | acpi_ut_get_reference_name(obj_desc)); |
| 499 | |||
| 500 | switch (obj_desc->reference.class) { | ||
| 501 | case ACPI_REFCLASS_DEBUG: | ||
| 499 | 502 | ||
| 500 | acpi_os_printf("Reference: Debug\n"); | 503 | acpi_os_printf("\n"); |
| 501 | break; | 504 | break; |
| 502 | 505 | ||
| 503 | case AML_INDEX_OP: | 506 | case ACPI_REFCLASS_INDEX: |
| 504 | 507 | ||
| 505 | acpi_os_printf("Reference: Index %p\n", | 508 | acpi_os_printf("%p\n", obj_desc->reference.object); |
| 506 | obj_desc->reference.object); | ||
| 507 | break; | 509 | break; |
| 508 | 510 | ||
| 509 | case AML_LOAD_OP: | 511 | case ACPI_REFCLASS_TABLE: |
| 510 | 512 | ||
| 511 | acpi_os_printf("Reference: [DdbHandle] TableIndex %p\n", | 513 | acpi_os_printf("Table Index %X\n", |
| 512 | obj_desc->reference.object); | 514 | obj_desc->reference.value); |
| 513 | break; | 515 | break; |
| 514 | 516 | ||
| 515 | case AML_REF_OF_OP: | 517 | case ACPI_REFCLASS_REFOF: |
| 516 | 518 | ||
| 517 | acpi_os_printf("Reference: (RefOf) %p [%s]\n", | 519 | acpi_os_printf("%p [%s]\n", obj_desc->reference.object, |
| 518 | obj_desc->reference.object, | ||
| 519 | acpi_ut_get_type_name(((union | 520 | acpi_ut_get_type_name(((union |
| 520 | acpi_operand_object | 521 | acpi_operand_object |
| 521 | *)obj_desc-> | 522 | *) |
| 523 | obj_desc-> | ||
| 522 | reference. | 524 | reference. |
| 523 | object)->common. | 525 | object)->common. |
| 524 | type)); | 526 | type)); |
| 525 | break; | 527 | break; |
| 526 | 528 | ||
| 527 | case AML_ARG_OP: | 529 | case ACPI_REFCLASS_ARG: |
| 528 | 530 | ||
| 529 | acpi_os_printf("Reference: Arg%d", | 531 | acpi_os_printf("%X", obj_desc->reference.value); |
| 530 | obj_desc->reference.offset); | ||
| 531 | 532 | ||
| 532 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { | 533 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { |
| 533 | 534 | ||
| @@ -542,10 +543,9 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth) | |||
| 542 | acpi_os_printf("\n"); | 543 | acpi_os_printf("\n"); |
| 543 | break; | 544 | break; |
| 544 | 545 | ||
| 545 | case AML_LOCAL_OP: | 546 | case ACPI_REFCLASS_LOCAL: |
| 546 | 547 | ||
| 547 | acpi_os_printf("Reference: Local%d", | 548 | acpi_os_printf("%X", obj_desc->reference.value); |
| 548 | obj_desc->reference.offset); | ||
| 549 | 549 | ||
| 550 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { | 550 | if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) { |
| 551 | 551 | ||
| @@ -560,21 +560,16 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth) | |||
| 560 | acpi_os_printf("\n"); | 560 | acpi_os_printf("\n"); |
| 561 | break; | 561 | break; |
| 562 | 562 | ||
| 563 | case AML_INT_NAMEPATH_OP: | 563 | case ACPI_REFCLASS_NAME: |
| 564 | 564 | ||
| 565 | acpi_os_printf("Reference: Namepath %X [%4.4s]\n", | 565 | acpi_os_printf("- [%4.4s]\n", |
| 566 | obj_desc->reference.node->name.integer, | ||
| 567 | obj_desc->reference.node->name.ascii); | 566 | obj_desc->reference.node->name.ascii); |
| 568 | break; | 567 | break; |
| 569 | 568 | ||
| 570 | default: | 569 | default: /* Unknown reference class */ |
| 571 | |||
| 572 | /* Unknown opcode */ | ||
| 573 | 570 | ||
| 574 | acpi_os_printf("Unknown Reference opcode=%X\n", | 571 | acpi_os_printf("%2.2X\n", obj_desc->reference.class); |
| 575 | obj_desc->reference.opcode); | ||
| 576 | break; | 572 | break; |
| 577 | |||
| 578 | } | 573 | } |
| 579 | break; | 574 | break; |
| 580 | 575 | ||
| @@ -865,8 +860,8 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc) | |||
| 865 | 860 | ||
| 866 | ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER; | 861 | ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER; |
| 867 | 862 | ||
| 868 | if (obj_desc->reference.opcode == AML_INT_NAMEPATH_OP) { | 863 | if (obj_desc->reference.class == ACPI_REFCLASS_NAME) { |
| 869 | acpi_os_printf(" Named Object %p ", obj_desc->reference.node); | 864 | acpi_os_printf(" %p ", obj_desc->reference.node); |
| 870 | 865 | ||
| 871 | status = | 866 | status = |
| 872 | acpi_ns_handle_to_pathname(obj_desc->reference.node, | 867 | acpi_ns_handle_to_pathname(obj_desc->reference.node, |
| @@ -882,14 +877,12 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc) | |||
| 882 | ACPI_DESC_TYPE_OPERAND) { | 877 | ACPI_DESC_TYPE_OPERAND) { |
| 883 | acpi_os_printf(" Target: %p", | 878 | acpi_os_printf(" Target: %p", |
| 884 | obj_desc->reference.object); | 879 | obj_desc->reference.object); |
| 885 | if (obj_desc->reference.opcode == AML_LOAD_OP) { | 880 | if (obj_desc->reference.class == ACPI_REFCLASS_TABLE) { |
| 886 | /* | 881 | acpi_os_printf(" Table Index: %X\n", |
| 887 | * For DDBHandle reference, | 882 | obj_desc->reference.value); |
| 888 | * obj_desc->Reference.Object is the table index | ||
| 889 | */ | ||
| 890 | acpi_os_printf(" [DDBHandle]\n"); | ||
| 891 | } else { | 883 | } else { |
| 892 | acpi_os_printf(" [%s]\n", | 884 | acpi_os_printf(" Target: %p [%s]\n", |
| 885 | obj_desc->reference.object, | ||
| 893 | acpi_ut_get_type_name(((union | 886 | acpi_ut_get_type_name(((union |
| 894 | acpi_operand_object | 887 | acpi_operand_object |
| 895 | *) | 888 | *) |
| @@ -988,9 +981,9 @@ acpi_ex_dump_package_obj(union acpi_operand_object *obj_desc, | |||
| 988 | 981 | ||
| 989 | case ACPI_TYPE_LOCAL_REFERENCE: | 982 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 990 | 983 | ||
| 991 | acpi_os_printf("[Object Reference] %s", | 984 | acpi_os_printf("[Object Reference] Type [%s] %2.2X", |
| 992 | (acpi_ps_get_opcode_info | 985 | acpi_ut_get_reference_name(obj_desc), |
| 993 | (obj_desc->reference.opcode))->name); | 986 | obj_desc->reference.class); |
| 994 | acpi_ex_dump_reference_obj(obj_desc); | 987 | acpi_ex_dump_reference_obj(obj_desc); |
| 995 | break; | 988 | break; |
| 996 | 989 | ||
diff --git a/drivers/acpi/executer/exmisc.c b/drivers/acpi/executer/exmisc.c index 731414a581a6..efb191340059 100644 --- a/drivers/acpi/executer/exmisc.c +++ b/drivers/acpi/executer/exmisc.c | |||
| @@ -86,10 +86,10 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc, | |||
| 86 | /* | 86 | /* |
| 87 | * Must be a reference to a Local or Arg | 87 | * Must be a reference to a Local or Arg |
| 88 | */ | 88 | */ |
| 89 | switch (obj_desc->reference.opcode) { | 89 | switch (obj_desc->reference.class) { |
| 90 | case AML_LOCAL_OP: | 90 | case ACPI_REFCLASS_LOCAL: |
| 91 | case AML_ARG_OP: | 91 | case ACPI_REFCLASS_ARG: |
| 92 | case AML_DEBUG_OP: | 92 | case ACPI_REFCLASS_DEBUG: |
| 93 | 93 | ||
| 94 | /* The referenced object is the pseudo-node for the local/arg */ | 94 | /* The referenced object is the pseudo-node for the local/arg */ |
| 95 | 95 | ||
| @@ -98,8 +98,8 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc, | |||
| 98 | 98 | ||
| 99 | default: | 99 | default: |
| 100 | 100 | ||
| 101 | ACPI_ERROR((AE_INFO, "Unknown Reference opcode %X", | 101 | ACPI_ERROR((AE_INFO, "Unknown Reference Class %2.2X", |
| 102 | obj_desc->reference.opcode)); | 102 | obj_desc->reference.class)); |
| 103 | return_ACPI_STATUS(AE_AML_INTERNAL); | 103 | return_ACPI_STATUS(AE_AML_INTERNAL); |
| 104 | } | 104 | } |
| 105 | break; | 105 | break; |
| @@ -127,7 +127,7 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc, | |||
| 127 | return_ACPI_STATUS(AE_NO_MEMORY); | 127 | return_ACPI_STATUS(AE_NO_MEMORY); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | reference_obj->reference.opcode = AML_REF_OF_OP; | 130 | reference_obj->reference.class = ACPI_REFCLASS_REFOF; |
| 131 | reference_obj->reference.object = referenced_obj; | 131 | reference_obj->reference.object = referenced_obj; |
| 132 | *return_desc = reference_obj; | 132 | *return_desc = reference_obj; |
| 133 | 133 | ||
diff --git a/drivers/acpi/executer/exoparg1.c b/drivers/acpi/executer/exoparg1.c index 7c3bea575e02..f622f9eac8a1 100644 --- a/drivers/acpi/executer/exoparg1.c +++ b/drivers/acpi/executer/exoparg1.c | |||
| @@ -825,16 +825,16 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 825 | * | 825 | * |
| 826 | * Must resolve/dereference the local/arg reference first | 826 | * Must resolve/dereference the local/arg reference first |
| 827 | */ | 827 | */ |
| 828 | switch (operand[0]->reference.opcode) { | 828 | switch (operand[0]->reference.class) { |
| 829 | case AML_LOCAL_OP: | 829 | case ACPI_REFCLASS_LOCAL: |
| 830 | case AML_ARG_OP: | 830 | case ACPI_REFCLASS_ARG: |
| 831 | 831 | ||
| 832 | /* Set Operand[0] to the value of the local/arg */ | 832 | /* Set Operand[0] to the value of the local/arg */ |
| 833 | 833 | ||
| 834 | status = | 834 | status = |
| 835 | acpi_ds_method_data_get_value | 835 | acpi_ds_method_data_get_value |
| 836 | (operand[0]->reference.opcode, | 836 | (operand[0]->reference.class, |
| 837 | operand[0]->reference.offset, | 837 | operand[0]->reference.value, |
| 838 | walk_state, &temp_desc); | 838 | walk_state, &temp_desc); |
| 839 | if (ACPI_FAILURE(status)) { | 839 | if (ACPI_FAILURE(status)) { |
| 840 | goto cleanup; | 840 | goto cleanup; |
| @@ -848,7 +848,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 848 | operand[0] = temp_desc; | 848 | operand[0] = temp_desc; |
| 849 | break; | 849 | break; |
| 850 | 850 | ||
| 851 | case AML_REF_OF_OP: | 851 | case ACPI_REFCLASS_REFOF: |
| 852 | 852 | ||
| 853 | /* Get the object to which the reference refers */ | 853 | /* Get the object to which the reference refers */ |
| 854 | 854 | ||
| @@ -928,8 +928,8 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 928 | * This must be a reference object produced by either the | 928 | * This must be a reference object produced by either the |
| 929 | * Index() or ref_of() operator | 929 | * Index() or ref_of() operator |
| 930 | */ | 930 | */ |
| 931 | switch (operand[0]->reference.opcode) { | 931 | switch (operand[0]->reference.class) { |
| 932 | case AML_INDEX_OP: | 932 | case ACPI_REFCLASS_INDEX: |
| 933 | 933 | ||
| 934 | /* | 934 | /* |
| 935 | * The target type for the Index operator must be | 935 | * The target type for the Index operator must be |
| @@ -965,7 +965,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 965 | return_desc->integer.value = | 965 | return_desc->integer.value = |
| 966 | temp_desc->buffer. | 966 | temp_desc->buffer. |
| 967 | pointer[operand[0]->reference. | 967 | pointer[operand[0]->reference. |
| 968 | offset]; | 968 | value]; |
| 969 | break; | 969 | break; |
| 970 | 970 | ||
| 971 | case ACPI_TYPE_PACKAGE: | 971 | case ACPI_TYPE_PACKAGE: |
| @@ -985,7 +985,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 985 | default: | 985 | default: |
| 986 | 986 | ||
| 987 | ACPI_ERROR((AE_INFO, | 987 | ACPI_ERROR((AE_INFO, |
| 988 | "Unknown Index TargetType %X in obj %p", | 988 | "Unknown Index TargetType %X in reference object %p", |
| 989 | operand[0]->reference. | 989 | operand[0]->reference. |
| 990 | target_type, operand[0])); | 990 | target_type, operand[0])); |
| 991 | status = AE_AML_OPERAND_TYPE; | 991 | status = AE_AML_OPERAND_TYPE; |
| @@ -993,7 +993,7 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 993 | } | 993 | } |
| 994 | break; | 994 | break; |
| 995 | 995 | ||
| 996 | case AML_REF_OF_OP: | 996 | case ACPI_REFCLASS_REFOF: |
| 997 | 997 | ||
| 998 | return_desc = operand[0]->reference.object; | 998 | return_desc = operand[0]->reference.object; |
| 999 | 999 | ||
| @@ -1013,9 +1013,9 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state) | |||
| 1013 | 1013 | ||
| 1014 | default: | 1014 | default: |
| 1015 | ACPI_ERROR((AE_INFO, | 1015 | ACPI_ERROR((AE_INFO, |
| 1016 | "Unknown opcode in reference(%p) - %X", | 1016 | "Unknown class in reference(%p) - %2.2X", |
| 1017 | operand[0], | 1017 | operand[0], |
| 1018 | operand[0]->reference.opcode)); | 1018 | operand[0]->reference.class)); |
| 1019 | 1019 | ||
| 1020 | status = AE_TYPE; | 1020 | status = AE_TYPE; |
| 1021 | goto cleanup; | 1021 | goto cleanup; |
diff --git a/drivers/acpi/executer/exoparg2.c b/drivers/acpi/executer/exoparg2.c index 8e8bbb6ccebd..368def5dffce 100644 --- a/drivers/acpi/executer/exoparg2.c +++ b/drivers/acpi/executer/exoparg2.c | |||
| @@ -391,8 +391,8 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state) | |||
| 391 | /* Initialize the Index reference object */ | 391 | /* Initialize the Index reference object */ |
| 392 | 392 | ||
| 393 | index = operand[1]->integer.value; | 393 | index = operand[1]->integer.value; |
| 394 | return_desc->reference.offset = (u32) index; | 394 | return_desc->reference.value = (u32) index; |
| 395 | return_desc->reference.opcode = AML_INDEX_OP; | 395 | return_desc->reference.class = ACPI_REFCLASS_INDEX; |
| 396 | 396 | ||
| 397 | /* | 397 | /* |
| 398 | * At this point, the Source operand is a String, Buffer, or Package. | 398 | * At this point, the Source operand is a String, Buffer, or Package. |
diff --git a/drivers/acpi/executer/exresnte.c b/drivers/acpi/executer/exresnte.c index 5596f42c9676..423ad3635f3d 100644 --- a/drivers/acpi/executer/exresnte.c +++ b/drivers/acpi/executer/exresnte.c | |||
| @@ -46,8 +46,6 @@ | |||
| 46 | #include <acpi/acdispat.h> | 46 | #include <acpi/acdispat.h> |
| 47 | #include <acpi/acinterp.h> | 47 | #include <acpi/acinterp.h> |
| 48 | #include <acpi/acnamesp.h> | 48 | #include <acpi/acnamesp.h> |
| 49 | #include <acpi/acparser.h> | ||
| 50 | #include <acpi/amlcode.h> | ||
| 51 | 49 | ||
| 52 | #define _COMPONENT ACPI_EXECUTER | 50 | #define _COMPONENT ACPI_EXECUTER |
| 53 | ACPI_MODULE_NAME("exresnte") | 51 | ACPI_MODULE_NAME("exresnte") |
| @@ -238,10 +236,10 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr, | |||
| 238 | 236 | ||
| 239 | case ACPI_TYPE_LOCAL_REFERENCE: | 237 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 240 | 238 | ||
| 241 | switch (source_desc->reference.opcode) { | 239 | switch (source_desc->reference.class) { |
| 242 | case AML_LOAD_OP: /* This is a ddb_handle */ | 240 | case ACPI_REFCLASS_TABLE: /* This is a ddb_handle */ |
| 243 | case AML_REF_OF_OP: | 241 | case ACPI_REFCLASS_REFOF: |
| 244 | case AML_INDEX_OP: | 242 | case ACPI_REFCLASS_INDEX: |
| 245 | 243 | ||
| 246 | /* Return an additional reference to the object */ | 244 | /* Return an additional reference to the object */ |
| 247 | 245 | ||
| @@ -253,10 +251,8 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr, | |||
| 253 | /* No named references are allowed here */ | 251 | /* No named references are allowed here */ |
| 254 | 252 | ||
| 255 | ACPI_ERROR((AE_INFO, | 253 | ACPI_ERROR((AE_INFO, |
| 256 | "Unsupported Reference opcode %X (%s)", | 254 | "Unsupported Reference type %X", |
| 257 | source_desc->reference.opcode, | 255 | source_desc->reference.class)); |
| 258 | acpi_ps_get_opcode_name(source_desc-> | ||
| 259 | reference.opcode))); | ||
| 260 | 256 | ||
| 261 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); | 257 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); |
| 262 | } | 258 | } |
diff --git a/drivers/acpi/executer/exresolv.c b/drivers/acpi/executer/exresolv.c index b35f7c817acf..89571b92a522 100644 --- a/drivers/acpi/executer/exresolv.c +++ b/drivers/acpi/executer/exresolv.c | |||
| @@ -47,7 +47,6 @@ | |||
| 47 | #include <acpi/acdispat.h> | 47 | #include <acpi/acdispat.h> |
| 48 | #include <acpi/acinterp.h> | 48 | #include <acpi/acinterp.h> |
| 49 | #include <acpi/acnamesp.h> | 49 | #include <acpi/acnamesp.h> |
| 50 | #include <acpi/acparser.h> | ||
| 51 | 50 | ||
| 52 | #define _COMPONENT ACPI_EXECUTER | 51 | #define _COMPONENT ACPI_EXECUTER |
| 53 | ACPI_MODULE_NAME("exresolv") | 52 | ACPI_MODULE_NAME("exresolv") |
| @@ -141,7 +140,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 141 | acpi_status status = AE_OK; | 140 | acpi_status status = AE_OK; |
| 142 | union acpi_operand_object *stack_desc; | 141 | union acpi_operand_object *stack_desc; |
| 143 | union acpi_operand_object *obj_desc = NULL; | 142 | union acpi_operand_object *obj_desc = NULL; |
| 144 | u16 opcode; | 143 | u8 ref_type; |
| 145 | 144 | ||
| 146 | ACPI_FUNCTION_TRACE(ex_resolve_object_to_value); | 145 | ACPI_FUNCTION_TRACE(ex_resolve_object_to_value); |
| 147 | 146 | ||
| @@ -152,19 +151,19 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 152 | switch (ACPI_GET_OBJECT_TYPE(stack_desc)) { | 151 | switch (ACPI_GET_OBJECT_TYPE(stack_desc)) { |
| 153 | case ACPI_TYPE_LOCAL_REFERENCE: | 152 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 154 | 153 | ||
| 155 | opcode = stack_desc->reference.opcode; | 154 | ref_type = stack_desc->reference.class; |
| 156 | 155 | ||
| 157 | switch (opcode) { | 156 | switch (ref_type) { |
| 158 | case AML_LOCAL_OP: | 157 | case ACPI_REFCLASS_LOCAL: |
| 159 | case AML_ARG_OP: | 158 | case ACPI_REFCLASS_ARG: |
| 160 | 159 | ||
| 161 | /* | 160 | /* |
| 162 | * Get the local from the method's state info | 161 | * Get the local from the method's state info |
| 163 | * Note: this increments the local's object reference count | 162 | * Note: this increments the local's object reference count |
| 164 | */ | 163 | */ |
| 165 | status = acpi_ds_method_data_get_value(opcode, | 164 | status = acpi_ds_method_data_get_value(ref_type, |
| 166 | stack_desc-> | 165 | stack_desc-> |
| 167 | reference.offset, | 166 | reference.value, |
| 168 | walk_state, | 167 | walk_state, |
| 169 | &obj_desc); | 168 | &obj_desc); |
| 170 | if (ACPI_FAILURE(status)) { | 169 | if (ACPI_FAILURE(status)) { |
| @@ -173,7 +172,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 173 | 172 | ||
| 174 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, | 173 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 175 | "[Arg/Local %X] ValueObj is %p\n", | 174 | "[Arg/Local %X] ValueObj is %p\n", |
| 176 | stack_desc->reference.offset, | 175 | stack_desc->reference.value, |
| 177 | obj_desc)); | 176 | obj_desc)); |
| 178 | 177 | ||
| 179 | /* | 178 | /* |
| @@ -184,7 +183,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 184 | *stack_ptr = obj_desc; | 183 | *stack_ptr = obj_desc; |
| 185 | break; | 184 | break; |
| 186 | 185 | ||
| 187 | case AML_INDEX_OP: | 186 | case ACPI_REFCLASS_INDEX: |
| 188 | 187 | ||
| 189 | switch (stack_desc->reference.target_type) { | 188 | switch (stack_desc->reference.target_type) { |
| 190 | case ACPI_TYPE_BUFFER_FIELD: | 189 | case ACPI_TYPE_BUFFER_FIELD: |
| @@ -239,15 +238,15 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 239 | } | 238 | } |
| 240 | break; | 239 | break; |
| 241 | 240 | ||
| 242 | case AML_REF_OF_OP: | 241 | case ACPI_REFCLASS_REFOF: |
| 243 | case AML_DEBUG_OP: | 242 | case ACPI_REFCLASS_DEBUG: |
| 244 | case AML_LOAD_OP: | 243 | case ACPI_REFCLASS_TABLE: |
| 245 | 244 | ||
| 246 | /* Just leave the object as-is, do not dereference */ | 245 | /* Just leave the object as-is, do not dereference */ |
| 247 | 246 | ||
| 248 | break; | 247 | break; |
| 249 | 248 | ||
| 250 | case AML_INT_NAMEPATH_OP: /* Reference to a named object */ | 249 | case ACPI_REFCLASS_NAME: /* Reference to a named object */ |
| 251 | 250 | ||
| 252 | /* Dereference the name */ | 251 | /* Dereference the name */ |
| 253 | 252 | ||
| @@ -273,8 +272,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr, | |||
| 273 | default: | 272 | default: |
| 274 | 273 | ||
| 275 | ACPI_ERROR((AE_INFO, | 274 | ACPI_ERROR((AE_INFO, |
| 276 | "Unknown Reference opcode %X (%s) in %p", | 275 | "Unknown Reference type %X in %p", ref_type, |
| 277 | opcode, acpi_ps_get_opcode_name(opcode), | ||
| 278 | stack_desc)); | 276 | stack_desc)); |
| 279 | status = AE_AML_INTERNAL; | 277 | status = AE_AML_INTERNAL; |
| 280 | break; | 278 | break; |
| @@ -388,13 +386,13 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 388 | * traversing the list of possibly many nested references. | 386 | * traversing the list of possibly many nested references. |
| 389 | */ | 387 | */ |
| 390 | while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) { | 388 | while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) { |
| 391 | switch (obj_desc->reference.opcode) { | 389 | switch (obj_desc->reference.class) { |
| 392 | case AML_REF_OF_OP: | 390 | case ACPI_REFCLASS_REFOF: |
| 393 | case AML_INT_NAMEPATH_OP: | 391 | case ACPI_REFCLASS_NAME: |
| 394 | 392 | ||
| 395 | /* Dereference the reference pointer */ | 393 | /* Dereference the reference pointer */ |
| 396 | 394 | ||
| 397 | if (obj_desc->reference.opcode == AML_REF_OF_OP) { | 395 | if (obj_desc->reference.class == ACPI_REFCLASS_REFOF) { |
| 398 | node = obj_desc->reference.object; | 396 | node = obj_desc->reference.object; |
| 399 | } else { /* AML_INT_NAMEPATH_OP */ | 397 | } else { /* AML_INT_NAMEPATH_OP */ |
| 400 | 398 | ||
| @@ -429,7 +427,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 429 | } | 427 | } |
| 430 | break; | 428 | break; |
| 431 | 429 | ||
| 432 | case AML_INDEX_OP: | 430 | case ACPI_REFCLASS_INDEX: |
| 433 | 431 | ||
| 434 | /* Get the type of this reference (index into another object) */ | 432 | /* Get the type of this reference (index into another object) */ |
| 435 | 433 | ||
| @@ -455,22 +453,22 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 455 | } | 453 | } |
| 456 | break; | 454 | break; |
| 457 | 455 | ||
| 458 | case AML_LOAD_OP: | 456 | case ACPI_REFCLASS_TABLE: |
| 459 | 457 | ||
| 460 | type = ACPI_TYPE_DDB_HANDLE; | 458 | type = ACPI_TYPE_DDB_HANDLE; |
| 461 | goto exit; | 459 | goto exit; |
| 462 | 460 | ||
| 463 | case AML_LOCAL_OP: | 461 | case ACPI_REFCLASS_LOCAL: |
| 464 | case AML_ARG_OP: | 462 | case ACPI_REFCLASS_ARG: |
| 465 | 463 | ||
| 466 | if (return_desc) { | 464 | if (return_desc) { |
| 467 | status = | 465 | status = |
| 468 | acpi_ds_method_data_get_value(obj_desc-> | 466 | acpi_ds_method_data_get_value(obj_desc-> |
| 469 | reference. | 467 | reference. |
| 470 | opcode, | 468 | class, |
| 471 | obj_desc-> | 469 | obj_desc-> |
| 472 | reference. | 470 | reference. |
| 473 | offset, | 471 | value, |
| 474 | walk_state, | 472 | walk_state, |
| 475 | &obj_desc); | 473 | &obj_desc); |
| 476 | if (ACPI_FAILURE(status)) { | 474 | if (ACPI_FAILURE(status)) { |
| @@ -481,10 +479,10 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 481 | status = | 479 | status = |
| 482 | acpi_ds_method_data_get_node(obj_desc-> | 480 | acpi_ds_method_data_get_node(obj_desc-> |
| 483 | reference. | 481 | reference. |
| 484 | opcode, | 482 | class, |
| 485 | obj_desc-> | 483 | obj_desc-> |
| 486 | reference. | 484 | reference. |
| 487 | offset, | 485 | value, |
| 488 | walk_state, | 486 | walk_state, |
| 489 | &node); | 487 | &node); |
| 490 | if (ACPI_FAILURE(status)) { | 488 | if (ACPI_FAILURE(status)) { |
| @@ -499,7 +497,7 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 499 | } | 497 | } |
| 500 | break; | 498 | break; |
| 501 | 499 | ||
| 502 | case AML_DEBUG_OP: | 500 | case ACPI_REFCLASS_DEBUG: |
| 503 | 501 | ||
| 504 | /* The Debug Object is of type "DebugObject" */ | 502 | /* The Debug Object is of type "DebugObject" */ |
| 505 | 503 | ||
| @@ -509,8 +507,8 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, | |||
| 509 | default: | 507 | default: |
| 510 | 508 | ||
| 511 | ACPI_ERROR((AE_INFO, | 509 | ACPI_ERROR((AE_INFO, |
| 512 | "Unknown Reference subtype %X", | 510 | "Unknown Reference Class %2.2X", |
| 513 | obj_desc->reference.opcode)); | 511 | obj_desc->reference.class)); |
| 514 | return_ACPI_STATUS(AE_AML_INTERNAL); | 512 | return_ACPI_STATUS(AE_AML_INTERNAL); |
| 515 | } | 513 | } |
| 516 | } | 514 | } |
diff --git a/drivers/acpi/executer/exresop.c b/drivers/acpi/executer/exresop.c index 54085f16ec28..0bb82593da72 100644 --- a/drivers/acpi/executer/exresop.c +++ b/drivers/acpi/executer/exresop.c | |||
| @@ -225,41 +225,36 @@ acpi_ex_resolve_operands(u16 opcode, | |||
| 225 | 225 | ||
| 226 | if (object_type == (u8) ACPI_TYPE_LOCAL_REFERENCE) { | 226 | if (object_type == (u8) ACPI_TYPE_LOCAL_REFERENCE) { |
| 227 | 227 | ||
| 228 | /* Decode the Reference */ | 228 | /* Validate the Reference */ |
| 229 | 229 | ||
| 230 | op_info = acpi_ps_get_opcode_info(opcode); | 230 | switch (obj_desc->reference.class) { |
| 231 | if (op_info->class == AML_CLASS_UNKNOWN) { | 231 | case ACPI_REFCLASS_DEBUG: |
| 232 | return_ACPI_STATUS(AE_AML_BAD_OPCODE); | ||
| 233 | } | ||
| 234 | 232 | ||
| 235 | switch (obj_desc->reference.opcode) { | ||
| 236 | case AML_DEBUG_OP: | ||
| 237 | target_op = AML_DEBUG_OP; | 233 | target_op = AML_DEBUG_OP; |
| 238 | 234 | ||
| 239 | /*lint -fallthrough */ | 235 | /*lint -fallthrough */ |
| 240 | 236 | ||
| 241 | case AML_INDEX_OP: | 237 | case ACPI_REFCLASS_ARG: |
| 242 | case AML_REF_OF_OP: | 238 | case ACPI_REFCLASS_LOCAL: |
| 243 | case AML_ARG_OP: | 239 | case ACPI_REFCLASS_INDEX: |
| 244 | case AML_LOCAL_OP: | 240 | case ACPI_REFCLASS_REFOF: |
| 245 | case AML_LOAD_OP: /* ddb_handle from LOAD_OP or LOAD_TABLE_OP */ | 241 | case ACPI_REFCLASS_TABLE: /* ddb_handle from LOAD_OP or LOAD_TABLE_OP */ |
| 246 | case AML_INT_NAMEPATH_OP: /* Reference to a named object */ | 242 | case ACPI_REFCLASS_NAME: /* Reference to a named object */ |
| 247 | 243 | ||
| 248 | ACPI_DEBUG_ONLY_MEMBERS(ACPI_DEBUG_PRINT | 244 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, |
| 249 | ((ACPI_DB_EXEC, | 245 | "Operand is a Reference, Class [%s] %2.2X\n", |
| 250 | "Operand is a Reference, RefOpcode [%s]\n", | 246 | acpi_ut_get_reference_name |
| 251 | (acpi_ps_get_opcode_info | 247 | (obj_desc), |
| 252 | (obj_desc-> | 248 | obj_desc->reference. |
| 253 | reference. | 249 | class)); |
| 254 | opcode))-> | ||
| 255 | name))); | ||
| 256 | break; | 250 | break; |
| 257 | 251 | ||
| 258 | default: | 252 | default: |
| 253 | |||
| 259 | ACPI_ERROR((AE_INFO, | 254 | ACPI_ERROR((AE_INFO, |
| 260 | "Operand is a Reference, Unknown Reference Opcode: %X", | 255 | "Unknown Reference Class %2.2X in %p", |
| 261 | obj_desc->reference. | 256 | obj_desc->reference.class, |
| 262 | opcode)); | 257 | obj_desc)); |
| 263 | 258 | ||
| 264 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); | 259 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); |
| 265 | } | 260 | } |
| @@ -270,8 +265,7 @@ acpi_ex_resolve_operands(u16 opcode, | |||
| 270 | 265 | ||
| 271 | /* Invalid descriptor */ | 266 | /* Invalid descriptor */ |
| 272 | 267 | ||
| 273 | ACPI_ERROR((AE_INFO, | 268 | ACPI_ERROR((AE_INFO, "Invalid descriptor %p [%s]", |
| 274 | "Invalid descriptor %p [%s]", | ||
| 275 | obj_desc, | 269 | obj_desc, |
| 276 | acpi_ut_get_descriptor_name(obj_desc))); | 270 | acpi_ut_get_descriptor_name(obj_desc))); |
| 277 | 271 | ||
| @@ -343,7 +337,7 @@ acpi_ex_resolve_operands(u16 opcode, | |||
| 343 | if ((opcode == AML_STORE_OP) && | 337 | if ((opcode == AML_STORE_OP) && |
| 344 | (ACPI_GET_OBJECT_TYPE(*stack_ptr) == | 338 | (ACPI_GET_OBJECT_TYPE(*stack_ptr) == |
| 345 | ACPI_TYPE_LOCAL_REFERENCE) | 339 | ACPI_TYPE_LOCAL_REFERENCE) |
| 346 | && ((*stack_ptr)->reference.opcode == AML_INDEX_OP)) { | 340 | && ((*stack_ptr)->reference.class == ACPI_REFCLASS_INDEX)) { |
| 347 | goto next_operand; | 341 | goto next_operand; |
| 348 | } | 342 | } |
| 349 | break; | 343 | break; |
diff --git a/drivers/acpi/executer/exstore.c b/drivers/acpi/executer/exstore.c index 38b55e352495..3318df4cbd98 100644 --- a/drivers/acpi/executer/exstore.c +++ b/drivers/acpi/executer/exstore.c | |||
| @@ -47,7 +47,6 @@ | |||
| 47 | #include <acpi/acinterp.h> | 47 | #include <acpi/acinterp.h> |
| 48 | #include <acpi/amlcode.h> | 48 | #include <acpi/amlcode.h> |
| 49 | #include <acpi/acnamesp.h> | 49 | #include <acpi/acnamesp.h> |
| 50 | #include <acpi/acparser.h> | ||
| 51 | 50 | ||
| 52 | #define _COMPONENT ACPI_EXECUTER | 51 | #define _COMPONENT ACPI_EXECUTER |
| 53 | ACPI_MODULE_NAME("exstore") | 52 | ACPI_MODULE_NAME("exstore") |
| @@ -179,22 +178,26 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc, | |||
| 179 | 178 | ||
| 180 | case ACPI_TYPE_LOCAL_REFERENCE: | 179 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 181 | 180 | ||
| 182 | if (source_desc->reference.opcode == AML_INDEX_OP) { | 181 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[%s] ", |
| 183 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, | 182 | acpi_ut_get_reference_name(source_desc))); |
| 184 | "[%s, 0x%X]\n", | 183 | |
| 185 | acpi_ps_get_opcode_name | 184 | /* Decode the reference */ |
| 186 | (source_desc->reference.opcode), | 185 | |
| 187 | source_desc->reference.offset)); | 186 | switch (source_desc->reference.class) { |
| 188 | } else { | 187 | case ACPI_REFCLASS_INDEX: |
| 189 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[%s]", | 188 | |
| 190 | acpi_ps_get_opcode_name | 189 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "0x%X\n", |
| 191 | (source_desc->reference.opcode))); | 190 | source_desc->reference.value)); |
| 192 | } | 191 | break; |
| 192 | |||
| 193 | case ACPI_REFCLASS_TABLE: | ||
| 193 | 194 | ||
| 194 | if (source_desc->reference.opcode == AML_LOAD_OP) { /* Load and load_table */ | ||
| 195 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, | 195 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, |
| 196 | " Table OwnerId %p\n", | 196 | "Table Index 0x%X\n", |
| 197 | source_desc->reference.object)); | 197 | source_desc->reference.value)); |
| 198 | break; | ||
| 199 | |||
| 200 | default: | ||
| 198 | break; | 201 | break; |
| 199 | } | 202 | } |
| 200 | 203 | ||
| @@ -347,15 +350,15 @@ acpi_ex_store(union acpi_operand_object *source_desc, | |||
| 347 | } | 350 | } |
| 348 | 351 | ||
| 349 | /* | 352 | /* |
| 350 | * Examine the Reference opcode. These cases are handled: | 353 | * Examine the Reference class. These cases are handled: |
| 351 | * | 354 | * |
| 352 | * 1) Store to Name (Change the object associated with a name) | 355 | * 1) Store to Name (Change the object associated with a name) |
| 353 | * 2) Store to an indexed area of a Buffer or Package | 356 | * 2) Store to an indexed area of a Buffer or Package |
| 354 | * 3) Store to a Method Local or Arg | 357 | * 3) Store to a Method Local or Arg |
| 355 | * 4) Store to the debug object | 358 | * 4) Store to the debug object |
| 356 | */ | 359 | */ |
| 357 | switch (ref_desc->reference.opcode) { | 360 | switch (ref_desc->reference.class) { |
| 358 | case AML_REF_OF_OP: | 361 | case ACPI_REFCLASS_REFOF: |
| 359 | 362 | ||
| 360 | /* Storing an object into a Name "container" */ | 363 | /* Storing an object into a Name "container" */ |
| 361 | 364 | ||
| @@ -365,7 +368,7 @@ acpi_ex_store(union acpi_operand_object *source_desc, | |||
| 365 | ACPI_IMPLICIT_CONVERSION); | 368 | ACPI_IMPLICIT_CONVERSION); |
| 366 | break; | 369 | break; |
| 367 | 370 | ||
| 368 | case AML_INDEX_OP: | 371 | case ACPI_REFCLASS_INDEX: |
| 369 | 372 | ||
| 370 | /* Storing to an Index (pointer into a packager or buffer) */ | 373 | /* Storing to an Index (pointer into a packager or buffer) */ |
| 371 | 374 | ||
| @@ -374,18 +377,18 @@ acpi_ex_store(union acpi_operand_object *source_desc, | |||
| 374 | walk_state); | 377 | walk_state); |
| 375 | break; | 378 | break; |
| 376 | 379 | ||
| 377 | case AML_LOCAL_OP: | 380 | case ACPI_REFCLASS_LOCAL: |
| 378 | case AML_ARG_OP: | 381 | case ACPI_REFCLASS_ARG: |
| 379 | 382 | ||
| 380 | /* Store to a method local/arg */ | 383 | /* Store to a method local/arg */ |
| 381 | 384 | ||
| 382 | status = | 385 | status = |
| 383 | acpi_ds_store_object_to_local(ref_desc->reference.opcode, | 386 | acpi_ds_store_object_to_local(ref_desc->reference.class, |
| 384 | ref_desc->reference.offset, | 387 | ref_desc->reference.value, |
| 385 | source_desc, walk_state); | 388 | source_desc, walk_state); |
| 386 | break; | 389 | break; |
| 387 | 390 | ||
| 388 | case AML_DEBUG_OP: | 391 | case ACPI_REFCLASS_DEBUG: |
| 389 | 392 | ||
| 390 | /* | 393 | /* |
| 391 | * Storing to the Debug object causes the value stored to be | 394 | * Storing to the Debug object causes the value stored to be |
| @@ -401,9 +404,9 @@ acpi_ex_store(union acpi_operand_object *source_desc, | |||
| 401 | 404 | ||
| 402 | default: | 405 | default: |
| 403 | 406 | ||
| 404 | ACPI_ERROR((AE_INFO, "Unknown Reference opcode %X", | 407 | ACPI_ERROR((AE_INFO, "Unknown Reference Class %2.2X", |
| 405 | ref_desc->reference.opcode)); | 408 | ref_desc->reference.class)); |
| 406 | ACPI_DUMP_ENTRY(ref_desc, ACPI_LV_ERROR); | 409 | ACPI_DUMP_ENTRY(ref_desc, ACPI_LV_INFO); |
| 407 | 410 | ||
| 408 | status = AE_AML_INTERNAL; | 411 | status = AE_AML_INTERNAL; |
| 409 | break; | 412 | break; |
| @@ -458,7 +461,7 @@ acpi_ex_store_object_to_index(union acpi_operand_object *source_desc, | |||
| 458 | 461 | ||
| 459 | if (ACPI_GET_OBJECT_TYPE(source_desc) == | 462 | if (ACPI_GET_OBJECT_TYPE(source_desc) == |
| 460 | ACPI_TYPE_LOCAL_REFERENCE | 463 | ACPI_TYPE_LOCAL_REFERENCE |
| 461 | && source_desc->reference.opcode == AML_LOAD_OP) { | 464 | && source_desc->reference.class == ACPI_REFCLASS_TABLE) { |
| 462 | 465 | ||
| 463 | /* This is a DDBHandle, just add a reference to it */ | 466 | /* This is a DDBHandle, just add a reference to it */ |
| 464 | 467 | ||
| @@ -553,7 +556,7 @@ acpi_ex_store_object_to_index(union acpi_operand_object *source_desc, | |||
| 553 | 556 | ||
| 554 | /* Store the source value into the target buffer byte */ | 557 | /* Store the source value into the target buffer byte */ |
| 555 | 558 | ||
| 556 | obj_desc->buffer.pointer[index_desc->reference.offset] = value; | 559 | obj_desc->buffer.pointer[index_desc->reference.value] = value; |
| 557 | break; | 560 | break; |
| 558 | 561 | ||
| 559 | default: | 562 | default: |
diff --git a/drivers/acpi/executer/exstoren.c b/drivers/acpi/executer/exstoren.c index a6d2168b81f9..eef61a00803e 100644 --- a/drivers/acpi/executer/exstoren.c +++ b/drivers/acpi/executer/exstoren.c | |||
| @@ -121,7 +121,8 @@ acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr, | |||
| 121 | (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_STRING) && | 121 | (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_STRING) && |
| 122 | !((ACPI_GET_OBJECT_TYPE(source_desc) == | 122 | !((ACPI_GET_OBJECT_TYPE(source_desc) == |
| 123 | ACPI_TYPE_LOCAL_REFERENCE) | 123 | ACPI_TYPE_LOCAL_REFERENCE) |
| 124 | && (source_desc->reference.opcode == AML_LOAD_OP))) { | 124 | && (source_desc->reference.class == |
| 125 | ACPI_REFCLASS_TABLE))) { | ||
| 125 | 126 | ||
| 126 | /* Conversion successful but still not a valid type */ | 127 | /* Conversion successful but still not a valid type */ |
| 127 | 128 | ||
