Commit f028ebf3 authored by Linus Torvalds's avatar Linus Torvalds

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

into home.osdl.org:/home/torvalds/v2.5/linux
parents ef4604f8 9d363b8d
...@@ -284,6 +284,16 @@ P: Jonathan Layes ...@@ -284,6 +284,16 @@ P: Jonathan Layes
L: linux-net@vger.kernel.org L: linux-net@vger.kernel.org
S: Maintained S: Maintained
ASUS ACPI EXTRAS DRIVER
P: Karol Kozimor
M: sziwan@users.sourceforge.net
P: Julien Lerouge
M: julien.lerouge@free.fr
L: acpi4asus-user@lists.sourceforge.net
W: http://sourceforge.net/projects/acpi4asus
W: http://julien.lerouge.free.fr
S: Maintained
ATM ATM
P: Chas Williams P: Chas Williams
M: chas@cmf.nrl.navy.mil M: chas@cmf.nrl.navy.mil
......
...@@ -183,8 +183,7 @@ acpi_parse_lapic_nmi ( ...@@ -183,8 +183,7 @@ acpi_parse_lapic_nmi (
#endif /*CONFIG_X86_LOCAL_APIC*/ #endif /*CONFIG_X86_LOCAL_APIC*/
#ifdef CONFIG_X86_IO_APIC #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
static int __init static int __init
acpi_parse_ioapic ( acpi_parse_ioapic (
...@@ -368,7 +367,6 @@ acpi_boot_init (void) ...@@ -368,7 +367,6 @@ acpi_boot_init (void)
result = acpi_table_parse(ACPI_APIC, acpi_parse_madt); result = acpi_table_parse(ACPI_APIC, acpi_parse_madt);
if (!result) { if (!result) {
printk(KERN_WARNING PREFIX "MADT not present\n");
return 0; return 0;
} }
else if (result < 0) { else if (result < 0) {
...@@ -416,7 +414,7 @@ acpi_boot_init (void) ...@@ -416,7 +414,7 @@ acpi_boot_init (void)
#endif /*CONFIG_X86_LOCAL_APIC*/ #endif /*CONFIG_X86_LOCAL_APIC*/
#ifdef CONFIG_X86_IO_APIC #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
/* /*
* I/O APIC * I/O APIC
...@@ -472,7 +470,8 @@ acpi_boot_init (void) ...@@ -472,7 +470,8 @@ acpi_boot_init (void)
acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC; acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC;
acpi_ioapic = 1; acpi_ioapic = 1;
#endif /*CONFIG_X86_IO_APIC*/
#endif /* CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER */
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
if (acpi_lapic && acpi_ioapic) { if (acpi_lapic && acpi_ioapic) {
...@@ -480,6 +479,7 @@ acpi_boot_init (void) ...@@ -480,6 +479,7 @@ acpi_boot_init (void)
clustered_apic_check(); clustered_apic_check();
} }
#endif #endif
#ifdef CONFIG_HPET_TIMER #ifdef CONFIG_HPET_TIMER
acpi_table_parse(ACPI_HPET, acpi_parse_hpet); acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
#endif #endif
......
...@@ -231,7 +231,7 @@ acpi_processor_set_performance ( ...@@ -231,7 +231,7 @@ acpi_processor_set_performance (
int state) int state)
{ {
u16 port = 0; u16 port = 0;
u8 value = 0; u16 value = 0;
int i = 0; int i = 0;
struct cpufreq_freqs cpufreq_freqs; struct cpufreq_freqs cpufreq_freqs;
...@@ -282,9 +282,9 @@ acpi_processor_set_performance ( ...@@ -282,9 +282,9 @@ acpi_processor_set_performance (
value = (u16) perf->states[state].control; value = (u16) perf->states[state].control;
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Writing 0x%02x to port 0x%04x\n", value, port)); "Writing 0x%04x to port 0x%04x\n", value, port));
outb(value, port); outw(value, port);
/* /*
* Then we read the 'status_register' and compare the value with the * Then we read the 'status_register' and compare the value with the
...@@ -296,12 +296,12 @@ acpi_processor_set_performance ( ...@@ -296,12 +296,12 @@ acpi_processor_set_performance (
port = perf->status_register; port = perf->status_register;
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Looking for 0x%02x from port 0x%04x\n", "Looking for 0x%04x from port 0x%04x\n",
(u8) perf->states[state].status, port)); (u16) perf->states[state].status, port));
for (i=0; i<100; i++) { for (i=0; i<100; i++) {
value = inb(port); value = inw(port);
if (value == (u8) perf->states[state].status) if (value == (u16) perf->states[state].status)
break; break;
udelay(10); udelay(10);
} }
...@@ -309,7 +309,7 @@ acpi_processor_set_performance ( ...@@ -309,7 +309,7 @@ acpi_processor_set_performance (
/* notify cpufreq */ /* notify cpufreq */
cpufreq_notify_transition(&cpufreq_freqs, CPUFREQ_POSTCHANGE); cpufreq_notify_transition(&cpufreq_freqs, CPUFREQ_POSTCHANGE);
if (value != perf->states[state].status) { if (value != (u16) perf->states[state].status) {
unsigned int tmp = cpufreq_freqs.new; unsigned int tmp = cpufreq_freqs.new;
cpufreq_freqs.new = cpufreq_freqs.old; cpufreq_freqs.new = cpufreq_freqs.old;
cpufreq_freqs.old = tmp; cpufreq_freqs.old = tmp;
......
...@@ -939,11 +939,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -939,11 +939,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BOARD_NAME, "CUR-DLS"), MATCH(DMI_BOARD_NAME, "CUR-DLS"),
NO_MATCH, NO_MATCH }}, NO_MATCH, NO_MATCH }},
{ force_acpi_ht, "ASUS A7V", {
MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
MATCH(DMI_BOARD_NAME, "<A7V>"),
MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1011"), NO_MATCH }},
{ force_acpi_ht, "ABIT i440BX-W83977", { { force_acpi_ht, "ABIT i440BX-W83977", {
MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
...@@ -978,7 +973,10 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -978,7 +973,10 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
{ disable_acpi_pci, "ASUS A7V", { { disable_acpi_pci, "ASUS A7V", {
MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
MATCH(DMI_BOARD_NAME, "<A7V>"), MATCH(DMI_BOARD_NAME, "<A7V>"),
MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), NO_MATCH }}, /* newer BIOS, Revision 1011, does work */
MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"),
NO_MATCH }},
#endif #endif
{ NULL, } { NULL, }
......
...@@ -830,7 +830,7 @@ void __init mp_register_lapic ( ...@@ -830,7 +830,7 @@ void __init mp_register_lapic (
MP_processor_info(&processor); MP_processor_info(&processor);
} }
#ifdef CONFIG_X86_IO_APIC #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
#define MP_ISA_BUS 0 #define MP_ISA_BUS 0
#define MP_MAX_IOAPIC_PIN 127 #define MP_MAX_IOAPIC_PIN 127
...@@ -1019,10 +1019,6 @@ void __init mp_config_acpi_legacy_irqs (void) ...@@ -1019,10 +1019,6 @@ void __init mp_config_acpi_legacy_irqs (void)
} }
} }
#ifdef CONFIG_ACPI
/* Ensure the ACPI SCI interrupt level is active low, edge-triggered */
extern FADT_DESCRIPTOR acpi_fadt; extern FADT_DESCRIPTOR acpi_fadt;
void __init mp_config_ioapic_for_sci(int irq) void __init mp_config_ioapic_for_sci(int irq)
...@@ -1031,6 +1027,7 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1031,6 +1027,7 @@ void __init mp_config_ioapic_for_sci(int irq)
int ioapic_pin; int ioapic_pin;
struct acpi_table_madt *madt; struct acpi_table_madt *madt;
struct acpi_table_int_src_ovr *entry = NULL; struct acpi_table_int_src_ovr *entry = NULL;
acpi_interrupt_flags flags;
void *madt_end; void *madt_end;
acpi_status status; acpi_status status;
...@@ -1049,32 +1046,37 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1049,32 +1046,37 @@ void __init mp_config_ioapic_for_sci(int irq)
while ((void *) entry < madt_end) { while ((void *) entry < madt_end) {
if (entry->header.type == ACPI_MADT_INT_SRC_OVR && if (entry->header.type == ACPI_MADT_INT_SRC_OVR &&
acpi_fadt.sci_int == entry->bus_irq) { acpi_fadt.sci_int == entry->bus_irq)
goto found;
entry = (struct acpi_table_int_src_ovr *)
((unsigned long) entry + entry->header.length);
}
}
/*
* Although the ACPI spec says that the SCI should be level/low
* don't reprogram it unless there is an explicit MADT OVR entry
* instructing us to do so -- otherwise we break Tyan boards which
* have the SCI wired edge/high but no MADT OVR.
*/
return;
found:
/* /*
* See the note at the end of ACPI 2.0b section * See the note at the end of ACPI 2.0b section
* 5.2.10.8 for what this is about. * 5.2.10.8 for what this is about.
*/ */
if (entry->bus_irq != entry->global_irq) { flags = entry->flags;
acpi_fadt.sci_int = entry->global_irq; acpi_fadt.sci_int = entry->global_irq;
irq = entry->global_irq; irq = entry->global_irq;
break;
}
else
return;
}
entry = (struct acpi_table_int_src_ovr *)
((unsigned long) entry + entry->header.length);
}
}
ioapic = mp_find_ioapic(irq); ioapic = mp_find_ioapic(irq);
ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start;
io_apic_set_pci_routing(ioapic, ioapic_pin, irq, 1, 1); // Active low, level triggered io_apic_set_pci_routing(ioapic, ioapic_pin, irq,
(flags.trigger >> 1) , (flags.polarity >> 1));
} }
#endif /* CONFIG_ACPI */
#ifdef CONFIG_ACPI_PCI #ifdef CONFIG_ACPI_PCI
...@@ -1110,8 +1112,10 @@ void __init mp_parse_prt (void) ...@@ -1110,8 +1112,10 @@ void __init mp_parse_prt (void)
} }
/* Don't set up the ACPI SCI because it's already set up */ /* Don't set up the ACPI SCI because it's already set up */
if (acpi_fadt.sci_int == irq) if (acpi_fadt.sci_int == irq) {
entry->irq = irq; /*we still need to set entry's irq*/
continue; continue;
}
ioapic = mp_find_ioapic(irq); ioapic = mp_find_ioapic(irq);
if (ioapic < 0) if (ioapic < 0)
...@@ -1154,5 +1158,5 @@ void __init mp_parse_prt (void) ...@@ -1154,5 +1158,5 @@ void __init mp_parse_prt (void)
} }
#endif /*CONFIG_ACPI_PCI*/ #endif /*CONFIG_ACPI_PCI*/
#endif /* CONFIG_X86_IO_APIC */ #endif /*CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER*/
#endif /*CONFIG_ACPI_BOOT*/ #endif /*CONFIG_ACPI_BOOT*/
...@@ -64,10 +64,10 @@ struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; ...@@ -64,10 +64,10 @@ struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
unsigned long mmu_cr4_features; unsigned long mmu_cr4_features;
EXPORT_SYMBOL_GPL(mmu_cr4_features); EXPORT_SYMBOL_GPL(mmu_cr4_features);
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI_INTERPRETER
int acpi_disabled __initdata = 0; int acpi_disabled = 0;
#else #else
int acpi_disabled __initdata = 1; int acpi_disabled = 1;
#endif #endif
EXPORT_SYMBOL(acpi_disabled); EXPORT_SYMBOL(acpi_disabled);
......
...@@ -56,7 +56,7 @@ void (*pm_power_off) (void); ...@@ -56,7 +56,7 @@ void (*pm_power_off) (void);
unsigned char acpi_kbd_controller_present = 1; unsigned char acpi_kbd_controller_present = 1;
int acpi_disabled __initdata; /* XXX this shouldn't be needed---we can't boot without ACPI! */ int acpi_disabled; /* XXX this shouldn't be needed---we can't boot without ACPI! */
const char * const char *
acpi_get_sysname (void) acpi_get_sysname (void)
......
...@@ -3,34 +3,14 @@ ...@@ -3,34 +3,14 @@
# #
menu "ACPI (Advanced Configuration and Power Interface) Support" menu "ACPI (Advanced Configuration and Power Interface) Support"
config ACPI_HT
bool "ACPI Processor Enumeration for HT"
depends on X86
default y
---help---
ACPI enumerates both logical (a.k.a. Hyper-Threaded -- HT)
and physical processors. It is designed to obsolete several older
specifications, including the MultiProcessor Specification (MPS),
which supported only physical processors.
CONFIG_ACPI_HT includes the minimal ACPI boot-time code
necessary to enumerate logical processors and enable HT.
CONFIG_ACPI includes CONFIG_ACPI_HT, plus IO APIC enumeration,
and the hooks to run the ACPI AML interpreter for run-time events.
When CONFIG_ACPI is selected, the command-line option "acpi=ht"
is available to run just the ACPI boot-time code -- just as if
only CONFIG_ACPI_HT were selected.
Note that "acpi=off" can be used to disable all ACPI code in the kernel.
config ACPI
bool "Full ACPI Support"
depends on !X86_VISWS depends on !X86_VISWS
depends on !IA64_HP_SIM depends on !IA64_HP_SIM
depends on IA64 || (X86 || ACPI_HT) depends on IA64 || X86
config ACPI
bool "ACPI Support"
depends on IA64 || X86
default y default y
---help--- ---help---
Advanced Configuration and Power Interface (ACPI) support for Advanced Configuration and Power Interface (ACPI) support for
...@@ -62,12 +42,19 @@ config ACPI ...@@ -62,12 +42,19 @@ config ACPI
config ACPI_BOOT config ACPI_BOOT
bool bool
depends on ACPI || ACPI_HT depends on ACPI || X86_HT
default y
config ACPI_INTERPRETER
bool
depends on ACPI
depends on !IA64_SGI_SN
default y default y
config ACPI_SLEEP config ACPI_SLEEP
bool "Sleep States (EXPERIMENTAL)" bool "Sleep States (EXPERIMENTAL)"
depends on X86 && ACPI depends on X86 && ACPI
depends on ACPI_INTERPRETER
depends on EXPERIMENTAL && PM depends on EXPERIMENTAL && PM
default y default y
---help--- ---help---
...@@ -93,7 +80,8 @@ config ACPI_SLEEP_PROC_FS ...@@ -93,7 +80,8 @@ config ACPI_SLEEP_PROC_FS
config ACPI_AC config ACPI_AC
tristate "AC Adapter" tristate "AC Adapter"
depends on X86 && ACPI depends on X86
depends on ACPI_INTERPRETER
default m default m
help help
This driver adds support for the AC Adapter object, which indicates This driver adds support for the AC Adapter object, which indicates
...@@ -102,7 +90,8 @@ config ACPI_AC ...@@ -102,7 +90,8 @@ config ACPI_AC
config ACPI_BATTERY config ACPI_BATTERY
tristate "Battery" tristate "Battery"
depends on X86 && ACPI depends on X86
depends on ACPI_INTERPRETER
default m default m
help help
This driver adds support for battery information through This driver adds support for battery information through
...@@ -111,7 +100,7 @@ config ACPI_BATTERY ...@@ -111,7 +100,7 @@ config ACPI_BATTERY
config ACPI_BUTTON config ACPI_BUTTON
tristate "Button" tristate "Button"
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default m default m
help help
...@@ -123,7 +112,7 @@ config ACPI_BUTTON ...@@ -123,7 +112,7 @@ config ACPI_BUTTON
config ACPI_FAN config ACPI_FAN
tristate "Fan" tristate "Fan"
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default m default m
help help
...@@ -132,7 +121,7 @@ config ACPI_FAN ...@@ -132,7 +121,7 @@ config ACPI_FAN
config ACPI_PROCESSOR config ACPI_PROCESSOR
tristate "Processor" tristate "Processor"
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default m default m
help help
...@@ -152,14 +141,15 @@ config ACPI_THERMAL ...@@ -152,14 +141,15 @@ config ACPI_THERMAL
config ACPI_NUMA config ACPI_NUMA
bool "NUMA support" bool "NUMA support"
depends on ACPI depends on ACPI_INTERPRETER
depends on NUMA depends on NUMA
depends on !X86_64 depends on !X86_64
default y if IA64_GENERIC || IA64_SGI_SN2 default y if IA64_GENERIC || IA64_SGI_SN2
config ACPI_ASUS config ACPI_ASUS
tristate "ASUS/Medion Laptop Extras" tristate "ASUS/Medion Laptop Extras"
depends on X86 && ACPI depends on X86
depends on ACPI_INTERPRETER
default m default m
---help--- ---help---
This driver provides support for extra features of ACPI-compatible This driver provides support for extra features of ACPI-compatible
...@@ -171,6 +161,9 @@ config ACPI_ASUS ...@@ -171,6 +161,9 @@ config ACPI_ASUS
and most importantly, allows you to blink those fancy LEDs intended and most importantly, allows you to blink those fancy LEDs intended
for reporting mail and wireless status. for reporting mail and wireless status.
Note: display switching code is currently considered EXPERIMENTAL,
toying with these values may even lock your machine.
All settings are changed via /proc/acpi/asus directory entries. Owner All settings are changed via /proc/acpi/asus directory entries. Owner
and group for these entries can be set with asus_uid and asus_gid and group for these entries can be set with asus_uid and asus_gid
parameters. parameters.
...@@ -185,7 +178,8 @@ config ACPI_ASUS ...@@ -185,7 +178,8 @@ config ACPI_ASUS
config ACPI_TOSHIBA config ACPI_TOSHIBA
tristate "Toshiba Laptop Extras" tristate "Toshiba Laptop Extras"
depends on X86 && ACPI depends on X86
depends on ACPI_INTERPRETER
default m default m
---help--- ---help---
This driver adds support for access to certain system settings This driver adds support for access to certain system settings
...@@ -212,7 +206,7 @@ config ACPI_TOSHIBA ...@@ -212,7 +206,7 @@ config ACPI_TOSHIBA
config ACPI_DEBUG config ACPI_DEBUG
bool "Debug Statements" bool "Debug Statements"
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default n default n
help help
...@@ -222,19 +216,14 @@ config ACPI_DEBUG ...@@ -222,19 +216,14 @@ config ACPI_DEBUG
config ACPI_BUS config ACPI_BUS
bool bool
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN
default y
config ACPI_INTERPRETER
bool
depends on ACPI
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default y default y
config ACPI_EC config ACPI_EC
bool bool
depends on X86 && ACPI depends on X86
depends on ACPI_INTERPRETER
default y default y
help help
This driver is required on some systems for the proper operation of This driver is required on some systems for the proper operation of
...@@ -243,19 +232,19 @@ config ACPI_EC ...@@ -243,19 +232,19 @@ config ACPI_EC
config ACPI_POWER config ACPI_POWER
bool bool
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default y default y
config ACPI_PCI config ACPI_PCI
bool bool
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default PCI default PCI
config ACPI_SYSTEM config ACPI_SYSTEM
bool bool
depends on ACPI depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN depends on !IA64_SGI_SN
default y default y
help help
...@@ -264,9 +253,21 @@ config ACPI_SYSTEM ...@@ -264,9 +253,21 @@ config ACPI_SYSTEM
config ACPI_EFI config ACPI_EFI
bool bool
depends on ACPI depends on ACPI_INTERPRETER
depends on IA64 depends on IA64
default y default y
config ACPI_RELAXED_AML
bool "Relaxed AML"
depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN
default n
help
If you say `Y' here, the ACPI interpreter will relax its checking
for valid AML and will ignore some AML mistakes, such as off-by-one
errors in region sizes. Some laptops may require this option. In
particular, many Toshiba laptops require this for correct operation
of the AC module.
endmenu endmenu
...@@ -18,7 +18,7 @@ obj-$(CONFIG_ACPI) := acpi_ksyms.o ...@@ -18,7 +18,7 @@ obj-$(CONFIG_ACPI) := acpi_ksyms.o
# ACPI Boot-Time Table Parsing # ACPI Boot-Time Table Parsing
# #
obj-$(CONFIG_ACPI_BOOT) += tables.o obj-$(CONFIG_ACPI_BOOT) += tables.o
obj-$(CONFIG_ACPI) += blacklist.o obj-$(CONFIG_ACPI_INTERPRETER) += blacklist.o
# #
# ACPI Core Subsystem (Interpreter) # ACPI Core Subsystem (Interpreter)
......
This diff is collapsed.
...@@ -634,8 +634,7 @@ acpi_bus_init (void) ...@@ -634,8 +634,7 @@ acpi_bus_init (void)
* the EC parameters out of that. * the EC parameters out of that.
*/ */
status = acpi_ec_ecdt_probe(); status = acpi_ec_ecdt_probe();
if (ACPI_FAILURE(status)) /* Ignore result. Not having an ECDT is not fatal. */
goto error1;
#endif #endif
status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION); status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
......
...@@ -105,6 +105,11 @@ acpi_ds_create_buffer_field ( ...@@ -105,6 +105,11 @@ acpi_ds_create_buffer_field (
return_ACPI_STATUS (AE_AML_NO_OPERAND); return_ACPI_STATUS (AE_AML_NO_OPERAND);
} }
if (walk_state->deferred_node) {
node = walk_state->deferred_node;
status = AE_OK;
}
else {
/* /*
* During the load phase, we want to enter the name of the field into * During the load phase, we want to enter the name of the field into
* the namespace. During the execute phase (when we evaluate the size * the namespace. During the execute phase (when we evaluate the size
...@@ -127,6 +132,7 @@ acpi_ds_create_buffer_field ( ...@@ -127,6 +132,7 @@ acpi_ds_create_buffer_field (
ACPI_REPORT_NSERROR (arg->common.value.string, status); ACPI_REPORT_NSERROR (arg->common.value.string, status);
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
}
/* We could put the returned object (Node) on the object stack for later, but /* We could put the returned object (Node) on the object stack for later, but
* for now, we will put it in the "op" object that the parser uses, so we * for now, we will put it in the "op" object that the parser uses, so we
......
...@@ -135,7 +135,7 @@ acpi_ds_init_one_object ( ...@@ -135,7 +135,7 @@ acpi_ds_init_one_object (
} }
/* /*
* Always parse methods to detect errors, we may delete * Always parse methods to detect errors, we will delete
* the parse tree below * the parse tree below
*/ */
status = acpi_ds_parse_method (obj_handle); status = acpi_ds_parse_method (obj_handle);
...@@ -150,7 +150,7 @@ acpi_ds_init_one_object ( ...@@ -150,7 +150,7 @@ acpi_ds_init_one_object (
} }
/* /*
* Delete the parse tree. We simple re-parse the method * Delete the parse tree. We simply re-parse the method
* for every execution since there isn't much overhead * for every execution since there isn't much overhead
*/ */
acpi_ns_delete_namespace_subtree (obj_handle); acpi_ns_delete_namespace_subtree (obj_handle);
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
* *
* RETURN: Status. * RETURN: Status.
* *
* DESCRIPTION: Late execution of region or field arguments * DESCRIPTION: Late (deferred) execution of region or field arguments
* *
****************************************************************************/ ****************************************************************************/
...@@ -111,7 +111,10 @@ acpi_ds_execute_arguments ( ...@@ -111,7 +111,10 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
/* Mark this parse as a deferred opcode */
walk_state->parse_flags = ACPI_PARSE_DEFERRED_OP; walk_state->parse_flags = ACPI_PARSE_DEFERRED_OP;
walk_state->deferred_node = node;
/* Pass1: Parse the entire declaration */ /* Pass1: Parse the entire declaration */
...@@ -128,7 +131,7 @@ acpi_ds_execute_arguments ( ...@@ -128,7 +131,7 @@ acpi_ds_execute_arguments (
arg->common.node = node; arg->common.node = node;
acpi_ps_delete_parse_tree (op); acpi_ps_delete_parse_tree (op);
/* Evaluate the address and length arguments for the Buffer Field */ /* Evaluate the deferred arguments */
op = acpi_ps_alloc_op (AML_INT_EVAL_SUBTREE_OP); op = acpi_ps_alloc_op (AML_INT_EVAL_SUBTREE_OP);
if (!op) { if (!op) {
...@@ -144,6 +147,8 @@ acpi_ds_execute_arguments ( ...@@ -144,6 +147,8 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS (AE_NO_MEMORY); return_ACPI_STATUS (AE_NO_MEMORY);
} }
/* Execute the opcode and arguments */
status = acpi_ds_init_aml_walk (walk_state, op, NULL, aml_start, status = acpi_ds_init_aml_walk (walk_state, op, NULL, aml_start,
aml_length, NULL, NULL, 3); aml_length, NULL, NULL, 3);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
...@@ -151,6 +156,9 @@ acpi_ds_execute_arguments ( ...@@ -151,6 +156,9 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
/* Mark this execution as a deferred opcode */
walk_state->deferred_node = node;
status = acpi_ps_parse_aml (walk_state); status = acpi_ps_parse_aml (walk_state);
acpi_ps_delete_parse_tree (op); acpi_ps_delete_parse_tree (op);
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
...@@ -192,7 +200,7 @@ acpi_ds_get_buffer_field_arguments ( ...@@ -192,7 +200,7 @@ acpi_ds_get_buffer_field_arguments (
node = obj_desc->buffer_field.node; node = obj_desc->buffer_field.node;
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname (ACPI_TYPE_BUFFER_FIELD, node, NULL)); ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname (ACPI_TYPE_BUFFER_FIELD, node, NULL));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] buffer_field JIT Init\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] buffer_field Arg Init\n",
node->name.ascii)); node->name.ascii));
/* Execute the AML code for the term_arg arguments */ /* Execute the AML code for the term_arg arguments */
...@@ -207,7 +215,7 @@ acpi_ds_get_buffer_field_arguments ( ...@@ -207,7 +215,7 @@ acpi_ds_get_buffer_field_arguments (
* *
* FUNCTION: acpi_ds_get_buffer_arguments * FUNCTION: acpi_ds_get_buffer_arguments
* *
* PARAMETERS: obj_desc - A valid Bufferobject * PARAMETERS: obj_desc - A valid Buffer object
* *
* RETURN: Status. * RETURN: Status.
* *
...@@ -240,7 +248,7 @@ acpi_ds_get_buffer_arguments ( ...@@ -240,7 +248,7 @@ acpi_ds_get_buffer_arguments (
return_ACPI_STATUS (AE_AML_INTERNAL); return_ACPI_STATUS (AE_AML_INTERNAL);
} }
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer JIT Init\n")); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer Arg Init\n"));
/* Execute the AML code for the term_arg arguments */ /* Execute the AML code for the term_arg arguments */
...@@ -254,7 +262,7 @@ acpi_ds_get_buffer_arguments ( ...@@ -254,7 +262,7 @@ acpi_ds_get_buffer_arguments (
* *
* FUNCTION: acpi_ds_get_package_arguments * FUNCTION: acpi_ds_get_package_arguments
* *
* PARAMETERS: obj_desc - A valid Packageobject * PARAMETERS: obj_desc - A valid Package object
* *
* RETURN: Status. * RETURN: Status.
* *
...@@ -287,7 +295,7 @@ acpi_ds_get_package_arguments ( ...@@ -287,7 +295,7 @@ acpi_ds_get_package_arguments (
return_ACPI_STATUS (AE_AML_INTERNAL); return_ACPI_STATUS (AE_AML_INTERNAL);
} }
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package JIT Init\n")); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Arg Init\n"));
/* Execute the AML code for the term_arg arguments */ /* Execute the AML code for the term_arg arguments */
...@@ -335,11 +343,12 @@ acpi_ds_get_region_arguments ( ...@@ -335,11 +343,12 @@ acpi_ds_get_region_arguments (
node = obj_desc->region.node; node = obj_desc->region.node;
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname (ACPI_TYPE_REGION, node, NULL)); ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (ACPI_TYPE_REGION, node, NULL));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] op_region Init at AML %p\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] op_region Arg Init at AML %p\n",
node->name.ascii, extra_desc->extra.aml_start)); node->name.ascii, extra_desc->extra.aml_start));
/* Execute the argument AML */
status = acpi_ds_execute_arguments (node, acpi_ns_get_parent_node (node), status = acpi_ds_execute_arguments (node, acpi_ns_get_parent_node (node),
extra_desc->extra.aml_length, extra_desc->extra.aml_start); extra_desc->extra.aml_length, extra_desc->extra.aml_start);
...@@ -505,14 +514,16 @@ acpi_ds_init_buffer_field ( ...@@ -505,14 +514,16 @@ acpi_ds_init_buffer_field (
goto cleanup; goto cleanup;
} }
/* Entire field must fit within the current length of the buffer */ /* Entire field must fit within the current length of the buffer */
if ((bit_offset + bit_count) > if ((bit_offset + bit_count) >
(8 * (u32) buffer_desc->buffer.length)) { (8 * (u32) buffer_desc->buffer.length)) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
"Field size %d exceeds Buffer size %d (bits)\n", "Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)\n",
bit_offset + bit_count, 8 * (u32) buffer_desc->buffer.length)); ((struct acpi_namespace_node *) result_desc)->name.ascii,
bit_offset + bit_count,
buffer_desc->buffer.node->name.ascii,
8 * (u32) buffer_desc->buffer.length));
status = AE_AML_BUFFER_LIMIT; status = AE_AML_BUFFER_LIMIT;
goto cleanup; goto cleanup;
} }
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#define _COMPONENT ACPI_DISPATCHER #define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME ("dsutils") ACPI_MODULE_NAME ("dsutils")
#ifndef ACPI_NO_METHOD_EXECUTION #ifndef ACPI_NO_METHOD_EXECUTION
/******************************************************************************* /*******************************************************************************
...@@ -196,7 +197,6 @@ acpi_ds_is_result_used ( ...@@ -196,7 +197,6 @@ acpi_ds_is_result_used (
acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op)); acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
return_VALUE (FALSE); return_VALUE (FALSE);
} }
...@@ -239,7 +239,6 @@ acpi_ds_delete_result_if_not_used ( ...@@ -239,7 +239,6 @@ acpi_ds_delete_result_if_not_used (
return_VOID; return_VOID;
} }
if (!acpi_ds_is_result_used (op, walk_state)) { if (!acpi_ds_is_result_used (op, walk_state)) {
/* /*
* Must pop the result stack (obj_desc should be equal to result_obj) * Must pop the result stack (obj_desc should be equal to result_obj)
...@@ -389,6 +388,23 @@ acpi_ds_create_operand ( ...@@ -389,6 +388,23 @@ acpi_ds_create_operand (
* in name_string * in name_string
*/ */
/*
* Special handling for buffer_field declarations. This is a deferred
* opcode that unfortunately defines the field name as the last
* parameter instead of the first. We get here when we are performing
* the deferred execution, so the actual name of the field is already
* in the namespace. We don't want to attempt to look it up again
* because we may be executing in a different scope than where the
* actual opcode exists.
*/
if ((walk_state->deferred_node) &&
(walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD) &&
(arg_index != 0)) {
obj_desc = ACPI_CAST_PTR (union acpi_operand_object, walk_state->deferred_node);
status = AE_OK;
}
else /* All other opcodes */ {
/* /*
* Differentiate between a namespace "create" operation * Differentiate between a namespace "create" operation
* versus a "lookup" operation (IMODE_LOAD_PASS2 vs. * versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
...@@ -405,7 +421,6 @@ acpi_ds_create_operand ( ...@@ -405,7 +421,6 @@ acpi_ds_create_operand (
interpreter_mode = ACPI_IMODE_LOAD_PASS2; interpreter_mode = ACPI_IMODE_LOAD_PASS2;
} }
else { else {
/* Return a failure if name not found */ /* Return a failure if name not found */
...@@ -432,7 +447,6 @@ acpi_ds_create_operand ( ...@@ -432,7 +447,6 @@ acpi_ds_create_operand (
obj_desc = ACPI_CAST_PTR (union acpi_operand_object, acpi_gbl_root_node); obj_desc = ACPI_CAST_PTR (union acpi_operand_object, acpi_gbl_root_node);
status = AE_OK; status = AE_OK;
} }
else { else {
/* /*
* We just plain didn't find it -- which is a * We just plain didn't find it -- which is a
...@@ -445,6 +459,7 @@ acpi_ds_create_operand ( ...@@ -445,6 +459,7 @@ acpi_ds_create_operand (
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
ACPI_REPORT_NSERROR (name_string, status); ACPI_REPORT_NSERROR (name_string, status);
} }
}
/* Free the namestring created above */ /* Free the namestring created above */
...@@ -464,8 +479,6 @@ acpi_ds_create_operand ( ...@@ -464,8 +479,6 @@ acpi_ds_create_operand (
} }
ACPI_DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state)); ACPI_DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state));
} }
else { else {
/* Check for null name case */ /* Check for null name case */
...@@ -480,7 +493,6 @@ acpi_ds_create_operand ( ...@@ -480,7 +493,6 @@ acpi_ds_create_operand (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Null namepath: Arg=%p\n", arg)); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Null namepath: Arg=%p\n", arg));
} }
else { else {
opcode = arg->common.aml_opcode; opcode = arg->common.aml_opcode;
} }
......
...@@ -248,6 +248,14 @@ acpi_ds_load1_begin_op ( ...@@ -248,6 +248,14 @@ acpi_ds_load1_begin_op (
* buffer_field, or Package), the name of the object is already * buffer_field, or Package), the name of the object is already
* in the namespace. * in the namespace.
*/ */
if (walk_state->deferred_node) {
/* This name is already in the namespace, get the node */
node = walk_state->deferred_node;
status = AE_OK;
break;
}
flags = ACPI_NS_NO_UPSEARCH; flags = ACPI_NS_NO_UPSEARCH;
if ((walk_state->opcode != AML_SCOPE_OP) && if ((walk_state->opcode != AML_SCOPE_OP) &&
(!(walk_state->parse_flags & ACPI_PARSE_DEFERRED_OP))) { (!(walk_state->parse_flags & ACPI_PARSE_DEFERRED_OP))) {
...@@ -589,7 +597,17 @@ acpi_ds_load2_begin_op ( ...@@ -589,7 +597,17 @@ acpi_ds_load2_begin_op (
* Enter the named type into the internal namespace. We enter the name * Enter the named type into the internal namespace. We enter the name
* as we go downward in the parse tree. Any necessary subobjects that involve * as we go downward in the parse tree. Any necessary subobjects that involve
* arguments to the opcode must be created as we go back up the parse tree later. * arguments to the opcode must be created as we go back up the parse tree later.
*
* Note: Name may already exist if we are executing a deferred opcode.
*/ */
if (walk_state->deferred_node) {
/* This name is already in the namespace, get the node */
node = walk_state->deferred_node;
status = AE_OK;
break;
}
status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type, status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, walk_state, &(node)); ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, walk_state, &(node));
break; break;
......
...@@ -121,10 +121,9 @@ acpi_ds_scope_stack_push ( ...@@ -121,10 +121,9 @@ acpi_ds_scope_stack_push (
/* Make sure object type is valid */ /* Make sure object type is valid */
if (!acpi_ut_valid_object_type (type)) { if (!acpi_ut_valid_object_type (type)) {
ACPI_REPORT_WARNING (("ds_scope_stack_push: type code out of range\n")); ACPI_REPORT_WARNING (("ds_scope_stack_push: Invalid object type: 0x%X\n", type));
} }
/* Allocate a new scope object */ /* Allocate a new scope object */
scope_info = acpi_ut_create_generic_state (); scope_info = acpi_ut_create_generic_state ();
...@@ -146,13 +145,13 @@ acpi_ds_scope_stack_push ( ...@@ -146,13 +145,13 @@ acpi_ds_scope_stack_push (
old_scope_info = walk_state->scope_info; old_scope_info = walk_state->scope_info;
if (old_scope_info) { if (old_scope_info) {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
"[%4.4s] (%10s)", "[%4.4s] (%s)",
old_scope_info->scope.node->name.ascii, old_scope_info->scope.node->name.ascii,
acpi_ut_get_type_name (old_scope_info->common.value))); acpi_ut_get_type_name (old_scope_info->common.value)));
} }
else { else {
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
"[\\___] (%10s)", "ROOT")); "[\\___] (%s)", "ROOT"));
} }
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
...@@ -163,7 +162,6 @@ acpi_ds_scope_stack_push ( ...@@ -163,7 +162,6 @@ acpi_ds_scope_stack_push (
/* Push new scope object onto stack */ /* Push new scope object onto stack */
acpi_ut_push_generic_state (&walk_state->scope_info, scope_info); acpi_ut_push_generic_state (&walk_state->scope_info, scope_info);
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
...@@ -207,7 +205,7 @@ acpi_ds_scope_stack_pop ( ...@@ -207,7 +205,7 @@ acpi_ds_scope_stack_pop (
walk_state->scope_depth--; walk_state->scope_depth--;
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"[%.2d] Popped scope [%4.4s] (%10s), New scope -> ", "[%.2d] Popped scope [%4.4s] (%s), New scope -> ",
(u32) walk_state->scope_depth, (u32) walk_state->scope_depth,
scope_info->scope.node->name.ascii, scope_info->scope.node->name.ascii,
acpi_ut_get_type_name (scope_info->common.value))); acpi_ut_get_type_name (scope_info->common.value)));
...@@ -225,7 +223,6 @@ acpi_ds_scope_stack_pop ( ...@@ -225,7 +223,6 @@ acpi_ds_scope_stack_pop (
} }
acpi_ut_delete_generic_state (scope_info); acpi_ut_delete_generic_state (scope_info);
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
} }
......
...@@ -56,11 +56,12 @@ ...@@ -56,11 +56,12 @@
* FUNCTION: acpi_ds_result_insert * FUNCTION: acpi_ds_result_insert
* *
* PARAMETERS: Object - Object to push * PARAMETERS: Object - Object to push
* Index - Where to insert the object
* walk_state - Current Walk state * walk_state - Current Walk state
* *
* RETURN: Status * RETURN: Status
* *
* DESCRIPTION: Push an object onto this walk's result stack * DESCRIPTION: Insert an object onto this walk's result stack
* *
******************************************************************************/ ******************************************************************************/
...@@ -114,6 +115,7 @@ acpi_ds_result_insert ( ...@@ -114,6 +115,7 @@ acpi_ds_result_insert (
* FUNCTION: acpi_ds_result_remove * FUNCTION: acpi_ds_result_remove
* *
* PARAMETERS: Object - Where to return the popped object * PARAMETERS: Object - Where to return the popped object
* Index - Where to extract the object
* walk_state - Current Walk state * walk_state - Current Walk state
* *
* RETURN: Status * RETURN: Status
...@@ -233,6 +235,7 @@ acpi_ds_result_pop ( ...@@ -233,6 +235,7 @@ acpi_ds_result_pop (
return (AE_AML_NO_RETURN_VALUE); return (AE_AML_NO_RETURN_VALUE);
} }
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ds_result_pop_from_bottom * FUNCTION: acpi_ds_result_pop_from_bottom
...@@ -295,7 +298,6 @@ acpi_ds_result_pop_from_bottom ( ...@@ -295,7 +298,6 @@ acpi_ds_result_pop_from_bottom (
*object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL", *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
state, walk_state)); state, walk_state));
return (AE_OK); return (AE_OK);
} }
...@@ -358,8 +360,7 @@ acpi_ds_result_push ( ...@@ -358,8 +360,7 @@ acpi_ds_result_push (
* *
* FUNCTION: acpi_ds_result_stack_push * FUNCTION: acpi_ds_result_stack_push
* *
* PARAMETERS: Object - Object to push * PARAMETERS: walk_state - Current Walk state
* walk_state - Current Walk state
* *
* RETURN: Status * RETURN: Status
* *
...@@ -420,7 +421,6 @@ acpi_ds_result_stack_pop ( ...@@ -420,7 +421,6 @@ acpi_ds_result_stack_pop (
return (AE_AML_NO_OPERAND); return (AE_AML_NO_OPERAND);
} }
state = acpi_ut_pop_generic_state (&walk_state->results); state = acpi_ut_pop_generic_state (&walk_state->results);
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
...@@ -572,6 +572,7 @@ acpi_ds_obj_stack_pop_object ( ...@@ -572,6 +572,7 @@ acpi_ds_obj_stack_pop_object (
} }
#endif #endif
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ds_obj_stack_pop * FUNCTION: acpi_ds_obj_stack_pop
...@@ -641,6 +642,7 @@ acpi_ds_obj_stack_pop_and_delete ( ...@@ -641,6 +642,7 @@ acpi_ds_obj_stack_pop_and_delete (
u32 i; u32 i;
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
ACPI_FUNCTION_NAME ("ds_obj_stack_pop_and_delete"); ACPI_FUNCTION_NAME ("ds_obj_stack_pop_and_delete");
...@@ -883,8 +885,15 @@ acpi_ds_create_walk_state ( ...@@ -883,8 +885,15 @@ acpi_ds_create_walk_state (
* FUNCTION: acpi_ds_init_aml_walk * FUNCTION: acpi_ds_init_aml_walk
* *
* PARAMETERS: walk_state - New state to be initialized * PARAMETERS: walk_state - New state to be initialized
* Op - Current parse op
* method_node - Control method NS node, if any
* aml_start - Start of AML
* aml_length - Length of AML
* Params - Method args, if any
* return_obj_desc - Where to store a return object, if any
* pass_number - 1, 2, or 3
* *
* RETURN: None * RETURN: Status
* *
* DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk * DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk
* *
...@@ -956,6 +965,7 @@ acpi_ds_init_aml_walk ( ...@@ -956,6 +965,7 @@ acpi_ds_init_aml_walk (
while (extra_op && !extra_op->common.node) { while (extra_op && !extra_op->common.node) {
extra_op = extra_op->common.parent; extra_op = extra_op->common.parent;
} }
if (!extra_op) { if (!extra_op) {
parser_state->start_node = NULL; parser_state->start_node = NULL;
} }
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h>
#include <acpi/actypes.h>
#define _COMPONENT ACPI_EC_COMPONENT #define _COMPONENT ACPI_EC_COMPONENT
ACPI_MODULE_NAME ("acpi_ec") ACPI_MODULE_NAME ("acpi_ec")
...@@ -412,6 +412,9 @@ acpi_ec_space_setup ( ...@@ -412,6 +412,9 @@ acpi_ec_space_setup (
* The EC object is in the handler context and is needed * The EC object is in the handler context and is needed
* when calling the acpi_ec_space_handler. * when calling the acpi_ec_space_handler.
*/ */
if(function == ACPI_REGION_DEACTIVATE)
*return_context = NULL;
else
*return_context = handler_context; *return_context = handler_context;
return AE_OK; return AE_OK;
......
...@@ -382,7 +382,7 @@ acpi_ev_detach_region( ...@@ -382,7 +382,7 @@ acpi_ev_detach_region(
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
union acpi_operand_object **last_obj_ptr; union acpi_operand_object **last_obj_ptr;
acpi_adr_space_setup region_setup; acpi_adr_space_setup region_setup;
void *region_context; void **region_context;
union acpi_operand_object *region_obj2; union acpi_operand_object *region_obj2;
acpi_status status; acpi_status status;
...@@ -394,7 +394,7 @@ acpi_ev_detach_region( ...@@ -394,7 +394,7 @@ acpi_ev_detach_region(
if (!region_obj2) { if (!region_obj2) {
return_VOID; return_VOID;
} }
region_context = region_obj2->extra.region_context; region_context = &region_obj2->extra.region_context;
/* Get the address handler from the region object */ /* Get the address handler from the region object */
...@@ -450,7 +450,7 @@ acpi_ev_detach_region( ...@@ -450,7 +450,7 @@ acpi_ev_detach_region(
region_setup = handler_obj->address_space.setup; region_setup = handler_obj->address_space.setup;
status = region_setup (region_obj, ACPI_REGION_DEACTIVATE, status = region_setup (region_obj, ACPI_REGION_DEACTIVATE,
handler_obj->address_space.context, &region_context); handler_obj->address_space.context, region_context);
/* Init routine may fail, Just ignore errors */ /* Init routine may fail, Just ignore errors */
......
...@@ -286,7 +286,7 @@ acpi_ex_create_region ( ...@@ -286,7 +286,7 @@ acpi_ex_create_region (
ACPI_FUNCTION_TRACE ("ex_create_region"); ACPI_FUNCTION_TRACE ("ex_create_region");
/* Get the Node from the object stack */ /* Get the Namespace Node */
node = walk_state->op->common.node; node = walk_state->op->common.node;
...@@ -311,7 +311,6 @@ acpi_ex_create_region ( ...@@ -311,7 +311,6 @@ acpi_ex_create_region (
ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (%X)\n", ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (%X)\n",
acpi_ut_get_region_name (region_space), region_space)); acpi_ut_get_region_name (region_space), region_space));
/* Create the region descriptor */ /* Create the region descriptor */
obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_REGION); obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_REGION);
...@@ -375,6 +374,7 @@ acpi_ex_create_table_region ( ...@@ -375,6 +374,7 @@ acpi_ex_create_table_region (
ACPI_FUNCTION_TRACE ("ex_create_table_region"); ACPI_FUNCTION_TRACE ("ex_create_table_region");
/* Get the Node from the object stack */ /* Get the Node from the object stack */
node = walk_state->op->common.node; node = walk_state->op->common.node;
...@@ -392,7 +392,6 @@ acpi_ex_create_table_region ( ...@@ -392,7 +392,6 @@ acpi_ex_create_table_region (
status = acpi_tb_find_table (operand[1]->string.pointer, status = acpi_tb_find_table (operand[1]->string.pointer,
operand[2]->string.pointer, operand[2]->string.pointer,
operand[3]->string.pointer, &table); operand[3]->string.pointer, &table);
if (ACPI_FAILURE (status)) { if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status); return_ACPI_STATUS (status);
} }
...@@ -489,7 +488,6 @@ acpi_ex_create_processor ( ...@@ -489,7 +488,6 @@ acpi_ex_create_processor (
status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0], status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0],
obj_desc, ACPI_TYPE_PROCESSOR); obj_desc, ACPI_TYPE_PROCESSOR);
/* Remove local reference to the object */ /* Remove local reference to the object */
acpi_ut_remove_reference (obj_desc); acpi_ut_remove_reference (obj_desc);
...@@ -540,7 +538,6 @@ acpi_ex_create_power_resource ( ...@@ -540,7 +538,6 @@ acpi_ex_create_power_resource (
status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0], status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0],
obj_desc, ACPI_TYPE_POWER); obj_desc, ACPI_TYPE_POWER);
/* Remove local reference to the object */ /* Remove local reference to the object */
acpi_ut_remove_reference (obj_desc); acpi_ut_remove_reference (obj_desc);
...@@ -609,7 +606,6 @@ acpi_ex_create_method ( ...@@ -609,7 +606,6 @@ acpi_ex_create_method (
obj_desc->method.concurrency = (u8) obj_desc->method.concurrency = (u8)
(((method_flags & METHOD_FLAGS_SYNCH_LEVEL) >> 4) + 1); (((method_flags & METHOD_FLAGS_SYNCH_LEVEL) >> 4) + 1);
} }
else { else {
obj_desc->method.concurrency = INFINITE_CONCURRENCY; obj_desc->method.concurrency = INFINITE_CONCURRENCY;
} }
......
...@@ -139,7 +139,41 @@ acpi_ex_setup_region ( ...@@ -139,7 +139,41 @@ acpi_ex_setup_region (
field_datum_byte_offset, obj_desc->common_field.access_byte_width, field_datum_byte_offset, obj_desc->common_field.access_byte_width,
rgn_desc->region.node->name.ascii, rgn_desc->region.length)); rgn_desc->region.node->name.ascii, rgn_desc->region.length));
#ifdef CONFIG_ACPI_RELAXED_AML
{
/*
* 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);
#endif
} }
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
......
...@@ -234,7 +234,7 @@ acpi_ns_dump_one_object ( ...@@ -234,7 +234,7 @@ acpi_ns_dump_one_object (
case ACPI_TYPE_DEVICE: case ACPI_TYPE_DEVICE:
acpi_os_printf ("Notify object: %p", obj_desc); acpi_os_printf ("Notify Object: %p\n", obj_desc);
break; break;
...@@ -371,7 +371,7 @@ acpi_ns_dump_one_object ( ...@@ -371,7 +371,7 @@ acpi_ns_dump_one_object (
case ACPI_TYPE_LOCAL_BANK_FIELD: case ACPI_TYPE_LOCAL_BANK_FIELD:
case ACPI_TYPE_LOCAL_INDEX_FIELD: case ACPI_TYPE_LOCAL_INDEX_FIELD:
acpi_os_printf (" Off %.2X Len %.2X Acc %.2hd\n", acpi_os_printf ("Off %.2X Len %.2X Acc %.2hd\n",
(obj_desc->common_field.base_byte_offset * 8) (obj_desc->common_field.base_byte_offset * 8)
+ obj_desc->common_field.start_field_bit_offset, + obj_desc->common_field.start_field_bit_offset,
obj_desc->common_field.bit_length, obj_desc->common_field.bit_length,
......
...@@ -96,7 +96,7 @@ acpi_ns_search_node ( ...@@ -96,7 +96,7 @@ acpi_ns_search_node (
scope_name = acpi_ns_get_external_pathname (node); scope_name = acpi_ns_get_external_pathname (node);
if (scope_name) { if (scope_name) {
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s [%p] For %4.4s (%s)\n", ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s (%p) For [%4.4s] (%s)\n",
scope_name, node, (char *) &target_name, acpi_ut_get_type_name (type))); scope_name, node, (char *) &target_name, acpi_ut_get_type_name (type)));
ACPI_MEM_FREE (scope_name); ACPI_MEM_FREE (scope_name);
...@@ -117,9 +117,9 @@ acpi_ns_search_node ( ...@@ -117,9 +117,9 @@ acpi_ns_search_node (
* Found matching entry. * Found matching entry.
*/ */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Name %4.4s Type [%s] found in scope [%4.4s] %p\n", "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
(char *) &target_name, acpi_ut_get_type_name (next_node->type), (char *) &target_name, acpi_ut_get_type_name (next_node->type),
next_node->name.ascii, next_node)); next_node, node->name.ascii, node));
*return_node = next_node; *return_node = next_node;
return_ACPI_STATUS (AE_OK); return_ACPI_STATUS (AE_OK);
...@@ -143,7 +143,7 @@ acpi_ns_search_node ( ...@@ -143,7 +143,7 @@ acpi_ns_search_node (
/* Searched entire namespace level, not found */ /* Searched entire namespace level, not found */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
"Name %4.4s Type [%s] not found in search in scope [%4.4s] %p first child %p\n", "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
(char *) &target_name, acpi_ut_get_type_name (type), (char *) &target_name, acpi_ut_get_type_name (type),
node->name.ascii, node, node->child)); node->name.ascii, node, node->child));
......
...@@ -175,6 +175,11 @@ acpi_ns_print_node_pathname ( ...@@ -175,6 +175,11 @@ acpi_ns_print_node_pathname (
acpi_status status; acpi_status status;
if (!node) {
acpi_os_printf ("[NULL NAME]");
return;
}
/* Convert handle to a full pathname and print it (with supplied message) */ /* Convert handle to a full pathname and print it (with supplied message) */
buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
...@@ -470,11 +475,11 @@ acpi_ns_build_internal_name ( ...@@ -470,11 +475,11 @@ acpi_ns_build_internal_name (
*result = 0; *result = 0;
if (info->fully_qualified) { if (info->fully_qualified) {
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "returning [%p] (abs) \"\\%s\"\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (abs) \"\\%s\"\n",
internal_name, internal_name)); internal_name, internal_name));
} }
else { else {
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "returning [%p] (rel) \"%s\"\n", ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n",
internal_name, internal_name)); internal_name, internal_name));
} }
......
...@@ -437,7 +437,6 @@ acpi_ps_parse_loop ( ...@@ -437,7 +437,6 @@ acpi_ps_parse_loop (
return_ACPI_STATUS (AE_BAD_PARAMETER); return_ACPI_STATUS (AE_BAD_PARAMETER);
} }
parser_state = &walk_state->parser_state; parser_state = &walk_state->parser_state;
walk_state->arg_types = 0; walk_state->arg_types = 0;
...@@ -705,10 +704,9 @@ acpi_ps_parse_loop ( ...@@ -705,10 +704,9 @@ acpi_ps_parse_loop (
walk_state->arg_types = 0; walk_state->arg_types = 0;
break; break;
default: default:
/* Op is not a constant or string, append each argument */ /* Op is not a constant or string, append each argument to the Op */
while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) && while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) &&
!walk_state->arg_count) { !walk_state->arg_count) {
...@@ -727,23 +725,23 @@ acpi_ps_parse_loop ( ...@@ -727,23 +725,23 @@ acpi_ps_parse_loop (
INCREMENT_ARG_LIST (walk_state->arg_types); INCREMENT_ARG_LIST (walk_state->arg_types);
} }
/* Special processing for certain opcodes */
switch (op->common.aml_opcode) { switch (op->common.aml_opcode) {
case AML_METHOD_OP: case AML_METHOD_OP:
/* For a method, save the length and address of the body */
/* /*
* Skip parsing of control method or opregion body, * Skip parsing of control method
* because we don't have enough info in the first pass * because we don't have enough info in the first pass
* to parse them correctly. * to parse it correctly.
*
* Save the length and address of the body
*/ */
op->named.data = parser_state->aml; op->named.data = parser_state->aml;
op->named.length = (u32) (parser_state->pkg_end - parser_state->aml); op->named.length = (u32) (parser_state->pkg_end - parser_state->aml);
/*
* Skip body of method. For op_regions, we must continue /* Skip body of method */
* parsing because the opregion is not a standalone
* package (We don't know where the end is).
*/
parser_state->aml = parser_state->pkg_end; parser_state->aml = parser_state->pkg_end;
walk_state->arg_count = 0; walk_state->arg_count = 0;
break; break;
...@@ -756,15 +754,15 @@ acpi_ps_parse_loop ( ...@@ -756,15 +754,15 @@ acpi_ps_parse_loop (
(op->common.parent->common.aml_opcode == AML_NAME_OP) && (op->common.parent->common.aml_opcode == AML_NAME_OP) &&
(walk_state->descending_callback != acpi_ds_exec_begin_op)) { (walk_state->descending_callback != acpi_ds_exec_begin_op)) {
/* /*
* Skip parsing of * Skip parsing of Buffers and Packages
* because we don't have enough info in the first pass * because we don't have enough info in the first pass
* to parse them correctly. * to parse them correctly.
*/ */
op->named.data = aml_op_start; op->named.data = aml_op_start;
op->named.length = (u32) (parser_state->pkg_end - aml_op_start); op->named.length = (u32) (parser_state->pkg_end - aml_op_start);
/*
* Skip body /* Skip body */
*/
parser_state->aml = parser_state->pkg_end; parser_state->aml = parser_state->pkg_end;
walk_state->arg_count = 0; walk_state->arg_count = 0;
} }
...@@ -778,6 +776,7 @@ acpi_ps_parse_loop ( ...@@ -778,6 +776,7 @@ acpi_ps_parse_loop (
break; break;
default: default:
/* No action for all other opcodes */ /* No action for all other opcodes */
break; break;
} }
......
...@@ -71,6 +71,9 @@ acpi_pci_irq_find_prt_entry ( ...@@ -71,6 +71,9 @@ acpi_pci_irq_find_prt_entry (
ACPI_FUNCTION_TRACE("acpi_pci_irq_find_prt_entry"); ACPI_FUNCTION_TRACE("acpi_pci_irq_find_prt_entry");
if (!acpi_prt.count)
return_PTR(NULL);
/* /*
* Parse through all PRT entries looking for a match on the specified * Parse through all PRT entries looking for a match on the specified
* PCI device's segment, bus, device, and pin (don't care about func). * PCI device's segment, bus, device, and pin (don't care about func).
......
...@@ -220,7 +220,6 @@ acpi_pci_link_check_current ( ...@@ -220,7 +220,6 @@ acpi_pci_link_check_current (
return AE_CTRL_TERMINATE; return AE_CTRL_TERMINATE;
} }
static int static int
acpi_pci_link_get_current ( acpi_pci_link_get_current (
struct acpi_pci_link *link) struct acpi_pci_link *link)
...@@ -279,6 +278,28 @@ acpi_pci_link_get_current ( ...@@ -279,6 +278,28 @@ acpi_pci_link_get_current (
return_VALUE(result); return_VALUE(result);
} }
static int
acpi_pci_link_try_get_current (
struct acpi_pci_link *link,
int irq)
{
int result;
ACPI_FUNCTION_TRACE("acpi_pci_link_try_get_current");
result = acpi_pci_link_get_current(link);
if (result && link->irq.active) {
return_VALUE(result);
}
if (!link->irq.active) {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No active IRQ resource found\n"));
printk(KERN_WARNING "_CRS returns NULL! Using IRQ %d for device (%s [%s]).\n", irq, acpi_device_name(link->device), acpi_device_bid(link->device));
link->irq.active = irq;
}
return 0;
}
static int static int
acpi_pci_link_set ( acpi_pci_link_set (
...@@ -294,6 +315,7 @@ acpi_pci_link_set ( ...@@ -294,6 +315,7 @@ acpi_pci_link_set (
struct acpi_buffer buffer = {sizeof(resource)+1, &resource}; struct acpi_buffer buffer = {sizeof(resource)+1, &resource};
int i = 0; int i = 0;
int valid = 0; int valid = 0;
int resource_type = 0;
ACPI_FUNCTION_TRACE("acpi_pci_link_set"); ACPI_FUNCTION_TRACE("acpi_pci_link_set");
...@@ -317,20 +339,32 @@ acpi_pci_link_set ( ...@@ -317,20 +339,32 @@ acpi_pci_link_set (
} }
} }
/* If IRQ<=15, first try with a "normal" IRQ descriptor. If that fails, try with
* an extended one */
if (irq <= 15) {
resource_type = ACPI_RSTYPE_IRQ;
} else {
resource_type = ACPI_RSTYPE_EXT_IRQ;
}
retry_programming:
memset(&resource, 0, sizeof(resource)); memset(&resource, 0, sizeof(resource));
/* NOTE: PCI interrupts are always level / active_low / shared. But not all /* NOTE: PCI interrupts are always level / active_low / shared. But not all
interrupts > 15 are PCI interrupts. Rely on the ACPI IRQ definition for interrupts > 15 are PCI interrupts. Rely on the ACPI IRQ definition for
parameters */ parameters */
if (irq <= 15) { switch(resource_type) {
case ACPI_RSTYPE_IRQ:
resource.res.id = ACPI_RSTYPE_IRQ; resource.res.id = ACPI_RSTYPE_IRQ;
resource.res.length = sizeof(struct acpi_resource); resource.res.length = sizeof(struct acpi_resource);
resource.res.data.irq.edge_level = link->irq.edge_level; resource.res.data.irq.edge_level = link->irq.edge_level;
resource.res.data.irq.active_high_low = link->irq.active_high_low; resource.res.data.irq.active_high_low = link->irq.active_high_low;
resource.res.data.irq.number_of_interrupts = 1; resource.res.data.irq.number_of_interrupts = 1;
resource.res.data.irq.interrupts[0] = irq; resource.res.data.irq.interrupts[0] = irq;
} break;
else {
case ACPI_RSTYPE_EXT_IRQ:
resource.res.id = ACPI_RSTYPE_EXT_IRQ; resource.res.id = ACPI_RSTYPE_EXT_IRQ;
resource.res.length = sizeof(struct acpi_resource); resource.res.length = sizeof(struct acpi_resource);
resource.res.data.extended_irq.producer_consumer = ACPI_CONSUMER; resource.res.data.extended_irq.producer_consumer = ACPI_CONSUMER;
...@@ -339,11 +373,21 @@ acpi_pci_link_set ( ...@@ -339,11 +373,21 @@ acpi_pci_link_set (
resource.res.data.extended_irq.number_of_interrupts = 1; resource.res.data.extended_irq.number_of_interrupts = 1;
resource.res.data.extended_irq.interrupts[0] = irq; resource.res.data.extended_irq.interrupts[0] = irq;
/* ignore resource_source, it's optional */ /* ignore resource_source, it's optional */
break;
} }
resource.end.id = ACPI_RSTYPE_END_TAG; resource.end.id = ACPI_RSTYPE_END_TAG;
/* Attempt to set the resource */ /* Attempt to set the resource */
status = acpi_set_current_resources(link->handle, &buffer); status = acpi_set_current_resources(link->handle, &buffer);
/* if we failed and IRQ <= 15, try again with an extended descriptor */
if (ACPI_FAILURE(status) && (resource_type == ACPI_RSTYPE_IRQ)) {
resource_type = ACPI_RSTYPE_EXT_IRQ;
printk(PREFIX "Retrying with extended IRQ descriptor\n");
goto retry_programming;
}
/* check for total failure */
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _SRS\n")); ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _SRS\n"));
return_VALUE(-ENODEV); return_VALUE(-ENODEV);
...@@ -361,7 +405,7 @@ acpi_pci_link_set ( ...@@ -361,7 +405,7 @@ acpi_pci_link_set (
} }
/* Make sure the active IRQ is the one we requested. */ /* Make sure the active IRQ is the one we requested. */
result = acpi_pci_link_get_current(link); result = acpi_pci_link_try_get_current(link, irq);
if (result) { if (result) {
return_VALUE(result); return_VALUE(result);
} }
...@@ -456,7 +500,6 @@ static int acpi_pci_link_allocate(struct acpi_pci_link* link) { ...@@ -456,7 +500,6 @@ static int acpi_pci_link_allocate(struct acpi_pci_link* link) {
irq = link->irq.active; irq = link->irq.active;
} else { } else {
irq = link->irq.possible[0]; irq = link->irq.possible[0];
}
/* /*
* Select the best IRQ. This is done in reverse to promote * Select the best IRQ. This is done in reverse to promote
...@@ -466,6 +509,7 @@ static int acpi_pci_link_allocate(struct acpi_pci_link* link) { ...@@ -466,6 +509,7 @@ static int acpi_pci_link_allocate(struct acpi_pci_link* link) {
if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]]) if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
irq = link->irq.possible[i]; irq = link->irq.possible[i];
} }
}
/* Attempt to enable the link device at this IRQ. */ /* Attempt to enable the link device at this IRQ. */
if (acpi_pci_link_set(link, irq)) { if (acpi_pci_link_set(link, irq)) {
...@@ -574,10 +618,6 @@ acpi_pci_link_add ( ...@@ -574,10 +618,6 @@ acpi_pci_link_add (
else else
printk(" %d", link->irq.possible[i]); printk(" %d", link->irq.possible[i]);
} }
if (!link->irq.active)
printk(", disabled");
else if (!found)
printk(", enabled at IRQ %d", link->irq.active);
printk(")\n"); printk(")\n");
/* TBD: Acquire/release lock */ /* TBD: Acquire/release lock */
......
...@@ -69,7 +69,8 @@ struct acpi_table_sdt { ...@@ -69,7 +69,8 @@ struct acpi_table_sdt {
static unsigned long sdt_pa; /* Physical Address */ static unsigned long sdt_pa; /* Physical Address */
static unsigned long sdt_count; /* Table count */ static unsigned long sdt_count; /* Table count */
static struct acpi_table_sdt *sdt_entry;
static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES];
void void
acpi_table_print ( acpi_table_print (
...@@ -418,12 +419,6 @@ acpi_table_get_sdt ( ...@@ -418,12 +419,6 @@ acpi_table_get_sdt (
sdt_count = ACPI_MAX_TABLES; sdt_count = ACPI_MAX_TABLES;
} }
sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
if (!sdt_entry) {
printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
return -ENOMEM;
}
for (i = 0; i < sdt_count; i++) for (i = 0; i < sdt_count; i++)
sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i]; sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
} }
...@@ -470,12 +465,6 @@ acpi_table_get_sdt ( ...@@ -470,12 +465,6 @@ acpi_table_get_sdt (
sdt_count = ACPI_MAX_TABLES; sdt_count = ACPI_MAX_TABLES;
} }
sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
if (!sdt_entry) {
printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
return -ENOMEM;
}
for (i = 0; i < sdt_count; i++) for (i = 0; i < sdt_count; i++)
sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i]; sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
} }
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
/* Version string */ /* Version string */
#define ACPI_CA_VERSION 0x20030813 #define ACPI_CA_VERSION 0x20030918
/* Maximum objects in the various object caches */ /* Maximum objects in the various object caches */
......
...@@ -152,10 +152,6 @@ void ...@@ -152,10 +152,6 @@ void
acpi_dm_decode_internal_object ( acpi_dm_decode_internal_object (
union acpi_operand_object *obj_desc); union acpi_operand_object *obj_desc);
void
acpi_dm_decode_node (
struct acpi_namespace_node *node);
u32 u32
acpi_dm_block_type ( acpi_dm_block_type (
union acpi_parse_object *op); union acpi_parse_object *op);
......
...@@ -91,11 +91,12 @@ struct acpi_walk_state ...@@ -91,11 +91,12 @@ struct acpi_walk_state
struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */ struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
union acpi_operand_object **caller_return_desc; union acpi_operand_object **caller_return_desc;
union acpi_generic_state *control_state; /* List of control states (nested IFs) */ union acpi_generic_state *control_state; /* List of control states (nested IFs) */
struct acpi_namespace_node *deferred_node; /* Used when executing deferred opcodes */
struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */ struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
struct acpi_namespace_node *method_call_node; /* Called method Node*/ struct acpi_namespace_node *method_call_node; /* Called method Node*/
union acpi_parse_object *method_call_op; /* method_call Op if running a method */ union acpi_parse_object *method_call_op; /* method_call Op if running a method */
union acpi_operand_object *method_desc; /* Method descriptor if running a method */ union acpi_operand_object *method_desc; /* Method descriptor if running a method */
struct acpi_namespace_node *method_node; /* Method Node if running a method */ struct acpi_namespace_node *method_node; /* Method node if running a method. */
union acpi_parse_object *op; /* Current parser op */ union acpi_parse_object *op; /* Current parser op */
union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS+1]; /* Operands passed to the interpreter (+1 for NULL terminator) */ union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS+1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
const struct acpi_opcode_info *op_info; /* Info on current opcode */ const struct acpi_opcode_info *op_info; /* Info on current opcode */
......
...@@ -424,17 +424,17 @@ int ec_write(u8 addr, u8 val); ...@@ -424,17 +424,17 @@ int ec_write(u8 addr, u8 val);
#endif /*CONFIG_ACPI_EC*/ #endif /*CONFIG_ACPI_EC*/
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI_INTERPRETER
int acpi_blacklisted(void); int acpi_blacklisted(void);
#else #else /*!CONFIG_ACPI_INTERPRETER*/
static inline int acpi_blacklisted(void) static inline int acpi_blacklisted(void)
{ {
return 0; return 0;
} }
#endif /*CONFIG_ACPI*/ #endif /*!CONFIG_ACPI_INTERPRETER*/
#endif /*_LINUX_ACPI_H*/ #endif /*_LINUX_ACPI_H*/
...@@ -104,4 +104,3 @@ void md_run_setup(void); ...@@ -104,4 +104,3 @@ void md_run_setup(void);
static inline void md_run_setup(void) {} static inline void md_run_setup(void) {}
#endif #endif
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