diff options
| author | Andy Grover <agrover@aracnet.com> | 2002-06-11 02:18:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-06-11 02:18:40 -0700 |
| commit | bbdd8222fa5151349339af24db52d704e285af68 (patch) | |
| tree | d365a2e2729af068439f62761c0d777667862f18 /drivers/acpi | |
| parent | 044aff7a727a6dcfda508abec356d4e36453634f (diff) | |
[PATCH] ACPI [3/3]
ACPI interpreter update
Change non-interpreter code to account for the interpreter changes.
Diffstat (limited to 'drivers/acpi')
57 files changed, 667 insertions, 891 deletions
diff --git a/drivers/acpi/debugger/dbcmds.c b/drivers/acpi/debugger/dbcmds.c index 9cc5b842ca49..0a3a4282cbb3 100644 --- a/drivers/acpi/debugger/dbcmds.c +++ b/drivers/acpi/debugger/dbcmds.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbcmds - debug commands and output routines - * $Revision: 83 $ + * $Revision: 84 $ * ******************************************************************************/ @@ -663,7 +663,7 @@ acpi_db_walk_for_specific_objects ( /* Display short information about the object */ if (obj_desc) { - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_METHOD: acpi_os_printf (" #Args %d Concurrency %X", obj_desc->method.param_count, obj_desc->method.concurrency); break; @@ -729,7 +729,8 @@ acpi_db_display_objects ( } acpi_db_set_output_destination (ACPI_DB_DUPLICATE_OUTPUT); - acpi_os_printf ("Objects of type [%s] defined in the current ACPI Namespace: \n", acpi_ut_get_type_name (type)); + acpi_os_printf ("Objects of type [%s] defined in the current ACPI Namespace: \n", + acpi_ut_get_type_name (type)); acpi_db_set_output_destination (ACPI_DB_REDIRECTABLE_OUTPUT); diff --git a/drivers/acpi/debugger/dbdisply.c b/drivers/acpi/debugger/dbdisply.c index e16cd8e81560..6ae4cca6fc50 100644 --- a/drivers/acpi/debugger/dbdisply.c +++ b/drivers/acpi/debugger/dbdisply.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbdisply - debug display commands - * $Revision: 73 $ + * $Revision: 75 $ * ******************************************************************************/ @@ -300,9 +300,9 @@ acpi_db_decode_internal_object ( return; } - acpi_os_printf (" %s", acpi_ut_get_type_name (obj_desc->common.type)); + acpi_os_printf (" %s", acpi_ut_get_object_type_name (obj_desc)); - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: acpi_os_printf (" %8.8X%8.8X", ACPI_HIDWORD (obj_desc->integer.value), @@ -396,7 +396,7 @@ acpi_db_display_internal_object ( case ACPI_DESC_TYPE_OPERAND: - type = obj_desc->common.type; + type = ACPI_GET_OBJECT_TYPE (obj_desc); if (type > INTERNAL_TYPE_MAX) { acpi_os_printf (" Type %hX [Invalid Type]", type); return; @@ -404,25 +404,9 @@ acpi_db_display_internal_object ( /* Decode the ACPI object type */ - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case INTERNAL_TYPE_REFERENCE: switch (obj_desc->reference.opcode) { - case AML_ZERO_OP: - acpi_os_printf ("[Const] Zero (0) [Null Target]", 0); - break; - - case AML_ONES_OP: - acpi_os_printf ("[Const] Ones (0xFFFFFFFFFFFFFFFF) [No Limit]"); - break; - - case AML_ONE_OP: - acpi_os_printf ("[Const] One (1)"); - break; - - case AML_REVISION_OP: - acpi_os_printf ("[Const] Revision (%X)", ACPI_CA_SUPPORT_LEVEL); - break; - case AML_LOCAL_OP: acpi_os_printf ("[Local%d] ", obj_desc->reference.offset); if (walk_state) { @@ -451,6 +435,8 @@ acpi_db_display_internal_object ( break; default: + acpi_os_printf ("Unknown Reference opcode %X\n", + obj_desc->reference.opcode); break; } diff --git a/drivers/acpi/debugger/dbstats.c b/drivers/acpi/debugger/dbstats.c index 2cd35a06df9f..38ac22868c43 100644 --- a/drivers/acpi/debugger/dbstats.c +++ b/drivers/acpi/debugger/dbstats.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbstats - Generation and display of ACPI table statistics - * $Revision: 59 $ + * $Revision: 60 $ * ******************************************************************************/ @@ -87,18 +87,18 @@ acpi_db_enumerate_object ( acpi_gbl_num_objects++; - if (obj_desc->common.type > INTERNAL_TYPE_NODE_MAX) + if (ACPI_GET_OBJECT_TYPE (obj_desc) > INTERNAL_TYPE_NODE_MAX) { acpi_gbl_obj_type_count_misc++; } else { - acpi_gbl_obj_type_count [obj_desc->common.type]++; + acpi_gbl_obj_type_count [ACPI_GET_OBJECT_TYPE (obj_desc)]++; } /* Count the sub-objects */ - switch (obj_desc->common.type) + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_PACKAGE: for (i = 0; i < obj_desc->package.count; i++) diff --git a/drivers/acpi/dispatcher/dsmthdat.c b/drivers/acpi/dispatcher/dsmthdat.c index 7ce3aaab876c..08bed8157992 100644 --- a/drivers/acpi/dispatcher/dsmthdat.c +++ b/drivers/acpi/dispatcher/dsmthdat.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsmthdat - control method arguments and local variables - * $Revision: 61 $ + * $Revision: 62 $ * ******************************************************************************/ @@ -354,7 +354,7 @@ acpi_ds_method_data_get_type ( /* Get the object type */ - return_VALUE (object->common.type); + return_VALUE (ACPI_GET_OBJECT_TYPE (object)); } @@ -602,7 +602,7 @@ acpi_ds_store_object_to_local ( * (perform the indirect store) */ status = acpi_ns_attach_object ((acpi_namespace_node *) current_obj_desc, - obj_desc, obj_desc->common.type); + obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc)); return_ACPI_STATUS (status); } diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c index 084924bd3fdb..b9932cd1bc4c 100644 --- a/drivers/acpi/dispatcher/dsobject.c +++ b/drivers/acpi/dispatcher/dsobject.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsobject - Dispatcher object management routines - * $Revision: 99 $ + * $Revision: 103 $ * *****************************************************************************/ @@ -29,6 +29,7 @@ #include "amlcode.h" #include "acdispat.h" #include "acnamesp.h" +#include "acinterp.h" #define _COMPONENT ACPI_DISPATCHER ACPI_MODULE_NAME ("dsobject") @@ -241,9 +242,10 @@ acpi_ds_init_object_from_op ( { const acpi_opcode_info *op_info; acpi_operand_object *obj_desc; + acpi_status status = AE_OK; - ACPI_FUNCTION_NAME ("Ds_init_object_from_op"); + ACPI_FUNCTION_TRACE ("Ds_init_object_from_op"); obj_desc = *ret_obj_desc; @@ -251,12 +253,12 @@ acpi_ds_init_object_from_op ( if (op_info->class == AML_CLASS_UNKNOWN) { /* Unknown opcode */ - return (AE_TYPE); + return_ACPI_STATUS (AE_TYPE); } /* Perform per-object initialization */ - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_BUFFER: /* @@ -281,7 +283,62 @@ acpi_ds_init_object_from_op ( case ACPI_TYPE_INTEGER: - obj_desc->integer.value = op->common.value.integer; + switch (op_info->type) { + case AML_TYPE_CONSTANT: + /* + * Resolve AML Constants here - AND ONLY HERE! + * All constants are integers. + * We mark the integer with a flag that indicates that it started life + * as a constant -- so that stores to constants will perform as expected (noop). + * (Zero_op is used as a placeholder for optional target operands.) + */ + obj_desc->common.flags = AOPOBJ_AML_CONSTANT; + + switch (opcode) { + case AML_ZERO_OP: + + obj_desc->integer.value = 0; + break; + + case AML_ONE_OP: + + obj_desc->integer.value = 1; + break; + + case AML_ONES_OP: + + obj_desc->integer.value = ACPI_INTEGER_MAX; + + /* Truncate value if we are executing from a 32-bit ACPI table */ + + acpi_ex_truncate_for32bit_table (obj_desc); + break; + + case AML_REVISION_OP: + + obj_desc->integer.value = ACPI_CA_SUPPORT_LEVEL; + break; + + default: + + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown constant opcode %X\n", opcode)); + status = AE_AML_OPERAND_TYPE; + break; + } + break; + + + case AML_TYPE_LITERAL: + + obj_desc->integer.value = op->common.value.integer; + break; + + + default: + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n", op_info->type)); + status = AE_AML_OPERAND_TYPE; + break; + } break; @@ -323,7 +380,7 @@ acpi_ds_init_object_from_op ( break; - default: /* Constants, Literals, etc.. */ + default: /* Other literals, etc.. */ if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { /* Node was saved in Op */ @@ -340,12 +397,13 @@ acpi_ds_init_object_from_op ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unimplemented data type: %X\n", - obj_desc->common.type)); + ACPI_GET_OBJECT_TYPE (obj_desc))); + status = AE_AML_OPERAND_TYPE; break; } - return (AE_OK); + return_ACPI_STATUS (status); } @@ -380,7 +438,7 @@ acpi_ds_build_internal_object ( if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { /* - * This is an object reference. If this name was + * This is an named object reference. If this name was * previously looked up in the namespace, it was stored in this op. * Otherwise, go ahead and look it up now */ @@ -435,7 +493,9 @@ acpi_ds_build_internal_object ( * * FUNCTION: Acpi_ds_build_internal_buffer_obj * - * PARAMETERS: Op - Parser object to be translated + * PARAMETERS: Walk_state - Current walk state + * Op - Parser object to be translated + * Buffer_length - Length of the buffer * Obj_desc_ptr - Where the ACPI internal object is returned * * RETURN: Status @@ -541,7 +601,9 @@ acpi_ds_build_internal_buffer_obj ( * * FUNCTION: Acpi_ds_build_internal_package_obj * - * PARAMETERS: Op - Parser object to be translated + * PARAMETERS: Walk_state - Current walk state + * Op - Parser object to be translated + * Package_length - Number of elements in the package * Obj_desc_ptr - Where the ACPI internal object is returned * * RETURN: Status @@ -658,12 +720,13 @@ acpi_ds_build_internal_package_obj ( * * FUNCTION: Acpi_ds_create_node * - * PARAMETERS: Op - Parser object to be translated - * Obj_desc_ptr - Where the ACPI internal object is returned + * PARAMETERS: Walk_state - Current walk state + * Node - NS Node to be initialized + * Op - Parser object to be translated * * RETURN: Status * - * DESCRIPTION: + * DESCRIPTION: Create the object to be associated with a namespace node * ****************************************************************************/ @@ -704,7 +767,7 @@ acpi_ds_create_node ( /* Re-type the object according to it's argument */ - node->type = obj_desc->common.type; + node->type = ACPI_GET_OBJECT_TYPE (obj_desc); /* Attach obj to node */ diff --git a/drivers/acpi/dispatcher/dsopcode.c b/drivers/acpi/dispatcher/dsopcode.c index a3d8453ab454..b65a77a15d06 100644 --- a/drivers/acpi/dispatcher/dsopcode.c +++ b/drivers/acpi/dispatcher/dsopcode.c @@ -2,7 +2,7 @@ * * Module Name: dsopcode - Dispatcher Op Region support and handling of * "control" opcodes - * $Revision: 79 $ + * $Revision: 80 $ * *****************************************************************************/ @@ -396,10 +396,10 @@ acpi_ds_init_buffer_field ( /* Host object must be a Buffer */ - if (buffer_desc->common.type != ACPI_TYPE_BUFFER) { + if (ACPI_GET_OBJECT_TYPE (buffer_desc) != ACPI_TYPE_BUFFER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Target of Create Field is not a Buffer object - %s\n", - acpi_ut_get_type_name (buffer_desc->common.type))); + acpi_ut_get_object_type_name (buffer_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; @@ -1021,7 +1021,7 @@ acpi_ds_exec_end_control_op ( * Allow references created by the Index operator to return unchanged. */ if ((ACPI_GET_DESCRIPTOR_TYPE (walk_state->results->results.obj_desc[0]) == ACPI_DESC_TYPE_OPERAND) && - ((walk_state->results->results.obj_desc [0])->common.type == INTERNAL_TYPE_REFERENCE) && + (ACPI_GET_OBJECT_TYPE (walk_state->results->results.obj_desc [0]) == INTERNAL_TYPE_REFERENCE) && ((walk_state->results->results.obj_desc [0])->reference.opcode != AML_INDEX_OP)) { status = acpi_ex_resolve_to_value (&walk_state->results->results.obj_desc [0], walk_state); if (ACPI_FAILURE (status)) { diff --git a/drivers/acpi/dispatcher/dsutils.c b/drivers/acpi/dispatcher/dsutils.c index fa6697bc9248..77b50406d3a2 100644 --- a/drivers/acpi/dispatcher/dsutils.c +++ b/drivers/acpi/dispatcher/dsutils.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsutils - Dispatcher utilities - * $Revision: 92 $ + * $Revision: 93 $ * ******************************************************************************/ @@ -380,8 +380,8 @@ acpi_ds_create_operand ( /* * If the name is null, this means that this is an * optional result parameter that was not specified - * in the original ASL. Create an Reference for a - * placeholder + * in the original ASL. Create a Zero Constant for a + * placeholder. (Store to a constant is a Noop.) */ opcode = AML_ZERO_OP; /* Has no arguments! */ diff --git a/drivers/acpi/dispatcher/dswexec.c b/drivers/acpi/dispatcher/dswexec.c index 12c46192c75a..5ee4e35c4984 100644 --- a/drivers/acpi/dispatcher/dswexec.c +++ b/drivers/acpi/dispatcher/dswexec.c @@ -2,7 +2,7 @@ * * Module Name: dswexec - Dispatcher method execution callbacks; * dispatch to interpreter. - * $Revision: 92 $ + * $Revision: 94 $ * *****************************************************************************/ @@ -113,10 +113,10 @@ acpi_ds_get_predicate_value ( * Result of predicate evaluation currently must * be a number */ - if (obj_desc->common.type != ACPI_TYPE_INTEGER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Bad predicate (not a number) Obj_desc=%p State=%p Type=%X\n", - obj_desc, walk_state, obj_desc->common.type)); + obj_desc, walk_state, ACPI_GET_OBJECT_TYPE (obj_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; @@ -124,7 +124,7 @@ acpi_ds_get_predicate_value ( /* Truncate the predicate to 32-bits if necessary */ - acpi_ex_truncate_for32bit_table (obj_desc, walk_state); + acpi_ex_truncate_for32bit_table (obj_desc); /* * Save the result of the predicate evaluation on @@ -605,7 +605,7 @@ acpi_ds_exec_end_op ( * ACPI 2.0 support for 64-bit integers: Truncate numeric * result value if we are executing from a 32-bit ACPI table */ - acpi_ex_truncate_for32bit_table (walk_state->result_obj, walk_state); + acpi_ex_truncate_for32bit_table (walk_state->result_obj); /* * Check if we just completed the evaluation of a diff --git a/drivers/acpi/dispatcher/dswstate.c b/drivers/acpi/dispatcher/dswstate.c index c4f610a1209e..37bb06d5fd9b 100644 --- a/drivers/acpi/dispatcher/dswstate.c +++ b/drivers/acpi/dispatcher/dswstate.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswstate - Dispatcher parse tree walk management routines - * $Revision: 64 $ + * $Revision: 65 $ * *****************************************************************************/ @@ -84,7 +84,7 @@ acpi_ds_result_insert ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n", - object, object ? acpi_ut_get_type_name (((acpi_operand_object *) object)->common.type) : "NULL", + object, object ? acpi_ut_get_object_type_name ((acpi_operand_object *) object) : "NULL", walk_state, state->results.num_results, walk_state->current_result)); return (AE_OK); @@ -148,7 +148,7 @@ acpi_ds_result_remove ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n", - *object, (*object) ? acpi_ut_get_type_name ((*object)->common.type) : "NULL", + *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", index, walk_state, state->results.num_results)); return (AE_OK); @@ -204,7 +204,7 @@ acpi_ds_result_pop ( state->results.obj_desc [index -1] = NULL; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n", - *object, (*object) ? acpi_ut_get_type_name ((*object)->common.type) : "NULL", + *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", index -1, walk_state, state->results.num_results)); return (AE_OK); @@ -274,7 +274,7 @@ acpi_ds_result_pop_from_bottom ( } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s], Results=%p State=%p\n", - *object, (*object) ? acpi_ut_get_type_name ((*object)->common.type) : "NULL", + *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", state, walk_state)); @@ -329,7 +329,7 @@ acpi_ds_result_push ( state->results.num_results++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n", - object, object ? acpi_ut_get_type_name (((acpi_operand_object *) object)->common.type) : "NULL", + object, object ? acpi_ut_get_object_type_name ((acpi_operand_object *) object) : "NULL", walk_state, state->results.num_results, walk_state->current_result)); return (AE_OK); @@ -487,7 +487,7 @@ acpi_ds_obj_stack_push ( walk_state->num_operands++; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", - object, acpi_ut_get_type_name (((acpi_operand_object *) object)->common.type), + object, acpi_ut_get_object_type_name ((acpi_operand_object *) object), walk_state, walk_state->num_operands)); return (AE_OK); @@ -547,7 +547,7 @@ acpi_ds_obj_stack_pop_object ( walk_state->operands [walk_state->num_operands] = NULL; ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", - *object, acpi_ut_get_type_name ((*object)->common.type), + *object, acpi_ut_get_object_type_name (*object), walk_state, walk_state->num_operands)); return (AE_OK); diff --git a/drivers/acpi/events/evregion.c b/drivers/acpi/events/evregion.c index 1866003a8a85..81cd29bbbd31 100644 --- a/drivers/acpi/events/evregion.c +++ b/drivers/acpi/events/evregion.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evregion - ACPI Address_space (Op_region) handler dispatch - * $Revision: 133 $ + * $Revision: 134 $ * *****************************************************************************/ @@ -624,7 +624,7 @@ acpi_ev_addr_handler_helper ( /* * Devices are handled different than regions */ - if (obj_desc->common.type == ACPI_TYPE_DEVICE) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_DEVICE) { /* * See if this guy has any handlers */ diff --git a/drivers/acpi/events/evrgnini.c b/drivers/acpi/events/evrgnini.c index e0f7b9b68910..2670d67876a8 100644 --- a/drivers/acpi/events/evrgnini.c +++ b/drivers/acpi/events/evrgnini.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evrgnini- ACPI Address_space (Op_region) init - * $Revision: 61 $ + * $Revision: 62 $ * *****************************************************************************/ @@ -36,8 +36,8 @@ * * FUNCTION: Acpi_ev_system_memory_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -57,6 +57,7 @@ acpi_ev_system_memory_region_setup ( acpi_operand_object *region_desc = (acpi_operand_object *) handle; acpi_mem_space_context *local_region_context; + ACPI_FUNCTION_TRACE ("Ev_system_memory_region_setup"); @@ -68,8 +69,7 @@ acpi_ev_system_memory_region_setup ( return_ACPI_STATUS (AE_OK); } - - /* Activate. Create a new context */ + /* Create a new context */ local_region_context = ACPI_MEM_CALLOCATE (sizeof (acpi_mem_space_context)); if (!(local_region_context)) { @@ -90,8 +90,8 @@ acpi_ev_system_memory_region_setup ( * * FUNCTION: Acpi_ev_io_space_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -126,8 +126,8 @@ acpi_ev_io_space_region_setup ( * * FUNCTION: Acpi_ev_pci_config_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -161,8 +161,8 @@ acpi_ev_pci_config_region_setup ( handler_obj = region_obj->region.addr_handler; if (!handler_obj) { /* - * No installed handler. This shouldn't happen because the dispatch - * routine checks before we get here, but we check again just in case. + * No installed handler. This shouldn't happen because the dispatch + * routine checks before we get here, but we check again just in case. */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Attempting to init a region %p, with no handler\n", region_obj)); @@ -178,7 +178,6 @@ acpi_ev_pci_config_region_setup ( return_ACPI_STATUS (status); } - /* Create a new context */ pci_id = ACPI_MEM_CALLOCATE (sizeof (acpi_pci_id)); @@ -187,24 +186,23 @@ acpi_ev_pci_config_region_setup ( } /* - * For PCI Config space access, we have to pass the segment, bus, - * device and function numbers. This routine must acquire those. + * For PCI Config space access, we have to pass the segment, bus, + * device and function numbers. This routine must acquire those. */ /* - * First get device and function numbers from the _ADR object - * in the parent's scope. + * First get device and function numbers from the _ADR object + * in the parent's scope. */ node = acpi_ns_get_parent_node (region_obj->region.node); - - /* Acpi_evaluate the _ADR object */ + /* Evaluate the _ADR object */ status = acpi_ut_evaluate_numeric_object (METHOD_NAME__ADR, node, &temp); /* - * The default is zero, and since the allocation above zeroed - * the data, just do nothing on failure. + * The default is zero, and since the allocation above zeroed + * the data, just do nothing on failure. */ if (ACPI_SUCCESS (status)) { pci_id->device = ACPI_HIWORD (ACPI_LODWORD (temp)); @@ -212,17 +210,17 @@ acpi_ev_pci_config_region_setup ( } /* - * Get the _SEG and _BBN values from the device upon which the handler - * is installed. + * Get the _SEG and _BBN values from the device upon which the handler + * is installed. * - * We need to get the _SEG and _BBN objects relative to the PCI BUS device. - * This is the device the handler has been registered to handle. + * We need to get the _SEG and _BBN objects relative to the PCI BUS device. + * This is the device the handler has been registered to handle. */ /* - * If the Addr_handler.Node is still pointing to the root, we need - * to scan upward for a PCI Root bridge and re-associate the Op_region - * handlers with that device. + * If the Addr_handler.Node is still pointing to the root, we need + * to scan upward for a PCI Root bridge and re-associate the Op_region + * handlers with that device. */ if (handler_obj->addr_handler.node == acpi_gbl_root_node) { /* @@ -231,13 +229,17 @@ acpi_ev_pci_config_region_setup ( while (node != acpi_gbl_root_node) { status = acpi_ut_execute_HID (node, &object_hID); if (ACPI_SUCCESS (status)) { + /* Got a valid _HID, check if this is a PCI root */ + if (!(ACPI_STRNCMP (object_hID.buffer, PCI_ROOT_HID_STRING, sizeof (PCI_ROOT_HID_STRING)))) { + /* Install a handler for this PCI root bridge */ + status = acpi_install_address_space_handler ((acpi_handle) node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL); if (ACPI_FAILURE (status)) { - ACPI_REPORT_ERROR (("Could not install handler for %4.4s, %s\n", + ACPI_REPORT_ERROR (("Could not install Pci_config handler for %4.4s, %s\n", node->name.ascii, acpi_format_exception (status))); } break; @@ -276,8 +278,8 @@ acpi_ev_pci_config_region_setup ( * * FUNCTION: Acpi_ev_pci_bar_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -296,7 +298,6 @@ acpi_ev_pci_bar_region_setup ( void *handler_context, void **region_context) { - ACPI_FUNCTION_TRACE ("Ev_pci_bar_region_setup"); @@ -308,8 +309,8 @@ acpi_ev_pci_bar_region_setup ( * * FUNCTION: Acpi_ev_cmos_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -328,7 +329,6 @@ acpi_ev_cmos_region_setup ( void *handler_context, void **region_context) { - ACPI_FUNCTION_TRACE ("Ev_cmos_region_setup"); @@ -340,8 +340,8 @@ acpi_ev_cmos_region_setup ( * * FUNCTION: Acpi_ev_default_region_setup * - * PARAMETERS: Region_obj - region we are interested in - * Function - start or stop + * PARAMETERS: Region_obj - Region we are interested in + * Function - Start or stop * Handler_context - Address space handler context * Region_context - Region specific context * @@ -376,7 +376,8 @@ acpi_ev_default_region_setup ( * * FUNCTION: Acpi_ev_initialize_region * - * PARAMETERS: Region_obj - Region we are initializing + * PARAMETERS: Region_obj - Region we are initializing + * Acpi_ns_locked - Is namespace locked? * * RETURN: Status * @@ -423,9 +424,8 @@ acpi_ev_initialize_region ( if (!region_obj2) { return_ACPI_STATUS (AE_NOT_EXIST); } - node = acpi_ns_get_parent_node (region_obj->region.node); - + node = acpi_ns_get_parent_node (region_obj->region.node); space_id = region_obj->region.space_id; region_obj->region.addr_handler = NULL; @@ -434,26 +434,26 @@ acpi_ev_initialize_region ( region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED; /* - * Find any "_REG" associated with this region definition + * Find any "_REG" method associated with this region definition */ status = acpi_ns_search_node (*reg_name_ptr, node, ACPI_TYPE_METHOD, &method_node); if (ACPI_SUCCESS (status)) { /* - * The _REG method is optional and there can be only one per region - * definition. This will be executed when the handler is attached - * or removed + * The _REG method is optional and there can be only one per region + * definition. This will be executed when the handler is attached + * or removed */ region_obj2->extra.method_REG = method_node; } /* - * The following loop depends upon the root Node having no parent - * ie: Acpi_gbl_Root_node->Parent_entry being set to NULL + * The following loop depends upon the root Node having no parent + * ie: Acpi_gbl_Root_node->Parent_entry being set to NULL */ while (node) { /* - * Check to see if a handler exists + * Check to see if a handler exists */ handler_obj = NULL; obj_desc = acpi_ns_get_attached_object (node); @@ -483,39 +483,36 @@ acpi_ev_initialize_region ( } while (handler_obj) { - /* - * This guy has at least one address handler - * see if it has the type we want - */ + /* Is this handler of the correct type? */ + if (handler_obj->addr_handler.space_id == space_id) { + /* Found correct handler */ + ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Found handler %p for region %p in obj %p\n", handler_obj, region_obj, obj_desc)); - /* - * Found it! Now update the region and the handler - */ status = acpi_ev_attach_region (handler_obj, region_obj, acpi_ns_locked); return_ACPI_STATUS (AE_OK); } - handler_obj = handler_obj->addr_handler.next; + /* Try next handler in the list */ - } /* while handlerobj */ + handler_obj = handler_obj->addr_handler.next; + } } /* - * This one does not have the handler we need - * Pop up one level + * This node does not have the handler we need; + * Pop up one level */ node = acpi_ns_get_parent_node (node); - - } /* while Node != ROOT */ + } /* - * If we get here, there is no handler for this region + * If we get here, there is no handler for this region */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "No handler for Region_type %s(%X) (Region_obj %p)\n", diff --git a/drivers/acpi/events/evxface.c b/drivers/acpi/events/evxface.c index d172574de847..1218afa13dd0 100644 --- a/drivers/acpi/events/evxface.c +++ b/drivers/acpi/events/evxface.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evxface - External interfaces for ACPI events - * $Revision: 128 $ + * $Revision: 129 $ * *****************************************************************************/ @@ -79,7 +79,6 @@ acpi_install_fixed_event_handler ( goto cleanup; } - /* Install the handler before enabling the event */ acpi_gbl_fixed_event_handlers[event].handler = handler; diff --git a/drivers/acpi/executer/exconfig.c b/drivers/acpi/executer/exconfig.c index a1b2e4ffee0d..9b11d9d4325e 100644 --- a/drivers/acpi/executer/exconfig.c +++ b/drivers/acpi/executer/exconfig.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes) - * $Revision: 65 $ + * $Revision: 66 $ * *****************************************************************************/ @@ -274,7 +274,7 @@ acpi_ex_load_op ( case ACPI_TYPE_REGION: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Region %p %s\n", - obj_desc, acpi_ut_get_type_name (obj_desc->common.type))); + obj_desc, acpi_ut_get_object_type_name (obj_desc))); /* Get the table header */ @@ -319,7 +319,7 @@ acpi_ex_load_op ( case INTERNAL_TYPE_INDEX_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Field %p %s\n", - obj_desc, acpi_ut_get_type_name (obj_desc->common.type))); + obj_desc, acpi_ut_get_object_type_name (obj_desc))); /* * The length of the field must be at least as large as the table. @@ -415,8 +415,7 @@ acpi_ex_unload_table ( */ if ((!ddb_handle) || (ACPI_GET_DESCRIPTOR_TYPE (ddb_handle) != ACPI_DESC_TYPE_OPERAND) || - (((acpi_operand_object *)ddb_handle)->common.type != - INTERNAL_TYPE_REFERENCE)) { + (ACPI_GET_OBJECT_TYPE (ddb_handle) != INTERNAL_TYPE_REFERENCE)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } diff --git a/drivers/acpi/executer/exconvrt.c b/drivers/acpi/executer/exconvrt.c index 014728cbe33d..d3aa268ff15a 100644 --- a/drivers/acpi/executer/exconvrt.c +++ b/drivers/acpi/executer/exconvrt.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconvrt - Object conversion routines - * $Revision: 35 $ + * $Revision: 37 $ * *****************************************************************************/ @@ -64,7 +64,7 @@ acpi_ex_convert_to_integer ( ACPI_FUNCTION_TRACE_PTR ("Ex_convert_to_integer", obj_desc); - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: *result_desc = obj_desc; return_ACPI_STATUS (AE_OK); @@ -103,7 +103,7 @@ acpi_ex_convert_to_integer ( /* * String conversion is different than Buffer conversion */ - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_STRING: /* @@ -190,11 +190,11 @@ acpi_ex_convert_to_buffer ( ACPI_FUNCTION_TRACE_PTR ("Ex_convert_to_buffer", obj_desc); - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: /* - * Create a new Buffer + * Create a new Buffer object */ ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); if (!ret_desc) { @@ -203,7 +203,6 @@ acpi_ex_convert_to_buffer ( /* Need enough space for one integer */ - ret_desc->buffer.length = acpi_gbl_integer_byte_width; new_buf = ACPI_MEM_CALLOCATE (acpi_gbl_integer_byte_width); if (!new_buf) { ACPI_REPORT_ERROR @@ -217,7 +216,12 @@ acpi_ex_convert_to_buffer ( for (i = 0; i < acpi_gbl_integer_byte_width; i++) { new_buf[i] = (u8) (obj_desc->integer.value >> (i * 8)); } + + /* Complete buffer object initialization */ + + ret_desc->buffer.flags |= AOPOBJ_DATA_VALID; ret_desc->buffer.pointer = new_buf; + ret_desc->buffer.length = acpi_gbl_integer_byte_width; /* Return the new buffer descriptor */ @@ -373,7 +377,7 @@ acpi_ex_convert_to_string ( ACPI_FUNCTION_TRACE_PTR ("Ex_convert_to_string", obj_desc); - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: string_length = acpi_gbl_integer_byte_width * 2; @@ -565,10 +569,10 @@ acpi_ex_convert_to_target_type ( default: /* No conversion allowed for these types */ - if (destination_type != source_desc->common.type) { + if (destination_type != ACPI_GET_OBJECT_TYPE (source_desc)) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Target does not allow conversion of type %s to %s\n", - acpi_ut_get_type_name ((source_desc)->common.type), + acpi_ut_get_object_type_name (source_desc), acpi_ut_get_type_name (destination_type))); status = AE_TYPE; } diff --git a/drivers/acpi/executer/excreate.c b/drivers/acpi/executer/excreate.c index 4b530a143004..7ea92f53a22b 100644 --- a/drivers/acpi/executer/excreate.c +++ b/drivers/acpi/executer/excreate.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: excreate - Named object creation - * $Revision: 91 $ + * $Revision: 92 $ * *****************************************************************************/ @@ -40,8 +40,7 @@ * * FUNCTION: Acpi_ex_create_alias * - * PARAMETERS: Walk_state - Current state, contains List of - * operands for the opcode + * PARAMETERS: Walk_state - Current state, contains operands * * RETURN: Status * @@ -392,9 +391,7 @@ cleanup: * * FUNCTION: Acpi_ex_create_processor * - * PARAMETERS: Op - Op containing the Processor definition and - * args - * Processor_node - Parent Node for the processor object + * PARAMETERS: Walk_state - Current state * * RETURN: Status * @@ -447,9 +444,7 @@ acpi_ex_create_processor ( * * FUNCTION: Acpi_ex_create_power_resource * - * PARAMETERS: Op - Op containing the Power_resource definition - * and args - * Power_node - Parent Node for the power object + * PARAMETERS: Walk_state - Current state * * RETURN: Status * @@ -502,8 +497,7 @@ acpi_ex_create_power_resource ( * * PARAMETERS: Aml_start - First byte of the method's AML * Aml_length - AML byte count for this method - * Method_flags - AML method flag byte - * Method - Method Node + * Walk_state - Current state * * RETURN: Status * diff --git a/drivers/acpi/executer/exdump.c b/drivers/acpi/executer/exdump.c index eb414ac3dadb..7cb741f95d95 100644 --- a/drivers/acpi/executer/exdump.c +++ b/drivers/acpi/executer/exdump.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exdump - Interpreter debug output routines - * $Revision: 153 $ + * $Revision: 155 $ * *****************************************************************************/ @@ -96,34 +96,10 @@ acpi_ex_dump_operand ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", obj_desc)); - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case INTERNAL_TYPE_REFERENCE: switch (obj_desc->reference.opcode) { - case AML_ZERO_OP: - - acpi_os_printf ("Reference: Zero\n"); - break; - - - case AML_ONE_OP: - - acpi_os_printf ("Reference: One\n"); - break; - - - case AML_ONES_OP: - - acpi_os_printf ("Reference: Ones\n"); - break; - - - case AML_REVISION_OP: - - acpi_os_printf ("Reference: Revision\n"); - break; - - case AML_DEBUG_OP: acpi_os_printf ("Reference: Debug\n"); @@ -150,7 +126,7 @@ acpi_ex_dump_operand ( acpi_os_printf ("Reference: Arg%d", obj_desc->reference.offset); - if (ACPI_TYPE_INTEGER == obj_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) { /* Value is a Number */ acpi_os_printf (" value is [%8.8X%8.8x]", @@ -167,7 +143,7 @@ acpi_ex_dump_operand ( acpi_os_printf ("Reference: Local%d", obj_desc->reference.offset); - if (ACPI_TYPE_INTEGER == obj_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) { /* Value is a Number */ @@ -189,7 +165,7 @@ acpi_ex_dump_operand ( /* unknown opcode */ - acpi_os_printf ("Unknown opcode=%X\n", + acpi_os_printf ("Unknown Reference opcode=%X\n", obj_desc->reference.opcode); break; @@ -340,8 +316,7 @@ acpi_ex_dump_operand ( { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL* \n")); } - else if (ACPI_TYPE_BUFFER != - obj_desc->buffer_field.buffer_obj->common.type) + else if (ACPI_GET_OBJECT_TYPE (obj_desc->buffer_field.buffer_obj) != ACPI_TYPE_BUFFER) { acpi_os_printf ("*not a Buffer* \n"); } @@ -399,9 +374,9 @@ acpi_ex_dump_operand ( default: - /* Unknown Obj_desc->Common.Type value */ + /* Unknown Type */ - acpi_os_printf ("Unknown Type %X\n", obj_desc->common.type); + acpi_os_printf ("Unknown Type %X\n", ACPI_GET_OBJECT_TYPE (obj_desc)); break; } @@ -603,13 +578,13 @@ acpi_ex_dump_object_descriptor ( /* Common Fields */ - acpi_ex_out_string ("Type", acpi_ut_get_type_name (obj_desc->common.type)); + acpi_ex_out_string ("Type", acpi_ut_get_object_type_name (obj_desc)); acpi_ex_out_integer ("Reference Count", obj_desc->common.reference_count); acpi_ex_out_integer ("Flags", obj_desc->common.flags); /* Object-specific Fields */ - switch (obj_desc->common.type) + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: @@ -649,7 +624,7 @@ acpi_ex_dump_object_descriptor ( acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]); if (obj_desc->package.elements[i]) { - acpi_os_printf (" %s", acpi_ut_get_type_name ((obj_desc->package.elements[i])->common.type)); + acpi_os_printf (" %s", acpi_ut_get_object_type_name (obj_desc->package.elements[i])); } acpi_os_printf ("\n"); } @@ -745,7 +720,7 @@ acpi_ex_dump_object_descriptor ( acpi_ex_out_integer ("End_buf_valid_bits", obj_desc->common_field.end_buffer_valid_bits); acpi_ex_out_pointer ("Parent_node", obj_desc->common_field.node); - switch (obj_desc->common.type) + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_BUFFER_FIELD: acpi_ex_out_pointer ("Buffer_obj", obj_desc->buffer_field.buffer_obj); @@ -813,15 +788,10 @@ acpi_ex_dump_object_descriptor ( case INTERNAL_TYPE_DEF_ANY: case INTERNAL_TYPE_EXTRA: case INTERNAL_TYPE_DATA: - - acpi_os_printf ("Ex_dump_object_descriptor: Display not implemented for object type %X\n", - obj_desc->common.type); - break; - - default: - acpi_os_printf ("Ex_dump_object_descriptor: Unknown object type %X\n", obj_desc->common.type); + acpi_os_printf ("Ex_dump_object_descriptor: Display not implemented for object type %s\n", + acpi_ut_get_object_type_name (obj_desc)); break; } diff --git a/drivers/acpi/executer/exfield.c b/drivers/acpi/executer/exfield.c index 1326c3371a02..a7615997d478 100644 --- a/drivers/acpi/executer/exfield.c +++ b/drivers/acpi/executer/exfield.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfield - ACPI AML (p-code) execution - field manipulation - * $Revision: 110 $ + * $Revision: 112 $ * *****************************************************************************/ @@ -70,7 +70,7 @@ acpi_ex_read_data_from_field ( return_ACPI_STATUS (AE_AML_NO_OPERAND); } - if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) { /* * If the Buffer_field arguments have not been previously evaluated, * evaluate them now and save the results. @@ -110,6 +110,8 @@ acpi_ex_read_data_from_field ( return_ACPI_STATUS (AE_NO_MEMORY); } + /* Complete the buffer object initialization */ + buffer_desc->common.flags = AOPOBJ_DATA_VALID; buffer_desc->buffer.length = length; buffer = buffer_desc->buffer.pointer; @@ -129,7 +131,7 @@ acpi_ex_read_data_from_field ( ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Obj=%p Type=%X Buf=%p Len=%X\n", - obj_desc, obj_desc->common.type, buffer, length)); + obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc), buffer, length)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Field_write: Bit_len=%X Bit_off=%X Byte_off=%X\n", obj_desc->common_field.bit_length, @@ -193,7 +195,7 @@ acpi_ex_write_data_to_field ( return_ACPI_STATUS (AE_AML_NO_OPERAND); } - if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) { /* * If the Buffer_field arguments have not been previously evaluated, * evaluate them now and save the results. @@ -209,7 +211,7 @@ acpi_ex_write_data_to_field ( /* * Get a pointer to the data to be written */ - switch (source_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (source_desc)) { case ACPI_TYPE_INTEGER: buffer = &source_desc->integer.value; length = sizeof (source_desc->integer.value); @@ -258,7 +260,7 @@ acpi_ex_write_data_to_field ( ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Obj=%p Type=%X Buf=%p Len=%X\n", - obj_desc, obj_desc->common.type, buffer, length)); + obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc), buffer, length)); ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Field_read: Bit_len=%X Bit_off=%X Byte_off=%X\n", obj_desc->common_field.bit_length, diff --git a/drivers/acpi/executer/exfldio.c b/drivers/acpi/executer/exfldio.c index d4ffd5e5b927..142352a5a600 100644 --- a/drivers/acpi/executer/exfldio.c +++ b/drivers/acpi/executer/exfldio.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfldio - Aml Field I/O - * $Revision: 86 $ + * $Revision: 87 $ * *****************************************************************************/ @@ -64,9 +64,11 @@ acpi_ex_setup_region ( rgn_desc = obj_desc->common_field.region_obj; - if (ACPI_TYPE_REGION != rgn_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (rgn_desc) != ACPI_TYPE_REGION) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X (%s)\n", - rgn_desc->common.type, acpi_ut_get_type_name (rgn_desc->common.type))); + ACPI_GET_OBJECT_TYPE (rgn_desc), + acpi_ut_get_object_type_name (rgn_desc))); + return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -298,7 +300,7 @@ acpi_ex_field_datum_io ( * Bank_fields - Write to a Bank Register, then read/write from/to an Op_region * Index_fields - Write to an Index Register, then read/write from/to a Data Register */ - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_BUFFER_FIELD: /* * If the Buffer_field arguments have not been previously evaluated, @@ -416,7 +418,7 @@ acpi_ex_field_datum_io ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p, Wrong object type - %s\n", - obj_desc, acpi_ut_get_type_name (obj_desc->common.type))); + obj_desc, acpi_ut_get_object_type_name (obj_desc))); status = AE_AML_INTERNAL; break; } diff --git a/drivers/acpi/executer/exmisc.c b/drivers/acpi/executer/exmisc.c index becf07f496b4..4e0efea22b28 100644 --- a/drivers/acpi/executer/exmisc.c +++ b/drivers/acpi/executer/exmisc.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes - * $Revision: 104 $ + * $Revision: 106 $ * *****************************************************************************/ @@ -64,7 +64,7 @@ acpi_ex_get_object_reference ( switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) { case ACPI_DESC_TYPE_OPERAND: - if (obj_desc->common.type != INTERNAL_TYPE_REFERENCE) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != INTERNAL_TYPE_REFERENCE) { *return_desc = NULL; status = AE_TYPE; goto cleanup; @@ -184,9 +184,9 @@ acpi_ex_concat_template ( ACPI_MEMCPY (new_buf, obj_desc1->buffer.pointer, length1); ACPI_MEMCPY (new_buf + length1, obj_desc2->buffer.pointer, length2); - /* - * Point the return object to the new buffer - */ + /* Complete the buffer object initialization */ + + return_desc->common.flags = AOPOBJ_DATA_VALID; return_desc->buffer.pointer = (u8 *) new_buf; return_desc->buffer.length = (u32) (length1 + length2); @@ -243,21 +243,22 @@ acpi_ex_do_concatenate ( /* * There are three cases to handle: - * 1) Two Integers concatenated to produce a buffer - * 2) Two Strings concatenated to produce a string - * 3) Two Buffers concatenated to produce a buffer + * + * 1) Two Integers concatenated to produce a new Buffer + * 2) Two Strings concatenated to produce a new String + * 3) Two Buffers concatenated to produce a new Buffer */ - switch (obj_desc1->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc1)) { case ACPI_TYPE_INTEGER: - /* Result of two integers is a buffer */ + /* Result of two Integers is a Buffer */ return_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); if (!return_desc) { return (AE_NO_MEMORY); } - /* Need enough space for two integers */ + /* Need enough buffer space for two integers */ return_desc->buffer.length = acpi_gbl_integer_byte_width * 2; new_buf = ACPI_MEM_CALLOCATE (return_desc->buffer.length); @@ -268,8 +269,6 @@ acpi_ex_do_concatenate ( goto cleanup; } - return_desc->buffer.pointer = (u8 *) new_buf; - /* Convert the first integer */ this_integer = obj_desc1->integer.value; @@ -286,11 +285,17 @@ acpi_ex_do_concatenate ( this_integer >>= 8; } + /* Complete the buffer object initialization */ + + return_desc->common.flags = AOPOBJ_DATA_VALID; + return_desc->buffer.pointer = (u8 *) new_buf; break; case ACPI_TYPE_STRING: + /* Result of two Strings is a String */ + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_STRING); if (!return_desc) { return (AE_NO_MEMORY); @@ -307,11 +312,13 @@ acpi_ex_do_concatenate ( goto cleanup; } + /* Concatenate the strings */ + ACPI_STRCPY (new_buf, obj_desc1->string.pointer); ACPI_STRCPY (new_buf + obj_desc1->string.length, obj_desc2->string.pointer); - /* Point the return object to the new string */ + /* Complete the String object initialization */ return_desc->string.pointer = new_buf; return_desc->string.length = obj_desc1->string.length + @@ -321,7 +328,7 @@ acpi_ex_do_concatenate ( case ACPI_TYPE_BUFFER: - /* Operand0 is a buffer */ + /* Result of two Buffers is a Buffer */ return_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); if (!return_desc) { @@ -337,22 +344,26 @@ acpi_ex_do_concatenate ( goto cleanup; } + /* Concatenate the buffers */ + ACPI_MEMCPY (new_buf, obj_desc1->buffer.pointer, obj_desc1->buffer.length); ACPI_MEMCPY (new_buf + obj_desc1->buffer.length, obj_desc2->buffer.pointer, obj_desc2->buffer.length); - /* - * Point the return object to the new buffer - */ + /* Complete the buffer object initialization */ + return_desc->common.flags = AOPOBJ_DATA_VALID; return_desc->buffer.pointer = (u8 *) new_buf; return_desc->buffer.length = obj_desc1->buffer.length + - obj_desc2->buffer.length; + obj_desc2->buffer.length; break; default: + + /* Invalid object type, should not happen here */ + status = AE_AML_INTERNAL; return_desc = NULL; } diff --git a/drivers/acpi/executer/exoparg1.c b/drivers/acpi/executer/exoparg1.c index c26186e48eab..497e7e18933e 100644 --- a/drivers/acpi/executer/exoparg1.c +++ b/drivers/acpi/executer/exoparg1.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg1 - AML execution - opcodes with 1 argument - * $Revision: 137 $ + * $Revision: 139 $ * *****************************************************************************/ @@ -560,23 +560,12 @@ acpi_ex_opcode_1A_0T_1R ( case AML_TYPE_OP: /* Object_type (Source_object) */ - if (INTERNAL_TYPE_REFERENCE == operand[0]->common.type) { + if (ACPI_GET_OBJECT_TYPE (operand[0]) == INTERNAL_TYPE_REFERENCE) { /* * Not a Name -- an indirect name pointer would have * been converted to a direct name pointer in Resolve_operands */ switch (operand[0]->reference.opcode) { - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: - case AML_REVISION_OP: - - /* Constants are of type Integer */ - - type = ACPI_TYPE_INTEGER; - break; - - case AML_DEBUG_OP: /* The Debug Object is of type "Debug_object" */ @@ -596,7 +585,7 @@ acpi_ex_opcode_1A_0T_1R ( * of the individual package element that is referenced by * the index. */ - type = (*(operand[0]->reference.where))->common.type; + type = ACPI_GET_OBJECT_TYPE (*(operand[0]->reference.where)); } break; @@ -611,7 +600,7 @@ acpi_ex_opcode_1A_0T_1R ( default: - ACPI_REPORT_ERROR (("Acpi_ex_opcode_1A_0T_1R/Type_op: Internal error - Unknown Reference subtype %X\n", + ACPI_REPORT_ERROR (("Acpi_ex_opcode_1A_0T_1R/Type_op: Unknown Reference subtype %X\n", operand[0]->reference.opcode)); status = AE_AML_INTERNAL; goto cleanup; @@ -668,7 +657,7 @@ acpi_ex_opcode_1A_0T_1R ( * point (even if the original operand was an object reference, it * will be resolved and typechecked during operand resolution.) */ - switch (temp_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (temp_desc)) { case ACPI_TYPE_BUFFER: value = temp_desc->buffer.length; break; @@ -683,7 +672,7 @@ acpi_ex_opcode_1A_0T_1R ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Size_of, Not Buf/Str/Pkg - found type %s\n", - acpi_ut_get_type_name (temp_desc->common.type))); + acpi_ut_get_object_type_name (temp_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; } diff --git a/drivers/acpi/executer/exoparg2.c b/drivers/acpi/executer/exoparg2.c index 265dc08860c6..02361f1fba0d 100644 --- a/drivers/acpi/executer/exoparg2.c +++ b/drivers/acpi/executer/exoparg2.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exoparg2 - AML execution - opcodes with 2 arguments - * $Revision: 106 $ + * $Revision: 108 $ * *****************************************************************************/ @@ -297,7 +297,7 @@ acpi_ex_opcode_2A_1T_1R ( * guaranteed to be either Integer/String/Buffer by the operand * resolution mechanism above. */ - switch (operand[0]->common.type) { + switch (ACPI_GET_OBJECT_TYPE (operand[0])) { case ACPI_TYPE_INTEGER: status = acpi_ex_convert_to_integer (operand[1], &operand[1], walk_state); break; @@ -355,7 +355,7 @@ acpi_ex_opcode_2A_1T_1R ( /* * At this point, the Source operand is either a Package or a Buffer */ - if (operand[0]->common.type == 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) { @@ -364,10 +364,10 @@ acpi_ex_opcode_2A_1T_1R ( goto cleanup; } - if ((operand[2]->common.type == INTERNAL_TYPE_REFERENCE) && - (operand[2]->reference.opcode == AML_ZERO_OP)) { + if ((ACPI_GET_OBJECT_TYPE (operand[2]) == ACPI_TYPE_INTEGER) && + (operand[2]->common.flags & AOPOBJ_AML_CONSTANT)) { /* - * There is no actual result descriptor (the Zero_op Result + * There is no actual result descriptor (the Zero_op/Constant Result * descriptor is a placeholder), so just delete the placeholder and * return a reference to the package element */ @@ -381,7 +381,7 @@ acpi_ex_opcode_2A_1T_1R ( */ temp_desc = operand[0]->package.elements [index]; return_desc->reference.opcode = AML_INDEX_OP; - return_desc->reference.target_type = temp_desc->common.type; + return_desc->reference.target_type = ACPI_GET_OBJECT_TYPE (temp_desc); return_desc->reference.object = temp_desc; status = acpi_ex_store (return_desc, operand[2], walk_state); diff --git a/drivers/acpi/executer/exoparg3.c b/drivers/acpi/executer/exoparg3.c index 11f0858510de..8b829dcf24bb 100644 --- a/drivers/acpi/executer/exoparg3.c +++ b/drivers/acpi/executer/exoparg3.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg3 - AML execution - opcodes with 3 arguments - * $Revision: 13 $ + * $Revision: 14 $ * *****************************************************************************/ @@ -159,7 +159,7 @@ acpi_ex_opcode_3A_1T_1R ( * Create the return object. The Source operand is guaranteed to be * either a String or a Buffer, so just use its type. */ - return_desc = acpi_ut_create_internal_object (operand[0]->common.type); + return_desc = acpi_ut_create_internal_object (ACPI_GET_OBJECT_TYPE (operand[0])); if (!return_desc) { status = AE_NO_MEMORY; goto cleanup; diff --git a/drivers/acpi/executer/exoparg6.c b/drivers/acpi/executer/exoparg6.c index 36cf10a5c8a3..251c4b435553 100644 --- a/drivers/acpi/executer/exoparg6.c +++ b/drivers/acpi/executer/exoparg6.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exoparg6 - AML execution - opcodes with 6 arguments - * $Revision: 10 $ + * $Revision: 11 $ * *****************************************************************************/ @@ -212,7 +212,7 @@ acpi_ex_opcode_6A_0T_1R ( * Treat any NULL or non-numeric elements as non-matching. */ if (!this_element || - this_element->common.type != ACPI_TYPE_INTEGER) { + ACPI_GET_OBJECT_TYPE (this_element) != ACPI_TYPE_INTEGER) { continue; } diff --git a/drivers/acpi/executer/exprep.c b/drivers/acpi/executer/exprep.c index a30fe7bb0099..40608e1d3967 100644 --- a/drivers/acpi/executer/exprep.c +++ b/drivers/acpi/executer/exprep.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exprep - ACPI AML (p-code) execution - field prep utilities - * $Revision: 117 $ + * $Revision: 118 $ * *****************************************************************************/ @@ -140,7 +140,7 @@ acpi_ex_decode_field_access ( return (0); } - if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) { /* * Buffer_field access can be on any byte boundary, so the * Byte_alignment is always 1 byte -- regardless of any Byte_alignment diff --git a/drivers/acpi/executer/exresnte.c b/drivers/acpi/executer/exresnte.c index 7548575a2545..d4917693b3f8 100644 --- a/drivers/acpi/executer/exresnte.c +++ b/drivers/acpi/executer/exresnte.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresnte - AML Interpreter object resolution - * $Revision: 53 $ + * $Revision: 56 $ * *****************************************************************************/ @@ -73,7 +73,6 @@ acpi_ex_resolve_node_to_value ( acpi_operand_object *obj_desc = NULL; acpi_namespace_node *node; acpi_object_type entry_type; - acpi_integer temp_val; ACPI_FUNCTION_TRACE ("Ex_resolve_node_to_value"); @@ -113,9 +112,9 @@ acpi_ex_resolve_node_to_value ( switch (entry_type) { case ACPI_TYPE_PACKAGE: - if (ACPI_TYPE_PACKAGE != source_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_PACKAGE) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Package, type %s\n", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -131,9 +130,9 @@ acpi_ex_resolve_node_to_value ( case ACPI_TYPE_BUFFER: - if (ACPI_TYPE_BUFFER != source_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_BUFFER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Buffer, type %s\n", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -149,9 +148,9 @@ acpi_ex_resolve_node_to_value ( case ACPI_TYPE_STRING: - if (ACPI_TYPE_STRING != source_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_STRING) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a String, type %s\n", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -164,9 +163,9 @@ acpi_ex_resolve_node_to_value ( case ACPI_TYPE_INTEGER: - if (ACPI_TYPE_INTEGER != source_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_INTEGER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Integer, type %s\n", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -216,61 +215,14 @@ acpi_ex_resolve_node_to_value ( return_ACPI_STATUS (AE_AML_OPERAND_TYPE); /* Cannot be AE_TYPE */ - /* - * The only named references allowed are named constants - * e.g. -- Name (\OSFL, Ones) - */ case INTERNAL_TYPE_REFERENCE: - switch (source_desc->reference.opcode) { - - case AML_ZERO_OP: - - temp_val = 0; - break; - - case AML_ONE_OP: - - temp_val = 1; - break; - - case AML_ONES_OP: - - temp_val = ACPI_INTEGER_MAX; - break; - - case AML_REVISION_OP: - - temp_val = ACPI_CA_SUPPORT_LEVEL; - break; + /* No named references are allowed here */ - default: + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported reference opcode %X\n", + source_desc->reference.opcode)); - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported reference opcode %X\n", - source_desc->reference.opcode)); - - return_ACPI_STATUS (AE_AML_BAD_OPCODE); - } - - /* Create object for result */ - - obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!obj_desc) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - obj_desc->integer.value = temp_val; - - /* - * Truncate value if we are executing from a 32-bit ACPI table - * AND actually executing AML code. If we are resolving - * an object in the namespace via an external call to the - * subsystem, we will have a null Walk_state - */ - if (walk_state) { - acpi_ex_truncate_for32bit_table (obj_desc, walk_state); - } - break; + return_ACPI_STATUS (AE_AML_OPERAND_TYPE); /* Default case is for unknown types */ diff --git a/drivers/acpi/executer/exresolv.c b/drivers/acpi/executer/exresolv.c index 204b9be93abb..e3a7c6b25455 100644 --- a/drivers/acpi/executer/exresolv.c +++ b/drivers/acpi/executer/exresolv.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresolv - AML Interpreter object resolution - * $Revision: 111 $ + * $Revision: 114 $ * *****************************************************************************/ @@ -130,7 +130,7 @@ acpi_ex_resolve_object_to_value ( /* This is an acpi_operand_object */ - switch (stack_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (stack_desc)) { case INTERNAL_TYPE_REFERENCE: opcode = stack_desc->reference.opcode; @@ -178,56 +178,6 @@ acpi_ex_resolve_object_to_value ( stack_desc->reference.offset, obj_desc)); break; - /* - * For constants, we must change the reference/constant object - * to a real integer object - */ - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: - case AML_REVISION_OP: - - /* Create a new integer object */ - - obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!obj_desc) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - switch (opcode) { - case AML_ZERO_OP: - obj_desc->integer.value = 0; - break; - - case AML_ONE_OP: - obj_desc->integer.value = 1; - break; - - case AML_ONES_OP: - obj_desc->integer.value = ACPI_INTEGER_MAX; - - /* Truncate value if we are executing from a 32-bit ACPI table */ - - acpi_ex_truncate_for32bit_table (obj_desc, walk_state); - break; - - case AML_REVISION_OP: - obj_desc->integer.value = ACPI_CA_SUPPORT_LEVEL; - break; - - default: - /* No other opcodes can get here */ - break; - } - - /* - * Remove a reference from the original reference object - * and put the new object in its place - */ - acpi_ut_remove_reference (stack_desc); - *stack_ptr = obj_desc; - break; - case AML_INDEX_OP: @@ -239,6 +189,7 @@ acpi_ex_resolve_object_to_value ( case ACPI_TYPE_PACKAGE: + obj_desc = *stack_desc->reference.where; if (obj_desc) { /* @@ -262,7 +213,9 @@ acpi_ex_resolve_object_to_value ( } break; + default: + /* Invalid reference object */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, @@ -282,14 +235,12 @@ acpi_ex_resolve_object_to_value ( default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference object subtype %02X in %p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference opcode %X in %p\n", opcode, stack_desc)); status = AE_AML_INTERNAL; break; - - } /* switch (Opcode) */ - - break; /* case INTERNAL_TYPE_REFERENCE */ + } + break; case ACPI_TYPE_BUFFER: @@ -313,7 +264,7 @@ acpi_ex_resolve_object_to_value ( case INTERNAL_TYPE_INDEX_FIELD: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Field_read Source_desc=%p Type=%X\n", - stack_desc, stack_desc->common.type)); + stack_desc, ACPI_GET_OBJECT_TYPE (stack_desc))); status = acpi_ex_read_data_from_field (walk_state, stack_desc, &obj_desc); *stack_ptr = (void *) obj_desc; diff --git a/drivers/acpi/executer/exresop.c b/drivers/acpi/executer/exresop.c index 27edf13850ab..531b0d305e4f 100644 --- a/drivers/acpi/executer/exresop.c +++ b/drivers/acpi/executer/exresop.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresop - AML Interpreter operand/object resolution - * $Revision: 50 $ + * $Revision: 53 $ * *****************************************************************************/ @@ -65,6 +65,18 @@ acpi_ex_check_object_type ( return (AE_OK); } + if (type_needed == INTERNAL_TYPE_REFERENCE) { + /* + * Allow the AML "Constant" opcodes (Zero, One, etc.) to be reference + * objects and thus allow them to be targets. (As per the ACPI + * specification, a store to a constant is a noop.) + */ + if ((this_type == ACPI_TYPE_INTEGER) && + (((acpi_operand_object *) object)->common.flags & AOPOBJ_AML_CONSTANT)) { + return (AE_OK); + } + } + if (type_needed != this_type) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [%s], found [%s] %p\n", @@ -85,18 +97,17 @@ acpi_ex_check_object_type ( * PARAMETERS: Opcode - Opcode being interpreted * Stack_ptr - Pointer to the operand stack to be * resolved - * Walk_state - Current stateu + * Walk_state - Current state * * RETURN: Status * * DESCRIPTION: Convert multiple input operands to the types required by the * target operator. * - * Each nibble (actually 5 bits) in Arg_types represents one required - * operand and indicates the required Type: - * - * The corresponding operand will be converted to the required type if - * possible, otherwise we abort with an exception. + * Each 5-bit group in Arg_types represents one required + * operand and indicates the required Type. The corresponding operand + * will be converted to the required type if possible, otherwise we + * abort with an exception. * ******************************************************************************/ @@ -169,7 +180,7 @@ acpi_ex_resolve_operands ( /* ACPI internal object */ - object_type = obj_desc->common.type; + object_type = ACPI_GET_OBJECT_TYPE (obj_desc); /* Check for bad acpi_object_type */ @@ -190,15 +201,11 @@ acpi_ex_resolve_operands ( } switch (obj_desc->reference.opcode) { - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: case AML_DEBUG_OP: case AML_NAME_OP: case AML_INDEX_OP: case AML_ARG_OP: case AML_LOCAL_OP: - case AML_REVISION_OP: ACPI_DEBUG_ONLY_MEMBERS (ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Reference Opcode: %s\n", op_info->name))); @@ -206,7 +213,7 @@ acpi_ex_resolve_operands ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Reference Opcode: Unknown [%02x]\n", + "Unknown Reference Opcode %X\n", obj_desc->reference.opcode)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); @@ -293,7 +300,7 @@ acpi_ex_resolve_operands ( * -- All others must be resolved below. */ if ((opcode == AML_STORE_OP) && - ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) && + (ACPI_GET_OBJECT_TYPE (*stack_ptr) == INTERNAL_TYPE_REFERENCE) && ((*stack_ptr)->reference.opcode == AML_INDEX_OP)) { goto next_operand; } @@ -378,7 +385,7 @@ acpi_ex_resolve_operands ( if (status == AE_TYPE) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Integer/String/Buffer], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -399,7 +406,7 @@ acpi_ex_resolve_operands ( if (status == AE_TYPE) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Integer/String/Buffer], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -420,7 +427,7 @@ acpi_ex_resolve_operands ( if (status == AE_TYPE) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Integer/String/Buffer], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -434,7 +441,7 @@ acpi_ex_resolve_operands ( /* Need an operand of type INTEGER, STRING or BUFFER */ - switch ((*stack_ptr)->common.type) { + switch (ACPI_GET_OBJECT_TYPE (*stack_ptr)) { case ACPI_TYPE_INTEGER: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: @@ -445,7 +452,7 @@ acpi_ex_resolve_operands ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Integer/String/Buffer], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -460,7 +467,7 @@ acpi_ex_resolve_operands ( * The only reference allowed here is a direct reference to * a namespace node. */ - if ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) { + if (ACPI_GET_OBJECT_TYPE (*stack_ptr) == INTERNAL_TYPE_REFERENCE) { if (!(*stack_ptr)->reference.node) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Node Reference], found [%p]\n", @@ -492,7 +499,7 @@ acpi_ex_resolve_operands ( /* Need a buffer, string, package */ - switch ((*stack_ptr)->common.type) { + switch (ACPI_GET_OBJECT_TYPE (*stack_ptr)) { case ACPI_TYPE_PACKAGE: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: @@ -503,7 +510,7 @@ acpi_ex_resolve_operands ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Buf/Str/Pkg], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -514,7 +521,7 @@ acpi_ex_resolve_operands ( /* Need a buffer or package or (ACPI 2.0) String */ - switch ((*stack_ptr)->common.type) { + switch (ACPI_GET_OBJECT_TYPE (*stack_ptr)) { case ACPI_TYPE_PACKAGE: case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: @@ -525,7 +532,7 @@ acpi_ex_resolve_operands ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed [Buf/Str/Pkg], found [%s] %p\n", - acpi_ut_get_type_name ((*stack_ptr)->common.type), *stack_ptr)); + acpi_ut_get_object_type_name (*stack_ptr), *stack_ptr)); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -548,7 +555,7 @@ acpi_ex_resolve_operands ( * required object type (Simple cases only). */ status = acpi_ex_check_object_type (type_needed, - (*stack_ptr)->common.type, *stack_ptr); + ACPI_GET_OBJECT_TYPE (*stack_ptr), *stack_ptr); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } diff --git a/drivers/acpi/executer/exstore.c b/drivers/acpi/executer/exstore.c index f15d3a625362..83cee00d5dfa 100644 --- a/drivers/acpi/executer/exstore.c +++ b/drivers/acpi/executer/exstore.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exstore - AML Interpreter object store support - * $Revision: 164 $ + * $Revision: 167 $ * *****************************************************************************/ @@ -89,18 +89,33 @@ acpi_ex_store ( return_ACPI_STATUS (status); } - /* Destination object must be an object of type Reference */ + /* Destination object must be a Reference or a Constant object */ + + switch (ACPI_GET_OBJECT_TYPE (dest_desc)) { + case INTERNAL_TYPE_REFERENCE: + break; + + case ACPI_TYPE_INTEGER: + + /* Allow stores to Constants -- a Noop as per ACPI spec */ + + if (dest_desc->common.flags & AOPOBJ_AML_CONSTANT) { + return_ACPI_STATUS (AE_OK); + } + + /*lint: -fallthrough */ + + default: - if (dest_desc->common.type != INTERNAL_TYPE_REFERENCE) { /* Destination is not an Reference */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Destination is not a Reference_obj [%p]\n", dest_desc)); + "Destination is not a Reference or Constant object [%p]\n", dest_desc)); ACPI_DUMP_STACK_ENTRY (source_desc); ACPI_DUMP_STACK_ENTRY (dest_desc); ACPI_DUMP_OPERANDS (&dest_desc, ACPI_IMODE_EXECUTE, "Ex_store", - 2, "Target is not a Reference_obj"); + 2, "Target is not a Reference or Constant object"); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -112,7 +127,6 @@ acpi_ex_store ( * 2) Store to an indexed area of a Buffer or Package * 3) Store to a Method Local or Arg * 4) Store to the debug object - * 5) Store to a constant -- a noop */ switch (ref_desc->reference.opcode) { case AML_NAME_OP: @@ -151,9 +165,9 @@ acpi_ex_store ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Write to Debug Object: ****:\n\n")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %s: ", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); - switch (source_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (source_desc)) { case ACPI_TYPE_INTEGER: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%8.8X%8.8X\n", @@ -185,7 +199,7 @@ acpi_ex_store ( default: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Type %s %p\n", - acpi_ut_get_type_name (source_desc->common.type), source_desc)); + acpi_ut_get_object_type_name (source_desc), source_desc)); break; } @@ -193,28 +207,15 @@ acpi_ex_store ( break; - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: - case AML_REVISION_OP: - - /* - * Storing to a constant is a no-op according to the ACPI - * Specification. (Delete the reference descriptor, however.) - */ - break; - - default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference subtype %02x\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Reference opcode %X\n", ref_desc->reference.opcode)); ACPI_DUMP_ENTRY (ref_desc, ACPI_LV_ERROR); status = AE_AML_INTERNAL; break; - - } /* switch (Ref_desc->Reference.Opcode) */ + } return_ACPI_STATUS (status); } @@ -303,7 +304,7 @@ acpi_ex_store_object_to_index ( * Make sure the target is a Buffer */ obj_desc = index_desc->reference.object; - if (obj_desc->common.type != ACPI_TYPE_BUFFER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_BUFFER) { return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -311,7 +312,7 @@ acpi_ex_store_object_to_index ( * The assignment of the individual elements will be slightly * different for each source type. */ - switch (source_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (source_desc)) { case ACPI_TYPE_INTEGER: /* Use the least-significant byte of the integer */ @@ -335,7 +336,7 @@ acpi_ex_store_object_to_index ( ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Source must be Integer/Buffer/String type, not %s\n", - acpi_ut_get_type_name (source_desc->common.type))); + acpi_ut_get_object_type_name (source_desc))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } @@ -403,7 +404,7 @@ acpi_ex_store_object_to_node ( target_desc = acpi_ns_get_attached_object (node); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n", - source_desc, acpi_ut_get_type_name (source_desc->common.type), + source_desc, acpi_ut_get_object_type_name (source_desc), node, acpi_ut_get_type_name (target_type))); /* @@ -456,8 +457,8 @@ acpi_ex_store_object_to_node ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Store %s into %s via Convert/Attach\n", - acpi_ut_get_type_name (source_desc->common.type), - acpi_ut_get_type_name (new_desc->common.type))); + acpi_ut_get_object_type_name (source_desc), + acpi_ut_get_object_type_name (new_desc))); } break; @@ -466,11 +467,11 @@ acpi_ex_store_object_to_node ( ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %s (%p) directly into node (%p), no implicit conversion\n", - acpi_ut_get_type_name (source_desc->common.type), source_desc, node)); + acpi_ut_get_object_type_name (source_desc), source_desc, node)); /* No conversions for all other types. Just attach the source object */ - status = acpi_ns_attach_object (node, source_desc, source_desc->common.type); + status = acpi_ns_attach_object (node, source_desc, ACPI_GET_OBJECT_TYPE (source_desc)); break; } diff --git a/drivers/acpi/executer/exstoren.c b/drivers/acpi/executer/exstoren.c index a50ed360e298..5b2da611287a 100644 --- a/drivers/acpi/executer/exstoren.c +++ b/drivers/acpi/executer/exstoren.c @@ -3,7 +3,7 @@ * * Module Name: exstoren - AML Interpreter object store support, * Store to Node (namespace object) - * $Revision: 48 $ + * $Revision: 50 $ * *****************************************************************************/ @@ -84,7 +84,7 @@ acpi_ex_resolve_object ( * are all essentially the same. This case handles the * "interchangeable" types Integer, String, and Buffer. */ - if (source_desc->common.type == INTERNAL_TYPE_REFERENCE) { + if (ACPI_GET_OBJECT_TYPE (source_desc) == INTERNAL_TYPE_REFERENCE) { /* Resolve a reference object first */ status = acpi_ex_resolve_to_value (source_desc_ptr, walk_state); @@ -96,15 +96,15 @@ acpi_ex_resolve_object ( /* * Must have a Integer, Buffer, or String */ - if ((source_desc->common.type != ACPI_TYPE_INTEGER) && - (source_desc->common.type != ACPI_TYPE_BUFFER) && - (source_desc->common.type != ACPI_TYPE_STRING)) { + if ((ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_INTEGER) && + (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_BUFFER) && + (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_STRING)) { /* * Conversion successful but still not a valid type */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Cannot assign type %s to %s (must be type Int/Str/Buf)\n", - acpi_ut_get_type_name (source_desc->common.type), + acpi_ut_get_object_type_name (source_desc), acpi_ut_get_type_name (target_type))); status = AE_AML_OPERAND_TYPE; } @@ -195,7 +195,7 @@ acpi_ex_store_object_to_object ( return_ACPI_STATUS (status); } - if (source_desc->common.type != dest_desc->common.type) { + if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_GET_OBJECT_TYPE (dest_desc)) { /* * The source type does not match the type of the destination. * Perform the "implicit conversion" of the source to the current type @@ -205,7 +205,7 @@ acpi_ex_store_object_to_object ( * Otherwise, Actual_src_desc is a temporary object to hold the * converted object. */ - status = acpi_ex_convert_to_target_type (dest_desc->common.type, source_desc, + status = acpi_ex_convert_to_target_type (ACPI_GET_OBJECT_TYPE (dest_desc), source_desc, &actual_src_desc, walk_state); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); @@ -216,14 +216,14 @@ acpi_ex_store_object_to_object ( * We now have two objects of identical types, and we can perform a * copy of the *value* of the source object. */ - switch (dest_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (dest_desc)) { case ACPI_TYPE_INTEGER: dest_desc->integer.value = actual_src_desc->integer.value; /* Truncate value if we are executing from a 32-bit ACPI table */ - acpi_ex_truncate_for32bit_table (dest_desc, walk_state); + acpi_ex_truncate_for32bit_table (dest_desc); break; case ACPI_TYPE_STRING: @@ -246,7 +246,7 @@ acpi_ex_store_object_to_object ( * All other types come here. */ ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Store into type %s not implemented\n", - acpi_ut_get_type_name (dest_desc->common.type))); + acpi_ut_get_object_type_name (dest_desc))); status = AE_NOT_IMPLEMENTED; break; diff --git a/drivers/acpi/executer/exutils.c b/drivers/acpi/executer/exutils.c index 2f937fb9b127..11005af6a7a2 100644 --- a/drivers/acpi/executer/exutils.c +++ b/drivers/acpi/executer/exutils.c @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exutils - interpreter/scanner utilities - * $Revision: 98 $ + * $Revision: 100 $ * *****************************************************************************/ @@ -148,8 +148,6 @@ acpi_ex_validate_object_type ( * FUNCTION: Acpi_ex_truncate_for32bit_table * * PARAMETERS: Obj_desc - Object to be truncated - * Walk_state - Current walk state - * (A method must be executing) * * RETURN: none * @@ -160,8 +158,7 @@ acpi_ex_validate_object_type ( void acpi_ex_truncate_for32bit_table ( - acpi_operand_object *obj_desc, - acpi_walk_state *walk_state) + acpi_operand_object *obj_desc) { ACPI_FUNCTION_ENTRY (); @@ -172,8 +169,7 @@ acpi_ex_truncate_for32bit_table ( * a control method */ if ((!obj_desc) || - (obj_desc->common.type != ACPI_TYPE_INTEGER) || - (!walk_state->method_node)) { + (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER)) { return; } diff --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c index 762ce6aac2b0..8ee0044c45c8 100644 --- a/drivers/acpi/hardware/hwregs.c +++ b/drivers/acpi/hardware/hwregs.c @@ -3,7 +3,7 @@ * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. - * $Revision: 130 $ + * $Revision: 133 $ * ******************************************************************************/ @@ -129,7 +129,7 @@ acpi_get_sleep_type_data ( /* - * Validate parameters + * Validate parameters */ if ((sleep_state > ACPI_S_STATES_MAX) || !sleep_type_a || !sleep_type_b) { @@ -137,7 +137,7 @@ acpi_get_sleep_type_data ( } /* - * Acpi_evaluate the namespace object containing the values for this state + * Evaluate the namespace object containing the values for this state */ status = acpi_ns_evaluate_by_name ((NATIVE_CHAR *) acpi_gbl_db_sleep_states[sleep_state], NULL, &obj_desc); @@ -145,46 +145,47 @@ acpi_get_sleep_type_data ( return_ACPI_STATUS (status); } + /* Must have a return object */ + if (!obj_desc) { ACPI_REPORT_ERROR (("Missing Sleep State object\n")); - return_ACPI_STATUS (AE_NOT_EXIST); + status = AE_NOT_EXIST; } - /* - * We got something, now ensure it is correct. The object must - * be a package and must have at least 2 numeric values as the - * two elements - */ + /* It must be of type Package */ - /* Even though Acpi_evaluate_object resolves package references, - * Ns_evaluate doesn't. So, we do it here. - */ - status = acpi_ut_resolve_package_references(obj_desc); + else if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_PACKAGE) { + ACPI_REPORT_ERROR (("Sleep State object not a Package\n")); + status = AE_AML_OPERAND_TYPE; + } - if (obj_desc->package.count < 2) { - /* Must have at least two elements */ + /* The package must have at least two elements */ + else if (obj_desc->package.count < 2) { ACPI_REPORT_ERROR (("Sleep State package does not have at least two elements\n")); status = AE_AML_NO_OPERAND; } - else if (((obj_desc->package.elements[0])->common.type != ACPI_TYPE_INTEGER) || - ((obj_desc->package.elements[1])->common.type != ACPI_TYPE_INTEGER)) { - /* Must have two */ - ACPI_REPORT_ERROR (("Sleep State package elements are not both of type Number\n")); + /* The first two elements must both be of type Integer */ + + else if ((ACPI_GET_OBJECT_TYPE (obj_desc->package.elements[0]) != ACPI_TYPE_INTEGER) || + (ACPI_GET_OBJECT_TYPE (obj_desc->package.elements[1]) != ACPI_TYPE_INTEGER)) { + ACPI_REPORT_ERROR (("Sleep State package elements are not both Integers (%s, %s)\n", + acpi_ut_get_object_type_name (obj_desc->package.elements[0]), + acpi_ut_get_object_type_name (obj_desc->package.elements[1]))); status = AE_AML_OPERAND_TYPE; } else { /* - * Valid _Sx_ package size, type, and value + * Valid _Sx_ package size, type, and value */ *sleep_type_a = (u8) (obj_desc->package.elements[0])->integer.value; *sleep_type_b = (u8) (obj_desc->package.elements[1])->integer.value; } if (ACPI_FAILURE (status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Bad Sleep object %p type %X\n", - obj_desc, obj_desc->common.type)); + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Bad Sleep object %p type %s\n", + obj_desc, acpi_ut_get_object_type_name (obj_desc))); } acpi_ut_remove_reference (obj_desc); @@ -196,7 +197,7 @@ acpi_get_sleep_type_data ( * * FUNCTION: Acpi_hw_get_register_bit_mask * - * PARAMETERS: Register_id - index of ACPI Register to access + * PARAMETERS: Register_id - Index of ACPI Register to access * * RETURN: The bit mask to be used when accessing the register * @@ -224,8 +225,8 @@ acpi_hw_get_bit_register_info ( * * FUNCTION: Acpi_get_register * - * PARAMETERS: Register_id - index of ACPI Register to access - * Use_lock - Lock the hardware + * PARAMETERS: Register_id - Index of ACPI Register to access + * Use_lock - Lock the hardware * * RETURN: Value is read from specified Register. Value returned is * normalized to bit0 (is shifted all the way right) diff --git a/drivers/acpi/include/acconfig.h b/drivers/acpi/include/acconfig.h index 66d06700f2c3..e313fb11bbff 100644 --- a/drivers/acpi/include/acconfig.h +++ b/drivers/acpi/include/acconfig.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acconfig.h - Global configuration constants - * $Revision: 102 $ + * $Revision: 104 $ * *****************************************************************************/ @@ -54,36 +54,36 @@ /* Version string */ -#define ACPI_CA_VERSION 0x20020517 +#define ACPI_CA_VERSION 0x20020611 /* Version of ACPI supported */ -#define ACPI_CA_SUPPORT_LEVEL 2 +#define ACPI_CA_SUPPORT_LEVEL 2 /* Maximum objects in the various object caches */ -#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */ -#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ -#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */ -#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */ -#define MAX_WALK_CACHE_DEPTH 4 /* Objects for parse tree walks */ +#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */ +#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ +#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */ +#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */ +#define MAX_WALK_CACHE_DEPTH 4 /* Objects for parse tree walks */ /* String size constants */ -#define MAX_STRING_LENGTH 512 -#define PATHNAME_MAX 256 /* A full namespace pathname */ +#define MAX_STRING_LENGTH 512 +#define PATHNAME_MAX 256 /* A full namespace pathname */ /* Maximum count for a semaphore object */ -#define MAX_SEMAPHORE_COUNT 256 +#define MAX_SEMAPHORE_COUNT 256 /* Max reference count (for debug only) */ -#define MAX_REFERENCE_COUNT 0x400 +#define MAX_REFERENCE_COUNT 0x400 /* Size of cached memory mapping for system memory operation region */ -#define SYSMEM_REGION_WINDOW_SIZE 4096 +#define SYSMEM_REGION_WINDOW_SIZE 4096 /****************************************************************************** @@ -92,29 +92,12 @@ * *****************************************************************************/ -/* - * Debugger threading model - * Use single threaded if the entire subsystem is contained in an application - * Use multiple threaded when the subsystem is running in the kernel. - * - * By default the model is single threaded if ACPI_APPLICATION is set, - * multi-threaded if ACPI_APPLICATION is not set. - */ -#define DEBUGGER_SINGLE_THREADED 0 -#define DEBUGGER_MULTI_THREADED 1 - -#ifdef ACPI_APPLICATION -#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED - -#else -#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED -#endif /* * Should the subystem abort the loading of an ACPI table if the * table checksum is incorrect? */ -#define ACPI_CHECKSUM_ABORT FALSE +#define ACPI_CHECKSUM_ABORT FALSE /****************************************************************************** @@ -125,54 +108,54 @@ /* Number of distinct GPE register blocks */ -#define ACPI_MAX_GPE_BLOCKS 2 +#define ACPI_MAX_GPE_BLOCKS 2 /* * Method info (in WALK_STATE), containing local variables and argumetns */ -#define MTH_NUM_LOCALS 8 -#define MTH_MAX_LOCAL 7 +#define MTH_NUM_LOCALS 8 +#define MTH_MAX_LOCAL 7 -#define MTH_NUM_ARGS 7 -#define MTH_MAX_ARG 6 +#define MTH_NUM_ARGS 7 +#define MTH_MAX_ARG 6 /* Maximum length of resulting string when converting from a buffer */ -#define ACPI_MAX_STRING_CONVERSION 200 +#define ACPI_MAX_STRING_CONVERSION 200 /* * Operand Stack (in WALK_STATE), Must be large enough to contain MTH_MAX_ARG */ -#define OBJ_NUM_OPERANDS 8 -#define OBJ_MAX_OPERAND 7 +#define OBJ_NUM_OPERANDS 8 +#define OBJ_MAX_OPERAND 7 /* Names within the namespace are 4 bytes long */ -#define ACPI_NAME_SIZE 4 -#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ -#define PATH_SEPARATOR '.' +#define ACPI_NAME_SIZE 4 +#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ +#define PATH_SEPARATOR '.' /* Constants used in searching for the RSDP in low memory */ -#define LO_RSDP_WINDOW_BASE 0 /* Physical Address */ -#define HI_RSDP_WINDOW_BASE 0xE0000 /* Physical Address */ -#define LO_RSDP_WINDOW_SIZE 0x400 -#define HI_RSDP_WINDOW_SIZE 0x20000 -#define RSDP_SCAN_STEP 16 +#define LO_RSDP_WINDOW_BASE 0 /* Physical Address */ +#define HI_RSDP_WINDOW_BASE 0xE0000 /* Physical Address */ +#define LO_RSDP_WINDOW_SIZE 0x400 +#define HI_RSDP_WINDOW_SIZE 0x20000 +#define RSDP_SCAN_STEP 16 /* Operation regions */ -#define ACPI_NUM_PREDEFINED_REGIONS 8 -#define ACPI_USER_REGION_BEGIN 0x80 +#define ACPI_NUM_PREDEFINED_REGIONS 8 +#define ACPI_USER_REGION_BEGIN 0x80 /* Maximum Space_ids for Operation Regions */ -#define ACPI_MAX_ADDRESS_SPACE 255 +#define ACPI_MAX_ADDRESS_SPACE 255 /* RSDP checksums */ -#define ACPI_RSDP_CHECKSUM_LENGTH 20 -#define ACPI_RSDP_XCHECKSUM_LENGTH 36 +#define ACPI_RSDP_CHECKSUM_LENGTH 20 +#define ACPI_RSDP_XCHECKSUM_LENGTH 36 /****************************************************************************** @@ -182,10 +165,10 @@ *****************************************************************************/ -#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */ +#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */ -#define ACPI_DEBUGGER_COMMAND_PROMPT '-' -#define ACPI_DEBUGGER_EXECUTE_PROMPT '%' +#define ACPI_DEBUGGER_COMMAND_PROMPT '-' +#define ACPI_DEBUGGER_EXECUTE_PROMPT '%' #endif /* _ACCONFIG_H */ diff --git a/drivers/acpi/include/acinterp.h b/drivers/acpi/include/acinterp.h index 5c48bf1a32c3..30c0c838bf32 100644 --- a/drivers/acpi/include/acinterp.h +++ b/drivers/acpi/include/acinterp.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acinterp.h - Interpreter subcomponent prototypes and defines - * $Revision: 137 $ + * $Revision: 138 $ * *****************************************************************************/ @@ -603,8 +603,7 @@ acpi_ex_exit_interpreter ( void acpi_ex_truncate_for32bit_table ( - acpi_operand_object *obj_desc, - acpi_walk_state *walk_state); + acpi_operand_object *obj_desc); u8 acpi_ex_validate_object_type ( diff --git a/drivers/acpi/include/acmacros.h b/drivers/acpi/include/acmacros.h index 1e10b2182e2a..f48ac95210bf 100644 --- a/drivers/acpi/include/acmacros.h +++ b/drivers/acpi/include/acmacros.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acmacros.h - C macros for the entire subsystem. - * $Revision: 123 $ + * $Revision: 124 $ * *****************************************************************************/ @@ -262,7 +262,7 @@ /* Macro to test the object type */ -#define ACPI_GET_OBJECT_TYPE(d) (((acpi_operand_object *)(void *)d)->common.type) +#define ACPI_GET_OBJECT_TYPE(d) (((acpi_operand_object *)(void *)(d))->common.type) /* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */ diff --git a/drivers/acpi/include/acobject.h b/drivers/acpi/include/acobject.h index 9e1352f78328..f7986c169693 100644 --- a/drivers/acpi/include/acobject.h +++ b/drivers/acpi/include/acobject.h @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: acobject.h - Definition of acpi_operand_object (Internal object only) - * $Revision: 111 $ + * $Revision: 112 $ * *****************************************************************************/ @@ -56,7 +56,7 @@ /* Values for flag byte above */ -#define AOPOBJ_RESERVED 0x01 +#define AOPOBJ_AML_CONSTANT 0x01 #define AOPOBJ_STATIC_POINTER 0x02 #define AOPOBJ_DATA_VALID 0x04 #define AOPOBJ_OBJECT_INITIALIZED 0x08 diff --git a/drivers/acpi/include/acoutput.h b/drivers/acpi/include/acoutput.h index 95f5b816159b..4c835a3497a7 100644 --- a/drivers/acpi/include/acoutput.h +++ b/drivers/acpi/include/acoutput.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acoutput.h -- debug output - * $Revision: 86 $ + * $Revision: 87 $ * *****************************************************************************/ @@ -105,6 +105,16 @@ #define ACPI_LV_INTERRUPTS 0x08000000 #define ACPI_LV_VERBOSITY3 0x0F000000 | ACPI_LV_VERBOSITY2 +/* Exceptionally verbose output -- also used in the global "Debug_level" */ + +#define ACPI_LV_AML_DISASSEMBLE 0x10000000 +#define ACPI_LV_VERBOSE_INFO 0x20000000 +#define ACPI_LV_FULL_TABLES 0x40000000 +#define ACPI_LV_EVENTS 0x80000000 + +#define ACPI_LV_VERBOSE 0xF0000000 + + /* * Debug level macros that are used in the DEBUG_PRINT macros */ @@ -145,17 +155,7 @@ #define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX) #define ACPI_DB_INIT ACPI_DEBUG_LEVEL (ACPI_LV_INIT) -#define ACPI_DB_ALL ACPI_DEBUG_LEVEL (0x0FFFFF80) - - -/* Exceptionally verbose output -- also used in the global "Debug_level" */ - -#define ACPI_DB_AML_DISASSEMBLE 0x10000000 -#define ACPI_DB_VERBOSE_INFO 0x20000000 -#define ACPI_DB_FULL_TABLES 0x40000000 -#define ACPI_DB_EVENTS 0x80000000 - -#define ACPI_DB_VERBOSE 0xF0000000 +#define ACPI_DB_ALL ACPI_DEBUG_LEVEL (ACPI_LV_ALL) /* Defaults for Debug_level, debug and normal */ diff --git a/drivers/acpi/include/acpixf.h b/drivers/acpi/include/acpixf.h index 9a8d3407634d..8bf74d31072e 100644 --- a/drivers/acpi/include/acpixf.h +++ b/drivers/acpi/include/acpixf.h @@ -196,6 +196,14 @@ acpi_evaluate_object ( acpi_buffer *return_object_buffer); acpi_status +acpi_evaluate_object_typed ( + acpi_handle object, + acpi_string pathname, + acpi_object_list *external_params, + acpi_buffer *return_buffer, + acpi_object_type return_type); + +acpi_status acpi_get_object_info ( acpi_handle device, acpi_device_info *info); diff --git a/drivers/acpi/include/acutils.h b/drivers/acpi/include/acutils.h index c595adbd08bb..32c308fb0cfe 100644 --- a/drivers/acpi/include/acutils.h +++ b/drivers/acpi/include/acutils.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures - * $Revision: 137 $ + * $Revision: 139 $ * *****************************************************************************/ @@ -104,6 +104,10 @@ NATIVE_CHAR * acpi_ut_get_type_name ( acpi_object_type type); +NATIVE_CHAR * +acpi_ut_get_object_type_name ( + acpi_operand_object *obj_desc); + #endif @@ -663,17 +667,6 @@ NATIVE_CHAR * acpi_ut_strupr ( NATIVE_CHAR *src_string); -acpi_status -acpi_ut_resolve_package_references ( - acpi_operand_object *obj_desc); - -acpi_status -acpi_ut_resolve_reference ( - u8 object_type, - acpi_operand_object *source_object, - acpi_generic_state *state, - void *context); - u8 * acpi_ut_get_resource_end_tag ( acpi_operand_object *obj_desc); diff --git a/drivers/acpi/include/platform/acenv.h b/drivers/acpi/include/platform/acenv.h index 7287110d279c..1cb3f2939509 100644 --- a/drivers/acpi/include/platform/acenv.h +++ b/drivers/acpi/include/platform/acenv.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acenv.h - Generation environment specific items - * $Revision: 94 $ + * $Revision: 95 $ * *****************************************************************************/ @@ -56,17 +56,6 @@ #endif /* - * Memory allocation tracking. Used only if - * 1) This is the debug version - * 2) This is NOT a 16-bit version of the code (not enough real-mode memory) - */ -#ifdef ACPI_DEBUG -#if ACPI_MACHINE_WIDTH != 16 -#define ACPI_DBG_TRACK_ALLOCATIONS -#endif -#endif - -/* * Environment configuration. The purpose of this file is to interface to the * local generation environment. * @@ -151,8 +140,39 @@ #endif +/* + * Memory allocation tracking. Used only if + * 1) This is the debug version + * 2) This is NOT a 16-bit version of the code (not enough real-mode memory) + */ +#ifdef ACPI_DEBUG +#if ACPI_MACHINE_WIDTH != 16 +#define ACPI_DBG_TRACK_ALLOCATIONS +#endif +#endif + /*! [End] no source code translation !*/ + +/* + * Debugger threading model + * Use single threaded if the entire subsystem is contained in an application + * Use multiple threaded when the subsystem is running in the kernel. + * + * By default the model is single threaded if ACPI_APPLICATION is set, + * multi-threaded if ACPI_APPLICATION is not set. + */ +#define DEBUGGER_SINGLE_THREADED 0 +#define DEBUGGER_MULTI_THREADED 1 + +#ifdef ACPI_APPLICATION +#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED + +#else +#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED +#endif + + /****************************************************************************** * * C library configuration diff --git a/drivers/acpi/namespace/nsaccess.c b/drivers/acpi/namespace/nsaccess.c index 9fd0418f2628..214a9cf7da6e 100644 --- a/drivers/acpi/namespace/nsaccess.c +++ b/drivers/acpi/namespace/nsaccess.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsaccess - Top-level functions for accessing ACPI namespace - * $Revision: 155 $ + * $Revision: 156 $ * ******************************************************************************/ @@ -179,7 +179,7 @@ acpi_ns_root_initialize (void) /* Store pointer to value descriptor in the Node */ - status = acpi_ns_attach_object (new_node, obj_desc, obj_desc->common.type); + status = acpi_ns_attach_object (new_node, obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc)); /* Remove local reference to the object */ diff --git a/drivers/acpi/namespace/nsdump.c b/drivers/acpi/namespace/nsdump.c index 470b2846c112..da59d90b095f 100644 --- a/drivers/acpi/namespace/nsdump.c +++ b/drivers/acpi/namespace/nsdump.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsdump - table dumping routines for debug - * $Revision: 135 $ + * $Revision: 136 $ * *****************************************************************************/ @@ -500,7 +500,7 @@ acpi_ns_dump_one_object ( case ACPI_DESC_TYPE_OPERAND: - obj_type = obj_desc->common.type; + obj_type = ACPI_GET_OBJECT_TYPE (obj_desc); if (obj_type > INTERNAL_TYPE_MAX) { acpi_os_printf ("(Ptr to ACPI Object type %X [UNKNOWN])\n", obj_type); diff --git a/drivers/acpi/namespace/nseval.c b/drivers/acpi/namespace/nseval.c index ff2e6e870d4c..cb4a3474a916 100644 --- a/drivers/acpi/namespace/nseval.c +++ b/drivers/acpi/namespace/nseval.c @@ -2,7 +2,7 @@ * * Module Name: nseval - Object evaluation interfaces -- includes control * method lookup and execution. - * $Revision: 114 $ + * $Revision: 116 $ * ******************************************************************************/ @@ -40,12 +40,12 @@ * FUNCTION: Acpi_ns_evaluate_relative * * PARAMETERS: Handle - The relative containing object - * *Pathname - Name of method to execute, If NULL, the + * Pathname - Name of method to execute, If NULL, the * handle is the object to execute - * **Params - List of parameters to pass to the method, + * Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. - * *Return_object - Where to put method's return value (if + * Return_object - Where to put method's return value (if * any). If NULL, no value is returned. * * RETURN: Status @@ -141,9 +141,9 @@ cleanup: * FUNCTION: Acpi_ns_evaluate_by_name * * PARAMETERS: Pathname - Fully qualified pathname to the object - * *Return_object - Where to put method's return value (if + * Return_object - Where to put method's return value (if * any). If NULL, no value is returned. - * **Params - List of parameters to pass to the method, + * Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. * @@ -226,10 +226,10 @@ cleanup: * FUNCTION: Acpi_ns_evaluate_by_handle * * PARAMETERS: Handle - Method Node to execute - * **Params - List of parameters to pass to the method, + * Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. - * *Return_object - Where to put method's return value (if + * Return_object - Where to put method's return value (if * any). If NULL, no value is returned. * * RETURN: Status @@ -285,7 +285,6 @@ acpi_ns_evaluate_by_handle ( return_ACPI_STATUS (AE_BAD_PARAMETER); } - /* * Two major cases here: * 1) The object is an actual control method -- execute it. @@ -302,7 +301,6 @@ acpi_ns_evaluate_by_handle ( status = acpi_ns_execute_control_method (node, params, &local_return_object); } - else { /* * Case 2) Object is NOT a method, just return its @@ -311,7 +309,6 @@ acpi_ns_evaluate_by_handle ( status = acpi_ns_get_object_value (node, &local_return_object); } - /* * Check if there is a return value on the stack that must * be dealt with @@ -348,11 +345,11 @@ acpi_ns_evaluate_by_handle ( * * FUNCTION: Acpi_ns_execute_control_method * - * PARAMETERS: Method_node - The object/method - * **Params - List of parameters to pass to the method, + * PARAMETERS: Method_node - The method to execute + * Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. - * **Return_obj_desc - List of result objects to be returned + * Return_obj_desc - List of result objects to be returned * from the method. * * RETURN: Status @@ -424,7 +421,8 @@ acpi_ns_execute_control_method ( * * FUNCTION: Acpi_ns_get_object_value * - * PARAMETERS: Node - The object + * PARAMETERS: Node - The object + * Return_obj_desc - Where the objects value is returned * * RETURN: Status * diff --git a/drivers/acpi/namespace/nsobject.c b/drivers/acpi/namespace/nsobject.c index a2f8989ceb0e..6cba8b81a643 100644 --- a/drivers/acpi/namespace/nsobject.c +++ b/drivers/acpi/namespace/nsobject.c @@ -2,7 +2,7 @@ * * Module Name: nsobject - Utilities for objects attached to namespace * table entries - * $Revision: 82 $ + * $Revision: 83 $ * ******************************************************************************/ @@ -199,8 +199,9 @@ acpi_ns_detach_object ( obj_desc = node->object; - if (!obj_desc || - (obj_desc->common.type == INTERNAL_TYPE_DATA)) { + + if (!obj_desc || + (ACPI_GET_OBJECT_TYPE (obj_desc) == INTERNAL_TYPE_DATA)) { return_VOID; } @@ -210,7 +211,7 @@ acpi_ns_detach_object ( if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_OPERAND) { node->object = obj_desc->common.next_object; if (node->object && - (node->object->common.type != INTERNAL_TYPE_DATA)) { + (ACPI_GET_OBJECT_TYPE (node->object) != INTERNAL_TYPE_DATA)) { node->object = node->object->common.next_object; } } @@ -255,7 +256,7 @@ acpi_ns_get_attached_object ( if (!node->object || ((ACPI_GET_DESCRIPTOR_TYPE (node->object) != ACPI_DESC_TYPE_OPERAND) && (ACPI_GET_DESCRIPTOR_TYPE (node->object) != ACPI_DESC_TYPE_NAMED)) || - (node->object->common.type == INTERNAL_TYPE_DATA)) { + (ACPI_GET_OBJECT_TYPE (node->object) == INTERNAL_TYPE_DATA)) { return_PTR (NULL); } @@ -281,10 +282,10 @@ acpi_ns_get_secondary_object ( ACPI_FUNCTION_TRACE_PTR ("Ns_get_secondary_object", obj_desc); - if ((!obj_desc) || - (obj_desc->common.type == INTERNAL_TYPE_DATA) || - (!obj_desc->common.next_object) || - (obj_desc->common.next_object->common.type == INTERNAL_TYPE_DATA)) { + if ((!obj_desc) || + (ACPI_GET_OBJECT_TYPE (obj_desc) == INTERNAL_TYPE_DATA) || + (!obj_desc->common.next_object) || + (ACPI_GET_OBJECT_TYPE (obj_desc->common.next_object) == INTERNAL_TYPE_DATA)) { return_PTR (NULL); } @@ -319,7 +320,7 @@ acpi_ns_attach_data ( prev_obj_desc = NULL; obj_desc = node->object; while (obj_desc) { - if ((obj_desc->common.type == INTERNAL_TYPE_DATA) && + if ((ACPI_GET_OBJECT_TYPE (obj_desc) == INTERNAL_TYPE_DATA) && (obj_desc->data.handler == handler)) { return (AE_ALREADY_EXISTS); } @@ -377,7 +378,7 @@ acpi_ns_detach_data ( prev_obj_desc = NULL; obj_desc = node->object; while (obj_desc) { - if ((obj_desc->common.type == INTERNAL_TYPE_DATA) && + if ((ACPI_GET_OBJECT_TYPE (obj_desc) == INTERNAL_TYPE_DATA) && (obj_desc->data.handler == handler)) { if (prev_obj_desc) { prev_obj_desc->common.next_object = obj_desc->common.next_object; @@ -421,7 +422,7 @@ acpi_ns_get_attached_data ( obj_desc = node->object; while (obj_desc) { - if ((obj_desc->common.type == INTERNAL_TYPE_DATA) && + if ((ACPI_GET_OBJECT_TYPE (obj_desc) == INTERNAL_TYPE_DATA) && (obj_desc->data.handler == handler)) { *data = obj_desc->data.pointer; return (AE_OK); diff --git a/drivers/acpi/namespace/nssearch.c b/drivers/acpi/namespace/nssearch.c index fc5e8e71d79a..817289809417 100644 --- a/drivers/acpi/namespace/nssearch.c +++ b/drivers/acpi/namespace/nssearch.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nssearch - Namespace search - * $Revision: 85 $ + * $Revision: 86 $ * ******************************************************************************/ @@ -204,7 +204,8 @@ acpi_ns_search_parent_tree ( } if (acpi_ns_local (type)) { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type [%s] must be local to this scope (no parent search)\n", + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, + "[%4.4s] type [%s] must be local to this scope (no parent search)\n", (char *) &target_name, acpi_ut_get_type_name (type))); } diff --git a/drivers/acpi/namespace/nsutils.c b/drivers/acpi/namespace/nsutils.c index fba4f7a90b67..5f1a6913f0b8 100644 --- a/drivers/acpi/namespace/nsutils.c +++ b/drivers/acpi/namespace/nsutils.c @@ -2,7 +2,7 @@ * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing * parents and siblings and Scope manipulation - * $Revision: 109 $ + * $Revision: 110 $ * *****************************************************************************/ @@ -227,7 +227,7 @@ acpi_ns_build_internal_name ( NATIVE_CHAR *internal_name = info->internal_name; NATIVE_CHAR *external_name = info->next_external_char; NATIVE_CHAR *result = NULL; - NATIVE_UINT_MIN32 i; + NATIVE_UINT i; ACPI_FUNCTION_TRACE ("Ns_build_internal_name"); diff --git a/drivers/acpi/parser/psopcode.c b/drivers/acpi/parser/psopcode.c index 7926498f1915..42fad5f92a77 100644 --- a/drivers/acpi/parser/psopcode.c +++ b/drivers/acpi/parser/psopcode.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psopcode - Parser/Interpreter opcode information table - * $Revision: 69 $ + * $Revision: 70 $ * *****************************************************************************/ @@ -453,8 +453,8 @@ const acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = /*! [Begin] no source code translation */ /* Index Name Parser Args Interpreter Args ObjectType Class Type Flags */ -/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), -/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), +/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), +/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), /* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, INTERNAL_TYPE_ALIAS, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), /* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), @@ -522,7 +522,7 @@ const acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = /* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), /* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), /* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), -/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), +/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), /* Prefixed opcodes (Two-byte opcodes with a prefix op) */ @@ -541,7 +541,7 @@ const acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = /* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), /* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), +/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), /* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), /* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R), /* 58 */ ACPI_OP ("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), diff --git a/drivers/acpi/resources/rscalc.c b/drivers/acpi/resources/rscalc.c index ab566770e90d..ca369152b6c4 100644 --- a/drivers/acpi/resources/rscalc.c +++ b/drivers/acpi/resources/rscalc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rscalc - Calculate stream and list lengths - * $Revision: 42 $ + * $Revision: 43 $ * ******************************************************************************/ @@ -770,8 +770,8 @@ acpi_rs_get_pci_routing_table_length ( name_found = FALSE; for (table_index = 0; table_index < 4 && !name_found; table_index++) { - if ((ACPI_TYPE_STRING == (*sub_object_list)->common.type) || - ((INTERNAL_TYPE_REFERENCE == (*sub_object_list)->common.type) && + if ((ACPI_TYPE_STRING == ACPI_GET_OBJECT_TYPE (*sub_object_list)) || + ((INTERNAL_TYPE_REFERENCE == ACPI_GET_OBJECT_TYPE (*sub_object_list)) && ((*sub_object_list)->reference.opcode == AML_INT_NAMEPATH_OP))) { name_found = TRUE; } @@ -789,7 +789,7 @@ acpi_rs_get_pci_routing_table_length ( * Was a String type found? */ if (name_found) { - if (ACPI_TYPE_STRING == (*sub_object_list)->common.type) { + if (ACPI_GET_OBJECT_TYPE (*sub_object_list) == ACPI_TYPE_STRING) { /* * The length String.Length field includes the * terminating NULL diff --git a/drivers/acpi/resources/rscreate.c b/drivers/acpi/resources/rscreate.c index b2f29cf4c255..21f77402d788 100644 --- a/drivers/acpi/resources/rscreate.c +++ b/drivers/acpi/resources/rscreate.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rscreate - Create resource lists/tables - * $Revision: 56 $ + * $Revision: 57 $ * ******************************************************************************/ @@ -212,12 +212,12 @@ acpi_rs_create_pci_routing_table ( /* * 1) First subobject: Dereference the Address */ - if (ACPI_TYPE_INTEGER == (*sub_object_list)->common.type) { + if (ACPI_GET_OBJECT_TYPE (*sub_object_list) == ACPI_TYPE_INTEGER) { user_prt->address = (*sub_object_list)->integer.value; } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n", - acpi_ut_get_type_name ((*sub_object_list)->common.type))); + acpi_ut_get_object_type_name (*sub_object_list))); return_ACPI_STATUS (AE_BAD_DATA); } @@ -226,12 +226,12 @@ acpi_rs_create_pci_routing_table ( */ sub_object_list++; - if (ACPI_TYPE_INTEGER == (*sub_object_list)->common.type) { + if (ACPI_GET_OBJECT_TYPE (*sub_object_list) == ACPI_TYPE_INTEGER) { user_prt->pin = (u32) (*sub_object_list)->integer.value; } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n", - acpi_ut_get_type_name ((*sub_object_list)->common.type))); + acpi_ut_get_object_type_name (*sub_object_list))); return_ACPI_STATUS (AE_BAD_DATA); } @@ -240,7 +240,7 @@ acpi_rs_create_pci_routing_table ( */ sub_object_list++; - switch ((*sub_object_list)->common.type) { + switch (ACPI_GET_OBJECT_TYPE (*sub_object_list)) { case INTERNAL_TYPE_REFERENCE: if ((*sub_object_list)->reference.opcode != AML_INT_NAMEPATH_OP) { @@ -288,7 +288,7 @@ acpi_rs_create_pci_routing_table ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n", - acpi_ut_get_type_name ((*sub_object_list)->common.type))); + acpi_ut_get_object_type_name (*sub_object_list))); return_ACPI_STATUS (AE_BAD_DATA); } @@ -301,12 +301,12 @@ acpi_rs_create_pci_routing_table ( */ sub_object_list++; - if (ACPI_TYPE_INTEGER == (*sub_object_list)->common.type) { + if (ACPI_GET_OBJECT_TYPE (*sub_object_list) == ACPI_TYPE_INTEGER) { user_prt->source_index = (u32) (*sub_object_list)->integer.value; } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Need Integer, found %s\n", - acpi_ut_get_type_name ((*sub_object_list)->common.type))); + acpi_ut_get_object_type_name (*sub_object_list))); return_ACPI_STATUS (AE_BAD_DATA); } diff --git a/drivers/acpi/resources/rsutils.c b/drivers/acpi/resources/rsutils.c index 4484929cd30f..6571c0904327 100644 --- a/drivers/acpi/resources/rsutils.c +++ b/drivers/acpi/resources/rsutils.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsutils - Utilities for the resource manager - * $Revision: 30 $ + * $Revision: 33 $ * ******************************************************************************/ @@ -56,7 +56,7 @@ acpi_rs_get_prt_method_data ( acpi_handle handle, acpi_buffer *ret_buffer) { - acpi_operand_object *ret_obj; + acpi_operand_object *obj_desc; acpi_status status; @@ -68,12 +68,12 @@ acpi_rs_get_prt_method_data ( /* * Execute the method, no parameters */ - status = acpi_ns_evaluate_relative (handle, "_PRT", NULL, &ret_obj); + status = acpi_ns_evaluate_relative (handle, "_PRT", NULL, &obj_desc); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - if (!ret_obj) { + if (!obj_desc) { /* Return object is required */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object was returned from _PRT\n")); @@ -81,13 +81,13 @@ acpi_rs_get_prt_method_data ( } /* - * The return object will be a package, so check the parameters. If the + * The return object must be a package, so check the parameters. If the * return object is not a package, then the underlying AML code is corrupt * or improperly written. */ - if (ACPI_TYPE_PACKAGE != ret_obj->common.type) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_PACKAGE) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_PRT did not return a Package, returned %s\n", - acpi_ut_get_type_name (ret_obj->common.type))); + acpi_ut_get_object_type_name (obj_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; } @@ -96,13 +96,13 @@ acpi_rs_get_prt_method_data ( * Create a resource linked list from the byte stream buffer that comes * back from the _CRS method execution. */ - status = acpi_rs_create_pci_routing_table (ret_obj, ret_buffer); + status = acpi_rs_create_pci_routing_table (obj_desc, ret_buffer); /* On exit, we must delete the object returned by Evaluate_object */ cleanup: - acpi_ut_remove_reference (ret_obj); + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } @@ -130,7 +130,7 @@ acpi_rs_get_crs_method_data ( acpi_handle handle, acpi_buffer *ret_buffer) { - acpi_operand_object *ret_obj; + acpi_operand_object *obj_desc; acpi_status status; @@ -142,12 +142,12 @@ acpi_rs_get_crs_method_data ( /* * Execute the method, no parameters */ - status = acpi_ns_evaluate_relative (handle, "_CRS", NULL, &ret_obj); + status = acpi_ns_evaluate_relative (handle, "_CRS", NULL, &obj_desc); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - if (!ret_obj) { + if (!obj_desc) { /* Return object is required */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object was returned from _CRS\n")); @@ -160,9 +160,9 @@ acpi_rs_get_crs_method_data ( * then the underlying AML code is corrupt or improperly * written. */ - if (ACPI_TYPE_BUFFER != ret_obj->common.type) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_BUFFER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_CRS did not return a Buffer, returned %s\n", - acpi_ut_get_type_name (ret_obj->common.type))); + acpi_ut_get_object_type_name (obj_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; } @@ -172,13 +172,13 @@ acpi_rs_get_crs_method_data ( * byte stream buffer that comes back from the _CRS method * execution. */ - status = acpi_rs_create_resource_list (ret_obj, ret_buffer); + status = acpi_rs_create_resource_list (obj_desc, ret_buffer); /* On exit, we must delete the object returned by evaluate_object */ cleanup: - acpi_ut_remove_reference (ret_obj); + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } @@ -206,7 +206,7 @@ acpi_rs_get_prs_method_data ( acpi_handle handle, acpi_buffer *ret_buffer) { - acpi_operand_object *ret_obj; + acpi_operand_object *obj_desc; acpi_status status; @@ -218,12 +218,12 @@ acpi_rs_get_prs_method_data ( /* * Execute the method, no parameters */ - status = acpi_ns_evaluate_relative (handle, "_PRS", NULL, &ret_obj); + status = acpi_ns_evaluate_relative (handle, "_PRS", NULL, &obj_desc); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - if (!ret_obj) { + if (!obj_desc) { /* Return object is required */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object was returned from _PRS\n")); @@ -236,9 +236,9 @@ acpi_rs_get_prs_method_data ( * then the underlying AML code is corrupt or improperly * written.. */ - if (ACPI_TYPE_BUFFER != ret_obj->common.type) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_BUFFER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_PRS did not return a Buffer, returned %s\n", - acpi_ut_get_type_name (ret_obj->common.type))); + acpi_ut_get_object_type_name (obj_desc))); status = AE_AML_OPERAND_TYPE; goto cleanup; } @@ -248,13 +248,13 @@ acpi_rs_get_prs_method_data ( * byte stream buffer that comes back from the _CRS method * execution. */ - status = acpi_rs_create_resource_list (ret_obj, ret_buffer); + status = acpi_rs_create_resource_list (obj_desc, ret_buffer); /* On exit, we must delete the object returned by evaluate_object */ cleanup: - acpi_ut_remove_reference (ret_obj); + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } @@ -319,6 +319,7 @@ acpi_rs_set_srs_method_data ( */ params[0]->buffer.length = (u32) buffer.length; params[0]->buffer.pointer = buffer.pointer; + params[0]->common.flags = AOPOBJ_DATA_VALID; params[1] = NULL; /* diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c index 04cb51e4d3f5..7684b6913dd2 100644 --- a/drivers/acpi/tables/tbutils.c +++ b/drivers/acpi/tables/tbutils.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbutils - Table manipulation utilities - * $Revision: 53 $ + * $Revision: 54 $ * *****************************************************************************/ @@ -91,7 +91,7 @@ acpi_tb_handle_to_object ( * name * 3) Table must be readable for length specified in the header * 4) Table checksum must be valid (with the exception of the FACS - * which has no checksum for some odd reason) + * which has no checksum because it contains variable fields) * ******************************************************************************/ @@ -187,21 +187,26 @@ acpi_tb_map_acpi_table ( table_size = (ACPI_SIZE) table->length; +#if 0 +/* We don't want to validate the header here. */ /* * Validate the header and delete the mapping. * We will create a mapping for the full table below. */ status = acpi_tb_validate_table_header (table); +#endif /* Always unmap the memory for the header */ acpi_os_unmap_memory (table, sizeof (acpi_table_header)); +#if 0 /* Exit if header invalid */ if (ACPI_FAILURE (status)) { return (status); } +#endif } /* Map the physical memory for the correct length */ diff --git a/drivers/acpi/utilities/utcopy.c b/drivers/acpi/utilities/utcopy.c index f6822fe5d79d..662f558a75ee 100644 --- a/drivers/acpi/utilities/utcopy.c +++ b/drivers/acpi/utilities/utcopy.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utcopy - Internal to external object translation utilities - * $Revision: 98 $ + * $Revision: 101 $ * *****************************************************************************/ @@ -57,7 +57,6 @@ acpi_ut_copy_isimple_to_esimple ( u8 *data_space, ACPI_SIZE *buffer_space_used) { - acpi_buffer buffer; acpi_status status = AE_OK; @@ -68,7 +67,7 @@ acpi_ut_copy_isimple_to_esimple ( /* * Check for NULL object case (could be an uninitialized - * package element + * package element) */ if (!internal_object) { return_ACPI_STATUS (AE_OK); @@ -82,11 +81,11 @@ acpi_ut_copy_isimple_to_esimple ( * In general, the external object will be the same type as * the internal object */ - external_object->type = internal_object->common.type; + external_object->type = ACPI_GET_OBJECT_TYPE (internal_object); /* However, only a limited number of external types are supported */ - switch (internal_object->common.type) { + switch (ACPI_GET_OBJECT_TYPE (internal_object)) { case ACPI_TYPE_STRING: external_object->string.pointer = (NATIVE_CHAR *) data_space; @@ -121,45 +120,9 @@ acpi_ut_copy_isimple_to_esimple ( * This is an object reference. Attempt to dereference it. */ switch (internal_object->reference.opcode) { - case AML_ZERO_OP: - external_object->type = ACPI_TYPE_INTEGER; - external_object->integer.value = 0; - break; - - case AML_ONE_OP: - external_object->type = ACPI_TYPE_INTEGER; - external_object->integer.value = 1; - break; - - case AML_ONES_OP: - external_object->type = ACPI_TYPE_INTEGER; - external_object->integer.value = ACPI_INTEGER_MAX; - break; - - case AML_REVISION_OP: - external_object->type = ACPI_TYPE_INTEGER; - external_object->integer.value = ACPI_CA_SUPPORT_LEVEL; - break; - case AML_INT_NAMEPATH_OP: - /* - * This is a named reference, get the string. We already know that - * we have room for it, use max length - */ - external_object->type = ACPI_TYPE_STRING; - external_object->string.pointer = (NATIVE_CHAR *) data_space; - - buffer.length = MAX_STRING_LENGTH; - buffer.pointer = data_space; - - status = acpi_ns_handle_to_pathname ((acpi_handle) internal_object->reference.node, - &buffer); - /* Converted (external) string length is returned from above */ - - external_object->string.length = (u32) buffer.length; - *buffer_space_used = ACPI_ROUND_UP_TO_NATIVE_WORD (buffer.length); - break; + /* For namepath, return the object handle ("reference") */ default: /* @@ -175,7 +138,7 @@ acpi_ut_copy_isimple_to_esimple ( case ACPI_TYPE_PROCESSOR: - external_object->processor.proc_id = internal_object->processor.proc_id; + external_object->processor.proc_id = internal_object->processor.proc_id; external_object->processor.pblk_address = internal_object->processor.address; external_object->processor.pblk_length = internal_object->processor.length; break; @@ -328,7 +291,7 @@ acpi_ut_copy_ipackage_to_epackage ( info.num_packages = 1; info.free_space = buffer + ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (acpi_object)); - external_object->type = internal_object->common.type; + external_object->type = ACPI_GET_OBJECT_TYPE (internal_object); external_object->package.count = internal_object->package.count; external_object->package.elements = ACPI_CAST_PTR (acpi_object, info.free_space); @@ -372,7 +335,7 @@ acpi_ut_copy_iobject_to_eobject ( ACPI_FUNCTION_TRACE ("Ut_copy_iobject_to_eobject"); - if (internal_object->common.type == ACPI_TYPE_PACKAGE) { + if (ACPI_GET_OBJECT_TYPE (internal_object) == ACPI_TYPE_PACKAGE) { /* * Package object: Copy all subobjects (including * nested packages) @@ -550,7 +513,7 @@ acpi_ut_copy_epackage_to_ipackage ( free_space = buffer + sizeof(acpi_object); - external_object->type = internal_object->common.type; + external_object->type = ACPI_GET_OBJECT_TYPE (internal_object); external_object->package.count = internal_object->package.count; external_object->package.elements = (acpi_object *)free_space; @@ -653,7 +616,7 @@ acpi_ut_copy_simple_object ( /* Handle the objects with extra data */ - switch (dest_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (dest_desc)) { case ACPI_TYPE_BUFFER: dest_desc->buffer.node = NULL; @@ -729,7 +692,7 @@ acpi_ut_copy_ielement_to_ielement ( /* * This is a simple object, just copy it */ - target_object = acpi_ut_create_internal_object (source_object->common.type); + target_object = acpi_ut_create_internal_object (ACPI_GET_OBJECT_TYPE (source_object)); if (!target_object) { return (AE_NO_MEMORY); } @@ -803,16 +766,16 @@ acpi_ut_copy_ipackage_to_ipackage ( ACPI_FUNCTION_TRACE ("Ut_copy_ipackage_to_ipackage"); - dest_obj->common.type = source_obj->common.type; + dest_obj->common.type = ACPI_GET_OBJECT_TYPE (source_obj); dest_obj->common.flags = source_obj->common.flags; dest_obj->package.count = source_obj->package.count; - /* * Create the object array and walk the source package tree */ - dest_obj->package.elements = ACPI_MEM_CALLOCATE (((ACPI_SIZE) source_obj->package.count + 1) * - sizeof (void *)); + dest_obj->package.elements = ACPI_MEM_CALLOCATE ( + ((ACPI_SIZE) source_obj->package.count + 1) * + sizeof (void *)); if (!dest_obj->package.elements) { ACPI_REPORT_ERROR ( ("Aml_build_copy_internal_package_object: Package allocation failure\n")); @@ -863,14 +826,14 @@ acpi_ut_copy_iobject_to_iobject ( /* Create the top level object */ - *dest_desc = acpi_ut_create_internal_object (source_desc->common.type); + *dest_desc = acpi_ut_create_internal_object (ACPI_GET_OBJECT_TYPE (source_desc)); if (!*dest_desc) { return_ACPI_STATUS (AE_NO_MEMORY); } /* Copy the object and possible subobjects */ - if (source_desc->common.type == ACPI_TYPE_PACKAGE) { + if (ACPI_GET_OBJECT_TYPE (source_desc) == ACPI_TYPE_PACKAGE) { status = acpi_ut_copy_ipackage_to_ipackage (source_desc, *dest_desc, walk_state); } diff --git a/drivers/acpi/utilities/utdelete.c b/drivers/acpi/utilities/utdelete.c index f064c05b6391..08377a14041a 100644 --- a/drivers/acpi/utilities/utdelete.c +++ b/drivers/acpi/utilities/utdelete.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utdelete - object deletion and reference count utilities - * $Revision: 90 $ + * $Revision: 91 $ * ******************************************************************************/ @@ -65,7 +65,7 @@ acpi_ut_delete_internal_obj ( * Must delete or free any pointers within the object that are not * actual ACPI objects (for example, a raw buffer pointer). */ - switch (object->common.type) { + switch (ACPI_GET_OBJECT_TYPE (object)) { case ACPI_TYPE_STRING: ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** String %p, ptr %p\n", @@ -190,7 +190,7 @@ acpi_ut_delete_internal_obj ( /* Now the object can be safely deleted */ ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n", - object, acpi_ut_get_type_name (object->common.type))); + object, acpi_ut_get_object_type_name (object))); acpi_ut_delete_object_desc (object); return_VOID; @@ -295,7 +295,7 @@ acpi_ut_update_ref_count ( object, new_count)); } - if (object->common.type == ACPI_TYPE_METHOD) { + if (ACPI_GET_OBJECT_TYPE (object) == ACPI_TYPE_METHOD) { ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Method Obj %p Refs=%X, [Decremented]\n", object, new_count)); } @@ -403,7 +403,7 @@ acpi_ut_update_object_reference ( * All sub-objects must have their reference count incremented also. * Different object types have different subobjects. */ - switch (object->common.type) { + switch (ACPI_GET_OBJECT_TYPE (object)) { case ACPI_TYPE_DEVICE: status = acpi_ut_create_update_state_and_push (object->device.addr_handler, diff --git a/drivers/acpi/utilities/uteval.c b/drivers/acpi/utilities/uteval.c index bb9a36ec4401..3b8e4e1d3bc8 100644 --- a/drivers/acpi/utilities/uteval.c +++ b/drivers/acpi/utilities/uteval.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: uteval - Object evaluation - * $Revision: 39 $ + * $Revision: 40 $ * *****************************************************************************/ @@ -91,11 +91,11 @@ acpi_ut_evaluate_numeric_object ( /* Is the return object of the correct type? */ - if (obj_desc->common.type != ACPI_TYPE_INTEGER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER) { status = AE_TYPE; ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Type returned from %s was not a number: %X \n", - object_name, obj_desc->common.type)); + "Type returned from %s was not an Integer: %X \n", + object_name, ACPI_GET_OBJECT_TYPE (obj_desc))); } else { /* @@ -169,15 +169,16 @@ acpi_ut_execute_HID ( * A _HID can return either a Number (32 bit compressed EISA ID) or * a string */ - if ((obj_desc->common.type != ACPI_TYPE_INTEGER) && - (obj_desc->common.type != ACPI_TYPE_STRING)) { + if ((ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER) && + (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_STRING)) { status = AE_TYPE; ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Type returned from _HID not a number or string: %s(%X) \n", - acpi_ut_get_type_name (obj_desc->common.type), obj_desc->common.type)); + acpi_ut_get_object_type_name (obj_desc), + ACPI_GET_OBJECT_TYPE (obj_desc))); } else { - if (obj_desc->common.type == ACPI_TYPE_INTEGER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) { /* Convert the Numeric HID to string */ acpi_ex_eisa_id_to_string ((u32) obj_desc->integer.value, hid->buffer); @@ -253,7 +254,7 @@ acpi_ut_execute_CID ( * IDs. Each compatible ID can be a Number (32 bit compressed EISA ID) or * string (PCI ID format, e.g. "PCI\VEN_vvvv&DEV_dddd&SUBSYS_ssssssss"). */ - switch (obj_desc->common.type) { + switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { case ACPI_TYPE_INTEGER: /* Convert the Numeric CID to string */ @@ -278,7 +279,8 @@ acpi_ut_execute_CID ( status = AE_TYPE; ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Type returned from _CID not a number, string, or package: %s(%X) \n", - acpi_ut_get_type_name (obj_desc->common.type), obj_desc->common.type)); + acpi_ut_get_object_type_name (obj_desc), + ACPI_GET_OBJECT_TYPE (obj_desc))); break; } @@ -347,15 +349,15 @@ acpi_ut_execute_UID ( * A _UID can return either a Number (32 bit compressed EISA ID) or * a string */ - if ((obj_desc->common.type != ACPI_TYPE_INTEGER) && - (obj_desc->common.type != ACPI_TYPE_STRING)) { + if ((ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER) && + (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_STRING)) { status = AE_TYPE; ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Type returned from _UID was not a number or string: %X \n", - obj_desc->common.type)); + ACPI_GET_OBJECT_TYPE (obj_desc))); } else { - if (obj_desc->common.type == ACPI_TYPE_INTEGER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) { /* Convert the Numeric UID to string */ acpi_ex_unsigned_integer_to_string (obj_desc->integer.value, uid->buffer); @@ -433,11 +435,11 @@ acpi_ut_execute_STA ( /* Is the return object of the correct type? */ - if (obj_desc->common.type != ACPI_TYPE_INTEGER) { + if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER) { status = AE_TYPE; ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Type returned from _STA was not a number: %X \n", - obj_desc->common.type)); + ACPI_GET_OBJECT_TYPE (obj_desc))); } else { /* Extract the status flags */ diff --git a/drivers/acpi/utilities/utglobal.c b/drivers/acpi/utilities/utglobal.c index 6bfb8bfc706b..838b1db986bd 100644 --- a/drivers/acpi/utilities/utglobal.c +++ b/drivers/acpi/utilities/utglobal.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utglobal - Global variables for the ACPI subsystem - * $Revision: 161 $ + * $Revision: 162 $ * *****************************************************************************/ @@ -541,6 +541,20 @@ acpi_ut_get_type_name ( } +NATIVE_CHAR * +acpi_ut_get_object_type_name ( + acpi_operand_object *obj_desc) +{ + + if (!obj_desc) + { + return ("[NULL Object Descriptor]"); + } + + return (acpi_ut_get_type_name (ACPI_GET_OBJECT_TYPE (obj_desc))); +} + + /* Various strings for future use */ #if 0 diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c index bcab6fd234ed..a42bc0d3d2b1 100644 --- a/drivers/acpi/utilities/utmisc.c +++ b/drivers/acpi/utilities/utmisc.c @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utmisc - common utility procedures - * $Revision: 75 $ + * $Revision: 78 $ * ******************************************************************************/ @@ -27,6 +27,7 @@ #include "acpi.h" #include "acnamesp.h" #include "amlcode.h" +#include "acinterp.h" #define _COMPONENT ACPI_UTILITIES @@ -1100,119 +1101,6 @@ acpi_ut_delete_generic_state_cache ( /******************************************************************************* * - * FUNCTION: Acpi_ut_resolve_reference - * - * PARAMETERS: ACPI_PKG_CALLBACK - * - * RETURN: Status - the status of the call - * - * DESCRIPTION: Resolve a reference object to an actual value - * - ******************************************************************************/ - -acpi_status -acpi_ut_resolve_reference ( - u8 object_type, - acpi_operand_object *source_object, - acpi_generic_state *state, - void *context) -{ - acpi_pkg_info *info = (acpi_pkg_info *) context; - - - switch (object_type) { - case ACPI_COPY_TYPE_SIMPLE: - - /* - * Simple object - check for a reference - */ - if (source_object->common.type == INTERNAL_TYPE_REFERENCE) { - switch (source_object->reference.opcode) { - case AML_ZERO_OP: - - source_object->common.type = ACPI_TYPE_INTEGER; - source_object->integer.value = 0; - break; - - case AML_ONE_OP: - - source_object->common.type = ACPI_TYPE_INTEGER; - source_object->integer.value = 1; - break; - - case AML_ONES_OP: - - source_object->common.type = ACPI_TYPE_INTEGER; - source_object->integer.value = ACPI_INTEGER_MAX; - break; - - default: - /* Other types not supported */ - return (AE_SUPPORT); - } - } - break; - - - case ACPI_COPY_TYPE_PACKAGE: - - /* Package object - nothing much to do here, let the walk handle it */ - - info->num_packages++; - state->pkg.this_target_obj = NULL; - break; - - default: - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ut_resolve_package_references - * - * PARAMETERS: Obj_desc - The Package object on which to resolve refs - * - * RETURN: Status - * - * DESCRIPTION: Walk through a package and turn internal references into values - * - ******************************************************************************/ - -acpi_status -acpi_ut_resolve_package_references ( - acpi_operand_object *obj_desc) -{ - acpi_pkg_info info; - acpi_status status; - - - ACPI_FUNCTION_TRACE ("Ut_resolve_package_references"); - - - if (obj_desc->common.type != ACPI_TYPE_PACKAGE) { - /* The object must be a package */ - - ACPI_REPORT_ERROR (("Expecting a Package object\n")); - return_ACPI_STATUS (AE_TYPE); - } - - info.length = 0; - info.object_space = 0; - info.num_packages = 1; - - status = acpi_ut_walk_package_tree (obj_desc, NULL, - acpi_ut_resolve_reference, &info); - - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * * FUNCTION: Acpi_ut_walk_package_tree * * PARAMETERS: Obj_desc - The Package object on which to resolve refs @@ -1260,7 +1148,7 @@ acpi_ut_walk_package_tree ( */ if ((!this_source_obj) || (ACPI_GET_DESCRIPTOR_TYPE (this_source_obj) != ACPI_DESC_TYPE_OPERAND) || - (this_source_obj->common.type != ACPI_TYPE_PACKAGE)) { + (ACPI_GET_OBJECT_TYPE (this_source_obj) != ACPI_TYPE_PACKAGE)) { status = walk_callback (ACPI_COPY_TYPE_SIMPLE, this_source_obj, state, context); if (ACPI_FAILURE (status)) { diff --git a/drivers/acpi/utilities/utobject.c b/drivers/acpi/utilities/utobject.c index 90e7cc213d7d..e9c5d8e58dbe 100644 --- a/drivers/acpi/utilities/utobject.c +++ b/drivers/acpi/utilities/utobject.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utobject - ACPI object create/delete/size/cache routines - * $Revision: 73 $ + * $Revision: 76 $ * *****************************************************************************/ @@ -37,10 +37,9 @@ * * FUNCTION: Acpi_ut_create_internal_object_dbg * - * PARAMETERS: Address - Address of the memory to deallocate - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller + * PARAMETERS: Module_name - Source file name of caller + * Line_number - Line number of caller + * Component_id - Component type of caller * Type - ACPI Type of the new object * * RETURN: Object - The new object. Null on failure @@ -119,7 +118,7 @@ acpi_ut_create_internal_object_dbg ( * * FUNCTION: Acpi_ut_valid_internal_object * - * PARAMETERS: Operand - Object to be validated + * PARAMETERS: Object - Object to be validated * * RETURN: Validate a pointer to be an acpi_operand_object * @@ -180,7 +179,6 @@ acpi_ut_valid_internal_object ( * PARAMETERS: Module_name - Caller's module name (for error output) * Line_number - Caller's line number (for error output) * Component_id - Caller's component ID (for error output) - * Message - Error message to use on failure * * RETURN: Pointer to newly allocated object descriptor. Null on error * @@ -209,7 +207,6 @@ acpi_ut_allocate_object_desc_dbg ( return_PTR (NULL); } - /* Mark the descriptor type */ ACPI_SET_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_OPERAND); @@ -225,7 +222,7 @@ acpi_ut_allocate_object_desc_dbg ( * * FUNCTION: Acpi_ut_delete_object_desc * - * PARAMETERS: Object - Acpi internal object to be deleted + * PARAMETERS: Object - An Acpi internal object to be deleted * * RETURN: None. * @@ -260,7 +257,7 @@ acpi_ut_delete_object_desc ( * * PARAMETERS: None * - * RETURN: Status + * RETURN: None * * DESCRIPTION: Purge the global state object cache. Used during subsystem * termination. @@ -284,12 +281,12 @@ acpi_ut_delete_object_cache ( * FUNCTION: Acpi_ut_get_simple_object_size * * PARAMETERS: *Internal_object - Pointer to the object we are examining - * *Ret_length - Where the length is returned + * *Obj_length - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to - * contain a simple object for return to an API user. + * contain a simple object for return to an external user. * * The length includes the object structure plus any additional * needed space. @@ -315,7 +312,6 @@ acpi_ut_get_simple_object_size ( return_ACPI_STATUS (AE_OK); } - /* Start with the length of the Acpi object */ length = sizeof (acpi_object); @@ -327,16 +323,13 @@ acpi_ut_get_simple_object_size ( return_ACPI_STATUS (status); } - /* * The final length depends on the object type * Strings and Buffers are packed right up against the parent object and * must be accessed bytewise or there may be alignment problems on * certain processors */ - - switch (internal_object->common.type) { - + switch (ACPI_GET_OBJECT_TYPE (internal_object)) { case ACPI_TYPE_STRING: length += (ACPI_SIZE) internal_object->string.length + 1; @@ -362,15 +355,6 @@ acpi_ut_get_simple_object_size ( case INTERNAL_TYPE_REFERENCE: switch (internal_object->reference.opcode) { - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: - case AML_REVISION_OP: - - /* These Constant opcodes will be resolved to Integers */ - - break; - case AML_INT_NAMEPATH_OP: /* @@ -384,7 +368,7 @@ acpi_ut_get_simple_object_size ( /* * No other reference opcodes are supported. - * Notably, Locals and Args are not supported, by this may be + * Notably, Locals and Args are not supported, but this may be * required eventually. */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, @@ -399,12 +383,11 @@ acpi_ut_get_simple_object_size ( default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported type=%X in object %p\n", - internal_object->common.type, internal_object)); + ACPI_GET_OBJECT_TYPE (internal_object), internal_object)); status = AE_TYPE; break; } - /* * Account for the space required by the object rounded up to the next * multiple of the machine word size. This keeps each object aligned @@ -422,7 +405,7 @@ acpi_ut_get_simple_object_size ( * * PARAMETERS: ACPI_PKG_CALLBACK * - * RETURN: Status - the status of the call + * RETURN: Status * * DESCRIPTION: Get the length of one package element. * @@ -481,12 +464,12 @@ acpi_ut_get_element_length ( * FUNCTION: Acpi_ut_get_package_object_size * * PARAMETERS: *Internal_object - Pointer to the object we are examining - * *Ret_length - Where the length is returned + * *Obj_length - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to - * contain a package object for return to an API user. + * contain a package object for return to an external user. * * This is moderately complex since a package contains other * objects including packages. @@ -535,7 +518,7 @@ acpi_ut_get_package_object_size ( * FUNCTION: Acpi_ut_get_object_size * * PARAMETERS: *Internal_object - Pointer to the object we are examining - * *Ret_length - Where the length will be returned + * *Obj_length - Where the length will be returned * * RETURN: Status * @@ -556,7 +539,7 @@ acpi_ut_get_object_size( if ((ACPI_GET_DESCRIPTOR_TYPE (internal_object) == ACPI_DESC_TYPE_OPERAND) && - (internal_object->common.type == ACPI_TYPE_PACKAGE)) { + (ACPI_GET_OBJECT_TYPE (internal_object) == ACPI_TYPE_PACKAGE)) { status = acpi_ut_get_package_object_size (internal_object, obj_length); } else { diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index 9df49714b5ca..012addb8c7bb 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c @@ -1,5 +1,5 @@ /* - * acpi_utils.c - ACPI Utility Functions ($Revision: 5 $) + * acpi_utils.c - ACPI Utility Functions ($Revision: 7 $) * * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> @@ -425,24 +425,16 @@ acpi_evaluate_reference ( element = &(package->package.elements[i]); - if (!element || (element->type != ACPI_TYPE_STRING)) { + if (!element || (element->type != ACPI_TYPE_ANY)) { status = AE_BAD_DATA; ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid element in package (not a device reference)\n")); acpi_util_eval_error(handle, pathname, status); break; } - /* Convert reference (e.g. "\_PR_.CPU_") to acpi_handle. */ - - status = acpi_get_handle(handle, element->string.pointer, - &(list->handles[i])); - if (ACPI_FAILURE(status)) { - status = AE_BAD_DATA; - ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to resolve device reference [%s]\n", element->string.pointer)); - acpi_util_eval_error(handle, pathname, status); - break; - } + /* Get the acpi_handle. */ + list->handles[i] = element->reference.handle; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resolved reference [%s]->[%p]\n", element->string.pointer, list->handles[i])); } |
