Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
f028ebf3
Commit
f028ebf3
authored
Sep 30, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-acpi.bkbits.net/linux-acpi-release-2.6.0
into home.osdl.org:/home/torvalds/v2.5/linux
parents
ef4604f8
9d363b8d
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
554 additions
and
392 deletions
+554
-392
MAINTAINERS
MAINTAINERS
+10
-0
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/boot.c
+5
-5
arch/i386/kernel/cpu/cpufreq/acpi.c
arch/i386/kernel/cpu/cpufreq/acpi.c
+8
-8
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+4
-6
arch/i386/kernel/mpparse.c
arch/i386/kernel/mpparse.c
+27
-23
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+3
-3
arch/ia64/kernel/acpi.c
arch/ia64/kernel/acpi.c
+1
-1
drivers/acpi/Kconfig
drivers/acpi/Kconfig
+49
-48
drivers/acpi/Makefile
drivers/acpi/Makefile
+1
-1
drivers/acpi/asus_acpi.c
drivers/acpi/asus_acpi.c
+154
-123
drivers/acpi/bus.c
drivers/acpi/bus.c
+1
-2
drivers/acpi/dispatcher/dsfield.c
drivers/acpi/dispatcher/dsfield.c
+24
-18
drivers/acpi/dispatcher/dsinit.c
drivers/acpi/dispatcher/dsinit.c
+2
-2
drivers/acpi/dispatcher/dsopcode.c
drivers/acpi/dispatcher/dsopcode.c
+23
-12
drivers/acpi/dispatcher/dsutils.c
drivers/acpi/dispatcher/dsutils.c
+64
-52
drivers/acpi/dispatcher/dswload.c
drivers/acpi/dispatcher/dswload.c
+18
-0
drivers/acpi/dispatcher/dswscope.c
drivers/acpi/dispatcher/dswscope.c
+4
-7
drivers/acpi/dispatcher/dswstate.c
drivers/acpi/dispatcher/dswstate.c
+20
-10
drivers/acpi/ec.c
drivers/acpi/ec.c
+5
-2
drivers/acpi/events/evregion.c
drivers/acpi/events/evregion.c
+3
-3
drivers/acpi/executer/excreate.c
drivers/acpi/executer/excreate.c
+2
-6
drivers/acpi/executer/exfldio.c
drivers/acpi/executer/exfldio.c
+35
-1
drivers/acpi/namespace/nsdump.c
drivers/acpi/namespace/nsdump.c
+2
-2
drivers/acpi/namespace/nssearch.c
drivers/acpi/namespace/nssearch.c
+4
-4
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nsutils.c
+7
-2
drivers/acpi/parser/psparse.c
drivers/acpi/parser/psparse.c
+15
-16
drivers/acpi/pci_irq.c
drivers/acpi/pci_irq.c
+3
-0
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+52
-12
drivers/acpi/tables.c
drivers/acpi/tables.c
+2
-13
include/acpi/acconfig.h
include/acpi/acconfig.h
+1
-1
include/acpi/acdisasm.h
include/acpi/acdisasm.h
+0
-4
include/acpi/acstruct.h
include/acpi/acstruct.h
+2
-1
include/linux/acpi.h
include/linux/acpi.h
+3
-3
init/do_mounts.h
init/do_mounts.h
+0
-1
No files found.
MAINTAINERS
View file @
f028ebf3
...
@@ -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
...
...
arch/i386/kernel/acpi/boot.c
View file @
f028ebf3
...
@@ -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*/
#if
def 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
...
...
arch/i386/kernel/cpu/cpufreq/acpi.c
View file @
f028ebf3
...
@@ -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
;
u
8
value
=
0
;
u
16
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%0
2
x to port 0x%04x
\n
"
,
value
,
port
));
"Writing 0x%0
4
x to port 0x%04x
\n
"
,
value
,
port
));
out
b
(
value
,
port
);
out
w
(
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%0
2
x from port 0x%04x
\n
"
,
"Looking for 0x%0
4
x from port 0x%04x
\n
"
,
(
u
8
)
perf
->
states
[
state
].
status
,
port
));
(
u
16
)
perf
->
states
[
state
].
status
,
port
));
for
(
i
=
0
;
i
<
100
;
i
++
)
{
for
(
i
=
0
;
i
<
100
;
i
++
)
{
value
=
in
b
(
port
);
value
=
in
w
(
port
);
if
(
value
==
(
u
8
)
perf
->
states
[
state
].
status
)
if
(
value
==
(
u
16
)
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
;
...
...
arch/i386/kernel/dmi_scan.c
View file @
f028ebf3
...
@@ -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
,
}
...
...
arch/i386/kernel/mpparse.c
View file @
f028ebf3
...
@@ -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
);
}
}
#if
def 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
;
* See the note at the end of ACPI 2.0b section
* 5.2.10.8 for what this is about.
*/
if
(
entry
->
bus_irq
!=
entry
->
global_irq
)
{
acpi_fadt
.
sci_int
=
entry
->
global_irq
;
irq
=
entry
->
global_irq
;
break
;
}
else
return
;
}
entry
=
(
struct
acpi_table_int_src_ovr
*
)
entry
=
(
struct
acpi_table_int_src_ovr
*
)
((
unsigned
long
)
entry
+
entry
->
header
.
length
);
((
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
* 5.2.10.8 for what this is about.
*/
flags
=
entry
->
flags
;
acpi_fadt
.
sci_int
=
entry
->
global_irq
;
irq
=
entry
->
global_irq
;
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*/
arch/i386/kernel/setup.c
View file @
f028ebf3
...
@@ -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
);
...
...
arch/ia64/kernel/acpi.c
View file @
f028ebf3
...
@@ -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
)
...
...
drivers/acpi/Kconfig
View file @
f028ebf3
...
@@ -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
...
@@ -170,6 +160,9 @@ config ACPI_ASUS
...
@@ -170,6 +160,9 @@ config ACPI_ASUS
display brightness and output, switching the LCD backlight on and off,
display brightness and output, switching the LCD backlight on and off,
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
...
@@ -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
drivers/acpi/Makefile
View file @
f028ebf3
...
@@ -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)
...
...
drivers/acpi/asus_acpi.c
View file @
f028ebf3
...
@@ -26,13 +26,17 @@
...
@@ -26,13 +26,17 @@
* Johann Wiesner - Small compile fixes
* Johann Wiesner - Small compile fixes
* John Belmonte - ACPI code for Toshiba laptop was a good starting point.
* John Belmonte - ACPI code for Toshiba laptop was a good starting point.
*
*
* TODO
* TODO
:
* add Fn key status
* add Fn key status
* Add mode selection on module loading (parameter) -> still necessary
?
* Add mode selection on module loading (parameter) -> still necessary?
* Complete display switching -- may require dirty hacks?
* Complete display switching -- may require dirty hacks?
*
*/
*/
#include <linux/config.h>
#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS) && defined (MODULE)
#include <linux/modversions.h>
#endif
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/init.h>
...
@@ -41,7 +45,7 @@
...
@@ -41,7 +45,7 @@
#include <acpi/acpi_drivers.h>
#include <acpi/acpi_drivers.h>
#include <acpi/acpi_bus.h>
#include <acpi/acpi_bus.h>
#define ASUS_ACPI_VERSION "0.2
4a
"
#define ASUS_ACPI_VERSION "0.2
6
"
#define PROC_ASUS "asus" //the directory
#define PROC_ASUS "asus" //the directory
#define PROC_MLED "mled"
#define PROC_MLED "mled"
...
@@ -110,20 +114,24 @@ struct asus_hotk {
...
@@ -110,20 +114,24 @@ struct asus_hotk {
struct
model_data
*
methods
;
//methods available on the laptop
struct
model_data
*
methods
;
//methods available on the laptop
u8
brightness
;
//brighness level
u8
brightness
;
//brighness level
enum
{
enum
{
L2X
=
0
,
//L200D -> TODO check Q11 (Fn+F8)
A1X
=
0
,
//A1340D, A1300F
// Calling this method simply hang the
A2X
,
//A2500H
D1X
,
//D1
L1X
,
//L1400B
L2X
,
//L2000D -> TODO check Q11 (Fn+F8)
// Calling this method simply hangs the
// computer, ISMI method hangs the laptop.
// computer, ISMI method hangs the laptop.
L3X
,
//L3C
L3D
,
//L3400D
L3D
,
//L3400D
L3X
,
//L3C
L5X
,
//L5C TODO this model seems to have one more
// LED, add support
M2X
,
//M2400E
M2X
,
//M2400E
M3N
,
//M3700N, but also S1300N -> TODO WLED
S1X
,
//S1300A -> TODO special keys do not work ?
S1X
,
//S1300A -> TODO special keys do not work ?
D1X
,
//D1
S2X
,
//S200 (J1 reported), Victor MP-XP7210
L1X
,
//L1400B
//TODO A1370D does not seem to have an ATK device
A1X
,
//A1340D, A1300F
J1X
,
//S200 (J1)
//TODO A1370D does not seems to have a ATK device
// L8400 model doesn't have ATK
// L8400 model doesn't have ATK
END_MODEL
,
END_MODEL
}
model
;
//Models currently supported
}
model
;
//Models currently supported
u16
event_count
[
128
];
//count for each event TODO make this better
u16
event_count
[
128
];
//count for each event TODO make this better
};
};
...
@@ -133,7 +141,8 @@ struct asus_hotk {
...
@@ -133,7 +141,8 @@ struct asus_hotk {
#define S1X_PREFIX "\\_SB.PCI0.PX40."
#define S1X_PREFIX "\\_SB.PCI0.PX40."
#define L1X_PREFIX S1X_PREFIX
#define L1X_PREFIX S1X_PREFIX
#define A1X_PREFIX "\\_SB.PCI0.ISA.EC0."
#define A1X_PREFIX "\\_SB.PCI0.ISA.EC0."
#define J1X_PREFIX A1X_PREFIX
#define S2X_PREFIX A1X_PREFIX
#define M3N_PREFIX "\\_SB.PCI0.SBRG.EC0."
static
struct
model_data
model_conf
[
END_MODEL
]
=
{
static
struct
model_data
model_conf
[
END_MODEL
]
=
{
/*
/*
...
@@ -147,33 +156,43 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -147,33 +156,43 @@ static struct model_data model_conf[END_MODEL] = {
* it seems to be a kind of switch, but what for ?
* it seems to be a kind of switch, but what for ?
*
*
*/
*/
{
"A1X"
,
"MLED"
,
"
\\
MAIL"
,
NULL
,
NULL
,
A1X_PREFIX
"_Q10"
,
"
\\
BKLI"
,
A1X_PREFIX
"_Q0E"
,
A1X_PREFIX
"_Q0F"
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
},
{
"A2X"
,
"MLED"
,
NULL
,
"WLED"
,
"
\\
SG66"
,
"
\\
Q10"
,
"
\\
BAOF"
,
"
\\
Q0E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
"
\\
CMOD"
,
"SDSP"
,
"
\\
INFB"
},
{
"D1X"
,
"MLED"
,
NULL
,
NULL
,
NULL
,
"
\\
Q0D"
,
"
\\
GP11"
,
"
\\
Q0C"
,
"
\\
Q0B"
,
NULL
,
NULL
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
INFB"
},
{
"L1X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
L1X_PREFIX
"Q10"
,
"
\\
PNOF"
,
L1X_PREFIX
"Q0F"
,
L1X_PREFIX
"Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BRIT"
,
NULL
,
NULL
},
{
"L2X"
,
"MLED"
,
"
\\
SGP6"
,
"WLED"
,
"
\\
RCP3"
,
"
\\
Q10"
,
"
\\
SGP0"
,
{
"L2X"
,
"MLED"
,
"
\\
SGP6"
,
"WLED"
,
"
\\
RCP3"
,
"
\\
Q10"
,
"
\\
SGP0"
,
"
\\
Q0E"
,
"
\\
Q0F"
,
NULL
,
NULL
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
"
\\
Q0E"
,
"
\\
Q0F"
,
NULL
,
NULL
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
{
"L3D"
,
"MLED"
,
"
\\
MALD"
,
"WLED"
,
NULL
,
"
\\
Q10"
,
"
\\
BKLG"
,
"
\\
Q0E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
INFB"
},
{
"L3X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
L3X_PREFIX
"_Q10"
,
"
\\
GL32"
,
{
"L3X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
L3X_PREFIX
"_Q10"
,
"
\\
GL32"
,
L3X_PREFIX
"_Q0F"
,
L3X_PREFIX
"_Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BLVL"
,
"SDSP"
,
L3X_PREFIX
"_Q0F"
,
L3X_PREFIX
"_Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
_SB.PCI0.PCI1.VGAC.NMAP"
},
"
\\
_SB.PCI0.PCI1.VGAC.NMAP"
},
{
"L
3D"
,
"MLED"
,
"
\\
MALD"
,
"WLED"
,
NULL
,
"
\\
Q10"
,
"
\\
BKLG"
,
{
"L
5X"
,
"MLED"
,
NULL
,
"WLED"
,
"WRED"
,
"
\\
Q0D"
,
"
\\
BAOF"
,
"
\\
Q0
E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
INFB"
},
"
\\
Q0
C"
,
"
\\
Q0B"
,
"SPLV"
,
"GPLV"
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
{
"M2X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
"
\\
Q10"
,
"
\\
GP06"
,
{
"M2X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
"
\\
Q10"
,
"
\\
GP06"
,
"
\\
Q0E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
"
\\
Q0E"
,
"
\\
Q0F"
,
"SPLV"
,
"GPLV"
,
NULL
,
"SDSP"
,
"
\\
INFB"
},
{
"M3N"
,
"MLED"
,
NULL
,
"WLED"
,
"
\\
PO33"
,
M3N_PREFIX
"_Q10"
,
"
\\
BKLT"
,
M3N_PREFIX
"_Q0F"
,
M3N_PREFIX
"_Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
LBTN"
,
"SDSP"
,
"
\\
ADVG"
},
{
"S1X"
,
"MLED"
,
"
\\
EMLE"
,
"WLED"
,
NULL
,
S1X_PREFIX
"Q10"
,
"
\\
PNOF"
,
{
"S1X"
,
"MLED"
,
"
\\
EMLE"
,
"WLED"
,
NULL
,
S1X_PREFIX
"Q10"
,
"
\\
PNOF"
,
S1X_PREFIX
"Q0F"
,
S1X_PREFIX
"Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BRIT"
,
NULL
,
NULL
},
S1X_PREFIX
"Q0F"
,
S1X_PREFIX
"Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BRIT"
,
NULL
,
NULL
},
{
"D1X"
,
"MLED"
,
NULL
,
NULL
,
NULL
,
"
\\
Q0D"
,
"
\\
GP11"
,
{
"S2X"
,
"MLED"
,
"
\\
MAIL"
,
NULL
,
NULL
,
S2X_PREFIX
"_Q10"
,
"
\\
BKLI"
,
"
\\
Q0C"
,
"
\\
Q0B"
,
NULL
,
NULL
,
"
\\
BLVL"
,
"SDSP"
,
"
\\
INFB"
},
S2X_PREFIX
"_Q0B"
,
S2X_PREFIX
"_Q0A"
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
}
{
"L1X"
,
"MLED"
,
NULL
,
"WLED"
,
NULL
,
L1X_PREFIX
"Q10"
,
"
\\
PNOF"
,
L1X_PREFIX
"Q0F"
,
L1X_PREFIX
"Q0E"
,
"SPLV"
,
"GPLV"
,
"
\\
BRIT"
,
NULL
,
NULL
},
{
"A1X"
,
"MLED"
,
"
\\
MAIL"
,
NULL
,
NULL
,
A1X_PREFIX
"_Q10"
,
"
\\
BKLI"
,
A1X_PREFIX
"_Q0E"
,
A1X_PREFIX
"_Q0F"
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
},
{
"J1X"
,
"MLED"
,
"
\\
MAIL"
,
NULL
,
NULL
,
J1X_PREFIX
"_Q10"
,
"
\\
BKLI"
,
J1X_PREFIX
"_Q0B"
,
J1X_PREFIX
"_Q0A"
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
}
};
};
/* procdir we use */
/* procdir we use */
...
@@ -234,7 +253,7 @@ static int read_acpi_int(acpi_handle handle, const char *method, int *val)
...
@@ -234,7 +253,7 @@ static int read_acpi_int(acpi_handle handle, const char *method, int *val)
output
.
length
=
sizeof
(
out_obj
);
output
.
length
=
sizeof
(
out_obj
);
output
.
pointer
=
&
out_obj
;
output
.
pointer
=
&
out_obj
;
status
=
acpi_evaluate_object
(
handle
,
(
char
*
)
method
,
NULL
,
&
output
);
status
=
acpi_evaluate_object
(
handle
,
(
char
*
)
method
,
NULL
,
&
output
);
*
val
=
out_obj
.
integer
.
value
;
*
val
=
out_obj
.
integer
.
value
;
return
(
status
==
AE_OK
)
&&
(
out_obj
.
type
==
ACPI_TYPE_INTEGER
);
return
(
status
==
AE_OK
)
&&
(
out_obj
.
type
==
ACPI_TYPE_INTEGER
);
}
}
...
@@ -249,6 +268,7 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
...
@@ -249,6 +268,7 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
void
*
data
)
void
*
data
)
{
{
int
len
=
0
;
int
len
=
0
;
int
sfun
;
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
char
buf
[
16
];
//enough for all info
char
buf
[
16
];
//enough for all info
/*
/*
...
@@ -257,28 +277,27 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
...
@@ -257,28 +277,27 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
*/
*/
len
+=
sprintf
(
page
,
ACPI_HOTK_NAME
" "
ASUS_ACPI_VERSION
"
\n
"
);
len
+=
sprintf
(
page
,
ACPI_HOTK_NAME
" "
ASUS_ACPI_VERSION
"
\n
"
);
len
+=
len
+=
sprintf
(
page
+
len
,
"Model reference : %s
\n
"
,
sprintf
(
page
+
len
,
"Model reference : %s
\n
"
,
hotk
->
methods
->
name
);
hotk
->
methods
->
name
);
if
(
read_acpi_int
(
hotk
->
handle
,
"SFUN"
,
&
sfun
))
len
+=
sprintf
(
page
+
len
,
"SFUN value : 0x%04x
\n
"
,
sfun
);
if
(
asus_info
)
{
if
(
asus_info
)
{
snprintf
(
buf
,
5
,
"%s"
,
asus_info
->
signature
);
len
+=
sprintf
(
page
+
len
,
"ACPI signature : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
length
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
length
);
len
+=
sprintf
(
page
+
len
,
"Table length : %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"DSDT length : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
revision
);
len
+=
sprintf
(
page
+
len
,
"ACPI minor version : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
checksum
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
checksum
);
len
+=
sprintf
(
page
+
len
,
"Checksum : %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"DSDT checksum : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%d"
,
asus_info
->
revision
);
len
+=
sprintf
(
page
+
len
,
"DSDT revision : %s
\n
"
,
buf
);
snprintf
(
buf
,
7
,
"%s"
,
asus_info
->
oem_id
);
snprintf
(
buf
,
7
,
"%s"
,
asus_info
->
oem_id
);
len
+=
sprintf
(
page
+
len
,
"OEM id
entification
: %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"OEM id
: %s
\n
"
,
buf
);
snprintf
(
buf
,
9
,
"%s"
,
asus_info
->
oem_table_id
);
snprintf
(
buf
,
9
,
"%s"
,
asus_info
->
oem_table_id
);
len
+=
sprintf
(
page
+
len
,
"OEM table id : %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"OEM table id : %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
oem_revision
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
oem_revision
);
len
+=
sprintf
(
page
+
len
,
"OEM rev
number
: 0x%s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"OEM rev
ision
: 0x%s
\n
"
,
buf
);
snprintf
(
buf
,
5
,
"%s"
,
asus_info
->
asl_compiler_id
);
snprintf
(
buf
,
5
,
"%s"
,
asus_info
->
asl_compiler_id
);
len
+=
sprintf
(
page
+
len
,
"ASL comp vendor
ID
: %s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"ASL comp vendor
id
: %s
\n
"
,
buf
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
asl_compiler_revision
);
snprintf
(
buf
,
16
,
"%x"
,
asus_info
->
asl_compiler_revision
);
len
+=
sprintf
(
page
+
len
,
"ASL comp rev
number
: 0x%s
\n
"
,
buf
);
len
+=
sprintf
(
page
+
len
,
"ASL comp rev
ision
: 0x%s
\n
"
,
buf
);
}
}
return
len
;
return
len
;
...
@@ -304,7 +323,7 @@ proc_read_mled(char *page, char **start, off_t off, int count, int *eof,
...
@@ -304,7 +323,7 @@ proc_read_mled(char *page, char **start, off_t off, int count, int *eof,
&
led_status
))
&
led_status
))
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
else
else
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading MLED "
printk
(
KERN_
WARNING
"Asus ACPI: Error reading MLED "
"status
\n
"
);
"status
\n
"
);
}
else
{
}
else
{
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
MLED_ON
)
?
1
:
0
);
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
MLED_ON
)
?
1
:
0
);
...
@@ -334,7 +353,7 @@ proc_write_mled(struct file *file, const char *buffer,
...
@@ -334,7 +353,7 @@ proc_write_mled(struct file *file, const char *buffer,
/* We don't have to check mt_mled exists if we are here :) */
/* We don't have to check mt_mled exists if we are here :) */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_mled
,
led_out
,
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_mled
,
led_out
,
NULL
))
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: MLED write failed
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: MLED write failed
\n
"
);
...
@@ -355,11 +374,11 @@ proc_read_wled(char *page, char **start, off_t off, int count, int *eof,
...
@@ -355,11 +374,11 @@ proc_read_wled(char *page, char **start, off_t off, int count, int *eof,
int
led_status
;
int
led_status
;
if
(
hotk
->
methods
->
wled_status
)
{
if
(
hotk
->
methods
->
wled_status
)
{
if
(
read_acpi_int
(
NULL
,
hotk
->
methods
->
m
led_status
,
if
(
read_acpi_int
(
NULL
,
hotk
->
methods
->
w
led_status
,
&
led_status
))
&
led_status
))
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
len
=
sprintf
(
page
,
"%d
\n
"
,
led_status
);
else
else
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading WLED "
printk
(
KERN_
WARNING
"Asus ACPI: Error reading WLED "
"status
\n
"
);
"status
\n
"
);
}
else
{
}
else
{
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
WLED_ON
)
?
1
:
0
);
len
=
sprintf
(
page
,
"%d
\n
"
,
(
hotk
->
status
&
WLED_ON
)
?
1
:
0
);
...
@@ -386,7 +405,7 @@ proc_write_wled(struct file *file, const char *buffer,
...
@@ -386,7 +405,7 @@ proc_write_wled(struct file *file, const char *buffer,
/* We don't have to check if mt_wled exists if we are here :) */
/* We don't have to check if mt_wled exists if we are here :) */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_wled
,
led_out
,
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
mt_wled
,
led_out
,
NULL
))
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: WLED write failed
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: WLED write failed
\n
"
);
return
count
;
return
count
;
...
@@ -399,7 +418,7 @@ static int get_lcd_state(struct asus_hotk *hotk)
...
@@ -399,7 +418,7 @@ static int get_lcd_state(struct asus_hotk *hotk)
/* We don't have to check anything, if we are here */
/* We don't have to check anything, if we are here */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
lcd_status
,
&
lcd
))
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
lcd_status
,
&
lcd
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading LCD status
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading LCD status
\n
"
);
if
(
hotk
->
model
==
L2X
)
if
(
hotk
->
model
==
L2X
)
lcd
=
~
lcd
;
lcd
=
~
lcd
;
...
@@ -438,7 +457,7 @@ proc_write_lcd(struct file *file, const char *buffer,
...
@@ -438,7 +457,7 @@ proc_write_lcd(struct file *file, const char *buffer,
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
mt_lcd_switch
,
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
mt_lcd_switch
,
NULL
,
NULL
);
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error switching LCD
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error switching LCD
\n
"
);
}
}
return
count
;
return
count
;
...
@@ -452,15 +471,15 @@ static void set_brightness(int value, struct asus_hotk *hotk)
...
@@ -452,15 +471,15 @@ static void set_brightness(int value, struct asus_hotk *hotk)
{
{
acpi_status
status
=
0
;
acpi_status
status
=
0
;
/*
ATKD
laptop */
/*
SPLV
laptop */
if
(
hotk
->
methods
->
brightness_set
)
{
if
(
hotk
->
methods
->
brightness_set
)
{
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_set
,
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_set
,
value
,
NULL
))
value
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error changing brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error changing brightness
\n
"
);
return
;
return
;
}
}
/*
HOTK laptop
if we are here, act as appropriate */
/*
No SPLV method
if we are here, act as appropriate */
value
-=
hotk
->
brightness
;
value
-=
hotk
->
brightness
;
while
(
value
!=
0
)
{
while
(
value
!=
0
)
{
status
=
acpi_evaluate_object
(
NULL
,
(
value
>
0
)
?
status
=
acpi_evaluate_object
(
NULL
,
(
value
>
0
)
?
...
@@ -469,7 +488,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
...
@@ -469,7 +488,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
NULL
,
NULL
);
NULL
,
NULL
);
(
value
>
0
)
?
value
--
:
value
++
;
(
value
>
0
)
?
value
--
:
value
++
;
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error changing brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error changing brightness
\n
"
);
}
}
return
;
return
;
}
}
...
@@ -478,15 +497,15 @@ static int read_brightness(struct asus_hotk *hotk)
...
@@ -478,15 +497,15 @@ static int read_brightness(struct asus_hotk *hotk)
{
{
int
value
;
int
value
;
if
(
hotk
->
methods
->
brightness_get
)
{
/*
ATKD
laptop */
if
(
hotk
->
methods
->
brightness_get
)
{
/*
SPLV/GPLV
laptop */
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_get
,
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_get
,
&
value
))
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
if
(
hotk
->
methods
->
brightness_status
)
{
/* For D1 for example */
}
else
if
(
hotk
->
methods
->
brightness_status
)
{
/* For D1 for example */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
brightness_status
,
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
brightness_status
,
&
value
))
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading brightness
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
/*
HOTK laptop
*/
}
else
/*
No GPLV method
*/
value
=
hotk
->
brightness
;
value
=
hotk
->
brightness
;
return
value
;
return
value
;
}
}
...
@@ -512,7 +531,7 @@ proc_write_brn(struct file *file, const char *buffer,
...
@@ -512,7 +531,7 @@ proc_write_brn(struct file *file, const char *buffer,
/* 0 <= value <= 15 */
/* 0 <= value <= 15 */
set_brightness
(
value
,
hotk
);
set_brightness
(
value
,
hotk
);
}
else
{
}
else
{
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading user input
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading user input
\n
"
);
}
}
return
count
;
return
count
;
...
@@ -523,7 +542,7 @@ static void set_display(int value, struct asus_hotk *hotk)
...
@@ -523,7 +542,7 @@ static void set_display(int value, struct asus_hotk *hotk)
/* no sanity check needed for now */
/* no sanity check needed for now */
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_set
,
if
(
!
write_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_set
,
value
,
NULL
))
value
,
NULL
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error setting display
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error setting display
\n
"
);
return
;
return
;
}
}
...
@@ -540,12 +559,12 @@ proc_read_disp(char *page, char **start, off_t off, int count, int *eof,
...
@@ -540,12 +559,12 @@ proc_read_disp(char *page, char **start, off_t off, int count, int *eof,
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_get
,
&
value
))
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
display_get
,
&
value
))
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading display status
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading display status
\n
"
);
return
sprintf
(
page
,
"%d
\n
"
,
value
);
return
sprintf
(
page
,
"%d
\n
"
,
value
);
}
}
/*
/*
*
Preliminary
support for display switching. As of now: 0x01 should activate
*
Experimental
support for display switching. As of now: 0x01 should activate
* the LCD output, 0x02 should do for CRT, and 0x04 for TV-Out. Any combination
* the LCD output, 0x02 should do for CRT, and 0x04 for TV-Out. Any combination
* (bitwise) of these will suffice. I never actually tested 3 displays hooked up
* (bitwise) of these will suffice. I never actually tested 3 displays hooked up
* simultaneously, so be warned.
* simultaneously, so be warned.
...
@@ -562,13 +581,13 @@ proc_write_disp(struct file *file, const char *buffer,
...
@@ -562,13 +581,13 @@ proc_write_disp(struct file *file, const char *buffer,
if
(
sscanf
(
buffer
,
"%d"
,
&
value
)
==
1
)
if
(
sscanf
(
buffer
,
"%d"
,
&
value
)
==
1
)
set_display
(
value
,
hotk
);
set_display
(
value
,
hotk
);
else
{
else
{
printk
(
KERN_
NOTICE
"Asus ACPI: Error reading user input
\n
"
);
printk
(
KERN_
WARNING
"Asus ACPI: Error reading user input
\n
"
);
}
}
return
count
;
return
count
;
}
}
static
int
asus_hotk_add_fs
(
struct
acpi_device
*
device
)
static
int
__init
asus_hotk_add_fs
(
struct
acpi_device
*
device
)
{
{
struct
proc_dir_entry
*
proc
;
struct
proc_dir_entry
*
proc
;
struct
asus_hotk
*
hotk
=
acpi_driver_data
(
device
);
struct
asus_hotk
*
hotk
=
acpi_driver_data
(
device
);
...
@@ -582,7 +601,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -582,7 +601,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
if
((
asus_uid
==
0
)
&&
(
asus_gid
==
0
)){
if
((
asus_uid
==
0
)
&&
(
asus_gid
==
0
)){
mode
=
S_IFREG
|
S_IRUGO
|
S_IWUGO
;
mode
=
S_IFREG
|
S_IRUGO
|
S_IWUGO
;
}
else
{
}
else
{
mode
=
S_IFREG
|
S_IRUSR
|
S_IRGRP
|
S_IWUSR
|
S_IWGRP
;
mode
=
S_IFREG
|
S_IRUSR
|
S_IRGRP
|
S_IWUSR
|
S_IWGRP
;
}
}
...
@@ -598,7 +617,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -598,7 +617,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_INFOS
printk
(
KERN_
WARNING
" Unable to create "
PROC_INFOS
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
...
@@ -612,7 +631,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -612,7 +631,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_WLED
printk
(
KERN_
WARNING
" Unable to create "
PROC_WLED
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
}
}
...
@@ -627,7 +646,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -627,7 +646,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_MLED
printk
(
KERN_
WARNING
" Unable to create "
PROC_MLED
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
}
}
...
@@ -646,7 +665,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -646,7 +665,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_LCD
printk
(
KERN_
WARNING
" Unable to create "
PROC_LCD
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
}
}
...
@@ -662,7 +681,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -662,7 +681,7 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_BRN
printk
(
KERN_
WARNING
" Unable to create "
PROC_BRN
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
}
}
...
@@ -677,19 +696,19 @@ static int asus_hotk_add_fs(struct acpi_device *device)
...
@@ -677,19 +696,19 @@ static int asus_hotk_add_fs(struct acpi_device *device)
proc
->
uid
=
asus_uid
;
proc
->
uid
=
asus_uid
;
proc
->
gid
=
asus_gid
;;
proc
->
gid
=
asus_gid
;;
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Unable to create "
PROC_DISP
printk
(
KERN_
WARNING
" Unable to create "
PROC_DISP
" fs entry
\n
"
);
" fs entry
\n
"
);
}
}
}
}
return
(
AE_OK
)
;
return
0
;
}
}
static
void
asus_hotk_notify
(
acpi_handle
handle
,
u32
event
,
void
*
data
)
static
void
asus_hotk_notify
(
acpi_handle
handle
,
u32
event
,
void
*
data
)
{
{
/* TODO Find a better way to handle events count. Here, in data, we receive
/* TODO Find a better way to handle events count. Here, in data, we receive
* the hotk, so we can
make anything !
!
* the hotk, so we can
do anything
!
*/
*/
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
struct
asus_hotk
*
hotk
=
(
struct
asus_hotk
*
)
data
;
...
@@ -712,19 +731,40 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
...
@@ -712,19 +731,40 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
* This function is used to initialize the hotk with right values. In this
* This function is used to initialize the hotk with right values. In this
* method, we can make all the detection we want, and modify the hotk struct
* method, we can make all the detection we want, and modify the hotk struct
*/
*/
static
int
asus_hotk_get_info
(
struct
asus_hotk
*
hotk
)
static
int
__init
asus_hotk_get_info
(
struct
asus_hotk
*
hotk
)
{
{
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
dsdt
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
model
=
NULL
;
union
acpi_object
*
model
=
NULL
;
int
bsts_result
;
acpi_status
status
;
/*
/*
* We have to write 0 on init this far for all ASUS models
* Get DSDT headers early enough to allow for differentiating between
* models, but late enough to allow acpi_bus_register_driver() to fail
* before doing anything ACPI-specific. Should we encounter a machine,
* which needs special handling (i.e. its hotkey device has a different
* HID), this bit will be moved. A global variable asus_info contains
* the DSDT header.
*/
*/
status
=
acpi_get_table
(
ACPI_TABLE_DSDT
,
1
,
&
dsdt
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_WARNING
" Couldn't get the DSDT table header
\n
"
);
else
asus_info
=
(
struct
acpi_table_header
*
)
dsdt
.
pointer
;
/* We have to write 0 on init this far for all ASUS models */
if
(
!
write_acpi_int
(
hotk
->
handle
,
"INIT"
,
0
,
&
buffer
))
{
if
(
!
write_acpi_int
(
hotk
->
handle
,
"INIT"
,
0
,
&
buffer
))
{
printk
(
KERN_
NOTICE
" Hotkey initialization failed
\n
"
);
printk
(
KERN_
ERR
" Hotkey initialization failed
\n
"
);
return
-
ENODEV
;
return
-
ENODEV
;
}
}
/* For testing purposes */
if
(
!
read_acpi_int
(
hotk
->
handle
,
"BSTS"
,
&
bsts_result
))
printk
(
KERN_WARNING
" Error calling BSTS
\n
"
);
else
if
(
bsts_result
)
printk
(
KERN_NOTICE
" BSTS called, 0x%02x returned
\n
"
,
bsts_result
);
/*
/*
* Here, we also use asus_info to make decision. For example, on INIT
* Here, we also use asus_info to make decision. For example, on INIT
* method, S1X and L1X models both reports to be L84F, but they don't
* method, S1X and L1X models both reports to be L84F, but they don't
...
@@ -749,26 +789,34 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
...
@@ -749,26 +789,34 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
hotk
->
model
=
L3X
;
hotk
->
model
=
L3X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2"
,
2
)
==
0
)
hotk
->
model
=
M2X
;
hotk
->
model
=
M2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M3N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"S1N"
,
3
)
==
0
)
hotk
->
model
=
M3N
;
/* S1300N is similar enough */
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L2"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L2"
,
2
)
==
0
)
hotk
->
model
=
L2X
;
hotk
->
model
=
L2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L8"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L8"
,
2
)
==
0
)
{
/* S1300A reports L84F, but L1400B too */
/* S1300A reports L84F, but L1400B too */
if
(
strncmp
(
asus_info
->
oem_table_id
,
"L1"
,
2
)
==
0
)
if
(
asus_info
)
{
hotk
->
model
=
L1X
;
if
(
strncmp
(
asus_info
->
oem_table_id
,
"L1"
,
2
)
==
0
)
else
hotk
->
model
=
L1X
;
}
else
hotk
->
model
=
S1X
;
hotk
->
model
=
S1X
;
}
else
if
(
strncmp
(
model
->
string
.
pointer
,
"D1"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"D1"
,
2
)
==
0
)
hotk
->
model
=
D1X
;
hotk
->
model
=
D1X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"A1"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"A1"
,
2
)
==
0
)
hotk
->
model
=
A1X
;
hotk
->
model
=
A1X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"A2"
,
2
)
==
0
)
hotk
->
model
=
A2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"J1"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"J1"
,
2
)
==
0
)
hotk
->
model
=
J1X
;
hotk
->
model
=
S2X
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L5"
,
2
)
==
0
)
hotk
->
model
=
L5X
;
if
(
hotk
->
model
==
END_MODEL
)
{
if
(
hotk
->
model
==
END_MODEL
)
{
/* By default use the same values, as I don't know others */
/* By default use the same values, as I don't know others */
printk
(
"unsupported, trying default values,
contact
the "
printk
(
"unsupported, trying default values,
supply
the "
"developers
\n
"
);
"developers
with your DSDT
\n
"
);
hotk
->
model
=
L2X
;
hotk
->
model
=
L2X
;
}
else
{
}
else
{
printk
(
"supported
\n
"
);
printk
(
"supported
\n
"
);
...
@@ -783,7 +831,7 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
...
@@ -783,7 +831,7 @@ static int asus_hotk_get_info(struct asus_hotk *hotk)
static
int
asus_hotk_check
(
struct
asus_hotk
*
hotk
)
static
int
__init
asus_hotk_check
(
struct
asus_hotk
*
hotk
)
{
{
int
result
=
0
;
int
result
=
0
;
...
@@ -797,7 +845,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
...
@@ -797,7 +845,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
if
(
hotk
->
device
->
status
.
present
)
{
if
(
hotk
->
device
->
status
.
present
)
{
result
=
asus_hotk_get_info
(
hotk
);
result
=
asus_hotk_get_info
(
hotk
);
}
else
{
}
else
{
printk
(
KERN_
NOTICE
" Hotkey device not present, aborting
\n
"
);
printk
(
KERN_
ERR
" Hotkey device not present, aborting
\n
"
);
return
(
-
EINVAL
);
return
(
-
EINVAL
);
}
}
...
@@ -806,7 +854,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
...
@@ -806,7 +854,7 @@ static int asus_hotk_check(struct asus_hotk *hotk)
static
int
asus_hotk_add
(
struct
acpi_device
*
device
)
static
int
__init
asus_hotk_add
(
struct
acpi_device
*
device
)
{
{
struct
asus_hotk
*
hotk
=
NULL
;
struct
asus_hotk
*
hotk
=
NULL
;
acpi_status
status
=
AE_OK
;
acpi_status
status
=
AE_OK
;
...
@@ -815,6 +863,9 @@ static int asus_hotk_add(struct acpi_device *device)
...
@@ -815,6 +863,9 @@ static int asus_hotk_add(struct acpi_device *device)
if
(
!
device
)
if
(
!
device
)
return
(
-
EINVAL
);
return
(
-
EINVAL
);
printk
(
KERN_NOTICE
"Asus Laptop ACPI Extras version %s
\n
"
,
ASUS_ACPI_VERSION
);
hotk
=
hotk
=
(
struct
asus_hotk
*
)
kmalloc
(
sizeof
(
struct
asus_hotk
),
GFP_KERNEL
);
(
struct
asus_hotk
*
)
kmalloc
(
sizeof
(
struct
asus_hotk
),
GFP_KERNEL
);
if
(
!
hotk
)
if
(
!
hotk
)
...
@@ -842,25 +893,23 @@ static int asus_hotk_add(struct acpi_device *device)
...
@@ -842,25 +893,23 @@ static int asus_hotk_add(struct acpi_device *device)
*/
*/
status
=
acpi_install_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
status
=
acpi_install_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
asus_hotk_notify
,
hotk
);
asus_hotk_notify
,
hotk
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_NOTICE
printk
(
KERN_ERR
" Error installing notify handler
\n
"
);
" Error installing notify handler
\n
"
);
}
else
{
printk
(
KERN_DEBUG
" Notify Handler installed successfully
\n
"
);
}
/* For
HOTK laptops
: init the hotk->brightness value */
/* For
laptops without GPLV
: init the hotk->brightness value */
if
((
!
hotk
->
methods
->
brightness_get
)
&&
(
!
hotk
->
methods
->
brightness_status
)
&&
if
((
!
hotk
->
methods
->
brightness_get
)
&&
(
!
hotk
->
methods
->
brightness_status
)
&&
(
hotk
->
methods
->
brightness_up
&&
hotk
->
methods
->
brightness_down
))
{
(
hotk
->
methods
->
brightness_up
&&
hotk
->
methods
->
brightness_down
))
{
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_down
,
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_down
,
NULL
,
NULL
);
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_NOTICE
" Error changing brightness
\n
"
);
printk
(
KERN_WARNING
" Error changing brightness
\n
"
);
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_up
,
else
{
NULL
,
NULL
);
status
=
acpi_evaluate_object
(
NULL
,
hotk
->
methods
->
brightness_up
,
if
(
ACPI_FAILURE
(
status
))
NULL
,
NULL
);
printk
(
KERN_NOTICE
" Error changing brightness
\n
"
);
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_WARNING
" Strange, error changing"
" brightness
\n
"
);
}
}
}
end:
end:
...
@@ -887,7 +936,7 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
...
@@ -887,7 +936,7 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
status
=
acpi_remove_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
status
=
acpi_remove_notify_handler
(
hotk
->
handle
,
ACPI_SYSTEM_NOTIFY
,
asus_hotk_notify
);
asus_hotk_notify
);
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
printk
(
KERN_
NOTICE
"
Error removing notify handler
\n
"
);
printk
(
KERN_
ERR
"Asus ACPI:
Error removing notify handler
\n
"
);
kfree
(
hotk
);
kfree
(
hotk
);
...
@@ -899,35 +948,17 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
...
@@ -899,35 +948,17 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
static
int
__init
asus_acpi_init
(
void
)
static
int
__init
asus_acpi_init
(
void
)
{
{
int
result
=
0
;
int
result
;
acpi_status
status
=
0
;
struct
acpi_buffer
dsdt
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
printk
(
KERN_NOTICE
"Asus Laptop ACPI Extras version %s
\n
"
,
ASUS_ACPI_VERSION
);
/*
* Here is the code to know the model we are running on. We need to
* know this before calling the acpi_bus_register_driver function, in
* case the HID for the laptop we are running on is different from
* ACPI_HOTK_HID, which I have never seen yet :)
*
* This information is then available in the global var asus_info
*/
status
=
acpi_get_table
(
ACPI_TABLE_DSDT
,
1
,
&
dsdt
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_NOTICE
" Couldn't get the DSDT table header
\n
"
);
}
else
{
asus_info
=
(
struct
acpi_table_header
*
)
dsdt
.
pointer
;
}
asus_proc_dir
=
proc_mkdir
(
PROC_ASUS
,
acpi_root_dir
);
asus_proc_dir
=
proc_mkdir
(
PROC_ASUS
,
acpi_root_dir
);
if
(
!
asus_proc_dir
)
if
(
!
asus_proc_dir
)
{
printk
(
KERN_ERR
"Asus ACPI: Unable to create /proc entry"
);
return
(
-
ENODEV
);
return
(
-
ENODEV
);
}
asus_proc_dir
->
owner
=
THIS_MODULE
;
asus_proc_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
asus_hotk_driver
);
result
=
acpi_bus_register_driver
(
&
asus_hotk_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
printk
(
KERN_NOTICE
" Error registering "
ACPI_HOTK_NAME
"
\n
"
);
remove_proc_entry
(
PROC_ASUS
,
acpi_root_dir
);
remove_proc_entry
(
PROC_ASUS
,
acpi_root_dir
);
return
(
-
ENODEV
);
return
(
-
ENODEV
);
}
}
...
...
drivers/acpi/bus.c
View file @
f028ebf3
...
@@ -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
);
...
...
drivers/acpi/dispatcher/dsfield.c
View file @
f028ebf3
...
@@ -105,27 +105,33 @@ acpi_ds_create_buffer_field (
...
@@ -105,27 +105,33 @@ acpi_ds_create_buffer_field (
return_ACPI_STATUS
(
AE_AML_NO_OPERAND
);
return_ACPI_STATUS
(
AE_AML_NO_OPERAND
);
}
}
/*
if
(
walk_state
->
deferred_node
)
{
* During the load phase, we want to enter the name of the field into
node
=
walk_state
->
deferred_node
;
* the namespace. During the execute phase (when we evaluate the size
status
=
AE_OK
;
* operand), we want to lookup the name
*/
if
(
walk_state
->
parse_flags
&
ACPI_PARSE_EXECUTE
)
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
;
}
}
else
{
else
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
|
ACPI_NS_ERROR_IF_FOUND
;
/*
}
* 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
* operand), we want to lookup the name
*/
if
(
walk_state
->
parse_flags
&
ACPI_PARSE_EXECUTE
)
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
;
}
else
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
|
ACPI_NS_ERROR_IF_FOUND
;
}
/*
/*
* Enter the name_string into the namespace
* Enter the name_string into the namespace
*/
*/
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
arg
->
common
.
value
.
string
,
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
arg
->
common
.
value
.
string
,
ACPI_TYPE_ANY
,
ACPI_IMODE_LOAD_PASS1
,
ACPI_TYPE_ANY
,
ACPI_IMODE_LOAD_PASS1
,
flags
,
walk_state
,
&
(
node
));
flags
,
walk_state
,
&
(
node
));
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
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
...
...
drivers/acpi/dispatcher/dsinit.c
View file @
f028ebf3
...
@@ -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 simpl
e
re-parse the method
* Delete the parse tree. We simpl
y
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
);
...
...
drivers/acpi/dispatcher/dsopcode.c
View file @
f028ebf3
...
@@ -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
;
}
}
...
...
drivers/acpi/dispatcher/dsutils.c
View file @
f028ebf3
...
@@ -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,61 +388,77 @@ acpi_ds_create_operand (
...
@@ -389,61 +388,77 @@ acpi_ds_create_operand (
* in name_string
* in name_string
*/
*/
/*
/*
* Differentiate between a namespace "create" operation
* Special handling for buffer_field declarations. This is a deferred
* versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
* opcode that unfortunately defines the field name as the last
* IMODE_EXECUTE) in order to support the creation of
* parameter instead of the first. We get here when we are performing
* namespace objects during the execution of control methods.
* 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.
*/
*/
parent_op
=
arg
->
common
.
parent
;
if
((
walk_state
->
deferred_node
)
&&
op_info
=
acpi_ps_get_opcode_info
(
parent_op
->
common
.
aml_opcode
);
(
walk_state
->
deferred_node
->
type
==
ACPI_TYPE_BUFFER_FIELD
)
&&
if
((
op_info
->
flags
&
AML_NSNODE
)
&&
(
arg_index
!=
0
))
{
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_METHODCALL_OP
)
&&
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
walk_state
->
deferred_node
);
(
parent_op
->
common
.
aml_opcode
!=
AML_REGION_OP
)
&&
status
=
AE_OK
;
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_NAMEPATH_OP
))
{
/* Enter name into namespace if not found */
interpreter_mode
=
ACPI_IMODE_LOAD_PASS2
;
}
else
{
/* Return a failure if name not found */
interpreter_mode
=
ACPI_IMODE_EXECUTE
;
}
}
else
/* All other opcodes */
{
/*
* Differentiate between a namespace "create" operation
* versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
* IMODE_EXECUTE) in order to support the creation of
* namespace objects during the execution of control methods.
*/
parent_op
=
arg
->
common
.
parent
;
op_info
=
acpi_ps_get_opcode_info
(
parent_op
->
common
.
aml_opcode
);
if
((
op_info
->
flags
&
AML_NSNODE
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_METHODCALL_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_REGION_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_NAMEPATH_OP
))
{
/* Enter name into namespace if not found */
interpreter_mode
=
ACPI_IMODE_LOAD_PASS2
;
}
else
{
/* Return a failure if name not found */
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
name_string
,
interpreter_mode
=
ACPI_IMODE_EXECUTE
;
ACPI_TYPE_ANY
,
interpreter_mode
,
ACPI_NS_SEARCH_PARENT
|
ACPI_NS_DONT_OPEN_SCOPE
,
walk_state
,
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
obj_desc
));
/*
* The only case where we pass through (ignore) a NOT_FOUND
* error is for the cond_ref_of opcode.
*/
if
(
status
==
AE_NOT_FOUND
)
{
if
(
parent_op
->
common
.
aml_opcode
==
AML_COND_REF_OF_OP
)
{
/*
* For the Conditional Reference op, it's OK if
* the name is not found; We just need a way to
* indicate this to the interpreter, set the
* object to the root
*/
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
acpi_gbl_root_node
);
status
=
AE_OK
;
}
}
else
{
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
name_string
,
/*
ACPI_TYPE_ANY
,
interpreter_mode
,
* We just plain didn't find it -- which is a
ACPI_NS_SEARCH_PARENT
|
ACPI_NS_DONT_OPEN_SCOPE
,
* very serious error at this point
walk_state
,
*/
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
obj_desc
));
status
=
AE_AML_NAME_NOT_FOUND
;
/*
* The only case where we pass through (ignore) a NOT_FOUND
* error is for the cond_ref_of opcode.
*/
if
(
status
==
AE_NOT_FOUND
)
{
if
(
parent_op
->
common
.
aml_opcode
==
AML_COND_REF_OF_OP
)
{
/*
* For the Conditional Reference op, it's OK if
* the name is not found; We just need a way to
* indicate this to the interpreter, set the
* object to the root
*/
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
acpi_gbl_root_node
);
status
=
AE_OK
;
}
else
{
/*
* We just plain didn't find it -- which is a
* very serious error at this point
*/
status
=
AE_AML_NAME_NOT_FOUND
;
}
}
}
}
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
;
}
}
...
...
drivers/acpi/dispatcher/dswload.c
View file @
f028ebf3
...
@@ -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
;
...
...
drivers/acpi/dispatcher/dswscope.c
View file @
f028ebf3
...
@@ -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] (%
10
s)"
,
"[%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
,
"[
\\
___] (%
10
s)"
,
"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] (%
10
s), 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
);
}
}
...
...
drivers/acpi/dispatcher/dswstate.c
View file @
f028ebf3
...
@@ -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
*
*
...
@@ -927,9 +936,9 @@ acpi_ds_init_aml_walk (
...
@@ -927,9 +936,9 @@ acpi_ds_init_aml_walk (
if
(
method_node
)
{
if
(
method_node
)
{
walk_state
->
parser_state
.
start_node
=
method_node
;
walk_state
->
parser_state
.
start_node
=
method_node
;
walk_state
->
walk_type
=
ACPI_WALK_METHOD
;
walk_state
->
walk_type
=
ACPI_WALK_METHOD
;
walk_state
->
method_node
=
method_node
;
walk_state
->
method_node
=
method_node
;
walk_state
->
method_desc
=
acpi_ns_get_attached_object
(
method_node
);
walk_state
->
method_desc
=
acpi_ns_get_attached_object
(
method_node
);
/* Push start scope on scope stack and make it current */
/* Push start scope on scope stack and make it current */
...
@@ -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
;
}
}
...
@@ -1014,7 +1024,7 @@ acpi_ds_delete_walk_state (
...
@@ -1014,7 +1024,7 @@ acpi_ds_delete_walk_state (
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%p walk still has a scope list
\n
"
,
walk_state
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%p walk still has a scope list
\n
"
,
walk_state
));
}
}
/* Always must free any linked control states */
/* Always must free any linked control states */
while
(
walk_state
->
control_state
)
{
while
(
walk_state
->
control_state
)
{
state
=
walk_state
->
control_state
;
state
=
walk_state
->
control_state
;
...
...
drivers/acpi/ec.c
View file @
f028ebf3
...
@@ -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,7 +412,10 @@ acpi_ec_space_setup (
...
@@ -412,7 +412,10 @@ 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.
*/
*/
*
return_context
=
handler_context
;
if
(
function
==
ACPI_REGION_DEACTIVATE
)
*
return_context
=
NULL
;
else
*
return_context
=
handler_context
;
return
AE_OK
;
return
AE_OK
;
}
}
...
...
drivers/acpi/events/evregion.c
View file @
f028ebf3
...
@@ -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 */
...
...
drivers/acpi/executer/excreate.c
View file @
f028ebf3
...
@@ -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 N
ode from the object stack
*/
/* Get the N
amespace 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
;
}
}
...
...
drivers/acpi/executer/exfldio.c
View file @
f028ebf3
...
@@ -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
));
return_ACPI_STATUS
(
AE_AML_REGION_LIMIT
);
#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
);
#endif
}
}
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
...
...
drivers/acpi/namespace/nsdump.c
View file @
f028ebf3
...
@@ -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
,
...
...
drivers/acpi/namespace/nssearch.c
View file @
f028ebf3
...
@@ -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
));
...
...
drivers/acpi/namespace/nsutils.c
View file @
f028ebf3
...
@@ -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
,
"
r
eturning [%p] (abs)
\"\\
%s
\"\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
R
eturning [%p] (abs)
\"\\
%s
\"\n
"
,
internal_name
,
internal_name
));
internal_name
,
internal_name
));
}
}
else
{
else
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
r
eturning [%p] (rel)
\"
%s
\"\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
R
eturning [%p] (rel)
\"
%s
\"\n
"
,
internal_name
,
internal_name
));
internal_name
,
internal_name
));
}
}
...
...
drivers/acpi/parser/psparse.c
View file @
f028ebf3
...
@@ -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
;
}
}
...
...
drivers/acpi/pci_irq.c
View file @
f028ebf3
...
@@ -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).
...
...
drivers/acpi/pci_link.c
View file @
f028ebf3
...
@@ -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,16 +500,16 @@ static int acpi_pci_link_allocate(struct acpi_pci_link* link) {
...
@@ -456,16 +500,16 @@ 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
* the use of IRQs 9, 10, 11, and >15.
* the use of IRQs 9, 10, 11, and >15.
*/
*/
for
(
i
=
(
link
->
irq
.
possible_count
-
1
);
i
>
0
;
i
--
)
{
for
(
i
=
(
link
->
irq
.
possible_count
-
1
);
i
>
0
;
i
--
)
{
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 */
...
...
drivers/acpi/tables.c
View file @
f028ebf3
...
@@ -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
];
}
}
...
...
include/acpi/acconfig.h
View file @
f028ebf3
...
@@ -64,7 +64,7 @@
...
@@ -64,7 +64,7 @@
/* Version string */
/* Version string */
#define ACPI_CA_VERSION 0x20030
813
#define ACPI_CA_VERSION 0x20030
918
/* Maximum objects in the various object caches */
/* Maximum objects in the various object caches */
...
...
include/acpi/acdisasm.h
View file @
f028ebf3
...
@@ -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
);
...
...
include/acpi/acstruct.h
View file @
f028ebf3
...
@@ -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 */
...
...
include/linux/acpi.h
View file @
f028ebf3
...
@@ -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*/
init/do_mounts.h
View file @
f028ebf3
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment