patch-2.4.10 linux/drivers/acpi/executer/exresop.c
Next file: linux/drivers/acpi/executer/exstore.c
Previous file: linux/drivers/acpi/executer/exresolv.c
Back to the patch index
Back to the overall index
- Lines: 379
- Date:
Sun Sep 23 09:42:32 2001
- Orig file:
v2.4.9/linux/drivers/acpi/executer/exresop.c
- Orig date:
Tue Jul 3 17:08:19 2001
diff -u --recursive --new-file v2.4.9/linux/drivers/acpi/executer/exresop.c linux/drivers/acpi/executer/exresop.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresop - AML Interpreter operand/object resolution
- * $Revision: 29 $
+ * $Revision: 38 $
*
*****************************************************************************/
@@ -53,12 +53,13 @@
*
******************************************************************************/
-ACPI_STATUS
+acpi_status
acpi_ex_check_object_type (
- ACPI_OBJECT_TYPE type_needed,
- ACPI_OBJECT_TYPE this_type,
+ acpi_object_type type_needed,
+ acpi_object_type this_type,
void *object)
{
+ PROC_NAME ("Ex_check_object_type");
if (type_needed == ACPI_TYPE_ANY) {
@@ -68,6 +69,11 @@
}
if (type_needed != this_type) {
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [%s], found [%s] %p\n",
+ acpi_ut_get_type_name (type_needed),
+ acpi_ut_get_type_name (this_type), object));
+
return (AE_AML_OPERAND_TYPE);
}
@@ -94,33 +100,42 @@
*
******************************************************************************/
-ACPI_STATUS
+acpi_status
acpi_ex_resolve_operands (
u16 opcode,
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state)
+ acpi_operand_object **stack_ptr,
+ acpi_walk_state *walk_state)
{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status = AE_OK;
+ acpi_operand_object *obj_desc;
+ acpi_status status = AE_OK;
u8 object_type;
void *temp_node;
u32 arg_types;
- ACPI_OPCODE_INFO *op_info;
+ const acpi_opcode_info *op_info;
u32 this_arg_type;
- ACPI_OBJECT_TYPE type_needed;
+ acpi_object_type type_needed;
+
+
+ FUNCTION_TRACE_U32 ("Ex_resolve_operands", opcode);
op_info = acpi_ps_get_opcode_info (opcode);
if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- return (AE_AML_BAD_OPCODE);
+ return_ACPI_STATUS (AE_AML_BAD_OPCODE);
}
arg_types = op_info->runtime_args;
if (arg_types == ARGI_INVALID_OPCODE) {
- return (AE_AML_INTERNAL);
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - %X is not a valid AML opcode\n",
+ opcode));
+
+ return_ACPI_STATUS (AE_AML_INTERNAL);
}
+ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode %X Operand_types=%X \n",
+ opcode, arg_types));
+
/*
* Normal exit is with (Arg_types == 0) at end of argument list.
@@ -129,10 +144,12 @@
* to) the required type; if stack underflows; or upon
* finding a NULL stack entry (which should not happen).
*/
-
while (GET_CURRENT_ARG_TYPE (arg_types)) {
if (!stack_ptr || !*stack_ptr) {
- return (AE_AML_INTERNAL);
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null stack entry at %X\n",
+ stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_INTERNAL);
}
/* Extract useful items */
@@ -144,7 +161,7 @@
if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
/* Node */
- object_type = ((ACPI_NAMESPACE_NODE *) obj_desc)->type;
+ object_type = ((acpi_namespace_node *) obj_desc)->type;
}
else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) {
@@ -152,20 +169,22 @@
object_type = obj_desc->common.type;
- /* Check for bad ACPI_OBJECT_TYPE */
+ /* Check for bad acpi_object_type */
if (!acpi_ex_validate_object_type (object_type)) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Bad operand object type [%X]\n",
+ object_type));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
if (object_type == (u8) INTERNAL_TYPE_REFERENCE) {
/*
* Decode the Reference
*/
-
op_info = acpi_ps_get_opcode_info (opcode);
if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- return (AE_AML_BAD_OPCODE);
+ return_ACPI_STATUS (AE_AML_BAD_OPCODE);
}
@@ -178,11 +197,18 @@
case AML_INDEX_OP:
case AML_ARG_OP:
case AML_LOCAL_OP:
+ case AML_REVISION_OP:
+ DEBUG_ONLY_MEMBERS (ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Reference Opcode: %s\n", op_info->name)));
break;
default:
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Reference Opcode: Unknown [%02x]\n",
+ obj_desc->reference.opcode));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
break;
}
}
@@ -191,14 +217,17 @@
else {
/* Invalid descriptor */
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Bad descriptor type %X in Obj %p\n",
+ obj_desc->common.data_type, obj_desc));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
/*
* Get one argument type, point to the next
*/
-
this_arg_type = GET_CURRENT_ARG_TYPE (arg_types);
INCREMENT_ARG_LIST (arg_types);
@@ -207,7 +236,6 @@
* Handle cases where the object does not need to be
* resolved to a value
*/
-
switch (this_arg_type) {
case ARGI_REFERENCE: /* References */
@@ -227,7 +255,7 @@
status = acpi_ex_check_object_type (INTERNAL_TYPE_REFERENCE,
object_type, obj_desc);
if (ACPI_FAILURE (status)) {
- return (status);
+ return_ACPI_STATUS (status);
}
@@ -236,7 +264,6 @@
* Convert an indirect name ptr to direct name ptr and put
* it on the stack
*/
-
temp_node = obj_desc->reference.object;
acpi_ut_remove_reference (obj_desc);
(*stack_ptr) = temp_node;
@@ -254,7 +281,6 @@
* Instead, we just want to store the reference object.
* -- All others must be resolved below.
*/
-
if ((opcode == AML_STORE_OP) &&
((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) &&
((*stack_ptr)->reference.opcode == AML_INDEX_OP)) {
@@ -267,10 +293,9 @@
/*
* Resolve this object to a value
*/
-
status = acpi_ex_resolve_to_value (stack_ptr, walk_state);
if (ACPI_FAILURE (status)) {
- return (status);
+ return_ACPI_STATUS (status);
}
@@ -328,20 +353,23 @@
/*
* The more complex cases allow multiple resolved object types
*/
-
case ARGI_INTEGER: /* Number */
/*
* Need an operand of type ACPI_TYPE_INTEGER,
* But we can implicitly convert from a STRING or BUFFER
*/
- status = acpi_ex_convert_to_integer (stack_ptr, walk_state);
+ status = acpi_ex_convert_to_integer (*stack_ptr, stack_ptr, walk_state);
if (ACPI_FAILURE (status)) {
if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Integer/String/Buffer], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
- return (status);
+ return_ACPI_STATUS (status);
}
goto next_operand;
@@ -354,13 +382,17 @@
* Need an operand of type ACPI_TYPE_BUFFER,
* But we can implicitly convert from a STRING or INTEGER
*/
- status = acpi_ex_convert_to_buffer (stack_ptr, walk_state);
+ status = acpi_ex_convert_to_buffer (*stack_ptr, stack_ptr, walk_state);
if (ACPI_FAILURE (status)) {
if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Integer/String/Buffer], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
- return (status);
+ return_ACPI_STATUS (status);
}
goto next_operand;
@@ -373,13 +405,17 @@
* Need an operand of type ACPI_TYPE_STRING,
* But we can implicitly convert from a BUFFER or INTEGER
*/
- status = acpi_ex_convert_to_string (stack_ptr, walk_state);
+ status = acpi_ex_convert_to_string (*stack_ptr, stack_ptr, 16, ACPI_UINT32_MAX, walk_state);
if (ACPI_FAILURE (status)) {
if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Integer/String/Buffer], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
- return (status);
+ return_ACPI_STATUS (status);
}
goto next_operand;
@@ -393,7 +429,11 @@
if ((ACPI_TYPE_INTEGER != (*stack_ptr)->common.type) &&
(ACPI_TYPE_STRING != (*stack_ptr)->common.type) &&
(ACPI_TYPE_BUFFER != (*stack_ptr)->common.type)) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Integer/String/Buffer], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
goto next_operand;
break;
@@ -415,7 +455,11 @@
((*stack_ptr)->common.type != ACPI_TYPE_STRING) &&
((*stack_ptr)->common.type != ACPI_TYPE_PACKAGE) &&
((*stack_ptr)->common.type != INTERNAL_TYPE_REFERENCE)) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Buf/Str/Pkg/Ref], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
/*
@@ -423,7 +467,11 @@
*/
if ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) {
if (!(*stack_ptr)->reference.node) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Node Reference], found [%p]\n",
+ *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
}
goto next_operand;
@@ -437,7 +485,11 @@
if (((*stack_ptr)->common.type != ACPI_TYPE_BUFFER) &&
((*stack_ptr)->common.type != ACPI_TYPE_STRING) &&
((*stack_ptr)->common.type != ACPI_TYPE_PACKAGE)) {
- return (AE_AML_OPERAND_TYPE);
+ ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+ "Needed [Buf/Pkg], found [%s] %p\n",
+ acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr));
+
+ return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
}
goto next_operand;
break;
@@ -447,7 +499,11 @@
/* Unknown type */
- return (AE_BAD_PARAMETER);
+ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+ "Internal - Unknown ARGI type %X\n",
+ this_arg_type));
+
+ return_ACPI_STATUS (AE_BAD_PARAMETER);
}
@@ -458,7 +514,7 @@
status = acpi_ex_check_object_type (type_needed,
(*stack_ptr)->common.type, *stack_ptr);
if (ACPI_FAILURE (status)) {
- return (status);
+ return_ACPI_STATUS (status);
}
@@ -474,7 +530,7 @@
} /* while (*Types) */
- return (status);
+ return_ACPI_STATUS (status);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)