http://linux-acpi.bkbits.net/linux-acpi-test-2.6.8 len.brown@intel.com[lenb]|ChangeSet|20040825021839|55103 len.brown # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/08/25 13:55:33-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/i386/kernel/smpboot.c # 2004/08/25 13:55:29-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/24 22:18:39-04:00 len.brown@intel.com # [ACPI] quiet ACPI NUMA boot messages # Signed-off-by: Jesse Barnes # # drivers/acpi/tables.c # 2004/08/24 18:12:20-04:00 len.brown@intel.com +2 -2 # quiet boot messages # # drivers/acpi/numa.c # 2004/08/24 18:16:12-04:00 len.brown@intel.com +0 -4 # quiet boot messages # # ChangeSet # 2004/08/24 17:25:44-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # init/main.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # include/asm-x86_64/acpi.h # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/smpboot.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/setup.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/mm/discontig.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/smpboot.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/io_apic.c # 2004/08/24 17:25:40-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/23 13:41:18-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # init/main.c # 2004/08/23 13:41:14-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/io_apic.c # 2004/08/23 13:41:14-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/i8259.c # 2004/08/23 13:41:14-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/22 21:01:53-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/i386/kernel/smpboot.c # 2004/08/22 21:01:49-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/21 23:12:45-04:00 len.brown@intel.com # [ACPI] Enable ACPICA workarounds for 'RELAXED_AML' and 'implicit return' # These workarounds are disabled if "acpi=strict" # # include/acpi/acglobal.h # 2004/08/21 23:12:39-04:00 len.brown@intel.com +1 -1 # acpi_gbl_enable_interpreter_slack typo fix # # drivers/acpi/executer/exfldio.c # 2004/08/21 23:12:39-04:00 len.brown@intel.com +2 -35 # acpi_gbl_enable_interpreter_slack typo fix # delete the previous RELAXED_AML workaround it replaces # # drivers/acpi/dispatcher/dsutils.c # 2004/08/21 23:12:39-04:00 len.brown@intel.com +1 -1 # acpi_gbl_enable_interpreter_slack typo fix # # drivers/acpi/bus.c # 2004/08/21 23:12:39-04:00 len.brown@intel.com +4 -0 # if (!acpi_strict) enable_acpi_gbl_interpreter_slack = TRUE # # ChangeSet # 2004/08/20 18:18:05-04:00 len.brown@intel.com # [ACPI] ACPICA 20040816 update from Bob Moore # # Designed and implemented support within the AML interpreter # for the so-called implicit return. This support returns # the result of the last ASL operation within a control # method, in the absence of an explicit Return() operator. # A few machines depend on this behavior, even though it # is not explicitly supported by the ASL language. It is # optional support that can be enabled at runtime via the # acpi_gbl_enable_interpreter_slack flag. # # Removed support for the PCI_Config address space from the # internal low level hardware interfaces (acpi_hw_low_level_read # and acpi_hw_low_level_write). This support was not used # internally, and would not work correctly anyway because # the PCI bus number and segment number were not supported. # There are separate interfaces for PCI configuration space # access because of the unique interface. # acpica-unix-20040816.patch # # AE_CODE_AML_MAX fix from Bjorn Helgaas # # include/acpi/acmacros.h # 2004/08/20 14:05:51-04:00 len.brown@intel.com +0 -18 # ACPICA 20040816 # # include/acpi/acexcep.h # 2004/08/20 14:05:51-04:00 len.brown@intel.com +1 -1 # ACPICA 20040816 # # include/acpi/acconfig.h # 2004/08/20 14:05:51-04:00 len.brown@intel.com +1 -1 # ACPICA 20040816 # # drivers/acpi/hardware/hwtimer.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +12 -16 # ACPICA 20040816 # # drivers/acpi/hardware/hwregs.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +22 -48 # ACPICA 20040816 # # drivers/acpi/hardware/hwgpe.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +1 -1 # ACPICA 20040816 # # drivers/acpi/events/evxface.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +5 -6 # ACPICA 20040816 # # drivers/acpi/events/evrgnini.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +6 -6 # ACPICA 20040816 # # drivers/acpi/events/evregion.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +8 -9 # ACPICA 20040816 # # drivers/acpi/events/evmisc.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +23 -9 # ACPICA 20040816 # # drivers/acpi/events/evgpe.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +5 -1 # ACPICA 20040816 # # drivers/acpi/dispatcher/dsutils.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +37 -16 # ACPICA 20040816 # # drivers/acpi/dispatcher/dsmethod.c # 2004/08/20 14:05:55-04:00 len.brown@intel.com +31 -21 # ACPICA 20040816 # # ChangeSet # 2004/08/19 02:43:31-04:00 len.brown@intel.com # [ACPI] fix __initdata bug in acpi_irq_penalty[] # # Signed-off-by: Bjorn Helgaas # # drivers/acpi/pci_link.c # 2004/08/18 19:26:48-04:00 len.brown@intel.com +2 -2 # fix __initdata bug in acpi_irq_penalty[] # # ChangeSet # 2004/08/17 14:06:20-07:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.8 # into bix.(none):/usr/src/bk-acpi # # init/main.c # 2004/08/17 14:06:15-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/15 00:51:42-07:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.7 # into bix.(none):/usr/src/bk-acpi # # init/main.c # 2004/08/15 00:51:38-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/15 00:50:39-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # include/asm-x86_64/acpi.h # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/sleep/proc.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/sleep/main.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/scan.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/namespace/nsalloc.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/smpboot.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/setup.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/i8259.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/ia64/kernel/acpi.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/mm/discontig.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/smpboot.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/setup.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/io_apic.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/i8259.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/acpi/boot.c # 2004/08/15 00:50:35-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/09 21:24:35-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # drivers/acpi/sleep/proc.c # 2004/08/09 21:24:31-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/05 19:47:19-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/ia64/kernel/acpi.c # 2004/08/05 19:47:15-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/08/02 10:40:21-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/i8259.c # 2004/08/02 10:40:18-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/io_apic.c # 2004/08/02 10:40:18-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/29 23:09:19-07:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-acpi # # arch/i386/kernel/io_apic.c # 2004/07/29 23:09:15-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/28 14:04:29-07:00 akpm@bix.(none) # Merge http://linux-acpi.bkbits.net/linux-acpi-test-2.6.7 # into bix.(none):/usr/src/bk-acpi # # arch/x86_64/kernel/smpboot.c # 2004/07/28 14:04:25-07:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2004/07/27 13:06:25-07:00 akpm@bix.(none) # Merge # # include/asm-x86_64/acpi.h # 2004/07/27 13:06:22-07:00 akpm@bix.(none) +4 -0 # SCCS merged # # drivers/acpi/sleep/main.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/scan.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # drivers/acpi/namespace/nsalloc.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/smpboot.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/setup.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/kernel/i8259.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/ia64/kernel/acpi.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/mm/discontig.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/smpboot.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/setup.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/io_apic.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/acpi/boot.c # 2004/07/27 13:05:22-07:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/i386/kernel/i8259.c # 2004/07/27 13:05:21-07:00 akpm@bix.(none) +0 -0 # Auto merged # diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c --- a/drivers/acpi/bus.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/bus.c 2004-08-25 19:22:27 -07:00 @@ -598,6 +598,10 @@ ACPI_FUNCTION_TRACE("acpi_bus_init"); + /* enable workarounds, unless strict ACPI spec. compliance */ + if (!acpi_strict) + acpi_gbl_enable_interpreter_slack = TRUE; + status = acpi_initialize_subsystem(); if (ACPI_FAILURE(status)) { printk(KERN_ERR PREFIX "Unable to initialize the ACPI Interpreter\n"); diff -Nru a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c --- a/drivers/acpi/dispatcher/dsmethod.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/dispatcher/dsmethod.c 2004-08-25 19:22:27 -07:00 @@ -58,15 +58,12 @@ * * FUNCTION: acpi_ds_parse_method * - * PARAMETERS: obj_handle - Node of the method - * Level - Current nesting level - * Context - Points to a method counter - * return_value - Not used + * PARAMETERS: obj_handle - Method node * * RETURN: Status * - * DESCRIPTION: Call the parser and parse the AML that is - * associated with the method. + * DESCRIPTION: Call the parser and parse the AML that is associated with the + * method. * * MUTEX: Assumes parser is locked * @@ -191,8 +188,6 @@ * increments the thread count, and waits at the method semaphore * for clearance to execute. * - * MUTEX: Locks/unlocks parser. - * ******************************************************************************/ acpi_status @@ -251,7 +246,8 @@ * * FUNCTION: acpi_ds_call_control_method * - * PARAMETERS: walk_state - Current state of the walk + * PARAMETERS: Thread - Info for this thread + * this_walk_state - Current walk state * Op - Current Op to be walked * * RETURN: Status @@ -401,12 +397,13 @@ * * FUNCTION: acpi_ds_restart_control_method * - * PARAMETERS: walk_state - State of the method when it was preempted - * Op - Pointer to new current op + * PARAMETERS: walk_state - State for preempted method (caller) + * return_desc - Return value from the called method * * RETURN: Status * - * DESCRIPTION: Restart a method that was preempted + * DESCRIPTION: Restart a method that was preempted by another (nested) method + * invocation. Handle the return value (if any) from the callee. * ******************************************************************************/ @@ -421,17 +418,35 @@ ACPI_FUNCTION_TRACE_PTR ("ds_restart_control_method", walk_state); + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "****Restart [%4.4s] Op %p return_value_from_callee %p\n", + (char *) &walk_state->method_node->name, walk_state->method_call_op, + return_desc)); + + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + " return_from_this_method_used?=%X res_stack %p Walk %p\n", + walk_state->return_used, + walk_state->results, walk_state)); + + /* Did the called method return a value? */ + if (return_desc) { + /* Are we actually going to use the return value? */ + if (walk_state->return_used) { - /* - * Get the return value (if any) from the previous method. - * NULL if no return value - */ + /* Save the return value from the previous method */ + status = acpi_ds_result_push (return_desc, walk_state); if (ACPI_FAILURE (status)) { acpi_ut_remove_reference (return_desc); return_ACPI_STATUS (status); } + + /* + * Save as THIS method's return value in case it is returned + * immediately to yet another method + */ + walk_state->return_desc = return_desc; } else { /* @@ -441,11 +456,6 @@ acpi_ut_remove_reference (return_desc); } } - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Method=%p Return=%p return_used?=%X res_stack=%p State=%p\n", - walk_state->method_call_op, return_desc, walk_state->return_used, - walk_state->results, walk_state)); return_ACPI_STATUS (AE_OK); } diff -Nru a/drivers/acpi/dispatcher/dsutils.c b/drivers/acpi/dispatcher/dsutils.c --- a/drivers/acpi/dispatcher/dsutils.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/dispatcher/dsutils.c 2004-08-25 19:22:27 -07:00 @@ -60,11 +60,10 @@ * * FUNCTION: acpi_ds_is_result_used * - * PARAMETERS: Op - * result_obj - * walk_state + * PARAMETERS: Op - Current Op + * walk_state - Current State * - * RETURN: Status + * RETURN: TRUE if result is used, FALSE otherwise * * DESCRIPTION: Check if a result object will be used by the parent * @@ -89,18 +88,39 @@ } /* - * If there is no parent, the result can't possibly be used! - * (An executing method typically has no parent, since each - * method is parsed separately) However, a method that is - * invoked from another method has a parent. + * If there is no parent, we are executing at the method level. + * An executing method typically has no parent, since each method + * is parsed separately. */ if (!op->common.parent) { + /* + * If this is the last statement in the method, we know it is not a + * Return() operator (would not come here.) The following code is the + * optional support for a so-called "implicit return". Some AML code + * assumes that the last value of the method is "implicitly" returned + * to the caller. Just save the last result as the return value. + * NOTE: this is optional because the ASL language does not actually + * support this behavior. + */ + if ((acpi_gbl_enable_interpreter_slack) && + (walk_state->parser_state.aml >= walk_state->parser_state.aml_end)) { + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "Result of [%s] will be implicitly returned\n", + acpi_ps_get_opcode_name (op->common.aml_opcode))); + + /* Use the top of the result stack as the implicit return value */ + + walk_state->return_desc = walk_state->results->results.obj_desc[0]; + return_VALUE (TRUE); + } + + /* No parent, the return value cannot possibly be used */ + return_VALUE (FALSE); } - /* - * Get info on the parent. The root Op is AML_SCOPE - */ + /* Get info on the parent. The root_op is AML_SCOPE */ + parent_info = acpi_ps_get_opcode_info (op->common.parent->common.aml_opcode); if (parent_info->class == AML_CLASS_UNKNOWN) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown parent opcode. Op=%p\n", op)); @@ -204,9 +224,9 @@ * * FUNCTION: acpi_ds_delete_result_if_not_used * - * PARAMETERS: Op - * result_obj - * walk_state + * PARAMETERS: Op - Current parse Op + * result_obj - Result of the operation + * walk_state - Current state * * RETURN: Status * @@ -338,8 +358,9 @@ * * FUNCTION: acpi_ds_create_operand * - * PARAMETERS: walk_state - * Arg + * PARAMETERS: walk_state - Current walk state + * Arg - Parse object for the argument + * arg_index - Which argument (zero based) * * RETURN: Status * diff -Nru a/drivers/acpi/events/evgpe.c b/drivers/acpi/events/evgpe.c --- a/drivers/acpi/events/evgpe.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/events/evgpe.c 2004-08-25 19:22:27 -07:00 @@ -102,6 +102,8 @@ * FUNCTION: acpi_ev_update_gpe_enable_masks * * PARAMETERS: gpe_event_info - GPE to update + * Type - What to do: ACPI_GPE_DISABLE or + * ACPI_GPE_ENABLE * * RETURN: Status * @@ -166,6 +168,8 @@ * FUNCTION: acpi_ev_enable_gpe * * PARAMETERS: gpe_event_info - GPE to enable + * write_to_hardware - Enable now, or just mark data structs + * (WAKE GPEs should be deferred) * * RETURN: Status * @@ -707,7 +711,7 @@ #ifdef ACPI_GPE_NOTIFY_CHECK /******************************************************************************* - * NOT USED, PROTOTYPE ONLY AND WILL PROBABLY BE REMOVED + * TBD: NOT USED, PROTOTYPE ONLY AND WILL PROBABLY BE REMOVED * * FUNCTION: acpi_ev_check_for_wake_only_gpe * diff -Nru a/drivers/acpi/events/evmisc.c b/drivers/acpi/events/evmisc.c --- a/drivers/acpi/events/evmisc.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/events/evmisc.c 2004-08-25 19:22:27 -07:00 @@ -88,9 +88,10 @@ * * FUNCTION: acpi_ev_queue_notify_request * - * PARAMETERS: + * PARAMETERS: Node - NS node for the notified object + * notify_value - Value from the Notify() request * - * RETURN: None. + * RETURN: Status * * DESCRIPTION: Dispatch a device notification event to a previously * installed handler. @@ -143,9 +144,8 @@ notify_value)); } - /* - * Get the notify object attached to the NS Node - */ + /* Get the notify object attached to the NS Node */ + obj_desc = acpi_ns_get_attached_object (node); if (obj_desc) { /* We have the notify object, Get the right handler */ @@ -193,8 +193,10 @@ } if (!handler_obj) { - /* There is no per-device notify handler for this device */ - + /* + * There is no per-device notify handler for this device. + * This may or may not be a problem. + */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "No notify handler for Notify(%4.4s, %X) node %p\n", acpi_ut_get_node_name (node), notify_value, node)); @@ -208,7 +210,7 @@ * * FUNCTION: acpi_ev_notify_dispatch * - * PARAMETERS: + * PARAMETERS: Context - To be passsed to the notify handler * * RETURN: None. * @@ -275,6 +277,8 @@ * * FUNCTION: acpi_ev_global_lock_thread * + * PARAMETERS: Context - From thread interface, not used + * * RETURN: None * * DESCRIPTION: Invoked by SCI interrupt handler upon acquisition of the @@ -308,7 +312,9 @@ * * FUNCTION: acpi_ev_global_lock_handler * - * RETURN: Status + * PARAMETERS: Context - From thread interface, not used + * + * RETURN: ACPI_INTERRUPT_HANDLED or ACPI_INTERRUPT_NOT_HANDLED * * DESCRIPTION: Invoked directly from the SCI handler when a global lock * release interrupt occurs. Grab the global lock and queue @@ -355,6 +361,8 @@ * * FUNCTION: acpi_ev_init_global_lock_handler * + * PARAMETERS: None + * * RETURN: Status * * DESCRIPTION: Install a handler for the global lock release event @@ -394,6 +402,8 @@ * * FUNCTION: acpi_ev_acquire_global_lock * + * PARAMETERS: Timeout - Max time to wait for the lock, in millisec. + * * RETURN: Status * * DESCRIPTION: Attempt to gain ownership of the Global Lock. @@ -460,6 +470,10 @@ /******************************************************************************* * * FUNCTION: acpi_ev_release_global_lock + * + * PARAMETERS: None + * + * RETURN: Status * * DESCRIPTION: Releases ownership of the Global Lock. * diff -Nru a/drivers/acpi/events/evregion.c b/drivers/acpi/events/evregion.c --- a/drivers/acpi/events/evregion.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/events/evregion.c 2004-08-25 19:22:27 -07:00 @@ -180,7 +180,7 @@ * FUNCTION: acpi_ev_execute_reg_method * * PARAMETERS: region_obj - Object structure - * Function - On (1) or Off (0) + * Function - Passed to _REG: On (1) or Off (0) * * RETURN: Status * @@ -232,7 +232,7 @@ goto cleanup; } - /* Set up the parameter objects */ + /* Setup the parameter objects */ params[0]->integer.value = region_obj->region.space_id; params[1]->integer.value = function; @@ -262,7 +262,6 @@ * FUNCTION: acpi_ev_address_space_dispatch * * PARAMETERS: region_obj - Internal region object - * space_id - ID of the address space (0-255) * Function - Read or Write operation * Address - Where in the space to read or write * bit_width - Field width in bits (8, 16, 32, or 64) @@ -425,8 +424,8 @@ * * FUNCTION: acpi_ev_detach_region * - * PARAMETERS: region_obj - Region Object - * acpi_ns_is_locked - Namespace Region Already Locked? + * PARAMETERS: region_obj - Region Object + * acpi_ns_is_locked - Namespace Region Already Locked? * * RETURN: None * @@ -560,9 +559,9 @@ * * FUNCTION: acpi_ev_attach_region * - * PARAMETERS: handler_obj - Handler Object - * region_obj - Region Object - * acpi_ns_is_locked - Namespace Region Already Locked? + * PARAMETERS: handler_obj - Handler Object + * region_obj - Region Object + * acpi_ns_is_locked - Namespace Region Already Locked? * * RETURN: None * @@ -971,7 +970,7 @@ * * RETURN: Status * - * DESCRIPTION: Run _REG methods for the Space ID; + * DESCRIPTION: Run all _REG methods for the input Space ID; * Note: assumes namespace is locked, or system init time. * ******************************************************************************/ diff -Nru a/drivers/acpi/events/evrgnini.c b/drivers/acpi/events/evrgnini.c --- a/drivers/acpi/events/evrgnini.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/events/evrgnini.c 2004-08-25 19:22:27 -07:00 @@ -54,7 +54,7 @@ * * FUNCTION: acpi_ev_system_memory_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context @@ -108,7 +108,7 @@ * * FUNCTION: acpi_ev_io_space_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context @@ -144,7 +144,7 @@ * * FUNCTION: acpi_ev_pci_config_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context @@ -317,7 +317,7 @@ * * FUNCTION: acpi_ev_pci_bar_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context @@ -348,7 +348,7 @@ * * FUNCTION: acpi_ev_cmos_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context @@ -379,7 +379,7 @@ * * FUNCTION: acpi_ev_default_region_setup * - * PARAMETERS: region_obj - Region we are interested in + * PARAMETERS: Handle - Region we are interested in * Function - Start or stop * handler_context - Address space handler context * region_context - Region specific context diff -Nru a/drivers/acpi/events/evxface.c b/drivers/acpi/events/evxface.c --- a/drivers/acpi/events/evxface.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/events/evxface.c 2004-08-25 19:22:27 -07:00 @@ -359,6 +359,7 @@ * ACPI_DEVICE_NOTIFY: driver_handler (80-ff) * ACPI_ALL_NOTIFY: both system and device * Handler - Address of the handler + * * RETURN: Status * * DESCRIPTION: Remove a handler for notifies on an ACPI device @@ -401,9 +402,8 @@ goto unlock_and_exit; } - /* - * Root Object - */ + /* Root Object */ + if (device == ACPI_ROOT_OBJECT) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing notify handler for ROOT object.\n")); @@ -437,9 +437,8 @@ } } - /* - * All Other Objects - */ + /* All Other Objects */ + else { /* Notifies allowed on this object? */ diff -Nru a/drivers/acpi/executer/exfldio.c b/drivers/acpi/executer/exfldio.c --- a/drivers/acpi/executer/exfldio.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/executer/exfldio.c 2004-08-25 19:22:27 -07:00 @@ -130,7 +130,7 @@ if (rgn_desc->region.length < (obj_desc->common_field.base_byte_offset + field_datum_byte_offset + obj_desc->common_field.access_byte_width)) { - if (acpi_gbl_enable_interpeter_slack) { + if (acpi_gbl_enable_interpreter_slack) { /* * Slack mode only: We will go ahead and allow access to this * field if it is within the region length rounded up to the next @@ -169,40 +169,7 @@ field_datum_byte_offset, obj_desc->common_field.access_byte_width, acpi_ut_get_node_name (rgn_desc->region.node), rgn_desc->region.length)); - if (!acpi_strict) { - /* - * Allow access to the field if it is within the region size - * rounded up to a multiple of the access byte width. This - * overcomes "off-by-one" programming errors in the AML often - * found in Toshiba laptops. These errors were allowed by - * the Microsoft ASL compiler. - */ - u32 rounded_length = ACPI_ROUND_UP(rgn_desc->region.length, - obj_desc->common_field.access_byte_width); - - if (rounded_length < (obj_desc->common_field.base_byte_offset - + field_datum_byte_offset - + obj_desc->common_field.access_byte_width)) { - return_ACPI_STATUS (AE_AML_REGION_LIMIT); - } else { - static int warn_once = 1; - if (warn_once) { - // Could also associate a flag with each field, and - // warn once for each field. - ACPI_REPORT_WARNING(( - "The ACPI AML in your computer contains errors, " - "please nag the manufacturer to correct it.\n")); - ACPI_REPORT_WARNING(( - "Allowing relaxed access to fields; " - "turn on CONFIG_ACPI_DEBUG for details.\n")); - warn_once = 0; - } - return_ACPI_STATUS (AE_OK); - } - } - else { - return_ACPI_STATUS (AE_AML_REGION_LIMIT); - } + return_ACPI_STATUS (AE_AML_REGION_LIMIT); } return_ACPI_STATUS (AE_OK); diff -Nru a/drivers/acpi/hardware/hwgpe.c b/drivers/acpi/hardware/hwgpe.c --- a/drivers/acpi/hardware/hwgpe.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/hardware/hwgpe.c 2004-08-25 19:22:27 -07:00 @@ -96,7 +96,7 @@ * * PARAMETERS: gpe_event_info - Info block for the GPE to be cleared * - * RETURN: status_status + * RETURN: Status * * DESCRIPTION: Clear the status bit for a single GPE. * diff -Nru a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c --- a/drivers/acpi/hardware/hwregs.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/hardware/hwregs.c 2004-08-25 19:22:27 -07:00 @@ -249,8 +249,8 @@ * return_value - Value that was read from the register * Flags - Lock the hardware or not * - * RETURN: Value is read from specified Register. Value returned is - * normalized to bit0 (is shifted all the way right) + * RETURN: Status and the value read from specified Register. Value + * returned is normalized to bit0 (is shifted all the way right) * * DESCRIPTION: ACPI bit_register read function. * @@ -284,6 +284,8 @@ } } + /* Read from the register */ + status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, bit_reg_info->parent_register, ®ister_value); @@ -313,10 +315,10 @@ * * PARAMETERS: register_id - ID of ACPI bit_register to access * Value - (only used on write) value to write to the - * Register, NOT pre-normalized to the bit pos. + * Register, NOT pre-normalized to the bit pos * Flags - Lock the hardware or not * - * RETURN: None + * RETURN: Status * * DESCRIPTION: ACPI Bit Register write function. * @@ -461,10 +463,11 @@ * * FUNCTION: acpi_hw_register_read * - * PARAMETERS: use_lock - Mutex hw access. - * register_id - register_iD + Offset. + * PARAMETERS: use_lock - Mutex hw access + * register_id - register_iD + Offset + * return_value - Value that was read from the register * - * RETURN: Value read or written. + * RETURN: Status and the value read. * * DESCRIPTION: Acpi register read function. Registers are read at the * given offset. @@ -572,10 +575,11 @@ * * FUNCTION: acpi_hw_register_write * - * PARAMETERS: use_lock - Mutex hw access. - * register_id - register_iD + Offset. + * PARAMETERS: use_lock - Mutex hw access + * register_id - register_iD + Offset + * Value - The value to write * - * RETURN: Value read or written. + * RETURN: Status * * DESCRIPTION: Acpi register Write function. Registers are written at the * given offset. @@ -691,11 +695,11 @@ * * PARAMETERS: Width - 8, 16, or 32 * Value - Where the value is returned - * Register - GAS register structure + * Reg - GAS register structure * * RETURN: Status * - * DESCRIPTION: Read from either memory, IO, or PCI config space. + * DESCRIPTION: Read from either memory or IO space. * ******************************************************************************/ @@ -705,8 +709,6 @@ u32 *value, struct acpi_generic_address *reg) { - struct acpi_pci_id pci_id; - u16 pci_register; acpi_status status; @@ -725,8 +727,8 @@ *value = 0; /* - * Three address spaces supported: - * Memory, IO, or PCI_Config. + * Two address spaces supported: Memory or IO. + * PCI_Config is not supported here because the GAS struct is insufficient */ switch (reg->address_space_id) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: @@ -744,19 +746,6 @@ break; - case ACPI_ADR_SPACE_PCI_CONFIG: - - pci_id.segment = 0; - pci_id.bus = 0; - pci_id.device = ACPI_PCI_DEVICE (reg->address); - pci_id.function = ACPI_PCI_FUNCTION (reg->address); - pci_register = (u16) ACPI_PCI_REGISTER (reg->address); - - status = acpi_os_read_pci_configuration (&pci_id, pci_register, - value, width); - break; - - default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported address space: %X\n", reg->address_space_id)); @@ -778,11 +767,11 @@ * * PARAMETERS: Width - 8, 16, or 32 * Value - To be written - * Register - GAS register structure + * Reg - GAS register structure * * RETURN: Status * - * DESCRIPTION: Write to either memory, IO, or PCI config space. + * DESCRIPTION: Write to either memory or IO space. * ******************************************************************************/ @@ -792,8 +781,6 @@ u32 value, struct acpi_generic_address *reg) { - struct acpi_pci_id pci_id; - u16 pci_register; acpi_status status; @@ -811,8 +798,8 @@ } /* - * Three address spaces supported: - * Memory, IO, or PCI_Config. + * Two address spaces supported: Memory or IO. + * PCI_Config is not supported here because the GAS struct is insufficient */ switch (reg->address_space_id) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: @@ -827,19 +814,6 @@ status = acpi_os_write_port ((acpi_io_address) reg->address, value, width); - break; - - - case ACPI_ADR_SPACE_PCI_CONFIG: - - pci_id.segment = 0; - pci_id.bus = 0; - pci_id.device = ACPI_PCI_DEVICE (reg->address); - pci_id.function = ACPI_PCI_FUNCTION (reg->address); - pci_register = (u16) ACPI_PCI_REGISTER (reg->address); - - status = acpi_os_write_pci_configuration (&pci_id, pci_register, - (acpi_integer) value, width); break; diff -Nru a/drivers/acpi/hardware/hwtimer.c b/drivers/acpi/hardware/hwtimer.c --- a/drivers/acpi/hardware/hwtimer.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/hardware/hwtimer.c 2004-08-25 19:22:27 -07:00 @@ -52,11 +52,11 @@ * * FUNCTION: acpi_get_timer_resolution * - * PARAMETERS: none + * PARAMETERS: Resolution - Where the resolution is returned * - * RETURN: Number of bits of resolution in the PM Timer (24 or 32). + * RETURN: Status and timer resolution * - * DESCRIPTION: Obtains resolution of the ACPI PM Timer. + * DESCRIPTION: Obtains resolution of the ACPI PM Timer (24 or 32 bits). * ******************************************************************************/ @@ -86,11 +86,11 @@ * * FUNCTION: acpi_get_timer * - * PARAMETERS: none + * PARAMETERS: Ticks - Where the timer value is returned * - * RETURN: Current value of the ACPI PM Timer (in ticks). + * RETURN: Status and current ticks * - * DESCRIPTION: Obtains current value of ACPI PM Timer. + * DESCRIPTION: Obtains current value of ACPI PM Timer (in ticks). * ******************************************************************************/ @@ -118,11 +118,11 @@ * * FUNCTION: acpi_get_timer_duration * - * PARAMETERS: start_ticks - * end_ticks - * time_elapsed + * PARAMETERS: start_ticks - Starting timestamp + * end_ticks - End timestamp + * time_elapsed - Where the elapsed time is returned * - * RETURN: time_elapsed + * RETURN: Status and time_elapsed * * DESCRIPTION: Computes the time elapsed (in microseconds) between two * PM Timer time stamps, taking into account the possibility of @@ -136,7 +136,7 @@ * Note that this function accommodates only a single timer * rollover. Thus for 24-bit timers, this function should only * be used for calculating durations less than ~4.6 seconds - * (~20 minutes for 32-bit timers) -- calculations below + * (~20 minutes for 32-bit timers) -- calculations below: * * 2**24 Ticks / 3,600,000 Ticks/Sec = 4.66 sec * 2**32 Ticks / 3,600,000 Ticks/Sec = 1193 sec or 19.88 minutes @@ -164,7 +164,6 @@ /* * Compute Tick Delta: - * ------------------- * Handle (max one) timer rollovers on 24- versus 32-bit timers. */ if (start_ticks < end_ticks) { @@ -188,10 +187,7 @@ } /* - * Compute Duration: - * ----------------- - * - * Requires a 64-bit divide: + * Compute Duration (Requires a 64-bit divide): * * time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY; */ diff -Nru a/drivers/acpi/numa.c b/drivers/acpi/numa.c --- a/drivers/acpi/numa.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/numa.c 2004-08-25 19:22:27 -07:00 @@ -94,8 +94,6 @@ /* downcast just for %llu vs %lu for i386/ia64 */ localities = (u32) slit->localities; - printk(KERN_INFO PREFIX "SLIT localities %ux%u\n", localities, localities); - acpi_numa_slit_init(slit); return 0; @@ -147,8 +145,6 @@ return -EINVAL; srat = (struct acpi_table_srat *) __va(phys_addr); - - printk(KERN_INFO PREFIX "SRAT revision %d\n", srat->table_revision); return 0; } diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c --- a/drivers/acpi/pci_link.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/pci_link.c 2004-08-25 19:22:27 -07:00 @@ -448,7 +448,7 @@ #define PIRQ_PENALTY_ISA_USED (16*16*16*16*16) #define PIRQ_PENALTY_ISA_ALWAYS (16*16*16*16*16*16) -static int __initdata acpi_irq_penalty[ACPI_MAX_IRQS] = { +static int acpi_irq_penalty[ACPI_MAX_IRQS] = { PIRQ_PENALTY_ISA_ALWAYS, /* IRQ0 timer */ PIRQ_PENALTY_ISA_ALWAYS, /* IRQ1 keyboard */ PIRQ_PENALTY_ISA_ALWAYS, /* IRQ2 cascade */ @@ -468,7 +468,7 @@ /* >IRQ15 */ }; -int +int __init acpi_irq_penalty_init(void) { struct list_head *node = NULL; diff -Nru a/drivers/acpi/tables.c b/drivers/acpi/tables.c --- a/drivers/acpi/tables.c 2004-08-25 19:22:27 -07:00 +++ b/drivers/acpi/tables.c 2004-08-25 19:22:27 -07:00 @@ -101,7 +101,7 @@ else name = header->signature; - printk(KERN_INFO PREFIX "%.4s (v%3.3d %6.6s %8.8s 0x%08x %.4s 0x%08x) @ 0x%p\n", + printk(KERN_DEBUG PREFIX "%.4s (v%3.3d %6.6s %8.8s 0x%08x %.4s 0x%08x) @ 0x%p\n", name, header->revision, header->oem_id, header->oem_table_id, header->oem_revision, header->asl_compiler_id, header->asl_compiler_revision, @@ -587,7 +587,7 @@ return -ENODEV; } - printk(KERN_INFO PREFIX "RSDP (v%3.3d %6.6s ) @ 0x%p\n", + printk(KERN_DEBUG PREFIX "RSDP (v%3.3d %6.6s ) @ 0x%p\n", rsdp->revision, rsdp->oem_id, (void *) rsdp_phys); if (rsdp->revision < 2) diff -Nru a/include/acpi/acconfig.h b/include/acpi/acconfig.h --- a/include/acpi/acconfig.h 2004-08-25 19:22:27 -07:00 +++ b/include/acpi/acconfig.h 2004-08-25 19:22:27 -07:00 @@ -64,7 +64,7 @@ /* Version string */ -#define ACPI_CA_VERSION 0x20040715 +#define ACPI_CA_VERSION 0x20040816 /* * OS name, used for the _OS object. The _OS object is essentially obsolete, diff -Nru a/include/acpi/acexcep.h b/include/acpi/acexcep.h --- a/include/acpi/acexcep.h 2004-08-25 19:22:27 -07:00 +++ b/include/acpi/acexcep.h 2004-08-25 19:22:27 -07:00 @@ -166,7 +166,7 @@ #define AE_AML_CIRCULAR_REFERENCE (acpi_status) (0x0020 | AE_CODE_AML) #define AE_AML_BAD_RESOURCE_LENGTH (acpi_status) (0x0021 | AE_CODE_AML) -#define AE_CODE_AML_MAX 0x0020 +#define AE_CODE_AML_MAX 0x0021 /* * Internal exceptions used for control diff -Nru a/include/acpi/acglobal.h b/include/acpi/acglobal.h --- a/include/acpi/acglobal.h 2004-08-25 19:22:27 -07:00 +++ b/include/acpi/acglobal.h 2004-08-25 19:22:27 -07:00 @@ -94,7 +94,7 @@ * interpreter strictly follows the ACPI specification. Setting to TRUE * allows the interpreter to forgive certain bad AML constructs. */ -ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_enable_interpeter_slack, FALSE); +ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_enable_interpreter_slack, FALSE); /* * Automatically serialize ALL control methods? Default is FALSE, meaning diff -Nru a/include/acpi/acmacros.h b/include/acpi/acmacros.h --- a/include/acpi/acmacros.h 2004-08-25 19:22:27 -07:00 +++ b/include/acpi/acmacros.h 2004-08-25 19:22:27 -07:00 @@ -364,24 +364,6 @@ #define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7')) -/* Macros for GAS addressing */ - -#if ACPI_MACHINE_WIDTH != 16 - -#define ACPI_PCI_DEVICE(a) (u16) ((ACPI_HIDWORD ((a))) & 0x0000FFFF) -#define ACPI_PCI_FUNCTION(a) (u16) ((ACPI_LODWORD ((a))) >> 16) -#define ACPI_PCI_REGISTER(a) (u16) ((ACPI_LODWORD ((a))) & 0x0000FFFF) - -#else - -/* No support for GAS and PCI IDs in 16-bit mode */ - -#define ACPI_PCI_FUNCTION(a) (u16) ((a) & 0xFFFF0000) -#define ACPI_PCI_DEVICE(a) (u16) ((a) & 0x0000FFFF) -#define ACPI_PCI_REGISTER(a) (u16) ((a) & 0x0000FFFF) - -#endif - /* Bitfields within ACPI registers */ diff -Nru a/include/asm-x86_64/acpi.h b/include/asm-x86_64/acpi.h --- a/include/asm-x86_64/acpi.h 2004-08-25 19:22:27 -07:00 +++ b/include/asm-x86_64/acpi.h 2004-08-25 19:22:27 -07:00 @@ -164,6 +164,10 @@ extern int acpi_disabled; extern int acpi_pci_disabled; +#define dmi_broken (0) +#define BROKEN_ACPI_Sx 0x0001 +#define BROKEN_INIT_AFTER_S1 0x0002 + extern u8 x86_acpiid_to_apicid[]; #endif /*__KERNEL__*/