summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2004-10-04 04:11:50 -0400
committerLen Brown <len.brown@intel.com>2004-10-04 04:11:50 -0400
commite51b486367bb89fc81abffd6656208a9d73d21fa (patch)
treeefc2dfdd8dfa155dd8a0d3a41cb3271df7e5cd3f
parentedd2ffb9554da34b1e26ed5556e5a54180618c7b (diff)
parent6605e0d867f1c44b943c2e06c1aba7268bb2c1bc (diff)
Merge intel.com:/home/lenb/bk/26-latest-ref
into intel.com:/home/lenb/src/26-latest-dev
-rw-r--r--Documentation/kernel-parameters.txt14
-rw-r--r--arch/i386/kernel/acpi/boot.c13
-rw-r--r--arch/i386/kernel/dmi_scan.c39
-rw-r--r--arch/i386/kernel/io_apic.c10
-rw-r--r--arch/i386/pci/mmconfig.c7
-rw-r--r--arch/x86_64/kernel/io_apic.c10
-rw-r--r--drivers/acpi/Kconfig27
-rw-r--r--drivers/acpi/blacklist.c44
-rw-r--r--drivers/acpi/bus.c12
-rw-r--r--drivers/acpi/debug.c105
-rw-r--r--drivers/acpi/dispatcher/dsmethod.c52
-rw-r--r--drivers/acpi/dispatcher/dsutils.c53
-rw-r--r--drivers/acpi/events/evgpe.c6
-rw-r--r--drivers/acpi/events/evmisc.c32
-rw-r--r--drivers/acpi/events/evregion.c17
-rw-r--r--drivers/acpi/events/evrgnini.c12
-rw-r--r--drivers/acpi/events/evxface.c11
-rw-r--r--drivers/acpi/executer/exfldio.c37
-rw-r--r--drivers/acpi/hardware/hwgpe.c2
-rw-r--r--drivers/acpi/hardware/hwregs.c70
-rw-r--r--drivers/acpi/hardware/hwtimer.c28
-rw-r--r--drivers/acpi/numa.c16
-rw-r--r--drivers/acpi/osl.c10
-rw-r--r--drivers/acpi/pci_link.c4
-rw-r--r--drivers/acpi/tables.c4
-rw-r--r--drivers/acpi/utilities/utglobal.c9
-rw-r--r--include/acpi/acconfig.h2
-rw-r--r--include/acpi/acexcep.h2
-rw-r--r--include/acpi/acglobal.h2
-rw-r--r--include/acpi/acmacros.h18
-rw-r--r--include/acpi/acpi_drivers.h55
-rw-r--r--include/linux/acpi.h7
32 files changed, 402 insertions, 328 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 76bf2339ae54..e7ea0b7a6496 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -135,6 +135,20 @@ running once the system is up.
Recognize and ignore IRQ0/pin2 Interrupt Override.
For broken nForce2 BIOS resulting in XT-PIC timer.
+ acpi_dbg_layer= [HW,ACPI]
+ Format: <int>
+ Each bit of the <int> indicates an acpi debug layer,
+ 1: enable, 0: disable. It is useful for boot time
+ debugging. After system has booted up, it can be set
+ via /proc/acpi/debug_layer.
+
+ acpi_dbg_level= [HW,ACPI]
+ Format: <int>
+ Each bit of the <int> indicates an acpi debug level,
+ 1: enable, 0: disable. It is useful for boot time
+ debugging. After system has booted up, it can be set
+ via /proc/acpi/debug_level.
+
ad1816= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>
See also Documentation/sound/oss/AD1816.
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index 5b56f6cd06b6..8a0536250dd3 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -71,6 +71,7 @@ int acpi_ht __initdata = 1; /* enable HT */
int acpi_lapic;
int acpi_ioapic;
int acpi_strict;
+EXPORT_SYMBOL(acpi_strict);
acpi_interrupt_flags acpi_sci_flags __initdata;
int acpi_sci_override_gsi __initdata;
@@ -829,9 +830,15 @@ acpi_boot_init (void)
*/
error = acpi_blacklisted();
if (error) {
- printk(KERN_WARNING PREFIX "BIOS listed in blacklist, disabling ACPI support\n");
- disable_acpi();
- return error;
+ extern int acpi_force;
+
+ if (acpi_force) {
+ printk(KERN_WARNING PREFIX "acpi=force override\n");
+ } else {
+ printk(KERN_WARNING PREFIX "Disabling ACPI support\n");
+ disable_acpi();
+ return error;
+ }
}
/*
diff --git a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c
index 669470b42c59..d4f4a5aff0f7 100644
--- a/arch/i386/kernel/dmi_scan.c
+++ b/arch/i386/kernel/dmi_scan.c
@@ -4,7 +4,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
-#include <asm/acpi.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#include <linux/pm.h>
#include <asm/system.h>
@@ -443,41 +443,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
{ NULL, }
};
-
-
-/*
- * Walk the blacklist table running matching functions until someone
- * returns 1 or we hit the end.
- */
-
-
-static __init void dmi_check_blacklist(void)
-{
-#ifdef CONFIG_ACPI_BOOT
-#define ACPI_BLACKLIST_CUTOFF_YEAR 2001
-
- if (dmi_ident[DMI_BIOS_DATE]) {
- char *s = strrchr(dmi_ident[DMI_BIOS_DATE], '/');
- if (s) {
- int year, disable = 0;
- s++;
- year = simple_strtoul(s,NULL,0);
- if (year >= 1000)
- disable = year < ACPI_BLACKLIST_CUTOFF_YEAR;
- else if (year < 1 || (year > 90 && year <= 99))
- disable = 1;
- if (disable && !acpi_force) {
- printk(KERN_NOTICE "ACPI disabled because your bios is from %s and too old\n", s);
- printk(KERN_NOTICE "You can enable it with acpi=force\n");
- disable_acpi();
- }
- }
- }
-#endif
- dmi_check_system(dmi_blacklist);
-}
-
-
/*
* Process a DMI table entry. Right now all we care about are the BIOS
@@ -535,7 +500,7 @@ void __init dmi_scan_machine(void)
{
int err = dmi_iterate(dmi_decode);
if(err == 0)
- dmi_check_blacklist();
+ dmi_check_system(dmi_blacklist);
else
printk(KERN_INFO "DMI not present.\n");
}
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
index 0a24c04af187..1577934644e7 100644
--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@@ -2520,15 +2520,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq,
edge_level, active_high_low);
- if (use_pci_vector() && !platform_legacy_irq(irq))
- irq = IO_APIC_VECTOR(irq);
- if (edge_level) {
- irq_desc[irq].handler = &ioapic_level_type;
- } else {
- irq_desc[irq].handler = &ioapic_edge_type;
- }
-
- set_intr_gate(entry.vector, interrupt[irq]);
+ ioapic_register_intr(irq, entry.vector, edge_level);
if (!ioapic && (irq < 16))
disable_8259A_irq(irq);
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c
index 3b1acd7356f5..f42c45305bb5 100644
--- a/arch/i386/pci/mmconfig.c
+++ b/arch/i386/pci/mmconfig.c
@@ -1,4 +1,11 @@
/*
+ * Copyright (C) 2004 Matthew Wilcox <matthew@wil.cx>
+ * Copyright (C) 2004 Intel Corp.
+ *
+ * This code is released under the GNU General Public License version 2.
+ */
+
+/*
* mmconfig.c - Low-level direct PCI config space access via MMCONFIG
*/
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index 1647afd7e514..8b4e29d4b5ed 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -2029,15 +2029,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq,
edge_level, active_high_low);
- if (use_pci_vector() && !platform_legacy_irq(irq))
- irq = IO_APIC_VECTOR(irq);
- if (edge_level) {
- irq_desc[irq].handler = &ioapic_level_type;
- } else {
- irq_desc[irq].handler = &ioapic_edge_type;
- }
-
- set_intr_gate(entry.vector, interrupt[irq]);
+ ioapic_register_intr(irq, entry.vector, edge_level);
if (!ioapic && (irq < 16))
disable_8259A_irq(irq);
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index a742764dbe6b..37eb4f62314d 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -204,6 +204,33 @@ config ACPI_TOSHIBA
If you have a legacy free Toshiba laptop (such as the Libretto L1
series), say Y.
+config ACPI_CUSTOM_DSDT
+ bool "Include Custom DSDT"
+ depends on X86
+ depends on ACPI_INTERPRETER
+ default n
+ help
+ Thist option is to load a custom ACPI DSDT
+ If you don't know what that is, say N.
+
+config ACPI_CUSTOM_DSDT_FILE
+ string "Custom DSDT Table file to include"
+ depends on ACPI_CUSTOM_DSDT
+ default ""
+ help
+ Enter the full path name to the file wich includes the AmlCode declaration.
+
+config ACPI_BLACKLIST_YEAR
+ int "Disable ACPI for systems before Jan 1st this year"
+ default 0
+ help
+ enter a 4-digit year, eg. 2001 to disable ACPI by default
+ on platforms with DMI BIOS date before January 1st that year.
+ "acpi=force" can be used to override this mechanism.
+
+ Enter 0 to disable this mechanism and allow ACPI to
+ run by default no matter what the year. (default)
+
config ACPI_DEBUG
bool "Debug Statements"
depends on ACPI_INTERPRETER
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
index d93fc733e595..4c010e7f11b8 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -2,7 +2,9 @@
* blacklist.c
*
* Check to see if the given machine has a known bad ACPI BIOS
+ * or if the BIOS is too old.
*
+ * Copyright (C) 2004 Len Brown <len.brown@intel.com>
* Copyright (C) 2002 Andy Grover <andrew.grover@intel.com>
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -30,6 +32,7 @@
#include <linux/init.h>
#include <linux/acpi.h>
#include <acpi/acpi_bus.h>
+#include <linux/dmi.h>
enum acpi_blacklist_predicates
{
@@ -70,6 +73,45 @@ static struct acpi_blacklist_item acpi_blacklist[] __initdata =
};
+#if CONFIG_ACPI_BLACKLIST_YEAR
+
+static int __init
+blacklist_by_year(void)
+{
+ int year;
+ char *s = dmi_get_system_info(DMI_BIOS_DATE);
+
+ if (!s)
+ return 0;
+ if (!*s)
+ return 0;
+
+ s = strrchr(s, '/');
+ if (!s)
+ return 0;
+
+ s += 1;
+
+ year = simple_strtoul(s,NULL,0);
+
+ if (year < 100) { /* 2-digit year */
+ year += 1900;
+ if (year < 1996) /* no dates < spec 1.0 */
+ year += 100;
+ }
+
+ if (year < CONFIG_ACPI_BLACKLIST_YEAR) {
+ printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), "
+ "acpi=force is required to enable ACPI\n",
+ year, CONFIG_ACPI_BLACKLIST_YEAR);
+ return 1;
+ }
+ return 0;
+}
+#else
+static inline int blacklist_by_year(void) { return 0; }
+#endif
+
int __init
acpi_blacklisted(void)
{
@@ -120,6 +162,8 @@ acpi_blacklisted(void)
}
}
+ blacklisted += blacklist_by_year();
+
return blacklisted;
}
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index c99c4e54e09f..4c303e19ebff 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -596,7 +596,14 @@ acpi_early_init (void)
acpi_status status = AE_OK;
struct acpi_buffer buffer = {sizeof(acpi_fadt), &acpi_fadt};
- ACPI_FUNCTION_TRACE("acpi_bus_init");
+ ACPI_FUNCTION_TRACE("acpi_early_init");
+
+ if (acpi_disabled)
+ return;
+
+ /* enable workarounds, unless strict ACPI spec. compliance */
+ if (!acpi_strict)
+ acpi_gbl_enable_interpreter_slack = TRUE;
status = acpi_initialize_subsystem();
if (ACPI_FAILURE(status)) {
@@ -734,9 +741,6 @@ static int __init acpi_init (void)
printk(KERN_INFO PREFIX "Subsystem revision %08x\n",
ACPI_CA_VERSION);
- /* Initial core debug level excludes drivers, so include them now */
- acpi_set_debug(ACPI_DEBUG_LOW);
-
if (acpi_disabled) {
printk(KERN_INFO PREFIX "Interpreter disabled.\n");
return -ENODEV;
diff --git a/drivers/acpi/debug.c b/drivers/acpi/debug.c
index 585f59db4af9..9fb8caedbed1 100644
--- a/drivers/acpi/debug.c
+++ b/drivers/acpi/debug.c
@@ -4,6 +4,7 @@
#include <linux/proc_fs.h>
#include <linux/init.h>
+#include <linux/moduleparam.h>
#include <asm/uaccess.h>
#include <acpi/acpi_drivers.h>
@@ -13,6 +14,81 @@ ACPI_MODULE_NAME ("debug")
#define ACPI_SYSTEM_FILE_DEBUG_LAYER "debug_layer"
#define ACPI_SYSTEM_FILE_DEBUG_LEVEL "debug_level"
+#ifdef MODULE_PARAM_PREFIX
+#undef MODULE_PARAM_PREFIX
+#endif
+
+#define MODULE_PARAM_PREFIX
+module_param(acpi_dbg_layer, uint, 0400);
+module_param(acpi_dbg_level, uint, 0400);
+
+struct acpi_dlayer {
+ const char *name;
+ unsigned long value;
+};
+struct acpi_dlevel {
+ const char *name;
+ unsigned long value;
+};
+#define ACPI_DEBUG_INIT(v) { .name = #v, .value = v }
+
+const struct acpi_dlayer acpi_debug_layers[] =
+{
+ ACPI_DEBUG_INIT(ACPI_UTILITIES),
+ ACPI_DEBUG_INIT(ACPI_HARDWARE),
+ ACPI_DEBUG_INIT(ACPI_EVENTS),
+ ACPI_DEBUG_INIT(ACPI_TABLES),
+ ACPI_DEBUG_INIT(ACPI_NAMESPACE),
+ ACPI_DEBUG_INIT(ACPI_PARSER),
+ ACPI_DEBUG_INIT(ACPI_DISPATCHER),
+ ACPI_DEBUG_INIT(ACPI_EXECUTER),
+ ACPI_DEBUG_INIT(ACPI_RESOURCES),
+ ACPI_DEBUG_INIT(ACPI_CA_DEBUGGER),
+ ACPI_DEBUG_INIT(ACPI_OS_SERVICES),
+ ACPI_DEBUG_INIT(ACPI_CA_DISASSEMBLER),
+ ACPI_DEBUG_INIT(ACPI_COMPILER),
+ ACPI_DEBUG_INIT(ACPI_TOOLS),
+};
+
+const struct acpi_dlevel acpi_debug_levels[] =
+{
+ ACPI_DEBUG_INIT(ACPI_LV_ERROR),
+ ACPI_DEBUG_INIT(ACPI_LV_WARN),
+ ACPI_DEBUG_INIT(ACPI_LV_INIT),
+ ACPI_DEBUG_INIT(ACPI_LV_DEBUG_OBJECT),
+ ACPI_DEBUG_INIT(ACPI_LV_INFO),
+
+ ACPI_DEBUG_INIT(ACPI_LV_INIT_NAMES),
+ ACPI_DEBUG_INIT(ACPI_LV_PARSE),
+ ACPI_DEBUG_INIT(ACPI_LV_LOAD),
+ ACPI_DEBUG_INIT(ACPI_LV_DISPATCH),
+ ACPI_DEBUG_INIT(ACPI_LV_EXEC),
+ ACPI_DEBUG_INIT(ACPI_LV_NAMES),
+ ACPI_DEBUG_INIT(ACPI_LV_OPREGION),
+ ACPI_DEBUG_INIT(ACPI_LV_BFIELD),
+ ACPI_DEBUG_INIT(ACPI_LV_TABLES),
+ ACPI_DEBUG_INIT(ACPI_LV_VALUES),
+ ACPI_DEBUG_INIT(ACPI_LV_OBJECTS),
+ ACPI_DEBUG_INIT(ACPI_LV_RESOURCES),
+ ACPI_DEBUG_INIT(ACPI_LV_USER_REQUESTS),
+ ACPI_DEBUG_INIT(ACPI_LV_PACKAGE),
+
+ ACPI_DEBUG_INIT(ACPI_LV_ALLOCATIONS),
+ ACPI_DEBUG_INIT(ACPI_LV_FUNCTIONS),
+ ACPI_DEBUG_INIT(ACPI_LV_OPTIMIZATIONS),
+
+ ACPI_DEBUG_INIT(ACPI_LV_MUTEX),
+ ACPI_DEBUG_INIT(ACPI_LV_THREADS),
+ ACPI_DEBUG_INIT(ACPI_LV_IO),
+ ACPI_DEBUG_INIT(ACPI_LV_INTERRUPTS),
+
+ ACPI_DEBUG_INIT(ACPI_LV_AML_DISASSEMBLE),
+ ACPI_DEBUG_INIT(ACPI_LV_VERBOSE_INFO),
+ ACPI_DEBUG_INIT(ACPI_LV_FULL_TABLES),
+ ACPI_DEBUG_INIT(ACPI_LV_EVENTS),
+};
+#define NUM_OF(v) ( sizeof(v)/sizeof(v[0]) )
+
static int
acpi_system_read_debug (
char *page,
@@ -24,16 +100,41 @@ acpi_system_read_debug (
{
char *p = page;
int size = 0;
+ int i;
if (off != 0)
goto end;
+ p += sprintf(p, "%-25s\tHex SET\n", "Description");
+
switch ((unsigned long) data) {
case 0:
- p += sprintf(p, "0x%08x\n", acpi_dbg_layer);
+ for (i = 0; i < NUM_OF(acpi_debug_layers); i++) {
+ p += sprintf(p, "%-25s\t0x%08lX [%c]\n",
+ acpi_debug_layers[i].name,
+ acpi_debug_layers[i].value,
+ (acpi_dbg_layer & acpi_debug_layers[i].value) ?
+ '*' : ' ');
+ }
+ p += sprintf(p, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS",
+ ACPI_ALL_DRIVERS,
+ (acpi_dbg_layer & ACPI_ALL_DRIVERS) == ACPI_ALL_DRIVERS?
+ '*' : (acpi_dbg_layer & ACPI_ALL_DRIVERS) == 0 ?
+ ' ' : '-');
+ p += sprintf(p,
+ "--\ndebug_layer = 0x%08X (* = enabled, - = partial)\n",
+ acpi_dbg_layer);
break;
case 1:
- p += sprintf(p, "0x%08x\n", acpi_dbg_level);
+ for (i = 0; i < NUM_OF(acpi_debug_levels); i++) {
+ p += sprintf(p, "%-25s\t0x%08lX [%c]\n",
+ acpi_debug_levels[i].name,
+ acpi_debug_levels[i].value,
+ (acpi_dbg_level & acpi_debug_levels[i].value) ?
+ '*' : ' ');
+ }
+ p += sprintf(p, "--\ndebug_level = 0x%08X (* = enabled)\n",
+ acpi_dbg_level);
break;
default:
p += sprintf(p, "Invalid debug option\n");
diff --git a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c
index afe8f55c2d72..4fd369018ce2 100644
--- a/drivers/acpi/dispatcher/dsmethod.c
+++ b/drivers/acpi/dispatcher/dsmethod.c
@@ -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 @@ acpi_ds_parse_method (
* increments the thread count, and waits at the method semaphore
* for clearance to execute.
*
- * MUTEX: Locks/unlocks parser.
- *
******************************************************************************/
acpi_status
@@ -251,7 +246,8 @@ acpi_ds_begin_method_execution (
*
* 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 @@ cleanup:
*
* 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_ds_restart_control_method (
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 {
/*
@@ -442,11 +457,6 @@ acpi_ds_restart_control_method (
}
}
- 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 --git a/drivers/acpi/dispatcher/dsutils.c b/drivers/acpi/dispatcher/dsutils.c
index 5c6a37e057dc..24462789ad00 100644
--- a/drivers/acpi/dispatcher/dsutils.c
+++ b/drivers/acpi/dispatcher/dsutils.c
@@ -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 @@ acpi_ds_is_result_used (
}
/*
- * 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 @@ result_not_used:
*
* 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 @@ acpi_ds_clear_operands (
*
* 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 --git a/drivers/acpi/events/evgpe.c b/drivers/acpi/events/evgpe.c
index 5a1191c671bb..afb36886bfac 100644
--- a/drivers/acpi/events/evgpe.c
+++ b/drivers/acpi/events/evgpe.c
@@ -102,6 +102,8 @@ acpi_ev_set_gpe_type (
* 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 @@ acpi_ev_update_gpe_enable_masks (
* 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 @@ acpi_ev_gpe_dispatch (
#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 --git a/drivers/acpi/events/evmisc.c b/drivers/acpi/events/evmisc.c
index 888d5cec5d7b..35e61d5221a4 100644
--- a/drivers/acpi/events/evmisc.c
+++ b/drivers/acpi/events/evmisc.c
@@ -88,9 +88,10 @@ acpi_ev_is_notify_object (
*
* 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 @@ acpi_ev_queue_notify_request (
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 @@ acpi_ev_queue_notify_request (
}
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 @@ acpi_ev_queue_notify_request (
*
* FUNCTION: acpi_ev_notify_dispatch
*
- * PARAMETERS:
+ * PARAMETERS: Context - To be passsed to the notify handler
*
* RETURN: None.
*
@@ -275,6 +277,8 @@ acpi_ev_notify_dispatch (
*
* 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 @@ acpi_ev_global_lock_thread (
*
* 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 @@ acpi_ev_global_lock_handler (
*
* 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 @@ acpi_ev_init_global_lock_handler (void)
*
* 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.
@@ -461,6 +471,10 @@ acpi_ev_acquire_global_lock (
*
* FUNCTION: acpi_ev_release_global_lock
*
+ * PARAMETERS: None
+ *
+ * RETURN: Status
+ *
* DESCRIPTION: Releases ownership of the Global Lock.
*
******************************************************************************/
diff --git a/drivers/acpi/events/evregion.c b/drivers/acpi/events/evregion.c
index 1a98937586da..b7ff3b162944 100644
--- a/drivers/acpi/events/evregion.c
+++ b/drivers/acpi/events/evregion.c
@@ -180,7 +180,7 @@ acpi_ev_initialize_op_regions (
* 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 @@ acpi_ev_execute_reg_method (
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 @@ cleanup:
* 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 @@ acpi_ev_address_space_dispatch (
*
* 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 @@ acpi_ev_detach_region(
*
* 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 @@ unlock_and_exit:
*
* 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 --git a/drivers/acpi/events/evrgnini.c b/drivers/acpi/events/evrgnini.c
index 2e480d301f71..e19d82297711 100644
--- a/drivers/acpi/events/evrgnini.c
+++ b/drivers/acpi/events/evrgnini.c
@@ -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 @@ acpi_ev_system_memory_region_setup (
*
* 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 @@ acpi_ev_io_space_region_setup (
*
* 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 @@ acpi_ev_pci_config_region_setup (
*
* 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 @@ acpi_ev_pci_bar_region_setup (
*
* 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 @@ acpi_ev_cmos_region_setup (
*
* 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 --git a/drivers/acpi/events/evxface.c b/drivers/acpi/events/evxface.c
index 15ff704911c6..26e9b0e41565 100644
--- a/drivers/acpi/events/evxface.c
+++ b/drivers/acpi/events/evxface.c
@@ -359,6 +359,7 @@ unlock_and_exit:
* 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 @@ acpi_remove_notify_handler (
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 @@ acpi_remove_notify_handler (
}
}
- /*
- * All Other Objects
- */
+ /* All Other Objects */
+
else {
/* Notifies allowed on this object? */
diff --git a/drivers/acpi/executer/exfldio.c b/drivers/acpi/executer/exfldio.c
index 09e02851d1e7..03ccfb9e10f0 100644
--- a/drivers/acpi/executer/exfldio.c
+++ b/drivers/acpi/executer/exfldio.c
@@ -130,7 +130,7 @@ acpi_ex_setup_region (
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 @@ acpi_ex_setup_region (
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 --git a/drivers/acpi/hardware/hwgpe.c b/drivers/acpi/hardware/hwgpe.c
index dacef55cf548..3910b5ec9f3a 100644
--- a/drivers/acpi/hardware/hwgpe.c
+++ b/drivers/acpi/hardware/hwgpe.c
@@ -96,7 +96,7 @@ acpi_hw_write_gpe_enable_reg (
*
* 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 --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c
index 40a18c8513fa..cb998fe9e970 100644
--- a/drivers/acpi/hardware/hwregs.c
+++ b/drivers/acpi/hardware/hwregs.c
@@ -249,8 +249,8 @@ acpi_hw_get_bit_register_info (
* 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 @@ acpi_get_register (
}
}
+ /* Read from the register */
+
status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
bit_reg_info->parent_register, &register_value);
@@ -313,10 +315,10 @@ acpi_get_register (
*
* 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 @@ unlock_and_exit:
*
* 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 @@ unlock_and_exit:
*
* 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 @@ unlock_and_exit:
*
* 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 @@ acpi_hw_low_level_read (
u32 *value,
struct acpi_generic_address *reg)
{
- struct acpi_pci_id pci_id;
- u16 pci_register;
acpi_status status;
@@ -725,8 +727,8 @@ acpi_hw_low_level_read (
*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 @@ acpi_hw_low_level_read (
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 @@ acpi_hw_low_level_read (
*
* 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 @@ acpi_hw_low_level_write (
u32 value,
struct acpi_generic_address *reg)
{
- struct acpi_pci_id pci_id;
- u16 pci_register;
acpi_status status;
@@ -811,8 +798,8 @@ acpi_hw_low_level_write (
}
/*
- * 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:
@@ -830,19 +817,6 @@ acpi_hw_low_level_write (
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;
-
-
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Unsupported address space: %X\n", reg->address_space_id));
diff --git a/drivers/acpi/hardware/hwtimer.c b/drivers/acpi/hardware/hwtimer.c
index 8878aff9d336..1f94d6ffa9f8 100644
--- a/drivers/acpi/hardware/hwtimer.c
+++ b/drivers/acpi/hardware/hwtimer.c
@@ -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 @@ acpi_get_timer_resolution (
*
* 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 @@ acpi_get_timer (
*
* 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 @@ acpi_get_timer (
* 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 @@ acpi_get_timer_duration (
/*
* Compute Tick Delta:
- * -------------------
* Handle (max one) timer rollovers on 24- versus 32-bit timers.
*/
if (start_ticks < end_ticks) {
@@ -188,10 +187,7 @@ acpi_get_timer_duration (
}
/*
- * Compute Duration:
- * -----------------
- *
- * Requires a 64-bit divide:
+ * Compute Duration (Requires a 64-bit divide):
*
* time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY;
*/
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c
index 0646b2955c74..1f63b4d7109e 100644
--- a/drivers/acpi/numa.c
+++ b/drivers/acpi/numa.c
@@ -51,6 +51,7 @@ acpi_table_print_srat_entry (
switch (header->type) {
case ACPI_SRAT_PROCESSOR_AFFINITY:
+#ifdef ACPI_DEBUG_OUTPUT
{
struct acpi_table_processor_affinity *p =
(struct acpi_table_processor_affinity*) header;
@@ -58,9 +59,11 @@ acpi_table_print_srat_entry (
p->apic_id, p->lsapic_eid, p->proximity_domain,
p->flags.enabled?"enabled":"disabled"));
}
+#endif /* ACPI_DEBUG_OUTPUT */
break;
case ACPI_SRAT_MEMORY_AFFINITY:
+#ifdef ACPI_DEBUG_OUTPUT
{
struct acpi_table_memory_affinity *p =
(struct acpi_table_memory_affinity*) header;
@@ -70,6 +73,7 @@ acpi_table_print_srat_entry (
p->flags.enabled ? "enabled" : "disabled",
p->flags.hot_pluggable ? " hot-pluggable" : ""));
}
+#endif /* ACPI_DEBUG_OUTPUT */
break;
default:
@@ -94,8 +98,6 @@ acpi_parse_slit (unsigned long phys_addr, unsigned long size)
/* 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;
@@ -103,7 +105,9 @@ acpi_parse_slit (unsigned long phys_addr, unsigned long size)
static int __init
-acpi_parse_processor_affinity (acpi_table_entry_header *header)
+acpi_parse_processor_affinity (
+ acpi_table_entry_header *header,
+ const unsigned long end)
{
struct acpi_table_processor_affinity *processor_affinity;
@@ -121,7 +125,9 @@ acpi_parse_processor_affinity (acpi_table_entry_header *header)
static int __init
-acpi_parse_memory_affinity (acpi_table_entry_header *header)
+acpi_parse_memory_affinity (
+ acpi_table_entry_header *header,
+ const unsigned long end)
{
struct acpi_table_memory_affinity *memory_affinity;
@@ -148,8 +154,6 @@ acpi_parse_srat (unsigned long phys_addr, unsigned long size)
srat = (struct acpi_table_srat *) __va(phys_addr);
- printk(KERN_INFO PREFIX "SRAT revision %d\n", srat->table_revision);
-
return 0;
}
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index ae9027a4536a..a7c4fdfcbf85 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -55,6 +55,9 @@ struct acpi_os_dpc
void *context;
};
+#ifdef CONFIG_ACPI_CUSTOM_DSDT
+#include CONFIG_ACPI_CUSTOM_DSDT_FILE
+#endif
#ifdef ENABLE_DEBUGGER
#include <linux/kdb.h>
@@ -241,7 +244,14 @@ acpi_os_table_override (struct acpi_table_header *existing_table,
if (!existing_table || !new_table)
return AE_BAD_PARAMETER;
+#ifdef CONFIG_ACPI_CUSTOM_DSDT
+ if (strncmp(existing_table->signature, "DSDT", 4) == 0)
+ *new_table = (struct acpi_table_header*)AmlCode;
+ else
+ *new_table = NULL;
+#else
*new_table = NULL;
+#endif
return AE_OK;
}
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index 737b0db1f5d5..86e8a0ca0cb8 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -448,7 +448,7 @@ acpi_pci_link_set (
#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 @@ static int __initdata acpi_irq_penalty[ACPI_MAX_IRQS] = {
/* >IRQ15 */
};
-int
+int __init
acpi_irq_penalty_init(void)
{
struct list_head *node = NULL;
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index e7480822b0f7..fb64bd5d2e18 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -101,7 +101,7 @@ acpi_table_print (
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 @@ acpi_table_init (void)
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 --git a/drivers/acpi/utilities/utglobal.c b/drivers/acpi/utilities/utglobal.c
index 8daece8c2ca7..f42848ab7e70 100644
--- a/drivers/acpi/utilities/utglobal.c
+++ b/drivers/acpi/utilities/utglobal.c
@@ -142,16 +142,11 @@ unknown:
*/
/* Debug switch - level and trace mask */
-
-#ifdef ACPI_DEBUG_OUTPUT
-u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
-#else
-u32 acpi_dbg_level = ACPI_NORMAL_DEFAULT;
-#endif
+u32 acpi_dbg_level = 0;
/* Debug switch - layer (component) mask */
-u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT;
+u32 acpi_dbg_layer = 0;
u32 acpi_gbl_nesting_level = 0;
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
index f18824862e96..e4a0f1e6f814 100644
--- a/include/acpi/acconfig.h
+++ b/include/acpi/acconfig.h
@@ -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 --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h
index abda2357e543..1022cc2da61d 100644
--- a/include/acpi/acexcep.h
+++ b/include/acpi/acexcep.h
@@ -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 --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h
index 3d37785c2de4..eb16ee22e3d1 100644
--- a/include/acpi/acglobal.h
+++ b/include/acpi/acglobal.h
@@ -94,7 +94,7 @@ extern u32 acpi_gbl_nesting_level;
* 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 --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h
index eb2c5ebbb0e1..43c474ab8340 100644
--- a/include/acpi/acmacros.h
+++ b/include/acpi/acmacros.h
@@ -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 --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index 31f6c924cf0a..09097bb3e341 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -106,59 +106,4 @@ int acpi_ec_ecdt_probe (void);
int acpi_processor_set_thermal_limit(acpi_handle handle, int type);
-/* --------------------------------------------------------------------------
- Debug Support
- -------------------------------------------------------------------------- */
-
-#define ACPI_DEBUG_RESTORE 0
-#define ACPI_DEBUG_LOW 1
-#define ACPI_DEBUG_MEDIUM 2
-#define ACPI_DEBUG_HIGH 3
-#define ACPI_DEBUG_DRIVERS 4
-
-extern u32 acpi_dbg_level;
-extern u32 acpi_dbg_layer;
-
-static inline void
-acpi_set_debug (
- u32 flag)
-{
- static u32 layer_save;
- static u32 level_save;
-
- switch (flag) {
- case ACPI_DEBUG_RESTORE:
- acpi_dbg_layer = layer_save;
- acpi_dbg_level = level_save;
- break;
- case ACPI_DEBUG_LOW:
- case ACPI_DEBUG_MEDIUM:
- case ACPI_DEBUG_HIGH:
- case ACPI_DEBUG_DRIVERS:
- layer_save = acpi_dbg_layer;
- level_save = acpi_dbg_level;
- break;
- }
-
- switch (flag) {
- case ACPI_DEBUG_LOW:
- acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
- acpi_dbg_level = ACPI_DEBUG_DEFAULT;
- break;
- case ACPI_DEBUG_MEDIUM:
- acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
- acpi_dbg_level = ACPI_LV_FUNCTIONS | ACPI_LV_ALL_EXCEPTIONS;
- break;
- case ACPI_DEBUG_HIGH:
- acpi_dbg_layer = 0xFFFFFFFF;
- acpi_dbg_level = 0xFFFFFFFF;
- break;
- case ACPI_DEBUG_DRIVERS:
- acpi_dbg_layer = ACPI_ALL_DRIVERS;
- acpi_dbg_level = 0xFFFFFFFF;
- break;
- }
-}
-
-
#endif /*__ACPI_DRIVERS_H__*/
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index f82aa67ea6b8..041f660ec009 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -453,14 +453,15 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver);
#ifdef CONFIG_ACPI_EC
-int ec_read(u8 addr, u8 *val);
-int ec_write(u8 addr, u8 val);
+extern int ec_read(u8 addr, u8 *val);
+extern int ec_write(u8 addr, u8 val);
#endif /*CONFIG_ACPI_EC*/
#ifdef CONFIG_ACPI_INTERPRETER
-int acpi_blacklisted(void);
+extern int acpi_blacklisted(void);
+extern void acpi_bios_year(char *s);
#else /*!CONFIG_ACPI_INTERPRETER*/