Commit a6817928 authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linux-acpi.bkbits.net/linux-acpi

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 1c01cb01 a969f910
......@@ -32,7 +32,6 @@
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/bootmem.h>
#include <linux/slab.h>
#include <linux/irq.h>
#include <linux/acpi.h>
#include <asm/mpspec.h>
......@@ -53,11 +52,9 @@
Boot-time Configuration
-------------------------------------------------------------------------- */
#ifdef CONFIG_ACPI_BOOT
enum acpi_irq_model_id acpi_irq_model;
#ifdef CONFIG_ACPI_BOOT
/*
* Use reserved fixmap pages for physical-to-virtual mappings of ACPI tables.
* Note that the same range is used for each table, so tables that need to
......
......@@ -7,7 +7,7 @@ export ACPI_CFLAGS
ACPI_CFLAGS := -D_LINUX -I$(CURDIR)/include
ifdef CONFIG_ACPI_DEBUG
ACPI_CFLAGS += -DACPI_DEBUG
ACPI_CFLAGS += -DACPI_DEBUG_OUTPUT
endif
EXTRA_CFLAGS += $(ACPI_CFLAGS)
......
......@@ -62,6 +62,7 @@ EXPORT_SYMBOL(acpi_get_object_info);
EXPORT_SYMBOL(acpi_get_next_object);
EXPORT_SYMBOL(acpi_evaluate_object);
EXPORT_SYMBOL(acpi_get_table);
EXPORT_SYMBOL(acpi_get_firmware_table);
EXPORT_SYMBOL(acpi_install_notify_handler);
EXPORT_SYMBOL(acpi_remove_notify_handler);
EXPORT_SYMBOL(acpi_install_gpe_handler);
......
......@@ -2052,7 +2052,7 @@ acpi_bus_init (void)
/* Mimic structured exception handling */
error4:
remove_proc_entry("ACPI", NULL);
remove_proc_entry(ACPI_BUS_FILE_ROOT, NULL);
error3:
acpi_bus_remove(acpi_root, ACPI_BUS_REMOVAL_NORMAL);
error2:
......
/*******************************************************************************
*
* Module Name: dbcmds - debug commands and output routines
* $Revision: 85 $
* $Revision: 87 $
*
******************************************************************************/
......@@ -33,9 +33,9 @@
#include "acresrc.h"
#include "acdisasm.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbcmds")
......@@ -1111,4 +1111,4 @@ acpi_db_check_integrity (void)
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbdisply - debug display commands
* $Revision: 76 $
* $Revision: 78 $
*
******************************************************************************/
......@@ -33,10 +33,10 @@
#include "acdebug.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbdisply")
......@@ -855,5 +855,5 @@ acpi_db_display_argument_object (
acpi_db_display_internal_object (obj_desc, walk_state);
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbexec - debugger control method execution
* $Revision: 42 $
* $Revision: 44 $
*
******************************************************************************/
......@@ -27,9 +27,9 @@
#include "acpi.h"
#include "acdebug.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbexec")
......@@ -209,7 +209,7 @@ acpi_db_execute (
acpi_buffer return_obj;
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
u32 previous_allocations;
u32 allocations;
......@@ -236,7 +236,7 @@ acpi_db_execute (
acpi_os_sleep (0, 10);
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
/* Memory allocation tracking */
......@@ -400,6 +400,6 @@ acpi_db_create_execution_threads (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
......@@ -2,7 +2,7 @@
*
* Module Name: dbfileio - Debugger file I/O commands. These can't usually
* be used when running the debugger in Ring 0 (Kernel mode)
* $Revision: 67 $
* $Revision: 68 $
*
******************************************************************************/
......@@ -30,9 +30,9 @@
#include "acnamesp.h"
#include "actables.h"
#if (defined ENABLE_DEBUGGER || defined ACPI_DISASSEMBLER)
#if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbfileio")
......@@ -86,7 +86,7 @@ acpi_db_match_argument (
}
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
/*******************************************************************************
*
* FUNCTION: Acpi_db_close_debug_file
......@@ -395,5 +395,5 @@ acpi_db_load_acpi_table (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/******************************************************************************
*
* Module Name: dbhistry - debugger HISTORY command
* $Revision: 24 $
* $Revision: 25 $
*
*****************************************************************************/
......@@ -27,9 +27,9 @@
#include "acpi.h"
#include "acdebug.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbhistry")
......@@ -185,5 +185,5 @@ acpi_db_get_from_history (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbinput - user front-end to the AML debugger
* $Revision: 86 $
* $Revision: 87 $
*
******************************************************************************/
......@@ -28,9 +28,9 @@
#include "acdebug.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbinput")
......@@ -888,5 +888,5 @@ acpi_db_user_commands (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbstats - Generation and display of ACPI table statistics
* $Revision: 60 $
* $Revision: 61 $
*
******************************************************************************/
......@@ -28,9 +28,9 @@
#include <acdebug.h>
#include <acnamesp.h>
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbstats")
/*
......@@ -148,8 +148,6 @@ acpi_db_enumerate_object (
}
#ifndef PARSER_ONLY
/*******************************************************************************
*
* FUNCTION: Acpi_db_classify_one_object
......@@ -254,8 +252,6 @@ acpi_db_count_namespace_objects (
FALSE, acpi_db_classify_one_object, NULL, NULL);
}
#endif
/*******************************************************************************
*
......@@ -303,13 +299,11 @@ acpi_db_display_statistics (
switch (type)
{
#ifndef PARSER_ONLY
case CMD_STAT_ALLOCATIONS:
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
acpi_ut_dump_allocation_info ();
#endif
break;
#endif
case CMD_STAT_TABLES:
......@@ -322,8 +316,6 @@ acpi_db_display_statistics (
case CMD_STAT_OBJECTS:
#ifndef PARSER_ONLY
acpi_db_count_namespace_objects ();
acpi_os_printf ("\nObjects defined in the current namespace:\n\n");
......@@ -340,8 +332,6 @@ acpi_db_display_statistics (
acpi_os_printf ("%16.16s % 10ld% 10ld\n", "TOTALS:",
acpi_gbl_num_nodes, acpi_gbl_num_objects);
#endif
break;
case CMD_STAT_MEMORY:
......@@ -445,7 +435,7 @@ acpi_db_display_statistics (
case CMD_STAT_STACK:
#if defined(ACPI_DEBUG)
#if defined(ACPI_DEBUG_OUTPUT)
size = (u32) (acpi_gbl_entry_stack_pointer - acpi_gbl_lowest_stack_pointer);
......@@ -466,4 +456,4 @@ acpi_db_display_statistics (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbutils - AML debugger utilities
* $Revision: 55 $
* $Revision: 56 $
*
******************************************************************************/
......@@ -32,9 +32,9 @@
#include "acdispat.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbutils")
......@@ -375,6 +375,6 @@ acpi_db_local_ns_lookup (
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/*******************************************************************************
*
* Module Name: dbxface - AML Debugger external interfaces
* $Revision: 61 $
* $Revision: 64 $
*
******************************************************************************/
......@@ -30,9 +30,9 @@
#include "acdisasm.h"
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME ("dbxface")
......@@ -184,7 +184,7 @@ acpi_db_single_step (
/* Restore everything */
op->common.next = next;
acpi_os_printf ("\n");
acpi_os_printf ("\n\n");
acpi_dbg_level = original_debug_level;
}
......@@ -385,4 +385,4 @@ acpi_db_terminate (void)
}
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
/******************************************************************************
*
* Module Name: dsfield - Dispatcher field routines
* $Revision: 65 $
* $Revision: 66 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: dsmethod - Parser/Interpreter interface - control method parsing
* $Revision: 87 $
* $Revision: 88 $
*
*****************************************************************************/
......
/*******************************************************************************
*
* Module Name: dsmthdat - control method arguments and local variables
* $Revision: 62 $
* $Revision: 63 $
*
******************************************************************************/
......@@ -587,24 +587,41 @@ acpi_ds_store_object_to_local (
*
* Weird, but true.
*/
if ((opcode == AML_ARG_OP) &&
(ACPI_GET_DESCRIPTOR_TYPE (current_obj_desc) == ACPI_DESC_TYPE_NAMED)) {
if (opcode == AML_ARG_OP) {
/*
* Make sure that the object is the correct type. This may be overkill, but
* it is here because references were NS nodes in the past. Now they are
* operand objects of type Reference.
*/
if (ACPI_GET_DESCRIPTOR_TYPE (current_obj_desc) != ACPI_DESC_TYPE_OPERAND) {
ACPI_REPORT_ERROR (("Invalid descriptor type while storing to method arg: %X\n",
current_obj_desc->common.type));
return_ACPI_STATUS (AE_AML_INTERNAL);
}
/*
* If we have a valid reference object that came from Ref_of(), do the
* indirect store
*/
if ((current_obj_desc->common.type == INTERNAL_TYPE_REFERENCE) &&
(current_obj_desc->reference.opcode == AML_REF_OF_OP)) {
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Arg (%p) is an Obj_ref(Node), storing in node %p\n",
obj_desc, current_obj_desc));
/* Detach an existing object from the Node */
/* Detach an existing object from the referenced Node */
acpi_ns_detach_object ((acpi_namespace_node *) current_obj_desc);
acpi_ns_detach_object (current_obj_desc->reference.object);
/*
* Store this object into the Node
* (perform the indirect store)
*/
status = acpi_ns_attach_object ((acpi_namespace_node *) current_obj_desc,
status = acpi_ns_attach_object (current_obj_desc->reference.object,
obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc));
return_ACPI_STATUS (status);
}
}
/*
* Delete the existing object
......
/******************************************************************************
*
* Module Name: dsobject - Dispatcher object management routines
* $Revision: 105 $
* $Revision: 106 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
*
* Module Name: dsopcode - Dispatcher Op Region support and handling of
* "control" opcodes
* $Revision: 80 $
* $Revision: 81 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
*
* Module Name: dswexec - Dispatcher method execution callbacks;
* dispatch to interpreter.
* $Revision: 94 $
* $Revision: 95 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: dswload - Dispatcher namespace load callbacks
* $Revision: 69 $
* $Revision: 70 $
*
*****************************************************************************/
......@@ -296,7 +296,7 @@ acpi_ds_load2_begin_op (
NATIVE_CHAR *buffer_ptr;
ACPI_FUNCTION_NAME ("Ds_load2_begin_op");
ACPI_FUNCTION_TRACE ("Ds_load2_begin_op");
op = walk_state->op;
......@@ -307,7 +307,7 @@ acpi_ds_load2_begin_op (
if ((!(walk_state->op_info->flags & AML_NSOPCODE) && (walk_state->opcode != AML_INT_NAMEPATH_OP)) ||
(!(walk_state->op_info->flags & AML_NAMED))) {
return (AE_OK);
return_ACPI_STATUS (AE_OK);
}
/*
......@@ -320,7 +320,7 @@ acpi_ds_load2_begin_op (
if (!buffer_ptr) {
/* No name, just exit */
return (AE_OK);
return_ACPI_STATUS (AE_OK);
}
}
else {
......@@ -368,11 +368,11 @@ acpi_ds_load2_begin_op (
if (acpi_ns_opens_scope (object_type)) {
status = acpi_ds_scope_stack_push (node, object_type, walk_state);
if (ACPI_FAILURE (status)) {
return (status);
return_ACPI_STATUS (status);
}
}
return (AE_OK);
return_ACPI_STATUS (AE_OK);
}
/*
......@@ -390,7 +390,7 @@ acpi_ds_load2_begin_op (
op = acpi_ps_alloc_op (walk_state->opcode);
if (!op) {
return (AE_NO_MEMORY);
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Initialize the new op */
......@@ -410,7 +410,7 @@ acpi_ds_load2_begin_op (
op->common.node = node;
}
return (status);
return_ACPI_STATUS (status);
}
......@@ -444,7 +444,7 @@ acpi_ds_load2_end_op (
#endif
ACPI_FUNCTION_NAME ("Ds_load2_end_op");
ACPI_FUNCTION_TRACE ("Ds_load2_end_op");
op = walk_state->op;
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n",
......@@ -453,7 +453,7 @@ acpi_ds_load2_end_op (
/* Only interested in opcodes that have namespace objects */
if (!(walk_state->op_info->flags & AML_NSOBJECT)) {
return (AE_OK);
return_ACPI_STATUS (AE_OK);
}
if (op->common.aml_opcode == AML_SCOPE_OP) {
......@@ -479,13 +479,13 @@ acpi_ds_load2_end_op (
/* Pop the scope stack */
if (acpi_ns_opens_scope (object_type)) {
if (acpi_ns_opens_scope (object_type) && (op->common.aml_opcode != AML_INT_METHODCALL_OP)) {
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
acpi_ut_get_type_name (object_type), op));
status = acpi_ds_scope_stack_pop (walk_state);
if (ACPI_FAILURE (status)) {
return (status);
return_ACPI_STATUS (status);
}
}
......@@ -730,7 +730,7 @@ acpi_ds_load2_end_op (
walk_state->operands[0] = NULL;
walk_state->num_operands = 0;
return (status);
return_ACPI_STATUS (status);
}
/******************************************************************************
*
* Module Name: dswstate - Dispatcher parse tree walk management routines
* $Revision: 67 $
* $Revision: 68 $
*
*****************************************************************************/
......@@ -835,6 +835,8 @@ acpi_ds_create_walk_state (
walk_state->method_desc = mth_desc;
walk_state->thread = thread;
walk_state->parser_state.start_op = origin;
/* Init the method args/local */
#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
......@@ -883,6 +885,7 @@ acpi_ds_init_aml_walk (
{
acpi_status status;
acpi_parse_state *parser_state = &walk_state->parser_state;
acpi_parse_object *extra_op;
ACPI_FUNCTION_TRACE ("Ds_init_aml_walk");
......@@ -925,9 +928,23 @@ acpi_ds_init_aml_walk (
}
}
else {
/* Setup the current scope */
/*
* Setup the current scope.
* Find a Named Op that has a namespace node associated with it.
* search upwards from this Op. Current scope is the first
* Op with a namespace node.
*/
extra_op = parser_state->start_op;
while (extra_op && !extra_op->common.node) {
extra_op = extra_op->common.parent;
}
if (!extra_op) {
parser_state->start_node = NULL;
}
else {
parser_state->start_node = extra_op->common.node;
}
parser_state->start_node = parser_state->start_op->common.node;
if (parser_state->start_node) {
/* Push start scope on scope stack and make it current */
......
/******************************************************************************
*
* Module Name: evevent - Fixed and General Purpose Even handling and dispatch
* $Revision: 88 $
* $Revision: 90 $
*
*****************************************************************************/
......@@ -104,7 +104,7 @@ acpi_ev_handler_initialize (
acpi_status status;
ACPI_FUNCTION_TRACE ("Ev_initialize");
ACPI_FUNCTION_TRACE ("Ev_handler_initialize");
/* Install the SCI handler */
......
/******************************************************************************
*
* Module Name: evmisc - Miscellaneous event manager support functions
* $Revision: 53 $
* $Revision: 56 $
*
*****************************************************************************/
......@@ -442,11 +442,13 @@ acpi_ev_acquire_global_lock (
ACPI_FUNCTION_TRACE ("Ev_acquire_global_lock");
#ifndef ACPI_APPLICATION
/* Make sure that we actually have a global lock */
if (!acpi_gbl_global_lock_present) {
return_ACPI_STATUS (AE_NO_GLOBAL_LOCK);
}
#endif
/* One more thread wants the global lock */
......@@ -552,9 +554,56 @@ acpi_ev_release_global_lock (void)
void
acpi_ev_terminate (void)
{
NATIVE_UINT_MAX32 i;
acpi_status status;
ACPI_FUNCTION_TRACE ("Ev_terminate");
/*
* Disable all event-related functionality.
* In all cases, on error, print a message but obviously we don't abort.
*/
/*
* Disable all fixed events
*/
for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
status = acpi_disable_event(i, ACPI_EVENT_FIXED, 0);
if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Failed to disable fixed event %d.\n", i));
}
}
/*
* Disable all GPEs
*/
for (i = 0; i < acpi_gbl_gpe_number_max; i++) {
if (acpi_ev_get_gpe_number_index(i) != ACPI_GPE_INVALID) {
status = acpi_hw_disable_gpe(i);
if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Failed to disable GPE %d.\n", i));
}
}
}
/*
* Remove SCI handler
*/
status = acpi_ev_remove_sci_handler();
if (ACPI_FAILURE(status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unable to remove SCI handler.\n"));
}
/*
* Return to original mode if necessary
*/
if (acpi_gbl_original_mode == ACPI_SYS_MODE_LEGACY) {
status = acpi_disable ();
if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Acpi_disable failed.\n"));
}
}
/*
* Free global tables, etc.
......
/******************************************************************************
*
* Module Name: evregion - ACPI Address_space (Op_region) handler dispatch
* $Revision: 134 $
* $Revision: 135 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: evrgnini- ACPI Address_space (Op_region) init
* $Revision: 62 $
* $Revision: 63 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: evxface - External interfaces for ACPI events
* $Revision: 129 $
* $Revision: 130 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
* $Revision: 55 $
* $Revision: 57 $
*
*****************************************************************************/
......@@ -52,16 +52,14 @@ acpi_enable (void)
ACPI_FUNCTION_TRACE ("Acpi_enable");
/* Make sure we have ACPI tables */
/* Make sure we have the FADT*/
if (!acpi_gbl_DSDT) {
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No ACPI tables present!\n"));
if (!acpi_gbl_FADT) {
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No FADT information present!\n"));
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
acpi_gbl_original_mode = acpi_hw_get_mode ();
if (acpi_gbl_original_mode == ACPI_SYS_MODE_ACPI) {
if (acpi_hw_get_mode() == ACPI_SYS_MODE_ACPI) {
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Already in ACPI mode.\n"));
}
else {
......@@ -88,8 +86,7 @@ acpi_enable (void)
*
* RETURN: Status
*
* DESCRIPTION: Returns the system to original ACPI/legacy mode, and
* uninstalls the SCI interrupt handler.
* DESCRIPTION: Transfers the system into LEGACY mode.
*
******************************************************************************/
......@@ -101,20 +98,26 @@ acpi_disable (void)
ACPI_FUNCTION_TRACE ("Acpi_disable");
if (!acpi_gbl_FADT) {
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No FADT information present!\n"));
return_ACPI_STATUS (AE_NO_ACPI_TABLES);
}
if (acpi_hw_get_mode () != acpi_gbl_original_mode) {
/* Restore original mode */
if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) {
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Already in LEGACY mode.\n"));
}
else {
/* Transition to LEGACY mode */
status = acpi_hw_set_mode (ACPI_SYS_MODE_LEGACY);
status = acpi_hw_set_mode (acpi_gbl_original_mode);
if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unable to transition to original mode"));
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not transition to LEGACY mode."));
return_ACPI_STATUS (status);
}
}
/* Unload the SCI interrupt handler */
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Transition to LEGACY mode successful\n"));
}
status = acpi_ev_remove_sci_handler ();
return_ACPI_STATUS (status);
}
......
/******************************************************************************
*
* Module Name: exdump - Interpreter debug output routines
* $Revision: 157 $
* $Revision: 159 $
*
*****************************************************************************/
......@@ -38,7 +38,7 @@
* The following routines are used for debug output only
*/
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*****************************************************************************
*
......
/******************************************************************************
*
* Module Name: exfldio - Aml Field I/O
* $Revision: 87 $
* $Revision: 88 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes
* $Revision: 107 $
* $Revision: 108 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exoparg1 - AML execution - opcodes with 1 argument
* $Revision: 141 $
* $Revision: 142 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: exoparg2 - AML execution - opcodes with 2 arguments
* $Revision: 109 $
* $Revision: 110 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exprep - ACPI AML (p-code) execution - field prep utilities
* $Revision: 118 $
* $Revision: 119 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exregion - ACPI default Op_region (address space) handlers
* $Revision: 79 $
* $Revision: 80 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exresop - AML Interpreter operand/object resolution
* $Revision: 54 $
* $Revision: 55 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exstore - AML Interpreter object store support
* $Revision: 168 $
* $Revision: 169 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: exutils - interpreter/scanner utilities
* $Revision: 102 $
* $Revision: 103 $
*
*****************************************************************************/
......@@ -261,7 +261,8 @@ acpi_ex_release_global_lock (
if (ACPI_FAILURE (status)) {
/* Report the error, but there isn't much else we can do */
ACPI_REPORT_ERROR (("Could not release ACPI Global Lock\n"));
ACPI_REPORT_ERROR (("Could not release ACPI Global Lock, %s\n",
acpi_format_exception (status)));
}
}
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface
* $Revision: 58 $
* $Revision: 60 $
*
*****************************************************************************/
......@@ -96,6 +96,27 @@ acpi_hw_set_mode (
ACPI_FUNCTION_TRACE ("Hw_set_mode");
/*
* ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
* system does not support mode transition.
*/
if (!acpi_gbl_FADT->smi_cmd) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No SMI_CMD in FADT, mode transition failed.\n"));
return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
}
/*
* ACPI 2.0 clarified the meaning of ACPI_ENABLE and ACPI_DISABLE
* in FADT: If it is zero, enabling or disabling is not supported.
* As old systems may have used zero for mode transition,
* we make sure both the numbers are zero to determine these
* transitions are not supported.
*/
if (!acpi_gbl_FADT->acpi_enable && !acpi_gbl_FADT->acpi_disable) {
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "No mode transition supported in this system.\n"));
return_ACPI_STATUS (AE_OK);
}
switch (mode) {
case ACPI_SYS_MODE_ACPI:
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: hwgpe - Low level GPE enable/disable/clear functions
* $Revision: 41 $
* $Revision: 42 $
*
*****************************************************************************/
......
......@@ -3,7 +3,7 @@
*
* Module Name: hwregs - Read/write access functions for the various ACPI
* control and status registers.
* $Revision: 133 $
* $Revision: 134 $
*
******************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
* $Revision: 45 $
* $Revision: 46 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Name: acconfig.h - Global configuration constants
* $Revision: 107 $
* $Revision: 109 $
*
*****************************************************************************/
......@@ -34,7 +34,7 @@
*****************************************************************************/
/*
* ACPI_DEBUG - This switch enables all the debug facilities of the
* ACPI_DEBUG_OUTPUT - This switch enables all the debug facilities of the
* ACPI subsystem. This includes the DEBUG_PRINT output
* statements. When disabled, all DEBUG_PRINT
* statements are compiled out.
......@@ -54,7 +54,7 @@
/* Version string */
#define ACPI_CA_VERSION 0x20020725
#define ACPI_CA_VERSION 0x20020815
/* Version of ACPI supported */
......
/******************************************************************************
*
* Name: acdisasm.h - AML disassembler
* $Revision: 2 $
* $Revision: 3 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Name: acglobal.h - Declarations for global variables
* $Revision: 128 $
* $Revision: 130 $
*
*****************************************************************************/
......@@ -152,8 +152,12 @@ extern const NATIVE_CHAR *acpi_gbl_region_types[ACPI_NUM_PREDEFINE
****************************************************************************/
#define NUM_NS_TYPES INTERNAL_TYPE_INVALID+1
#define NUM_PREDEFINED_NAMES 9
#if defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
#define NUM_PREDEFINED_NAMES 10
#else
#define NUM_PREDEFINED_NAMES 9
#endif
ACPI_EXTERN acpi_namespace_node acpi_gbl_root_node_struct;
ACPI_EXTERN acpi_namespace_node *acpi_gbl_root_node;
......@@ -161,7 +165,7 @@ ACPI_EXTERN acpi_namespace_node *acpi_gbl_root_node;
extern const u8 acpi_gbl_ns_properties[NUM_NS_TYPES];
extern const acpi_predefined_names acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES];
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
ACPI_EXTERN u32 acpi_gbl_current_node_count;
ACPI_EXTERN u32 acpi_gbl_current_node_size;
ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
......@@ -245,7 +249,7 @@ ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
#endif
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
extern u8 acpi_gbl_method_executing;
extern u8 acpi_gbl_db_terminate_threads;
......@@ -287,7 +291,7 @@ ACPI_EXTERN u32 acpi_gbl_size_of_method_trees;
ACPI_EXTERN u32 acpi_gbl_size_of_node_entries;
ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects;
#endif /* ENABLE_DEBUGGER */
#endif /* ACPI_DEBUGGER */
#endif /* __ACGLOBAL_H__ */
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
* $Revision: 173 $
* $Revision: 175 $
*
*****************************************************************************/
......@@ -73,7 +73,7 @@ typedef u32 ACPI_MUTEX_HANDLE;
#define NUM_MTX MAX_MTX+1
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
#ifdef DEFINE_ACPI_GLOBALS
/* Names for the mutexes used in the subsystem */
......@@ -567,7 +567,7 @@ acpi_status (*ACPI_EXECUTE_OP) (
*/
typedef struct acpi_opcode_info
{
#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG)
#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
NATIVE_CHAR *name; /* Opcode name (disassembler/debug only) */
#endif
u32 parse_args; /* Grammar/Parse time arguments */
......
/******************************************************************************
*
* Name: acmacros.h - C macros for the entire subsystem.
* $Revision: 126 $
* $Revision: 128 $
*
*****************************************************************************/
......@@ -287,7 +287,7 @@
/*
* Macros for the master AML opcode table
*/
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG)
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
#define ACPI_OP(name,Pargs,Iargs,obj_type,class,type,flags) {name,Pargs,Iargs,flags,obj_type,class,type}
#else
#define ACPI_OP(name,Pargs,Iargs,obj_type,class,type,flags) {Pargs,Iargs,flags,obj_type,class,type}
......@@ -353,11 +353,11 @@
/*
* Error reporting. These versions add callers module and line#. Since
* _THIS_MODULE gets compiled out when ACPI_DEBUG isn't defined, only
* _THIS_MODULE gets compiled out when ACPI_DEBUG_OUTPUT isn't defined, only
* use it in debug mode.
*/
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
#define ACPI_REPORT_INFO(fp) {acpi_ut_report_info(_THIS_MODULE,__LINE__,_COMPONENT); \
acpi_os_printf ACPI_PARAM_LIST(fp);}
......@@ -390,7 +390,7 @@
* Debug macros that are conditionally compiled
*/
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
#define ACPI_MODULE_NAME(name) static char *_THIS_MODULE = name;
......@@ -525,9 +525,9 @@
/*
* Some code only gets executed when the debugger is built in.
* Note that this is entirely independent of whether the
* DEBUG_PRINT stuff (set by ACPI_DEBUG) is on, or not.
* DEBUG_PRINT stuff (set by ACPI_DEBUG_OUTPUT) is on, or not.
*/
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
#define ACPI_DEBUGGER_EXEC(a) a
#else
#define ACPI_DEBUGGER_EXEC(a)
......@@ -536,7 +536,7 @@
/*
* For 16-bit code, we want to shrink some things even though
* we are using ACPI_DEBUG to get the debug output
* we are using ACPI_DEBUG_OUTPUT to get the debug output
*/
#if ACPI_MACHINE_WIDTH == 16
#undef ACPI_DEBUG_ONLY_MEMBERS
......@@ -545,7 +545,7 @@
#endif
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
/*
* 1) Set name to blanks
* 2) Copy the object name
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: acobject.h - Definition of acpi_operand_object (Internal object only)
* $Revision: 112 $
* $Revision: 113 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Name: acoutput.h -- debug output
* $Revision: 87 $
* $Revision: 90 $
*
*****************************************************************************/
......@@ -43,18 +43,20 @@
#define ACPI_DISPATCHER 0x00000040
#define ACPI_EXECUTER 0x00000080
#define ACPI_RESOURCES 0x00000100
#define ACPI_DEBUGGER 0x00000200
#define ACPI_CA_DEBUGGER 0x00000200
#define ACPI_OS_SERVICES 0x00000400
#define ACPI_ALL_COMPONENTS 0x00000FFF
#define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS)
#define ACPI_CA_DISASSEMBLER 0x00000800
/* Component IDs for ACPI tools and utilities */
#define ACPI_COMPILER 0x00001000
#define ACPI_TOOLS 0x00002000
#define ACPI_ALL_COMPONENTS 0x00003FFF
#define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS)
/* Component IDs reserved for ACPI drivers */
#define ACPI_ALL_DRIVERS 0xFFFF0000
......@@ -94,7 +96,8 @@
#define ACPI_LV_ALLOCATIONS 0x00100000
#define ACPI_LV_FUNCTIONS 0x00200000
#define ACPI_LV_VERBOSITY2 0x00300000 | ACPI_LV_VERBOSITY1
#define ACPI_LV_OPTIMIZATIONS 0x00400000
#define ACPI_LV_VERBOSITY2 0x00700000 | ACPI_LV_VERBOSITY1
#define ACPI_LV_ALL ACPI_LV_VERBOSITY2
/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
......@@ -144,6 +147,7 @@
#define ACPI_DB_BFIELD ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD)
#define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
#define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
#define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
#define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
#define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
#define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
......
/******************************************************************************
*
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
* $Revision: 60 $
* $Revision: 61 $
*
*****************************************************************************/
......@@ -86,7 +86,7 @@ acpi_ps_get_next_simple_arg (
u32 arg_type,
acpi_parse_object *arg);
void
acpi_status
acpi_ps_get_next_namepath (
acpi_parse_state *parser_state,
acpi_parse_object *arg,
......@@ -97,11 +97,12 @@ acpi_parse_object *
acpi_ps_get_next_field (
acpi_parse_state *parser_state);
acpi_parse_object *
acpi_status
acpi_ps_get_next_arg (
acpi_parse_state *parser_state,
u32 arg_type,
u32 *arg_count);
u32 *arg_count,
acpi_parse_object **return_arg);
/* psfind */
......
/******************************************************************************
*
* Name: acresrc.h - Resource Manager function prototypes
* $Revision: 33 $
* $Revision: 34 $
*
*****************************************************************************/
......
......@@ -139,8 +139,8 @@ typedef struct
u16 plvl3_lat; /* Worst case HW latency to enter/exit C3 state */
u16 flush_size; /* Number of flush strides that need to be read */
u16 flush_stride; /* Processor's memory cache line width, in bytes */
u8 duty_offset; /* Processor_s duty cycle index in processor's P_CNT reg*/
u8 duty_width; /* Processor_s duty cycle value bit width in P_CNT register.*/
u8 duty_offset; /* Processors duty cycle index in processor's P_CNT reg*/
u8 duty_width; /* Processors duty cycle value bit width in P_CNT register.*/
u8 day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */
u8 mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */
u8 century; /* Index to century in RTC CMOS RAM */
......
/******************************************************************************
*
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
* $Revision: 142 $
* $Revision: 143 $
*
*****************************************************************************/
......@@ -94,7 +94,7 @@ acpi_ut_validate_fadt (
* Ut_global - Global data structures and procedures
*/
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
NATIVE_CHAR *
acpi_ut_get_mutex_name (
......@@ -686,7 +686,7 @@ void
acpi_ut_set_integer_width (
u8 revision);
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
void
acpi_ut_display_init_pathname (
acpi_handle obj_handle,
......
......@@ -3,7 +3,7 @@
* Name: amlcode.h - Definitions for AML, as included in "definition blocks"
* Declarations and definitions contained herein are derived
* directly from the ACPI specification.
* $Revision: 69 $
* $Revision: 70 $
*
*****************************************************************************/
......
......@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: amlresrc.h - AML resource descriptors
* $Revision: 20 $
* $Revision: 22 $
*
*****************************************************************************/
......@@ -328,172 +328,5 @@ typedef union asl_resource_desc
} ASL_RESOURCE_DESC;
#define NEXT_RESOURCE_DESC(a,b) (ASL_RESOURCE_DESC *) (((char *) (a)) + sizeof(b))
#define DEFAULT_RESOURCE_DESC_SIZE (sizeof (ASL_RESOURCE_DESC) + sizeof (ASL_END_TAG_DESC))
/*
* Resource utilities
*/
ASL_RESOURCE_NODE *
rs_allocate_resource_node (
u32 size);
void
rs_create_bit_field (
acpi_parse_object *op,
char *name,
u32 byte_offset,
u32 bit_offset);
void
rs_create_byte_field (
acpi_parse_object *op,
char *name,
u32 byte_offset);
void
rs_set_flag_bits (
u8 *flags,
acpi_parse_object *op,
u8 position,
u8 default);
acpi_parse_object *
rs_complete_node_and_get_next (
acpi_parse_object *op);
ASL_RESOURCE_NODE *
rs_do_one_resource_descriptor (
acpi_parse_object *descriptor_type_op,
u32 current_byte_offset);
u32
rs_link_descriptor_chain (
ASL_RESOURCE_NODE **previous_rnode,
ASL_RESOURCE_NODE *rnode);
/*
* Small descriptors
*/
ASL_RESOURCE_NODE *
rs_do_dma_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_end_dependent_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_fixed_io_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_interrupt_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_io_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_irq_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_irq_no_flags_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_memory24_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_memory32_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_memory32_fixed_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_start_dependent_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_start_dependent_no_pri_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_vendor_small_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
/*
* Large descriptors
*/
u32
rs_get_string_data_length (
acpi_parse_object *initializer_op);
ASL_RESOURCE_NODE *
rs_do_dword_io_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_dword_memory_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_qword_io_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_qword_memory_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_word_io_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_word_bus_number_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_vendor_large_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
ASL_RESOURCE_NODE *
rs_do_general_register_descriptor (
acpi_parse_object *op,
u32 current_byte_offset);
#endif
/******************************************************************************
*
* Name: acenv.h - Generation environment specific items
* $Revision: 99 $
* $Revision: 101 $
*
*****************************************************************************/
......@@ -33,7 +33,7 @@
#ifdef _ACPI_DUMP_APP
#ifndef MSDOS
#define ACPI_DEBUG
#define ACPI_DEBUG_OUTPUT
#endif
#define ACPI_APPLICATION
#define ACPI_DISASSEMBLER
......@@ -44,15 +44,15 @@
#ifdef _ACPI_EXEC_APP
#undef DEBUGGER_THREADING
#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
#define ACPI_DEBUG
#define ACPI_DEBUG_OUTPUT
#define ACPI_APPLICATION
#define ENABLE_DEBUGGER
#define ACPI_DEBUGGER
#define ACPI_DISASSEMBLER
#define ACPI_USE_SYSTEM_CLIBRARY
#endif
#ifdef _ACPI_ASL_COMPILER
#define ACPI_DEBUG
#define ACPI_DEBUG_OUTPUT
#define ACPI_APPLICATION
#define ACPI_DISASSEMBLER
#define ACPI_CONSTANT_EVAL_ONLY
......@@ -149,7 +149,7 @@
* 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
#ifdef ACPI_DEBUG_OUTPUT
#if ACPI_MACHINE_WIDTH != 16
#define ACPI_DBG_TRACK_ALLOCATIONS
#endif
......
/*******************************************************************************
*
* Module Name: nsaccess - Top-level functions for accessing ACPI namespace
* $Revision: 156 $
* $Revision: 161 $
*
******************************************************************************/
......@@ -117,6 +117,19 @@ acpi_ns_root_initialize (void)
* used for initial values are implemented here.
*/
switch (init_val->type) {
case ACPI_TYPE_METHOD:
obj_desc->method.param_count =
(u8) ACPI_STRTOUL (init_val->val, NULL, 10);
obj_desc->common.flags |= AOPOBJ_DATA_VALID;
#if defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
/* Compiler cheats by putting parameter count in the Owner_iD */
new_node->owner_id = obj_desc->method.param_count;
#endif
break;
case ACPI_TYPE_INTEGER:
obj_desc->integer.value =
......@@ -228,6 +241,7 @@ acpi_ns_lookup (
acpi_namespace_node **return_node)
{
acpi_status status;
NATIVE_CHAR *path = pathname;
acpi_namespace_node *prefix_node;
acpi_namespace_node *current_node = NULL;
acpi_namespace_node *this_node = NULL;
......@@ -235,7 +249,9 @@ acpi_ns_lookup (
acpi_name simple_name;
acpi_object_type type_to_check_for;
acpi_object_type this_search_type;
u32 local_flags = flags & ~ACPI_NS_ERROR_IF_FOUND;
u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
u32 local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND |
ACPI_NS_SEARCH_PARENT);
ACPI_FUNCTION_TRACE ("Ns_lookup");
......@@ -266,6 +282,21 @@ acpi_ns_lookup (
}
else {
prefix_node = scope_info->scope.node;
if (ACPI_GET_DESCRIPTOR_TYPE (prefix_node) != ACPI_DESC_TYPE_NAMED) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "[%p] Not a namespace node\n",
prefix_node));
return_ACPI_STATUS (AE_AML_INTERNAL);
}
/*
* This node might not be a actual "scope" node (such as a
* Device/Method, etc.) It could be a Package or other object node.
* Backup up the tree to find the containing scope node.
*/
while (!acpi_ns_opens_scope (prefix_node->type) &&
prefix_node->type != ACPI_TYPE_ANY) {
prefix_node = acpi_ns_get_parent_node (prefix_node);
}
}
/*
......@@ -297,7 +328,7 @@ acpi_ns_lookup (
num_segments = 0;
this_node = acpi_gbl_root_node;
pathname = "";
path = "";
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Null Pathname (Zero segments), Flags=%X\n", flags));
......@@ -316,23 +347,24 @@ acpi_ns_lookup (
* Parent Prefixes (in which case the name's scope is relative
* to the current scope).
*/
if (*pathname == (u8) AML_ROOT_PREFIX) {
if (*path == (u8) AML_ROOT_PREFIX) {
/* Pathname is fully qualified, start from the root */
this_node = acpi_gbl_root_node;
search_parent_flag = ACPI_NS_NO_UPSEARCH;
/* Point to name segment part */
pathname++;
path++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching from root [%p]\n",
this_node));
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Path is absolute from root [%p]\n", this_node));
}
else {
/* Pathname is relative to current scope, start there */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Searching relative to pfx scope [%p]\n",
"Searching relative to prefix scope [%p]\n",
prefix_node));
/*
......@@ -340,12 +372,15 @@ acpi_ns_lookup (
* the parent node for each prefix instance.
*/
this_node = prefix_node;
while (*pathname == (u8) AML_PARENT_PREFIX) {
while (*path == (u8) AML_PARENT_PREFIX) {
/* Name is fully qualified, no search rules apply */
search_parent_flag = ACPI_NS_NO_UPSEARCH;
/*
* Point past this prefix to the name segment
* part or the next Parent Prefix
*/
pathname++;
path++;
/* Backup to the parent node */
......@@ -358,6 +393,11 @@ acpi_ns_lookup (
return_ACPI_STATUS (AE_NOT_FOUND);
}
}
if (search_parent_flag == ACPI_NS_NO_UPSEARCH) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Path is absolute with one or more carats\n"));
}
}
/*
......@@ -373,7 +413,7 @@ acpi_ns_lookup (
* Examine the name prefix opcode, if any, to determine the number of
* segments.
*/
switch (*pathname) {
switch (*path) {
case 0:
/*
* Null name after a root or parent prefixes. We already
......@@ -387,10 +427,14 @@ acpi_ns_lookup (
case AML_DUAL_NAME_PREFIX:
/* More than one Name_seg, search rules do not apply */
search_parent_flag = ACPI_NS_NO_UPSEARCH;
/* Two segments, point to first name segment */
num_segments = 2;
pathname++;
path++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Dual Pathname (2 segments, Flags=%X)\n", flags));
......@@ -398,11 +442,15 @@ acpi_ns_lookup (
case AML_MULTI_NAME_PREFIX_OP:
/* More than one Name_seg, search rules do not apply */
search_parent_flag = ACPI_NS_NO_UPSEARCH;
/* Extract segment count, point to first name segment */
pathname++;
num_segments = (u32) (u8) *pathname;
pathname++;
path++;
num_segments = (u32) (u8) *path;
path++;
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Multi Pathname (%d Segments, Flags=%X) \n",
......@@ -421,33 +469,49 @@ acpi_ns_lookup (
break;
}
ACPI_DEBUG_EXEC (acpi_ns_print_pathname (num_segments, pathname));
ACPI_DEBUG_EXEC (acpi_ns_print_pathname (num_segments, path));
}
/*
* Search namespace for each segment of the name. Loop through and
* verify/add each name segment.
*/
current_node = this_node;
while (num_segments && current_node) {
/*
* Search for the current name segment under the current
* named object. The Type is significant only at the last name
* verify (or add to the namespace) each name segment.
*
* The object type is significant only at the last name
* segment. (We don't care about the types along the path, only
* the type of the final target object.)
*/
this_search_type = ACPI_TYPE_ANY;
current_node = this_node;
while (num_segments && current_node) {
num_segments--;
if (!num_segments) {
/*
* This is the last segment, enable typechecking
*/
this_search_type = type;
local_flags = flags;
/*
* Only allow automatic parent search (search rules) if the caller
* requested it AND we have a single, non-fully-qualified Name_seg
*/
if ((search_parent_flag != ACPI_NS_NO_UPSEARCH) &&
(flags & ACPI_NS_SEARCH_PARENT)) {
local_flags |= ACPI_NS_SEARCH_PARENT;
}
/* Set error flag according to caller */
if (flags & ACPI_NS_ERROR_IF_FOUND) {
local_flags |= ACPI_NS_ERROR_IF_FOUND;
}
}
/* Extract one ACPI name from the front of the pathname */
ACPI_MOVE_UNALIGNED32_TO_32 (&simple_name, pathname);
ACPI_MOVE_UNALIGNED32_TO_32 (&simple_name, path);
/* Try to find the ACPI name */
/* Try to find the single (4 character) ACPI name */
status = acpi_ns_search_and_enter (simple_name, walk_state, current_node,
interpreter_mode, this_search_type, local_flags, &this_node);
......@@ -457,7 +521,8 @@ acpi_ns_lookup (
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Name [%4.4s] not found in scope [%4.4s] %p\n",
(char *) &simple_name, (char *) &current_node->name, current_node));
(char *) &simple_name, (char *) &current_node->name,
current_node));
}
return_ACPI_STATUS (status);
......@@ -504,7 +569,7 @@ acpi_ns_lookup (
/* Point to next name segment and make this node current */
pathname += ACPI_NAME_SIZE;
path += ACPI_NAME_SIZE;
current_node = this_node;
}
......
/******************************************************************************
*
* Module Name: nsdump - table dumping routines for debug
* $Revision: 137 $
* $Revision: 139 $
*
*****************************************************************************/
......@@ -32,7 +32,7 @@
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("nsdump")
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*******************************************************************************
......
/******************************************************************************
*
* Module Name: nsdump - table dumping routines for debug
* $Revision: 1 $
* $Revision: 3 $
*
*****************************************************************************/
......@@ -33,7 +33,7 @@
ACPI_MODULE_NAME ("nsdumpdv")
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*******************************************************************************
*
......
......@@ -2,7 +2,7 @@
*
* Module Name: nseval - Object evaluation interfaces -- includes control
* method lookup and execution.
* $Revision: 117 $
* $Revision: 118 $
*
******************************************************************************/
......
/******************************************************************************
*
* Module Name: nsinit - namespace initialization
* $Revision: 47 $
* $Revision: 49 $
*
*****************************************************************************/
......@@ -369,7 +369,7 @@ acpi_ns_init_one_device (
if (status != AE_NOT_FOUND) {
/* Ignore error and move on to next device */
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
NATIVE_CHAR *scope_name = acpi_ns_get_external_pathname (obj_handle);
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "%s._INI failed: %s\n",
......
/******************************************************************************
*
* Module Name: nsload - namespace loading/expanding/contracting procedures
* $Revision: 57 $
* $Revision: 58 $
*
*****************************************************************************/
......
/*******************************************************************************
*
* Module Name: nsnames - Name manipulation and search
* $Revision: 78 $
* $Revision: 79 $
*
******************************************************************************/
......@@ -103,7 +103,7 @@ acpi_ns_build_external_path (
}
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
/*******************************************************************************
*
* FUNCTION: Acpi_ns_get_external_pathname
......
/*******************************************************************************
*
* Module Name: nssearch - Namespace search
* $Revision: 86 $
* $Revision: 89 $
*
******************************************************************************/
......@@ -71,7 +71,7 @@ acpi_ns_search_node (
ACPI_FUNCTION_TRACE ("Ns_search_node");
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
if (ACPI_LV_NAMES & acpi_dbg_level) {
NATIVE_CHAR *scope_name;
......@@ -290,10 +290,10 @@ acpi_ns_search_and_enter (
/* Parameter validation */
if (!node || !target_name || !return_node) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null param- Table %p Name %X Return %p\n",
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null param: Node %p Name %X Return_node %p\n",
node, target_name, return_node));
ACPI_REPORT_ERROR (("Ns_search_and_enter: bad (null) parameter\n"));
ACPI_REPORT_ERROR (("Ns_search_and_enter: Null parameter\n"));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
......
......@@ -2,7 +2,7 @@
*
* Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
* parents and siblings and Scope manipulation
* $Revision: 110 $
* $Revision: 112 $
*
*****************************************************************************/
......@@ -434,9 +434,12 @@ acpi_ns_externalize_name (
case '^':
for (i = 0; i < internal_name_length; i++) {
if (internal_name[i] != '^') {
if (internal_name[i] == '^') {
prefix_length = i + 1;
}
else {
break;
}
}
if (i == internal_name_length) {
......@@ -834,7 +837,7 @@ acpi_ns_find_parent_name (
}
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*******************************************************************************
*
......@@ -868,7 +871,7 @@ acpi_ns_exist_downstream_sibling (
return (FALSE);
}
#endif /* ACPI_DEBUG */
#endif /* ACPI_DEBUG_OUTPUT */
/*******************************************************************************
......
......@@ -2,7 +2,7 @@
*
* Module Name: nsxfeval - Public interfaces to the ACPI subsystem
* ACPI Object evaluation interfaces
* $Revision: 1 $
* $Revision: 2 $
*
******************************************************************************/
......
/******************************************************************************
*
* Module Name: psargs - Parse AML opcode arguments
* $Revision: 62 $
* $Revision: 64 $
*
*****************************************************************************/
......@@ -162,7 +162,7 @@ acpi_ps_get_next_namestring (
/* Handle multiple prefix characters */
while (acpi_ps_is_prefix_char (ACPI_GET8 (end))) {
/* include prefix '\\' or '^' */
/* Include prefix '\\' or '^' */
end++;
}
......@@ -218,20 +218,17 @@ acpi_ps_get_next_namestring (
* Method_call - Whether the namepath can be the start
* of a method call
*
* RETURN: None
* RETURN: Status
*
* DESCRIPTION: Get next name (if method call, push appropriate # args). Names
* are looked up in either the parsed or internal namespace to
* determine if the name represents a control method. If a method
* DESCRIPTION: Get next name (if method call, return # of required args).
* Names are looked up in the internal namespace to determine
* if the name represents a control method. If a method
* is found, the number of arguments to the method is returned.
* This information is critical for parsing to continue correctly.
*
******************************************************************************/
#ifdef PARSER_ONLY
void
acpi_status
acpi_ps_get_next_namepath (
acpi_parse_state *parser_state,
acpi_parse_object *arg,
......@@ -240,98 +237,7 @@ acpi_ps_get_next_namepath (
{
NATIVE_CHAR *path;
acpi_parse_object *name_op;
acpi_parse_object *op;
acpi_parse_object *count;
ACPI_FUNCTION_TRACE ("Ps_get_next_namepath");
path = acpi_ps_get_next_namestring (parser_state);
if (!path || !method_call) {
/* Null name case, create a null namepath object */
acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
arg->common.value.name = path;
return_VOID;
}
if (acpi_gbl_parsed_namespace_root) {
/*
* Lookup the name in the parsed namespace
*/
op = NULL;
if (method_call) {
op = acpi_ps_find (acpi_ps_get_parent_scope (parser_state),
path, AML_METHOD_OP, 0);
}
if (op) {
if (op->common.aml_opcode == AML_METHOD_OP) {
/*
* The name refers to a control method, so this namepath is a
* method invocation. We need to 1) Get the number of arguments
* associated with this method, and 2) Change the NAMEPATH
* object into a METHODCALL object.
*/
count = acpi_ps_get_arg (op, 0);
if (count && count->common.aml_opcode == AML_BYTE_OP) {
name_op = acpi_ps_alloc_op (AML_INT_NAMEPATH_OP);
if (name_op) {
/* Change arg into a METHOD CALL and attach the name */
acpi_ps_init_op (arg, AML_INT_METHODCALL_OP);
name_op->common.value.name = path;
/* Point METHODCALL/NAME to the METHOD Node */
name_op->common.node = (acpi_namespace_node *) op;
acpi_ps_append_arg (arg, name_op);
*arg_count = (u32) count->common.value.integer &
METHOD_FLAGS_ARG_COUNT;
}
}
return_VOID;
}
/*
* Else this is normal named object reference.
* Just init the NAMEPATH object with the pathname.
* (See code below)
*/
}
}
/*
* Either we didn't find the object in the namespace, or the object is
* something other than a control method. Just initialize the Op with the
* pathname
*/
acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
arg->common.value.name = path;
return_VOID;
}
#else
void
acpi_ps_get_next_namepath (
acpi_parse_state *parser_state,
acpi_parse_object *arg,
u32 *arg_count,
u8 method_call)
{
NATIVE_CHAR *path;
acpi_parse_object *name_op;
acpi_status status;
acpi_status status = AE_OK;
acpi_operand_object *method_desc;
acpi_namespace_node *node;
acpi_generic_state scope_info;
......@@ -341,14 +247,10 @@ acpi_ps_get_next_namepath (
path = acpi_ps_get_next_namestring (parser_state);
if (!path || !method_call) {
/* Null name case, create a null namepath object */
acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
arg->common.value.name = path;
return_VOID;
}
/* Null path case is allowed */
if (path) {
/*
* Lookup the name in the internal namespace
*/
......@@ -367,7 +269,7 @@ acpi_ps_get_next_namepath (
status = acpi_ns_lookup (&scope_info, path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL,
&node);
if (ACPI_SUCCESS (status)) {
if (ACPI_SUCCESS (status) && method_call) {
if (node->type == ACPI_TYPE_METHOD) {
method_desc = acpi_ns_get_attached_object (node);
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p Desc %p Path=%p\n",
......@@ -375,7 +277,7 @@ acpi_ps_get_next_namepath (
name_op = acpi_ps_alloc_op (AML_INT_NAMEPATH_OP);
if (!name_op) {
return_VOID;
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Change arg into a METHOD CALL and attach name to it */
......@@ -392,14 +294,14 @@ acpi_ps_get_next_namepath (
if (!method_desc) {
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p has no attached object\n",
node));
return_VOID;
return_ACPI_STATUS (AE_AML_INTERNAL);
}
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Control Method - %p Args %X\n",
node, method_desc->method.param_count));
*arg_count = method_desc->method.param_count;
return_VOID;
return_ACPI_STATUS (AE_OK);
}
/*
......@@ -408,20 +310,18 @@ acpi_ps_get_next_namepath (
* (See code below)
*/
}
}
/*
* Either we didn't find the object in the namespace, or the object is
* something other than a control method. Just initialize the Op with the
* pathname.
* Regardless of success/failure above,
* Just initialize the Op with the pathname.
*/
acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
arg->common.value.name = path;
return_VOID;
return_ACPI_STATUS (status);
}
#endif
/*******************************************************************************
*
......@@ -630,23 +530,25 @@ acpi_ps_get_next_field (
* Arg_count - If the argument points to a control method
* the method's argument is returned here.
*
* RETURN: An op object containing the next argument.
* RETURN: Status, and an op object containing the next argument.
*
* DESCRIPTION: Get next argument (including complex list arguments that require
* pushing the parser stack)
*
******************************************************************************/
acpi_parse_object *
acpi_status
acpi_ps_get_next_arg (
acpi_parse_state *parser_state,
u32 arg_type,
u32 *arg_count)
u32 *arg_count,
acpi_parse_object **return_arg)
{
acpi_parse_object *arg = NULL;
acpi_parse_object *prev = NULL;
acpi_parse_object *field;
u32 subop;
acpi_status status = AE_OK;
ACPI_FUNCTION_TRACE_PTR ("Ps_get_next_arg", parser_state);
......@@ -663,15 +565,16 @@ acpi_ps_get_next_arg (
/* constants, strings, and namestrings are all the same size */
arg = acpi_ps_alloc_op (AML_BYTE_OP);
if (arg) {
acpi_ps_get_next_simple_arg (parser_state, arg_type, arg);
if (!arg) {
return_ACPI_STATUS (AE_NO_MEMORY);
}
acpi_ps_get_next_simple_arg (parser_state, arg_type, arg);
break;
case ARGP_PKGLENGTH:
/* package length, nothing returned */
/* Package length, nothing returned */
parser_state->pkg_end = acpi_ps_get_next_package_end (parser_state);
break;
......@@ -680,18 +583,17 @@ acpi_ps_get_next_arg (
case ARGP_FIELDLIST:
if (parser_state->aml < parser_state->pkg_end) {
/* non-empty list */
/* Non-empty list */
while (parser_state->aml < parser_state->pkg_end) {
field = acpi_ps_get_next_field (parser_state);
if (!field) {
break;
return_ACPI_STATUS (AE_NO_MEMORY);
}
if (prev) {
prev->common.next = field;
}
else {
arg = field;
}
......@@ -699,7 +601,7 @@ acpi_ps_get_next_arg (
prev = field;
}
/* skip to End of byte data */
/* Skip to End of byte data */
parser_state->aml = parser_state->pkg_end;
}
......@@ -709,17 +611,19 @@ acpi_ps_get_next_arg (
case ARGP_BYTELIST:
if (parser_state->aml < parser_state->pkg_end) {
/* non-empty list */
/* Non-empty list */
arg = acpi_ps_alloc_op (AML_INT_BYTELIST_OP);
if (arg) {
/* fill in bytelist data */
if (!arg) {
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Fill in bytelist data */
arg->common.value.size = ACPI_PTR_DIFF (parser_state->pkg_end, parser_state->aml);
arg->named.data = parser_state->aml;
}
/* skip to End of byte data */
/* Skip to End of byte data */
parser_state->aml = parser_state->pkg_end;
}
......@@ -728,7 +632,8 @@ acpi_ps_get_next_arg (
case ARGP_TARGET:
case ARGP_SUPERNAME:
case ARGP_SIMPLENAME: {
case ARGP_SIMPLENAME:
subop = acpi_ps_peek_opcode (parser_state);
if (subop == 0 ||
acpi_ps_is_leading_char (subop) ||
......@@ -736,17 +641,17 @@ acpi_ps_get_next_arg (
/* Null_name or Name_string */
arg = acpi_ps_alloc_op (AML_INT_NAMEPATH_OP);
if (arg) {
acpi_ps_get_next_namepath (parser_state, arg, arg_count, 0);
}
if (!arg) {
return_ACPI_STATUS (AE_NO_MEMORY);
}
status = acpi_ps_get_next_namepath (parser_state, arg, arg_count, 0);
}
else {
/* single complex argument, nothing returned */
*arg_count = 1;
}
}
break;
......@@ -770,10 +675,14 @@ acpi_ps_get_next_arg (
}
break;
default:
ACPI_REPORT_ERROR (("Invalid Arg_type: %X\n", arg_type));
status = AE_AML_OPERAND_TYPE;
break;
}
return_PTR (arg);
*return_arg = arg;
return_ACPI_STATUS (status);
}
/******************************************************************************
*
* Module Name: psopcode - Parser/Interpreter opcode information table
* $Revision: 71 $
* $Revision: 72 $
*
*****************************************************************************/
......@@ -558,17 +558,17 @@ const acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
/* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
/* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
/* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
/* 63 */ ACPI_OP ("[NamePath]", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ),
/* 64 */ ACPI_OP ("[MethodCall]", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
/* 65 */ ACPI_OP ("[ByteList]", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 66 */ ACPI_OP ("[ReservedField]", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 67 */ ACPI_OP ("[NamedField]", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 68 */ ACPI_OP ("[AccessField]", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 69 */ ACPI_OP ("[StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 6A */ ACPI_OP ("[Return Value]", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL),
/* 6B */ ACPI_OP ("UNKNOWN_OP!", ARG_NONE, ARG_NONE, INTERNAL_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6C */ ACPI_OP ("ASCII_ONLY!", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6D */ ACPI_OP ("PREFIX_ONLY!", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 63 */ ACPI_OP ("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, INTERNAL_TYPE_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ),
/* 64 */ ACPI_OP ("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
/* 65 */ ACPI_OP ("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
/* 66 */ ACPI_OP ("-ReservedField-", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 67 */ ACPI_OP ("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
/* 68 */ ACPI_OP ("-AccessField-", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 69 */ ACPI_OP ("-StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
/* 6A */ ACPI_OP ("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL),
/* 6B */ ACPI_OP ("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, INTERNAL_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6C */ ACPI_OP ("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* 6D */ ACPI_OP ("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
/* ACPI 2.0 opcodes */
......
/******************************************************************************
*
* Module Name: psparse - Parser top level AML parse routines
* $Revision: 129 $
* $Revision: 133 $
*
*****************************************************************************/
......@@ -111,58 +111,6 @@ acpi_ps_peek_opcode (
}
/*******************************************************************************
*
* FUNCTION: Acpi_ps_find_object
*
* PARAMETERS: Opcode - Current opcode
* Parser_state - Current state
* Walk_state - Current state
* *Op - Where found/new op is returned
*
* RETURN: Status
*
* DESCRIPTION: Find a named object. Two versions - one to search the parse
* tree (for parser-only applications such as acpidump), another
* to search the ACPI internal namespace (the parse tree may no
* longer exist)
*
******************************************************************************/
#ifdef PARSER_ONLY
acpi_status
acpi_ps_find_object (
acpi_walk_state *walk_state,
acpi_parse_object **out_op)
{
NATIVE_CHAR *path;
/* We are only interested in opcodes that have an associated name */
if (!(walk_state->op_info->flags & AML_NAMED)) {
*out_op = walk_state->op;
return (AE_OK);
}
/* Find the name in the parse tree */
path = acpi_ps_get_next_namestring (&walk_state->parser_state);
*out_op = acpi_ps_find (acpi_ps_get_parent_scope (&walk_state->parser_state),
path, walk_state->opcode, 1);
if (!(*out_op)) {
return (AE_NOT_FOUND);
}
return (AE_OK);
}
#endif
/*******************************************************************************
*
* FUNCTION: Acpi_ps_complete_this_op
......@@ -181,7 +129,6 @@ acpi_ps_complete_this_op (
acpi_walk_state *walk_state,
acpi_parse_object *op)
{
#ifndef PARSER_ONLY
acpi_parse_object *prev;
acpi_parse_object *next;
const acpi_opcode_info *parent_info;
......@@ -317,10 +264,6 @@ acpi_ps_complete_this_op (
}
return_VOID;
#else
return;
#endif
}
......@@ -381,6 +324,13 @@ acpi_ps_next_parse_state (
parser_state->aml = walk_state->aml_last_while;
break;
#if 0
case AE_CTRL_SKIP:
parser_state->aml = parser_state->scope->parse_scope.pkg_end;
status = AE_OK;
break;
#endif
case AE_CTRL_TRUE:
......@@ -585,14 +535,25 @@ acpi_ps_parse_loop (
* Get and append arguments until we find the node that contains
* the name (the type ARGP_NAME).
*/
while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) != ARGP_NAME) {
arg = acpi_ps_get_next_arg (parser_state,
while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) &&
(GET_CURRENT_ARG_TYPE (walk_state->arg_types) != ARGP_NAME)) {
status = acpi_ps_get_next_arg (parser_state,
GET_CURRENT_ARG_TYPE (walk_state->arg_types),
&walk_state->arg_count);
&walk_state->arg_count, &arg);
if (ACPI_FAILURE (status)) {
goto close_this_op;
}
acpi_ps_append_arg (&pre_op, arg);
INCREMENT_ARG_LIST (walk_state->arg_types);
}
/* Make sure that we found a NAME and didn't run out of arguments */
if (!GET_CURRENT_ARG_TYPE (walk_state->arg_types)) {
return_ACPI_STATUS (AE_AML_NO_OPERAND);
}
/* We know that this arg is a name, move to next arg */
INCREMENT_ARG_LIST (walk_state->arg_types);
......@@ -688,8 +649,8 @@ acpi_ps_parse_loop (
if (walk_state->op_info) {
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
"Opcode %4.4hX [%s] Op %p Aml %p Aml_offset %5.5X\n",
op->common.aml_opcode, walk_state->op_info->name,
"Opcode %4.4X [%s] Op %p Aml %p Aml_offset %5.5X\n",
(u32) op->common.aml_opcode, walk_state->op_info->name,
op, parser_state->aml, op->common.aml_offset));
}
}
......@@ -717,7 +678,17 @@ acpi_ps_parse_loop (
case AML_INT_NAMEPATH_OP: /* AML_NAMESTRING_ARG */
acpi_ps_get_next_namepath (parser_state, op, &walk_state->arg_count, 1);
status = acpi_ps_get_next_namepath (parser_state, op, &walk_state->arg_count, 1);
if (ACPI_FAILURE (status)) {
/* NOT_FOUND is an error only if we are actually executing a method */
if ((((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) &&
(status == AE_NOT_FOUND)) ||
(status != AE_NOT_FOUND)) {
goto close_this_op;
}
}
walk_state->arg_types = 0;
break;
......@@ -729,14 +700,24 @@ acpi_ps_parse_loop (
while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) && !walk_state->arg_count) {
walk_state->aml_offset = ACPI_PTR_DIFF (parser_state->aml,
parser_state->aml_start);
arg = acpi_ps_get_next_arg (parser_state,
status = acpi_ps_get_next_arg (parser_state,
GET_CURRENT_ARG_TYPE (walk_state->arg_types),
&walk_state->arg_count);
&walk_state->arg_count, &arg);
if (ACPI_FAILURE (status)) {
/* NOT_FOUND is an error only if we are actually executing a method */
if ((((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) &&
(status == AE_NOT_FOUND) &&
(op->common.aml_opcode != AML_COND_REF_OF_OP)) ||
(status != AE_NOT_FOUND)) {
goto close_this_op;
}
}
if (arg) {
arg->common.aml_offset = walk_state->aml_offset;
acpi_ps_append_arg (op, arg);
}
INCREMENT_ARG_LIST (walk_state->arg_types);
}
......@@ -887,6 +868,7 @@ acpi_ps_parse_loop (
acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count);
if (op) {
walk_state->op = op;
walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
walk_state->opcode = op->common.aml_opcode;
......@@ -896,6 +878,7 @@ acpi_ps_parse_loop (
acpi_ps_complete_this_op (walk_state, op);
op = NULL;
}
status = AE_OK;
break;
......@@ -1053,6 +1036,7 @@ acpi_ps_parse_aml (
acpi_walk_state *walk_state)
{
acpi_status status;
acpi_status terminate_status;
ACPI_THREAD_STATE *thread;
ACPI_THREAD_STATE *prev_walk_list = acpi_gbl_current_walk_list;
acpi_walk_state *previous_walk_state;
......@@ -1131,10 +1115,9 @@ acpi_ps_parse_aml (
* there's lots of cleanup to do
*/
if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) {
status = acpi_ds_terminate_control_method (walk_state);
if (ACPI_FAILURE (status)) {
terminate_status = acpi_ds_terminate_control_method (walk_state);
if (ACPI_FAILURE (terminate_status)) {
ACPI_REPORT_ERROR (("Could not terminate control method properly\n"));
status = AE_OK;
/* Ignore error and continue */
}
......
/******************************************************************************
*
* Module Name: pstree - Parser op tree manipulation/traversal/search
* $Revision: 39 $
* $Revision: 40 $
*
*****************************************************************************/
......
/*******************************************************************************
*
* Module Name: rsdump - Functions to display the resource structures.
* $Revision: 32 $
* $Revision: 33 $
*
******************************************************************************/
......@@ -31,7 +31,7 @@
ACPI_MODULE_NAME ("rsdump")
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*******************************************************************************
*
......
......@@ -256,7 +256,8 @@ acpi_system_suspend(
acpi_status status = AE_ERROR;
unsigned long flags = 0;
save_flags(flags);
local_irq_save(flags);
local_irq_disable();
switch (state)
{
......@@ -270,7 +271,7 @@ acpi_system_suspend(
do_suspend_lowlevel(0);
break;
}
restore_flags(flags);
local_irq_restore(flags);
return status;
}
......
......@@ -36,7 +36,7 @@
#define PREFIX "ACPI: "
#define ACPI_MAX_TABLES ACPI_TABLE_COUNT
#define ACPI_MAX_TABLES 256
static char *acpi_table_signatures[ACPI_TABLE_COUNT] = {
[ACPI_TABLE_UNKNOWN] = "????",
......@@ -338,7 +338,7 @@ acpi_table_get_sdt (
sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3;
if (sdt.count > ACPI_MAX_TABLES) {
printk(KERN_WARNING PREFIX "Truncated %lu XSDT entries\n",
(ACPI_MAX_TABLES - sdt.count));
(sdt.count - ACPI_MAX_TABLES));
sdt.count = ACPI_MAX_TABLES;
}
......@@ -383,7 +383,7 @@ acpi_table_get_sdt (
sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 2;
if (sdt.count > ACPI_MAX_TABLES) {
printk(KERN_WARNING PREFIX "Truncated %lu RSDT entries\n",
(ACPI_TABLE_COUNT - sdt.count));
(sdt.count - ACPI_TABLE_COUNT));
sdt.count = ACPI_MAX_TABLES;
}
......
/******************************************************************************
*
* Module Name: tbconvrt - ACPI Table conversion utilities
* $Revision: 42 $
* $Revision: 43 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: tbget - ACPI Table get* routines
* $Revision: 78 $
* $Revision: 79 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: tbgetall - Get all required ACPI tables
* $Revision: 1 $
* $Revision: 2 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: tbinstal - ACPI table installation and removal
* $Revision: 62 $
* $Revision: 63 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: tbrsdt - ACPI RSDT table utilities
* $Revision: 2 $
* $Revision: 3 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: tbutils - Table manipulation utilities
* $Revision: 55 $
* $Revision: 56 $
*
*****************************************************************************/
......@@ -135,7 +135,7 @@ acpi_tb_validate_table_header (
table_header, (char *) &signature));
ACPI_REPORT_WARNING (("Invalid table header length (0x%X) found\n",
table_header->length));
(u32) table_header->length));
ACPI_DUMP_BUFFER (table_header, sizeof (acpi_table_header));
return (AE_BAD_HEADER);
}
......@@ -176,7 +176,7 @@ acpi_tb_verify_table_checksum (
if (checksum) {
ACPI_REPORT_WARNING (("Invalid checksum (%X) in table %4.4s\n",
checksum, table_header->signature));
(u32) checksum, table_header->signature));
status = AE_BAD_CHECKSUM;
}
......
......@@ -473,6 +473,7 @@ acpi_thermal_passive (
trend, passive->tc1, tz->temperature,
tz->last_temperature, passive->tc2,
tz->temperature, passive->temperature));
tz->trips.passive.flags.enabled = 1;
/* Heating up? */
if (trend > 0)
for (i=0; i<passive->devices.count; i++)
......@@ -518,6 +519,7 @@ acpi_thermal_active (
struct acpi_thermal_active *active = NULL;
int i = 0;
int j = 0;
unsigned long maxtemp = 0;
ACPI_FUNCTION_TRACE("acpi_thermal_active");
......@@ -537,7 +539,8 @@ acpi_thermal_active (
* associated with this active threshold.
*/
if (tz->temperature >= active->temperature) {
tz->state.active_index = i;
if (active->temperature > maxtemp)
tz->state.active_index = i, maxtemp = active->temperature;
if (!active->flags.enabled) {
for (j = 0; j < active->devices.count; j++) {
result = acpi_bus_set_power(active->devices.handles[j], ACPI_STATE_D0);
......@@ -591,6 +594,7 @@ acpi_thermal_check (
struct acpi_thermal *tz = (struct acpi_thermal *) data;
unsigned long sleep_time = 0;
int i = 0;
struct acpi_thermal_state state = tz->state;
ACPI_FUNCTION_TRACE("acpi_thermal_check");
......@@ -613,15 +617,15 @@ acpi_thermal_check (
* this function determines when a state is entered, but the
* individual policy decides when it is exited (e.g. hysteresis).
*/
if ((tz->trips.critical.flags.valid) && (tz->temperature >= tz->trips.critical.temperature))
tz->trips.critical.flags.enabled = 1;
if ((tz->trips.hot.flags.valid) && (tz->temperature >= tz->trips.hot.temperature))
tz->trips.hot.flags.enabled = 1;
if ((tz->trips.passive.flags.valid) && (tz->temperature >= tz->trips.passive.temperature))
tz->trips.passive.flags.enabled = 1;
if (tz->trips.critical.flags.valid)
state.critical |= (tz->temperature >= tz->trips.critical.temperature);
if (tz->trips.hot.flags.valid)
state.hot |= (tz->temperature >= tz->trips.hot.temperature);
if (tz->trips.passive.flags.valid)
state.passive |= (tz->temperature >= tz->trips.passive.temperature);
for (i=0; i<ACPI_THERMAL_MAX_ACTIVE; i++)
if ((tz->trips.active[i].flags.valid) && (tz->temperature >= tz->trips.active[i].temperature))
tz->trips.active[i].flags.enabled = 1;
if (tz->trips.active[i].flags.valid)
state.active |= (tz->temperature >= tz->trips.active[i].temperature);
/*
* Invoke Policy
......@@ -629,13 +633,13 @@ acpi_thermal_check (
* Separated from the above check to allow individual policy to
* determine when to exit a given state.
*/
if (tz->trips.critical.flags.enabled)
if (state.critical)
acpi_thermal_critical(tz);
if (tz->trips.hot.flags.enabled)
if (state.hot)
acpi_thermal_hot(tz);
if (tz->trips.passive.flags.enabled)
if (state.passive)
acpi_thermal_passive(tz);
if (tz->trips.active[0].flags.enabled)
if (state.active)
acpi_thermal_active(tz);
/*
......
/******************************************************************************
*
* Module Name: utdebug - Debug print routines
* $Revision: 103 $
* $Revision: 104 $
*
*****************************************************************************/
......@@ -30,7 +30,7 @@
ACPI_MODULE_NAME ("utdebug")
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
static u32 acpi_gbl_prev_thread_id = 0xFFFFFFFF;
static char *acpi_gbl_fn_entry_str = "----Entry";
......
/******************************************************************************
*
* Module Name: uteval - Object evaluation
* $Revision: 40 $
* $Revision: 41 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: utglobal - Global variables for the ACPI subsystem
* $Revision: 165 $
* $Revision: 168 $
*
*****************************************************************************/
......@@ -126,7 +126,7 @@ acpi_format_exception (
/* Debug switch - level and trace mask */
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
u32 acpi_dbg_level = DEBUG_DEFAULT;
#else
u32 acpi_dbg_level = NORMAL_DEFAULT;
......@@ -185,6 +185,10 @@ const acpi_predefined_names acpi_gbl_pre_defined_names[] =
{"_REV", ACPI_TYPE_INTEGER, "2"},
{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
{"_GL_", ACPI_TYPE_MUTEX, "0"},
#if defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
{"_OSI", ACPI_TYPE_METHOD, "1"},
#endif
{NULL, ACPI_TYPE_ANY, NULL} /* Table terminator */
};
......@@ -522,7 +526,7 @@ acpi_ut_get_object_type_name (
}
#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*
* Strings and procedures used for debug only
......@@ -773,7 +777,7 @@ acpi_ut_init_globals (
acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST;
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
acpi_gbl_lowest_stack_pointer = ACPI_SIZE_MAX;
#endif
......
/******************************************************************************
*
* Module Name: utinit - Common ACPI subsystem initialization
* $Revision: 112 $
* $Revision: 113 $
*
*****************************************************************************/
......@@ -198,14 +198,14 @@ acpi_ut_subsystem_shutdown (void)
acpi_gbl_shutdown = TRUE;
ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem...\n"));
/* Close the Namespace */
acpi_ns_terminate ();
/* Close the Acpi_event Handling */
acpi_ev_terminate ();
/* Close the Namespace */
acpi_ns_terminate ();
/* Close the globals */
acpi_ut_terminate ();
......
/*******************************************************************************
*
* Module Name: utmisc - common utility procedures
* $Revision: 78 $
* $Revision: 80 $
*
******************************************************************************/
......@@ -104,7 +104,7 @@ acpi_ut_set_integer_width (
}
#ifdef ACPI_DEBUG
#ifdef ACPI_DEBUG_OUTPUT
/*******************************************************************************
*
* FUNCTION: Acpi_ut_display_init_pathname
......
/******************************************************************************
*
* Module Name: utxface - External interfaces for "global" ACPI functions
* $Revision: 97 $
* $Revision: 100 $
*
*****************************************************************************/
......@@ -159,6 +159,8 @@ acpi_enable_subsystem (
if (!(flags & ACPI_NO_ACPI_ENABLE)) {
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
acpi_gbl_original_mode = acpi_hw_get_mode();
status = acpi_enable ();
if (ACPI_FAILURE (status)) {
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Acpi_enable failed.\n"));
......@@ -291,7 +293,7 @@ acpi_terminate (void)
acpi_ut_mutex_terminate ();
#ifdef ENABLE_DEBUGGER
#ifdef ACPI_DEBUGGER
/* Shut down the debugger */
......
......@@ -39,7 +39,7 @@
#include <asm/acpi.h>
#ifdef CONFIG_ACPI_BOOT
#ifdef CONFIG_ACPI
enum acpi_irq_model_id {
ACPI_IRQ_MODEL_PIC = 0,
......
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