Commit 419a57d5 authored by Len Brown's avatar Len Brown Committed by Len Brown

[ACPI] ACPICA 20040922 from Bob Moore

Signed-off-by: default avatarLen Brown <len.brown@intel.com>

Fixed a problem with the implementation of the LNot()
operator where "Ones" was not returned for the TRUE
case. Changed the code to return Ones instead of (!Arg)
which was usually 1. This change affects iASL constant
folding for this operator also.

Fixed a problem in acpi_ut_initialize_buffer where an
existing buffer was not initialized properly -- Now zero
the entire buffer in this case where the buffer already
exists.

Changed the interface to acpi_os_sleep from (UINT32
Seconds, UINT32 Milliseconds) to simply (ACPI_INTEGER
Milliseconds). This simplifies all related code
considerably. This requires changes/updates to all OS
interface layers (OSLs.)

Implemented a new external interface,
acpi_install_exception_handler, to allow a system exception
handler to be installed. This handler is invoked upon
any run-time exception that occurs during control method
execution.

Added support for the DSDT in acpi_tb_find_table. This
allows the DataTableRegion() operator to access the local
copy of the DSDT.
parent 8d7b2d68
...@@ -650,6 +650,17 @@ acpi_ds_exec_end_op ( ...@@ -650,6 +650,17 @@ acpi_ds_exec_end_op (
cleanup: cleanup:
/* Invoke exception handler on error */
if (ACPI_FAILURE (status) &&
acpi_gbl_exception_handler &&
!(status & AE_CODE_CONTROL)) {
acpi_ex_exit_interpreter ();
status = acpi_gbl_exception_handler (status);
acpi_ex_enter_interpreter ();
}
if (walk_state->result_obj) { if (walk_state->result_obj) {
/* Break to debugger to display result */ /* Break to debugger to display result */
......
...@@ -51,6 +51,51 @@ ...@@ -51,6 +51,51 @@
ACPI_MODULE_NAME ("evxface") ACPI_MODULE_NAME ("evxface")
/*******************************************************************************
*
* FUNCTION: acpi_install_exception_handler
*
* PARAMETERS: Handler - Pointer to the handler function for the
* event
*
* RETURN: Status
*
* DESCRIPTION: Saves the pointer to the handler function
*
******************************************************************************/
acpi_status
acpi_install_exception_handler (
acpi_exception_handler handler)
{
acpi_status status;
ACPI_FUNCTION_TRACE ("acpi_install_exception_handler");
status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status);
}
/* Don't allow two handlers. */
if (acpi_gbl_exception_handler) {
status = AE_ALREADY_EXISTS;
goto cleanup;
}
/* Install the handler */
acpi_gbl_exception_handler = handler;
cleanup:
(void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
return_ACPI_STATUS (status);
}
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_install_fixed_event_handler * FUNCTION: acpi_install_fixed_event_handler
......
...@@ -55,7 +55,6 @@ ...@@ -55,7 +55,6 @@
/* /*
* The following routines are used for debug output only * The following routines are used for debug output only
*/ */
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/***************************************************************************** /*****************************************************************************
...@@ -125,8 +124,8 @@ acpi_ex_dump_operand ( ...@@ -125,8 +124,8 @@ acpi_ex_dump_operand (
case AML_NAME_OP: case AML_NAME_OP:
ACPI_DUMP_PATHNAME (obj_desc->reference.object, "Reference: Name: ", ACPI_DUMP_PATHNAME (obj_desc->reference.object,
ACPI_LV_INFO, _COMPONENT); "Reference: Name: ", ACPI_LV_INFO, _COMPONENT);
ACPI_DUMP_ENTRY (obj_desc->reference.object, ACPI_LV_INFO); ACPI_DUMP_ENTRY (obj_desc->reference.object, ACPI_LV_INFO);
break; break;
...@@ -201,8 +200,7 @@ acpi_ex_dump_operand ( ...@@ -201,8 +200,7 @@ acpi_ex_dump_operand (
case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER:
acpi_os_printf ("Buffer len %X @ %p \n", acpi_os_printf ("Buffer len %X @ %p \n",
obj_desc->buffer.length, obj_desc->buffer.length, obj_desc->buffer.pointer);
obj_desc->buffer.pointer);
length = obj_desc->buffer.length; length = obj_desc->buffer.length;
...@@ -387,10 +385,13 @@ acpi_ex_dump_operand ( ...@@ -387,10 +385,13 @@ acpi_ex_dump_operand (
* *
* FUNCTION: acpi_ex_dump_operands * FUNCTION: acpi_ex_dump_operands
* *
* PARAMETERS: interpreter_mode - Load or Exec * PARAMETERS: Operands - Operand list
* *Ident - Identification * interpreter_mode - Load or Exec
* Ident - Identification
* num_levels - # of stack entries to dump above line * num_levels - # of stack entries to dump above line
* *Note - Output notation * Note - Output notation
* module_name - Caller's module name
* line_number - Caller's invocation line number
* *
* DESCRIPTION: Dump the object stack * DESCRIPTION: Dump the object stack
* *
...@@ -489,8 +490,7 @@ acpi_ex_out_address ( ...@@ -489,8 +490,7 @@ acpi_ex_out_address (
#if ACPI_MACHINE_WIDTH == 16 #if ACPI_MACHINE_WIDTH == 16
acpi_os_printf ("%20s : %p\n", title, value); acpi_os_printf ("%20s : %p\n", title, value);
#else #else
acpi_os_printf ("%20s : %8.8X%8.8X\n", title, acpi_os_printf ("%20s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64 (value));
ACPI_FORMAT_UINT64 (value));
#endif #endif
} }
...@@ -563,13 +563,16 @@ acpi_ex_dump_object_descriptor ( ...@@ -563,13 +563,16 @@ acpi_ex_dump_object_descriptor (
if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) { if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
acpi_ex_dump_node ((struct acpi_namespace_node *) obj_desc, flags); acpi_ex_dump_node ((struct acpi_namespace_node *) obj_desc, flags);
acpi_os_printf ("\nAttached Object (%p):\n", ((struct acpi_namespace_node *) obj_desc)->object); acpi_os_printf ("\nAttached Object (%p):\n",
acpi_ex_dump_object_descriptor (((struct acpi_namespace_node *) obj_desc)->object, flags); ((struct acpi_namespace_node *) obj_desc)->object);
return; acpi_ex_dump_object_descriptor (
((struct acpi_namespace_node *) obj_desc)->object, flags);
return_VOID;
} }
if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) { if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
acpi_os_printf ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n", acpi_os_printf (
"ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",
obj_desc, acpi_ut_get_descriptor_name (obj_desc)); obj_desc, acpi_ut_get_descriptor_name (obj_desc));
return_VOID; return_VOID;
} }
...@@ -621,7 +624,8 @@ acpi_ex_dump_object_descriptor ( ...@@ -621,7 +624,8 @@ acpi_ex_dump_object_descriptor (
for (i = 0; i < obj_desc->package.count; i++) { for (i = 0; i < obj_desc->package.count; i++) {
acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]); acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]);
if (obj_desc->package.elements[i]) { if (obj_desc->package.elements[i]) {
acpi_os_printf (" %s", acpi_ut_get_object_type_name (obj_desc->package.elements[i])); acpi_os_printf (" %s",
acpi_ut_get_object_type_name (obj_desc->package.elements[i]));
} }
acpi_os_printf ("\n"); acpi_os_printf ("\n");
} }
...@@ -658,7 +662,7 @@ acpi_ex_dump_object_descriptor ( ...@@ -658,7 +662,7 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_integer ("sync_level", obj_desc->mutex.sync_level); acpi_ex_out_integer ("sync_level", obj_desc->mutex.sync_level);
acpi_ex_out_pointer ("owner_thread", obj_desc->mutex.owner_thread); acpi_ex_out_pointer ("owner_thread", obj_desc->mutex.owner_thread);
acpi_ex_out_integer ("acquisition_depth",obj_desc->mutex.acquisition_depth); acpi_ex_out_integer ("acquire_depth", obj_desc->mutex.acquisition_depth);
acpi_ex_out_pointer ("Semaphore", obj_desc->mutex.semaphore); acpi_ex_out_pointer ("Semaphore", obj_desc->mutex.semaphore);
break; break;
...@@ -708,13 +712,13 @@ acpi_ex_dump_object_descriptor ( ...@@ -708,13 +712,13 @@ acpi_ex_dump_object_descriptor (
case ACPI_TYPE_LOCAL_INDEX_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD:
acpi_ex_out_integer ("field_flags", obj_desc->common_field.field_flags); acpi_ex_out_integer ("field_flags", obj_desc->common_field.field_flags);
acpi_ex_out_integer ("access_byte_width", obj_desc->common_field.access_byte_width); acpi_ex_out_integer ("access_byte_width",obj_desc->common_field.access_byte_width);
acpi_ex_out_integer ("bit_length", obj_desc->common_field.bit_length); acpi_ex_out_integer ("bit_length", obj_desc->common_field.bit_length);
acpi_ex_out_integer ("fld_bit_offset", obj_desc->common_field.start_field_bit_offset); acpi_ex_out_integer ("fld_bit_offset", obj_desc->common_field.start_field_bit_offset);
acpi_ex_out_integer ("base_byte_offset", obj_desc->common_field.base_byte_offset); acpi_ex_out_integer ("base_byte_offset", obj_desc->common_field.base_byte_offset);
acpi_ex_out_integer ("datum_valid_bits", obj_desc->common_field.datum_valid_bits); acpi_ex_out_integer ("datum_valid_bits", obj_desc->common_field.datum_valid_bits);
acpi_ex_out_integer ("end_fld_valid_bits", obj_desc->common_field.end_field_valid_bits); acpi_ex_out_integer ("end_fld_valid_bits",obj_desc->common_field.end_field_valid_bits);
acpi_ex_out_integer ("end_buf_valid_bits", obj_desc->common_field.end_buffer_valid_bits); 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); acpi_ex_out_pointer ("parent_node", obj_desc->common_field.node);
switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
...@@ -779,7 +783,8 @@ acpi_ex_dump_object_descriptor ( ...@@ -779,7 +783,8 @@ acpi_ex_dump_object_descriptor (
case ACPI_TYPE_LOCAL_DATA: case ACPI_TYPE_LOCAL_DATA:
default: default:
acpi_os_printf ("ex_dump_object_descriptor: Display not implemented for object type %s\n", acpi_os_printf (
"ex_dump_object_descriptor: Display not implemented for object type %s\n",
acpi_ut_get_object_type_name (obj_desc)); acpi_ut_get_object_type_name (obj_desc));
break; break;
} }
......
...@@ -124,7 +124,7 @@ acpi_ex_opcode_1A_0T_0R ( ...@@ -124,7 +124,7 @@ acpi_ex_opcode_1A_0T_0R (
case AML_SLEEP_OP: /* Sleep (msec_time) */ case AML_SLEEP_OP: /* Sleep (msec_time) */
status = acpi_ex_system_do_suspend ((u32) operand[0]->integer.value); status = acpi_ex_system_do_suspend (operand[0]->integer.value);
break; break;
...@@ -543,7 +543,13 @@ acpi_ex_opcode_1A_0T_1R ( ...@@ -543,7 +543,13 @@ acpi_ex_opcode_1A_0T_1R (
goto cleanup; goto cleanup;
} }
return_desc->integer.value = !operand[0]->integer.value; /*
* Set result to ONES (TRUE) if Value == 0. Note:
* return_desc->Integer.Value is initially == 0 (FALSE) from above.
*/
if (!operand[0]->integer.value) {
return_desc->integer.value = ACPI_INTEGER_MAX;
}
break; break;
......
...@@ -190,14 +190,20 @@ acpi_ex_store ( ...@@ -190,14 +190,20 @@ acpi_ex_store (
switch (ACPI_GET_OBJECT_TYPE (source_desc)) { switch (ACPI_GET_OBJECT_TYPE (source_desc)) {
case ACPI_TYPE_INTEGER: case ACPI_TYPE_INTEGER:
if (acpi_gbl_integer_byte_width == 4) {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X\n",
(u32) source_desc->integer.value));
}
else {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X%8.8X\n", ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X%8.8X\n",
ACPI_FORMAT_UINT64 (source_desc->integer.value))); ACPI_FORMAT_UINT64 (source_desc->integer.value)));
}
break; break;
case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Length 0x%.2X", ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X]",
(u32) source_desc->buffer.length)); (u32) source_desc->buffer.length));
ACPI_DUMP_BUFFER (source_desc->buffer.pointer, ACPI_DUMP_BUFFER (source_desc->buffer.pointer,
(source_desc->buffer.length < 32) ? source_desc->buffer.length : 32); (source_desc->buffer.length < 32) ? source_desc->buffer.length : 32);
...@@ -206,14 +212,14 @@ acpi_ex_store ( ...@@ -206,14 +212,14 @@ acpi_ex_store (
case ACPI_TYPE_STRING: case ACPI_TYPE_STRING:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Length 0x%.2X, \"%s\"\n", ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] \"%s\"\n",
source_desc->string.length, source_desc->string.pointer)); source_desc->string.length, source_desc->string.pointer));
break; break;
case ACPI_TYPE_PACKAGE: case ACPI_TYPE_PACKAGE:
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Size 0x%.2X Elements Ptr - %p\n", ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] Elements Ptr - %p\n",
source_desc->package.count, source_desc->package.elements)); source_desc->package.count, source_desc->package.elements));
break; break;
......
...@@ -167,7 +167,7 @@ acpi_ex_system_do_stall ( ...@@ -167,7 +167,7 @@ acpi_ex_system_do_stall (
acpi_status acpi_status
acpi_ex_system_do_suspend ( acpi_ex_system_do_suspend (
u32 how_long) acpi_integer how_long)
{ {
acpi_status status; acpi_status status;
...@@ -179,8 +179,7 @@ acpi_ex_system_do_suspend ( ...@@ -179,8 +179,7 @@ acpi_ex_system_do_suspend (
acpi_ex_exit_interpreter (); acpi_ex_exit_interpreter ();
acpi_os_sleep ((u16) (how_long / (u32) 1000), acpi_os_sleep (how_long);
(u16) (how_long % (u32) 1000));
/* And now we must get the interpreter again */ /* And now we must get the interpreter again */
......
...@@ -161,8 +161,10 @@ acpi_ns_root_initialize (void) ...@@ -161,8 +161,10 @@ acpi_ns_root_initialize (void)
#if defined (_ACPI_ASL_COMPILER) || defined (_ACPI_DUMP_App) #if defined (_ACPI_ASL_COMPILER) || defined (_ACPI_DUMP_App)
/* i_aSL Compiler cheats by putting parameter count in the owner_iD */ /*
* i_aSL Compiler cheats by putting parameter count
* in the owner_iD
*/
new_node->owner_id = obj_desc->method.param_count; new_node->owner_id = obj_desc->method.param_count;
#else #else
/* Mark this as a very SPECIAL method */ /* Mark this as a very SPECIAL method */
...@@ -236,7 +238,8 @@ acpi_ns_root_initialize (void) ...@@ -236,7 +238,8 @@ acpi_ns_root_initialize (void)
/* Store pointer to value descriptor in the Node */ /* Store pointer to value descriptor in the Node */
status = acpi_ns_attach_object (new_node, obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc)); status = acpi_ns_attach_object (new_node, obj_desc,
ACPI_GET_OBJECT_TYPE (obj_desc));
/* Remove local reference to the object */ /* Remove local reference to the object */
...@@ -462,7 +465,8 @@ acpi_ns_lookup ( ...@@ -462,7 +465,8 @@ acpi_ns_lookup (
type = this_node->type; type = this_node->type;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Prefix-only Pathname (Zero name segments), Flags=%X\n", flags)); "Prefix-only Pathname (Zero name segments), Flags=%X\n",
flags));
break; break;
case AML_DUAL_NAME_PREFIX: case AML_DUAL_NAME_PREFIX:
......
...@@ -198,7 +198,8 @@ acpi_ns_dump_one_object ( ...@@ -198,7 +198,8 @@ acpi_ns_dump_one_object (
} }
if (!acpi_ut_valid_acpi_name (this_node->name.integer)) { if (!acpi_ut_valid_acpi_name (this_node->name.integer)) {
ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n", this_node->name.integer)); ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n",
this_node->name.integer));
} }
/* /*
...@@ -226,8 +227,7 @@ acpi_ns_dump_one_object ( ...@@ -226,8 +227,7 @@ acpi_ns_dump_one_object (
case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_PROCESSOR:
acpi_os_printf ("ID %X Len %.4X Addr %p\n", acpi_os_printf ("ID %X Len %.4X Addr %p\n",
obj_desc->processor.proc_id, obj_desc->processor.proc_id, obj_desc->processor.length,
obj_desc->processor.length,
(char *) obj_desc->processor.address); (char *) obj_desc->processor.address);
break; break;
...@@ -242,8 +242,7 @@ acpi_ns_dump_one_object ( ...@@ -242,8 +242,7 @@ acpi_ns_dump_one_object (
acpi_os_printf ("Args %X Len %.4X Aml %p\n", acpi_os_printf ("Args %X Len %.4X Aml %p\n",
(u32) obj_desc->method.param_count, (u32) obj_desc->method.param_count,
obj_desc->method.aml_length, obj_desc->method.aml_length, obj_desc->method.aml_start);
obj_desc->method.aml_start);
break; break;
...@@ -298,7 +297,8 @@ acpi_ns_dump_one_object ( ...@@ -298,7 +297,8 @@ acpi_ns_dump_one_object (
case ACPI_TYPE_REGION: case ACPI_TYPE_REGION:
acpi_os_printf ("[%s]", acpi_ut_get_region_name (obj_desc->region.space_id)); acpi_os_printf ("[%s]",
acpi_ut_get_region_name (obj_desc->region.space_id));
if (obj_desc->region.flags & AOPOBJ_DATA_VALID) { if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
acpi_os_printf (" Addr %8.8X%8.8X Len %.4X\n", acpi_os_printf (" Addr %8.8X%8.8X Len %.4X\n",
ACPI_FORMAT_UINT64 (obj_desc->region.address), ACPI_FORMAT_UINT64 (obj_desc->region.address),
...@@ -353,7 +353,8 @@ acpi_ns_dump_one_object ( ...@@ -353,7 +353,8 @@ acpi_ns_dump_one_object (
case ACPI_TYPE_LOCAL_ALIAS: case ACPI_TYPE_LOCAL_ALIAS:
case ACPI_TYPE_LOCAL_METHOD_ALIAS: case ACPI_TYPE_LOCAL_METHOD_ALIAS:
acpi_os_printf ("Target %4.4s (%p)\n", acpi_ut_get_node_name (obj_desc), obj_desc); acpi_os_printf ("Target %4.4s (%p)\n",
acpi_ut_get_node_name (obj_desc), obj_desc);
break; break;
default: default:
...@@ -471,7 +472,8 @@ acpi_ns_dump_one_object ( ...@@ -471,7 +472,8 @@ acpi_ns_dump_one_object (
obj_type = ACPI_GET_OBJECT_TYPE (obj_desc); obj_type = ACPI_GET_OBJECT_TYPE (obj_desc);
if (obj_type > ACPI_TYPE_LOCAL_MAX) { if (obj_type > ACPI_TYPE_LOCAL_MAX) {
acpi_os_printf ("(Ptr to ACPI Object type %X [UNKNOWN])\n", obj_type); acpi_os_printf ("(Ptr to ACPI Object type %X [UNKNOWN])\n",
obj_type);
bytes_to_dump = 32; bytes_to_dump = 32;
} }
else { else {
...@@ -484,7 +486,8 @@ acpi_ns_dump_one_object ( ...@@ -484,7 +486,8 @@ acpi_ns_dump_one_object (
default: default:
acpi_os_printf ("(String or Buffer ptr - not an object descriptor) [%s]\n", acpi_os_printf (
"(String or Buffer ptr - not an object descriptor) [%s]\n",
acpi_ut_get_descriptor_name (obj_desc)); acpi_ut_get_descriptor_name (obj_desc));
bytes_to_dump = 16; bytes_to_dump = 16;
break; break;
......
...@@ -91,9 +91,9 @@ acpi_ns_dump_one_device ( ...@@ -91,9 +91,9 @@ acpi_ns_dump_one_device (
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
} }
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X, Status: %X\n", ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES,
info->hardware_id.value, " HID: %s, ADR: %8.8X%8.8X, Status: %X\n",
ACPI_FORMAT_UINT64 (info->address), info->hardware_id.value, ACPI_FORMAT_UINT64 (info->address),
info->current_status)); info->current_status));
ACPI_MEM_FREE (info); ACPI_MEM_FREE (info);
} }
...@@ -133,7 +133,8 @@ acpi_ns_dump_root_devices (void) ...@@ -133,7 +133,8 @@ acpi_ns_dump_root_devices (void)
return; return;
} }
ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n")); ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
"Display of all devices in the namespace:\n"));
status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, sys_bus_handle, status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, sys_bus_handle,
ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
......
...@@ -57,14 +57,9 @@ ...@@ -57,14 +57,9 @@
* *
* FUNCTION: acpi_ns_evaluate_relative * FUNCTION: acpi_ns_evaluate_relative
* *
* PARAMETERS: Handle - The relative containing object * PARAMETERS: Pathname - Name of method to execute, If NULL, the
* Pathname - Name of method to execute, If NULL, the
* handle is the object to execute * handle is the object to execute
* Params - List of parameters to pass to the method, * Info - Method info block
* terminated by NULL. Params itself may be
* NULL if no parameters are being passed.
* return_object - Where to put method's return value (if
* any). If NULL, no value is returned.
* *
* RETURN: Status * RETURN: Status
* *
...@@ -138,8 +133,7 @@ acpi_ns_evaluate_relative ( ...@@ -138,8 +133,7 @@ acpi_ns_evaluate_relative (
} }
/* /*
* Now that we have a handle to the object, we can attempt * Now that we have a handle to the object, we can attempt to evaluate it.
* to evaluate it.
*/ */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
pathname, node, acpi_ns_get_attached_object (node))); pathname, node, acpi_ns_get_attached_object (node)));
...@@ -213,14 +207,14 @@ acpi_ns_evaluate_by_name ( ...@@ -213,14 +207,14 @@ acpi_ns_evaluate_by_name (
(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Object at [%s] was not found, status=%.4X\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Object at [%s] was not found, status=%.4X\n",
pathname, status)); pathname, status));
goto cleanup; goto cleanup;
} }
/* /*
* Now that we have a handle to the object, we can attempt * Now that we have a handle to the object, we can attempt to evaluate it.
* to evaluate it.
*/ */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
pathname, info->node, acpi_ns_get_attached_object (info->node))); pathname, info->node, acpi_ns_get_attached_object (info->node)));
...@@ -303,9 +297,8 @@ acpi_ns_evaluate_by_handle ( ...@@ -303,9 +297,8 @@ acpi_ns_evaluate_by_handle (
} }
/* /*
* For a method alias, we must grab the actual method node * For a method alias, we must grab the actual method node so that proper
* so that proper scoping context will be established * scoping context will be established before execution.
* before execution.
*/ */
if (acpi_ns_get_type (info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) { if (acpi_ns_get_type (info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
info->node = ACPI_CAST_PTR (struct acpi_namespace_node, info->node->object); info->node = ACPI_CAST_PTR (struct acpi_namespace_node, info->node->object);
...@@ -314,11 +307,9 @@ acpi_ns_evaluate_by_handle ( ...@@ -314,11 +307,9 @@ acpi_ns_evaluate_by_handle (
/* /*
* Two major cases here: * Two major cases here:
* 1) The object is an actual control method -- execute it. * 1) The object is an actual control method -- execute it.
* 2) The object is not a method -- just return it's current * 2) The object is not a method -- just return it's current value
* value
* *
* In both cases, the namespace is unlocked by the * In both cases, the namespace is unlocked by the acpi_ns* procedure
* acpi_ns* procedure
*/ */
if (acpi_ns_get_type (info->node) == ACPI_TYPE_METHOD) { if (acpi_ns_get_type (info->node) == ACPI_TYPE_METHOD) {
/* /*
...@@ -328,15 +319,13 @@ acpi_ns_evaluate_by_handle ( ...@@ -328,15 +319,13 @@ acpi_ns_evaluate_by_handle (
} }
else { else {
/* /*
* Case 2) Object is NOT a method, just return its * Case 2) Object is NOT a method, just return its current value
* current value
*/ */
status = acpi_ns_get_object_value (info); status = acpi_ns_get_object_value (info);
} }
/* /*
* Check if there is a return value on the stack that must * Check if there is a return value on the stack that must be dealt with
* be dealt with
*/ */
if (status == AE_CTRL_RETURN_VALUE) { if (status == AE_CTRL_RETURN_VALUE) {
/* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */ /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
...@@ -345,8 +334,8 @@ acpi_ns_evaluate_by_handle ( ...@@ -345,8 +334,8 @@ acpi_ns_evaluate_by_handle (
} }
/* /*
* Namespace was unlocked by the handling acpi_ns* function, * Namespace was unlocked by the handling acpi_ns* function, so we
* so we just return * just return
*/ */
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
...@@ -356,12 +345,7 @@ acpi_ns_evaluate_by_handle ( ...@@ -356,12 +345,7 @@ acpi_ns_evaluate_by_handle (
* *
* FUNCTION: acpi_ns_execute_control_method * FUNCTION: acpi_ns_execute_control_method
* *
* PARAMETERS: method_node - The method to execute * PARAMETERS: Info - Method info block (w/params)
* 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
* from the method.
* *
* RETURN: Status * RETURN: Status
* *
...@@ -430,8 +414,7 @@ acpi_ns_execute_control_method ( ...@@ -430,8 +414,7 @@ acpi_ns_execute_control_method (
* *
* FUNCTION: acpi_ns_get_object_value * FUNCTION: acpi_ns_get_object_value
* *
* PARAMETERS: Node - The object * PARAMETERS: Info - Method info block (w/params)
* return_obj_desc - Where the objects value is returned
* *
* RETURN: Status * RETURN: Status
* *
...@@ -453,28 +436,25 @@ acpi_ns_get_object_value ( ...@@ -453,28 +436,25 @@ acpi_ns_get_object_value (
/* /*
* Objects require additional resolution steps (e.g., the * Objects require additional resolution steps (e.g., the Node may be a
* Node may be a field that must be read, etc.) -- we can't just grab * field that must be read, etc.) -- we can't just grab the object out of
* the object out of the node. * the node.
*/ */
/* /*
* Use resolve_node_to_value() to get the associated value. This call * Use resolve_node_to_value() to get the associated value. This call always
* always deletes obj_desc (allocated above). * deletes obj_desc (allocated above).
* *
* NOTE: we can get away with passing in NULL for a walk state * NOTE: we can get away with passing in NULL for a walk state because
* because obj_desc is guaranteed to not be a reference to either * obj_desc is guaranteed to not be a reference to either a method local or
* a method local or a method argument (because this interface can only be * a method argument (because this interface can only be called from the
* called from the acpi_evaluate external interface, never called from * acpi_evaluate external interface, never called from a running method.)
* a running control method.) *
* * Even though we do not directly invoke the interpreter for this, we must
* Even though we do not directly invoke the interpreter * enter it because we could access an opregion. The opregion access code
* for this, we must enter it because we could access an opregion. * assumes that the interpreter is locked.
* The opregion access code assumes that the interpreter *
* is locked. * We must release the namespace lock before entering the intepreter.
*
* We must release the namespace lock before entering the
* intepreter.
*/ */
status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
...@@ -485,16 +465,18 @@ acpi_ns_get_object_value ( ...@@ -485,16 +465,18 @@ acpi_ns_get_object_value (
if (ACPI_SUCCESS (status)) { if (ACPI_SUCCESS (status)) {
status = acpi_ex_resolve_node_to_value (&resolved_node, NULL); status = acpi_ex_resolve_node_to_value (&resolved_node, NULL);
/* /*
* If acpi_ex_resolve_node_to_value() succeeded, the return value was * If acpi_ex_resolve_node_to_value() succeeded, the return value was placed
* placed in resolved_node. * in resolved_node.
*/ */
acpi_ex_exit_interpreter (); acpi_ex_exit_interpreter ();
if (ACPI_SUCCESS (status)) { if (ACPI_SUCCESS (status)) {
status = AE_CTRL_RETURN_VALUE; status = AE_CTRL_RETURN_VALUE;
info->return_object = ACPI_CAST_PTR (union acpi_operand_object, resolved_node); info->return_object = ACPI_CAST_PTR
(union acpi_operand_object, resolved_node);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n",
info->return_object, acpi_ut_get_object_type_name (info->return_object))); info->return_object,
acpi_ut_get_object_type_name (info->return_object)));
} }
} }
......
...@@ -77,7 +77,8 @@ acpi_ns_initialize_objects ( ...@@ -77,7 +77,8 @@ acpi_ns_initialize_objects (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"**** Starting initialization of namespace objects ****\n")); "**** Starting initialization of namespace objects ****\n"));
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Completing Region/Field/Buffer/Package initialization:")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
"Completing Region/Field/Buffer/Package initialization:"));
/* Set all init info to zero */ /* Set all init info to zero */
...@@ -142,7 +143,8 @@ acpi_ns_initialize_devices ( ...@@ -142,7 +143,8 @@ acpi_ns_initialize_devices (
info.num_STA = 0; info.num_STA = 0;
info.num_INI = 0; info.num_INI = 0;
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Executing all Device _STA and_INI methods:")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
"Executing all Device _STA and_INI methods:"));
status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
...@@ -257,8 +259,8 @@ acpi_ns_init_one_object ( ...@@ -257,8 +259,8 @@ acpi_ns_init_one_object (
} }
/* /*
* Each of these types can contain executable AML code within * Each of these types can contain executable AML code within the
* the declaration. * declaration.
*/ */
switch (type) { switch (type) {
case ACPI_TYPE_REGION: case ACPI_TYPE_REGION:
...@@ -267,21 +269,18 @@ acpi_ns_init_one_object ( ...@@ -267,21 +269,18 @@ acpi_ns_init_one_object (
status = acpi_ds_get_region_arguments (obj_desc); status = acpi_ds_get_region_arguments (obj_desc);
break; break;
case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_BUFFER_FIELD:
info->field_init++; info->field_init++;
status = acpi_ds_get_buffer_field_arguments (obj_desc); status = acpi_ds_get_buffer_field_arguments (obj_desc);
break; break;
case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER:
info->buffer_init++; info->buffer_init++;
status = acpi_ds_get_buffer_arguments (obj_desc); status = acpi_ds_get_buffer_arguments (obj_desc);
break; break;
case ACPI_TYPE_PACKAGE: case ACPI_TYPE_PACKAGE:
info->package_init++; info->package_init++;
...@@ -301,15 +300,17 @@ acpi_ns_init_one_object ( ...@@ -301,15 +300,17 @@ acpi_ns_init_one_object (
acpi_format_exception (status))); acpi_format_exception (status)));
} }
/* Print a dot for each object unless we are going to print the entire pathname */ /*
* Print a dot for each object unless we are going to print the entire
* pathname
*/
if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) { if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, ".")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
} }
/* /*
* We ignore errors from above, and always return OK, since * We ignore errors from above, and always return OK, since we don't want
* we don't want to abort the walk on any single error. * to abort the walk on any single error.
*/ */
acpi_ex_exit_interpreter (); acpi_ex_exit_interpreter ();
return (AE_OK); return (AE_OK);
...@@ -363,7 +364,8 @@ acpi_ns_init_one_device ( ...@@ -363,7 +364,8 @@ acpi_ns_init_one_device (
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
if ((acpi_dbg_level <= ACPI_LV_ALL_EXCEPTIONS) && (!(acpi_dbg_level & ACPI_LV_INFO))) { if ((acpi_dbg_level <= ACPI_LV_ALL_EXCEPTIONS) &&
(!(acpi_dbg_level & ACPI_LV_INFO))) {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, ".")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
} }
...@@ -429,6 +431,5 @@ acpi_ns_init_one_device ( ...@@ -429,6 +431,5 @@ acpi_ns_init_one_device (
status = acpi_gbl_init_handler (pinfo.node, ACPI_INIT_DEVICE_INI); status = acpi_gbl_init_handler (pinfo.node, ACPI_INIT_DEVICE_INI);
} }
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
...@@ -92,12 +92,14 @@ acpi_ns_load_table ( ...@@ -92,12 +92,14 @@ acpi_ns_load_table (
return_ACPI_STATUS (AE_BAD_PARAMETER); return_ACPI_STATUS (AE_BAD_PARAMETER);
} }
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AML block at %p\n", table_desc->aml_start)); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AML block at %p\n",
table_desc->aml_start));
/* Ignore table if there is no AML contained within */ /* Ignore table if there is no AML contained within */
if (!table_desc->aml_length) { if (!table_desc->aml_length) {
ACPI_REPORT_WARNING (("Zero-length AML block in table [%4.4s]\n", table_desc->pointer->signature)); ACPI_REPORT_WARNING (("Zero-length AML block in table [%4.4s]\n",
table_desc->pointer->signature));
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
...@@ -110,7 +112,8 @@ acpi_ns_load_table ( ...@@ -110,7 +112,8 @@ acpi_ns_load_table (
* to another control method, we can't continue parsing * to another control method, we can't continue parsing
* because we don't know how many arguments to parse next! * because we don't know how many arguments to parse next!
*/ */
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Loading table into namespace ****\n")); ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"**** Loading table into namespace ****\n"));
status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
...@@ -196,7 +199,6 @@ acpi_ns_load_table_by_type ( ...@@ -196,7 +199,6 @@ acpi_ns_load_table_by_type (
if (ACPI_SUCCESS (status)) { if (ACPI_SUCCESS (status)) {
table_desc->loaded_into_namespace = TRUE; table_desc->loaded_into_namespace = TRUE;
} }
break; break;
...@@ -252,7 +254,6 @@ acpi_ns_load_table_by_type ( ...@@ -252,7 +254,6 @@ acpi_ns_load_table_by_type (
table_desc = table_desc->next; table_desc = table_desc->next;
} }
break; break;
......
...@@ -257,7 +257,8 @@ acpi_ns_handle_to_pathname ( ...@@ -257,7 +257,8 @@ acpi_ns_handle_to_pathname (
acpi_ns_build_external_path (node, required_size, buffer->pointer); acpi_ns_build_external_path (node, required_size, buffer->pointer);
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X] \n", (char *) buffer->pointer, (u32) required_size)); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X] \n",
(char *) buffer->pointer, (u32) required_size));
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
......
...@@ -96,8 +96,10 @@ acpi_ns_search_node ( ...@@ -96,8 +96,10 @@ acpi_ns_search_node (
scope_name = acpi_ns_get_external_pathname (node); scope_name = acpi_ns_get_external_pathname (node);
if (scope_name) { if (scope_name) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s (%p) For [%4.4s] (%s)\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
scope_name, node, (char *) &target_name, acpi_ut_get_type_name (type))); "Searching %s (%p) For [%4.4s] (%s)\n",
scope_name, node, (char *) &target_name,
acpi_ut_get_type_name (type)));
ACPI_MEM_FREE (scope_name); ACPI_MEM_FREE (scope_name);
} }
...@@ -164,7 +166,7 @@ acpi_ns_search_node ( ...@@ -164,7 +166,7 @@ acpi_ns_search_node (
* PARAMETERS: *target_name - Ascii ACPI name to search for * PARAMETERS: *target_name - Ascii ACPI name to search for
* *Node - Starting node where search will begin * *Node - Starting node where search will begin
* Type - Object type to match * Type - Object type to match
* **return_node - Where the matched Named Obj is returned * **return_node - Where the matched Node is returned
* *
* RETURN: Status * RETURN: Status
* *
...@@ -199,8 +201,8 @@ acpi_ns_search_parent_tree ( ...@@ -199,8 +201,8 @@ acpi_ns_search_parent_tree (
parent_node = acpi_ns_get_parent_node (node); parent_node = acpi_ns_get_parent_node (node);
/* /*
* If there is no parent (i.e., we are at the root) or * If there is no parent (i.e., we are at the root) or type is "local",
* type is "local", we won't be searching the parent tree. * we won't be searching the parent tree.
*/ */
if (!parent_node) { if (!parent_node) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
...@@ -217,11 +219,12 @@ acpi_ns_search_parent_tree ( ...@@ -217,11 +219,12 @@ acpi_ns_search_parent_tree (
/* Search the parent tree */ /* Search the parent tree */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent for %4.4s\n", (char *) &target_name)); ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Searching parent [%4.4s] for [%4.4s]\n",
acpi_ut_get_node_name (parent_node), (char *) &target_name));
/* /*
* Search parents until found the target or we have backed up to * Search parents until target is found or we have backed up to the root
* the root
*/ */
while (parent_node) { while (parent_node) {
/* /*
...@@ -293,7 +296,8 @@ acpi_ns_search_and_enter ( ...@@ -293,7 +296,8 @@ acpi_ns_search_and_enter (
/* Parameter validation */ /* Parameter validation */
if (!node || !target_name || !return_node) { if (!node || !target_name || !return_node) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null param: Node %p Name %X return_node %p\n", ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Null param: Node %p Name %X return_node %p\n",
node, target_name, return_node)); node, target_name, return_node));
ACPI_REPORT_ERROR (("ns_search_and_enter: Null parameter\n")); ACPI_REPORT_ERROR (("ns_search_and_enter: Null parameter\n"));
...@@ -330,22 +334,20 @@ acpi_ns_search_and_enter ( ...@@ -330,22 +334,20 @@ acpi_ns_search_and_enter (
} }
/* /*
* The name was not found. If we are NOT performing the * The name was not found. If we are NOT performing the first pass
* first pass (name entry) of loading the namespace, search * (name entry) of loading the namespace, search the parent tree (all the
* the parent tree (all the way to the root if necessary.) * way to the root if necessary.) We don't want to perform the parent
* We don't want to perform the parent search when the * search when the namespace is actually being loaded. We want to perform
* namespace is actually being loaded. We want to perform * the search when namespace references are being resolved (load pass 2)
* the search when namespace references are being resolved * and during the execution phase.
* (load pass 2) and during the execution phase.
*/ */
if ((interpreter_mode != ACPI_IMODE_LOAD_PASS1) && if ((interpreter_mode != ACPI_IMODE_LOAD_PASS1) &&
(flags & ACPI_NS_SEARCH_PARENT)) { (flags & ACPI_NS_SEARCH_PARENT)) {
/* /*
* Not found at this level - search parent tree according * Not found at this level - search parent tree according to the
* to ACPI specification * ACPI specification
*/ */
status = acpi_ns_search_parent_tree (target_name, node, status = acpi_ns_search_parent_tree (target_name, node, type, return_node);
type, return_node);
if (ACPI_SUCCESS (status)) { if (ACPI_SUCCESS (status)) {
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
...@@ -355,7 +357,8 @@ acpi_ns_search_and_enter ( ...@@ -355,7 +357,8 @@ acpi_ns_search_and_enter (
* In execute mode, just search, never add names. Exit now. * In execute mode, just search, never add names. Exit now.
*/ */
if (interpreter_mode == ACPI_IMODE_EXECUTE) { if (interpreter_mode == ACPI_IMODE_EXECUTE) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s Not found in %p [Not adding]\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"%4.4s Not found in %p [Not adding]\n",
(char *) &target_name, node)); (char *) &target_name, node));
return_ACPI_STATUS (AE_NOT_FOUND); return_ACPI_STATUS (AE_NOT_FOUND);
......
...@@ -85,12 +85,14 @@ acpi_ns_report_error ( ...@@ -85,12 +85,14 @@ acpi_ns_report_error (
if (lookup_status == AE_BAD_CHARACTER) { if (lookup_status == AE_BAD_CHARACTER) {
/* There is a non-ascii character in the name */ /* There is a non-ascii character in the name */
acpi_os_printf ("[0x%4.4X] (NON-ASCII)\n", *(ACPI_CAST_PTR (u32, internal_name))); acpi_os_printf ("[0x%4.4X] (NON-ASCII)\n",
*(ACPI_CAST_PTR (u32, internal_name)));
} }
else { else {
/* Convert path to external format */ /* Convert path to external format */
status = acpi_ns_externalize_name (ACPI_UINT32_MAX, internal_name, NULL, &name); status = acpi_ns_externalize_name (ACPI_UINT32_MAX,
internal_name, NULL, &name);
/* Print target name */ /* Print target name */
...@@ -141,7 +143,8 @@ acpi_ns_report_method_error ( ...@@ -141,7 +143,8 @@ acpi_ns_report_method_error (
if (path) { if (path) {
status = acpi_ns_get_node_by_path (path, prefix_node, ACPI_NS_NO_UPSEARCH, &node); status = acpi_ns_get_node_by_path (path, prefix_node,
ACPI_NS_NO_UPSEARCH, &node);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
acpi_os_printf ("report_method_error: Could not get node\n"); acpi_os_printf ("report_method_error: Could not get node\n");
return; return;
...@@ -180,7 +183,7 @@ acpi_ns_print_node_pathname ( ...@@ -180,7 +183,7 @@ acpi_ns_print_node_pathname (
return; return;
} }
/* Convert handle to a full pathname and print it (with supplied message) */ /* Convert handle to full pathname and print it (with supplied message) */
buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
...@@ -324,13 +327,11 @@ acpi_ns_get_internal_name_length ( ...@@ -324,13 +327,11 @@ acpi_ns_get_internal_name_length (
info->fully_qualified = FALSE; info->fully_qualified = FALSE;
/* /*
* For the internal name, the required length is 4 bytes * For the internal name, the required length is 4 bytes per segment, plus
* per segment, plus 1 each for root_prefix, multi_name_prefix_op, * 1 each for root_prefix, multi_name_prefix_op, segment count, trailing null
* segment count, trailing null (which is not really needed, * (which is not really needed, but no there's harm in putting it there)
* but no there's harm in putting it there)
* *
* strlen() + 1 covers the first name_seg, which has no * strlen() + 1 covers the first name_seg, which has no path separator
* path separator
*/ */
if (acpi_ns_valid_root_prefix (next_external_char[0])) { if (acpi_ns_valid_root_prefix (next_external_char[0])) {
info->fully_qualified = TRUE; info->fully_qualified = TRUE;
...@@ -347,10 +348,9 @@ acpi_ns_get_internal_name_length ( ...@@ -347,10 +348,9 @@ acpi_ns_get_internal_name_length (
} }
/* /*
* Determine the number of ACPI name "segments" by counting * Determine the number of ACPI name "segments" by counting the number of
* the number of path separators within the string. Start * path separators within the string. Start with one segment since the
* with one segment since the segment count is (# separators) * segment count is [(# separators) + 1], and zero separators is ok.
* + 1, and zero separators is ok.
*/ */
if (*next_external_char) { if (*next_external_char) {
info->num_segments = 1; info->num_segments = 1;
...@@ -625,7 +625,8 @@ acpi_ns_externalize_name ( ...@@ -625,7 +625,8 @@ acpi_ns_externalize_name (
/* <count> 4-byte names */ /* <count> 4-byte names */
names_index = prefix_length + 2; names_index = prefix_length + 2;
num_segments = (acpi_native_uint) (u8) internal_name[(acpi_native_uint) (prefix_length + 1)]; num_segments = (acpi_native_uint) (u8)
internal_name[(acpi_native_uint) (prefix_length + 1)];
break; break;
case AML_DUAL_NAME_PREFIX: case AML_DUAL_NAME_PREFIX:
...@@ -672,7 +673,7 @@ acpi_ns_externalize_name ( ...@@ -672,7 +673,7 @@ acpi_ns_externalize_name (
} }
/* /*
* Build converted_name... * Build converted_name
*/ */
*converted_name = ACPI_MEM_CALLOCATE (required_length); *converted_name = ACPI_MEM_CALLOCATE (required_length);
if (!(*converted_name)) { if (!(*converted_name)) {
...@@ -756,7 +757,7 @@ acpi_ns_map_handle_to_node ( ...@@ -756,7 +757,7 @@ acpi_ns_map_handle_to_node (
* *
* PARAMETERS: Node - Node to be converted to a Handle * PARAMETERS: Node - Node to be converted to a Handle
* *
* RETURN: An USER acpi_handle * RETURN: A user handle
* *
* DESCRIPTION: Convert a real Node to a namespace handle * DESCRIPTION: Convert a real Node to a namespace handle
* *
...@@ -976,7 +977,8 @@ acpi_ns_find_parent_name ( ...@@ -976,7 +977,8 @@ acpi_ns_find_parent_name (
parent_node = acpi_ns_get_parent_node (child_node); parent_node = acpi_ns_get_parent_node (child_node);
if (parent_node) { if (parent_node) {
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Parent of %p [%4.4s] is %p [%4.4s]\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Parent of %p [%4.4s] is %p [%4.4s]\n",
child_node, acpi_ut_get_node_name (child_node), child_node, acpi_ut_get_node_name (child_node),
parent_node, acpi_ut_get_node_name (parent_node))); parent_node, acpi_ut_get_node_name (parent_node)));
...@@ -985,7 +987,8 @@ acpi_ns_find_parent_name ( ...@@ -985,7 +987,8 @@ acpi_ns_find_parent_name (
} }
} }
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "unable to find parent of %p (%4.4s)\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Unable to find parent of %p (%4.4s)\n",
child_node, acpi_ut_get_node_name (child_node))); child_node, acpi_ut_get_node_name (child_node)));
} }
...@@ -1018,11 +1021,9 @@ acpi_ns_get_parent_node ( ...@@ -1018,11 +1021,9 @@ acpi_ns_get_parent_node (
} }
/* /*
* Walk to the end of this peer list. * Walk to the end of this peer list. The last entry is marked with a flag
* The last entry is marked with a flag and the peer * and the peer pointer is really a pointer back to the parent. This saves
* pointer is really a pointer back to the parent. * putting a parent back pointer in each and every named object!
* This saves putting a parent back pointer in each and
* every named object!
*/ */
while (!(node->flags & ANOBJ_END_OF_PEER_LIST)) { while (!(node->flags & ANOBJ_END_OF_PEER_LIST)) {
node = node->peer; node = node->peer;
...@@ -1040,7 +1041,7 @@ acpi_ns_get_parent_node ( ...@@ -1040,7 +1041,7 @@ acpi_ns_get_parent_node (
* PARAMETERS: Node - Current table entry * PARAMETERS: Node - Current table entry
* *
* RETURN: Next valid Node in the linked node list. NULL if no more valid * RETURN: Next valid Node in the linked node list. NULL if no more valid
* nodess * nodes.
* *
* DESCRIPTION: Find the next valid node within a name table. * DESCRIPTION: Find the next valid node within a name table.
* Useful for implementing NULL-end-of-list loops. * Useful for implementing NULL-end-of-list loops.
......
...@@ -167,6 +167,9 @@ acpi_tb_get_table_header ( ...@@ -167,6 +167,9 @@ acpi_tb_get_table_header (
return_ACPI_STATUS (AE_BAD_PARAMETER); return_ACPI_STATUS (AE_BAD_PARAMETER);
} }
ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Table Signature: [%4.4s]\n",
&return_header->signature));
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
......
...@@ -87,6 +87,21 @@ acpi_tb_find_table ( ...@@ -87,6 +87,21 @@ acpi_tb_find_table (
return_ACPI_STATUS (AE_AML_STRING_LIMIT); return_ACPI_STATUS (AE_AML_STRING_LIMIT);
} }
if (!ACPI_STRNCMP (signature, DSDT_SIG, ACPI_NAME_SIZE)) {
/*
* The DSDT pointer is contained in the FADT, not the RSDT.
* This code should suffice, because the only code that would perform
* a "find" on the DSDT is the data_table_region() AML opcode -- in
* which case, the DSDT is guaranteed to be already loaded.
* If this becomes insufficient, the FADT will have to be found first.
*/
if (!acpi_gbl_DSDT) {
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
table = acpi_gbl_DSDT;
}
else {
/* Find the table */ /* Find the table */
status = acpi_get_firmware_table (signature, 1, status = acpi_get_firmware_table (signature, 1,
...@@ -94,6 +109,7 @@ acpi_tb_find_table ( ...@@ -94,6 +109,7 @@ acpi_tb_find_table (
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
}
/* Check oem_id and oem_table_id */ /* Check oem_id and oem_table_id */
...@@ -102,6 +118,7 @@ acpi_tb_find_table ( ...@@ -102,6 +118,7 @@ acpi_tb_find_table (
return_ACPI_STATUS (AE_AML_NAME_NOT_FOUND); return_ACPI_STATUS (AE_AML_NAME_NOT_FOUND);
} }
ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Found table [%4.4s]\n", table->signature));
*table_ptr = table; *table_ptr = table;
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
......
...@@ -265,7 +265,7 @@ acpi_ut_validate_buffer ( ...@@ -265,7 +265,7 @@ acpi_ut_validate_buffer (
* RETURN: Status * RETURN: Status
* *
* DESCRIPTION: Validate that the buffer is of the required length or * DESCRIPTION: Validate that the buffer is of the required length or
* allocate a new buffer. * allocate a new buffer. Returned buffer is always zeroed.
* *
******************************************************************************/ ******************************************************************************/
...@@ -305,24 +305,25 @@ acpi_ut_initialize_buffer ( ...@@ -305,24 +305,25 @@ acpi_ut_initialize_buffer (
/* Allocate a new buffer with local interface to allow tracking */ /* Allocate a new buffer with local interface to allow tracking */
buffer->pointer = ACPI_MEM_ALLOCATE (required_length); buffer->pointer = ACPI_MEM_CALLOCATE (required_length);
if (!buffer->pointer) { if (!buffer->pointer) {
return (AE_NO_MEMORY); return (AE_NO_MEMORY);
} }
/* Clear the buffer */
ACPI_MEMSET (buffer->pointer, 0, required_length);
break; break;
default: default:
/* Validate the size of the buffer */ /* Existing buffer: Validate the size of the buffer */
if (buffer->length < required_length) { if (buffer->length < required_length) {
status = AE_BUFFER_OVERFLOW; status = AE_BUFFER_OVERFLOW;
break;
} }
/* Clear the buffer */
ACPI_MEMSET (buffer->pointer, 0, required_length);
break; break;
} }
......
...@@ -861,6 +861,7 @@ acpi_ut_init_globals ( ...@@ -861,6 +861,7 @@ acpi_ut_init_globals (
acpi_gbl_system_notify.handler = NULL; acpi_gbl_system_notify.handler = NULL;
acpi_gbl_device_notify.handler = NULL; acpi_gbl_device_notify.handler = NULL;
acpi_gbl_exception_handler = NULL;
acpi_gbl_init_handler = NULL; acpi_gbl_init_handler = NULL;
/* Global "typed" ACPI table pointers */ /* Global "typed" ACPI table pointers */
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
/* Version string */ /* Version string */
#define ACPI_CA_VERSION 0x20040827 #define ACPI_CA_VERSION 0x20040922
/* /*
* OS name, used for the _OS object. The _OS object is essentially obsolete, * OS name, used for the _OS object. The _OS object is essentially obsolete,
......
...@@ -180,6 +180,7 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX]; ...@@ -180,6 +180,7 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX];
ACPI_EXTERN struct acpi_memory_list acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS]; ACPI_EXTERN struct acpi_memory_list acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS];
ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify; ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify;
ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify; ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify;
ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler;
ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler; ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler;
ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk; ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk;
ACPI_EXTERN acpi_handle acpi_gbl_global_lock_semaphore; ACPI_EXTERN acpi_handle acpi_gbl_global_lock_semaphore;
......
...@@ -388,7 +388,7 @@ acpi_ex_system_do_notify_op ( ...@@ -388,7 +388,7 @@ acpi_ex_system_do_notify_op (
acpi_status acpi_status
acpi_ex_system_do_suspend( acpi_ex_system_do_suspend(
u32 time); acpi_integer time);
acpi_status acpi_status
acpi_ex_system_do_stall ( acpi_ex_system_do_stall (
......
...@@ -216,10 +216,13 @@ void ...@@ -216,10 +216,13 @@ void
acpi_os_wait_events_complete( acpi_os_wait_events_complete(
void * context); void * context);
void
acpi_os_wait_events_complete (
void *context);
void void
acpi_os_sleep ( acpi_os_sleep (
u32 seconds, acpi_integer milliseconds);
u32 milliseconds);
void void
acpi_os_stall ( acpi_os_stall (
......
...@@ -299,6 +299,15 @@ acpi_install_gpe_handler ( ...@@ -299,6 +299,15 @@ acpi_install_gpe_handler (
acpi_event_handler address, acpi_event_handler address,
void *context); void *context);
acpi_status
acpi_install_exception_handler (
acpi_exception_handler handler);
/*
* Event interfaces
*/
acpi_status acpi_status
acpi_acquire_global_lock ( acpi_acquire_global_lock (
u16 timeout, u16 timeout,
......
...@@ -836,6 +836,10 @@ acpi_status (*acpi_init_handler) ( ...@@ -836,6 +836,10 @@ acpi_status (*acpi_init_handler) (
#define ACPI_INIT_DEVICE_INI 1 #define ACPI_INIT_DEVICE_INI 1
typedef
acpi_status (*acpi_exception_handler) (
acpi_status status);
/* Address Spaces (For Operation Regions) */ /* Address Spaces (For Operation Regions) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment