aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/executer
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/executer')
-rw-r--r--drivers/acpi/executer/exconfig.c123
-rw-r--r--drivers/acpi/executer/exconvrt.c32
-rw-r--r--drivers/acpi/executer/exdump.c87
-rw-r--r--drivers/acpi/executer/exmisc.c14
-rw-r--r--drivers/acpi/executer/exoparg1.c26
-rw-r--r--drivers/acpi/executer/exoparg2.c4
-rw-r--r--drivers/acpi/executer/exresnte.c16
-rw-r--r--drivers/acpi/executer/exresolv.c60
-rw-r--r--drivers/acpi/executer/exresop.c50
-rw-r--r--drivers/acpi/executer/exstore.c61
-rw-r--r--drivers/acpi/executer/exstoren.c3
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
51ACPI_MODULE_NAME("exdump") 50ACPI_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
217static struct acpi_exdump_info acpi_ex_dump_reference[7] = { 216static 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
53ACPI_MODULE_NAME("exresnte") 51ACPI_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
53ACPI_MODULE_NAME("exresolv") 52ACPI_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
53ACPI_MODULE_NAME("exstore") 52ACPI_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