diff options
author | Robert Moore <robert.moore@intel.com> | 2005-05-13 00:00:00 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-07-13 16:29:07 -0400 |
commit | 6f42ccf2fc50ecee8ea170040627f268430c1648 (patch) | |
tree | 5b6690d86adfc17e7960b2e113855079fe19c541 /drivers/acpi | |
parent | d8683a0cb5d09cb7f19feefa708424a84577e68f (diff) |
ACPICA from Bob Moore <robert.moore@intel.com>
Implemented support for PCI Express root bridges
-- added support for device PNP0A08 in the root
bridge search within AcpiEvPciConfigRegionSetup.
acpi_ev_pci_config_region_setup().
The interpreter now automatically truncates incoming
64-bit constants to 32 bits if currently executing out
of a 32-bit ACPI table (Revision < 2). This also affects
the iASL compiler constant folding. (Note: as per below,
the iASL compiler no longer allows 64-bit constants within
32-bit tables.)
Fixed a problem where string and buffer objects with
"static" pointers (pointers to initialization data within
an ACPI table) were not handled consistently. The internal
object copy operation now always copies the data to a newly
allocated buffer, regardless of whether the source object
is static or not.
Fixed a problem with the FromBCD operator where an
implicit result conversion was improperly performed while
storing the result to the target operand. Since this is an
"explicit conversion" operator, the implicit conversion
should never be performed on the output.
Fixed a problem with the CopyObject operator where a copy
to an existing named object did not always completely
overwrite the existing object stored at name. Specifically,
a buffer-to-buffer copy did not delete the existing buffer.
Replaced "interrupt_level" with "interrupt_number" in all
GPE interfaces and structs for consistency.
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/dispatcher/dsobject.c | 3 | ||||
-rw-r--r-- | drivers/acpi/dispatcher/dswstate.c | 4 | ||||
-rw-r--r-- | drivers/acpi/events/evgpeblk.c | 36 | ||||
-rw-r--r-- | drivers/acpi/events/evrgnini.c | 10 | ||||
-rw-r--r-- | drivers/acpi/events/evxfevnt.c | 6 | ||||
-rw-r--r-- | drivers/acpi/executer/exdump.c | 14 | ||||
-rw-r--r-- | drivers/acpi/executer/exstore.c | 4 | ||||
-rw-r--r-- | drivers/acpi/executer/exstoren.c | 4 | ||||
-rw-r--r-- | drivers/acpi/namespace/nsdump.c | 31 | ||||
-rw-r--r-- | drivers/acpi/parser/psopcode.c | 2 | ||||
-rw-r--r-- | drivers/acpi/resources/rsdump.c | 4 | ||||
-rw-r--r-- | drivers/acpi/utilities/utcopy.c | 46 |
12 files changed, 80 insertions, 84 deletions
diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c index bfbae4e4c667..1eee2d54180f 100644 --- a/drivers/acpi/dispatcher/dsobject.c +++ b/drivers/acpi/dispatcher/dsobject.c | |||
@@ -547,6 +547,9 @@ acpi_ds_init_object_from_op ( | |||
547 | case AML_TYPE_LITERAL: | 547 | case AML_TYPE_LITERAL: |
548 | 548 | ||
549 | obj_desc->integer.value = op->common.value.integer; | 549 | obj_desc->integer.value = op->common.value.integer; |
550 | #ifndef ACPI_NO_METHOD_EXECUTION | ||
551 | acpi_ex_truncate_for32bit_table (obj_desc); | ||
552 | #endif | ||
550 | break; | 553 | break; |
551 | 554 | ||
552 | 555 | ||
diff --git a/drivers/acpi/dispatcher/dswstate.c b/drivers/acpi/dispatcher/dswstate.c index 9cd3db652b31..4ef0e85c677b 100644 --- a/drivers/acpi/dispatcher/dswstate.c +++ b/drivers/acpi/dispatcher/dswstate.c | |||
@@ -261,12 +261,12 @@ acpi_ds_result_pop_from_bottom ( | |||
261 | 261 | ||
262 | if (!*object) { | 262 | if (!*object) { |
263 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, | 263 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, |
264 | "Null operand! State=%p #Ops=%X, Index=%X\n", | 264 | "Null operand! State=%p #Ops=%X Index=%X\n", |
265 | walk_state, state->results.num_results, (u32) index)); | 265 | walk_state, state->results.num_results, (u32) index)); |
266 | return (AE_AML_NO_RETURN_VALUE); | 266 | return (AE_AML_NO_RETURN_VALUE); |
267 | } | 267 | } |
268 | 268 | ||
269 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s], Results=%p State=%p\n", | 269 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Results=%p State=%p\n", |
270 | *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", | 270 | *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", |
271 | state, walk_state)); | 271 | state, walk_state)); |
272 | 272 | ||
diff --git a/drivers/acpi/events/evgpeblk.c b/drivers/acpi/events/evgpeblk.c index 84186a7d17b2..ee5419b8f1b1 100644 --- a/drivers/acpi/events/evgpeblk.c +++ b/drivers/acpi/events/evgpeblk.c | |||
@@ -66,7 +66,7 @@ acpi_ev_match_prw_and_gpe ( | |||
66 | 66 | ||
67 | static struct acpi_gpe_xrupt_info * | 67 | static struct acpi_gpe_xrupt_info * |
68 | acpi_ev_get_gpe_xrupt_block ( | 68 | acpi_ev_get_gpe_xrupt_block ( |
69 | u32 interrupt_level); | 69 | u32 interrupt_number); |
70 | 70 | ||
71 | static acpi_status | 71 | static acpi_status |
72 | acpi_ev_delete_gpe_xrupt ( | 72 | acpi_ev_delete_gpe_xrupt ( |
@@ -75,7 +75,7 @@ acpi_ev_delete_gpe_xrupt ( | |||
75 | static acpi_status | 75 | static acpi_status |
76 | acpi_ev_install_gpe_block ( | 76 | acpi_ev_install_gpe_block ( |
77 | struct acpi_gpe_block_info *gpe_block, | 77 | struct acpi_gpe_block_info *gpe_block, |
78 | u32 interrupt_level); | 78 | u32 interrupt_number); |
79 | 79 | ||
80 | static acpi_status | 80 | static acpi_status |
81 | acpi_ev_create_gpe_info_blocks ( | 81 | acpi_ev_create_gpe_info_blocks ( |
@@ -482,7 +482,7 @@ cleanup: | |||
482 | * | 482 | * |
483 | * FUNCTION: acpi_ev_get_gpe_xrupt_block | 483 | * FUNCTION: acpi_ev_get_gpe_xrupt_block |
484 | * | 484 | * |
485 | * PARAMETERS: interrupt_level - Interrupt for a GPE block | 485 | * PARAMETERS: interrupt_number - Interrupt for a GPE block |
486 | * | 486 | * |
487 | * RETURN: A GPE interrupt block | 487 | * RETURN: A GPE interrupt block |
488 | * | 488 | * |
@@ -495,7 +495,7 @@ cleanup: | |||
495 | 495 | ||
496 | static struct acpi_gpe_xrupt_info * | 496 | static struct acpi_gpe_xrupt_info * |
497 | acpi_ev_get_gpe_xrupt_block ( | 497 | acpi_ev_get_gpe_xrupt_block ( |
498 | u32 interrupt_level) | 498 | u32 interrupt_number) |
499 | { | 499 | { |
500 | struct acpi_gpe_xrupt_info *next_gpe_xrupt; | 500 | struct acpi_gpe_xrupt_info *next_gpe_xrupt; |
501 | struct acpi_gpe_xrupt_info *gpe_xrupt; | 501 | struct acpi_gpe_xrupt_info *gpe_xrupt; |
@@ -509,7 +509,7 @@ acpi_ev_get_gpe_xrupt_block ( | |||
509 | 509 | ||
510 | next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head; | 510 | next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head; |
511 | while (next_gpe_xrupt) { | 511 | while (next_gpe_xrupt) { |
512 | if (next_gpe_xrupt->interrupt_level == interrupt_level) { | 512 | if (next_gpe_xrupt->interrupt_number == interrupt_number) { |
513 | return_PTR (next_gpe_xrupt); | 513 | return_PTR (next_gpe_xrupt); |
514 | } | 514 | } |
515 | 515 | ||
@@ -523,7 +523,7 @@ acpi_ev_get_gpe_xrupt_block ( | |||
523 | return_PTR (NULL); | 523 | return_PTR (NULL); |
524 | } | 524 | } |
525 | 525 | ||
526 | gpe_xrupt->interrupt_level = interrupt_level; | 526 | gpe_xrupt->interrupt_number = interrupt_number; |
527 | 527 | ||
528 | /* Install new interrupt descriptor with spin lock */ | 528 | /* Install new interrupt descriptor with spin lock */ |
529 | 529 | ||
@@ -544,13 +544,13 @@ acpi_ev_get_gpe_xrupt_block ( | |||
544 | 544 | ||
545 | /* Install new interrupt handler if not SCI_INT */ | 545 | /* Install new interrupt handler if not SCI_INT */ |
546 | 546 | ||
547 | if (interrupt_level != acpi_gbl_FADT->sci_int) { | 547 | if (interrupt_number != acpi_gbl_FADT->sci_int) { |
548 | status = acpi_os_install_interrupt_handler (interrupt_level, | 548 | status = acpi_os_install_interrupt_handler (interrupt_number, |
549 | acpi_ev_gpe_xrupt_handler, gpe_xrupt); | 549 | acpi_ev_gpe_xrupt_handler, gpe_xrupt); |
550 | if (ACPI_FAILURE (status)) { | 550 | if (ACPI_FAILURE (status)) { |
551 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, | 551 | ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, |
552 | "Could not install GPE interrupt handler at level 0x%X\n", | 552 | "Could not install GPE interrupt handler at level 0x%X\n", |
553 | interrupt_level)); | 553 | interrupt_number)); |
554 | return_PTR (NULL); | 554 | return_PTR (NULL); |
555 | } | 555 | } |
556 | } | 556 | } |
@@ -584,14 +584,14 @@ acpi_ev_delete_gpe_xrupt ( | |||
584 | 584 | ||
585 | /* We never want to remove the SCI interrupt handler */ | 585 | /* We never want to remove the SCI interrupt handler */ |
586 | 586 | ||
587 | if (gpe_xrupt->interrupt_level == acpi_gbl_FADT->sci_int) { | 587 | if (gpe_xrupt->interrupt_number == acpi_gbl_FADT->sci_int) { |
588 | gpe_xrupt->gpe_block_list_head = NULL; | 588 | gpe_xrupt->gpe_block_list_head = NULL; |
589 | return_ACPI_STATUS (AE_OK); | 589 | return_ACPI_STATUS (AE_OK); |
590 | } | 590 | } |
591 | 591 | ||
592 | /* Disable this interrupt */ | 592 | /* Disable this interrupt */ |
593 | 593 | ||
594 | status = acpi_os_remove_interrupt_handler (gpe_xrupt->interrupt_level, | 594 | status = acpi_os_remove_interrupt_handler (gpe_xrupt->interrupt_number, |
595 | acpi_ev_gpe_xrupt_handler); | 595 | acpi_ev_gpe_xrupt_handler); |
596 | if (ACPI_FAILURE (status)) { | 596 | if (ACPI_FAILURE (status)) { |
597 | return_ACPI_STATUS (status); | 597 | return_ACPI_STATUS (status); |
@@ -621,7 +621,7 @@ acpi_ev_delete_gpe_xrupt ( | |||
621 | * FUNCTION: acpi_ev_install_gpe_block | 621 | * FUNCTION: acpi_ev_install_gpe_block |
622 | * | 622 | * |
623 | * PARAMETERS: gpe_block - New GPE block | 623 | * PARAMETERS: gpe_block - New GPE block |
624 | * interrupt_level - Level to be associated with this GPE block | 624 | * interrupt_number - Xrupt to be associated with this GPE block |
625 | * | 625 | * |
626 | * RETURN: Status | 626 | * RETURN: Status |
627 | * | 627 | * |
@@ -632,7 +632,7 @@ acpi_ev_delete_gpe_xrupt ( | |||
632 | static acpi_status | 632 | static acpi_status |
633 | acpi_ev_install_gpe_block ( | 633 | acpi_ev_install_gpe_block ( |
634 | struct acpi_gpe_block_info *gpe_block, | 634 | struct acpi_gpe_block_info *gpe_block, |
635 | u32 interrupt_level) | 635 | u32 interrupt_number) |
636 | { | 636 | { |
637 | struct acpi_gpe_block_info *next_gpe_block; | 637 | struct acpi_gpe_block_info *next_gpe_block; |
638 | struct acpi_gpe_xrupt_info *gpe_xrupt_block; | 638 | struct acpi_gpe_xrupt_info *gpe_xrupt_block; |
@@ -647,7 +647,7 @@ acpi_ev_install_gpe_block ( | |||
647 | return_ACPI_STATUS (status); | 647 | return_ACPI_STATUS (status); |
648 | } | 648 | } |
649 | 649 | ||
650 | gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block (interrupt_level); | 650 | gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block (interrupt_number); |
651 | if (!gpe_xrupt_block) { | 651 | if (!gpe_xrupt_block) { |
652 | status = AE_NO_MEMORY; | 652 | status = AE_NO_MEMORY; |
653 | goto unlock_and_exit; | 653 | goto unlock_and_exit; |
@@ -887,7 +887,7 @@ error_exit: | |||
887 | * gpe_block_address - Address and space_iD | 887 | * gpe_block_address - Address and space_iD |
888 | * register_count - Number of GPE register pairs in the block | 888 | * register_count - Number of GPE register pairs in the block |
889 | * gpe_block_base_number - Starting GPE number for the block | 889 | * gpe_block_base_number - Starting GPE number for the block |
890 | * interrupt_level - H/W interrupt for the block | 890 | * interrupt_number - H/W interrupt for the block |
891 | * return_gpe_block - Where the new block descriptor is returned | 891 | * return_gpe_block - Where the new block descriptor is returned |
892 | * | 892 | * |
893 | * RETURN: Status | 893 | * RETURN: Status |
@@ -902,7 +902,7 @@ acpi_ev_create_gpe_block ( | |||
902 | struct acpi_generic_address *gpe_block_address, | 902 | struct acpi_generic_address *gpe_block_address, |
903 | u32 register_count, | 903 | u32 register_count, |
904 | u8 gpe_block_base_number, | 904 | u8 gpe_block_base_number, |
905 | u32 interrupt_level, | 905 | u32 interrupt_number, |
906 | struct acpi_gpe_block_info **return_gpe_block) | 906 | struct acpi_gpe_block_info **return_gpe_block) |
907 | { | 907 | { |
908 | struct acpi_gpe_block_info *gpe_block; | 908 | struct acpi_gpe_block_info *gpe_block; |
@@ -948,7 +948,7 @@ acpi_ev_create_gpe_block ( | |||
948 | 948 | ||
949 | /* Install the new block in the global list(s) */ | 949 | /* Install the new block in the global list(s) */ |
950 | 950 | ||
951 | status = acpi_ev_install_gpe_block (gpe_block, interrupt_level); | 951 | status = acpi_ev_install_gpe_block (gpe_block, interrupt_number); |
952 | if (ACPI_FAILURE (status)) { | 952 | if (ACPI_FAILURE (status)) { |
953 | ACPI_MEM_FREE (gpe_block); | 953 | ACPI_MEM_FREE (gpe_block); |
954 | return_ACPI_STATUS (status); | 954 | return_ACPI_STATUS (status); |
@@ -1013,7 +1013,7 @@ acpi_ev_create_gpe_block ( | |||
1013 | ((gpe_block->register_count * ACPI_GPE_REGISTER_WIDTH) -1)), | 1013 | ((gpe_block->register_count * ACPI_GPE_REGISTER_WIDTH) -1)), |
1014 | gpe_device->name.ascii, | 1014 | gpe_device->name.ascii, |
1015 | gpe_block->register_count, | 1015 | gpe_block->register_count, |
1016 | interrupt_level)); | 1016 | interrupt_number)); |
1017 | 1017 | ||
1018 | /* Enable all valid GPEs found above */ | 1018 | /* Enable all valid GPEs found above */ |
1019 | 1019 | ||
diff --git a/drivers/acpi/events/evrgnini.c b/drivers/acpi/events/evrgnini.c index 95bc09c73a6a..f2d53af97610 100644 --- a/drivers/acpi/events/evrgnini.c +++ b/drivers/acpi/events/evrgnini.c | |||
@@ -218,10 +218,14 @@ acpi_ev_pci_config_region_setup ( | |||
218 | while (pci_root_node != acpi_gbl_root_node) { | 218 | while (pci_root_node != acpi_gbl_root_node) { |
219 | status = acpi_ut_execute_HID (pci_root_node, &object_hID); | 219 | status = acpi_ut_execute_HID (pci_root_node, &object_hID); |
220 | if (ACPI_SUCCESS (status)) { | 220 | if (ACPI_SUCCESS (status)) { |
221 | /* Got a valid _HID, check if this is a PCI root */ | 221 | /* |
222 | 222 | * Got a valid _HID string, check if this is a PCI root. | |
223 | * New for ACPI 3.0: check for a PCI Express root also. | ||
224 | */ | ||
223 | if (!(ACPI_STRNCMP (object_hID.value, PCI_ROOT_HID_STRING, | 225 | if (!(ACPI_STRNCMP (object_hID.value, PCI_ROOT_HID_STRING, |
224 | sizeof (PCI_ROOT_HID_STRING)))) { | 226 | sizeof (PCI_ROOT_HID_STRING)) || |
227 | !(ACPI_STRNCMP (object_hID.value, PCI_EXPRESS_ROOT_HID_STRING, | ||
228 | sizeof (PCI_EXPRESS_ROOT_HID_STRING))))) { | ||
225 | /* Install a handler for this PCI root bridge */ | 229 | /* Install a handler for this PCI root bridge */ |
226 | 230 | ||
227 | status = acpi_install_address_space_handler ((acpi_handle) pci_root_node, | 231 | status = acpi_install_address_space_handler ((acpi_handle) pci_root_node, |
diff --git a/drivers/acpi/events/evxfevnt.c b/drivers/acpi/events/evxfevnt.c index f337dc2cc569..c5f74d7b64d8 100644 --- a/drivers/acpi/events/evxfevnt.c +++ b/drivers/acpi/events/evxfevnt.c | |||
@@ -635,7 +635,7 @@ unlock_and_exit: | |||
635 | * PARAMETERS: gpe_device - Handle to the parent GPE Block Device | 635 | * PARAMETERS: gpe_device - Handle to the parent GPE Block Device |
636 | * gpe_block_address - Address and space_iD | 636 | * gpe_block_address - Address and space_iD |
637 | * register_count - Number of GPE register pairs in the block | 637 | * register_count - Number of GPE register pairs in the block |
638 | * interrupt_level - H/W interrupt for the block | 638 | * interrupt_number - H/W interrupt for the block |
639 | * | 639 | * |
640 | * RETURN: Status | 640 | * RETURN: Status |
641 | * | 641 | * |
@@ -648,7 +648,7 @@ acpi_install_gpe_block ( | |||
648 | acpi_handle gpe_device, | 648 | acpi_handle gpe_device, |
649 | struct acpi_generic_address *gpe_block_address, | 649 | struct acpi_generic_address *gpe_block_address, |
650 | u32 register_count, | 650 | u32 register_count, |
651 | u32 interrupt_level) | 651 | u32 interrupt_number) |
652 | { | 652 | { |
653 | acpi_status status; | 653 | acpi_status status; |
654 | union acpi_operand_object *obj_desc; | 654 | union acpi_operand_object *obj_desc; |
@@ -681,7 +681,7 @@ acpi_install_gpe_block ( | |||
681 | * is always zero | 681 | * is always zero |
682 | */ | 682 | */ |
683 | status = acpi_ev_create_gpe_block (node, gpe_block_address, register_count, | 683 | status = acpi_ev_create_gpe_block (node, gpe_block_address, register_count, |
684 | 0, interrupt_level, &gpe_block); | 684 | 0, interrupt_number, &gpe_block); |
685 | if (ACPI_FAILURE (status)) { | 685 | if (ACPI_FAILURE (status)) { |
686 | goto unlock_and_exit; | 686 | goto unlock_and_exit; |
687 | } | 687 | } |
diff --git a/drivers/acpi/executer/exdump.c b/drivers/acpi/executer/exdump.c index 408500648114..ae6cad85e015 100644 --- a/drivers/acpi/executer/exdump.c +++ b/drivers/acpi/executer/exdump.c | |||
@@ -51,6 +51,11 @@ | |||
51 | #define _COMPONENT ACPI_EXECUTER | 51 | #define _COMPONENT ACPI_EXECUTER |
52 | ACPI_MODULE_NAME ("exdump") | 52 | ACPI_MODULE_NAME ("exdump") |
53 | 53 | ||
54 | /* | ||
55 | * The following routines are used for debug output only | ||
56 | */ | ||
57 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
58 | |||
54 | /* Local prototypes */ | 59 | /* Local prototypes */ |
55 | 60 | ||
56 | #ifdef ACPI_FUTURE_USAGE | 61 | #ifdef ACPI_FUTURE_USAGE |
@@ -76,11 +81,6 @@ acpi_ex_out_address ( | |||
76 | #endif /* ACPI_FUTURE_USAGE */ | 81 | #endif /* ACPI_FUTURE_USAGE */ |
77 | 82 | ||
78 | 83 | ||
79 | /* | ||
80 | * The following routines are used for debug output only | ||
81 | */ | ||
82 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
83 | |||
84 | /******************************************************************************* | 84 | /******************************************************************************* |
85 | * | 85 | * |
86 | * FUNCTION: acpi_ex_dump_operand | 86 | * FUNCTION: acpi_ex_dump_operand |
@@ -118,7 +118,7 @@ acpi_ex_dump_operand ( | |||
118 | } | 118 | } |
119 | 119 | ||
120 | if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) { | 120 | if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) { |
121 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is a NS Node: ", obj_desc)); | 121 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", obj_desc)); |
122 | ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC); | 122 | ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC); |
123 | return; | 123 | return; |
124 | } | 124 | } |
@@ -467,7 +467,7 @@ acpi_ex_dump_operands ( | |||
467 | } | 467 | } |
468 | 468 | ||
469 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, | 469 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, |
470 | "************* Stack dump from %s(%d), %s\n", | 470 | "************* Operand Stack dump from %s(%d), %s\n", |
471 | module_name, line_number, note)); | 471 | module_name, line_number, note)); |
472 | return; | 472 | return; |
473 | } | 473 | } |
diff --git a/drivers/acpi/executer/exstore.c b/drivers/acpi/executer/exstore.c index 2725db0901b8..763ffeea8503 100644 --- a/drivers/acpi/executer/exstore.c +++ b/drivers/acpi/executer/exstore.c | |||
@@ -574,7 +574,7 @@ acpi_ex_store_object_to_node ( | |||
574 | 574 | ||
575 | /* If no implicit conversion, drop into the default case below */ | 575 | /* If no implicit conversion, drop into the default case below */ |
576 | 576 | ||
577 | if (!implicit_conversion) { | 577 | if ((!implicit_conversion) || (walk_state->opcode == AML_COPY_OP)) { |
578 | /* Force execution of default (no implicit conversion) */ | 578 | /* Force execution of default (no implicit conversion) */ |
579 | 579 | ||
580 | target_type = ACPI_TYPE_ANY; | 580 | target_type = ACPI_TYPE_ANY; |
@@ -634,7 +634,7 @@ acpi_ex_store_object_to_node ( | |||
634 | default: | 634 | default: |
635 | 635 | ||
636 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, | 636 | ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, |
637 | "Storing %s (%p) directly into node (%p), no implicit conversion\n", | 637 | "Storing %s (%p) directly into node (%p) with no implicit conversion\n", |
638 | acpi_ut_get_object_type_name (source_desc), source_desc, node)); | 638 | acpi_ut_get_object_type_name (source_desc), source_desc, node)); |
639 | 639 | ||
640 | /* No conversions for all other types. Just attach the source object */ | 640 | /* No conversions for all other types. Just attach the source object */ |
diff --git a/drivers/acpi/executer/exstoren.c b/drivers/acpi/executer/exstoren.c index 120f30ed0bd4..433588ab432a 100644 --- a/drivers/acpi/executer/exstoren.c +++ b/drivers/acpi/executer/exstoren.c | |||
@@ -265,10 +265,6 @@ acpi_ex_store_object_to_object ( | |||
265 | 265 | ||
266 | case ACPI_TYPE_BUFFER: | 266 | case ACPI_TYPE_BUFFER: |
267 | 267 | ||
268 | /* | ||
269 | * Note: There is different store behavior depending on the original | ||
270 | * source type | ||
271 | */ | ||
272 | status = acpi_ex_store_buffer_to_buffer (actual_src_desc, dest_desc); | 268 | status = acpi_ex_store_buffer_to_buffer (actual_src_desc, dest_desc); |
273 | break; | 269 | break; |
274 | 270 | ||
diff --git a/drivers/acpi/namespace/nsdump.c b/drivers/acpi/namespace/nsdump.c index 6c2aef0e0dd4..05af95322a62 100644 --- a/drivers/acpi/namespace/nsdump.c +++ b/drivers/acpi/namespace/nsdump.c | |||
@@ -475,7 +475,7 @@ acpi_ns_dump_one_object ( | |||
475 | 475 | ||
476 | while (obj_desc) { | 476 | while (obj_desc) { |
477 | obj_type = ACPI_TYPE_INVALID; | 477 | obj_type = ACPI_TYPE_INVALID; |
478 | acpi_os_printf (" Attached Object %p: ", obj_desc); | 478 | acpi_os_printf ("Attached Object %p: ", obj_desc); |
479 | 479 | ||
480 | /* Decode the type of attached object and dump the contents */ | 480 | /* Decode the type of attached object and dump the contents */ |
481 | 481 | ||
@@ -484,9 +484,9 @@ acpi_ns_dump_one_object ( | |||
484 | 484 | ||
485 | acpi_os_printf ("(Ptr to Node)\n"); | 485 | acpi_os_printf ("(Ptr to Node)\n"); |
486 | bytes_to_dump = sizeof (struct acpi_namespace_node); | 486 | bytes_to_dump = sizeof (struct acpi_namespace_node); |
487 | ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump); | ||
487 | break; | 488 | break; |
488 | 489 | ||
489 | |||
490 | case ACPI_DESC_TYPE_OPERAND: | 490 | case ACPI_DESC_TYPE_OPERAND: |
491 | 491 | ||
492 | obj_type = ACPI_GET_OBJECT_TYPE (obj_desc); | 492 | obj_type = ACPI_GET_OBJECT_TYPE (obj_desc); |
@@ -497,24 +497,19 @@ acpi_ns_dump_one_object ( | |||
497 | bytes_to_dump = 32; | 497 | bytes_to_dump = 32; |
498 | } | 498 | } |
499 | else { | 499 | else { |
500 | acpi_os_printf ("(Ptr to ACPI Object type %s, %X)\n", | 500 | acpi_os_printf ("(Ptr to ACPI Object type %X [%s])\n", |
501 | acpi_ut_get_type_name (obj_type), obj_type); | 501 | obj_type, acpi_ut_get_type_name (obj_type)); |
502 | bytes_to_dump = sizeof (union acpi_operand_object); | 502 | bytes_to_dump = sizeof (union acpi_operand_object); |
503 | } | 503 | } |
504 | break; | ||
505 | 504 | ||
505 | ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump); | ||
506 | break; | ||
506 | 507 | ||
507 | default: | 508 | default: |
508 | 509 | ||
509 | acpi_os_printf ( | ||
510 | "(String or Buffer ptr - not an object descriptor) [%s]\n", | ||
511 | acpi_ut_get_descriptor_name (obj_desc)); | ||
512 | bytes_to_dump = 16; | ||
513 | break; | 510 | break; |
514 | } | 511 | } |
515 | 512 | ||
516 | ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump); | ||
517 | |||
518 | /* If value is NOT an internal object, we are done */ | 513 | /* If value is NOT an internal object, we are done */ |
519 | 514 | ||
520 | if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) { | 515 | if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) { |
@@ -525,13 +520,17 @@ acpi_ns_dump_one_object ( | |||
525 | * Valid object, get the pointer to next level, if any | 520 | * Valid object, get the pointer to next level, if any |
526 | */ | 521 | */ |
527 | switch (obj_type) { | 522 | switch (obj_type) { |
523 | case ACPI_TYPE_BUFFER: | ||
528 | case ACPI_TYPE_STRING: | 524 | case ACPI_TYPE_STRING: |
525 | /* | ||
526 | * NOTE: takes advantage of common fields between string/buffer | ||
527 | */ | ||
528 | bytes_to_dump = obj_desc->string.length; | ||
529 | obj_desc = (void *) obj_desc->string.pointer; | 529 | obj_desc = (void *) obj_desc->string.pointer; |
530 | break; | 530 | acpi_os_printf ( "(Buffer/String pointer %p length %X)\n", |
531 | 531 | obj_desc, bytes_to_dump); | |
532 | case ACPI_TYPE_BUFFER: | 532 | ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump); |
533 | obj_desc = (void *) obj_desc->buffer.pointer; | 533 | goto cleanup; |
534 | break; | ||
535 | 534 | ||
536 | case ACPI_TYPE_BUFFER_FIELD: | 535 | case ACPI_TYPE_BUFFER_FIELD: |
537 | obj_desc = (union acpi_operand_object *) obj_desc->buffer_field.buffer_obj; | 536 | obj_desc = (union acpi_operand_object *) obj_desc->buffer_field.buffer_obj; |
diff --git a/drivers/acpi/parser/psopcode.c b/drivers/acpi/parser/psopcode.c index 5744673568c0..95ef5e8947a8 100644 --- a/drivers/acpi/parser/psopcode.c +++ b/drivers/acpi/parser/psopcode.c | |||
@@ -311,7 +311,7 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = | |||
311 | /* ACPI 2.0 opcodes */ | 311 | /* ACPI 2.0 opcodes */ |
312 | 312 | ||
313 | /* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), | 313 | /* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), |
314 | /* 6F */ ACPI_OP ("Package /*Var*/", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER), | 314 | /* 6F */ ACPI_OP ("Package", /* Var */ ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER), |
315 | /* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), | 315 | /* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), |
316 | /* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), | 316 | /* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), |
317 | /* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), | 317 | /* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), |
diff --git a/drivers/acpi/resources/rsdump.c b/drivers/acpi/resources/rsdump.c index 1935dab2ab51..2c3bb8c35741 100644 --- a/drivers/acpi/resources/rsdump.c +++ b/drivers/acpi/resources/rsdump.c | |||
@@ -48,6 +48,9 @@ | |||
48 | #define _COMPONENT ACPI_RESOURCES | 48 | #define _COMPONENT ACPI_RESOURCES |
49 | ACPI_MODULE_NAME ("rsdump") | 49 | ACPI_MODULE_NAME ("rsdump") |
50 | 50 | ||
51 | |||
52 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
53 | |||
51 | /* Local prototypes */ | 54 | /* Local prototypes */ |
52 | 55 | ||
53 | static void | 56 | static void |
@@ -103,7 +106,6 @@ acpi_rs_dump_vendor_specific ( | |||
103 | union acpi_resource_data *data); | 106 | union acpi_resource_data *data); |
104 | 107 | ||
105 | 108 | ||
106 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | ||
107 | /******************************************************************************* | 109 | /******************************************************************************* |
108 | * | 110 | * |
109 | * FUNCTION: acpi_rs_dump_irq | 111 | * FUNCTION: acpi_rs_dump_irq |
diff --git a/drivers/acpi/utilities/utcopy.c b/drivers/acpi/utilities/utcopy.c index 11e884957162..31c30a32e5c9 100644 --- a/drivers/acpi/utilities/utcopy.c +++ b/drivers/acpi/utilities/utcopy.c | |||
@@ -694,58 +694,50 @@ acpi_ut_copy_simple_object ( | |||
694 | dest_desc->common.reference_count = reference_count; | 694 | dest_desc->common.reference_count = reference_count; |
695 | dest_desc->common.next_object = next_object; | 695 | dest_desc->common.next_object = next_object; |
696 | 696 | ||
697 | /* New object is not static, regardless of source */ | ||
698 | |||
699 | dest_desc->common.flags &= ~AOPOBJ_STATIC_POINTER; | ||
700 | |||
697 | /* Handle the objects with extra data */ | 701 | /* Handle the objects with extra data */ |
698 | 702 | ||
699 | switch (ACPI_GET_OBJECT_TYPE (dest_desc)) { | 703 | switch (ACPI_GET_OBJECT_TYPE (dest_desc)) { |
700 | case ACPI_TYPE_BUFFER: | 704 | case ACPI_TYPE_BUFFER: |
701 | |||
702 | dest_desc->buffer.node = NULL; | ||
703 | dest_desc->common.flags = source_desc->common.flags; | ||
704 | |||
705 | /* | 705 | /* |
706 | * Allocate and copy the actual buffer if and only if: | 706 | * Allocate and copy the actual buffer if and only if: |
707 | * 1) There is a valid buffer pointer | 707 | * 1) There is a valid buffer pointer |
708 | * 2) The buffer is not static (not in an ACPI table) (in this case, | 708 | * 2) The buffer has a length > 0 |
709 | * the actual pointer was already copied above) | ||
710 | */ | 709 | */ |
711 | if ((source_desc->buffer.pointer) && | 710 | if ((source_desc->buffer.pointer) && |
712 | (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) { | 711 | (source_desc->buffer.length)) { |
713 | dest_desc->buffer.pointer = NULL; | 712 | dest_desc->buffer.pointer = |
714 | 713 | ACPI_MEM_ALLOCATE (source_desc->buffer.length); | |
715 | /* Create an actual buffer only if length > 0 */ | 714 | if (!dest_desc->buffer.pointer) { |
716 | 715 | return (AE_NO_MEMORY); | |
717 | if (source_desc->buffer.length) { | 716 | } |
718 | dest_desc->buffer.pointer = | ||
719 | ACPI_MEM_ALLOCATE (source_desc->buffer.length); | ||
720 | if (!dest_desc->buffer.pointer) { | ||
721 | return (AE_NO_MEMORY); | ||
722 | } | ||
723 | 717 | ||
724 | /* Copy the actual buffer data */ | 718 | /* Copy the actual buffer data */ |
725 | 719 | ||
726 | ACPI_MEMCPY (dest_desc->buffer.pointer, | 720 | ACPI_MEMCPY (dest_desc->buffer.pointer, |
727 | source_desc->buffer.pointer, | 721 | source_desc->buffer.pointer, |
728 | source_desc->buffer.length); | 722 | source_desc->buffer.length); |
729 | } | ||
730 | } | 723 | } |
731 | break; | 724 | break; |
732 | 725 | ||
733 | case ACPI_TYPE_STRING: | 726 | case ACPI_TYPE_STRING: |
734 | |||
735 | /* | 727 | /* |
736 | * Allocate and copy the actual string if and only if: | 728 | * Allocate and copy the actual string if and only if: |
737 | * 1) There is a valid string pointer | 729 | * 1) There is a valid string pointer |
738 | * 2) The string is not static (not in an ACPI table) (in this case, | 730 | * (Pointer to a NULL string is allowed) |
739 | * the actual pointer was already copied above) | ||
740 | */ | 731 | */ |
741 | if ((source_desc->string.pointer) && | 732 | if (source_desc->string.pointer) { |
742 | (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) { | ||
743 | dest_desc->string.pointer = | 733 | dest_desc->string.pointer = |
744 | ACPI_MEM_ALLOCATE ((acpi_size) source_desc->string.length + 1); | 734 | ACPI_MEM_ALLOCATE ((acpi_size) source_desc->string.length + 1); |
745 | if (!dest_desc->string.pointer) { | 735 | if (!dest_desc->string.pointer) { |
746 | return (AE_NO_MEMORY); | 736 | return (AE_NO_MEMORY); |
747 | } | 737 | } |
748 | 738 | ||
739 | /* Copy the actual string data */ | ||
740 | |||
749 | ACPI_MEMCPY (dest_desc->string.pointer, source_desc->string.pointer, | 741 | ACPI_MEMCPY (dest_desc->string.pointer, source_desc->string.pointer, |
750 | (acpi_size) source_desc->string.length + 1); | 742 | (acpi_size) source_desc->string.length + 1); |
751 | } | 743 | } |