diff options
Diffstat (limited to 'drivers/acpi/dispatcher/dsobject.c')
| -rw-r--r-- | drivers/acpi/dispatcher/dsobject.c | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c index 0f280589921..4f08e599d07 100644 --- a/drivers/acpi/dispatcher/dsobject.c +++ b/drivers/acpi/dispatcher/dsobject.c | |||
| @@ -731,54 +731,70 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state, | |||
| 731 | switch (op_info->type) { | 731 | switch (op_info->type) { |
| 732 | case AML_TYPE_LOCAL_VARIABLE: | 732 | case AML_TYPE_LOCAL_VARIABLE: |
| 733 | 733 | ||
| 734 | /* Split the opcode into a base opcode + offset */ | 734 | /* Local ID (0-7) is (AML opcode - base AML_LOCAL_OP) */ |
| 735 | 735 | ||
| 736 | obj_desc->reference.opcode = AML_LOCAL_OP; | 736 | obj_desc->reference.value = opcode - AML_LOCAL_OP; |
| 737 | obj_desc->reference.offset = opcode - AML_LOCAL_OP; | 737 | obj_desc->reference.class = ACPI_REFCLASS_LOCAL; |
| 738 | 738 | ||
| 739 | #ifndef ACPI_NO_METHOD_EXECUTION | 739 | #ifndef ACPI_NO_METHOD_EXECUTION |
| 740 | status = acpi_ds_method_data_get_node(AML_LOCAL_OP, | 740 | status = |
| 741 | obj_desc-> | 741 | acpi_ds_method_data_get_node(ACPI_REFCLASS_LOCAL, |
| 742 | reference.offset, | 742 | obj_desc->reference. |
| 743 | walk_state, | 743 | value, walk_state, |
| 744 | (struct | 744 | ACPI_CAST_INDIRECT_PTR |
| 745 | acpi_namespace_node | 745 | (struct |
| 746 | **)&obj_desc-> | 746 | acpi_namespace_node, |
| 747 | reference.object); | 747 | &obj_desc->reference. |
| 748 | object)); | ||
| 748 | #endif | 749 | #endif |
| 749 | break; | 750 | break; |
| 750 | 751 | ||
| 751 | case AML_TYPE_METHOD_ARGUMENT: | 752 | case AML_TYPE_METHOD_ARGUMENT: |
| 752 | 753 | ||
| 753 | /* Split the opcode into a base opcode + offset */ | 754 | /* Arg ID (0-6) is (AML opcode - base AML_ARG_OP) */ |
| 754 | 755 | ||
| 755 | obj_desc->reference.opcode = AML_ARG_OP; | 756 | obj_desc->reference.value = opcode - AML_ARG_OP; |
| 756 | obj_desc->reference.offset = opcode - AML_ARG_OP; | 757 | obj_desc->reference.class = ACPI_REFCLASS_ARG; |
| 757 | 758 | ||
| 758 | #ifndef ACPI_NO_METHOD_EXECUTION | 759 | #ifndef ACPI_NO_METHOD_EXECUTION |
| 759 | status = acpi_ds_method_data_get_node(AML_ARG_OP, | 760 | status = acpi_ds_method_data_get_node(ACPI_REFCLASS_ARG, |
| 760 | obj_desc-> | 761 | obj_desc-> |
| 761 | reference.offset, | 762 | reference.value, |
| 762 | walk_state, | 763 | walk_state, |
| 764 | ACPI_CAST_INDIRECT_PTR | ||
| 763 | (struct | 765 | (struct |
| 764 | acpi_namespace_node | 766 | acpi_namespace_node, |
| 765 | **)&obj_desc-> | 767 | &obj_desc-> |
| 766 | reference.object); | 768 | reference. |
| 769 | object)); | ||
| 767 | #endif | 770 | #endif |
| 768 | break; | 771 | break; |
| 769 | 772 | ||
| 770 | default: /* Other literals, etc.. */ | 773 | default: /* Object name or Debug object */ |
| 771 | 774 | ||
| 772 | if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { | 775 | switch (op->common.aml_opcode) { |
| 776 | case AML_INT_NAMEPATH_OP: | ||
| 773 | 777 | ||
| 774 | /* Node was saved in Op */ | 778 | /* Node was saved in Op */ |
| 775 | 779 | ||
| 776 | obj_desc->reference.node = op->common.node; | 780 | obj_desc->reference.node = op->common.node; |
| 777 | obj_desc->reference.object = | 781 | obj_desc->reference.object = |
| 778 | op->common.node->object; | 782 | op->common.node->object; |
| 779 | } | 783 | obj_desc->reference.class = ACPI_REFCLASS_NAME; |
| 784 | break; | ||
| 785 | |||
| 786 | case AML_DEBUG_OP: | ||
| 780 | 787 | ||
| 781 | obj_desc->reference.opcode = opcode; | 788 | obj_desc->reference.class = ACPI_REFCLASS_DEBUG; |
| 789 | break; | ||
| 790 | |||
| 791 | default: | ||
| 792 | |||
| 793 | ACPI_ERROR((AE_INFO, | ||
| 794 | "Unimplemented reference type for AML opcode: %4.4X", | ||
| 795 | opcode)); | ||
| 796 | return_ACPI_STATUS(AE_AML_OPERAND_TYPE); | ||
| 797 | } | ||
| 782 | break; | 798 | break; |
| 783 | } | 799 | } |
| 784 | break; | 800 | break; |
