diff options
Diffstat (limited to 'drivers/acpi/executer/exoparg2.c')
-rw-r--r-- | drivers/acpi/executer/exoparg2.c | 317 |
1 files changed, 140 insertions, 177 deletions
diff --git a/drivers/acpi/executer/exoparg2.c b/drivers/acpi/executer/exoparg2.c index 7429032c2b6..8d70c6beef0 100644 --- a/drivers/acpi/executer/exoparg2.c +++ b/drivers/acpi/executer/exoparg2.c @@ -41,17 +41,14 @@ * POSSIBILITY OF SUCH DAMAGES. */ - #include <acpi/acpi.h> #include <acpi/acparser.h> #include <acpi/acinterp.h> #include <acpi/acevents.h> #include <acpi/amlcode.h> - #define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exoparg2") - +ACPI_MODULE_NAME("exoparg2") /*! * Naming convention for AML interpreter execution routines. @@ -74,8 +71,6 @@ * The AcpiExOpcode* functions are called via the Dispatcher component with * fully resolved operands. !*/ - - /******************************************************************************* * * FUNCTION: acpi_ex_opcode_2A_0T_0R @@ -90,29 +85,24 @@ * ALLOCATION: Deletes both operands * ******************************************************************************/ - -acpi_status -acpi_ex_opcode_2A_0T_0R ( - struct acpi_walk_state *walk_state) +acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state) { - union acpi_operand_object **operand = &walk_state->operands[0]; - struct acpi_namespace_node *node; - u32 value; - acpi_status status = AE_OK; - - - ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_0T_0R", - acpi_ps_get_opcode_name (walk_state->opcode)); + union acpi_operand_object **operand = &walk_state->operands[0]; + struct acpi_namespace_node *node; + u32 value; + acpi_status status = AE_OK; + ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_0R", + acpi_ps_get_opcode_name(walk_state->opcode)); /* Examine the opcode */ switch (walk_state->opcode) { - case AML_NOTIFY_OP: /* Notify (notify_object, notify_value) */ + case AML_NOTIFY_OP: /* Notify (notify_object, notify_value) */ /* The first operand is a namespace node */ - node = (struct acpi_namespace_node *) operand[0]; + node = (struct acpi_namespace_node *)operand[0]; /* Second value is the notify value */ @@ -120,15 +110,14 @@ acpi_ex_opcode_2A_0T_0R ( /* Are notifies allowed on this object? */ - if (!acpi_ev_is_notify_object (node)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Unexpected notify object type [%s]\n", - acpi_ut_get_type_name (node->type))); + if (!acpi_ev_is_notify_object(node)) { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "Unexpected notify object type [%s]\n", + acpi_ut_get_type_name(node->type))); status = AE_AML_OPERAND_TYPE; break; } - #ifdef ACPI_GPE_NOTIFY_CHECK /* * GPE method wake/notify check. Here, we want to ensure that we @@ -144,12 +133,14 @@ acpi_ex_opcode_2A_0T_0R ( * If all three cases are true, this is a wake-only GPE that should * be disabled at runtime. */ - if (value == 2) /* device_wake */ { - status = acpi_ev_check_for_wake_only_gpe (walk_state->gpe_event_info); - if (ACPI_FAILURE (status)) { + if (value == 2) { /* device_wake */ + status = + acpi_ev_check_for_wake_only_gpe(walk_state-> + gpe_event_info); + if (ACPI_FAILURE(status)) { /* AE_WAKE_ONLY_GPE only error, means ignore this notify */ - return_ACPI_STATUS (AE_OK) + return_ACPI_STATUS(AE_OK) } } #endif @@ -161,21 +152,18 @@ acpi_ex_opcode_2A_0T_0R ( * from this thread -- because handlers may in turn run other * control methods. */ - status = acpi_ev_queue_notify_request (node, value); + status = acpi_ev_queue_notify_request(node, value); break; - default: - ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_0T_0R: Unknown opcode %X\n", - walk_state->opcode)); + ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_0T_0R: Unknown opcode %X\n", walk_state->opcode)); status = AE_AML_BAD_OPCODE; } - return_ACPI_STATUS (status); + return_ACPI_STATUS(status); } - /******************************************************************************* * * FUNCTION: acpi_ex_opcode_2A_2T_1R @@ -189,19 +177,15 @@ acpi_ex_opcode_2A_0T_0R ( * ******************************************************************************/ -acpi_status -acpi_ex_opcode_2A_2T_1R ( - struct acpi_walk_state *walk_state) +acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state) { - union acpi_operand_object **operand = &walk_state->operands[0]; - union acpi_operand_object *return_desc1 = NULL; - union acpi_operand_object *return_desc2 = NULL; - acpi_status status; - - - ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_2T_1R", - acpi_ps_get_opcode_name (walk_state->opcode)); + union acpi_operand_object **operand = &walk_state->operands[0]; + union acpi_operand_object *return_desc1 = NULL; + union acpi_operand_object *return_desc2 = NULL; + acpi_status status; + ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_2T_1R", + acpi_ps_get_opcode_name(walk_state->opcode)); /* Execute the opcode */ @@ -210,13 +194,15 @@ acpi_ex_opcode_2A_2T_1R ( /* Divide (Dividend, Divisor, remainder_result quotient_result) */ - return_desc1 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + return_desc1 = + acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); if (!return_desc1) { status = AE_NO_MEMORY; goto cleanup; } - return_desc2 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + return_desc2 = + acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); if (!return_desc2) { status = AE_NO_MEMORY; goto cleanup; @@ -224,33 +210,31 @@ acpi_ex_opcode_2A_2T_1R ( /* Quotient to return_desc1, remainder to return_desc2 */ - status = acpi_ut_divide (operand[0]->integer.value, - operand[1]->integer.value, - &return_desc1->integer.value, - &return_desc2->integer.value); - if (ACPI_FAILURE (status)) { + status = acpi_ut_divide(operand[0]->integer.value, + operand[1]->integer.value, + &return_desc1->integer.value, + &return_desc2->integer.value); + if (ACPI_FAILURE(status)) { goto cleanup; } break; - default: - ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_2T_1R: Unknown opcode %X\n", - walk_state->opcode)); + ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_2T_1R: Unknown opcode %X\n", walk_state->opcode)); status = AE_AML_BAD_OPCODE; goto cleanup; } /* Store the results to the target reference operands */ - status = acpi_ex_store (return_desc2, operand[2], walk_state); - if (ACPI_FAILURE (status)) { + status = acpi_ex_store(return_desc2, operand[2], walk_state); + if (ACPI_FAILURE(status)) { goto cleanup; } - status = acpi_ex_store (return_desc1, operand[3], walk_state); - if (ACPI_FAILURE (status)) { + status = acpi_ex_store(return_desc1, operand[3], walk_state); + if (ACPI_FAILURE(status)) { goto cleanup; } @@ -258,24 +242,22 @@ acpi_ex_opcode_2A_2T_1R ( walk_state->result_obj = return_desc1; - -cleanup: + cleanup: /* * Since the remainder is not returned indirectly, remove a reference to * it. Only the quotient is returned indirectly. */ - acpi_ut_remove_reference (return_desc2); + acpi_ut_remove_reference(return_desc2); - if (ACPI_FAILURE (status)) { + if (ACPI_FAILURE(status)) { /* Delete the return object */ - acpi_ut_remove_reference (return_desc1); + acpi_ut_remove_reference(return_desc1); } - return_ACPI_STATUS (status); + return_ACPI_STATUS(status); } - /******************************************************************************* * * FUNCTION: acpi_ex_opcode_2A_1T_1R @@ -289,42 +271,39 @@ cleanup: * ******************************************************************************/ -acpi_status -acpi_ex_opcode_2A_1T_1R ( - struct acpi_walk_state *walk_state) +acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state) { - union acpi_operand_object **operand = &walk_state->operands[0]; - union acpi_operand_object *return_desc = NULL; - acpi_integer index; - acpi_status status = AE_OK; - acpi_size length; - - - ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_1T_1R", - acpi_ps_get_opcode_name (walk_state->opcode)); + union acpi_operand_object **operand = &walk_state->operands[0]; + union acpi_operand_object *return_desc = NULL; + acpi_integer index; + acpi_status status = AE_OK; + acpi_size length; + ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_1T_1R", + acpi_ps_get_opcode_name(walk_state->opcode)); /* Execute the opcode */ if (walk_state->op_info->flags & AML_MATH) { /* All simple math opcodes (add, etc.) */ - return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; } - return_desc->integer.value = acpi_ex_do_math_op (walk_state->opcode, - operand[0]->integer.value, - operand[1]->integer.value); + return_desc->integer.value = + acpi_ex_do_math_op(walk_state->opcode, + operand[0]->integer.value, + operand[1]->integer.value); goto store_result_to_target; } switch (walk_state->opcode) { - case AML_MOD_OP: /* Mod (Dividend, Divisor, remainder_result (ACPI 2.0) */ + case AML_MOD_OP: /* Mod (Dividend, Divisor, remainder_result (ACPI 2.0) */ - return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; @@ -332,21 +311,18 @@ acpi_ex_opcode_2A_1T_1R ( /* return_desc will contain the remainder */ - status = acpi_ut_divide (operand[0]->integer.value, - operand[1]->integer.value, - NULL, - &return_desc->integer.value); + status = acpi_ut_divide(operand[0]->integer.value, + operand[1]->integer.value, + NULL, &return_desc->integer.value); break; + case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */ - case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */ - - status = acpi_ex_do_concatenate (operand[0], operand[1], - &return_desc, walk_state); + status = acpi_ex_do_concatenate(operand[0], operand[1], + &return_desc, walk_state); break; - - case AML_TO_STRING_OP: /* to_string (Buffer, Length, Result) (ACPI 2.0) */ + case AML_TO_STRING_OP: /* to_string (Buffer, Length, Result) (ACPI 2.0) */ /* * Input object is guaranteed to be a buffer at this point (it may have @@ -365,8 +341,8 @@ acpi_ex_opcode_2A_1T_1R ( */ length = 0; while ((length < operand[0]->buffer.length) && - (length < operand[1]->integer.value) && - (operand[0]->buffer.pointer[length])) { + (length < operand[1]->integer.value) && + (operand[0]->buffer.pointer[length])) { length++; if (length > ACPI_MAX_STRING_CONVERSION) { status = AE_AML_STRING_LIMIT; @@ -376,33 +352,32 @@ acpi_ex_opcode_2A_1T_1R ( /* Allocate a new string object */ - return_desc = acpi_ut_create_string_object (length); + return_desc = acpi_ut_create_string_object(length); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; } - /* Copy the raw buffer data with no transform. NULL terminated already*/ + /* Copy the raw buffer data with no transform. NULL terminated already */ - ACPI_MEMCPY (return_desc->string.pointer, - operand[0]->buffer.pointer, length); + ACPI_MEMCPY(return_desc->string.pointer, + operand[0]->buffer.pointer, length); break; - case AML_CONCAT_RES_OP: /* concatenate_res_template (Buffer, Buffer, Result) (ACPI 2.0) */ - status = acpi_ex_concat_template (operand[0], operand[1], - &return_desc, walk_state); + status = acpi_ex_concat_template(operand[0], operand[1], + &return_desc, walk_state); break; - - case AML_INDEX_OP: /* Index (Source Index Result) */ + case AML_INDEX_OP: /* Index (Source Index Result) */ /* Create the internal return object */ - return_desc = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_REFERENCE); + return_desc = + acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_REFERENCE); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; @@ -412,76 +387,75 @@ acpi_ex_opcode_2A_1T_1R ( /* At this point, the Source operand is a Package, Buffer, or String */ - if (ACPI_GET_OBJECT_TYPE (operand[0]) == ACPI_TYPE_PACKAGE) { + if (ACPI_GET_OBJECT_TYPE(operand[0]) == ACPI_TYPE_PACKAGE) { /* Object to be indexed is a Package */ if (index >= operand[0]->package.count) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Index value (%X%8.8X) beyond package end (%X)\n", - ACPI_FORMAT_UINT64 (index), operand[0]->package.count)); + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "Index value (%X%8.8X) beyond package end (%X)\n", + ACPI_FORMAT_UINT64(index), + operand[0]->package.count)); status = AE_AML_PACKAGE_LIMIT; goto cleanup; } return_desc->reference.target_type = ACPI_TYPE_PACKAGE; - return_desc->reference.object = operand[0]; - return_desc->reference.where = &operand[0]->package.elements [ - index]; - } - else { + return_desc->reference.object = operand[0]; + return_desc->reference.where = + &operand[0]->package.elements[index]; + } else { /* Object to be indexed is a Buffer/String */ if (index >= operand[0]->buffer.length) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Index value (%X%8.8X) beyond end of buffer (%X)\n", - ACPI_FORMAT_UINT64 (index), operand[0]->buffer.length)); + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "Index value (%X%8.8X) beyond end of buffer (%X)\n", + ACPI_FORMAT_UINT64(index), + operand[0]->buffer.length)); status = AE_AML_BUFFER_LIMIT; goto cleanup; } - return_desc->reference.target_type = ACPI_TYPE_BUFFER_FIELD; - return_desc->reference.object = operand[0]; + return_desc->reference.target_type = + ACPI_TYPE_BUFFER_FIELD; + return_desc->reference.object = operand[0]; } /* * Add a reference to the target package/buffer/string for the life * of the index. */ - acpi_ut_add_reference (operand[0]); + acpi_ut_add_reference(operand[0]); /* Complete the Index reference object */ - return_desc->reference.opcode = AML_INDEX_OP; - return_desc->reference.offset = (u32) index; + return_desc->reference.opcode = AML_INDEX_OP; + return_desc->reference.offset = (u32) index; /* Store the reference to the Target */ - status = acpi_ex_store (return_desc, operand[2], walk_state); + status = acpi_ex_store(return_desc, operand[2], walk_state); /* Return the reference */ walk_state->result_obj = return_desc; goto cleanup; - default: - ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_1T_1R: Unknown opcode %X\n", - walk_state->opcode)); + ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_1T_1R: Unknown opcode %X\n", walk_state->opcode)); status = AE_AML_BAD_OPCODE; break; } + store_result_to_target: -store_result_to_target: - - if (ACPI_SUCCESS (status)) { + if (ACPI_SUCCESS(status)) { /* * Store the result of the operation (which is now in return_desc) into * the Target descriptor. */ - status = acpi_ex_store (return_desc, operand[2], walk_state); - if (ACPI_FAILURE (status)) { + status = acpi_ex_store(return_desc, operand[2], walk_state); + if (ACPI_FAILURE(status)) { goto cleanup; } @@ -490,19 +464,17 @@ store_result_to_target: } } - -cleanup: + cleanup: /* Delete return object on error */ - if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (return_desc); + if (ACPI_FAILURE(status)) { + acpi_ut_remove_reference(return_desc); } - return_ACPI_STATUS (status); + return_ACPI_STATUS(status); } - /******************************************************************************* * * FUNCTION: acpi_ex_opcode_2A_0T_1R @@ -515,23 +487,19 @@ cleanup: * ******************************************************************************/ -acpi_status -acpi_ex_opcode_2A_0T_1R ( - struct acpi_walk_state *walk_state) +acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state) { - union acpi_operand_object **operand = &walk_state->operands[0]; - union acpi_operand_object *return_desc = NULL; - acpi_status status = AE_OK; - u8 logical_result = FALSE; - - - ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_0T_1R", - acpi_ps_get_opcode_name (walk_state->opcode)); + union acpi_operand_object **operand = &walk_state->operands[0]; + union acpi_operand_object *return_desc = NULL; + acpi_status status = AE_OK; + u8 logical_result = FALSE; + ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_1R", + acpi_ps_get_opcode_name(walk_state->opcode)); /* Create the internal return object */ - return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; @@ -542,50 +510,48 @@ acpi_ex_opcode_2A_0T_1R ( if (walk_state->op_info->flags & AML_LOGICAL_NUMERIC) { /* logical_op (Operand0, Operand1) */ - status = acpi_ex_do_logical_numeric_op (walk_state->opcode, - operand[0]->integer.value, operand[1]->integer.value, - &logical_result); + status = acpi_ex_do_logical_numeric_op(walk_state->opcode, + operand[0]->integer. + value, + operand[1]->integer. + value, &logical_result); goto store_logical_result; - } - else if (walk_state->op_info->flags & AML_LOGICAL) { + } else if (walk_state->op_info->flags & AML_LOGICAL) { /* logical_op (Operand0, Operand1) */ - status = acpi_ex_do_logical_op (walk_state->opcode, operand[0], - operand[1], &logical_result); + status = acpi_ex_do_logical_op(walk_state->opcode, operand[0], + operand[1], &logical_result); goto store_logical_result; } switch (walk_state->opcode) { - case AML_ACQUIRE_OP: /* Acquire (mutex_object, Timeout) */ + case AML_ACQUIRE_OP: /* Acquire (mutex_object, Timeout) */ - status = acpi_ex_acquire_mutex (operand[1], operand[0], walk_state); + status = + acpi_ex_acquire_mutex(operand[1], operand[0], walk_state); if (status == AE_TIME) { - logical_result = TRUE; /* TRUE = Acquire timed out */ + logical_result = TRUE; /* TRUE = Acquire timed out */ status = AE_OK; } break; + case AML_WAIT_OP: /* Wait (event_object, Timeout) */ - case AML_WAIT_OP: /* Wait (event_object, Timeout) */ - - status = acpi_ex_system_wait_event (operand[1], operand[0]); + status = acpi_ex_system_wait_event(operand[1], operand[0]); if (status == AE_TIME) { - logical_result = TRUE; /* TRUE, Wait timed out */ + logical_result = TRUE; /* TRUE, Wait timed out */ status = AE_OK; } break; - default: - ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_0T_1R: Unknown opcode %X\n", - walk_state->opcode)); + ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_0T_1R: Unknown opcode %X\n", walk_state->opcode)); status = AE_AML_BAD_OPCODE; goto cleanup; } - -store_logical_result: + store_logical_result: /* * Set return value to according to logical_result. logical TRUE (all ones) * Default is FALSE (zero) @@ -596,16 +562,13 @@ store_logical_result: walk_state->result_obj = return_desc; - -cleanup: + cleanup: /* Delete return object on error */ - if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (return_desc); + if (ACPI_FAILURE(status)) { + acpi_ut_remove_reference(return_desc); } - return_ACPI_STATUS (status); + return_ACPI_STATUS(status); } - - |